Annotation of embedaddon/php/ext/sqlite3/libsqlite/sqlite3.c, revision 1.1.1.3

1.1       misho       1: #if defined(_MSC_VER) && _MSC_VER < 1300
                      2: #pragma optimize("", off)
                      3: #endif
                      4: 
                      5: /******************************************************************************
                      6: ** This file is an amalgamation of many separate C source files from SQLite
                      7: ** version 3.7.7.1.  By combining all the individual C code files into this 
                      8: ** single large file, the entire code can be compiled as a single translation
                      9: ** unit.  This allows many compilers to do optimizations that would not be
                     10: ** possible if the files were compiled separately.  Performance improvements
                     11: ** of 5% or more are commonly seen when SQLite is compiled as a single
                     12: ** translation unit.
                     13: **
                     14: ** This file is all you need to compile SQLite.  To use SQLite in other
                     15: ** programs, you need this file and the "sqlite3.h" header file that defines
                     16: ** the programming interface to the SQLite library.  (If you do not have 
                     17: ** the "sqlite3.h" header file at hand, you will find a copy embedded within
                     18: ** the text of this file.  Search for "Begin file sqlite3.h" to find the start
                     19: ** of the embedded sqlite3.h header file.) Additional code files may be needed
                     20: ** if you want a wrapper to interface SQLite with your choice of programming
                     21: ** language. The code for the "sqlite3" command-line shell is also in a
                     22: ** separate file. This file contains only code for the core SQLite library.
                     23: */
                     24: #define SQLITE_CORE 1
                     25: #define SQLITE_AMALGAMATION 1
                     26: #ifndef SQLITE_PRIVATE
                     27: # define SQLITE_PRIVATE static
                     28: #endif
                     29: #ifndef SQLITE_API
                     30: # define SQLITE_API
                     31: #endif
                     32: /************** Begin file sqliteInt.h ***************************************/
                     33: /*
                     34: ** 2001 September 15
                     35: **
                     36: ** The author disclaims copyright to this source code.  In place of
                     37: ** a legal notice, here is a blessing:
                     38: **
                     39: **    May you do good and not evil.
                     40: **    May you find forgiveness for yourself and forgive others.
                     41: **    May you share freely, never taking more than you give.
                     42: **
                     43: *************************************************************************
                     44: ** Internal interface definitions for SQLite.
                     45: **
                     46: */
                     47: #ifndef _SQLITEINT_H_
                     48: #define _SQLITEINT_H_
                     49: 
                     50: /*
                     51: ** These #defines should enable >2GB file support on POSIX if the
                     52: ** underlying operating system supports it.  If the OS lacks
                     53: ** large file support, or if the OS is windows, these should be no-ops.
                     54: **
                     55: ** Ticket #2739:  The _LARGEFILE_SOURCE macro must appear before any
                     56: ** system #includes.  Hence, this block of code must be the very first
                     57: ** code in all source files.
                     58: **
                     59: ** Large file support can be disabled using the -DSQLITE_DISABLE_LFS switch
                     60: ** on the compiler command line.  This is necessary if you are compiling
                     61: ** on a recent machine (ex: Red Hat 7.2) but you want your code to work
                     62: ** on an older machine (ex: Red Hat 6.0).  If you compile on Red Hat 7.2
                     63: ** without this option, LFS is enable.  But LFS does not exist in the kernel
                     64: ** in Red Hat 6.0, so the code won't work.  Hence, for maximum binary
                     65: ** portability you should omit LFS.
                     66: **
                     67: ** Similar is true for Mac OS X.  LFS is only supported on Mac OS X 9 and later.
                     68: */
                     69: #ifndef SQLITE_DISABLE_LFS
                     70: # define _LARGE_FILE       1
                     71: # ifndef _FILE_OFFSET_BITS
                     72: #   define _FILE_OFFSET_BITS 64
                     73: # endif
                     74: # define _LARGEFILE_SOURCE 1
                     75: #endif
                     76: 
                     77: /*
                     78: ** Include the configuration header output by 'configure' if we're using the
                     79: ** autoconf-based build
                     80: */
                     81: #ifdef _HAVE_SQLITE_CONFIG_H
                     82: #include "config.h"
                     83: #endif
                     84: 
                     85: /************** Include sqliteLimit.h in the middle of sqliteInt.h ***********/
                     86: /************** Begin file sqliteLimit.h *************************************/
                     87: /*
                     88: ** 2007 May 7
                     89: **
                     90: ** The author disclaims copyright to this source code.  In place of
                     91: ** a legal notice, here is a blessing:
                     92: **
                     93: **    May you do good and not evil.
                     94: **    May you find forgiveness for yourself and forgive others.
                     95: **    May you share freely, never taking more than you give.
                     96: **
                     97: *************************************************************************
                     98: ** 
                     99: ** This file defines various limits of what SQLite can process.
                    100: */
                    101: 
                    102: /*
                    103: ** The maximum length of a TEXT or BLOB in bytes.   This also
                    104: ** limits the size of a row in a table or index.
                    105: **
                    106: ** The hard limit is the ability of a 32-bit signed integer
                    107: ** to count the size: 2^31-1 or 2147483647.
                    108: */
                    109: #ifndef SQLITE_MAX_LENGTH
                    110: # define SQLITE_MAX_LENGTH 1000000000
                    111: #endif
                    112: 
                    113: /*
                    114: ** This is the maximum number of
                    115: **
                    116: **    * Columns in a table
                    117: **    * Columns in an index
                    118: **    * Columns in a view
                    119: **    * Terms in the SET clause of an UPDATE statement
                    120: **    * Terms in the result set of a SELECT statement
                    121: **    * Terms in the GROUP BY or ORDER BY clauses of a SELECT statement.
                    122: **    * Terms in the VALUES clause of an INSERT statement
                    123: **
                    124: ** The hard upper limit here is 32676.  Most database people will
                    125: ** tell you that in a well-normalized database, you usually should
                    126: ** not have more than a dozen or so columns in any table.  And if
                    127: ** that is the case, there is no point in having more than a few
                    128: ** dozen values in any of the other situations described above.
                    129: */
                    130: #ifndef SQLITE_MAX_COLUMN
                    131: # define SQLITE_MAX_COLUMN 2000
                    132: #endif
                    133: 
                    134: /*
                    135: ** The maximum length of a single SQL statement in bytes.
                    136: **
                    137: ** It used to be the case that setting this value to zero would
                    138: ** turn the limit off.  That is no longer true.  It is not possible
                    139: ** to turn this limit off.
                    140: */
                    141: #ifndef SQLITE_MAX_SQL_LENGTH
                    142: # define SQLITE_MAX_SQL_LENGTH 1000000000
                    143: #endif
                    144: 
                    145: /*
                    146: ** The maximum depth of an expression tree. This is limited to 
                    147: ** some extent by SQLITE_MAX_SQL_LENGTH. But sometime you might 
                    148: ** want to place more severe limits on the complexity of an 
                    149: ** expression.
                    150: **
                    151: ** A value of 0 used to mean that the limit was not enforced.
                    152: ** But that is no longer true.  The limit is now strictly enforced
                    153: ** at all times.
                    154: */
                    155: #ifndef SQLITE_MAX_EXPR_DEPTH
                    156: # define SQLITE_MAX_EXPR_DEPTH 1000
                    157: #endif
                    158: 
                    159: /*
                    160: ** The maximum number of terms in a compound SELECT statement.
                    161: ** The code generator for compound SELECT statements does one
                    162: ** level of recursion for each term.  A stack overflow can result
                    163: ** if the number of terms is too large.  In practice, most SQL
                    164: ** never has more than 3 or 4 terms.  Use a value of 0 to disable
                    165: ** any limit on the number of terms in a compount SELECT.
                    166: */
                    167: #ifndef SQLITE_MAX_COMPOUND_SELECT
                    168: # define SQLITE_MAX_COMPOUND_SELECT 500
                    169: #endif
                    170: 
                    171: /*
                    172: ** The maximum number of opcodes in a VDBE program.
                    173: ** Not currently enforced.
                    174: */
                    175: #ifndef SQLITE_MAX_VDBE_OP
                    176: # define SQLITE_MAX_VDBE_OP 25000
                    177: #endif
                    178: 
                    179: /*
                    180: ** The maximum number of arguments to an SQL function.
                    181: */
                    182: #ifndef SQLITE_MAX_FUNCTION_ARG
                    183: # define SQLITE_MAX_FUNCTION_ARG 127
                    184: #endif
                    185: 
                    186: /*
                    187: ** The maximum number of in-memory pages to use for the main database
                    188: ** table and for temporary tables.  The SQLITE_DEFAULT_CACHE_SIZE
                    189: */
                    190: #ifndef SQLITE_DEFAULT_CACHE_SIZE
                    191: # define SQLITE_DEFAULT_CACHE_SIZE  2000
                    192: #endif
                    193: #ifndef SQLITE_DEFAULT_TEMP_CACHE_SIZE
                    194: # define SQLITE_DEFAULT_TEMP_CACHE_SIZE  500
                    195: #endif
                    196: 
                    197: /*
                    198: ** The default number of frames to accumulate in the log file before
                    199: ** checkpointing the database in WAL mode.
                    200: */
                    201: #ifndef SQLITE_DEFAULT_WAL_AUTOCHECKPOINT
                    202: # define SQLITE_DEFAULT_WAL_AUTOCHECKPOINT  1000
                    203: #endif
                    204: 
                    205: /*
                    206: ** The maximum number of attached databases.  This must be between 0
                    207: ** and 62.  The upper bound on 62 is because a 64-bit integer bitmap
                    208: ** is used internally to track attached databases.
                    209: */
                    210: #ifndef SQLITE_MAX_ATTACHED
                    211: # define SQLITE_MAX_ATTACHED 10
                    212: #endif
                    213: 
                    214: 
                    215: /*
                    216: ** The maximum value of a ?nnn wildcard that the parser will accept.
                    217: */
                    218: #ifndef SQLITE_MAX_VARIABLE_NUMBER
                    219: # define SQLITE_MAX_VARIABLE_NUMBER 999
                    220: #endif
                    221: 
                    222: /* Maximum page size.  The upper bound on this value is 65536.  This a limit
                    223: ** imposed by the use of 16-bit offsets within each page.
                    224: **
                    225: ** Earlier versions of SQLite allowed the user to change this value at
                    226: ** compile time. This is no longer permitted, on the grounds that it creates
                    227: ** a library that is technically incompatible with an SQLite library 
                    228: ** compiled with a different limit. If a process operating on a database 
                    229: ** with a page-size of 65536 bytes crashes, then an instance of SQLite 
                    230: ** compiled with the default page-size limit will not be able to rollback 
                    231: ** the aborted transaction. This could lead to database corruption.
                    232: */
                    233: #ifdef SQLITE_MAX_PAGE_SIZE
                    234: # undef SQLITE_MAX_PAGE_SIZE
                    235: #endif
                    236: #define SQLITE_MAX_PAGE_SIZE 65536
                    237: 
                    238: 
                    239: /*
                    240: ** The default size of a database page.
                    241: */
                    242: #ifndef SQLITE_DEFAULT_PAGE_SIZE
                    243: # define SQLITE_DEFAULT_PAGE_SIZE 1024
                    244: #endif
                    245: #if SQLITE_DEFAULT_PAGE_SIZE>SQLITE_MAX_PAGE_SIZE
                    246: # undef SQLITE_DEFAULT_PAGE_SIZE
                    247: # define SQLITE_DEFAULT_PAGE_SIZE SQLITE_MAX_PAGE_SIZE
                    248: #endif
                    249: 
                    250: /*
                    251: ** Ordinarily, if no value is explicitly provided, SQLite creates databases
                    252: ** with page size SQLITE_DEFAULT_PAGE_SIZE. However, based on certain
                    253: ** device characteristics (sector-size and atomic write() support),
                    254: ** SQLite may choose a larger value. This constant is the maximum value
                    255: ** SQLite will choose on its own.
                    256: */
                    257: #ifndef SQLITE_MAX_DEFAULT_PAGE_SIZE
                    258: # define SQLITE_MAX_DEFAULT_PAGE_SIZE 8192
                    259: #endif
                    260: #if SQLITE_MAX_DEFAULT_PAGE_SIZE>SQLITE_MAX_PAGE_SIZE
                    261: # undef SQLITE_MAX_DEFAULT_PAGE_SIZE
                    262: # define SQLITE_MAX_DEFAULT_PAGE_SIZE SQLITE_MAX_PAGE_SIZE
                    263: #endif
                    264: 
                    265: 
                    266: /*
                    267: ** Maximum number of pages in one database file.
                    268: **
                    269: ** This is really just the default value for the max_page_count pragma.
                    270: ** This value can be lowered (or raised) at run-time using that the
                    271: ** max_page_count macro.
                    272: */
                    273: #ifndef SQLITE_MAX_PAGE_COUNT
                    274: # define SQLITE_MAX_PAGE_COUNT 1073741823
                    275: #endif
                    276: 
                    277: /*
                    278: ** Maximum length (in bytes) of the pattern in a LIKE or GLOB
                    279: ** operator.
                    280: */
                    281: #ifndef SQLITE_MAX_LIKE_PATTERN_LENGTH
                    282: # define SQLITE_MAX_LIKE_PATTERN_LENGTH 50000
                    283: #endif
                    284: 
                    285: /*
                    286: ** Maximum depth of recursion for triggers.
                    287: **
                    288: ** A value of 1 means that a trigger program will not be able to itself
                    289: ** fire any triggers. A value of 0 means that no trigger programs at all 
                    290: ** may be executed.
                    291: */
                    292: #ifndef SQLITE_MAX_TRIGGER_DEPTH
                    293: # define SQLITE_MAX_TRIGGER_DEPTH 1000
                    294: #endif
                    295: 
                    296: /************** End of sqliteLimit.h *****************************************/
                    297: /************** Continuing where we left off in sqliteInt.h ******************/
                    298: 
                    299: /* Disable nuisance warnings on Borland compilers */
                    300: #if defined(__BORLANDC__)
                    301: #pragma warn -rch /* unreachable code */
                    302: #pragma warn -ccc /* Condition is always true or false */
                    303: #pragma warn -aus /* Assigned value is never used */
                    304: #pragma warn -csu /* Comparing signed and unsigned */
                    305: #pragma warn -spa /* Suspicious pointer arithmetic */
                    306: #endif
                    307: 
                    308: /* Needed for various definitions... */
                    309: #ifndef _GNU_SOURCE
                    310: # define _GNU_SOURCE
                    311: #endif
                    312: 
                    313: /*
                    314: ** Include standard header files as necessary
                    315: */
                    316: #ifdef HAVE_STDINT_H
                    317: #include <stdint.h>
                    318: #endif
                    319: #ifdef HAVE_INTTYPES_H
                    320: #include <inttypes.h>
                    321: #endif
                    322: 
                    323: /*
                    324: ** The number of samples of an index that SQLite takes in order to 
                    325: ** construct a histogram of the table content when running ANALYZE
                    326: ** and with SQLITE_ENABLE_STAT2
                    327: */
                    328: #define SQLITE_INDEX_SAMPLES 10
                    329: 
                    330: /*
                    331: ** The following macros are used to cast pointers to integers and
                    332: ** integers to pointers.  The way you do this varies from one compiler
                    333: ** to the next, so we have developed the following set of #if statements
                    334: ** to generate appropriate macros for a wide range of compilers.
                    335: **
                    336: ** The correct "ANSI" way to do this is to use the intptr_t type. 
                    337: ** Unfortunately, that typedef is not available on all compilers, or
                    338: ** if it is available, it requires an #include of specific headers
                    339: ** that vary from one machine to the next.
                    340: **
                    341: ** Ticket #3860:  The llvm-gcc-4.2 compiler from Apple chokes on
                    342: ** the ((void*)&((char*)0)[X]) construct.  But MSVC chokes on ((void*)(X)).
                    343: ** So we have to define the macros in different ways depending on the
                    344: ** compiler.
                    345: */
                    346: #if defined(__PTRDIFF_TYPE__)  /* This case should work for GCC */
                    347: # define SQLITE_INT_TO_PTR(X)  ((void*)(__PTRDIFF_TYPE__)(X))
                    348: # define SQLITE_PTR_TO_INT(X)  ((int)(__PTRDIFF_TYPE__)(X))
                    349: #elif !defined(__GNUC__)       /* Works for compilers other than LLVM */
                    350: # define SQLITE_INT_TO_PTR(X)  ((void*)&((char*)0)[X])
                    351: # define SQLITE_PTR_TO_INT(X)  ((int)(((char*)X)-(char*)0))
                    352: #elif defined(HAVE_STDINT_H)   /* Use this case if we have ANSI headers */
                    353: # define SQLITE_INT_TO_PTR(X)  ((void*)(intptr_t)(X))
                    354: # define SQLITE_PTR_TO_INT(X)  ((int)(intptr_t)(X))
                    355: #else                          /* Generates a warning - but it always works */
                    356: # define SQLITE_INT_TO_PTR(X)  ((void*)(X))
                    357: # define SQLITE_PTR_TO_INT(X)  ((int)(X))
                    358: #endif
                    359: 
                    360: /*
                    361: ** The SQLITE_THREADSAFE macro must be defined as 0, 1, or 2.
                    362: ** 0 means mutexes are permanently disable and the library is never
                    363: ** threadsafe.  1 means the library is serialized which is the highest
1.1.1.3 ! misho     364: ** level of threadsafety.  2 means the library is multithreaded - multiple
1.1       misho     365: ** threads can use SQLite as long as no two threads try to use the same
                    366: ** database connection at the same time.
                    367: **
                    368: ** Older versions of SQLite used an optional THREADSAFE macro.
                    369: ** We support that for legacy.
                    370: */
                    371: #if !defined(SQLITE_THREADSAFE)
                    372: #if defined(THREADSAFE)
                    373: # define SQLITE_THREADSAFE THREADSAFE
                    374: #else
                    375: # define SQLITE_THREADSAFE 1 /* IMP: R-07272-22309 */
                    376: #endif
                    377: #endif
                    378: 
                    379: /*
                    380: ** The SQLITE_DEFAULT_MEMSTATUS macro must be defined as either 0 or 1.
                    381: ** It determines whether or not the features related to 
                    382: ** SQLITE_CONFIG_MEMSTATUS are available by default or not. This value can
                    383: ** be overridden at runtime using the sqlite3_config() API.
                    384: */
                    385: #if !defined(SQLITE_DEFAULT_MEMSTATUS)
                    386: # define SQLITE_DEFAULT_MEMSTATUS 1
                    387: #endif
                    388: 
                    389: /*
                    390: ** Exactly one of the following macros must be defined in order to
                    391: ** specify which memory allocation subsystem to use.
                    392: **
                    393: **     SQLITE_SYSTEM_MALLOC          // Use normal system malloc()
                    394: **     SQLITE_MEMDEBUG               // Debugging version of system malloc()
                    395: **
                    396: ** (Historical note:  There used to be several other options, but we've
                    397: ** pared it down to just these two.)
                    398: **
                    399: ** If none of the above are defined, then set SQLITE_SYSTEM_MALLOC as
                    400: ** the default.
                    401: */
                    402: #if defined(SQLITE_SYSTEM_MALLOC)+defined(SQLITE_MEMDEBUG)>1
                    403: # error "At most one of the following compile-time configuration options\
                    404:  is allows: SQLITE_SYSTEM_MALLOC, SQLITE_MEMDEBUG"
                    405: #endif
                    406: #if defined(SQLITE_SYSTEM_MALLOC)+defined(SQLITE_MEMDEBUG)==0
                    407: # define SQLITE_SYSTEM_MALLOC 1
                    408: #endif
                    409: 
                    410: /*
                    411: ** If SQLITE_MALLOC_SOFT_LIMIT is not zero, then try to keep the
                    412: ** sizes of memory allocations below this value where possible.
                    413: */
                    414: #if !defined(SQLITE_MALLOC_SOFT_LIMIT)
                    415: # define SQLITE_MALLOC_SOFT_LIMIT 1024
                    416: #endif
                    417: 
                    418: /*
                    419: ** We need to define _XOPEN_SOURCE as follows in order to enable
                    420: ** recursive mutexes on most Unix systems.  But Mac OS X is different.
                    421: ** The _XOPEN_SOURCE define causes problems for Mac OS X we are told,
                    422: ** so it is omitted there.  See ticket #2673.
                    423: **
                    424: ** Later we learn that _XOPEN_SOURCE is poorly or incorrectly
                    425: ** implemented on some systems.  So we avoid defining it at all
                    426: ** if it is already defined or if it is unneeded because we are
                    427: ** not doing a threadsafe build.  Ticket #2681.
                    428: **
                    429: ** See also ticket #2741.
                    430: */
                    431: #if !defined(_XOPEN_SOURCE) && !defined(__DARWIN__) && !defined(__APPLE__) && SQLITE_THREADSAFE
                    432: #  define _XOPEN_SOURCE 500  /* Needed to enable pthread recursive mutexes */
                    433: #endif
                    434: 
                    435: /*
                    436: ** The TCL headers are only needed when compiling the TCL bindings.
                    437: */
                    438: #if defined(SQLITE_TCL) || defined(TCLSH)
                    439: # include <tcl.h>
                    440: #endif
                    441: 
                    442: /*
                    443: ** Many people are failing to set -DNDEBUG=1 when compiling SQLite.
                    444: ** Setting NDEBUG makes the code smaller and run faster.  So the following
                    445: ** lines are added to automatically set NDEBUG unless the -DSQLITE_DEBUG=1
                    446: ** option is set.  Thus NDEBUG becomes an opt-in rather than an opt-out
                    447: ** feature.
                    448: */
                    449: #if !defined(NDEBUG) && !defined(SQLITE_DEBUG) 
                    450: # define NDEBUG 1
                    451: #endif
                    452: 
                    453: /*
                    454: ** The testcase() macro is used to aid in coverage testing.  When 
                    455: ** doing coverage testing, the condition inside the argument to
                    456: ** testcase() must be evaluated both true and false in order to
                    457: ** get full branch coverage.  The testcase() macro is inserted
                    458: ** to help ensure adequate test coverage in places where simple
                    459: ** condition/decision coverage is inadequate.  For example, testcase()
                    460: ** can be used to make sure boundary values are tested.  For
                    461: ** bitmask tests, testcase() can be used to make sure each bit
                    462: ** is significant and used at least once.  On switch statements
                    463: ** where multiple cases go to the same block of code, testcase()
                    464: ** can insure that all cases are evaluated.
                    465: **
                    466: */
                    467: #ifdef SQLITE_COVERAGE_TEST
                    468: SQLITE_PRIVATE   void sqlite3Coverage(int);
                    469: # define testcase(X)  if( X ){ sqlite3Coverage(__LINE__); }
                    470: #else
                    471: # define testcase(X)
                    472: #endif
                    473: 
                    474: /*
                    475: ** The TESTONLY macro is used to enclose variable declarations or
                    476: ** other bits of code that are needed to support the arguments
                    477: ** within testcase() and assert() macros.
                    478: */
                    479: #if !defined(NDEBUG) || defined(SQLITE_COVERAGE_TEST)
                    480: # define TESTONLY(X)  X
                    481: #else
                    482: # define TESTONLY(X)
                    483: #endif
                    484: 
                    485: /*
                    486: ** Sometimes we need a small amount of code such as a variable initialization
                    487: ** to setup for a later assert() statement.  We do not want this code to
                    488: ** appear when assert() is disabled.  The following macro is therefore
                    489: ** used to contain that setup code.  The "VVA" acronym stands for
                    490: ** "Verification, Validation, and Accreditation".  In other words, the
                    491: ** code within VVA_ONLY() will only run during verification processes.
                    492: */
                    493: #ifndef NDEBUG
                    494: # define VVA_ONLY(X)  X
                    495: #else
                    496: # define VVA_ONLY(X)
                    497: #endif
                    498: 
                    499: /*
                    500: ** The ALWAYS and NEVER macros surround boolean expressions which 
                    501: ** are intended to always be true or false, respectively.  Such
                    502: ** expressions could be omitted from the code completely.  But they
                    503: ** are included in a few cases in order to enhance the resilience
                    504: ** of SQLite to unexpected behavior - to make the code "self-healing"
                    505: ** or "ductile" rather than being "brittle" and crashing at the first
                    506: ** hint of unplanned behavior.
                    507: **
                    508: ** In other words, ALWAYS and NEVER are added for defensive code.
                    509: **
                    510: ** When doing coverage testing ALWAYS and NEVER are hard-coded to
                    511: ** be true and false so that the unreachable code then specify will
                    512: ** not be counted as untested code.
                    513: */
                    514: #if defined(SQLITE_COVERAGE_TEST)
                    515: # define ALWAYS(X)      (1)
                    516: # define NEVER(X)       (0)
                    517: #elif !defined(NDEBUG)
                    518: # define ALWAYS(X)      ((X)?1:(assert(0),0))
                    519: # define NEVER(X)       ((X)?(assert(0),1):0)
                    520: #else
                    521: # define ALWAYS(X)      (X)
                    522: # define NEVER(X)       (X)
                    523: #endif
                    524: 
                    525: /*
                    526: ** Return true (non-zero) if the input is a integer that is too large
                    527: ** to fit in 32-bits.  This macro is used inside of various testcase()
                    528: ** macros to verify that we have tested SQLite for large-file support.
                    529: */
                    530: #define IS_BIG_INT(X)  (((X)&~(i64)0xffffffff)!=0)
                    531: 
                    532: /*
                    533: ** The macro unlikely() is a hint that surrounds a boolean
                    534: ** expression that is usually false.  Macro likely() surrounds
                    535: ** a boolean expression that is usually true.  GCC is able to
                    536: ** use these hints to generate better code, sometimes.
                    537: */
                    538: #if defined(__GNUC__) && 0
                    539: # define likely(X)    __builtin_expect((X),1)
                    540: # define unlikely(X)  __builtin_expect((X),0)
                    541: #else
                    542: # define likely(X)    !!(X)
                    543: # define unlikely(X)  !!(X)
                    544: #endif
                    545: 
                    546: /************** Include sqlite3.h in the middle of sqliteInt.h ***************/
                    547: /************** Begin file sqlite3.h *****************************************/
                    548: /*
                    549: ** 2001 September 15
                    550: **
                    551: ** The author disclaims copyright to this source code.  In place of
                    552: ** a legal notice, here is a blessing:
                    553: **
                    554: **    May you do good and not evil.
                    555: **    May you find forgiveness for yourself and forgive others.
                    556: **    May you share freely, never taking more than you give.
                    557: **
                    558: *************************************************************************
                    559: ** This header file defines the interface that the SQLite library
                    560: ** presents to client programs.  If a C-function, structure, datatype,
                    561: ** or constant definition does not appear in this file, then it is
                    562: ** not a published API of SQLite, is subject to change without
                    563: ** notice, and should not be referenced by programs that use SQLite.
                    564: **
                    565: ** Some of the definitions that are in this file are marked as
                    566: ** "experimental".  Experimental interfaces are normally new
                    567: ** features recently added to SQLite.  We do not anticipate changes
                    568: ** to experimental interfaces but reserve the right to make minor changes
                    569: ** if experience from use "in the wild" suggest such changes are prudent.
                    570: **
                    571: ** The official C-language API documentation for SQLite is derived
                    572: ** from comments in this file.  This file is the authoritative source
                    573: ** on how SQLite interfaces are suppose to operate.
                    574: **
                    575: ** The name of this file under configuration management is "sqlite.h.in".
                    576: ** The makefile makes some minor changes to this file (such as inserting
                    577: ** the version number) and changes its name to "sqlite3.h" as
                    578: ** part of the build process.
                    579: */
                    580: #ifndef _SQLITE3_H_
                    581: #define _SQLITE3_H_
                    582: #include <stdarg.h>     /* Needed for the definition of va_list */
                    583: 
                    584: /*
                    585: ** Make sure we can call this stuff from C++.
                    586: */
                    587: #if 0
                    588: extern "C" {
                    589: #endif
                    590: 
                    591: 
                    592: /*
                    593: ** Add the ability to override 'extern'
                    594: */
                    595: #ifndef SQLITE_EXTERN
                    596: # define SQLITE_EXTERN extern
                    597: #endif
                    598: 
                    599: #ifndef SQLITE_API
                    600: # define SQLITE_API
                    601: #endif
                    602: 
                    603: 
                    604: /*
                    605: ** These no-op macros are used in front of interfaces to mark those
                    606: ** interfaces as either deprecated or experimental.  New applications
                    607: ** should not use deprecated interfaces - they are support for backwards
                    608: ** compatibility only.  Application writers should be aware that
                    609: ** experimental interfaces are subject to change in point releases.
                    610: **
                    611: ** These macros used to resolve to various kinds of compiler magic that
                    612: ** would generate warning messages when they were used.  But that
                    613: ** compiler magic ended up generating such a flurry of bug reports
                    614: ** that we have taken it all out and gone back to using simple
                    615: ** noop macros.
                    616: */
                    617: #define SQLITE_DEPRECATED
                    618: #define SQLITE_EXPERIMENTAL
                    619: 
                    620: /*
                    621: ** Ensure these symbols were not defined by some previous header file.
                    622: */
                    623: #ifdef SQLITE_VERSION
                    624: # undef SQLITE_VERSION
                    625: #endif
                    626: #ifdef SQLITE_VERSION_NUMBER
                    627: # undef SQLITE_VERSION_NUMBER
                    628: #endif
                    629: 
                    630: /*
                    631: ** CAPI3REF: Compile-Time Library Version Numbers
                    632: **
                    633: ** ^(The [SQLITE_VERSION] C preprocessor macro in the sqlite3.h header
                    634: ** evaluates to a string literal that is the SQLite version in the
                    635: ** format "X.Y.Z" where X is the major version number (always 3 for
                    636: ** SQLite3) and Y is the minor version number and Z is the release number.)^
                    637: ** ^(The [SQLITE_VERSION_NUMBER] C preprocessor macro resolves to an integer
                    638: ** with the value (X*1000000 + Y*1000 + Z) where X, Y, and Z are the same
                    639: ** numbers used in [SQLITE_VERSION].)^
                    640: ** The SQLITE_VERSION_NUMBER for any given release of SQLite will also
                    641: ** be larger than the release from which it is derived.  Either Y will
                    642: ** be held constant and Z will be incremented or else Y will be incremented
                    643: ** and Z will be reset to zero.
                    644: **
                    645: ** Since version 3.6.18, SQLite source code has been stored in the
                    646: ** <a href="http://www.fossil-scm.org/">Fossil configuration management
                    647: ** system</a>.  ^The SQLITE_SOURCE_ID macro evaluates to
                    648: ** a string which identifies a particular check-in of SQLite
                    649: ** within its configuration management system.  ^The SQLITE_SOURCE_ID
                    650: ** string contains the date and time of the check-in (UTC) and an SHA1
                    651: ** hash of the entire source tree.
                    652: **
                    653: ** See also: [sqlite3_libversion()],
                    654: ** [sqlite3_libversion_number()], [sqlite3_sourceid()],
                    655: ** [sqlite_version()] and [sqlite_source_id()].
                    656: */
                    657: #define SQLITE_VERSION        "3.7.7.1"
                    658: #define SQLITE_VERSION_NUMBER 3007007
                    659: #define SQLITE_SOURCE_ID      "2011-06-28 17:39:05 af0d91adf497f5f36ec3813f04235a6e195a605f"
                    660: 
                    661: /*
                    662: ** CAPI3REF: Run-Time Library Version Numbers
                    663: ** KEYWORDS: sqlite3_version, sqlite3_sourceid
                    664: **
                    665: ** These interfaces provide the same information as the [SQLITE_VERSION],
                    666: ** [SQLITE_VERSION_NUMBER], and [SQLITE_SOURCE_ID] C preprocessor macros
                    667: ** but are associated with the library instead of the header file.  ^(Cautious
                    668: ** programmers might include assert() statements in their application to
                    669: ** verify that values returned by these interfaces match the macros in
                    670: ** the header, and thus insure that the application is
                    671: ** compiled with matching library and header files.
                    672: **
                    673: ** <blockquote><pre>
                    674: ** assert( sqlite3_libversion_number()==SQLITE_VERSION_NUMBER );
                    675: ** assert( strcmp(sqlite3_sourceid(),SQLITE_SOURCE_ID)==0 );
                    676: ** assert( strcmp(sqlite3_libversion(),SQLITE_VERSION)==0 );
                    677: ** </pre></blockquote>)^
                    678: **
                    679: ** ^The sqlite3_version[] string constant contains the text of [SQLITE_VERSION]
                    680: ** macro.  ^The sqlite3_libversion() function returns a pointer to the
                    681: ** to the sqlite3_version[] string constant.  The sqlite3_libversion()
                    682: ** function is provided for use in DLLs since DLL users usually do not have
                    683: ** direct access to string constants within the DLL.  ^The
                    684: ** sqlite3_libversion_number() function returns an integer equal to
                    685: ** [SQLITE_VERSION_NUMBER].  ^The sqlite3_sourceid() function returns 
                    686: ** a pointer to a string constant whose value is the same as the 
                    687: ** [SQLITE_SOURCE_ID] C preprocessor macro.
                    688: **
                    689: ** See also: [sqlite_version()] and [sqlite_source_id()].
                    690: */
                    691: SQLITE_API const char sqlite3_version[] = SQLITE_VERSION;
                    692: SQLITE_API const char *sqlite3_libversion(void);
                    693: SQLITE_API const char *sqlite3_sourceid(void);
                    694: SQLITE_API int sqlite3_libversion_number(void);
                    695: 
                    696: /*
                    697: ** CAPI3REF: Run-Time Library Compilation Options Diagnostics
                    698: **
                    699: ** ^The sqlite3_compileoption_used() function returns 0 or 1 
                    700: ** indicating whether the specified option was defined at 
                    701: ** compile time.  ^The SQLITE_ prefix may be omitted from the 
                    702: ** option name passed to sqlite3_compileoption_used().  
                    703: **
                    704: ** ^The sqlite3_compileoption_get() function allows iterating
                    705: ** over the list of options that were defined at compile time by
                    706: ** returning the N-th compile time option string.  ^If N is out of range,
                    707: ** sqlite3_compileoption_get() returns a NULL pointer.  ^The SQLITE_ 
                    708: ** prefix is omitted from any strings returned by 
                    709: ** sqlite3_compileoption_get().
                    710: **
                    711: ** ^Support for the diagnostic functions sqlite3_compileoption_used()
                    712: ** and sqlite3_compileoption_get() may be omitted by specifying the 
                    713: ** [SQLITE_OMIT_COMPILEOPTION_DIAGS] option at compile time.
                    714: **
                    715: ** See also: SQL functions [sqlite_compileoption_used()] and
                    716: ** [sqlite_compileoption_get()] and the [compile_options pragma].
                    717: */
                    718: #ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
                    719: SQLITE_API int sqlite3_compileoption_used(const char *zOptName);
                    720: SQLITE_API const char *sqlite3_compileoption_get(int N);
                    721: #endif
                    722: 
                    723: /*
                    724: ** CAPI3REF: Test To See If The Library Is Threadsafe
                    725: **
                    726: ** ^The sqlite3_threadsafe() function returns zero if and only if
                    727: ** SQLite was compiled mutexing code omitted due to the
                    728: ** [SQLITE_THREADSAFE] compile-time option being set to 0.
                    729: **
                    730: ** SQLite can be compiled with or without mutexes.  When
                    731: ** the [SQLITE_THREADSAFE] C preprocessor macro is 1 or 2, mutexes
                    732: ** are enabled and SQLite is threadsafe.  When the
                    733: ** [SQLITE_THREADSAFE] macro is 0, 
                    734: ** the mutexes are omitted.  Without the mutexes, it is not safe
                    735: ** to use SQLite concurrently from more than one thread.
                    736: **
                    737: ** Enabling mutexes incurs a measurable performance penalty.
                    738: ** So if speed is of utmost importance, it makes sense to disable
                    739: ** the mutexes.  But for maximum safety, mutexes should be enabled.
                    740: ** ^The default behavior is for mutexes to be enabled.
                    741: **
                    742: ** This interface can be used by an application to make sure that the
                    743: ** version of SQLite that it is linking against was compiled with
                    744: ** the desired setting of the [SQLITE_THREADSAFE] macro.
                    745: **
                    746: ** This interface only reports on the compile-time mutex setting
                    747: ** of the [SQLITE_THREADSAFE] flag.  If SQLite is compiled with
                    748: ** SQLITE_THREADSAFE=1 or =2 then mutexes are enabled by default but
                    749: ** can be fully or partially disabled using a call to [sqlite3_config()]
                    750: ** with the verbs [SQLITE_CONFIG_SINGLETHREAD], [SQLITE_CONFIG_MULTITHREAD],
                    751: ** or [SQLITE_CONFIG_MUTEX].  ^(The return value of the
                    752: ** sqlite3_threadsafe() function shows only the compile-time setting of
                    753: ** thread safety, not any run-time changes to that setting made by
                    754: ** sqlite3_config(). In other words, the return value from sqlite3_threadsafe()
                    755: ** is unchanged by calls to sqlite3_config().)^
                    756: **
                    757: ** See the [threading mode] documentation for additional information.
                    758: */
                    759: SQLITE_API int sqlite3_threadsafe(void);
                    760: 
                    761: /*
                    762: ** CAPI3REF: Database Connection Handle
                    763: ** KEYWORDS: {database connection} {database connections}
                    764: **
                    765: ** Each open SQLite database is represented by a pointer to an instance of
                    766: ** the opaque structure named "sqlite3".  It is useful to think of an sqlite3
                    767: ** pointer as an object.  The [sqlite3_open()], [sqlite3_open16()], and
                    768: ** [sqlite3_open_v2()] interfaces are its constructors, and [sqlite3_close()]
                    769: ** is its destructor.  There are many other interfaces (such as
                    770: ** [sqlite3_prepare_v2()], [sqlite3_create_function()], and
                    771: ** [sqlite3_busy_timeout()] to name but three) that are methods on an
                    772: ** sqlite3 object.
                    773: */
                    774: typedef struct sqlite3 sqlite3;
                    775: 
                    776: /*
                    777: ** CAPI3REF: 64-Bit Integer Types
                    778: ** KEYWORDS: sqlite_int64 sqlite_uint64
                    779: **
                    780: ** Because there is no cross-platform way to specify 64-bit integer types
                    781: ** SQLite includes typedefs for 64-bit signed and unsigned integers.
                    782: **
                    783: ** The sqlite3_int64 and sqlite3_uint64 are the preferred type definitions.
                    784: ** The sqlite_int64 and sqlite_uint64 types are supported for backwards
                    785: ** compatibility only.
                    786: **
                    787: ** ^The sqlite3_int64 and sqlite_int64 types can store integer values
                    788: ** between -9223372036854775808 and +9223372036854775807 inclusive.  ^The
                    789: ** sqlite3_uint64 and sqlite_uint64 types can store integer values 
                    790: ** between 0 and +18446744073709551615 inclusive.
                    791: */
                    792: #ifdef SQLITE_INT64_TYPE
                    793:   typedef SQLITE_INT64_TYPE sqlite_int64;
                    794:   typedef unsigned SQLITE_INT64_TYPE sqlite_uint64;
                    795: #elif defined(_MSC_VER) || defined(__BORLANDC__)
                    796:   typedef __int64 sqlite_int64;
                    797:   typedef unsigned __int64 sqlite_uint64;
                    798: #else
                    799:   typedef long long int sqlite_int64;
                    800:   typedef unsigned long long int sqlite_uint64;
                    801: #endif
                    802: typedef sqlite_int64 sqlite3_int64;
                    803: typedef sqlite_uint64 sqlite3_uint64;
                    804: 
                    805: /*
                    806: ** If compiling for a processor that lacks floating point support,
                    807: ** substitute integer for floating-point.
                    808: */
                    809: #ifdef SQLITE_OMIT_FLOATING_POINT
                    810: # define double sqlite3_int64
                    811: #endif
                    812: 
                    813: /*
                    814: ** CAPI3REF: Closing A Database Connection
                    815: **
                    816: ** ^The sqlite3_close() routine is the destructor for the [sqlite3] object.
                    817: ** ^Calls to sqlite3_close() return SQLITE_OK if the [sqlite3] object is
                    818: ** successfully destroyed and all associated resources are deallocated.
                    819: **
                    820: ** Applications must [sqlite3_finalize | finalize] all [prepared statements]
                    821: ** and [sqlite3_blob_close | close] all [BLOB handles] associated with
                    822: ** the [sqlite3] object prior to attempting to close the object.  ^If
                    823: ** sqlite3_close() is called on a [database connection] that still has
                    824: ** outstanding [prepared statements] or [BLOB handles], then it returns
                    825: ** SQLITE_BUSY.
                    826: **
                    827: ** ^If [sqlite3_close()] is invoked while a transaction is open,
                    828: ** the transaction is automatically rolled back.
                    829: **
                    830: ** The C parameter to [sqlite3_close(C)] must be either a NULL
                    831: ** pointer or an [sqlite3] object pointer obtained
                    832: ** from [sqlite3_open()], [sqlite3_open16()], or
                    833: ** [sqlite3_open_v2()], and not previously closed.
                    834: ** ^Calling sqlite3_close() with a NULL pointer argument is a 
                    835: ** harmless no-op.
                    836: */
                    837: SQLITE_API int sqlite3_close(sqlite3 *);
                    838: 
                    839: /*
                    840: ** The type for a callback function.
                    841: ** This is legacy and deprecated.  It is included for historical
                    842: ** compatibility and is not documented.
                    843: */
                    844: typedef int (*sqlite3_callback)(void*,int,char**, char**);
                    845: 
                    846: /*
                    847: ** CAPI3REF: One-Step Query Execution Interface
                    848: **
                    849: ** The sqlite3_exec() interface is a convenience wrapper around
                    850: ** [sqlite3_prepare_v2()], [sqlite3_step()], and [sqlite3_finalize()],
                    851: ** that allows an application to run multiple statements of SQL
                    852: ** without having to use a lot of C code. 
                    853: **
                    854: ** ^The sqlite3_exec() interface runs zero or more UTF-8 encoded,
                    855: ** semicolon-separate SQL statements passed into its 2nd argument,
                    856: ** in the context of the [database connection] passed in as its 1st
                    857: ** argument.  ^If the callback function of the 3rd argument to
                    858: ** sqlite3_exec() is not NULL, then it is invoked for each result row
                    859: ** coming out of the evaluated SQL statements.  ^The 4th argument to
                    860: ** sqlite3_exec() is relayed through to the 1st argument of each
                    861: ** callback invocation.  ^If the callback pointer to sqlite3_exec()
                    862: ** is NULL, then no callback is ever invoked and result rows are
                    863: ** ignored.
                    864: **
                    865: ** ^If an error occurs while evaluating the SQL statements passed into
                    866: ** sqlite3_exec(), then execution of the current statement stops and
                    867: ** subsequent statements are skipped.  ^If the 5th parameter to sqlite3_exec()
                    868: ** is not NULL then any error message is written into memory obtained
                    869: ** from [sqlite3_malloc()] and passed back through the 5th parameter.
                    870: ** To avoid memory leaks, the application should invoke [sqlite3_free()]
                    871: ** on error message strings returned through the 5th parameter of
                    872: ** of sqlite3_exec() after the error message string is no longer needed.
                    873: ** ^If the 5th parameter to sqlite3_exec() is not NULL and no errors
                    874: ** occur, then sqlite3_exec() sets the pointer in its 5th parameter to
                    875: ** NULL before returning.
                    876: **
                    877: ** ^If an sqlite3_exec() callback returns non-zero, the sqlite3_exec()
                    878: ** routine returns SQLITE_ABORT without invoking the callback again and
                    879: ** without running any subsequent SQL statements.
                    880: **
                    881: ** ^The 2nd argument to the sqlite3_exec() callback function is the
                    882: ** number of columns in the result.  ^The 3rd argument to the sqlite3_exec()
                    883: ** callback is an array of pointers to strings obtained as if from
                    884: ** [sqlite3_column_text()], one for each column.  ^If an element of a
                    885: ** result row is NULL then the corresponding string pointer for the
                    886: ** sqlite3_exec() callback is a NULL pointer.  ^The 4th argument to the
                    887: ** sqlite3_exec() callback is an array of pointers to strings where each
                    888: ** entry represents the name of corresponding result column as obtained
                    889: ** from [sqlite3_column_name()].
                    890: **
                    891: ** ^If the 2nd parameter to sqlite3_exec() is a NULL pointer, a pointer
                    892: ** to an empty string, or a pointer that contains only whitespace and/or 
                    893: ** SQL comments, then no SQL statements are evaluated and the database
                    894: ** is not changed.
                    895: **
                    896: ** Restrictions:
                    897: **
                    898: ** <ul>
                    899: ** <li> The application must insure that the 1st parameter to sqlite3_exec()
                    900: **      is a valid and open [database connection].
                    901: ** <li> The application must not close [database connection] specified by
                    902: **      the 1st parameter to sqlite3_exec() while sqlite3_exec() is running.
                    903: ** <li> The application must not modify the SQL statement text passed into
                    904: **      the 2nd parameter of sqlite3_exec() while sqlite3_exec() is running.
                    905: ** </ul>
                    906: */
                    907: SQLITE_API int sqlite3_exec(
                    908:   sqlite3*,                                  /* An open database */
                    909:   const char *sql,                           /* SQL to be evaluated */
                    910:   int (*callback)(void*,int,char**,char**),  /* Callback function */
                    911:   void *,                                    /* 1st argument to callback */
                    912:   char **errmsg                              /* Error msg written here */
                    913: );
                    914: 
                    915: /*
                    916: ** CAPI3REF: Result Codes
                    917: ** KEYWORDS: SQLITE_OK {error code} {error codes}
                    918: ** KEYWORDS: {result code} {result codes}
                    919: **
                    920: ** Many SQLite functions return an integer result code from the set shown
                    921: ** here in order to indicates success or failure.
                    922: **
                    923: ** New error codes may be added in future versions of SQLite.
                    924: **
                    925: ** See also: [SQLITE_IOERR_READ | extended result codes],
                    926: ** [sqlite3_vtab_on_conflict()] [SQLITE_ROLLBACK | result codes].
                    927: */
                    928: #define SQLITE_OK           0   /* Successful result */
                    929: /* beginning-of-error-codes */
                    930: #define SQLITE_ERROR        1   /* SQL error or missing database */
                    931: #define SQLITE_INTERNAL     2   /* Internal logic error in SQLite */
                    932: #define SQLITE_PERM         3   /* Access permission denied */
                    933: #define SQLITE_ABORT        4   /* Callback routine requested an abort */
                    934: #define SQLITE_BUSY         5   /* The database file is locked */
                    935: #define SQLITE_LOCKED       6   /* A table in the database is locked */
                    936: #define SQLITE_NOMEM        7   /* A malloc() failed */
                    937: #define SQLITE_READONLY     8   /* Attempt to write a readonly database */
                    938: #define SQLITE_INTERRUPT    9   /* Operation terminated by sqlite3_interrupt()*/
                    939: #define SQLITE_IOERR       10   /* Some kind of disk I/O error occurred */
                    940: #define SQLITE_CORRUPT     11   /* The database disk image is malformed */
                    941: #define SQLITE_NOTFOUND    12   /* Unknown opcode in sqlite3_file_control() */
                    942: #define SQLITE_FULL        13   /* Insertion failed because database is full */
                    943: #define SQLITE_CANTOPEN    14   /* Unable to open the database file */
                    944: #define SQLITE_PROTOCOL    15   /* Database lock protocol error */
                    945: #define SQLITE_EMPTY       16   /* Database is empty */
                    946: #define SQLITE_SCHEMA      17   /* The database schema changed */
                    947: #define SQLITE_TOOBIG      18   /* String or BLOB exceeds size limit */
                    948: #define SQLITE_CONSTRAINT  19   /* Abort due to constraint violation */
                    949: #define SQLITE_MISMATCH    20   /* Data type mismatch */
                    950: #define SQLITE_MISUSE      21   /* Library used incorrectly */
                    951: #define SQLITE_NOLFS       22   /* Uses OS features not supported on host */
                    952: #define SQLITE_AUTH        23   /* Authorization denied */
                    953: #define SQLITE_FORMAT      24   /* Auxiliary database format error */
                    954: #define SQLITE_RANGE       25   /* 2nd parameter to sqlite3_bind out of range */
                    955: #define SQLITE_NOTADB      26   /* File opened that is not a database file */
                    956: #define SQLITE_ROW         100  /* sqlite3_step() has another row ready */
                    957: #define SQLITE_DONE        101  /* sqlite3_step() has finished executing */
                    958: /* end-of-error-codes */
                    959: 
                    960: /*
                    961: ** CAPI3REF: Extended Result Codes
                    962: ** KEYWORDS: {extended error code} {extended error codes}
                    963: ** KEYWORDS: {extended result code} {extended result codes}
                    964: **
                    965: ** In its default configuration, SQLite API routines return one of 26 integer
                    966: ** [SQLITE_OK | result codes].  However, experience has shown that many of
                    967: ** these result codes are too coarse-grained.  They do not provide as
                    968: ** much information about problems as programmers might like.  In an effort to
                    969: ** address this, newer versions of SQLite (version 3.3.8 and later) include
                    970: ** support for additional result codes that provide more detailed information
                    971: ** about errors. The extended result codes are enabled or disabled
                    972: ** on a per database connection basis using the
                    973: ** [sqlite3_extended_result_codes()] API.
                    974: **
                    975: ** Some of the available extended result codes are listed here.
                    976: ** One may expect the number of extended result codes will be expand
                    977: ** over time.  Software that uses extended result codes should expect
                    978: ** to see new result codes in future releases of SQLite.
                    979: **
                    980: ** The SQLITE_OK result code will never be extended.  It will always
                    981: ** be exactly zero.
                    982: */
                    983: #define SQLITE_IOERR_READ              (SQLITE_IOERR | (1<<8))
                    984: #define SQLITE_IOERR_SHORT_READ        (SQLITE_IOERR | (2<<8))
                    985: #define SQLITE_IOERR_WRITE             (SQLITE_IOERR | (3<<8))
                    986: #define SQLITE_IOERR_FSYNC             (SQLITE_IOERR | (4<<8))
                    987: #define SQLITE_IOERR_DIR_FSYNC         (SQLITE_IOERR | (5<<8))
                    988: #define SQLITE_IOERR_TRUNCATE          (SQLITE_IOERR | (6<<8))
                    989: #define SQLITE_IOERR_FSTAT             (SQLITE_IOERR | (7<<8))
                    990: #define SQLITE_IOERR_UNLOCK            (SQLITE_IOERR | (8<<8))
                    991: #define SQLITE_IOERR_RDLOCK            (SQLITE_IOERR | (9<<8))
                    992: #define SQLITE_IOERR_DELETE            (SQLITE_IOERR | (10<<8))
                    993: #define SQLITE_IOERR_BLOCKED           (SQLITE_IOERR | (11<<8))
                    994: #define SQLITE_IOERR_NOMEM             (SQLITE_IOERR | (12<<8))
                    995: #define SQLITE_IOERR_ACCESS            (SQLITE_IOERR | (13<<8))
                    996: #define SQLITE_IOERR_CHECKRESERVEDLOCK (SQLITE_IOERR | (14<<8))
                    997: #define SQLITE_IOERR_LOCK              (SQLITE_IOERR | (15<<8))
                    998: #define SQLITE_IOERR_CLOSE             (SQLITE_IOERR | (16<<8))
                    999: #define SQLITE_IOERR_DIR_CLOSE         (SQLITE_IOERR | (17<<8))
                   1000: #define SQLITE_IOERR_SHMOPEN           (SQLITE_IOERR | (18<<8))
                   1001: #define SQLITE_IOERR_SHMSIZE           (SQLITE_IOERR | (19<<8))
                   1002: #define SQLITE_IOERR_SHMLOCK           (SQLITE_IOERR | (20<<8))
                   1003: #define SQLITE_IOERR_SHMMAP            (SQLITE_IOERR | (21<<8))
                   1004: #define SQLITE_IOERR_SEEK              (SQLITE_IOERR | (22<<8))
                   1005: #define SQLITE_LOCKED_SHAREDCACHE      (SQLITE_LOCKED |  (1<<8))
                   1006: #define SQLITE_BUSY_RECOVERY           (SQLITE_BUSY   |  (1<<8))
                   1007: #define SQLITE_CANTOPEN_NOTEMPDIR      (SQLITE_CANTOPEN | (1<<8))
                   1008: #define SQLITE_CORRUPT_VTAB            (SQLITE_CORRUPT | (1<<8))
                   1009: #define SQLITE_READONLY_RECOVERY       (SQLITE_READONLY | (1<<8))
                   1010: #define SQLITE_READONLY_CANTLOCK       (SQLITE_READONLY | (2<<8))
                   1011: 
                   1012: /*
                   1013: ** CAPI3REF: Flags For File Open Operations
                   1014: **
                   1015: ** These bit values are intended for use in the
                   1016: ** 3rd parameter to the [sqlite3_open_v2()] interface and
                   1017: ** in the 4th parameter to the [sqlite3_vfs.xOpen] method.
                   1018: */
                   1019: #define SQLITE_OPEN_READONLY         0x00000001  /* Ok for sqlite3_open_v2() */
                   1020: #define SQLITE_OPEN_READWRITE        0x00000002  /* Ok for sqlite3_open_v2() */
                   1021: #define SQLITE_OPEN_CREATE           0x00000004  /* Ok for sqlite3_open_v2() */
                   1022: #define SQLITE_OPEN_DELETEONCLOSE    0x00000008  /* VFS only */
                   1023: #define SQLITE_OPEN_EXCLUSIVE        0x00000010  /* VFS only */
                   1024: #define SQLITE_OPEN_AUTOPROXY        0x00000020  /* VFS only */
                   1025: #define SQLITE_OPEN_URI              0x00000040  /* Ok for sqlite3_open_v2() */
                   1026: #define SQLITE_OPEN_MAIN_DB          0x00000100  /* VFS only */
                   1027: #define SQLITE_OPEN_TEMP_DB          0x00000200  /* VFS only */
                   1028: #define SQLITE_OPEN_TRANSIENT_DB     0x00000400  /* VFS only */
                   1029: #define SQLITE_OPEN_MAIN_JOURNAL     0x00000800  /* VFS only */
                   1030: #define SQLITE_OPEN_TEMP_JOURNAL     0x00001000  /* VFS only */
                   1031: #define SQLITE_OPEN_SUBJOURNAL       0x00002000  /* VFS only */
                   1032: #define SQLITE_OPEN_MASTER_JOURNAL   0x00004000  /* VFS only */
                   1033: #define SQLITE_OPEN_NOMUTEX          0x00008000  /* Ok for sqlite3_open_v2() */
                   1034: #define SQLITE_OPEN_FULLMUTEX        0x00010000  /* Ok for sqlite3_open_v2() */
                   1035: #define SQLITE_OPEN_SHAREDCACHE      0x00020000  /* Ok for sqlite3_open_v2() */
                   1036: #define SQLITE_OPEN_PRIVATECACHE     0x00040000  /* Ok for sqlite3_open_v2() */
                   1037: #define SQLITE_OPEN_WAL              0x00080000  /* VFS only */
                   1038: 
                   1039: /* Reserved:                         0x00F00000 */
                   1040: 
                   1041: /*
                   1042: ** CAPI3REF: Device Characteristics
                   1043: **
                   1044: ** The xDeviceCharacteristics method of the [sqlite3_io_methods]
                   1045: ** object returns an integer which is a vector of the these
                   1046: ** bit values expressing I/O characteristics of the mass storage
                   1047: ** device that holds the file that the [sqlite3_io_methods]
                   1048: ** refers to.
                   1049: **
                   1050: ** The SQLITE_IOCAP_ATOMIC property means that all writes of
                   1051: ** any size are atomic.  The SQLITE_IOCAP_ATOMICnnn values
                   1052: ** mean that writes of blocks that are nnn bytes in size and
                   1053: ** are aligned to an address which is an integer multiple of
                   1054: ** nnn are atomic.  The SQLITE_IOCAP_SAFE_APPEND value means
                   1055: ** that when data is appended to a file, the data is appended
                   1056: ** first then the size of the file is extended, never the other
                   1057: ** way around.  The SQLITE_IOCAP_SEQUENTIAL property means that
                   1058: ** information is written to disk in the same order as calls
                   1059: ** to xWrite().
                   1060: */
                   1061: #define SQLITE_IOCAP_ATOMIC                 0x00000001
                   1062: #define SQLITE_IOCAP_ATOMIC512              0x00000002
                   1063: #define SQLITE_IOCAP_ATOMIC1K               0x00000004
                   1064: #define SQLITE_IOCAP_ATOMIC2K               0x00000008
                   1065: #define SQLITE_IOCAP_ATOMIC4K               0x00000010
                   1066: #define SQLITE_IOCAP_ATOMIC8K               0x00000020
                   1067: #define SQLITE_IOCAP_ATOMIC16K              0x00000040
                   1068: #define SQLITE_IOCAP_ATOMIC32K              0x00000080
                   1069: #define SQLITE_IOCAP_ATOMIC64K              0x00000100
                   1070: #define SQLITE_IOCAP_SAFE_APPEND            0x00000200
                   1071: #define SQLITE_IOCAP_SEQUENTIAL             0x00000400
                   1072: #define SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN  0x00000800
                   1073: 
                   1074: /*
                   1075: ** CAPI3REF: File Locking Levels
                   1076: **
                   1077: ** SQLite uses one of these integer values as the second
                   1078: ** argument to calls it makes to the xLock() and xUnlock() methods
                   1079: ** of an [sqlite3_io_methods] object.
                   1080: */
                   1081: #define SQLITE_LOCK_NONE          0
                   1082: #define SQLITE_LOCK_SHARED        1
                   1083: #define SQLITE_LOCK_RESERVED      2
                   1084: #define SQLITE_LOCK_PENDING       3
                   1085: #define SQLITE_LOCK_EXCLUSIVE     4
                   1086: 
                   1087: /*
                   1088: ** CAPI3REF: Synchronization Type Flags
                   1089: **
                   1090: ** When SQLite invokes the xSync() method of an
                   1091: ** [sqlite3_io_methods] object it uses a combination of
                   1092: ** these integer values as the second argument.
                   1093: **
                   1094: ** When the SQLITE_SYNC_DATAONLY flag is used, it means that the
                   1095: ** sync operation only needs to flush data to mass storage.  Inode
                   1096: ** information need not be flushed. If the lower four bits of the flag
                   1097: ** equal SQLITE_SYNC_NORMAL, that means to use normal fsync() semantics.
                   1098: ** If the lower four bits equal SQLITE_SYNC_FULL, that means
                   1099: ** to use Mac OS X style fullsync instead of fsync().
                   1100: **
                   1101: ** Do not confuse the SQLITE_SYNC_NORMAL and SQLITE_SYNC_FULL flags
                   1102: ** with the [PRAGMA synchronous]=NORMAL and [PRAGMA synchronous]=FULL
                   1103: ** settings.  The [synchronous pragma] determines when calls to the
                   1104: ** xSync VFS method occur and applies uniformly across all platforms.
                   1105: ** The SQLITE_SYNC_NORMAL and SQLITE_SYNC_FULL flags determine how
                   1106: ** energetic or rigorous or forceful the sync operations are and
                   1107: ** only make a difference on Mac OSX for the default SQLite code.
                   1108: ** (Third-party VFS implementations might also make the distinction
                   1109: ** between SQLITE_SYNC_NORMAL and SQLITE_SYNC_FULL, but among the
                   1110: ** operating systems natively supported by SQLite, only Mac OSX
                   1111: ** cares about the difference.)
                   1112: */
                   1113: #define SQLITE_SYNC_NORMAL        0x00002
                   1114: #define SQLITE_SYNC_FULL          0x00003
                   1115: #define SQLITE_SYNC_DATAONLY      0x00010
                   1116: 
                   1117: /*
                   1118: ** CAPI3REF: OS Interface Open File Handle
                   1119: **
                   1120: ** An [sqlite3_file] object represents an open file in the 
                   1121: ** [sqlite3_vfs | OS interface layer].  Individual OS interface
                   1122: ** implementations will
                   1123: ** want to subclass this object by appending additional fields
                   1124: ** for their own use.  The pMethods entry is a pointer to an
                   1125: ** [sqlite3_io_methods] object that defines methods for performing
                   1126: ** I/O operations on the open file.
                   1127: */
                   1128: typedef struct sqlite3_file sqlite3_file;
                   1129: struct sqlite3_file {
                   1130:   const struct sqlite3_io_methods *pMethods;  /* Methods for an open file */
                   1131: };
                   1132: 
                   1133: /*
                   1134: ** CAPI3REF: OS Interface File Virtual Methods Object
                   1135: **
                   1136: ** Every file opened by the [sqlite3_vfs.xOpen] method populates an
                   1137: ** [sqlite3_file] object (or, more commonly, a subclass of the
                   1138: ** [sqlite3_file] object) with a pointer to an instance of this object.
                   1139: ** This object defines the methods used to perform various operations
                   1140: ** against the open file represented by the [sqlite3_file] object.
                   1141: **
                   1142: ** If the [sqlite3_vfs.xOpen] method sets the sqlite3_file.pMethods element 
                   1143: ** to a non-NULL pointer, then the sqlite3_io_methods.xClose method
                   1144: ** may be invoked even if the [sqlite3_vfs.xOpen] reported that it failed.  The
                   1145: ** only way to prevent a call to xClose following a failed [sqlite3_vfs.xOpen]
                   1146: ** is for the [sqlite3_vfs.xOpen] to set the sqlite3_file.pMethods element
                   1147: ** to NULL.
                   1148: **
                   1149: ** The flags argument to xSync may be one of [SQLITE_SYNC_NORMAL] or
                   1150: ** [SQLITE_SYNC_FULL].  The first choice is the normal fsync().
                   1151: ** The second choice is a Mac OS X style fullsync.  The [SQLITE_SYNC_DATAONLY]
                   1152: ** flag may be ORed in to indicate that only the data of the file
                   1153: ** and not its inode needs to be synced.
                   1154: **
                   1155: ** The integer values to xLock() and xUnlock() are one of
                   1156: ** <ul>
                   1157: ** <li> [SQLITE_LOCK_NONE],
                   1158: ** <li> [SQLITE_LOCK_SHARED],
                   1159: ** <li> [SQLITE_LOCK_RESERVED],
                   1160: ** <li> [SQLITE_LOCK_PENDING], or
                   1161: ** <li> [SQLITE_LOCK_EXCLUSIVE].
                   1162: ** </ul>
                   1163: ** xLock() increases the lock. xUnlock() decreases the lock.
                   1164: ** The xCheckReservedLock() method checks whether any database connection,
                   1165: ** either in this process or in some other process, is holding a RESERVED,
                   1166: ** PENDING, or EXCLUSIVE lock on the file.  It returns true
                   1167: ** if such a lock exists and false otherwise.
                   1168: **
                   1169: ** The xFileControl() method is a generic interface that allows custom
                   1170: ** VFS implementations to directly control an open file using the
                   1171: ** [sqlite3_file_control()] interface.  The second "op" argument is an
                   1172: ** integer opcode.  The third argument is a generic pointer intended to
                   1173: ** point to a structure that may contain arguments or space in which to
                   1174: ** write return values.  Potential uses for xFileControl() might be
                   1175: ** functions to enable blocking locks with timeouts, to change the
                   1176: ** locking strategy (for example to use dot-file locks), to inquire
                   1177: ** about the status of a lock, or to break stale locks.  The SQLite
                   1178: ** core reserves all opcodes less than 100 for its own use.
                   1179: ** A [SQLITE_FCNTL_LOCKSTATE | list of opcodes] less than 100 is available.
                   1180: ** Applications that define a custom xFileControl method should use opcodes
                   1181: ** greater than 100 to avoid conflicts.  VFS implementations should
                   1182: ** return [SQLITE_NOTFOUND] for file control opcodes that they do not
                   1183: ** recognize.
                   1184: **
                   1185: ** The xSectorSize() method returns the sector size of the
                   1186: ** device that underlies the file.  The sector size is the
                   1187: ** minimum write that can be performed without disturbing
                   1188: ** other bytes in the file.  The xDeviceCharacteristics()
                   1189: ** method returns a bit vector describing behaviors of the
                   1190: ** underlying device:
                   1191: **
                   1192: ** <ul>
                   1193: ** <li> [SQLITE_IOCAP_ATOMIC]
                   1194: ** <li> [SQLITE_IOCAP_ATOMIC512]
                   1195: ** <li> [SQLITE_IOCAP_ATOMIC1K]
                   1196: ** <li> [SQLITE_IOCAP_ATOMIC2K]
                   1197: ** <li> [SQLITE_IOCAP_ATOMIC4K]
                   1198: ** <li> [SQLITE_IOCAP_ATOMIC8K]
                   1199: ** <li> [SQLITE_IOCAP_ATOMIC16K]
                   1200: ** <li> [SQLITE_IOCAP_ATOMIC32K]
                   1201: ** <li> [SQLITE_IOCAP_ATOMIC64K]
                   1202: ** <li> [SQLITE_IOCAP_SAFE_APPEND]
                   1203: ** <li> [SQLITE_IOCAP_SEQUENTIAL]
                   1204: ** </ul>
                   1205: **
                   1206: ** The SQLITE_IOCAP_ATOMIC property means that all writes of
                   1207: ** any size are atomic.  The SQLITE_IOCAP_ATOMICnnn values
                   1208: ** mean that writes of blocks that are nnn bytes in size and
                   1209: ** are aligned to an address which is an integer multiple of
                   1210: ** nnn are atomic.  The SQLITE_IOCAP_SAFE_APPEND value means
                   1211: ** that when data is appended to a file, the data is appended
                   1212: ** first then the size of the file is extended, never the other
                   1213: ** way around.  The SQLITE_IOCAP_SEQUENTIAL property means that
                   1214: ** information is written to disk in the same order as calls
                   1215: ** to xWrite().
                   1216: **
                   1217: ** If xRead() returns SQLITE_IOERR_SHORT_READ it must also fill
                   1218: ** in the unread portions of the buffer with zeros.  A VFS that
                   1219: ** fails to zero-fill short reads might seem to work.  However,
                   1220: ** failure to zero-fill short reads will eventually lead to
                   1221: ** database corruption.
                   1222: */
                   1223: typedef struct sqlite3_io_methods sqlite3_io_methods;
                   1224: struct sqlite3_io_methods {
                   1225:   int iVersion;
                   1226:   int (*xClose)(sqlite3_file*);
                   1227:   int (*xRead)(sqlite3_file*, void*, int iAmt, sqlite3_int64 iOfst);
                   1228:   int (*xWrite)(sqlite3_file*, const void*, int iAmt, sqlite3_int64 iOfst);
                   1229:   int (*xTruncate)(sqlite3_file*, sqlite3_int64 size);
                   1230:   int (*xSync)(sqlite3_file*, int flags);
                   1231:   int (*xFileSize)(sqlite3_file*, sqlite3_int64 *pSize);
                   1232:   int (*xLock)(sqlite3_file*, int);
                   1233:   int (*xUnlock)(sqlite3_file*, int);
                   1234:   int (*xCheckReservedLock)(sqlite3_file*, int *pResOut);
                   1235:   int (*xFileControl)(sqlite3_file*, int op, void *pArg);
                   1236:   int (*xSectorSize)(sqlite3_file*);
                   1237:   int (*xDeviceCharacteristics)(sqlite3_file*);
                   1238:   /* Methods above are valid for version 1 */
                   1239:   int (*xShmMap)(sqlite3_file*, int iPg, int pgsz, int, void volatile**);
                   1240:   int (*xShmLock)(sqlite3_file*, int offset, int n, int flags);
                   1241:   void (*xShmBarrier)(sqlite3_file*);
                   1242:   int (*xShmUnmap)(sqlite3_file*, int deleteFlag);
                   1243:   /* Methods above are valid for version 2 */
                   1244:   /* Additional methods may be added in future releases */
                   1245: };
                   1246: 
                   1247: /*
                   1248: ** CAPI3REF: Standard File Control Opcodes
                   1249: **
                   1250: ** These integer constants are opcodes for the xFileControl method
                   1251: ** of the [sqlite3_io_methods] object and for the [sqlite3_file_control()]
                   1252: ** interface.
                   1253: **
                   1254: ** The [SQLITE_FCNTL_LOCKSTATE] opcode is used for debugging.  This
                   1255: ** opcode causes the xFileControl method to write the current state of
                   1256: ** the lock (one of [SQLITE_LOCK_NONE], [SQLITE_LOCK_SHARED],
                   1257: ** [SQLITE_LOCK_RESERVED], [SQLITE_LOCK_PENDING], or [SQLITE_LOCK_EXCLUSIVE])
                   1258: ** into an integer that the pArg argument points to. This capability
                   1259: ** is used during testing and only needs to be supported when SQLITE_TEST
                   1260: ** is defined.
                   1261: **
                   1262: ** The [SQLITE_FCNTL_SIZE_HINT] opcode is used by SQLite to give the VFS
                   1263: ** layer a hint of how large the database file will grow to be during the
                   1264: ** current transaction.  This hint is not guaranteed to be accurate but it
                   1265: ** is often close.  The underlying VFS might choose to preallocate database
                   1266: ** file space based on this hint in order to help writes to the database
                   1267: ** file run faster.
                   1268: **
                   1269: ** The [SQLITE_FCNTL_CHUNK_SIZE] opcode is used to request that the VFS
                   1270: ** extends and truncates the database file in chunks of a size specified
                   1271: ** by the user. The fourth argument to [sqlite3_file_control()] should 
                   1272: ** point to an integer (type int) containing the new chunk-size to use
                   1273: ** for the nominated database. Allocating database file space in large
                   1274: ** chunks (say 1MB at a time), may reduce file-system fragmentation and
                   1275: ** improve performance on some systems.
                   1276: **
                   1277: ** The [SQLITE_FCNTL_FILE_POINTER] opcode is used to obtain a pointer
                   1278: ** to the [sqlite3_file] object associated with a particular database
                   1279: ** connection.  See the [sqlite3_file_control()] documentation for
                   1280: ** additional information.
                   1281: **
                   1282: ** ^(The [SQLITE_FCNTL_SYNC_OMITTED] opcode is generated internally by
                   1283: ** SQLite and sent to all VFSes in place of a call to the xSync method
                   1284: ** when the database connection has [PRAGMA synchronous] set to OFF.)^
                   1285: ** Some specialized VFSes need this signal in order to operate correctly
                   1286: ** when [PRAGMA synchronous | PRAGMA synchronous=OFF] is set, but most 
                   1287: ** VFSes do not need this signal and should silently ignore this opcode.
                   1288: ** Applications should not call [sqlite3_file_control()] with this
                   1289: ** opcode as doing so may disrupt the operation of the specialized VFSes
                   1290: ** that do require it.  
                   1291: */
                   1292: #define SQLITE_FCNTL_LOCKSTATE        1
                   1293: #define SQLITE_GET_LOCKPROXYFILE      2
                   1294: #define SQLITE_SET_LOCKPROXYFILE      3
                   1295: #define SQLITE_LAST_ERRNO             4
                   1296: #define SQLITE_FCNTL_SIZE_HINT        5
                   1297: #define SQLITE_FCNTL_CHUNK_SIZE       6
                   1298: #define SQLITE_FCNTL_FILE_POINTER     7
                   1299: #define SQLITE_FCNTL_SYNC_OMITTED     8
                   1300: 
                   1301: 
                   1302: /*
                   1303: ** CAPI3REF: Mutex Handle
                   1304: **
                   1305: ** The mutex module within SQLite defines [sqlite3_mutex] to be an
                   1306: ** abstract type for a mutex object.  The SQLite core never looks
                   1307: ** at the internal representation of an [sqlite3_mutex].  It only
                   1308: ** deals with pointers to the [sqlite3_mutex] object.
                   1309: **
                   1310: ** Mutexes are created using [sqlite3_mutex_alloc()].
                   1311: */
                   1312: typedef struct sqlite3_mutex sqlite3_mutex;
                   1313: 
                   1314: /*
                   1315: ** CAPI3REF: OS Interface Object
                   1316: **
                   1317: ** An instance of the sqlite3_vfs object defines the interface between
                   1318: ** the SQLite core and the underlying operating system.  The "vfs"
                   1319: ** in the name of the object stands for "virtual file system".  See
                   1320: ** the [VFS | VFS documentation] for further information.
                   1321: **
                   1322: ** The value of the iVersion field is initially 1 but may be larger in
                   1323: ** future versions of SQLite.  Additional fields may be appended to this
                   1324: ** object when the iVersion value is increased.  Note that the structure
                   1325: ** of the sqlite3_vfs object changes in the transaction between
                   1326: ** SQLite version 3.5.9 and 3.6.0 and yet the iVersion field was not
                   1327: ** modified.
                   1328: **
                   1329: ** The szOsFile field is the size of the subclassed [sqlite3_file]
                   1330: ** structure used by this VFS.  mxPathname is the maximum length of
                   1331: ** a pathname in this VFS.
                   1332: **
                   1333: ** Registered sqlite3_vfs objects are kept on a linked list formed by
                   1334: ** the pNext pointer.  The [sqlite3_vfs_register()]
                   1335: ** and [sqlite3_vfs_unregister()] interfaces manage this list
                   1336: ** in a thread-safe way.  The [sqlite3_vfs_find()] interface
                   1337: ** searches the list.  Neither the application code nor the VFS
                   1338: ** implementation should use the pNext pointer.
                   1339: **
                   1340: ** The pNext field is the only field in the sqlite3_vfs
                   1341: ** structure that SQLite will ever modify.  SQLite will only access
                   1342: ** or modify this field while holding a particular static mutex.
                   1343: ** The application should never modify anything within the sqlite3_vfs
                   1344: ** object once the object has been registered.
                   1345: **
                   1346: ** The zName field holds the name of the VFS module.  The name must
                   1347: ** be unique across all VFS modules.
                   1348: **
                   1349: ** [[sqlite3_vfs.xOpen]]
                   1350: ** ^SQLite guarantees that the zFilename parameter to xOpen
                   1351: ** is either a NULL pointer or string obtained
                   1352: ** from xFullPathname() with an optional suffix added.
                   1353: ** ^If a suffix is added to the zFilename parameter, it will
                   1354: ** consist of a single "-" character followed by no more than
                   1355: ** 10 alphanumeric and/or "-" characters.
                   1356: ** ^SQLite further guarantees that
                   1357: ** the string will be valid and unchanged until xClose() is
                   1358: ** called. Because of the previous sentence,
                   1359: ** the [sqlite3_file] can safely store a pointer to the
                   1360: ** filename if it needs to remember the filename for some reason.
                   1361: ** If the zFilename parameter to xOpen is a NULL pointer then xOpen
                   1362: ** must invent its own temporary name for the file.  ^Whenever the 
                   1363: ** xFilename parameter is NULL it will also be the case that the
                   1364: ** flags parameter will include [SQLITE_OPEN_DELETEONCLOSE].
                   1365: **
                   1366: ** The flags argument to xOpen() includes all bits set in
                   1367: ** the flags argument to [sqlite3_open_v2()].  Or if [sqlite3_open()]
                   1368: ** or [sqlite3_open16()] is used, then flags includes at least
                   1369: ** [SQLITE_OPEN_READWRITE] | [SQLITE_OPEN_CREATE]. 
                   1370: ** If xOpen() opens a file read-only then it sets *pOutFlags to
                   1371: ** include [SQLITE_OPEN_READONLY].  Other bits in *pOutFlags may be set.
                   1372: **
                   1373: ** ^(SQLite will also add one of the following flags to the xOpen()
                   1374: ** call, depending on the object being opened:
                   1375: **
                   1376: ** <ul>
                   1377: ** <li>  [SQLITE_OPEN_MAIN_DB]
                   1378: ** <li>  [SQLITE_OPEN_MAIN_JOURNAL]
                   1379: ** <li>  [SQLITE_OPEN_TEMP_DB]
                   1380: ** <li>  [SQLITE_OPEN_TEMP_JOURNAL]
                   1381: ** <li>  [SQLITE_OPEN_TRANSIENT_DB]
                   1382: ** <li>  [SQLITE_OPEN_SUBJOURNAL]
                   1383: ** <li>  [SQLITE_OPEN_MASTER_JOURNAL]
                   1384: ** <li>  [SQLITE_OPEN_WAL]
                   1385: ** </ul>)^
                   1386: **
                   1387: ** The file I/O implementation can use the object type flags to
                   1388: ** change the way it deals with files.  For example, an application
                   1389: ** that does not care about crash recovery or rollback might make
                   1390: ** the open of a journal file a no-op.  Writes to this journal would
                   1391: ** also be no-ops, and any attempt to read the journal would return
                   1392: ** SQLITE_IOERR.  Or the implementation might recognize that a database
                   1393: ** file will be doing page-aligned sector reads and writes in a random
                   1394: ** order and set up its I/O subsystem accordingly.
                   1395: **
                   1396: ** SQLite might also add one of the following flags to the xOpen method:
                   1397: **
                   1398: ** <ul>
                   1399: ** <li> [SQLITE_OPEN_DELETEONCLOSE]
                   1400: ** <li> [SQLITE_OPEN_EXCLUSIVE]
                   1401: ** </ul>
                   1402: **
                   1403: ** The [SQLITE_OPEN_DELETEONCLOSE] flag means the file should be
                   1404: ** deleted when it is closed.  ^The [SQLITE_OPEN_DELETEONCLOSE]
                   1405: ** will be set for TEMP databases and their journals, transient
                   1406: ** databases, and subjournals.
                   1407: **
                   1408: ** ^The [SQLITE_OPEN_EXCLUSIVE] flag is always used in conjunction
                   1409: ** with the [SQLITE_OPEN_CREATE] flag, which are both directly
                   1410: ** analogous to the O_EXCL and O_CREAT flags of the POSIX open()
                   1411: ** API.  The SQLITE_OPEN_EXCLUSIVE flag, when paired with the 
                   1412: ** SQLITE_OPEN_CREATE, is used to indicate that file should always
                   1413: ** be created, and that it is an error if it already exists.
                   1414: ** It is <i>not</i> used to indicate the file should be opened 
                   1415: ** for exclusive access.
                   1416: **
                   1417: ** ^At least szOsFile bytes of memory are allocated by SQLite
                   1418: ** to hold the  [sqlite3_file] structure passed as the third
                   1419: ** argument to xOpen.  The xOpen method does not have to
                   1420: ** allocate the structure; it should just fill it in.  Note that
                   1421: ** the xOpen method must set the sqlite3_file.pMethods to either
                   1422: ** a valid [sqlite3_io_methods] object or to NULL.  xOpen must do
                   1423: ** this even if the open fails.  SQLite expects that the sqlite3_file.pMethods
                   1424: ** element will be valid after xOpen returns regardless of the success
                   1425: ** or failure of the xOpen call.
                   1426: **
                   1427: ** [[sqlite3_vfs.xAccess]]
                   1428: ** ^The flags argument to xAccess() may be [SQLITE_ACCESS_EXISTS]
                   1429: ** to test for the existence of a file, or [SQLITE_ACCESS_READWRITE] to
                   1430: ** test whether a file is readable and writable, or [SQLITE_ACCESS_READ]
                   1431: ** to test whether a file is at least readable.   The file can be a
                   1432: ** directory.
                   1433: **
                   1434: ** ^SQLite will always allocate at least mxPathname+1 bytes for the
                   1435: ** output buffer xFullPathname.  The exact size of the output buffer
                   1436: ** is also passed as a parameter to both  methods. If the output buffer
                   1437: ** is not large enough, [SQLITE_CANTOPEN] should be returned. Since this is
                   1438: ** handled as a fatal error by SQLite, vfs implementations should endeavor
                   1439: ** to prevent this by setting mxPathname to a sufficiently large value.
                   1440: **
                   1441: ** The xRandomness(), xSleep(), xCurrentTime(), and xCurrentTimeInt64()
                   1442: ** interfaces are not strictly a part of the filesystem, but they are
                   1443: ** included in the VFS structure for completeness.
                   1444: ** The xRandomness() function attempts to return nBytes bytes
                   1445: ** of good-quality randomness into zOut.  The return value is
                   1446: ** the actual number of bytes of randomness obtained.
                   1447: ** The xSleep() method causes the calling thread to sleep for at
                   1448: ** least the number of microseconds given.  ^The xCurrentTime()
                   1449: ** method returns a Julian Day Number for the current date and time as
                   1450: ** a floating point value.
                   1451: ** ^The xCurrentTimeInt64() method returns, as an integer, the Julian
                   1452: ** Day Number multiplied by 86400000 (the number of milliseconds in 
                   1453: ** a 24-hour day).  
                   1454: ** ^SQLite will use the xCurrentTimeInt64() method to get the current
                   1455: ** date and time if that method is available (if iVersion is 2 or 
                   1456: ** greater and the function pointer is not NULL) and will fall back
                   1457: ** to xCurrentTime() if xCurrentTimeInt64() is unavailable.
                   1458: **
                   1459: ** ^The xSetSystemCall(), xGetSystemCall(), and xNestSystemCall() interfaces
                   1460: ** are not used by the SQLite core.  These optional interfaces are provided
                   1461: ** by some VFSes to facilitate testing of the VFS code. By overriding 
                   1462: ** system calls with functions under its control, a test program can
                   1463: ** simulate faults and error conditions that would otherwise be difficult
                   1464: ** or impossible to induce.  The set of system calls that can be overridden
                   1465: ** varies from one VFS to another, and from one version of the same VFS to the
                   1466: ** next.  Applications that use these interfaces must be prepared for any
                   1467: ** or all of these interfaces to be NULL or for their behavior to change
                   1468: ** from one release to the next.  Applications must not attempt to access
                   1469: ** any of these methods if the iVersion of the VFS is less than 3.
                   1470: */
                   1471: typedef struct sqlite3_vfs sqlite3_vfs;
                   1472: typedef void (*sqlite3_syscall_ptr)(void);
                   1473: struct sqlite3_vfs {
                   1474:   int iVersion;            /* Structure version number (currently 3) */
                   1475:   int szOsFile;            /* Size of subclassed sqlite3_file */
                   1476:   int mxPathname;          /* Maximum file pathname length */
                   1477:   sqlite3_vfs *pNext;      /* Next registered VFS */
                   1478:   const char *zName;       /* Name of this virtual file system */
                   1479:   void *pAppData;          /* Pointer to application-specific data */
                   1480:   int (*xOpen)(sqlite3_vfs*, const char *zName, sqlite3_file*,
                   1481:                int flags, int *pOutFlags);
                   1482:   int (*xDelete)(sqlite3_vfs*, const char *zName, int syncDir);
                   1483:   int (*xAccess)(sqlite3_vfs*, const char *zName, int flags, int *pResOut);
                   1484:   int (*xFullPathname)(sqlite3_vfs*, const char *zName, int nOut, char *zOut);
                   1485:   void *(*xDlOpen)(sqlite3_vfs*, const char *zFilename);
                   1486:   void (*xDlError)(sqlite3_vfs*, int nByte, char *zErrMsg);
                   1487:   void (*(*xDlSym)(sqlite3_vfs*,void*, const char *zSymbol))(void);
                   1488:   void (*xDlClose)(sqlite3_vfs*, void*);
                   1489:   int (*xRandomness)(sqlite3_vfs*, int nByte, char *zOut);
                   1490:   int (*xSleep)(sqlite3_vfs*, int microseconds);
                   1491:   int (*xCurrentTime)(sqlite3_vfs*, double*);
                   1492:   int (*xGetLastError)(sqlite3_vfs*, int, char *);
                   1493:   /*
                   1494:   ** The methods above are in version 1 of the sqlite_vfs object
                   1495:   ** definition.  Those that follow are added in version 2 or later
                   1496:   */
                   1497:   int (*xCurrentTimeInt64)(sqlite3_vfs*, sqlite3_int64*);
                   1498:   /*
                   1499:   ** The methods above are in versions 1 and 2 of the sqlite_vfs object.
                   1500:   ** Those below are for version 3 and greater.
                   1501:   */
                   1502:   int (*xSetSystemCall)(sqlite3_vfs*, const char *zName, sqlite3_syscall_ptr);
                   1503:   sqlite3_syscall_ptr (*xGetSystemCall)(sqlite3_vfs*, const char *zName);
                   1504:   const char *(*xNextSystemCall)(sqlite3_vfs*, const char *zName);
                   1505:   /*
                   1506:   ** The methods above are in versions 1 through 3 of the sqlite_vfs object.
                   1507:   ** New fields may be appended in figure versions.  The iVersion
                   1508:   ** value will increment whenever this happens. 
                   1509:   */
                   1510: };
                   1511: 
                   1512: /*
                   1513: ** CAPI3REF: Flags for the xAccess VFS method
                   1514: **
                   1515: ** These integer constants can be used as the third parameter to
                   1516: ** the xAccess method of an [sqlite3_vfs] object.  They determine
                   1517: ** what kind of permissions the xAccess method is looking for.
                   1518: ** With SQLITE_ACCESS_EXISTS, the xAccess method
                   1519: ** simply checks whether the file exists.
                   1520: ** With SQLITE_ACCESS_READWRITE, the xAccess method
                   1521: ** checks whether the named directory is both readable and writable
                   1522: ** (in other words, if files can be added, removed, and renamed within
                   1523: ** the directory).
                   1524: ** The SQLITE_ACCESS_READWRITE constant is currently used only by the
                   1525: ** [temp_store_directory pragma], though this could change in a future
                   1526: ** release of SQLite.
                   1527: ** With SQLITE_ACCESS_READ, the xAccess method
                   1528: ** checks whether the file is readable.  The SQLITE_ACCESS_READ constant is
                   1529: ** currently unused, though it might be used in a future release of
                   1530: ** SQLite.
                   1531: */
                   1532: #define SQLITE_ACCESS_EXISTS    0
                   1533: #define SQLITE_ACCESS_READWRITE 1   /* Used by PRAGMA temp_store_directory */
                   1534: #define SQLITE_ACCESS_READ      2   /* Unused */
                   1535: 
                   1536: /*
                   1537: ** CAPI3REF: Flags for the xShmLock VFS method
                   1538: **
                   1539: ** These integer constants define the various locking operations
                   1540: ** allowed by the xShmLock method of [sqlite3_io_methods].  The
                   1541: ** following are the only legal combinations of flags to the
                   1542: ** xShmLock method:
                   1543: **
                   1544: ** <ul>
                   1545: ** <li>  SQLITE_SHM_LOCK | SQLITE_SHM_SHARED
                   1546: ** <li>  SQLITE_SHM_LOCK | SQLITE_SHM_EXCLUSIVE
                   1547: ** <li>  SQLITE_SHM_UNLOCK | SQLITE_SHM_SHARED
                   1548: ** <li>  SQLITE_SHM_UNLOCK | SQLITE_SHM_EXCLUSIVE
                   1549: ** </ul>
                   1550: **
                   1551: ** When unlocking, the same SHARED or EXCLUSIVE flag must be supplied as
                   1552: ** was given no the corresponding lock.  
                   1553: **
                   1554: ** The xShmLock method can transition between unlocked and SHARED or
                   1555: ** between unlocked and EXCLUSIVE.  It cannot transition between SHARED
                   1556: ** and EXCLUSIVE.
                   1557: */
                   1558: #define SQLITE_SHM_UNLOCK       1
                   1559: #define SQLITE_SHM_LOCK         2
                   1560: #define SQLITE_SHM_SHARED       4
                   1561: #define SQLITE_SHM_EXCLUSIVE    8
                   1562: 
                   1563: /*
                   1564: ** CAPI3REF: Maximum xShmLock index
                   1565: **
                   1566: ** The xShmLock method on [sqlite3_io_methods] may use values
                   1567: ** between 0 and this upper bound as its "offset" argument.
                   1568: ** The SQLite core will never attempt to acquire or release a
                   1569: ** lock outside of this range
                   1570: */
                   1571: #define SQLITE_SHM_NLOCK        8
                   1572: 
                   1573: 
                   1574: /*
                   1575: ** CAPI3REF: Initialize The SQLite Library
                   1576: **
                   1577: ** ^The sqlite3_initialize() routine initializes the
                   1578: ** SQLite library.  ^The sqlite3_shutdown() routine
                   1579: ** deallocates any resources that were allocated by sqlite3_initialize().
                   1580: ** These routines are designed to aid in process initialization and
                   1581: ** shutdown on embedded systems.  Workstation applications using
                   1582: ** SQLite normally do not need to invoke either of these routines.
                   1583: **
                   1584: ** A call to sqlite3_initialize() is an "effective" call if it is
                   1585: ** the first time sqlite3_initialize() is invoked during the lifetime of
                   1586: ** the process, or if it is the first time sqlite3_initialize() is invoked
                   1587: ** following a call to sqlite3_shutdown().  ^(Only an effective call
                   1588: ** of sqlite3_initialize() does any initialization.  All other calls
                   1589: ** are harmless no-ops.)^
                   1590: **
                   1591: ** A call to sqlite3_shutdown() is an "effective" call if it is the first
                   1592: ** call to sqlite3_shutdown() since the last sqlite3_initialize().  ^(Only
                   1593: ** an effective call to sqlite3_shutdown() does any deinitialization.
                   1594: ** All other valid calls to sqlite3_shutdown() are harmless no-ops.)^
                   1595: **
                   1596: ** The sqlite3_initialize() interface is threadsafe, but sqlite3_shutdown()
                   1597: ** is not.  The sqlite3_shutdown() interface must only be called from a
                   1598: ** single thread.  All open [database connections] must be closed and all
                   1599: ** other SQLite resources must be deallocated prior to invoking
                   1600: ** sqlite3_shutdown().
                   1601: **
                   1602: ** Among other things, ^sqlite3_initialize() will invoke
                   1603: ** sqlite3_os_init().  Similarly, ^sqlite3_shutdown()
                   1604: ** will invoke sqlite3_os_end().
                   1605: **
                   1606: ** ^The sqlite3_initialize() routine returns [SQLITE_OK] on success.
                   1607: ** ^If for some reason, sqlite3_initialize() is unable to initialize
                   1608: ** the library (perhaps it is unable to allocate a needed resource such
                   1609: ** as a mutex) it returns an [error code] other than [SQLITE_OK].
                   1610: **
                   1611: ** ^The sqlite3_initialize() routine is called internally by many other
                   1612: ** SQLite interfaces so that an application usually does not need to
                   1613: ** invoke sqlite3_initialize() directly.  For example, [sqlite3_open()]
                   1614: ** calls sqlite3_initialize() so the SQLite library will be automatically
                   1615: ** initialized when [sqlite3_open()] is called if it has not be initialized
                   1616: ** already.  ^However, if SQLite is compiled with the [SQLITE_OMIT_AUTOINIT]
                   1617: ** compile-time option, then the automatic calls to sqlite3_initialize()
                   1618: ** are omitted and the application must call sqlite3_initialize() directly
                   1619: ** prior to using any other SQLite interface.  For maximum portability,
                   1620: ** it is recommended that applications always invoke sqlite3_initialize()
                   1621: ** directly prior to using any other SQLite interface.  Future releases
                   1622: ** of SQLite may require this.  In other words, the behavior exhibited
                   1623: ** when SQLite is compiled with [SQLITE_OMIT_AUTOINIT] might become the
                   1624: ** default behavior in some future release of SQLite.
                   1625: **
                   1626: ** The sqlite3_os_init() routine does operating-system specific
                   1627: ** initialization of the SQLite library.  The sqlite3_os_end()
                   1628: ** routine undoes the effect of sqlite3_os_init().  Typical tasks
                   1629: ** performed by these routines include allocation or deallocation
                   1630: ** of static resources, initialization of global variables,
                   1631: ** setting up a default [sqlite3_vfs] module, or setting up
                   1632: ** a default configuration using [sqlite3_config()].
                   1633: **
                   1634: ** The application should never invoke either sqlite3_os_init()
                   1635: ** or sqlite3_os_end() directly.  The application should only invoke
                   1636: ** sqlite3_initialize() and sqlite3_shutdown().  The sqlite3_os_init()
                   1637: ** interface is called automatically by sqlite3_initialize() and
                   1638: ** sqlite3_os_end() is called by sqlite3_shutdown().  Appropriate
                   1639: ** implementations for sqlite3_os_init() and sqlite3_os_end()
                   1640: ** are built into SQLite when it is compiled for Unix, Windows, or OS/2.
                   1641: ** When [custom builds | built for other platforms]
                   1642: ** (using the [SQLITE_OS_OTHER=1] compile-time
                   1643: ** option) the application must supply a suitable implementation for
                   1644: ** sqlite3_os_init() and sqlite3_os_end().  An application-supplied
                   1645: ** implementation of sqlite3_os_init() or sqlite3_os_end()
                   1646: ** must return [SQLITE_OK] on success and some other [error code] upon
                   1647: ** failure.
                   1648: */
                   1649: SQLITE_API int sqlite3_initialize(void);
                   1650: SQLITE_API int sqlite3_shutdown(void);
                   1651: SQLITE_API int sqlite3_os_init(void);
                   1652: SQLITE_API int sqlite3_os_end(void);
                   1653: 
                   1654: /*
                   1655: ** CAPI3REF: Configuring The SQLite Library
                   1656: **
                   1657: ** The sqlite3_config() interface is used to make global configuration
                   1658: ** changes to SQLite in order to tune SQLite to the specific needs of
                   1659: ** the application.  The default configuration is recommended for most
                   1660: ** applications and so this routine is usually not necessary.  It is
                   1661: ** provided to support rare applications with unusual needs.
                   1662: **
                   1663: ** The sqlite3_config() interface is not threadsafe.  The application
                   1664: ** must insure that no other SQLite interfaces are invoked by other
                   1665: ** threads while sqlite3_config() is running.  Furthermore, sqlite3_config()
                   1666: ** may only be invoked prior to library initialization using
                   1667: ** [sqlite3_initialize()] or after shutdown by [sqlite3_shutdown()].
                   1668: ** ^If sqlite3_config() is called after [sqlite3_initialize()] and before
                   1669: ** [sqlite3_shutdown()] then it will return SQLITE_MISUSE.
                   1670: ** Note, however, that ^sqlite3_config() can be called as part of the
                   1671: ** implementation of an application-defined [sqlite3_os_init()].
                   1672: **
                   1673: ** The first argument to sqlite3_config() is an integer
                   1674: ** [configuration option] that determines
                   1675: ** what property of SQLite is to be configured.  Subsequent arguments
                   1676: ** vary depending on the [configuration option]
                   1677: ** in the first argument.
                   1678: **
                   1679: ** ^When a configuration option is set, sqlite3_config() returns [SQLITE_OK].
                   1680: ** ^If the option is unknown or SQLite is unable to set the option
                   1681: ** then this routine returns a non-zero [error code].
                   1682: */
                   1683: SQLITE_API int sqlite3_config(int, ...);
                   1684: 
                   1685: /*
                   1686: ** CAPI3REF: Configure database connections
                   1687: **
                   1688: ** The sqlite3_db_config() interface is used to make configuration
                   1689: ** changes to a [database connection].  The interface is similar to
                   1690: ** [sqlite3_config()] except that the changes apply to a single
                   1691: ** [database connection] (specified in the first argument).
                   1692: **
                   1693: ** The second argument to sqlite3_db_config(D,V,...)  is the
                   1694: ** [SQLITE_DBCONFIG_LOOKASIDE | configuration verb] - an integer code 
                   1695: ** that indicates what aspect of the [database connection] is being configured.
                   1696: ** Subsequent arguments vary depending on the configuration verb.
                   1697: **
                   1698: ** ^Calls to sqlite3_db_config() return SQLITE_OK if and only if
                   1699: ** the call is considered successful.
                   1700: */
                   1701: SQLITE_API int sqlite3_db_config(sqlite3*, int op, ...);
                   1702: 
                   1703: /*
                   1704: ** CAPI3REF: Memory Allocation Routines
                   1705: **
                   1706: ** An instance of this object defines the interface between SQLite
                   1707: ** and low-level memory allocation routines.
                   1708: **
                   1709: ** This object is used in only one place in the SQLite interface.
                   1710: ** A pointer to an instance of this object is the argument to
                   1711: ** [sqlite3_config()] when the configuration option is
                   1712: ** [SQLITE_CONFIG_MALLOC] or [SQLITE_CONFIG_GETMALLOC].  
                   1713: ** By creating an instance of this object
                   1714: ** and passing it to [sqlite3_config]([SQLITE_CONFIG_MALLOC])
                   1715: ** during configuration, an application can specify an alternative
                   1716: ** memory allocation subsystem for SQLite to use for all of its
                   1717: ** dynamic memory needs.
                   1718: **
                   1719: ** Note that SQLite comes with several [built-in memory allocators]
                   1720: ** that are perfectly adequate for the overwhelming majority of applications
                   1721: ** and that this object is only useful to a tiny minority of applications
                   1722: ** with specialized memory allocation requirements.  This object is
                   1723: ** also used during testing of SQLite in order to specify an alternative
                   1724: ** memory allocator that simulates memory out-of-memory conditions in
                   1725: ** order to verify that SQLite recovers gracefully from such
                   1726: ** conditions.
                   1727: **
                   1728: ** The xMalloc and xFree methods must work like the
                   1729: ** malloc() and free() functions from the standard C library.
                   1730: ** The xRealloc method must work like realloc() from the standard C library
                   1731: ** with the exception that if the second argument to xRealloc is zero,
                   1732: ** xRealloc must be a no-op - it must not perform any allocation or
                   1733: ** deallocation.  ^SQLite guarantees that the second argument to
                   1734: ** xRealloc is always a value returned by a prior call to xRoundup.
                   1735: ** And so in cases where xRoundup always returns a positive number,
                   1736: ** xRealloc can perform exactly as the standard library realloc() and
                   1737: ** still be in compliance with this specification.
                   1738: **
                   1739: ** xSize should return the allocated size of a memory allocation
                   1740: ** previously obtained from xMalloc or xRealloc.  The allocated size
                   1741: ** is always at least as big as the requested size but may be larger.
                   1742: **
                   1743: ** The xRoundup method returns what would be the allocated size of
                   1744: ** a memory allocation given a particular requested size.  Most memory
                   1745: ** allocators round up memory allocations at least to the next multiple
                   1746: ** of 8.  Some allocators round up to a larger multiple or to a power of 2.
                   1747: ** Every memory allocation request coming in through [sqlite3_malloc()]
                   1748: ** or [sqlite3_realloc()] first calls xRoundup.  If xRoundup returns 0, 
                   1749: ** that causes the corresponding memory allocation to fail.
                   1750: **
                   1751: ** The xInit method initializes the memory allocator.  (For example,
                   1752: ** it might allocate any require mutexes or initialize internal data
                   1753: ** structures.  The xShutdown method is invoked (indirectly) by
                   1754: ** [sqlite3_shutdown()] and should deallocate any resources acquired
                   1755: ** by xInit.  The pAppData pointer is used as the only parameter to
                   1756: ** xInit and xShutdown.
                   1757: **
                   1758: ** SQLite holds the [SQLITE_MUTEX_STATIC_MASTER] mutex when it invokes
                   1759: ** the xInit method, so the xInit method need not be threadsafe.  The
                   1760: ** xShutdown method is only called from [sqlite3_shutdown()] so it does
                   1761: ** not need to be threadsafe either.  For all other methods, SQLite
                   1762: ** holds the [SQLITE_MUTEX_STATIC_MEM] mutex as long as the
                   1763: ** [SQLITE_CONFIG_MEMSTATUS] configuration option is turned on (which
                   1764: ** it is by default) and so the methods are automatically serialized.
                   1765: ** However, if [SQLITE_CONFIG_MEMSTATUS] is disabled, then the other
                   1766: ** methods must be threadsafe or else make their own arrangements for
                   1767: ** serialization.
                   1768: **
                   1769: ** SQLite will never invoke xInit() more than once without an intervening
                   1770: ** call to xShutdown().
                   1771: */
                   1772: typedef struct sqlite3_mem_methods sqlite3_mem_methods;
                   1773: struct sqlite3_mem_methods {
                   1774:   void *(*xMalloc)(int);         /* Memory allocation function */
                   1775:   void (*xFree)(void*);          /* Free a prior allocation */
                   1776:   void *(*xRealloc)(void*,int);  /* Resize an allocation */
                   1777:   int (*xSize)(void*);           /* Return the size of an allocation */
                   1778:   int (*xRoundup)(int);          /* Round up request size to allocation size */
                   1779:   int (*xInit)(void*);           /* Initialize the memory allocator */
                   1780:   void (*xShutdown)(void*);      /* Deinitialize the memory allocator */
                   1781:   void *pAppData;                /* Argument to xInit() and xShutdown() */
                   1782: };
                   1783: 
                   1784: /*
                   1785: ** CAPI3REF: Configuration Options
                   1786: ** KEYWORDS: {configuration option}
                   1787: **
                   1788: ** These constants are the available integer configuration options that
                   1789: ** can be passed as the first argument to the [sqlite3_config()] interface.
                   1790: **
                   1791: ** New configuration options may be added in future releases of SQLite.
                   1792: ** Existing configuration options might be discontinued.  Applications
                   1793: ** should check the return code from [sqlite3_config()] to make sure that
                   1794: ** the call worked.  The [sqlite3_config()] interface will return a
                   1795: ** non-zero [error code] if a discontinued or unsupported configuration option
                   1796: ** is invoked.
                   1797: **
                   1798: ** <dl>
                   1799: ** [[SQLITE_CONFIG_SINGLETHREAD]] <dt>SQLITE_CONFIG_SINGLETHREAD</dt>
                   1800: ** <dd>There are no arguments to this option.  ^This option sets the
                   1801: ** [threading mode] to Single-thread.  In other words, it disables
                   1802: ** all mutexing and puts SQLite into a mode where it can only be used
                   1803: ** by a single thread.   ^If SQLite is compiled with
                   1804: ** the [SQLITE_THREADSAFE | SQLITE_THREADSAFE=0] compile-time option then
                   1805: ** it is not possible to change the [threading mode] from its default
                   1806: ** value of Single-thread and so [sqlite3_config()] will return 
                   1807: ** [SQLITE_ERROR] if called with the SQLITE_CONFIG_SINGLETHREAD
                   1808: ** configuration option.</dd>
                   1809: **
                   1810: ** [[SQLITE_CONFIG_MULTITHREAD]] <dt>SQLITE_CONFIG_MULTITHREAD</dt>
                   1811: ** <dd>There are no arguments to this option.  ^This option sets the
                   1812: ** [threading mode] to Multi-thread.  In other words, it disables
                   1813: ** mutexing on [database connection] and [prepared statement] objects.
                   1814: ** The application is responsible for serializing access to
                   1815: ** [database connections] and [prepared statements].  But other mutexes
                   1816: ** are enabled so that SQLite will be safe to use in a multi-threaded
                   1817: ** environment as long as no two threads attempt to use the same
                   1818: ** [database connection] at the same time.  ^If SQLite is compiled with
                   1819: ** the [SQLITE_THREADSAFE | SQLITE_THREADSAFE=0] compile-time option then
                   1820: ** it is not possible to set the Multi-thread [threading mode] and
                   1821: ** [sqlite3_config()] will return [SQLITE_ERROR] if called with the
                   1822: ** SQLITE_CONFIG_MULTITHREAD configuration option.</dd>
                   1823: **
                   1824: ** [[SQLITE_CONFIG_SERIALIZED]] <dt>SQLITE_CONFIG_SERIALIZED</dt>
                   1825: ** <dd>There are no arguments to this option.  ^This option sets the
                   1826: ** [threading mode] to Serialized. In other words, this option enables
                   1827: ** all mutexes including the recursive
                   1828: ** mutexes on [database connection] and [prepared statement] objects.
                   1829: ** In this mode (which is the default when SQLite is compiled with
                   1830: ** [SQLITE_THREADSAFE=1]) the SQLite library will itself serialize access
                   1831: ** to [database connections] and [prepared statements] so that the
                   1832: ** application is free to use the same [database connection] or the
                   1833: ** same [prepared statement] in different threads at the same time.
                   1834: ** ^If SQLite is compiled with
                   1835: ** the [SQLITE_THREADSAFE | SQLITE_THREADSAFE=0] compile-time option then
                   1836: ** it is not possible to set the Serialized [threading mode] and
                   1837: ** [sqlite3_config()] will return [SQLITE_ERROR] if called with the
                   1838: ** SQLITE_CONFIG_SERIALIZED configuration option.</dd>
                   1839: **
                   1840: ** [[SQLITE_CONFIG_MALLOC]] <dt>SQLITE_CONFIG_MALLOC</dt>
                   1841: ** <dd> ^(This option takes a single argument which is a pointer to an
                   1842: ** instance of the [sqlite3_mem_methods] structure.  The argument specifies
                   1843: ** alternative low-level memory allocation routines to be used in place of
                   1844: ** the memory allocation routines built into SQLite.)^ ^SQLite makes
                   1845: ** its own private copy of the content of the [sqlite3_mem_methods] structure
                   1846: ** before the [sqlite3_config()] call returns.</dd>
                   1847: **
                   1848: ** [[SQLITE_CONFIG_GETMALLOC]] <dt>SQLITE_CONFIG_GETMALLOC</dt>
                   1849: ** <dd> ^(This option takes a single argument which is a pointer to an
                   1850: ** instance of the [sqlite3_mem_methods] structure.  The [sqlite3_mem_methods]
                   1851: ** structure is filled with the currently defined memory allocation routines.)^
                   1852: ** This option can be used to overload the default memory allocation
                   1853: ** routines with a wrapper that simulations memory allocation failure or
                   1854: ** tracks memory usage, for example. </dd>
                   1855: **
                   1856: ** [[SQLITE_CONFIG_MEMSTATUS]] <dt>SQLITE_CONFIG_MEMSTATUS</dt>
                   1857: ** <dd> ^This option takes single argument of type int, interpreted as a 
                   1858: ** boolean, which enables or disables the collection of memory allocation 
                   1859: ** statistics. ^(When memory allocation statistics are disabled, the 
                   1860: ** following SQLite interfaces become non-operational:
                   1861: **   <ul>
                   1862: **   <li> [sqlite3_memory_used()]
                   1863: **   <li> [sqlite3_memory_highwater()]
                   1864: **   <li> [sqlite3_soft_heap_limit64()]
                   1865: **   <li> [sqlite3_status()]
                   1866: **   </ul>)^
                   1867: ** ^Memory allocation statistics are enabled by default unless SQLite is
                   1868: ** compiled with [SQLITE_DEFAULT_MEMSTATUS]=0 in which case memory
                   1869: ** allocation statistics are disabled by default.
                   1870: ** </dd>
                   1871: **
                   1872: ** [[SQLITE_CONFIG_SCRATCH]] <dt>SQLITE_CONFIG_SCRATCH</dt>
                   1873: ** <dd> ^This option specifies a static memory buffer that SQLite can use for
                   1874: ** scratch memory.  There are three arguments:  A pointer an 8-byte
                   1875: ** aligned memory buffer from which the scratch allocations will be
                   1876: ** drawn, the size of each scratch allocation (sz),
                   1877: ** and the maximum number of scratch allocations (N).  The sz
                   1878: ** argument must be a multiple of 16.
                   1879: ** The first argument must be a pointer to an 8-byte aligned buffer
                   1880: ** of at least sz*N bytes of memory.
                   1881: ** ^SQLite will use no more than two scratch buffers per thread.  So
                   1882: ** N should be set to twice the expected maximum number of threads.
                   1883: ** ^SQLite will never require a scratch buffer that is more than 6
                   1884: ** times the database page size. ^If SQLite needs needs additional
                   1885: ** scratch memory beyond what is provided by this configuration option, then 
                   1886: ** [sqlite3_malloc()] will be used to obtain the memory needed.</dd>
                   1887: **
                   1888: ** [[SQLITE_CONFIG_PAGECACHE]] <dt>SQLITE_CONFIG_PAGECACHE</dt>
                   1889: ** <dd> ^This option specifies a static memory buffer that SQLite can use for
                   1890: ** the database page cache with the default page cache implementation.  
                   1891: ** This configuration should not be used if an application-define page
                   1892: ** cache implementation is loaded using the SQLITE_CONFIG_PCACHE option.
                   1893: ** There are three arguments to this option: A pointer to 8-byte aligned
                   1894: ** memory, the size of each page buffer (sz), and the number of pages (N).
                   1895: ** The sz argument should be the size of the largest database page
                   1896: ** (a power of two between 512 and 32768) plus a little extra for each
                   1897: ** page header.  ^The page header size is 20 to 40 bytes depending on
                   1898: ** the host architecture.  ^It is harmless, apart from the wasted memory,
                   1899: ** to make sz a little too large.  The first
                   1900: ** argument should point to an allocation of at least sz*N bytes of memory.
                   1901: ** ^SQLite will use the memory provided by the first argument to satisfy its
                   1902: ** memory needs for the first N pages that it adds to cache.  ^If additional
                   1903: ** page cache memory is needed beyond what is provided by this option, then
                   1904: ** SQLite goes to [sqlite3_malloc()] for the additional storage space.
                   1905: ** The pointer in the first argument must
                   1906: ** be aligned to an 8-byte boundary or subsequent behavior of SQLite
                   1907: ** will be undefined.</dd>
                   1908: **
                   1909: ** [[SQLITE_CONFIG_HEAP]] <dt>SQLITE_CONFIG_HEAP</dt>
                   1910: ** <dd> ^This option specifies a static memory buffer that SQLite will use
                   1911: ** for all of its dynamic memory allocation needs beyond those provided
                   1912: ** for by [SQLITE_CONFIG_SCRATCH] and [SQLITE_CONFIG_PAGECACHE].
                   1913: ** There are three arguments: An 8-byte aligned pointer to the memory,
                   1914: ** the number of bytes in the memory buffer, and the minimum allocation size.
                   1915: ** ^If the first pointer (the memory pointer) is NULL, then SQLite reverts
                   1916: ** to using its default memory allocator (the system malloc() implementation),
                   1917: ** undoing any prior invocation of [SQLITE_CONFIG_MALLOC].  ^If the
                   1918: ** memory pointer is not NULL and either [SQLITE_ENABLE_MEMSYS3] or
                   1919: ** [SQLITE_ENABLE_MEMSYS5] are defined, then the alternative memory
                   1920: ** allocator is engaged to handle all of SQLites memory allocation needs.
                   1921: ** The first pointer (the memory pointer) must be aligned to an 8-byte
                   1922: ** boundary or subsequent behavior of SQLite will be undefined.
                   1923: ** The minimum allocation size is capped at 2^12. Reasonable values
                   1924: ** for the minimum allocation size are 2^5 through 2^8.</dd>
                   1925: **
                   1926: ** [[SQLITE_CONFIG_MUTEX]] <dt>SQLITE_CONFIG_MUTEX</dt>
                   1927: ** <dd> ^(This option takes a single argument which is a pointer to an
                   1928: ** instance of the [sqlite3_mutex_methods] structure.  The argument specifies
                   1929: ** alternative low-level mutex routines to be used in place
                   1930: ** the mutex routines built into SQLite.)^  ^SQLite makes a copy of the
                   1931: ** content of the [sqlite3_mutex_methods] structure before the call to
                   1932: ** [sqlite3_config()] returns. ^If SQLite is compiled with
                   1933: ** the [SQLITE_THREADSAFE | SQLITE_THREADSAFE=0] compile-time option then
                   1934: ** the entire mutexing subsystem is omitted from the build and hence calls to
                   1935: ** [sqlite3_config()] with the SQLITE_CONFIG_MUTEX configuration option will
                   1936: ** return [SQLITE_ERROR].</dd>
                   1937: **
                   1938: ** [[SQLITE_CONFIG_GETMUTEX]] <dt>SQLITE_CONFIG_GETMUTEX</dt>
                   1939: ** <dd> ^(This option takes a single argument which is a pointer to an
                   1940: ** instance of the [sqlite3_mutex_methods] structure.  The
                   1941: ** [sqlite3_mutex_methods]
                   1942: ** structure is filled with the currently defined mutex routines.)^
                   1943: ** This option can be used to overload the default mutex allocation
                   1944: ** routines with a wrapper used to track mutex usage for performance
                   1945: ** profiling or testing, for example.   ^If SQLite is compiled with
                   1946: ** the [SQLITE_THREADSAFE | SQLITE_THREADSAFE=0] compile-time option then
                   1947: ** the entire mutexing subsystem is omitted from the build and hence calls to
                   1948: ** [sqlite3_config()] with the SQLITE_CONFIG_GETMUTEX configuration option will
                   1949: ** return [SQLITE_ERROR].</dd>
                   1950: **
                   1951: ** [[SQLITE_CONFIG_LOOKASIDE]] <dt>SQLITE_CONFIG_LOOKASIDE</dt>
                   1952: ** <dd> ^(This option takes two arguments that determine the default
                   1953: ** memory allocation for the lookaside memory allocator on each
                   1954: ** [database connection].  The first argument is the
                   1955: ** size of each lookaside buffer slot and the second is the number of
                   1956: ** slots allocated to each database connection.)^  ^(This option sets the
                   1957: ** <i>default</i> lookaside size. The [SQLITE_DBCONFIG_LOOKASIDE]
                   1958: ** verb to [sqlite3_db_config()] can be used to change the lookaside
                   1959: ** configuration on individual connections.)^ </dd>
                   1960: **
                   1961: ** [[SQLITE_CONFIG_PCACHE]] <dt>SQLITE_CONFIG_PCACHE</dt>
                   1962: ** <dd> ^(This option takes a single argument which is a pointer to
                   1963: ** an [sqlite3_pcache_methods] object.  This object specifies the interface
                   1964: ** to a custom page cache implementation.)^  ^SQLite makes a copy of the
                   1965: ** object and uses it for page cache memory allocations.</dd>
                   1966: **
                   1967: ** [[SQLITE_CONFIG_GETPCACHE]] <dt>SQLITE_CONFIG_GETPCACHE</dt>
                   1968: ** <dd> ^(This option takes a single argument which is a pointer to an
                   1969: ** [sqlite3_pcache_methods] object.  SQLite copies of the current
                   1970: ** page cache implementation into that object.)^ </dd>
                   1971: **
                   1972: ** [[SQLITE_CONFIG_LOG]] <dt>SQLITE_CONFIG_LOG</dt>
                   1973: ** <dd> ^The SQLITE_CONFIG_LOG option takes two arguments: a pointer to a
                   1974: ** function with a call signature of void(*)(void*,int,const char*), 
                   1975: ** and a pointer to void. ^If the function pointer is not NULL, it is
                   1976: ** invoked by [sqlite3_log()] to process each logging event.  ^If the
                   1977: ** function pointer is NULL, the [sqlite3_log()] interface becomes a no-op.
                   1978: ** ^The void pointer that is the second argument to SQLITE_CONFIG_LOG is
                   1979: ** passed through as the first parameter to the application-defined logger
                   1980: ** function whenever that function is invoked.  ^The second parameter to
                   1981: ** the logger function is a copy of the first parameter to the corresponding
                   1982: ** [sqlite3_log()] call and is intended to be a [result code] or an
                   1983: ** [extended result code].  ^The third parameter passed to the logger is
                   1984: ** log message after formatting via [sqlite3_snprintf()].
                   1985: ** The SQLite logging interface is not reentrant; the logger function
                   1986: ** supplied by the application must not invoke any SQLite interface.
                   1987: ** In a multi-threaded application, the application-defined logger
                   1988: ** function must be threadsafe. </dd>
                   1989: **
                   1990: ** [[SQLITE_CONFIG_URI]] <dt>SQLITE_CONFIG_URI
                   1991: ** <dd> This option takes a single argument of type int. If non-zero, then
                   1992: ** URI handling is globally enabled. If the parameter is zero, then URI handling
                   1993: ** is globally disabled. If URI handling is globally enabled, all filenames
                   1994: ** passed to [sqlite3_open()], [sqlite3_open_v2()], [sqlite3_open16()] or
                   1995: ** specified as part of [ATTACH] commands are interpreted as URIs, regardless
                   1996: ** of whether or not the [SQLITE_OPEN_URI] flag is set when the database
                   1997: ** connection is opened. If it is globally disabled, filenames are
                   1998: ** only interpreted as URIs if the SQLITE_OPEN_URI flag is set when the
                   1999: ** database connection is opened. By default, URI handling is globally
                   2000: ** disabled. The default value may be changed by compiling with the
                   2001: ** [SQLITE_USE_URI] symbol defined.
                   2002: ** </dl>
                   2003: */
                   2004: #define SQLITE_CONFIG_SINGLETHREAD  1  /* nil */
                   2005: #define SQLITE_CONFIG_MULTITHREAD   2  /* nil */
                   2006: #define SQLITE_CONFIG_SERIALIZED    3  /* nil */
                   2007: #define SQLITE_CONFIG_MALLOC        4  /* sqlite3_mem_methods* */
                   2008: #define SQLITE_CONFIG_GETMALLOC     5  /* sqlite3_mem_methods* */
                   2009: #define SQLITE_CONFIG_SCRATCH       6  /* void*, int sz, int N */
                   2010: #define SQLITE_CONFIG_PAGECACHE     7  /* void*, int sz, int N */
                   2011: #define SQLITE_CONFIG_HEAP          8  /* void*, int nByte, int min */
                   2012: #define SQLITE_CONFIG_MEMSTATUS     9  /* boolean */
                   2013: #define SQLITE_CONFIG_MUTEX        10  /* sqlite3_mutex_methods* */
                   2014: #define SQLITE_CONFIG_GETMUTEX     11  /* sqlite3_mutex_methods* */
                   2015: /* previously SQLITE_CONFIG_CHUNKALLOC 12 which is now unused. */ 
                   2016: #define SQLITE_CONFIG_LOOKASIDE    13  /* int int */
                   2017: #define SQLITE_CONFIG_PCACHE       14  /* sqlite3_pcache_methods* */
                   2018: #define SQLITE_CONFIG_GETPCACHE    15  /* sqlite3_pcache_methods* */
                   2019: #define SQLITE_CONFIG_LOG          16  /* xFunc, void* */
                   2020: #define SQLITE_CONFIG_URI          17  /* int */
                   2021: 
                   2022: /*
                   2023: ** CAPI3REF: Database Connection Configuration Options
                   2024: **
                   2025: ** These constants are the available integer configuration options that
                   2026: ** can be passed as the second argument to the [sqlite3_db_config()] interface.
                   2027: **
                   2028: ** New configuration options may be added in future releases of SQLite.
                   2029: ** Existing configuration options might be discontinued.  Applications
                   2030: ** should check the return code from [sqlite3_db_config()] to make sure that
                   2031: ** the call worked.  ^The [sqlite3_db_config()] interface will return a
                   2032: ** non-zero [error code] if a discontinued or unsupported configuration option
                   2033: ** is invoked.
                   2034: **
                   2035: ** <dl>
                   2036: ** <dt>SQLITE_DBCONFIG_LOOKASIDE</dt>
                   2037: ** <dd> ^This option takes three additional arguments that determine the 
                   2038: ** [lookaside memory allocator] configuration for the [database connection].
                   2039: ** ^The first argument (the third parameter to [sqlite3_db_config()] is a
                   2040: ** pointer to a memory buffer to use for lookaside memory.
                   2041: ** ^The first argument after the SQLITE_DBCONFIG_LOOKASIDE verb
                   2042: ** may be NULL in which case SQLite will allocate the
                   2043: ** lookaside buffer itself using [sqlite3_malloc()]. ^The second argument is the
                   2044: ** size of each lookaside buffer slot.  ^The third argument is the number of
                   2045: ** slots.  The size of the buffer in the first argument must be greater than
                   2046: ** or equal to the product of the second and third arguments.  The buffer
                   2047: ** must be aligned to an 8-byte boundary.  ^If the second argument to
                   2048: ** SQLITE_DBCONFIG_LOOKASIDE is not a multiple of 8, it is internally
                   2049: ** rounded down to the next smaller multiple of 8.  ^(The lookaside memory
                   2050: ** configuration for a database connection can only be changed when that
                   2051: ** connection is not currently using lookaside memory, or in other words
                   2052: ** when the "current value" returned by
                   2053: ** [sqlite3_db_status](D,[SQLITE_CONFIG_LOOKASIDE],...) is zero.
                   2054: ** Any attempt to change the lookaside memory configuration when lookaside
                   2055: ** memory is in use leaves the configuration unchanged and returns 
                   2056: ** [SQLITE_BUSY].)^</dd>
                   2057: **
                   2058: ** <dt>SQLITE_DBCONFIG_ENABLE_FKEY</dt>
                   2059: ** <dd> ^This option is used to enable or disable the enforcement of
                   2060: ** [foreign key constraints].  There should be two additional arguments.
                   2061: ** The first argument is an integer which is 0 to disable FK enforcement,
                   2062: ** positive to enable FK enforcement or negative to leave FK enforcement
                   2063: ** unchanged.  The second parameter is a pointer to an integer into which
                   2064: ** is written 0 or 1 to indicate whether FK enforcement is off or on
                   2065: ** following this call.  The second parameter may be a NULL pointer, in
                   2066: ** which case the FK enforcement setting is not reported back. </dd>
                   2067: **
                   2068: ** <dt>SQLITE_DBCONFIG_ENABLE_TRIGGER</dt>
                   2069: ** <dd> ^This option is used to enable or disable [CREATE TRIGGER | triggers].
                   2070: ** There should be two additional arguments.
                   2071: ** The first argument is an integer which is 0 to disable triggers,
                   2072: ** positive to enable triggers or negative to leave the setting unchanged.
                   2073: ** The second parameter is a pointer to an integer into which
                   2074: ** is written 0 or 1 to indicate whether triggers are disabled or enabled
                   2075: ** following this call.  The second parameter may be a NULL pointer, in
                   2076: ** which case the trigger setting is not reported back. </dd>
                   2077: **
                   2078: ** </dl>
                   2079: */
                   2080: #define SQLITE_DBCONFIG_LOOKASIDE       1001  /* void* int int */
                   2081: #define SQLITE_DBCONFIG_ENABLE_FKEY     1002  /* int int* */
                   2082: #define SQLITE_DBCONFIG_ENABLE_TRIGGER  1003  /* int int* */
                   2083: 
                   2084: 
                   2085: /*
                   2086: ** CAPI3REF: Enable Or Disable Extended Result Codes
                   2087: **
                   2088: ** ^The sqlite3_extended_result_codes() routine enables or disables the
                   2089: ** [extended result codes] feature of SQLite. ^The extended result
                   2090: ** codes are disabled by default for historical compatibility.
                   2091: */
                   2092: SQLITE_API int sqlite3_extended_result_codes(sqlite3*, int onoff);
                   2093: 
                   2094: /*
                   2095: ** CAPI3REF: Last Insert Rowid
                   2096: **
                   2097: ** ^Each entry in an SQLite table has a unique 64-bit signed
                   2098: ** integer key called the [ROWID | "rowid"]. ^The rowid is always available
                   2099: ** as an undeclared column named ROWID, OID, or _ROWID_ as long as those
                   2100: ** names are not also used by explicitly declared columns. ^If
                   2101: ** the table has a column of type [INTEGER PRIMARY KEY] then that column
                   2102: ** is another alias for the rowid.
                   2103: **
                   2104: ** ^This routine returns the [rowid] of the most recent
                   2105: ** successful [INSERT] into the database from the [database connection]
                   2106: ** in the first argument.  ^As of SQLite version 3.7.7, this routines
                   2107: ** records the last insert rowid of both ordinary tables and [virtual tables].
                   2108: ** ^If no successful [INSERT]s
                   2109: ** have ever occurred on that database connection, zero is returned.
                   2110: **
                   2111: ** ^(If an [INSERT] occurs within a trigger or within a [virtual table]
                   2112: ** method, then this routine will return the [rowid] of the inserted
                   2113: ** row as long as the trigger or virtual table method is running.
                   2114: ** But once the trigger or virtual table method ends, the value returned 
                   2115: ** by this routine reverts to what it was before the trigger or virtual
                   2116: ** table method began.)^
                   2117: **
                   2118: ** ^An [INSERT] that fails due to a constraint violation is not a
                   2119: ** successful [INSERT] and does not change the value returned by this
                   2120: ** routine.  ^Thus INSERT OR FAIL, INSERT OR IGNORE, INSERT OR ROLLBACK,
                   2121: ** and INSERT OR ABORT make no changes to the return value of this
                   2122: ** routine when their insertion fails.  ^(When INSERT OR REPLACE
                   2123: ** encounters a constraint violation, it does not fail.  The
                   2124: ** INSERT continues to completion after deleting rows that caused
                   2125: ** the constraint problem so INSERT OR REPLACE will always change
                   2126: ** the return value of this interface.)^
                   2127: **
                   2128: ** ^For the purposes of this routine, an [INSERT] is considered to
                   2129: ** be successful even if it is subsequently rolled back.
                   2130: **
                   2131: ** This function is accessible to SQL statements via the
                   2132: ** [last_insert_rowid() SQL function].
                   2133: **
                   2134: ** If a separate thread performs a new [INSERT] on the same
                   2135: ** database connection while the [sqlite3_last_insert_rowid()]
                   2136: ** function is running and thus changes the last insert [rowid],
                   2137: ** then the value returned by [sqlite3_last_insert_rowid()] is
                   2138: ** unpredictable and might not equal either the old or the new
                   2139: ** last insert [rowid].
                   2140: */
                   2141: SQLITE_API sqlite3_int64 sqlite3_last_insert_rowid(sqlite3*);
                   2142: 
                   2143: /*
                   2144: ** CAPI3REF: Count The Number Of Rows Modified
                   2145: **
                   2146: ** ^This function returns the number of database rows that were changed
                   2147: ** or inserted or deleted by the most recently completed SQL statement
                   2148: ** on the [database connection] specified by the first parameter.
                   2149: ** ^(Only changes that are directly specified by the [INSERT], [UPDATE],
                   2150: ** or [DELETE] statement are counted.  Auxiliary changes caused by
                   2151: ** triggers or [foreign key actions] are not counted.)^ Use the
                   2152: ** [sqlite3_total_changes()] function to find the total number of changes
                   2153: ** including changes caused by triggers and foreign key actions.
                   2154: **
                   2155: ** ^Changes to a view that are simulated by an [INSTEAD OF trigger]
                   2156: ** are not counted.  Only real table changes are counted.
                   2157: **
                   2158: ** ^(A "row change" is a change to a single row of a single table
                   2159: ** caused by an INSERT, DELETE, or UPDATE statement.  Rows that
                   2160: ** are changed as side effects of [REPLACE] constraint resolution,
                   2161: ** rollback, ABORT processing, [DROP TABLE], or by any other
                   2162: ** mechanisms do not count as direct row changes.)^
                   2163: **
                   2164: ** A "trigger context" is a scope of execution that begins and
                   2165: ** ends with the script of a [CREATE TRIGGER | trigger]. 
                   2166: ** Most SQL statements are
                   2167: ** evaluated outside of any trigger.  This is the "top level"
                   2168: ** trigger context.  If a trigger fires from the top level, a
                   2169: ** new trigger context is entered for the duration of that one
                   2170: ** trigger.  Subtriggers create subcontexts for their duration.
                   2171: **
                   2172: ** ^Calling [sqlite3_exec()] or [sqlite3_step()] recursively does
                   2173: ** not create a new trigger context.
                   2174: **
                   2175: ** ^This function returns the number of direct row changes in the
                   2176: ** most recent INSERT, UPDATE, or DELETE statement within the same
                   2177: ** trigger context.
                   2178: **
                   2179: ** ^Thus, when called from the top level, this function returns the
                   2180: ** number of changes in the most recent INSERT, UPDATE, or DELETE
                   2181: ** that also occurred at the top level.  ^(Within the body of a trigger,
                   2182: ** the sqlite3_changes() interface can be called to find the number of
                   2183: ** changes in the most recently completed INSERT, UPDATE, or DELETE
                   2184: ** statement within the body of the same trigger.
                   2185: ** However, the number returned does not include changes
                   2186: ** caused by subtriggers since those have their own context.)^
                   2187: **
                   2188: ** See also the [sqlite3_total_changes()] interface, the
                   2189: ** [count_changes pragma], and the [changes() SQL function].
                   2190: **
                   2191: ** If a separate thread makes changes on the same database connection
                   2192: ** while [sqlite3_changes()] is running then the value returned
                   2193: ** is unpredictable and not meaningful.
                   2194: */
                   2195: SQLITE_API int sqlite3_changes(sqlite3*);
                   2196: 
                   2197: /*
                   2198: ** CAPI3REF: Total Number Of Rows Modified
                   2199: **
                   2200: ** ^This function returns the number of row changes caused by [INSERT],
                   2201: ** [UPDATE] or [DELETE] statements since the [database connection] was opened.
                   2202: ** ^(The count returned by sqlite3_total_changes() includes all changes
                   2203: ** from all [CREATE TRIGGER | trigger] contexts and changes made by
                   2204: ** [foreign key actions]. However,
                   2205: ** the count does not include changes used to implement [REPLACE] constraints,
                   2206: ** do rollbacks or ABORT processing, or [DROP TABLE] processing.  The
                   2207: ** count does not include rows of views that fire an [INSTEAD OF trigger],
                   2208: ** though if the INSTEAD OF trigger makes changes of its own, those changes 
                   2209: ** are counted.)^
                   2210: ** ^The sqlite3_total_changes() function counts the changes as soon as
                   2211: ** the statement that makes them is completed (when the statement handle
                   2212: ** is passed to [sqlite3_reset()] or [sqlite3_finalize()]).
                   2213: **
                   2214: ** See also the [sqlite3_changes()] interface, the
                   2215: ** [count_changes pragma], and the [total_changes() SQL function].
                   2216: **
                   2217: ** If a separate thread makes changes on the same database connection
                   2218: ** while [sqlite3_total_changes()] is running then the value
                   2219: ** returned is unpredictable and not meaningful.
                   2220: */
                   2221: SQLITE_API int sqlite3_total_changes(sqlite3*);
                   2222: 
                   2223: /*
                   2224: ** CAPI3REF: Interrupt A Long-Running Query
                   2225: **
                   2226: ** ^This function causes any pending database operation to abort and
                   2227: ** return at its earliest opportunity. This routine is typically
                   2228: ** called in response to a user action such as pressing "Cancel"
                   2229: ** or Ctrl-C where the user wants a long query operation to halt
                   2230: ** immediately.
                   2231: **
                   2232: ** ^It is safe to call this routine from a thread different from the
                   2233: ** thread that is currently running the database operation.  But it
                   2234: ** is not safe to call this routine with a [database connection] that
                   2235: ** is closed or might close before sqlite3_interrupt() returns.
                   2236: **
                   2237: ** ^If an SQL operation is very nearly finished at the time when
                   2238: ** sqlite3_interrupt() is called, then it might not have an opportunity
                   2239: ** to be interrupted and might continue to completion.
                   2240: **
                   2241: ** ^An SQL operation that is interrupted will return [SQLITE_INTERRUPT].
                   2242: ** ^If the interrupted SQL operation is an INSERT, UPDATE, or DELETE
                   2243: ** that is inside an explicit transaction, then the entire transaction
                   2244: ** will be rolled back automatically.
                   2245: **
                   2246: ** ^The sqlite3_interrupt(D) call is in effect until all currently running
                   2247: ** SQL statements on [database connection] D complete.  ^Any new SQL statements
                   2248: ** that are started after the sqlite3_interrupt() call and before the 
                   2249: ** running statements reaches zero are interrupted as if they had been
                   2250: ** running prior to the sqlite3_interrupt() call.  ^New SQL statements
                   2251: ** that are started after the running statement count reaches zero are
                   2252: ** not effected by the sqlite3_interrupt().
                   2253: ** ^A call to sqlite3_interrupt(D) that occurs when there are no running
                   2254: ** SQL statements is a no-op and has no effect on SQL statements
                   2255: ** that are started after the sqlite3_interrupt() call returns.
                   2256: **
                   2257: ** If the database connection closes while [sqlite3_interrupt()]
                   2258: ** is running then bad things will likely happen.
                   2259: */
                   2260: SQLITE_API void sqlite3_interrupt(sqlite3*);
                   2261: 
                   2262: /*
                   2263: ** CAPI3REF: Determine If An SQL Statement Is Complete
                   2264: **
                   2265: ** These routines are useful during command-line input to determine if the
                   2266: ** currently entered text seems to form a complete SQL statement or
                   2267: ** if additional input is needed before sending the text into
                   2268: ** SQLite for parsing.  ^These routines return 1 if the input string
                   2269: ** appears to be a complete SQL statement.  ^A statement is judged to be
                   2270: ** complete if it ends with a semicolon token and is not a prefix of a
                   2271: ** well-formed CREATE TRIGGER statement.  ^Semicolons that are embedded within
                   2272: ** string literals or quoted identifier names or comments are not
                   2273: ** independent tokens (they are part of the token in which they are
                   2274: ** embedded) and thus do not count as a statement terminator.  ^Whitespace
                   2275: ** and comments that follow the final semicolon are ignored.
                   2276: **
                   2277: ** ^These routines return 0 if the statement is incomplete.  ^If a
                   2278: ** memory allocation fails, then SQLITE_NOMEM is returned.
                   2279: **
                   2280: ** ^These routines do not parse the SQL statements thus
                   2281: ** will not detect syntactically incorrect SQL.
                   2282: **
                   2283: ** ^(If SQLite has not been initialized using [sqlite3_initialize()] prior 
                   2284: ** to invoking sqlite3_complete16() then sqlite3_initialize() is invoked
                   2285: ** automatically by sqlite3_complete16().  If that initialization fails,
                   2286: ** then the return value from sqlite3_complete16() will be non-zero
                   2287: ** regardless of whether or not the input SQL is complete.)^
                   2288: **
                   2289: ** The input to [sqlite3_complete()] must be a zero-terminated
                   2290: ** UTF-8 string.
                   2291: **
                   2292: ** The input to [sqlite3_complete16()] must be a zero-terminated
                   2293: ** UTF-16 string in native byte order.
                   2294: */
                   2295: SQLITE_API int sqlite3_complete(const char *sql);
                   2296: SQLITE_API int sqlite3_complete16(const void *sql);
                   2297: 
                   2298: /*
                   2299: ** CAPI3REF: Register A Callback To Handle SQLITE_BUSY Errors
                   2300: **
                   2301: ** ^This routine sets a callback function that might be invoked whenever
                   2302: ** an attempt is made to open a database table that another thread
                   2303: ** or process has locked.
                   2304: **
                   2305: ** ^If the busy callback is NULL, then [SQLITE_BUSY] or [SQLITE_IOERR_BLOCKED]
                   2306: ** is returned immediately upon encountering the lock.  ^If the busy callback
                   2307: ** is not NULL, then the callback might be invoked with two arguments.
                   2308: **
                   2309: ** ^The first argument to the busy handler is a copy of the void* pointer which
                   2310: ** is the third argument to sqlite3_busy_handler().  ^The second argument to
                   2311: ** the busy handler callback is the number of times that the busy handler has
                   2312: ** been invoked for this locking event.  ^If the
                   2313: ** busy callback returns 0, then no additional attempts are made to
                   2314: ** access the database and [SQLITE_BUSY] or [SQLITE_IOERR_BLOCKED] is returned.
                   2315: ** ^If the callback returns non-zero, then another attempt
                   2316: ** is made to open the database for reading and the cycle repeats.
                   2317: **
                   2318: ** The presence of a busy handler does not guarantee that it will be invoked
                   2319: ** when there is lock contention. ^If SQLite determines that invoking the busy
                   2320: ** handler could result in a deadlock, it will go ahead and return [SQLITE_BUSY]
                   2321: ** or [SQLITE_IOERR_BLOCKED] instead of invoking the busy handler.
                   2322: ** Consider a scenario where one process is holding a read lock that
                   2323: ** it is trying to promote to a reserved lock and
                   2324: ** a second process is holding a reserved lock that it is trying
                   2325: ** to promote to an exclusive lock.  The first process cannot proceed
                   2326: ** because it is blocked by the second and the second process cannot
                   2327: ** proceed because it is blocked by the first.  If both processes
                   2328: ** invoke the busy handlers, neither will make any progress.  Therefore,
                   2329: ** SQLite returns [SQLITE_BUSY] for the first process, hoping that this
                   2330: ** will induce the first process to release its read lock and allow
                   2331: ** the second process to proceed.
                   2332: **
                   2333: ** ^The default busy callback is NULL.
                   2334: **
                   2335: ** ^The [SQLITE_BUSY] error is converted to [SQLITE_IOERR_BLOCKED]
                   2336: ** when SQLite is in the middle of a large transaction where all the
                   2337: ** changes will not fit into the in-memory cache.  SQLite will
                   2338: ** already hold a RESERVED lock on the database file, but it needs
                   2339: ** to promote this lock to EXCLUSIVE so that it can spill cache
                   2340: ** pages into the database file without harm to concurrent
                   2341: ** readers.  ^If it is unable to promote the lock, then the in-memory
                   2342: ** cache will be left in an inconsistent state and so the error
                   2343: ** code is promoted from the relatively benign [SQLITE_BUSY] to
                   2344: ** the more severe [SQLITE_IOERR_BLOCKED].  ^This error code promotion
                   2345: ** forces an automatic rollback of the changes.  See the
                   2346: ** <a href="/cvstrac/wiki?p=CorruptionFollowingBusyError">
                   2347: ** CorruptionFollowingBusyError</a> wiki page for a discussion of why
                   2348: ** this is important.
                   2349: **
                   2350: ** ^(There can only be a single busy handler defined for each
                   2351: ** [database connection].  Setting a new busy handler clears any
                   2352: ** previously set handler.)^  ^Note that calling [sqlite3_busy_timeout()]
                   2353: ** will also set or clear the busy handler.
                   2354: **
                   2355: ** The busy callback should not take any actions which modify the
                   2356: ** database connection that invoked the busy handler.  Any such actions
                   2357: ** result in undefined behavior.
                   2358: ** 
                   2359: ** A busy handler must not close the database connection
                   2360: ** or [prepared statement] that invoked the busy handler.
                   2361: */
                   2362: SQLITE_API int sqlite3_busy_handler(sqlite3*, int(*)(void*,int), void*);
                   2363: 
                   2364: /*
                   2365: ** CAPI3REF: Set A Busy Timeout
                   2366: **
                   2367: ** ^This routine sets a [sqlite3_busy_handler | busy handler] that sleeps
                   2368: ** for a specified amount of time when a table is locked.  ^The handler
                   2369: ** will sleep multiple times until at least "ms" milliseconds of sleeping
                   2370: ** have accumulated.  ^After at least "ms" milliseconds of sleeping,
                   2371: ** the handler returns 0 which causes [sqlite3_step()] to return
                   2372: ** [SQLITE_BUSY] or [SQLITE_IOERR_BLOCKED].
                   2373: **
                   2374: ** ^Calling this routine with an argument less than or equal to zero
                   2375: ** turns off all busy handlers.
                   2376: **
                   2377: ** ^(There can only be a single busy handler for a particular
                   2378: ** [database connection] any any given moment.  If another busy handler
                   2379: ** was defined  (using [sqlite3_busy_handler()]) prior to calling
                   2380: ** this routine, that other busy handler is cleared.)^
                   2381: */
                   2382: SQLITE_API int sqlite3_busy_timeout(sqlite3*, int ms);
                   2383: 
                   2384: /*
                   2385: ** CAPI3REF: Convenience Routines For Running Queries
                   2386: **
                   2387: ** This is a legacy interface that is preserved for backwards compatibility.
                   2388: ** Use of this interface is not recommended.
                   2389: **
                   2390: ** Definition: A <b>result table</b> is memory data structure created by the
                   2391: ** [sqlite3_get_table()] interface.  A result table records the
                   2392: ** complete query results from one or more queries.
                   2393: **
                   2394: ** The table conceptually has a number of rows and columns.  But
                   2395: ** these numbers are not part of the result table itself.  These
                   2396: ** numbers are obtained separately.  Let N be the number of rows
                   2397: ** and M be the number of columns.
                   2398: **
                   2399: ** A result table is an array of pointers to zero-terminated UTF-8 strings.
                   2400: ** There are (N+1)*M elements in the array.  The first M pointers point
                   2401: ** to zero-terminated strings that  contain the names of the columns.
                   2402: ** The remaining entries all point to query results.  NULL values result
                   2403: ** in NULL pointers.  All other values are in their UTF-8 zero-terminated
                   2404: ** string representation as returned by [sqlite3_column_text()].
                   2405: **
                   2406: ** A result table might consist of one or more memory allocations.
                   2407: ** It is not safe to pass a result table directly to [sqlite3_free()].
                   2408: ** A result table should be deallocated using [sqlite3_free_table()].
                   2409: **
                   2410: ** ^(As an example of the result table format, suppose a query result
                   2411: ** is as follows:
                   2412: **
                   2413: ** <blockquote><pre>
                   2414: **        Name        | Age
                   2415: **        -----------------------
                   2416: **        Alice       | 43
                   2417: **        Bob         | 28
                   2418: **        Cindy       | 21
                   2419: ** </pre></blockquote>
                   2420: **
                   2421: ** There are two column (M==2) and three rows (N==3).  Thus the
                   2422: ** result table has 8 entries.  Suppose the result table is stored
                   2423: ** in an array names azResult.  Then azResult holds this content:
                   2424: **
                   2425: ** <blockquote><pre>
                   2426: **        azResult&#91;0] = "Name";
                   2427: **        azResult&#91;1] = "Age";
                   2428: **        azResult&#91;2] = "Alice";
                   2429: **        azResult&#91;3] = "43";
                   2430: **        azResult&#91;4] = "Bob";
                   2431: **        azResult&#91;5] = "28";
                   2432: **        azResult&#91;6] = "Cindy";
                   2433: **        azResult&#91;7] = "21";
                   2434: ** </pre></blockquote>)^
                   2435: **
                   2436: ** ^The sqlite3_get_table() function evaluates one or more
                   2437: ** semicolon-separated SQL statements in the zero-terminated UTF-8
                   2438: ** string of its 2nd parameter and returns a result table to the
                   2439: ** pointer given in its 3rd parameter.
                   2440: **
                   2441: ** After the application has finished with the result from sqlite3_get_table(),
                   2442: ** it must pass the result table pointer to sqlite3_free_table() in order to
                   2443: ** release the memory that was malloced.  Because of the way the
                   2444: ** [sqlite3_malloc()] happens within sqlite3_get_table(), the calling
                   2445: ** function must not try to call [sqlite3_free()] directly.  Only
                   2446: ** [sqlite3_free_table()] is able to release the memory properly and safely.
                   2447: **
                   2448: ** The sqlite3_get_table() interface is implemented as a wrapper around
                   2449: ** [sqlite3_exec()].  The sqlite3_get_table() routine does not have access
                   2450: ** to any internal data structures of SQLite.  It uses only the public
                   2451: ** interface defined here.  As a consequence, errors that occur in the
                   2452: ** wrapper layer outside of the internal [sqlite3_exec()] call are not
                   2453: ** reflected in subsequent calls to [sqlite3_errcode()] or
                   2454: ** [sqlite3_errmsg()].
                   2455: */
                   2456: SQLITE_API int sqlite3_get_table(
                   2457:   sqlite3 *db,          /* An open database */
                   2458:   const char *zSql,     /* SQL to be evaluated */
                   2459:   char ***pazResult,    /* Results of the query */
                   2460:   int *pnRow,           /* Number of result rows written here */
                   2461:   int *pnColumn,        /* Number of result columns written here */
                   2462:   char **pzErrmsg       /* Error msg written here */
                   2463: );
                   2464: SQLITE_API void sqlite3_free_table(char **result);
                   2465: 
                   2466: /*
                   2467: ** CAPI3REF: Formatted String Printing Functions
                   2468: **
                   2469: ** These routines are work-alikes of the "printf()" family of functions
                   2470: ** from the standard C library.
                   2471: **
                   2472: ** ^The sqlite3_mprintf() and sqlite3_vmprintf() routines write their
                   2473: ** results into memory obtained from [sqlite3_malloc()].
                   2474: ** The strings returned by these two routines should be
                   2475: ** released by [sqlite3_free()].  ^Both routines return a
                   2476: ** NULL pointer if [sqlite3_malloc()] is unable to allocate enough
                   2477: ** memory to hold the resulting string.
                   2478: **
                   2479: ** ^(The sqlite3_snprintf() routine is similar to "snprintf()" from
                   2480: ** the standard C library.  The result is written into the
                   2481: ** buffer supplied as the second parameter whose size is given by
                   2482: ** the first parameter. Note that the order of the
                   2483: ** first two parameters is reversed from snprintf().)^  This is an
                   2484: ** historical accident that cannot be fixed without breaking
                   2485: ** backwards compatibility.  ^(Note also that sqlite3_snprintf()
                   2486: ** returns a pointer to its buffer instead of the number of
                   2487: ** characters actually written into the buffer.)^  We admit that
                   2488: ** the number of characters written would be a more useful return
                   2489: ** value but we cannot change the implementation of sqlite3_snprintf()
                   2490: ** now without breaking compatibility.
                   2491: **
                   2492: ** ^As long as the buffer size is greater than zero, sqlite3_snprintf()
                   2493: ** guarantees that the buffer is always zero-terminated.  ^The first
                   2494: ** parameter "n" is the total size of the buffer, including space for
                   2495: ** the zero terminator.  So the longest string that can be completely
                   2496: ** written will be n-1 characters.
                   2497: **
                   2498: ** ^The sqlite3_vsnprintf() routine is a varargs version of sqlite3_snprintf().
                   2499: **
                   2500: ** These routines all implement some additional formatting
                   2501: ** options that are useful for constructing SQL statements.
                   2502: ** All of the usual printf() formatting options apply.  In addition, there
                   2503: ** is are "%q", "%Q", and "%z" options.
                   2504: **
                   2505: ** ^(The %q option works like %s in that it substitutes a null-terminated
                   2506: ** string from the argument list.  But %q also doubles every '\'' character.
                   2507: ** %q is designed for use inside a string literal.)^  By doubling each '\''
                   2508: ** character it escapes that character and allows it to be inserted into
                   2509: ** the string.
                   2510: **
                   2511: ** For example, assume the string variable zText contains text as follows:
                   2512: **
                   2513: ** <blockquote><pre>
                   2514: **  char *zText = "It's a happy day!";
                   2515: ** </pre></blockquote>
                   2516: **
                   2517: ** One can use this text in an SQL statement as follows:
                   2518: **
                   2519: ** <blockquote><pre>
                   2520: **  char *zSQL = sqlite3_mprintf("INSERT INTO table VALUES('%q')", zText);
                   2521: **  sqlite3_exec(db, zSQL, 0, 0, 0);
                   2522: **  sqlite3_free(zSQL);
                   2523: ** </pre></blockquote>
                   2524: **
                   2525: ** Because the %q format string is used, the '\'' character in zText
                   2526: ** is escaped and the SQL generated is as follows:
                   2527: **
                   2528: ** <blockquote><pre>
                   2529: **  INSERT INTO table1 VALUES('It''s a happy day!')
                   2530: ** </pre></blockquote>
                   2531: **
                   2532: ** This is correct.  Had we used %s instead of %q, the generated SQL
                   2533: ** would have looked like this:
                   2534: **
                   2535: ** <blockquote><pre>
                   2536: **  INSERT INTO table1 VALUES('It's a happy day!');
                   2537: ** </pre></blockquote>
                   2538: **
                   2539: ** This second example is an SQL syntax error.  As a general rule you should
                   2540: ** always use %q instead of %s when inserting text into a string literal.
                   2541: **
                   2542: ** ^(The %Q option works like %q except it also adds single quotes around
                   2543: ** the outside of the total string.  Additionally, if the parameter in the
                   2544: ** argument list is a NULL pointer, %Q substitutes the text "NULL" (without
                   2545: ** single quotes).)^  So, for example, one could say:
                   2546: **
                   2547: ** <blockquote><pre>
                   2548: **  char *zSQL = sqlite3_mprintf("INSERT INTO table VALUES(%Q)", zText);
                   2549: **  sqlite3_exec(db, zSQL, 0, 0, 0);
                   2550: **  sqlite3_free(zSQL);
                   2551: ** </pre></blockquote>
                   2552: **
                   2553: ** The code above will render a correct SQL statement in the zSQL
                   2554: ** variable even if the zText variable is a NULL pointer.
                   2555: **
                   2556: ** ^(The "%z" formatting option works like "%s" but with the
                   2557: ** addition that after the string has been read and copied into
                   2558: ** the result, [sqlite3_free()] is called on the input string.)^
                   2559: */
                   2560: SQLITE_API char *sqlite3_mprintf(const char*,...);
                   2561: SQLITE_API char *sqlite3_vmprintf(const char*, va_list);
                   2562: SQLITE_API char *sqlite3_snprintf(int,char*,const char*, ...);
                   2563: SQLITE_API char *sqlite3_vsnprintf(int,char*,const char*, va_list);
                   2564: 
                   2565: /*
                   2566: ** CAPI3REF: Memory Allocation Subsystem
                   2567: **
                   2568: ** The SQLite core uses these three routines for all of its own
                   2569: ** internal memory allocation needs. "Core" in the previous sentence
                   2570: ** does not include operating-system specific VFS implementation.  The
                   2571: ** Windows VFS uses native malloc() and free() for some operations.
                   2572: **
                   2573: ** ^The sqlite3_malloc() routine returns a pointer to a block
                   2574: ** of memory at least N bytes in length, where N is the parameter.
                   2575: ** ^If sqlite3_malloc() is unable to obtain sufficient free
                   2576: ** memory, it returns a NULL pointer.  ^If the parameter N to
                   2577: ** sqlite3_malloc() is zero or negative then sqlite3_malloc() returns
                   2578: ** a NULL pointer.
                   2579: **
                   2580: ** ^Calling sqlite3_free() with a pointer previously returned
                   2581: ** by sqlite3_malloc() or sqlite3_realloc() releases that memory so
                   2582: ** that it might be reused.  ^The sqlite3_free() routine is
                   2583: ** a no-op if is called with a NULL pointer.  Passing a NULL pointer
                   2584: ** to sqlite3_free() is harmless.  After being freed, memory
                   2585: ** should neither be read nor written.  Even reading previously freed
                   2586: ** memory might result in a segmentation fault or other severe error.
                   2587: ** Memory corruption, a segmentation fault, or other severe error
                   2588: ** might result if sqlite3_free() is called with a non-NULL pointer that
                   2589: ** was not obtained from sqlite3_malloc() or sqlite3_realloc().
                   2590: **
                   2591: ** ^(The sqlite3_realloc() interface attempts to resize a
                   2592: ** prior memory allocation to be at least N bytes, where N is the
                   2593: ** second parameter.  The memory allocation to be resized is the first
                   2594: ** parameter.)^ ^ If the first parameter to sqlite3_realloc()
                   2595: ** is a NULL pointer then its behavior is identical to calling
                   2596: ** sqlite3_malloc(N) where N is the second parameter to sqlite3_realloc().
                   2597: ** ^If the second parameter to sqlite3_realloc() is zero or
                   2598: ** negative then the behavior is exactly the same as calling
                   2599: ** sqlite3_free(P) where P is the first parameter to sqlite3_realloc().
                   2600: ** ^sqlite3_realloc() returns a pointer to a memory allocation
                   2601: ** of at least N bytes in size or NULL if sufficient memory is unavailable.
                   2602: ** ^If M is the size of the prior allocation, then min(N,M) bytes
                   2603: ** of the prior allocation are copied into the beginning of buffer returned
                   2604: ** by sqlite3_realloc() and the prior allocation is freed.
                   2605: ** ^If sqlite3_realloc() returns NULL, then the prior allocation
                   2606: ** is not freed.
                   2607: **
                   2608: ** ^The memory returned by sqlite3_malloc() and sqlite3_realloc()
                   2609: ** is always aligned to at least an 8 byte boundary, or to a
                   2610: ** 4 byte boundary if the [SQLITE_4_BYTE_ALIGNED_MALLOC] compile-time
                   2611: ** option is used.
                   2612: **
                   2613: ** In SQLite version 3.5.0 and 3.5.1, it was possible to define
                   2614: ** the SQLITE_OMIT_MEMORY_ALLOCATION which would cause the built-in
                   2615: ** implementation of these routines to be omitted.  That capability
                   2616: ** is no longer provided.  Only built-in memory allocators can be used.
                   2617: **
                   2618: ** The Windows OS interface layer calls
                   2619: ** the system malloc() and free() directly when converting
                   2620: ** filenames between the UTF-8 encoding used by SQLite
                   2621: ** and whatever filename encoding is used by the particular Windows
                   2622: ** installation.  Memory allocation errors are detected, but
                   2623: ** they are reported back as [SQLITE_CANTOPEN] or
                   2624: ** [SQLITE_IOERR] rather than [SQLITE_NOMEM].
                   2625: **
                   2626: ** The pointer arguments to [sqlite3_free()] and [sqlite3_realloc()]
                   2627: ** must be either NULL or else pointers obtained from a prior
                   2628: ** invocation of [sqlite3_malloc()] or [sqlite3_realloc()] that have
                   2629: ** not yet been released.
                   2630: **
                   2631: ** The application must not read or write any part of
                   2632: ** a block of memory after it has been released using
                   2633: ** [sqlite3_free()] or [sqlite3_realloc()].
                   2634: */
                   2635: SQLITE_API void *sqlite3_malloc(int);
                   2636: SQLITE_API void *sqlite3_realloc(void*, int);
                   2637: SQLITE_API void sqlite3_free(void*);
                   2638: 
                   2639: /*
                   2640: ** CAPI3REF: Memory Allocator Statistics
                   2641: **
                   2642: ** SQLite provides these two interfaces for reporting on the status
                   2643: ** of the [sqlite3_malloc()], [sqlite3_free()], and [sqlite3_realloc()]
                   2644: ** routines, which form the built-in memory allocation subsystem.
                   2645: **
                   2646: ** ^The [sqlite3_memory_used()] routine returns the number of bytes
                   2647: ** of memory currently outstanding (malloced but not freed).
                   2648: ** ^The [sqlite3_memory_highwater()] routine returns the maximum
                   2649: ** value of [sqlite3_memory_used()] since the high-water mark
                   2650: ** was last reset.  ^The values returned by [sqlite3_memory_used()] and
                   2651: ** [sqlite3_memory_highwater()] include any overhead
                   2652: ** added by SQLite in its implementation of [sqlite3_malloc()],
                   2653: ** but not overhead added by the any underlying system library
                   2654: ** routines that [sqlite3_malloc()] may call.
                   2655: **
                   2656: ** ^The memory high-water mark is reset to the current value of
                   2657: ** [sqlite3_memory_used()] if and only if the parameter to
                   2658: ** [sqlite3_memory_highwater()] is true.  ^The value returned
                   2659: ** by [sqlite3_memory_highwater(1)] is the high-water mark
                   2660: ** prior to the reset.
                   2661: */
                   2662: SQLITE_API sqlite3_int64 sqlite3_memory_used(void);
                   2663: SQLITE_API sqlite3_int64 sqlite3_memory_highwater(int resetFlag);
                   2664: 
                   2665: /*
                   2666: ** CAPI3REF: Pseudo-Random Number Generator
                   2667: **
                   2668: ** SQLite contains a high-quality pseudo-random number generator (PRNG) used to
                   2669: ** select random [ROWID | ROWIDs] when inserting new records into a table that
                   2670: ** already uses the largest possible [ROWID].  The PRNG is also used for
                   2671: ** the build-in random() and randomblob() SQL functions.  This interface allows
                   2672: ** applications to access the same PRNG for other purposes.
                   2673: **
                   2674: ** ^A call to this routine stores N bytes of randomness into buffer P.
                   2675: **
                   2676: ** ^The first time this routine is invoked (either internally or by
                   2677: ** the application) the PRNG is seeded using randomness obtained
                   2678: ** from the xRandomness method of the default [sqlite3_vfs] object.
                   2679: ** ^On all subsequent invocations, the pseudo-randomness is generated
                   2680: ** internally and without recourse to the [sqlite3_vfs] xRandomness
                   2681: ** method.
                   2682: */
                   2683: SQLITE_API void sqlite3_randomness(int N, void *P);
                   2684: 
                   2685: /*
                   2686: ** CAPI3REF: Compile-Time Authorization Callbacks
                   2687: **
                   2688: ** ^This routine registers an authorizer callback with a particular
                   2689: ** [database connection], supplied in the first argument.
                   2690: ** ^The authorizer callback is invoked as SQL statements are being compiled
                   2691: ** by [sqlite3_prepare()] or its variants [sqlite3_prepare_v2()],
                   2692: ** [sqlite3_prepare16()] and [sqlite3_prepare16_v2()].  ^At various
                   2693: ** points during the compilation process, as logic is being created
                   2694: ** to perform various actions, the authorizer callback is invoked to
                   2695: ** see if those actions are allowed.  ^The authorizer callback should
                   2696: ** return [SQLITE_OK] to allow the action, [SQLITE_IGNORE] to disallow the
                   2697: ** specific action but allow the SQL statement to continue to be
                   2698: ** compiled, or [SQLITE_DENY] to cause the entire SQL statement to be
                   2699: ** rejected with an error.  ^If the authorizer callback returns
                   2700: ** any value other than [SQLITE_IGNORE], [SQLITE_OK], or [SQLITE_DENY]
                   2701: ** then the [sqlite3_prepare_v2()] or equivalent call that triggered
                   2702: ** the authorizer will fail with an error message.
                   2703: **
                   2704: ** When the callback returns [SQLITE_OK], that means the operation
                   2705: ** requested is ok.  ^When the callback returns [SQLITE_DENY], the
                   2706: ** [sqlite3_prepare_v2()] or equivalent call that triggered the
                   2707: ** authorizer will fail with an error message explaining that
                   2708: ** access is denied. 
                   2709: **
                   2710: ** ^The first parameter to the authorizer callback is a copy of the third
                   2711: ** parameter to the sqlite3_set_authorizer() interface. ^The second parameter
                   2712: ** to the callback is an integer [SQLITE_COPY | action code] that specifies
                   2713: ** the particular action to be authorized. ^The third through sixth parameters
                   2714: ** to the callback are zero-terminated strings that contain additional
                   2715: ** details about the action to be authorized.
                   2716: **
                   2717: ** ^If the action code is [SQLITE_READ]
                   2718: ** and the callback returns [SQLITE_IGNORE] then the
                   2719: ** [prepared statement] statement is constructed to substitute
                   2720: ** a NULL value in place of the table column that would have
                   2721: ** been read if [SQLITE_OK] had been returned.  The [SQLITE_IGNORE]
                   2722: ** return can be used to deny an untrusted user access to individual
                   2723: ** columns of a table.
                   2724: ** ^If the action code is [SQLITE_DELETE] and the callback returns
                   2725: ** [SQLITE_IGNORE] then the [DELETE] operation proceeds but the
                   2726: ** [truncate optimization] is disabled and all rows are deleted individually.
                   2727: **
                   2728: ** An authorizer is used when [sqlite3_prepare | preparing]
                   2729: ** SQL statements from an untrusted source, to ensure that the SQL statements
                   2730: ** do not try to access data they are not allowed to see, or that they do not
                   2731: ** try to execute malicious statements that damage the database.  For
                   2732: ** example, an application may allow a user to enter arbitrary
                   2733: ** SQL queries for evaluation by a database.  But the application does
                   2734: ** not want the user to be able to make arbitrary changes to the
                   2735: ** database.  An authorizer could then be put in place while the
                   2736: ** user-entered SQL is being [sqlite3_prepare | prepared] that
                   2737: ** disallows everything except [SELECT] statements.
                   2738: **
                   2739: ** Applications that need to process SQL from untrusted sources
                   2740: ** might also consider lowering resource limits using [sqlite3_limit()]
                   2741: ** and limiting database size using the [max_page_count] [PRAGMA]
                   2742: ** in addition to using an authorizer.
                   2743: **
                   2744: ** ^(Only a single authorizer can be in place on a database connection
                   2745: ** at a time.  Each call to sqlite3_set_authorizer overrides the
                   2746: ** previous call.)^  ^Disable the authorizer by installing a NULL callback.
                   2747: ** The authorizer is disabled by default.
                   2748: **
                   2749: ** The authorizer callback must not do anything that will modify
                   2750: ** the database connection that invoked the authorizer callback.
                   2751: ** Note that [sqlite3_prepare_v2()] and [sqlite3_step()] both modify their
                   2752: ** database connections for the meaning of "modify" in this paragraph.
                   2753: **
                   2754: ** ^When [sqlite3_prepare_v2()] is used to prepare a statement, the
                   2755: ** statement might be re-prepared during [sqlite3_step()] due to a 
                   2756: ** schema change.  Hence, the application should ensure that the
                   2757: ** correct authorizer callback remains in place during the [sqlite3_step()].
                   2758: **
                   2759: ** ^Note that the authorizer callback is invoked only during
                   2760: ** [sqlite3_prepare()] or its variants.  Authorization is not
                   2761: ** performed during statement evaluation in [sqlite3_step()], unless
                   2762: ** as stated in the previous paragraph, sqlite3_step() invokes
                   2763: ** sqlite3_prepare_v2() to reprepare a statement after a schema change.
                   2764: */
                   2765: SQLITE_API int sqlite3_set_authorizer(
                   2766:   sqlite3*,
                   2767:   int (*xAuth)(void*,int,const char*,const char*,const char*,const char*),
                   2768:   void *pUserData
                   2769: );
                   2770: 
                   2771: /*
                   2772: ** CAPI3REF: Authorizer Return Codes
                   2773: **
                   2774: ** The [sqlite3_set_authorizer | authorizer callback function] must
                   2775: ** return either [SQLITE_OK] or one of these two constants in order
                   2776: ** to signal SQLite whether or not the action is permitted.  See the
                   2777: ** [sqlite3_set_authorizer | authorizer documentation] for additional
                   2778: ** information.
                   2779: **
                   2780: ** Note that SQLITE_IGNORE is also used as a [SQLITE_ROLLBACK | return code]
                   2781: ** from the [sqlite3_vtab_on_conflict()] interface.
                   2782: */
                   2783: #define SQLITE_DENY   1   /* Abort the SQL statement with an error */
                   2784: #define SQLITE_IGNORE 2   /* Don't allow access, but don't generate an error */
                   2785: 
                   2786: /*
                   2787: ** CAPI3REF: Authorizer Action Codes
                   2788: **
                   2789: ** The [sqlite3_set_authorizer()] interface registers a callback function
                   2790: ** that is invoked to authorize certain SQL statement actions.  The
                   2791: ** second parameter to the callback is an integer code that specifies
                   2792: ** what action is being authorized.  These are the integer action codes that
                   2793: ** the authorizer callback may be passed.
                   2794: **
                   2795: ** These action code values signify what kind of operation is to be
                   2796: ** authorized.  The 3rd and 4th parameters to the authorization
                   2797: ** callback function will be parameters or NULL depending on which of these
                   2798: ** codes is used as the second parameter.  ^(The 5th parameter to the
                   2799: ** authorizer callback is the name of the database ("main", "temp",
                   2800: ** etc.) if applicable.)^  ^The 6th parameter to the authorizer callback
                   2801: ** is the name of the inner-most trigger or view that is responsible for
                   2802: ** the access attempt or NULL if this access attempt is directly from
                   2803: ** top-level SQL code.
                   2804: */
                   2805: /******************************************* 3rd ************ 4th ***********/
                   2806: #define SQLITE_CREATE_INDEX          1   /* Index Name      Table Name      */
                   2807: #define SQLITE_CREATE_TABLE          2   /* Table Name      NULL            */
                   2808: #define SQLITE_CREATE_TEMP_INDEX     3   /* Index Name      Table Name      */
                   2809: #define SQLITE_CREATE_TEMP_TABLE     4   /* Table Name      NULL            */
                   2810: #define SQLITE_CREATE_TEMP_TRIGGER   5   /* Trigger Name    Table Name      */
                   2811: #define SQLITE_CREATE_TEMP_VIEW      6   /* View Name       NULL            */
                   2812: #define SQLITE_CREATE_TRIGGER        7   /* Trigger Name    Table Name      */
                   2813: #define SQLITE_CREATE_VIEW           8   /* View Name       NULL            */
                   2814: #define SQLITE_DELETE                9   /* Table Name      NULL            */
                   2815: #define SQLITE_DROP_INDEX           10   /* Index Name      Table Name      */
                   2816: #define SQLITE_DROP_TABLE           11   /* Table Name      NULL            */
                   2817: #define SQLITE_DROP_TEMP_INDEX      12   /* Index Name      Table Name      */
                   2818: #define SQLITE_DROP_TEMP_TABLE      13   /* Table Name      NULL            */
                   2819: #define SQLITE_DROP_TEMP_TRIGGER    14   /* Trigger Name    Table Name      */
                   2820: #define SQLITE_DROP_TEMP_VIEW       15   /* View Name       NULL            */
                   2821: #define SQLITE_DROP_TRIGGER         16   /* Trigger Name    Table Name      */
                   2822: #define SQLITE_DROP_VIEW            17   /* View Name       NULL            */
                   2823: #define SQLITE_INSERT               18   /* Table Name      NULL            */
                   2824: #define SQLITE_PRAGMA               19   /* Pragma Name     1st arg or NULL */
                   2825: #define SQLITE_READ                 20   /* Table Name      Column Name     */
                   2826: #define SQLITE_SELECT               21   /* NULL            NULL            */
                   2827: #define SQLITE_TRANSACTION          22   /* Operation       NULL            */
                   2828: #define SQLITE_UPDATE               23   /* Table Name      Column Name     */
                   2829: #define SQLITE_ATTACH               24   /* Filename        NULL            */
                   2830: #define SQLITE_DETACH               25   /* Database Name   NULL            */
                   2831: #define SQLITE_ALTER_TABLE          26   /* Database Name   Table Name      */
                   2832: #define SQLITE_REINDEX              27   /* Index Name      NULL            */
                   2833: #define SQLITE_ANALYZE              28   /* Table Name      NULL            */
                   2834: #define SQLITE_CREATE_VTABLE        29   /* Table Name      Module Name     */
                   2835: #define SQLITE_DROP_VTABLE          30   /* Table Name      Module Name     */
                   2836: #define SQLITE_FUNCTION             31   /* NULL            Function Name   */
                   2837: #define SQLITE_SAVEPOINT            32   /* Operation       Savepoint Name  */
                   2838: #define SQLITE_COPY                  0   /* No longer used */
                   2839: 
                   2840: /*
                   2841: ** CAPI3REF: Tracing And Profiling Functions
                   2842: **
                   2843: ** These routines register callback functions that can be used for
                   2844: ** tracing and profiling the execution of SQL statements.
                   2845: **
                   2846: ** ^The callback function registered by sqlite3_trace() is invoked at
                   2847: ** various times when an SQL statement is being run by [sqlite3_step()].
                   2848: ** ^The sqlite3_trace() callback is invoked with a UTF-8 rendering of the
                   2849: ** SQL statement text as the statement first begins executing.
                   2850: ** ^(Additional sqlite3_trace() callbacks might occur
                   2851: ** as each triggered subprogram is entered.  The callbacks for triggers
                   2852: ** contain a UTF-8 SQL comment that identifies the trigger.)^
                   2853: **
                   2854: ** ^The callback function registered by sqlite3_profile() is invoked
                   2855: ** as each SQL statement finishes.  ^The profile callback contains
                   2856: ** the original statement text and an estimate of wall-clock time
                   2857: ** of how long that statement took to run.  ^The profile callback
                   2858: ** time is in units of nanoseconds, however the current implementation
                   2859: ** is only capable of millisecond resolution so the six least significant
                   2860: ** digits in the time are meaningless.  Future versions of SQLite
                   2861: ** might provide greater resolution on the profiler callback.  The
                   2862: ** sqlite3_profile() function is considered experimental and is
                   2863: ** subject to change in future versions of SQLite.
                   2864: */
                   2865: SQLITE_API void *sqlite3_trace(sqlite3*, void(*xTrace)(void*,const char*), void*);
                   2866: SQLITE_API SQLITE_EXPERIMENTAL void *sqlite3_profile(sqlite3*,
                   2867:    void(*xProfile)(void*,const char*,sqlite3_uint64), void*);
                   2868: 
                   2869: /*
                   2870: ** CAPI3REF: Query Progress Callbacks
                   2871: **
                   2872: ** ^The sqlite3_progress_handler(D,N,X,P) interface causes the callback
                   2873: ** function X to be invoked periodically during long running calls to
                   2874: ** [sqlite3_exec()], [sqlite3_step()] and [sqlite3_get_table()] for
                   2875: ** database connection D.  An example use for this
                   2876: ** interface is to keep a GUI updated during a large query.
                   2877: **
                   2878: ** ^The parameter P is passed through as the only parameter to the 
                   2879: ** callback function X.  ^The parameter N is the number of 
                   2880: ** [virtual machine instructions] that are evaluated between successive
                   2881: ** invocations of the callback X.
                   2882: **
                   2883: ** ^Only a single progress handler may be defined at one time per
                   2884: ** [database connection]; setting a new progress handler cancels the
                   2885: ** old one.  ^Setting parameter X to NULL disables the progress handler.
                   2886: ** ^The progress handler is also disabled by setting N to a value less
                   2887: ** than 1.
                   2888: **
                   2889: ** ^If the progress callback returns non-zero, the operation is
                   2890: ** interrupted.  This feature can be used to implement a
                   2891: ** "Cancel" button on a GUI progress dialog box.
                   2892: **
                   2893: ** The progress handler callback must not do anything that will modify
                   2894: ** the database connection that invoked the progress handler.
                   2895: ** Note that [sqlite3_prepare_v2()] and [sqlite3_step()] both modify their
                   2896: ** database connections for the meaning of "modify" in this paragraph.
                   2897: **
                   2898: */
                   2899: SQLITE_API void sqlite3_progress_handler(sqlite3*, int, int(*)(void*), void*);
                   2900: 
                   2901: /*
                   2902: ** CAPI3REF: Opening A New Database Connection
                   2903: **
                   2904: ** ^These routines open an SQLite database file as specified by the 
                   2905: ** filename argument. ^The filename argument is interpreted as UTF-8 for
                   2906: ** sqlite3_open() and sqlite3_open_v2() and as UTF-16 in the native byte
                   2907: ** order for sqlite3_open16(). ^(A [database connection] handle is usually
                   2908: ** returned in *ppDb, even if an error occurs.  The only exception is that
                   2909: ** if SQLite is unable to allocate memory to hold the [sqlite3] object,
                   2910: ** a NULL will be written into *ppDb instead of a pointer to the [sqlite3]
                   2911: ** object.)^ ^(If the database is opened (and/or created) successfully, then
                   2912: ** [SQLITE_OK] is returned.  Otherwise an [error code] is returned.)^ ^The
                   2913: ** [sqlite3_errmsg()] or [sqlite3_errmsg16()] routines can be used to obtain
                   2914: ** an English language description of the error following a failure of any
                   2915: ** of the sqlite3_open() routines.
                   2916: **
                   2917: ** ^The default encoding for the database will be UTF-8 if
                   2918: ** sqlite3_open() or sqlite3_open_v2() is called and
                   2919: ** UTF-16 in the native byte order if sqlite3_open16() is used.
                   2920: **
                   2921: ** Whether or not an error occurs when it is opened, resources
                   2922: ** associated with the [database connection] handle should be released by
                   2923: ** passing it to [sqlite3_close()] when it is no longer required.
                   2924: **
                   2925: ** The sqlite3_open_v2() interface works like sqlite3_open()
                   2926: ** except that it accepts two additional parameters for additional control
                   2927: ** over the new database connection.  ^(The flags parameter to
                   2928: ** sqlite3_open_v2() can take one of
                   2929: ** the following three values, optionally combined with the 
                   2930: ** [SQLITE_OPEN_NOMUTEX], [SQLITE_OPEN_FULLMUTEX], [SQLITE_OPEN_SHAREDCACHE],
                   2931: ** [SQLITE_OPEN_PRIVATECACHE], and/or [SQLITE_OPEN_URI] flags:)^
                   2932: **
                   2933: ** <dl>
                   2934: ** ^(<dt>[SQLITE_OPEN_READONLY]</dt>
                   2935: ** <dd>The database is opened in read-only mode.  If the database does not
                   2936: ** already exist, an error is returned.</dd>)^
                   2937: **
                   2938: ** ^(<dt>[SQLITE_OPEN_READWRITE]</dt>
                   2939: ** <dd>The database is opened for reading and writing if possible, or reading
                   2940: ** only if the file is write protected by the operating system.  In either
                   2941: ** case the database must already exist, otherwise an error is returned.</dd>)^
                   2942: **
                   2943: ** ^(<dt>[SQLITE_OPEN_READWRITE] | [SQLITE_OPEN_CREATE]</dt>
                   2944: ** <dd>The database is opened for reading and writing, and is created if
                   2945: ** it does not already exist. This is the behavior that is always used for
                   2946: ** sqlite3_open() and sqlite3_open16().</dd>)^
                   2947: ** </dl>
                   2948: **
                   2949: ** If the 3rd parameter to sqlite3_open_v2() is not one of the
                   2950: ** combinations shown above optionally combined with other
                   2951: ** [SQLITE_OPEN_READONLY | SQLITE_OPEN_* bits]
                   2952: ** then the behavior is undefined.
                   2953: **
                   2954: ** ^If the [SQLITE_OPEN_NOMUTEX] flag is set, then the database connection
                   2955: ** opens in the multi-thread [threading mode] as long as the single-thread
                   2956: ** mode has not been set at compile-time or start-time.  ^If the
                   2957: ** [SQLITE_OPEN_FULLMUTEX] flag is set then the database connection opens
                   2958: ** in the serialized [threading mode] unless single-thread was
                   2959: ** previously selected at compile-time or start-time.
                   2960: ** ^The [SQLITE_OPEN_SHAREDCACHE] flag causes the database connection to be
                   2961: ** eligible to use [shared cache mode], regardless of whether or not shared
                   2962: ** cache is enabled using [sqlite3_enable_shared_cache()].  ^The
                   2963: ** [SQLITE_OPEN_PRIVATECACHE] flag causes the database connection to not
                   2964: ** participate in [shared cache mode] even if it is enabled.
                   2965: **
                   2966: ** ^The fourth parameter to sqlite3_open_v2() is the name of the
                   2967: ** [sqlite3_vfs] object that defines the operating system interface that
                   2968: ** the new database connection should use.  ^If the fourth parameter is
                   2969: ** a NULL pointer then the default [sqlite3_vfs] object is used.
                   2970: **
                   2971: ** ^If the filename is ":memory:", then a private, temporary in-memory database
                   2972: ** is created for the connection.  ^This in-memory database will vanish when
                   2973: ** the database connection is closed.  Future versions of SQLite might
                   2974: ** make use of additional special filenames that begin with the ":" character.
                   2975: ** It is recommended that when a database filename actually does begin with
                   2976: ** a ":" character you should prefix the filename with a pathname such as
                   2977: ** "./" to avoid ambiguity.
                   2978: **
                   2979: ** ^If the filename is an empty string, then a private, temporary
                   2980: ** on-disk database will be created.  ^This private database will be
                   2981: ** automatically deleted as soon as the database connection is closed.
                   2982: **
                   2983: ** [[URI filenames in sqlite3_open()]] <h3>URI Filenames</h3>
                   2984: **
                   2985: ** ^If [URI filename] interpretation is enabled, and the filename argument
                   2986: ** begins with "file:", then the filename is interpreted as a URI. ^URI
                   2987: ** filename interpretation is enabled if the [SQLITE_OPEN_URI] flag is
                   2988: ** set in the fourth argument to sqlite3_open_v2(), or if it has
                   2989: ** been enabled globally using the [SQLITE_CONFIG_URI] option with the
                   2990: ** [sqlite3_config()] method or by the [SQLITE_USE_URI] compile-time option.
                   2991: ** As of SQLite version 3.7.7, URI filename interpretation is turned off
                   2992: ** by default, but future releases of SQLite might enable URI filename
                   2993: ** interpretation by default.  See "[URI filenames]" for additional
                   2994: ** information.
                   2995: **
                   2996: ** URI filenames are parsed according to RFC 3986. ^If the URI contains an
                   2997: ** authority, then it must be either an empty string or the string 
                   2998: ** "localhost". ^If the authority is not an empty string or "localhost", an 
                   2999: ** error is returned to the caller. ^The fragment component of a URI, if 
                   3000: ** present, is ignored.
                   3001: **
                   3002: ** ^SQLite uses the path component of the URI as the name of the disk file
                   3003: ** which contains the database. ^If the path begins with a '/' character, 
                   3004: ** then it is interpreted as an absolute path. ^If the path does not begin 
                   3005: ** with a '/' (meaning that the authority section is omitted from the URI)
                   3006: ** then the path is interpreted as a relative path. 
                   3007: ** ^On windows, the first component of an absolute path 
                   3008: ** is a drive specification (e.g. "C:").
                   3009: **
                   3010: ** [[core URI query parameters]]
                   3011: ** The query component of a URI may contain parameters that are interpreted
                   3012: ** either by SQLite itself, or by a [VFS | custom VFS implementation].
                   3013: ** SQLite interprets the following three query parameters:
                   3014: **
                   3015: ** <ul>
                   3016: **   <li> <b>vfs</b>: ^The "vfs" parameter may be used to specify the name of
                   3017: **     a VFS object that provides the operating system interface that should
                   3018: **     be used to access the database file on disk. ^If this option is set to
                   3019: **     an empty string the default VFS object is used. ^Specifying an unknown
                   3020: **     VFS is an error. ^If sqlite3_open_v2() is used and the vfs option is
                   3021: **     present, then the VFS specified by the option takes precedence over
                   3022: **     the value passed as the fourth parameter to sqlite3_open_v2().
                   3023: **
                   3024: **   <li> <b>mode</b>: ^(The mode parameter may be set to either "ro", "rw" or
                   3025: **     "rwc". Attempting to set it to any other value is an error)^. 
                   3026: **     ^If "ro" is specified, then the database is opened for read-only 
                   3027: **     access, just as if the [SQLITE_OPEN_READONLY] flag had been set in the 
                   3028: **     third argument to sqlite3_prepare_v2(). ^If the mode option is set to 
                   3029: **     "rw", then the database is opened for read-write (but not create) 
                   3030: **     access, as if SQLITE_OPEN_READWRITE (but not SQLITE_OPEN_CREATE) had 
                   3031: **     been set. ^Value "rwc" is equivalent to setting both 
                   3032: **     SQLITE_OPEN_READWRITE and SQLITE_OPEN_CREATE. ^If sqlite3_open_v2() is 
                   3033: **     used, it is an error to specify a value for the mode parameter that is 
                   3034: **     less restrictive than that specified by the flags passed as the third 
                   3035: **     parameter.
                   3036: **
                   3037: **   <li> <b>cache</b>: ^The cache parameter may be set to either "shared" or
                   3038: **     "private". ^Setting it to "shared" is equivalent to setting the
                   3039: **     SQLITE_OPEN_SHAREDCACHE bit in the flags argument passed to
                   3040: **     sqlite3_open_v2(). ^Setting the cache parameter to "private" is 
                   3041: **     equivalent to setting the SQLITE_OPEN_PRIVATECACHE bit.
                   3042: **     ^If sqlite3_open_v2() is used and the "cache" parameter is present in
                   3043: **     a URI filename, its value overrides any behaviour requested by setting
                   3044: **     SQLITE_OPEN_PRIVATECACHE or SQLITE_OPEN_SHAREDCACHE flag.
                   3045: ** </ul>
                   3046: **
                   3047: ** ^Specifying an unknown parameter in the query component of a URI is not an
                   3048: ** error.  Future versions of SQLite might understand additional query
                   3049: ** parameters.  See "[query parameters with special meaning to SQLite]" for
                   3050: ** additional information.
                   3051: **
                   3052: ** [[URI filename examples]] <h3>URI filename examples</h3>
                   3053: **
                   3054: ** <table border="1" align=center cellpadding=5>
                   3055: ** <tr><th> URI filenames <th> Results
                   3056: ** <tr><td> file:data.db <td> 
                   3057: **          Open the file "data.db" in the current directory.
                   3058: ** <tr><td> file:/home/fred/data.db<br>
                   3059: **          file:///home/fred/data.db <br> 
                   3060: **          file://localhost/home/fred/data.db <br> <td> 
                   3061: **          Open the database file "/home/fred/data.db".
                   3062: ** <tr><td> file://darkstar/home/fred/data.db <td> 
                   3063: **          An error. "darkstar" is not a recognized authority.
                   3064: ** <tr><td style="white-space:nowrap"> 
                   3065: **          file:///C:/Documents%20and%20Settings/fred/Desktop/data.db
                   3066: **     <td> Windows only: Open the file "data.db" on fred's desktop on drive
                   3067: **          C:. Note that the %20 escaping in this example is not strictly 
                   3068: **          necessary - space characters can be used literally
                   3069: **          in URI filenames.
                   3070: ** <tr><td> file:data.db?mode=ro&cache=private <td> 
                   3071: **          Open file "data.db" in the current directory for read-only access.
                   3072: **          Regardless of whether or not shared-cache mode is enabled by
                   3073: **          default, use a private cache.
                   3074: ** <tr><td> file:/home/fred/data.db?vfs=unix-nolock <td>
                   3075: **          Open file "/home/fred/data.db". Use the special VFS "unix-nolock".
                   3076: ** <tr><td> file:data.db?mode=readonly <td> 
                   3077: **          An error. "readonly" is not a valid option for the "mode" parameter.
                   3078: ** </table>
                   3079: **
                   3080: ** ^URI hexadecimal escape sequences (%HH) are supported within the path and
                   3081: ** query components of a URI. A hexadecimal escape sequence consists of a
                   3082: ** percent sign - "%" - followed by exactly two hexadecimal digits 
                   3083: ** specifying an octet value. ^Before the path or query components of a
                   3084: ** URI filename are interpreted, they are encoded using UTF-8 and all 
                   3085: ** hexadecimal escape sequences replaced by a single byte containing the
                   3086: ** corresponding octet. If this process generates an invalid UTF-8 encoding,
                   3087: ** the results are undefined.
                   3088: **
                   3089: ** <b>Note to Windows users:</b>  The encoding used for the filename argument
                   3090: ** of sqlite3_open() and sqlite3_open_v2() must be UTF-8, not whatever
                   3091: ** codepage is currently defined.  Filenames containing international
                   3092: ** characters must be converted to UTF-8 prior to passing them into
                   3093: ** sqlite3_open() or sqlite3_open_v2().
                   3094: */
                   3095: SQLITE_API int sqlite3_open(
                   3096:   const char *filename,   /* Database filename (UTF-8) */
                   3097:   sqlite3 **ppDb          /* OUT: SQLite db handle */
                   3098: );
                   3099: SQLITE_API int sqlite3_open16(
                   3100:   const void *filename,   /* Database filename (UTF-16) */
                   3101:   sqlite3 **ppDb          /* OUT: SQLite db handle */
                   3102: );
                   3103: SQLITE_API int sqlite3_open_v2(
                   3104:   const char *filename,   /* Database filename (UTF-8) */
                   3105:   sqlite3 **ppDb,         /* OUT: SQLite db handle */
                   3106:   int flags,              /* Flags */
                   3107:   const char *zVfs        /* Name of VFS module to use */
                   3108: );
                   3109: 
                   3110: /*
                   3111: ** CAPI3REF: Obtain Values For URI Parameters
                   3112: **
                   3113: ** This is a utility routine, useful to VFS implementations, that checks
                   3114: ** to see if a database file was a URI that contained a specific query 
                   3115: ** parameter, and if so obtains the value of the query parameter.
                   3116: **
                   3117: ** The zFilename argument is the filename pointer passed into the xOpen()
                   3118: ** method of a VFS implementation.  The zParam argument is the name of the
                   3119: ** query parameter we seek.  This routine returns the value of the zParam
                   3120: ** parameter if it exists.  If the parameter does not exist, this routine
                   3121: ** returns a NULL pointer.
                   3122: **
                   3123: ** If the zFilename argument to this function is not a pointer that SQLite
                   3124: ** passed into the xOpen VFS method, then the behavior of this routine
                   3125: ** is undefined and probably undesirable.
                   3126: */
                   3127: SQLITE_API const char *sqlite3_uri_parameter(const char *zFilename, const char *zParam);
                   3128: 
                   3129: 
                   3130: /*
                   3131: ** CAPI3REF: Error Codes And Messages
                   3132: **
                   3133: ** ^The sqlite3_errcode() interface returns the numeric [result code] or
                   3134: ** [extended result code] for the most recent failed sqlite3_* API call
                   3135: ** associated with a [database connection]. If a prior API call failed
                   3136: ** but the most recent API call succeeded, the return value from
                   3137: ** sqlite3_errcode() is undefined.  ^The sqlite3_extended_errcode()
                   3138: ** interface is the same except that it always returns the 
                   3139: ** [extended result code] even when extended result codes are
                   3140: ** disabled.
                   3141: **
                   3142: ** ^The sqlite3_errmsg() and sqlite3_errmsg16() return English-language
                   3143: ** text that describes the error, as either UTF-8 or UTF-16 respectively.
                   3144: ** ^(Memory to hold the error message string is managed internally.
                   3145: ** The application does not need to worry about freeing the result.
                   3146: ** However, the error string might be overwritten or deallocated by
                   3147: ** subsequent calls to other SQLite interface functions.)^
                   3148: **
                   3149: ** When the serialized [threading mode] is in use, it might be the
                   3150: ** case that a second error occurs on a separate thread in between
                   3151: ** the time of the first error and the call to these interfaces.
                   3152: ** When that happens, the second error will be reported since these
                   3153: ** interfaces always report the most recent result.  To avoid
                   3154: ** this, each thread can obtain exclusive use of the [database connection] D
                   3155: ** by invoking [sqlite3_mutex_enter]([sqlite3_db_mutex](D)) before beginning
                   3156: ** to use D and invoking [sqlite3_mutex_leave]([sqlite3_db_mutex](D)) after
                   3157: ** all calls to the interfaces listed here are completed.
                   3158: **
                   3159: ** If an interface fails with SQLITE_MISUSE, that means the interface
                   3160: ** was invoked incorrectly by the application.  In that case, the
                   3161: ** error code and message may or may not be set.
                   3162: */
                   3163: SQLITE_API int sqlite3_errcode(sqlite3 *db);
                   3164: SQLITE_API int sqlite3_extended_errcode(sqlite3 *db);
                   3165: SQLITE_API const char *sqlite3_errmsg(sqlite3*);
                   3166: SQLITE_API const void *sqlite3_errmsg16(sqlite3*);
                   3167: 
                   3168: /*
                   3169: ** CAPI3REF: SQL Statement Object
                   3170: ** KEYWORDS: {prepared statement} {prepared statements}
                   3171: **
                   3172: ** An instance of this object represents a single SQL statement.
                   3173: ** This object is variously known as a "prepared statement" or a
                   3174: ** "compiled SQL statement" or simply as a "statement".
                   3175: **
                   3176: ** The life of a statement object goes something like this:
                   3177: **
                   3178: ** <ol>
                   3179: ** <li> Create the object using [sqlite3_prepare_v2()] or a related
                   3180: **      function.
                   3181: ** <li> Bind values to [host parameters] using the sqlite3_bind_*()
                   3182: **      interfaces.
                   3183: ** <li> Run the SQL by calling [sqlite3_step()] one or more times.
                   3184: ** <li> Reset the statement using [sqlite3_reset()] then go back
                   3185: **      to step 2.  Do this zero or more times.
                   3186: ** <li> Destroy the object using [sqlite3_finalize()].
                   3187: ** </ol>
                   3188: **
                   3189: ** Refer to documentation on individual methods above for additional
                   3190: ** information.
                   3191: */
                   3192: typedef struct sqlite3_stmt sqlite3_stmt;
                   3193: 
                   3194: /*
                   3195: ** CAPI3REF: Run-time Limits
                   3196: **
                   3197: ** ^(This interface allows the size of various constructs to be limited
                   3198: ** on a connection by connection basis.  The first parameter is the
                   3199: ** [database connection] whose limit is to be set or queried.  The
                   3200: ** second parameter is one of the [limit categories] that define a
                   3201: ** class of constructs to be size limited.  The third parameter is the
                   3202: ** new limit for that construct.)^
                   3203: **
                   3204: ** ^If the new limit is a negative number, the limit is unchanged.
                   3205: ** ^(For each limit category SQLITE_LIMIT_<i>NAME</i> there is a 
                   3206: ** [limits | hard upper bound]
                   3207: ** set at compile-time by a C preprocessor macro called
                   3208: ** [limits | SQLITE_MAX_<i>NAME</i>].
                   3209: ** (The "_LIMIT_" in the name is changed to "_MAX_".))^
                   3210: ** ^Attempts to increase a limit above its hard upper bound are
                   3211: ** silently truncated to the hard upper bound.
                   3212: **
                   3213: ** ^Regardless of whether or not the limit was changed, the 
                   3214: ** [sqlite3_limit()] interface returns the prior value of the limit.
                   3215: ** ^Hence, to find the current value of a limit without changing it,
                   3216: ** simply invoke this interface with the third parameter set to -1.
                   3217: **
                   3218: ** Run-time limits are intended for use in applications that manage
                   3219: ** both their own internal database and also databases that are controlled
                   3220: ** by untrusted external sources.  An example application might be a
                   3221: ** web browser that has its own databases for storing history and
                   3222: ** separate databases controlled by JavaScript applications downloaded
                   3223: ** off the Internet.  The internal databases can be given the
                   3224: ** large, default limits.  Databases managed by external sources can
                   3225: ** be given much smaller limits designed to prevent a denial of service
                   3226: ** attack.  Developers might also want to use the [sqlite3_set_authorizer()]
                   3227: ** interface to further control untrusted SQL.  The size of the database
                   3228: ** created by an untrusted script can be contained using the
                   3229: ** [max_page_count] [PRAGMA].
                   3230: **
                   3231: ** New run-time limit categories may be added in future releases.
                   3232: */
                   3233: SQLITE_API int sqlite3_limit(sqlite3*, int id, int newVal);
                   3234: 
                   3235: /*
                   3236: ** CAPI3REF: Run-Time Limit Categories
                   3237: ** KEYWORDS: {limit category} {*limit categories}
                   3238: **
                   3239: ** These constants define various performance limits
                   3240: ** that can be lowered at run-time using [sqlite3_limit()].
                   3241: ** The synopsis of the meanings of the various limits is shown below.
                   3242: ** Additional information is available at [limits | Limits in SQLite].
                   3243: **
                   3244: ** <dl>
                   3245: ** [[SQLITE_LIMIT_LENGTH]] ^(<dt>SQLITE_LIMIT_LENGTH</dt>
                   3246: ** <dd>The maximum size of any string or BLOB or table row, in bytes.<dd>)^
                   3247: **
                   3248: ** [[SQLITE_LIMIT_SQL_LENGTH]] ^(<dt>SQLITE_LIMIT_SQL_LENGTH</dt>
                   3249: ** <dd>The maximum length of an SQL statement, in bytes.</dd>)^
                   3250: **
                   3251: ** [[SQLITE_LIMIT_COLUMN]] ^(<dt>SQLITE_LIMIT_COLUMN</dt>
                   3252: ** <dd>The maximum number of columns in a table definition or in the
                   3253: ** result set of a [SELECT] or the maximum number of columns in an index
                   3254: ** or in an ORDER BY or GROUP BY clause.</dd>)^
                   3255: **
                   3256: ** [[SQLITE_LIMIT_EXPR_DEPTH]] ^(<dt>SQLITE_LIMIT_EXPR_DEPTH</dt>
                   3257: ** <dd>The maximum depth of the parse tree on any expression.</dd>)^
                   3258: **
                   3259: ** [[SQLITE_LIMIT_COMPOUND_SELECT]] ^(<dt>SQLITE_LIMIT_COMPOUND_SELECT</dt>
                   3260: ** <dd>The maximum number of terms in a compound SELECT statement.</dd>)^
                   3261: **
                   3262: ** [[SQLITE_LIMIT_VDBE_OP]] ^(<dt>SQLITE_LIMIT_VDBE_OP</dt>
                   3263: ** <dd>The maximum number of instructions in a virtual machine program
                   3264: ** used to implement an SQL statement.  This limit is not currently
                   3265: ** enforced, though that might be added in some future release of
                   3266: ** SQLite.</dd>)^
                   3267: **
                   3268: ** [[SQLITE_LIMIT_FUNCTION_ARG]] ^(<dt>SQLITE_LIMIT_FUNCTION_ARG</dt>
                   3269: ** <dd>The maximum number of arguments on a function.</dd>)^
                   3270: **
                   3271: ** [[SQLITE_LIMIT_ATTACHED]] ^(<dt>SQLITE_LIMIT_ATTACHED</dt>
                   3272: ** <dd>The maximum number of [ATTACH | attached databases].)^</dd>
                   3273: **
                   3274: ** [[SQLITE_LIMIT_LIKE_PATTERN_LENGTH]]
                   3275: ** ^(<dt>SQLITE_LIMIT_LIKE_PATTERN_LENGTH</dt>
                   3276: ** <dd>The maximum length of the pattern argument to the [LIKE] or
                   3277: ** [GLOB] operators.</dd>)^
                   3278: **
                   3279: ** [[SQLITE_LIMIT_VARIABLE_NUMBER]]
                   3280: ** ^(<dt>SQLITE_LIMIT_VARIABLE_NUMBER</dt>
                   3281: ** <dd>The maximum index number of any [parameter] in an SQL statement.)^
                   3282: **
                   3283: ** [[SQLITE_LIMIT_TRIGGER_DEPTH]] ^(<dt>SQLITE_LIMIT_TRIGGER_DEPTH</dt>
                   3284: ** <dd>The maximum depth of recursion for triggers.</dd>)^
                   3285: ** </dl>
                   3286: */
                   3287: #define SQLITE_LIMIT_LENGTH                    0
                   3288: #define SQLITE_LIMIT_SQL_LENGTH                1
                   3289: #define SQLITE_LIMIT_COLUMN                    2
                   3290: #define SQLITE_LIMIT_EXPR_DEPTH                3
                   3291: #define SQLITE_LIMIT_COMPOUND_SELECT           4
                   3292: #define SQLITE_LIMIT_VDBE_OP                   5
                   3293: #define SQLITE_LIMIT_FUNCTION_ARG              6
                   3294: #define SQLITE_LIMIT_ATTACHED                  7
                   3295: #define SQLITE_LIMIT_LIKE_PATTERN_LENGTH       8
                   3296: #define SQLITE_LIMIT_VARIABLE_NUMBER           9
                   3297: #define SQLITE_LIMIT_TRIGGER_DEPTH            10
                   3298: 
                   3299: /*
                   3300: ** CAPI3REF: Compiling An SQL Statement
                   3301: ** KEYWORDS: {SQL statement compiler}
                   3302: **
                   3303: ** To execute an SQL query, it must first be compiled into a byte-code
                   3304: ** program using one of these routines.
                   3305: **
                   3306: ** The first argument, "db", is a [database connection] obtained from a
                   3307: ** prior successful call to [sqlite3_open()], [sqlite3_open_v2()] or
                   3308: ** [sqlite3_open16()].  The database connection must not have been closed.
                   3309: **
                   3310: ** The second argument, "zSql", is the statement to be compiled, encoded
                   3311: ** as either UTF-8 or UTF-16.  The sqlite3_prepare() and sqlite3_prepare_v2()
                   3312: ** interfaces use UTF-8, and sqlite3_prepare16() and sqlite3_prepare16_v2()
                   3313: ** use UTF-16.
                   3314: **
                   3315: ** ^If the nByte argument is less than zero, then zSql is read up to the
                   3316: ** first zero terminator. ^If nByte is non-negative, then it is the maximum
                   3317: ** number of  bytes read from zSql.  ^When nByte is non-negative, the
                   3318: ** zSql string ends at either the first '\000' or '\u0000' character or
                   3319: ** the nByte-th byte, whichever comes first. If the caller knows
                   3320: ** that the supplied string is nul-terminated, then there is a small
                   3321: ** performance advantage to be gained by passing an nByte parameter that
                   3322: ** is equal to the number of bytes in the input string <i>including</i>
                   3323: ** the nul-terminator bytes.
                   3324: **
                   3325: ** ^If pzTail is not NULL then *pzTail is made to point to the first byte
                   3326: ** past the end of the first SQL statement in zSql.  These routines only
                   3327: ** compile the first statement in zSql, so *pzTail is left pointing to
                   3328: ** what remains uncompiled.
                   3329: **
                   3330: ** ^*ppStmt is left pointing to a compiled [prepared statement] that can be
                   3331: ** executed using [sqlite3_step()].  ^If there is an error, *ppStmt is set
                   3332: ** to NULL.  ^If the input text contains no SQL (if the input is an empty
                   3333: ** string or a comment) then *ppStmt is set to NULL.
                   3334: ** The calling procedure is responsible for deleting the compiled
                   3335: ** SQL statement using [sqlite3_finalize()] after it has finished with it.
                   3336: ** ppStmt may not be NULL.
                   3337: **
                   3338: ** ^On success, the sqlite3_prepare() family of routines return [SQLITE_OK];
                   3339: ** otherwise an [error code] is returned.
                   3340: **
                   3341: ** The sqlite3_prepare_v2() and sqlite3_prepare16_v2() interfaces are
                   3342: ** recommended for all new programs. The two older interfaces are retained
                   3343: ** for backwards compatibility, but their use is discouraged.
                   3344: ** ^In the "v2" interfaces, the prepared statement
                   3345: ** that is returned (the [sqlite3_stmt] object) contains a copy of the
                   3346: ** original SQL text. This causes the [sqlite3_step()] interface to
                   3347: ** behave differently in three ways:
                   3348: **
                   3349: ** <ol>
                   3350: ** <li>
                   3351: ** ^If the database schema changes, instead of returning [SQLITE_SCHEMA] as it
                   3352: ** always used to do, [sqlite3_step()] will automatically recompile the SQL
                   3353: ** statement and try to run it again.
                   3354: ** </li>
                   3355: **
                   3356: ** <li>
                   3357: ** ^When an error occurs, [sqlite3_step()] will return one of the detailed
                   3358: ** [error codes] or [extended error codes].  ^The legacy behavior was that
                   3359: ** [sqlite3_step()] would only return a generic [SQLITE_ERROR] result code
                   3360: ** and the application would have to make a second call to [sqlite3_reset()]
                   3361: ** in order to find the underlying cause of the problem. With the "v2" prepare
                   3362: ** interfaces, the underlying reason for the error is returned immediately.
                   3363: ** </li>
                   3364: **
                   3365: ** <li>
                   3366: ** ^If the specific value bound to [parameter | host parameter] in the 
                   3367: ** WHERE clause might influence the choice of query plan for a statement,
                   3368: ** then the statement will be automatically recompiled, as if there had been 
                   3369: ** a schema change, on the first  [sqlite3_step()] call following any change
                   3370: ** to the [sqlite3_bind_text | bindings] of that [parameter]. 
                   3371: ** ^The specific value of WHERE-clause [parameter] might influence the 
                   3372: ** choice of query plan if the parameter is the left-hand side of a [LIKE]
                   3373: ** or [GLOB] operator or if the parameter is compared to an indexed column
                   3374: ** and the [SQLITE_ENABLE_STAT2] compile-time option is enabled.
                   3375: ** the 
                   3376: ** </li>
                   3377: ** </ol>
                   3378: */
                   3379: SQLITE_API int sqlite3_prepare(
                   3380:   sqlite3 *db,            /* Database handle */
                   3381:   const char *zSql,       /* SQL statement, UTF-8 encoded */
                   3382:   int nByte,              /* Maximum length of zSql in bytes. */
                   3383:   sqlite3_stmt **ppStmt,  /* OUT: Statement handle */
                   3384:   const char **pzTail     /* OUT: Pointer to unused portion of zSql */
                   3385: );
                   3386: SQLITE_API int sqlite3_prepare_v2(
                   3387:   sqlite3 *db,            /* Database handle */
                   3388:   const char *zSql,       /* SQL statement, UTF-8 encoded */
                   3389:   int nByte,              /* Maximum length of zSql in bytes. */
                   3390:   sqlite3_stmt **ppStmt,  /* OUT: Statement handle */
                   3391:   const char **pzTail     /* OUT: Pointer to unused portion of zSql */
                   3392: );
                   3393: SQLITE_API int sqlite3_prepare16(
                   3394:   sqlite3 *db,            /* Database handle */
                   3395:   const void *zSql,       /* SQL statement, UTF-16 encoded */
                   3396:   int nByte,              /* Maximum length of zSql in bytes. */
                   3397:   sqlite3_stmt **ppStmt,  /* OUT: Statement handle */
                   3398:   const void **pzTail     /* OUT: Pointer to unused portion of zSql */
                   3399: );
                   3400: SQLITE_API int sqlite3_prepare16_v2(
                   3401:   sqlite3 *db,            /* Database handle */
                   3402:   const void *zSql,       /* SQL statement, UTF-16 encoded */
                   3403:   int nByte,              /* Maximum length of zSql in bytes. */
                   3404:   sqlite3_stmt **ppStmt,  /* OUT: Statement handle */
                   3405:   const void **pzTail     /* OUT: Pointer to unused portion of zSql */
                   3406: );
                   3407: 
                   3408: /*
                   3409: ** CAPI3REF: Retrieving Statement SQL
                   3410: **
                   3411: ** ^This interface can be used to retrieve a saved copy of the original
                   3412: ** SQL text used to create a [prepared statement] if that statement was
                   3413: ** compiled using either [sqlite3_prepare_v2()] or [sqlite3_prepare16_v2()].
                   3414: */
                   3415: SQLITE_API const char *sqlite3_sql(sqlite3_stmt *pStmt);
                   3416: 
                   3417: /*
                   3418: ** CAPI3REF: Determine If An SQL Statement Writes The Database
                   3419: **
                   3420: ** ^The sqlite3_stmt_readonly(X) interface returns true (non-zero) if
                   3421: ** and only if the [prepared statement] X makes no direct changes to
                   3422: ** the content of the database file.
                   3423: **
                   3424: ** Note that [application-defined SQL functions] or
                   3425: ** [virtual tables] might change the database indirectly as a side effect.  
                   3426: ** ^(For example, if an application defines a function "eval()" that 
                   3427: ** calls [sqlite3_exec()], then the following SQL statement would
                   3428: ** change the database file through side-effects:
                   3429: **
                   3430: ** <blockquote><pre>
                   3431: **    SELECT eval('DELETE FROM t1') FROM t2;
                   3432: ** </pre></blockquote>
                   3433: **
                   3434: ** But because the [SELECT] statement does not change the database file
                   3435: ** directly, sqlite3_stmt_readonly() would still return true.)^
                   3436: **
                   3437: ** ^Transaction control statements such as [BEGIN], [COMMIT], [ROLLBACK],
                   3438: ** [SAVEPOINT], and [RELEASE] cause sqlite3_stmt_readonly() to return true,
                   3439: ** since the statements themselves do not actually modify the database but
                   3440: ** rather they control the timing of when other statements modify the 
                   3441: ** database.  ^The [ATTACH] and [DETACH] statements also cause
                   3442: ** sqlite3_stmt_readonly() to return true since, while those statements
                   3443: ** change the configuration of a database connection, they do not make 
                   3444: ** changes to the content of the database files on disk.
                   3445: */
                   3446: SQLITE_API int sqlite3_stmt_readonly(sqlite3_stmt *pStmt);
                   3447: 
                   3448: /*
                   3449: ** CAPI3REF: Dynamically Typed Value Object
                   3450: ** KEYWORDS: {protected sqlite3_value} {unprotected sqlite3_value}
                   3451: **
                   3452: ** SQLite uses the sqlite3_value object to represent all values
                   3453: ** that can be stored in a database table. SQLite uses dynamic typing
                   3454: ** for the values it stores.  ^Values stored in sqlite3_value objects
                   3455: ** can be integers, floating point values, strings, BLOBs, or NULL.
                   3456: **
                   3457: ** An sqlite3_value object may be either "protected" or "unprotected".
                   3458: ** Some interfaces require a protected sqlite3_value.  Other interfaces
                   3459: ** will accept either a protected or an unprotected sqlite3_value.
                   3460: ** Every interface that accepts sqlite3_value arguments specifies
                   3461: ** whether or not it requires a protected sqlite3_value.
                   3462: **
                   3463: ** The terms "protected" and "unprotected" refer to whether or not
                   3464: ** a mutex is held.  An internal mutex is held for a protected
                   3465: ** sqlite3_value object but no mutex is held for an unprotected
                   3466: ** sqlite3_value object.  If SQLite is compiled to be single-threaded
                   3467: ** (with [SQLITE_THREADSAFE=0] and with [sqlite3_threadsafe()] returning 0)
                   3468: ** or if SQLite is run in one of reduced mutex modes 
                   3469: ** [SQLITE_CONFIG_SINGLETHREAD] or [SQLITE_CONFIG_MULTITHREAD]
                   3470: ** then there is no distinction between protected and unprotected
                   3471: ** sqlite3_value objects and they can be used interchangeably.  However,
                   3472: ** for maximum code portability it is recommended that applications
                   3473: ** still make the distinction between protected and unprotected
                   3474: ** sqlite3_value objects even when not strictly required.
                   3475: **
                   3476: ** ^The sqlite3_value objects that are passed as parameters into the
                   3477: ** implementation of [application-defined SQL functions] are protected.
                   3478: ** ^The sqlite3_value object returned by
                   3479: ** [sqlite3_column_value()] is unprotected.
                   3480: ** Unprotected sqlite3_value objects may only be used with
                   3481: ** [sqlite3_result_value()] and [sqlite3_bind_value()].
                   3482: ** The [sqlite3_value_blob | sqlite3_value_type()] family of
                   3483: ** interfaces require protected sqlite3_value objects.
                   3484: */
                   3485: typedef struct Mem sqlite3_value;
                   3486: 
                   3487: /*
                   3488: ** CAPI3REF: SQL Function Context Object
                   3489: **
                   3490: ** The context in which an SQL function executes is stored in an
                   3491: ** sqlite3_context object.  ^A pointer to an sqlite3_context object
                   3492: ** is always first parameter to [application-defined SQL functions].
                   3493: ** The application-defined SQL function implementation will pass this
                   3494: ** pointer through into calls to [sqlite3_result_int | sqlite3_result()],
                   3495: ** [sqlite3_aggregate_context()], [sqlite3_user_data()],
                   3496: ** [sqlite3_context_db_handle()], [sqlite3_get_auxdata()],
                   3497: ** and/or [sqlite3_set_auxdata()].
                   3498: */
                   3499: typedef struct sqlite3_context sqlite3_context;
                   3500: 
                   3501: /*
                   3502: ** CAPI3REF: Binding Values To Prepared Statements
                   3503: ** KEYWORDS: {host parameter} {host parameters} {host parameter name}
                   3504: ** KEYWORDS: {SQL parameter} {SQL parameters} {parameter binding}
                   3505: **
                   3506: ** ^(In the SQL statement text input to [sqlite3_prepare_v2()] and its variants,
                   3507: ** literals may be replaced by a [parameter] that matches one of following
                   3508: ** templates:
                   3509: **
                   3510: ** <ul>
                   3511: ** <li>  ?
                   3512: ** <li>  ?NNN
                   3513: ** <li>  :VVV
                   3514: ** <li>  @VVV
                   3515: ** <li>  $VVV
                   3516: ** </ul>
                   3517: **
                   3518: ** In the templates above, NNN represents an integer literal,
                   3519: ** and VVV represents an alphanumeric identifier.)^  ^The values of these
                   3520: ** parameters (also called "host parameter names" or "SQL parameters")
                   3521: ** can be set using the sqlite3_bind_*() routines defined here.
                   3522: **
                   3523: ** ^The first argument to the sqlite3_bind_*() routines is always
                   3524: ** a pointer to the [sqlite3_stmt] object returned from
                   3525: ** [sqlite3_prepare_v2()] or its variants.
                   3526: **
                   3527: ** ^The second argument is the index of the SQL parameter to be set.
                   3528: ** ^The leftmost SQL parameter has an index of 1.  ^When the same named
                   3529: ** SQL parameter is used more than once, second and subsequent
                   3530: ** occurrences have the same index as the first occurrence.
                   3531: ** ^The index for named parameters can be looked up using the
                   3532: ** [sqlite3_bind_parameter_index()] API if desired.  ^The index
                   3533: ** for "?NNN" parameters is the value of NNN.
                   3534: ** ^The NNN value must be between 1 and the [sqlite3_limit()]
                   3535: ** parameter [SQLITE_LIMIT_VARIABLE_NUMBER] (default value: 999).
                   3536: **
                   3537: ** ^The third argument is the value to bind to the parameter.
                   3538: **
                   3539: ** ^(In those routines that have a fourth argument, its value is the
                   3540: ** number of bytes in the parameter.  To be clear: the value is the
                   3541: ** number of <u>bytes</u> in the value, not the number of characters.)^
                   3542: ** ^If the fourth parameter is negative, the length of the string is
                   3543: ** the number of bytes up to the first zero terminator.
                   3544: **
                   3545: ** ^The fifth argument to sqlite3_bind_blob(), sqlite3_bind_text(), and
                   3546: ** sqlite3_bind_text16() is a destructor used to dispose of the BLOB or
                   3547: ** string after SQLite has finished with it.  ^The destructor is called
                   3548: ** to dispose of the BLOB or string even if the call to sqlite3_bind_blob(),
                   3549: ** sqlite3_bind_text(), or sqlite3_bind_text16() fails.  
                   3550: ** ^If the fifth argument is
                   3551: ** the special value [SQLITE_STATIC], then SQLite assumes that the
                   3552: ** information is in static, unmanaged space and does not need to be freed.
                   3553: ** ^If the fifth argument has the value [SQLITE_TRANSIENT], then
                   3554: ** SQLite makes its own private copy of the data immediately, before
                   3555: ** the sqlite3_bind_*() routine returns.
                   3556: **
                   3557: ** ^The sqlite3_bind_zeroblob() routine binds a BLOB of length N that
                   3558: ** is filled with zeroes.  ^A zeroblob uses a fixed amount of memory
                   3559: ** (just an integer to hold its size) while it is being processed.
                   3560: ** Zeroblobs are intended to serve as placeholders for BLOBs whose
                   3561: ** content is later written using
                   3562: ** [sqlite3_blob_open | incremental BLOB I/O] routines.
                   3563: ** ^A negative value for the zeroblob results in a zero-length BLOB.
                   3564: **
                   3565: ** ^If any of the sqlite3_bind_*() routines are called with a NULL pointer
                   3566: ** for the [prepared statement] or with a prepared statement for which
                   3567: ** [sqlite3_step()] has been called more recently than [sqlite3_reset()],
                   3568: ** then the call will return [SQLITE_MISUSE].  If any sqlite3_bind_()
                   3569: ** routine is passed a [prepared statement] that has been finalized, the
                   3570: ** result is undefined and probably harmful.
                   3571: **
                   3572: ** ^Bindings are not cleared by the [sqlite3_reset()] routine.
                   3573: ** ^Unbound parameters are interpreted as NULL.
                   3574: **
                   3575: ** ^The sqlite3_bind_* routines return [SQLITE_OK] on success or an
                   3576: ** [error code] if anything goes wrong.
                   3577: ** ^[SQLITE_RANGE] is returned if the parameter
                   3578: ** index is out of range.  ^[SQLITE_NOMEM] is returned if malloc() fails.
                   3579: **
                   3580: ** See also: [sqlite3_bind_parameter_count()],
                   3581: ** [sqlite3_bind_parameter_name()], and [sqlite3_bind_parameter_index()].
                   3582: */
                   3583: SQLITE_API int sqlite3_bind_blob(sqlite3_stmt*, int, const void*, int n, void(*)(void*));
                   3584: SQLITE_API int sqlite3_bind_double(sqlite3_stmt*, int, double);
                   3585: SQLITE_API int sqlite3_bind_int(sqlite3_stmt*, int, int);
                   3586: SQLITE_API int sqlite3_bind_int64(sqlite3_stmt*, int, sqlite3_int64);
                   3587: SQLITE_API int sqlite3_bind_null(sqlite3_stmt*, int);
                   3588: SQLITE_API int sqlite3_bind_text(sqlite3_stmt*, int, const char*, int n, void(*)(void*));
                   3589: SQLITE_API int sqlite3_bind_text16(sqlite3_stmt*, int, const void*, int, void(*)(void*));
                   3590: SQLITE_API int sqlite3_bind_value(sqlite3_stmt*, int, const sqlite3_value*);
                   3591: SQLITE_API int sqlite3_bind_zeroblob(sqlite3_stmt*, int, int n);
                   3592: 
                   3593: /*
                   3594: ** CAPI3REF: Number Of SQL Parameters
                   3595: **
                   3596: ** ^This routine can be used to find the number of [SQL parameters]
                   3597: ** in a [prepared statement].  SQL parameters are tokens of the
                   3598: ** form "?", "?NNN", ":AAA", "$AAA", or "@AAA" that serve as
                   3599: ** placeholders for values that are [sqlite3_bind_blob | bound]
                   3600: ** to the parameters at a later time.
                   3601: **
                   3602: ** ^(This routine actually returns the index of the largest (rightmost)
                   3603: ** parameter. For all forms except ?NNN, this will correspond to the
                   3604: ** number of unique parameters.  If parameters of the ?NNN form are used,
                   3605: ** there may be gaps in the list.)^
                   3606: **
                   3607: ** See also: [sqlite3_bind_blob|sqlite3_bind()],
                   3608: ** [sqlite3_bind_parameter_name()], and
                   3609: ** [sqlite3_bind_parameter_index()].
                   3610: */
                   3611: SQLITE_API int sqlite3_bind_parameter_count(sqlite3_stmt*);
                   3612: 
                   3613: /*
                   3614: ** CAPI3REF: Name Of A Host Parameter
                   3615: **
                   3616: ** ^The sqlite3_bind_parameter_name(P,N) interface returns
                   3617: ** the name of the N-th [SQL parameter] in the [prepared statement] P.
                   3618: ** ^(SQL parameters of the form "?NNN" or ":AAA" or "@AAA" or "$AAA"
                   3619: ** have a name which is the string "?NNN" or ":AAA" or "@AAA" or "$AAA"
                   3620: ** respectively.
                   3621: ** In other words, the initial ":" or "$" or "@" or "?"
                   3622: ** is included as part of the name.)^
                   3623: ** ^Parameters of the form "?" without a following integer have no name
                   3624: ** and are referred to as "nameless" or "anonymous parameters".
                   3625: **
                   3626: ** ^The first host parameter has an index of 1, not 0.
                   3627: **
                   3628: ** ^If the value N is out of range or if the N-th parameter is
                   3629: ** nameless, then NULL is returned.  ^The returned string is
                   3630: ** always in UTF-8 encoding even if the named parameter was
                   3631: ** originally specified as UTF-16 in [sqlite3_prepare16()] or
                   3632: ** [sqlite3_prepare16_v2()].
                   3633: **
                   3634: ** See also: [sqlite3_bind_blob|sqlite3_bind()],
                   3635: ** [sqlite3_bind_parameter_count()], and
                   3636: ** [sqlite3_bind_parameter_index()].
                   3637: */
                   3638: SQLITE_API const char *sqlite3_bind_parameter_name(sqlite3_stmt*, int);
                   3639: 
                   3640: /*
                   3641: ** CAPI3REF: Index Of A Parameter With A Given Name
                   3642: **
                   3643: ** ^Return the index of an SQL parameter given its name.  ^The
                   3644: ** index value returned is suitable for use as the second
                   3645: ** parameter to [sqlite3_bind_blob|sqlite3_bind()].  ^A zero
                   3646: ** is returned if no matching parameter is found.  ^The parameter
                   3647: ** name must be given in UTF-8 even if the original statement
                   3648: ** was prepared from UTF-16 text using [sqlite3_prepare16_v2()].
                   3649: **
                   3650: ** See also: [sqlite3_bind_blob|sqlite3_bind()],
                   3651: ** [sqlite3_bind_parameter_count()], and
                   3652: ** [sqlite3_bind_parameter_index()].
                   3653: */
                   3654: SQLITE_API int sqlite3_bind_parameter_index(sqlite3_stmt*, const char *zName);
                   3655: 
                   3656: /*
                   3657: ** CAPI3REF: Reset All Bindings On A Prepared Statement
                   3658: **
                   3659: ** ^Contrary to the intuition of many, [sqlite3_reset()] does not reset
                   3660: ** the [sqlite3_bind_blob | bindings] on a [prepared statement].
                   3661: ** ^Use this routine to reset all host parameters to NULL.
                   3662: */
                   3663: SQLITE_API int sqlite3_clear_bindings(sqlite3_stmt*);
                   3664: 
                   3665: /*
                   3666: ** CAPI3REF: Number Of Columns In A Result Set
                   3667: **
                   3668: ** ^Return the number of columns in the result set returned by the
                   3669: ** [prepared statement]. ^This routine returns 0 if pStmt is an SQL
                   3670: ** statement that does not return data (for example an [UPDATE]).
                   3671: **
                   3672: ** See also: [sqlite3_data_count()]
                   3673: */
                   3674: SQLITE_API int sqlite3_column_count(sqlite3_stmt *pStmt);
                   3675: 
                   3676: /*
                   3677: ** CAPI3REF: Column Names In A Result Set
                   3678: **
                   3679: ** ^These routines return the name assigned to a particular column
                   3680: ** in the result set of a [SELECT] statement.  ^The sqlite3_column_name()
                   3681: ** interface returns a pointer to a zero-terminated UTF-8 string
                   3682: ** and sqlite3_column_name16() returns a pointer to a zero-terminated
                   3683: ** UTF-16 string.  ^The first parameter is the [prepared statement]
                   3684: ** that implements the [SELECT] statement. ^The second parameter is the
                   3685: ** column number.  ^The leftmost column is number 0.
                   3686: **
                   3687: ** ^The returned string pointer is valid until either the [prepared statement]
                   3688: ** is destroyed by [sqlite3_finalize()] or until the statement is automatically
                   3689: ** reprepared by the first call to [sqlite3_step()] for a particular run
                   3690: ** or until the next call to
                   3691: ** sqlite3_column_name() or sqlite3_column_name16() on the same column.
                   3692: **
                   3693: ** ^If sqlite3_malloc() fails during the processing of either routine
                   3694: ** (for example during a conversion from UTF-8 to UTF-16) then a
                   3695: ** NULL pointer is returned.
                   3696: **
                   3697: ** ^The name of a result column is the value of the "AS" clause for
                   3698: ** that column, if there is an AS clause.  If there is no AS clause
                   3699: ** then the name of the column is unspecified and may change from
                   3700: ** one release of SQLite to the next.
                   3701: */
                   3702: SQLITE_API const char *sqlite3_column_name(sqlite3_stmt*, int N);
                   3703: SQLITE_API const void *sqlite3_column_name16(sqlite3_stmt*, int N);
                   3704: 
                   3705: /*
                   3706: ** CAPI3REF: Source Of Data In A Query Result
                   3707: **
                   3708: ** ^These routines provide a means to determine the database, table, and
                   3709: ** table column that is the origin of a particular result column in
                   3710: ** [SELECT] statement.
                   3711: ** ^The name of the database or table or column can be returned as
                   3712: ** either a UTF-8 or UTF-16 string.  ^The _database_ routines return
                   3713: ** the database name, the _table_ routines return the table name, and
                   3714: ** the origin_ routines return the column name.
                   3715: ** ^The returned string is valid until the [prepared statement] is destroyed
                   3716: ** using [sqlite3_finalize()] or until the statement is automatically
                   3717: ** reprepared by the first call to [sqlite3_step()] for a particular run
                   3718: ** or until the same information is requested
                   3719: ** again in a different encoding.
                   3720: **
                   3721: ** ^The names returned are the original un-aliased names of the
                   3722: ** database, table, and column.
                   3723: **
                   3724: ** ^The first argument to these interfaces is a [prepared statement].
                   3725: ** ^These functions return information about the Nth result column returned by
                   3726: ** the statement, where N is the second function argument.
                   3727: ** ^The left-most column is column 0 for these routines.
                   3728: **
                   3729: ** ^If the Nth column returned by the statement is an expression or
                   3730: ** subquery and is not a column value, then all of these functions return
                   3731: ** NULL.  ^These routine might also return NULL if a memory allocation error
                   3732: ** occurs.  ^Otherwise, they return the name of the attached database, table,
                   3733: ** or column that query result column was extracted from.
                   3734: **
                   3735: ** ^As with all other SQLite APIs, those whose names end with "16" return
                   3736: ** UTF-16 encoded strings and the other functions return UTF-8.
                   3737: **
                   3738: ** ^These APIs are only available if the library was compiled with the
                   3739: ** [SQLITE_ENABLE_COLUMN_METADATA] C-preprocessor symbol.
                   3740: **
                   3741: ** If two or more threads call one or more of these routines against the same
                   3742: ** prepared statement and column at the same time then the results are
                   3743: ** undefined.
                   3744: **
                   3745: ** If two or more threads call one or more
                   3746: ** [sqlite3_column_database_name | column metadata interfaces]
                   3747: ** for the same [prepared statement] and result column
                   3748: ** at the same time then the results are undefined.
                   3749: */
                   3750: SQLITE_API const char *sqlite3_column_database_name(sqlite3_stmt*,int);
                   3751: SQLITE_API const void *sqlite3_column_database_name16(sqlite3_stmt*,int);
                   3752: SQLITE_API const char *sqlite3_column_table_name(sqlite3_stmt*,int);
                   3753: SQLITE_API const void *sqlite3_column_table_name16(sqlite3_stmt*,int);
                   3754: SQLITE_API const char *sqlite3_column_origin_name(sqlite3_stmt*,int);
                   3755: SQLITE_API const void *sqlite3_column_origin_name16(sqlite3_stmt*,int);
                   3756: 
                   3757: /*
                   3758: ** CAPI3REF: Declared Datatype Of A Query Result
                   3759: **
                   3760: ** ^(The first parameter is a [prepared statement].
                   3761: ** If this statement is a [SELECT] statement and the Nth column of the
                   3762: ** returned result set of that [SELECT] is a table column (not an
                   3763: ** expression or subquery) then the declared type of the table
                   3764: ** column is returned.)^  ^If the Nth column of the result set is an
                   3765: ** expression or subquery, then a NULL pointer is returned.
                   3766: ** ^The returned string is always UTF-8 encoded.
                   3767: **
                   3768: ** ^(For example, given the database schema:
                   3769: **
                   3770: ** CREATE TABLE t1(c1 VARIANT);
                   3771: **
                   3772: ** and the following statement to be compiled:
                   3773: **
                   3774: ** SELECT c1 + 1, c1 FROM t1;
                   3775: **
                   3776: ** this routine would return the string "VARIANT" for the second result
                   3777: ** column (i==1), and a NULL pointer for the first result column (i==0).)^
                   3778: **
                   3779: ** ^SQLite uses dynamic run-time typing.  ^So just because a column
                   3780: ** is declared to contain a particular type does not mean that the
                   3781: ** data stored in that column is of the declared type.  SQLite is
                   3782: ** strongly typed, but the typing is dynamic not static.  ^Type
                   3783: ** is associated with individual values, not with the containers
                   3784: ** used to hold those values.
                   3785: */
                   3786: SQLITE_API const char *sqlite3_column_decltype(sqlite3_stmt*,int);
                   3787: SQLITE_API const void *sqlite3_column_decltype16(sqlite3_stmt*,int);
                   3788: 
                   3789: /*
                   3790: ** CAPI3REF: Evaluate An SQL Statement
                   3791: **
                   3792: ** After a [prepared statement] has been prepared using either
                   3793: ** [sqlite3_prepare_v2()] or [sqlite3_prepare16_v2()] or one of the legacy
                   3794: ** interfaces [sqlite3_prepare()] or [sqlite3_prepare16()], this function
                   3795: ** must be called one or more times to evaluate the statement.
                   3796: **
                   3797: ** The details of the behavior of the sqlite3_step() interface depend
                   3798: ** on whether the statement was prepared using the newer "v2" interface
                   3799: ** [sqlite3_prepare_v2()] and [sqlite3_prepare16_v2()] or the older legacy
                   3800: ** interface [sqlite3_prepare()] and [sqlite3_prepare16()].  The use of the
                   3801: ** new "v2" interface is recommended for new applications but the legacy
                   3802: ** interface will continue to be supported.
                   3803: **
                   3804: ** ^In the legacy interface, the return value will be either [SQLITE_BUSY],
                   3805: ** [SQLITE_DONE], [SQLITE_ROW], [SQLITE_ERROR], or [SQLITE_MISUSE].
                   3806: ** ^With the "v2" interface, any of the other [result codes] or
                   3807: ** [extended result codes] might be returned as well.
                   3808: **
                   3809: ** ^[SQLITE_BUSY] means that the database engine was unable to acquire the
                   3810: ** database locks it needs to do its job.  ^If the statement is a [COMMIT]
                   3811: ** or occurs outside of an explicit transaction, then you can retry the
                   3812: ** statement.  If the statement is not a [COMMIT] and occurs within an
                   3813: ** explicit transaction then you should rollback the transaction before
                   3814: ** continuing.
                   3815: **
                   3816: ** ^[SQLITE_DONE] means that the statement has finished executing
                   3817: ** successfully.  sqlite3_step() should not be called again on this virtual
                   3818: ** machine without first calling [sqlite3_reset()] to reset the virtual
                   3819: ** machine back to its initial state.
                   3820: **
                   3821: ** ^If the SQL statement being executed returns any data, then [SQLITE_ROW]
                   3822: ** is returned each time a new row of data is ready for processing by the
                   3823: ** caller. The values may be accessed using the [column access functions].
                   3824: ** sqlite3_step() is called again to retrieve the next row of data.
                   3825: **
                   3826: ** ^[SQLITE_ERROR] means that a run-time error (such as a constraint
                   3827: ** violation) has occurred.  sqlite3_step() should not be called again on
                   3828: ** the VM. More information may be found by calling [sqlite3_errmsg()].
                   3829: ** ^With the legacy interface, a more specific error code (for example,
                   3830: ** [SQLITE_INTERRUPT], [SQLITE_SCHEMA], [SQLITE_CORRUPT], and so forth)
                   3831: ** can be obtained by calling [sqlite3_reset()] on the
                   3832: ** [prepared statement].  ^In the "v2" interface,
                   3833: ** the more specific error code is returned directly by sqlite3_step().
                   3834: **
                   3835: ** [SQLITE_MISUSE] means that the this routine was called inappropriately.
                   3836: ** Perhaps it was called on a [prepared statement] that has
                   3837: ** already been [sqlite3_finalize | finalized] or on one that had
                   3838: ** previously returned [SQLITE_ERROR] or [SQLITE_DONE].  Or it could
                   3839: ** be the case that the same database connection is being used by two or
                   3840: ** more threads at the same moment in time.
                   3841: **
                   3842: ** For all versions of SQLite up to and including 3.6.23.1, a call to
                   3843: ** [sqlite3_reset()] was required after sqlite3_step() returned anything
                   3844: ** other than [SQLITE_ROW] before any subsequent invocation of
                   3845: ** sqlite3_step().  Failure to reset the prepared statement using 
                   3846: ** [sqlite3_reset()] would result in an [SQLITE_MISUSE] return from
                   3847: ** sqlite3_step().  But after version 3.6.23.1, sqlite3_step() began
                   3848: ** calling [sqlite3_reset()] automatically in this circumstance rather
                   3849: ** than returning [SQLITE_MISUSE].  This is not considered a compatibility
                   3850: ** break because any application that ever receives an SQLITE_MISUSE error
                   3851: ** is broken by definition.  The [SQLITE_OMIT_AUTORESET] compile-time option
                   3852: ** can be used to restore the legacy behavior.
                   3853: **
                   3854: ** <b>Goofy Interface Alert:</b> In the legacy interface, the sqlite3_step()
                   3855: ** API always returns a generic error code, [SQLITE_ERROR], following any
                   3856: ** error other than [SQLITE_BUSY] and [SQLITE_MISUSE].  You must call
                   3857: ** [sqlite3_reset()] or [sqlite3_finalize()] in order to find one of the
                   3858: ** specific [error codes] that better describes the error.
                   3859: ** We admit that this is a goofy design.  The problem has been fixed
                   3860: ** with the "v2" interface.  If you prepare all of your SQL statements
                   3861: ** using either [sqlite3_prepare_v2()] or [sqlite3_prepare16_v2()] instead
                   3862: ** of the legacy [sqlite3_prepare()] and [sqlite3_prepare16()] interfaces,
                   3863: ** then the more specific [error codes] are returned directly
                   3864: ** by sqlite3_step().  The use of the "v2" interface is recommended.
                   3865: */
                   3866: SQLITE_API int sqlite3_step(sqlite3_stmt*);
                   3867: 
                   3868: /*
                   3869: ** CAPI3REF: Number of columns in a result set
                   3870: **
                   3871: ** ^The sqlite3_data_count(P) interface returns the number of columns in the
                   3872: ** current row of the result set of [prepared statement] P.
                   3873: ** ^If prepared statement P does not have results ready to return
                   3874: ** (via calls to the [sqlite3_column_int | sqlite3_column_*()] of
                   3875: ** interfaces) then sqlite3_data_count(P) returns 0.
                   3876: ** ^The sqlite3_data_count(P) routine also returns 0 if P is a NULL pointer.
                   3877: **
                   3878: ** See also: [sqlite3_column_count()]
                   3879: */
                   3880: SQLITE_API int sqlite3_data_count(sqlite3_stmt *pStmt);
                   3881: 
                   3882: /*
                   3883: ** CAPI3REF: Fundamental Datatypes
                   3884: ** KEYWORDS: SQLITE_TEXT
                   3885: **
                   3886: ** ^(Every value in SQLite has one of five fundamental datatypes:
                   3887: **
                   3888: ** <ul>
                   3889: ** <li> 64-bit signed integer
                   3890: ** <li> 64-bit IEEE floating point number
                   3891: ** <li> string
                   3892: ** <li> BLOB
                   3893: ** <li> NULL
                   3894: ** </ul>)^
                   3895: **
                   3896: ** These constants are codes for each of those types.
                   3897: **
                   3898: ** Note that the SQLITE_TEXT constant was also used in SQLite version 2
                   3899: ** for a completely different meaning.  Software that links against both
                   3900: ** SQLite version 2 and SQLite version 3 should use SQLITE3_TEXT, not
                   3901: ** SQLITE_TEXT.
                   3902: */
                   3903: #define SQLITE_INTEGER  1
                   3904: #define SQLITE_FLOAT    2
                   3905: #define SQLITE_BLOB     4
                   3906: #define SQLITE_NULL     5
                   3907: #ifdef SQLITE_TEXT
                   3908: # undef SQLITE_TEXT
                   3909: #else
                   3910: # define SQLITE_TEXT     3
                   3911: #endif
                   3912: #define SQLITE3_TEXT     3
                   3913: 
                   3914: /*
                   3915: ** CAPI3REF: Result Values From A Query
                   3916: ** KEYWORDS: {column access functions}
                   3917: **
                   3918: ** These routines form the "result set" interface.
                   3919: **
                   3920: ** ^These routines return information about a single column of the current
                   3921: ** result row of a query.  ^In every case the first argument is a pointer
                   3922: ** to the [prepared statement] that is being evaluated (the [sqlite3_stmt*]
                   3923: ** that was returned from [sqlite3_prepare_v2()] or one of its variants)
                   3924: ** and the second argument is the index of the column for which information
                   3925: ** should be returned. ^The leftmost column of the result set has the index 0.
                   3926: ** ^The number of columns in the result can be determined using
                   3927: ** [sqlite3_column_count()].
                   3928: **
                   3929: ** If the SQL statement does not currently point to a valid row, or if the
                   3930: ** column index is out of range, the result is undefined.
                   3931: ** These routines may only be called when the most recent call to
                   3932: ** [sqlite3_step()] has returned [SQLITE_ROW] and neither
                   3933: ** [sqlite3_reset()] nor [sqlite3_finalize()] have been called subsequently.
                   3934: ** If any of these routines are called after [sqlite3_reset()] or
                   3935: ** [sqlite3_finalize()] or after [sqlite3_step()] has returned
                   3936: ** something other than [SQLITE_ROW], the results are undefined.
                   3937: ** If [sqlite3_step()] or [sqlite3_reset()] or [sqlite3_finalize()]
                   3938: ** are called from a different thread while any of these routines
                   3939: ** are pending, then the results are undefined.
                   3940: **
                   3941: ** ^The sqlite3_column_type() routine returns the
                   3942: ** [SQLITE_INTEGER | datatype code] for the initial data type
                   3943: ** of the result column.  ^The returned value is one of [SQLITE_INTEGER],
                   3944: ** [SQLITE_FLOAT], [SQLITE_TEXT], [SQLITE_BLOB], or [SQLITE_NULL].  The value
                   3945: ** returned by sqlite3_column_type() is only meaningful if no type
                   3946: ** conversions have occurred as described below.  After a type conversion,
                   3947: ** the value returned by sqlite3_column_type() is undefined.  Future
                   3948: ** versions of SQLite may change the behavior of sqlite3_column_type()
                   3949: ** following a type conversion.
                   3950: **
                   3951: ** ^If the result is a BLOB or UTF-8 string then the sqlite3_column_bytes()
                   3952: ** routine returns the number of bytes in that BLOB or string.
                   3953: ** ^If the result is a UTF-16 string, then sqlite3_column_bytes() converts
                   3954: ** the string to UTF-8 and then returns the number of bytes.
                   3955: ** ^If the result is a numeric value then sqlite3_column_bytes() uses
                   3956: ** [sqlite3_snprintf()] to convert that value to a UTF-8 string and returns
                   3957: ** the number of bytes in that string.
                   3958: ** ^If the result is NULL, then sqlite3_column_bytes() returns zero.
                   3959: **
                   3960: ** ^If the result is a BLOB or UTF-16 string then the sqlite3_column_bytes16()
                   3961: ** routine returns the number of bytes in that BLOB or string.
                   3962: ** ^If the result is a UTF-8 string, then sqlite3_column_bytes16() converts
                   3963: ** the string to UTF-16 and then returns the number of bytes.
                   3964: ** ^If the result is a numeric value then sqlite3_column_bytes16() uses
                   3965: ** [sqlite3_snprintf()] to convert that value to a UTF-16 string and returns
                   3966: ** the number of bytes in that string.
                   3967: ** ^If the result is NULL, then sqlite3_column_bytes16() returns zero.
                   3968: **
                   3969: ** ^The values returned by [sqlite3_column_bytes()] and 
                   3970: ** [sqlite3_column_bytes16()] do not include the zero terminators at the end
                   3971: ** of the string.  ^For clarity: the values returned by
                   3972: ** [sqlite3_column_bytes()] and [sqlite3_column_bytes16()] are the number of
                   3973: ** bytes in the string, not the number of characters.
                   3974: **
                   3975: ** ^Strings returned by sqlite3_column_text() and sqlite3_column_text16(),
                   3976: ** even empty strings, are always zero terminated.  ^The return
                   3977: ** value from sqlite3_column_blob() for a zero-length BLOB is a NULL pointer.
                   3978: **
                   3979: ** ^The object returned by [sqlite3_column_value()] is an
                   3980: ** [unprotected sqlite3_value] object.  An unprotected sqlite3_value object
                   3981: ** may only be used with [sqlite3_bind_value()] and [sqlite3_result_value()].
                   3982: ** If the [unprotected sqlite3_value] object returned by
                   3983: ** [sqlite3_column_value()] is used in any other way, including calls
                   3984: ** to routines like [sqlite3_value_int()], [sqlite3_value_text()],
                   3985: ** or [sqlite3_value_bytes()], then the behavior is undefined.
                   3986: **
                   3987: ** These routines attempt to convert the value where appropriate.  ^For
                   3988: ** example, if the internal representation is FLOAT and a text result
                   3989: ** is requested, [sqlite3_snprintf()] is used internally to perform the
                   3990: ** conversion automatically.  ^(The following table details the conversions
                   3991: ** that are applied:
                   3992: **
                   3993: ** <blockquote>
                   3994: ** <table border="1">
                   3995: ** <tr><th> Internal<br>Type <th> Requested<br>Type <th>  Conversion
                   3996: **
                   3997: ** <tr><td>  NULL    <td> INTEGER   <td> Result is 0
                   3998: ** <tr><td>  NULL    <td>  FLOAT    <td> Result is 0.0
                   3999: ** <tr><td>  NULL    <td>   TEXT    <td> Result is NULL pointer
                   4000: ** <tr><td>  NULL    <td>   BLOB    <td> Result is NULL pointer
                   4001: ** <tr><td> INTEGER  <td>  FLOAT    <td> Convert from integer to float
                   4002: ** <tr><td> INTEGER  <td>   TEXT    <td> ASCII rendering of the integer
                   4003: ** <tr><td> INTEGER  <td>   BLOB    <td> Same as INTEGER->TEXT
                   4004: ** <tr><td>  FLOAT   <td> INTEGER   <td> Convert from float to integer
                   4005: ** <tr><td>  FLOAT   <td>   TEXT    <td> ASCII rendering of the float
                   4006: ** <tr><td>  FLOAT   <td>   BLOB    <td> Same as FLOAT->TEXT
                   4007: ** <tr><td>  TEXT    <td> INTEGER   <td> Use atoi()
                   4008: ** <tr><td>  TEXT    <td>  FLOAT    <td> Use atof()
                   4009: ** <tr><td>  TEXT    <td>   BLOB    <td> No change
                   4010: ** <tr><td>  BLOB    <td> INTEGER   <td> Convert to TEXT then use atoi()
                   4011: ** <tr><td>  BLOB    <td>  FLOAT    <td> Convert to TEXT then use atof()
                   4012: ** <tr><td>  BLOB    <td>   TEXT    <td> Add a zero terminator if needed
                   4013: ** </table>
                   4014: ** </blockquote>)^
                   4015: **
                   4016: ** The table above makes reference to standard C library functions atoi()
                   4017: ** and atof().  SQLite does not really use these functions.  It has its
                   4018: ** own equivalent internal routines.  The atoi() and atof() names are
                   4019: ** used in the table for brevity and because they are familiar to most
                   4020: ** C programmers.
                   4021: **
                   4022: ** Note that when type conversions occur, pointers returned by prior
                   4023: ** calls to sqlite3_column_blob(), sqlite3_column_text(), and/or
                   4024: ** sqlite3_column_text16() may be invalidated.
                   4025: ** Type conversions and pointer invalidations might occur
                   4026: ** in the following cases:
                   4027: **
                   4028: ** <ul>
                   4029: ** <li> The initial content is a BLOB and sqlite3_column_text() or
                   4030: **      sqlite3_column_text16() is called.  A zero-terminator might
                   4031: **      need to be added to the string.</li>
                   4032: ** <li> The initial content is UTF-8 text and sqlite3_column_bytes16() or
                   4033: **      sqlite3_column_text16() is called.  The content must be converted
                   4034: **      to UTF-16.</li>
                   4035: ** <li> The initial content is UTF-16 text and sqlite3_column_bytes() or
                   4036: **      sqlite3_column_text() is called.  The content must be converted
                   4037: **      to UTF-8.</li>
                   4038: ** </ul>
                   4039: **
                   4040: ** ^Conversions between UTF-16be and UTF-16le are always done in place and do
                   4041: ** not invalidate a prior pointer, though of course the content of the buffer
                   4042: ** that the prior pointer references will have been modified.  Other kinds
                   4043: ** of conversion are done in place when it is possible, but sometimes they
                   4044: ** are not possible and in those cases prior pointers are invalidated.
                   4045: **
                   4046: ** The safest and easiest to remember policy is to invoke these routines
                   4047: ** in one of the following ways:
                   4048: **
                   4049: ** <ul>
                   4050: **  <li>sqlite3_column_text() followed by sqlite3_column_bytes()</li>
                   4051: **  <li>sqlite3_column_blob() followed by sqlite3_column_bytes()</li>
                   4052: **  <li>sqlite3_column_text16() followed by sqlite3_column_bytes16()</li>
                   4053: ** </ul>
                   4054: **
                   4055: ** In other words, you should call sqlite3_column_text(),
                   4056: ** sqlite3_column_blob(), or sqlite3_column_text16() first to force the result
                   4057: ** into the desired format, then invoke sqlite3_column_bytes() or
                   4058: ** sqlite3_column_bytes16() to find the size of the result.  Do not mix calls
                   4059: ** to sqlite3_column_text() or sqlite3_column_blob() with calls to
                   4060: ** sqlite3_column_bytes16(), and do not mix calls to sqlite3_column_text16()
                   4061: ** with calls to sqlite3_column_bytes().
                   4062: **
                   4063: ** ^The pointers returned are valid until a type conversion occurs as
                   4064: ** described above, or until [sqlite3_step()] or [sqlite3_reset()] or
                   4065: ** [sqlite3_finalize()] is called.  ^The memory space used to hold strings
                   4066: ** and BLOBs is freed automatically.  Do <b>not</b> pass the pointers returned
                   4067: ** [sqlite3_column_blob()], [sqlite3_column_text()], etc. into
                   4068: ** [sqlite3_free()].
                   4069: **
                   4070: ** ^(If a memory allocation error occurs during the evaluation of any
                   4071: ** of these routines, a default value is returned.  The default value
                   4072: ** is either the integer 0, the floating point number 0.0, or a NULL
                   4073: ** pointer.  Subsequent calls to [sqlite3_errcode()] will return
                   4074: ** [SQLITE_NOMEM].)^
                   4075: */
                   4076: SQLITE_API const void *sqlite3_column_blob(sqlite3_stmt*, int iCol);
                   4077: SQLITE_API int sqlite3_column_bytes(sqlite3_stmt*, int iCol);
                   4078: SQLITE_API int sqlite3_column_bytes16(sqlite3_stmt*, int iCol);
                   4079: SQLITE_API double sqlite3_column_double(sqlite3_stmt*, int iCol);
                   4080: SQLITE_API int sqlite3_column_int(sqlite3_stmt*, int iCol);
                   4081: SQLITE_API sqlite3_int64 sqlite3_column_int64(sqlite3_stmt*, int iCol);
                   4082: SQLITE_API const unsigned char *sqlite3_column_text(sqlite3_stmt*, int iCol);
                   4083: SQLITE_API const void *sqlite3_column_text16(sqlite3_stmt*, int iCol);
                   4084: SQLITE_API int sqlite3_column_type(sqlite3_stmt*, int iCol);
                   4085: SQLITE_API sqlite3_value *sqlite3_column_value(sqlite3_stmt*, int iCol);
                   4086: 
                   4087: /*
                   4088: ** CAPI3REF: Destroy A Prepared Statement Object
                   4089: **
                   4090: ** ^The sqlite3_finalize() function is called to delete a [prepared statement].
                   4091: ** ^If the most recent evaluation of the statement encountered no errors
                   4092: ** or if the statement is never been evaluated, then sqlite3_finalize() returns
                   4093: ** SQLITE_OK.  ^If the most recent evaluation of statement S failed, then
                   4094: ** sqlite3_finalize(S) returns the appropriate [error code] or
                   4095: ** [extended error code].
                   4096: **
                   4097: ** ^The sqlite3_finalize(S) routine can be called at any point during
                   4098: ** the life cycle of [prepared statement] S:
                   4099: ** before statement S is ever evaluated, after
                   4100: ** one or more calls to [sqlite3_reset()], or after any call
                   4101: ** to [sqlite3_step()] regardless of whether or not the statement has
                   4102: ** completed execution.
                   4103: **
                   4104: ** ^Invoking sqlite3_finalize() on a NULL pointer is a harmless no-op.
                   4105: **
                   4106: ** The application must finalize every [prepared statement] in order to avoid
                   4107: ** resource leaks.  It is a grievous error for the application to try to use
                   4108: ** a prepared statement after it has been finalized.  Any use of a prepared
                   4109: ** statement after it has been finalized can result in undefined and
                   4110: ** undesirable behavior such as segfaults and heap corruption.
                   4111: */
                   4112: SQLITE_API int sqlite3_finalize(sqlite3_stmt *pStmt);
                   4113: 
                   4114: /*
                   4115: ** CAPI3REF: Reset A Prepared Statement Object
                   4116: **
                   4117: ** The sqlite3_reset() function is called to reset a [prepared statement]
                   4118: ** object back to its initial state, ready to be re-executed.
                   4119: ** ^Any SQL statement variables that had values bound to them using
                   4120: ** the [sqlite3_bind_blob | sqlite3_bind_*() API] retain their values.
                   4121: ** Use [sqlite3_clear_bindings()] to reset the bindings.
                   4122: **
                   4123: ** ^The [sqlite3_reset(S)] interface resets the [prepared statement] S
                   4124: ** back to the beginning of its program.
                   4125: **
                   4126: ** ^If the most recent call to [sqlite3_step(S)] for the
                   4127: ** [prepared statement] S returned [SQLITE_ROW] or [SQLITE_DONE],
                   4128: ** or if [sqlite3_step(S)] has never before been called on S,
                   4129: ** then [sqlite3_reset(S)] returns [SQLITE_OK].
                   4130: **
                   4131: ** ^If the most recent call to [sqlite3_step(S)] for the
                   4132: ** [prepared statement] S indicated an error, then
                   4133: ** [sqlite3_reset(S)] returns an appropriate [error code].
                   4134: **
                   4135: ** ^The [sqlite3_reset(S)] interface does not change the values
                   4136: ** of any [sqlite3_bind_blob|bindings] on the [prepared statement] S.
                   4137: */
                   4138: SQLITE_API int sqlite3_reset(sqlite3_stmt *pStmt);
                   4139: 
                   4140: /*
                   4141: ** CAPI3REF: Create Or Redefine SQL Functions
                   4142: ** KEYWORDS: {function creation routines}
                   4143: ** KEYWORDS: {application-defined SQL function}
                   4144: ** KEYWORDS: {application-defined SQL functions}
                   4145: **
                   4146: ** ^These functions (collectively known as "function creation routines")
                   4147: ** are used to add SQL functions or aggregates or to redefine the behavior
                   4148: ** of existing SQL functions or aggregates.  The only differences between
                   4149: ** these routines are the text encoding expected for
                   4150: ** the second parameter (the name of the function being created)
                   4151: ** and the presence or absence of a destructor callback for
                   4152: ** the application data pointer.
                   4153: **
                   4154: ** ^The first parameter is the [database connection] to which the SQL
                   4155: ** function is to be added.  ^If an application uses more than one database
                   4156: ** connection then application-defined SQL functions must be added
                   4157: ** to each database connection separately.
                   4158: **
                   4159: ** ^The second parameter is the name of the SQL function to be created or
                   4160: ** redefined.  ^The length of the name is limited to 255 bytes in a UTF-8
                   4161: ** representation, exclusive of the zero-terminator.  ^Note that the name
                   4162: ** length limit is in UTF-8 bytes, not characters nor UTF-16 bytes.  
                   4163: ** ^Any attempt to create a function with a longer name
                   4164: ** will result in [SQLITE_MISUSE] being returned.
                   4165: **
                   4166: ** ^The third parameter (nArg)
                   4167: ** is the number of arguments that the SQL function or
                   4168: ** aggregate takes. ^If this parameter is -1, then the SQL function or
                   4169: ** aggregate may take any number of arguments between 0 and the limit
                   4170: ** set by [sqlite3_limit]([SQLITE_LIMIT_FUNCTION_ARG]).  If the third
                   4171: ** parameter is less than -1 or greater than 127 then the behavior is
                   4172: ** undefined.
                   4173: **
                   4174: ** ^The fourth parameter, eTextRep, specifies what
                   4175: ** [SQLITE_UTF8 | text encoding] this SQL function prefers for
                   4176: ** its parameters.  Every SQL function implementation must be able to work
                   4177: ** with UTF-8, UTF-16le, or UTF-16be.  But some implementations may be
                   4178: ** more efficient with one encoding than another.  ^An application may
                   4179: ** invoke sqlite3_create_function() or sqlite3_create_function16() multiple
                   4180: ** times with the same function but with different values of eTextRep.
                   4181: ** ^When multiple implementations of the same function are available, SQLite
                   4182: ** will pick the one that involves the least amount of data conversion.
                   4183: ** If there is only a single implementation which does not care what text
                   4184: ** encoding is used, then the fourth argument should be [SQLITE_ANY].
                   4185: **
                   4186: ** ^(The fifth parameter is an arbitrary pointer.  The implementation of the
                   4187: ** function can gain access to this pointer using [sqlite3_user_data()].)^
                   4188: **
                   4189: ** ^The sixth, seventh and eighth parameters, xFunc, xStep and xFinal, are
                   4190: ** pointers to C-language functions that implement the SQL function or
                   4191: ** aggregate. ^A scalar SQL function requires an implementation of the xFunc
                   4192: ** callback only; NULL pointers must be passed as the xStep and xFinal
                   4193: ** parameters. ^An aggregate SQL function requires an implementation of xStep
                   4194: ** and xFinal and NULL pointer must be passed for xFunc. ^To delete an existing
                   4195: ** SQL function or aggregate, pass NULL pointers for all three function
                   4196: ** callbacks.
                   4197: **
                   4198: ** ^(If the ninth parameter to sqlite3_create_function_v2() is not NULL,
                   4199: ** then it is destructor for the application data pointer. 
                   4200: ** The destructor is invoked when the function is deleted, either by being
                   4201: ** overloaded or when the database connection closes.)^
                   4202: ** ^The destructor is also invoked if the call to
                   4203: ** sqlite3_create_function_v2() fails.
                   4204: ** ^When the destructor callback of the tenth parameter is invoked, it
                   4205: ** is passed a single argument which is a copy of the application data 
                   4206: ** pointer which was the fifth parameter to sqlite3_create_function_v2().
                   4207: **
                   4208: ** ^It is permitted to register multiple implementations of the same
                   4209: ** functions with the same name but with either differing numbers of
                   4210: ** arguments or differing preferred text encodings.  ^SQLite will use
                   4211: ** the implementation that most closely matches the way in which the
                   4212: ** SQL function is used.  ^A function implementation with a non-negative
                   4213: ** nArg parameter is a better match than a function implementation with
                   4214: ** a negative nArg.  ^A function where the preferred text encoding
                   4215: ** matches the database encoding is a better
                   4216: ** match than a function where the encoding is different.  
                   4217: ** ^A function where the encoding difference is between UTF16le and UTF16be
                   4218: ** is a closer match than a function where the encoding difference is
                   4219: ** between UTF8 and UTF16.
                   4220: **
                   4221: ** ^Built-in functions may be overloaded by new application-defined functions.
                   4222: **
                   4223: ** ^An application-defined function is permitted to call other
                   4224: ** SQLite interfaces.  However, such calls must not
                   4225: ** close the database connection nor finalize or reset the prepared
                   4226: ** statement in which the function is running.
                   4227: */
                   4228: SQLITE_API int sqlite3_create_function(
                   4229:   sqlite3 *db,
                   4230:   const char *zFunctionName,
                   4231:   int nArg,
                   4232:   int eTextRep,
                   4233:   void *pApp,
                   4234:   void (*xFunc)(sqlite3_context*,int,sqlite3_value**),
                   4235:   void (*xStep)(sqlite3_context*,int,sqlite3_value**),
                   4236:   void (*xFinal)(sqlite3_context*)
                   4237: );
                   4238: SQLITE_API int sqlite3_create_function16(
                   4239:   sqlite3 *db,
                   4240:   const void *zFunctionName,
                   4241:   int nArg,
                   4242:   int eTextRep,
                   4243:   void *pApp,
                   4244:   void (*xFunc)(sqlite3_context*,int,sqlite3_value**),
                   4245:   void (*xStep)(sqlite3_context*,int,sqlite3_value**),
                   4246:   void (*xFinal)(sqlite3_context*)
                   4247: );
                   4248: SQLITE_API int sqlite3_create_function_v2(
                   4249:   sqlite3 *db,
                   4250:   const char *zFunctionName,
                   4251:   int nArg,
                   4252:   int eTextRep,
                   4253:   void *pApp,
                   4254:   void (*xFunc)(sqlite3_context*,int,sqlite3_value**),
                   4255:   void (*xStep)(sqlite3_context*,int,sqlite3_value**),
                   4256:   void (*xFinal)(sqlite3_context*),
                   4257:   void(*xDestroy)(void*)
                   4258: );
                   4259: 
                   4260: /*
                   4261: ** CAPI3REF: Text Encodings
                   4262: **
                   4263: ** These constant define integer codes that represent the various
                   4264: ** text encodings supported by SQLite.
                   4265: */
                   4266: #define SQLITE_UTF8           1
                   4267: #define SQLITE_UTF16LE        2
                   4268: #define SQLITE_UTF16BE        3
                   4269: #define SQLITE_UTF16          4    /* Use native byte order */
                   4270: #define SQLITE_ANY            5    /* sqlite3_create_function only */
                   4271: #define SQLITE_UTF16_ALIGNED  8    /* sqlite3_create_collation only */
                   4272: 
                   4273: /*
                   4274: ** CAPI3REF: Deprecated Functions
                   4275: ** DEPRECATED
                   4276: **
                   4277: ** These functions are [deprecated].  In order to maintain
                   4278: ** backwards compatibility with older code, these functions continue 
                   4279: ** to be supported.  However, new applications should avoid
                   4280: ** the use of these functions.  To help encourage people to avoid
                   4281: ** using these functions, we are not going to tell you what they do.
                   4282: */
                   4283: #ifndef SQLITE_OMIT_DEPRECATED
                   4284: SQLITE_API SQLITE_DEPRECATED int sqlite3_aggregate_count(sqlite3_context*);
                   4285: SQLITE_API SQLITE_DEPRECATED int sqlite3_expired(sqlite3_stmt*);
                   4286: SQLITE_API SQLITE_DEPRECATED int sqlite3_transfer_bindings(sqlite3_stmt*, sqlite3_stmt*);
                   4287: SQLITE_API SQLITE_DEPRECATED int sqlite3_global_recover(void);
                   4288: SQLITE_API SQLITE_DEPRECATED void sqlite3_thread_cleanup(void);
                   4289: SQLITE_API SQLITE_DEPRECATED int sqlite3_memory_alarm(void(*)(void*,sqlite3_int64,int),void*,sqlite3_int64);
                   4290: #endif
                   4291: 
                   4292: /*
                   4293: ** CAPI3REF: Obtaining SQL Function Parameter Values
                   4294: **
                   4295: ** The C-language implementation of SQL functions and aggregates uses
                   4296: ** this set of interface routines to access the parameter values on
                   4297: ** the function or aggregate.
                   4298: **
                   4299: ** The xFunc (for scalar functions) or xStep (for aggregates) parameters
                   4300: ** to [sqlite3_create_function()] and [sqlite3_create_function16()]
                   4301: ** define callbacks that implement the SQL functions and aggregates.
                   4302: ** The 3rd parameter to these callbacks is an array of pointers to
                   4303: ** [protected sqlite3_value] objects.  There is one [sqlite3_value] object for
                   4304: ** each parameter to the SQL function.  These routines are used to
                   4305: ** extract values from the [sqlite3_value] objects.
                   4306: **
                   4307: ** These routines work only with [protected sqlite3_value] objects.
                   4308: ** Any attempt to use these routines on an [unprotected sqlite3_value]
                   4309: ** object results in undefined behavior.
                   4310: **
                   4311: ** ^These routines work just like the corresponding [column access functions]
                   4312: ** except that  these routines take a single [protected sqlite3_value] object
                   4313: ** pointer instead of a [sqlite3_stmt*] pointer and an integer column number.
                   4314: **
                   4315: ** ^The sqlite3_value_text16() interface extracts a UTF-16 string
                   4316: ** in the native byte-order of the host machine.  ^The
                   4317: ** sqlite3_value_text16be() and sqlite3_value_text16le() interfaces
                   4318: ** extract UTF-16 strings as big-endian and little-endian respectively.
                   4319: **
                   4320: ** ^(The sqlite3_value_numeric_type() interface attempts to apply
                   4321: ** numeric affinity to the value.  This means that an attempt is
                   4322: ** made to convert the value to an integer or floating point.  If
                   4323: ** such a conversion is possible without loss of information (in other
                   4324: ** words, if the value is a string that looks like a number)
                   4325: ** then the conversion is performed.  Otherwise no conversion occurs.
                   4326: ** The [SQLITE_INTEGER | datatype] after conversion is returned.)^
                   4327: **
                   4328: ** Please pay particular attention to the fact that the pointer returned
                   4329: ** from [sqlite3_value_blob()], [sqlite3_value_text()], or
                   4330: ** [sqlite3_value_text16()] can be invalidated by a subsequent call to
                   4331: ** [sqlite3_value_bytes()], [sqlite3_value_bytes16()], [sqlite3_value_text()],
                   4332: ** or [sqlite3_value_text16()].
                   4333: **
                   4334: ** These routines must be called from the same thread as
                   4335: ** the SQL function that supplied the [sqlite3_value*] parameters.
                   4336: */
                   4337: SQLITE_API const void *sqlite3_value_blob(sqlite3_value*);
                   4338: SQLITE_API int sqlite3_value_bytes(sqlite3_value*);
                   4339: SQLITE_API int sqlite3_value_bytes16(sqlite3_value*);
                   4340: SQLITE_API double sqlite3_value_double(sqlite3_value*);
                   4341: SQLITE_API int sqlite3_value_int(sqlite3_value*);
                   4342: SQLITE_API sqlite3_int64 sqlite3_value_int64(sqlite3_value*);
                   4343: SQLITE_API const unsigned char *sqlite3_value_text(sqlite3_value*);
                   4344: SQLITE_API const void *sqlite3_value_text16(sqlite3_value*);
                   4345: SQLITE_API const void *sqlite3_value_text16le(sqlite3_value*);
                   4346: SQLITE_API const void *sqlite3_value_text16be(sqlite3_value*);
                   4347: SQLITE_API int sqlite3_value_type(sqlite3_value*);
                   4348: SQLITE_API int sqlite3_value_numeric_type(sqlite3_value*);
                   4349: 
                   4350: /*
                   4351: ** CAPI3REF: Obtain Aggregate Function Context
                   4352: **
                   4353: ** Implementations of aggregate SQL functions use this
                   4354: ** routine to allocate memory for storing their state.
                   4355: **
                   4356: ** ^The first time the sqlite3_aggregate_context(C,N) routine is called 
                   4357: ** for a particular aggregate function, SQLite
                   4358: ** allocates N of memory, zeroes out that memory, and returns a pointer
                   4359: ** to the new memory. ^On second and subsequent calls to
                   4360: ** sqlite3_aggregate_context() for the same aggregate function instance,
                   4361: ** the same buffer is returned.  Sqlite3_aggregate_context() is normally
                   4362: ** called once for each invocation of the xStep callback and then one
                   4363: ** last time when the xFinal callback is invoked.  ^(When no rows match
                   4364: ** an aggregate query, the xStep() callback of the aggregate function
                   4365: ** implementation is never called and xFinal() is called exactly once.
                   4366: ** In those cases, sqlite3_aggregate_context() might be called for the
                   4367: ** first time from within xFinal().)^
                   4368: **
                   4369: ** ^The sqlite3_aggregate_context(C,N) routine returns a NULL pointer if N is
                   4370: ** less than or equal to zero or if a memory allocate error occurs.
                   4371: **
                   4372: ** ^(The amount of space allocated by sqlite3_aggregate_context(C,N) is
                   4373: ** determined by the N parameter on first successful call.  Changing the
                   4374: ** value of N in subsequent call to sqlite3_aggregate_context() within
                   4375: ** the same aggregate function instance will not resize the memory
                   4376: ** allocation.)^
                   4377: **
                   4378: ** ^SQLite automatically frees the memory allocated by 
                   4379: ** sqlite3_aggregate_context() when the aggregate query concludes.
                   4380: **
                   4381: ** The first parameter must be a copy of the
                   4382: ** [sqlite3_context | SQL function context] that is the first parameter
                   4383: ** to the xStep or xFinal callback routine that implements the aggregate
                   4384: ** function.
                   4385: **
                   4386: ** This routine must be called from the same thread in which
                   4387: ** the aggregate SQL function is running.
                   4388: */
                   4389: SQLITE_API void *sqlite3_aggregate_context(sqlite3_context*, int nBytes);
                   4390: 
                   4391: /*
                   4392: ** CAPI3REF: User Data For Functions
                   4393: **
                   4394: ** ^The sqlite3_user_data() interface returns a copy of
                   4395: ** the pointer that was the pUserData parameter (the 5th parameter)
                   4396: ** of the [sqlite3_create_function()]
                   4397: ** and [sqlite3_create_function16()] routines that originally
                   4398: ** registered the application defined function.
                   4399: **
                   4400: ** This routine must be called from the same thread in which
                   4401: ** the application-defined function is running.
                   4402: */
                   4403: SQLITE_API void *sqlite3_user_data(sqlite3_context*);
                   4404: 
                   4405: /*
                   4406: ** CAPI3REF: Database Connection For Functions
                   4407: **
                   4408: ** ^The sqlite3_context_db_handle() interface returns a copy of
                   4409: ** the pointer to the [database connection] (the 1st parameter)
                   4410: ** of the [sqlite3_create_function()]
                   4411: ** and [sqlite3_create_function16()] routines that originally
                   4412: ** registered the application defined function.
                   4413: */
                   4414: SQLITE_API sqlite3 *sqlite3_context_db_handle(sqlite3_context*);
                   4415: 
                   4416: /*
                   4417: ** CAPI3REF: Function Auxiliary Data
                   4418: **
                   4419: ** The following two functions may be used by scalar SQL functions to
                   4420: ** associate metadata with argument values. If the same value is passed to
                   4421: ** multiple invocations of the same SQL function during query execution, under
                   4422: ** some circumstances the associated metadata may be preserved. This may
                   4423: ** be used, for example, to add a regular-expression matching scalar
                   4424: ** function. The compiled version of the regular expression is stored as
                   4425: ** metadata associated with the SQL value passed as the regular expression
                   4426: ** pattern.  The compiled regular expression can be reused on multiple
                   4427: ** invocations of the same function so that the original pattern string
                   4428: ** does not need to be recompiled on each invocation.
                   4429: **
                   4430: ** ^The sqlite3_get_auxdata() interface returns a pointer to the metadata
                   4431: ** associated by the sqlite3_set_auxdata() function with the Nth argument
                   4432: ** value to the application-defined function. ^If no metadata has been ever
                   4433: ** been set for the Nth argument of the function, or if the corresponding
                   4434: ** function parameter has changed since the meta-data was set,
                   4435: ** then sqlite3_get_auxdata() returns a NULL pointer.
                   4436: **
                   4437: ** ^The sqlite3_set_auxdata() interface saves the metadata
                   4438: ** pointed to by its 3rd parameter as the metadata for the N-th
                   4439: ** argument of the application-defined function.  Subsequent
                   4440: ** calls to sqlite3_get_auxdata() might return this data, if it has
                   4441: ** not been destroyed.
                   4442: ** ^If it is not NULL, SQLite will invoke the destructor
                   4443: ** function given by the 4th parameter to sqlite3_set_auxdata() on
                   4444: ** the metadata when the corresponding function parameter changes
                   4445: ** or when the SQL statement completes, whichever comes first.
                   4446: **
                   4447: ** SQLite is free to call the destructor and drop metadata on any
                   4448: ** parameter of any function at any time.  ^The only guarantee is that
                   4449: ** the destructor will be called before the metadata is dropped.
                   4450: **
                   4451: ** ^(In practice, metadata is preserved between function calls for
                   4452: ** expressions that are constant at compile time. This includes literal
                   4453: ** values and [parameters].)^
                   4454: **
                   4455: ** These routines must be called from the same thread in which
                   4456: ** the SQL function is running.
                   4457: */
                   4458: SQLITE_API void *sqlite3_get_auxdata(sqlite3_context*, int N);
                   4459: SQLITE_API void sqlite3_set_auxdata(sqlite3_context*, int N, void*, void (*)(void*));
                   4460: 
                   4461: 
                   4462: /*
                   4463: ** CAPI3REF: Constants Defining Special Destructor Behavior
                   4464: **
                   4465: ** These are special values for the destructor that is passed in as the
                   4466: ** final argument to routines like [sqlite3_result_blob()].  ^If the destructor
                   4467: ** argument is SQLITE_STATIC, it means that the content pointer is constant
                   4468: ** and will never change.  It does not need to be destroyed.  ^The
                   4469: ** SQLITE_TRANSIENT value means that the content will likely change in
                   4470: ** the near future and that SQLite should make its own private copy of
                   4471: ** the content before returning.
                   4472: **
                   4473: ** The typedef is necessary to work around problems in certain
                   4474: ** C++ compilers.  See ticket #2191.
                   4475: */
                   4476: typedef void (*sqlite3_destructor_type)(void*);
                   4477: #define SQLITE_STATIC      ((sqlite3_destructor_type)0)
                   4478: #define SQLITE_TRANSIENT   ((sqlite3_destructor_type)-1)
                   4479: 
                   4480: /*
                   4481: ** CAPI3REF: Setting The Result Of An SQL Function
                   4482: **
                   4483: ** These routines are used by the xFunc or xFinal callbacks that
                   4484: ** implement SQL functions and aggregates.  See
                   4485: ** [sqlite3_create_function()] and [sqlite3_create_function16()]
                   4486: ** for additional information.
                   4487: **
                   4488: ** These functions work very much like the [parameter binding] family of
                   4489: ** functions used to bind values to host parameters in prepared statements.
                   4490: ** Refer to the [SQL parameter] documentation for additional information.
                   4491: **
                   4492: ** ^The sqlite3_result_blob() interface sets the result from
                   4493: ** an application-defined function to be the BLOB whose content is pointed
                   4494: ** to by the second parameter and which is N bytes long where N is the
                   4495: ** third parameter.
                   4496: **
                   4497: ** ^The sqlite3_result_zeroblob() interfaces set the result of
                   4498: ** the application-defined function to be a BLOB containing all zero
                   4499: ** bytes and N bytes in size, where N is the value of the 2nd parameter.
                   4500: **
                   4501: ** ^The sqlite3_result_double() interface sets the result from
                   4502: ** an application-defined function to be a floating point value specified
                   4503: ** by its 2nd argument.
                   4504: **
                   4505: ** ^The sqlite3_result_error() and sqlite3_result_error16() functions
                   4506: ** cause the implemented SQL function to throw an exception.
                   4507: ** ^SQLite uses the string pointed to by the
                   4508: ** 2nd parameter of sqlite3_result_error() or sqlite3_result_error16()
                   4509: ** as the text of an error message.  ^SQLite interprets the error
                   4510: ** message string from sqlite3_result_error() as UTF-8. ^SQLite
                   4511: ** interprets the string from sqlite3_result_error16() as UTF-16 in native
                   4512: ** byte order.  ^If the third parameter to sqlite3_result_error()
                   4513: ** or sqlite3_result_error16() is negative then SQLite takes as the error
                   4514: ** message all text up through the first zero character.
                   4515: ** ^If the third parameter to sqlite3_result_error() or
                   4516: ** sqlite3_result_error16() is non-negative then SQLite takes that many
                   4517: ** bytes (not characters) from the 2nd parameter as the error message.
                   4518: ** ^The sqlite3_result_error() and sqlite3_result_error16()
                   4519: ** routines make a private copy of the error message text before
                   4520: ** they return.  Hence, the calling function can deallocate or
                   4521: ** modify the text after they return without harm.
                   4522: ** ^The sqlite3_result_error_code() function changes the error code
                   4523: ** returned by SQLite as a result of an error in a function.  ^By default,
                   4524: ** the error code is SQLITE_ERROR.  ^A subsequent call to sqlite3_result_error()
                   4525: ** or sqlite3_result_error16() resets the error code to SQLITE_ERROR.
                   4526: **
                   4527: ** ^The sqlite3_result_toobig() interface causes SQLite to throw an error
                   4528: ** indicating that a string or BLOB is too long to represent.
                   4529: **
                   4530: ** ^The sqlite3_result_nomem() interface causes SQLite to throw an error
                   4531: ** indicating that a memory allocation failed.
                   4532: **
                   4533: ** ^The sqlite3_result_int() interface sets the return value
                   4534: ** of the application-defined function to be the 32-bit signed integer
                   4535: ** value given in the 2nd argument.
                   4536: ** ^The sqlite3_result_int64() interface sets the return value
                   4537: ** of the application-defined function to be the 64-bit signed integer
                   4538: ** value given in the 2nd argument.
                   4539: **
                   4540: ** ^The sqlite3_result_null() interface sets the return value
                   4541: ** of the application-defined function to be NULL.
                   4542: **
                   4543: ** ^The sqlite3_result_text(), sqlite3_result_text16(),
                   4544: ** sqlite3_result_text16le(), and sqlite3_result_text16be() interfaces
                   4545: ** set the return value of the application-defined function to be
                   4546: ** a text string which is represented as UTF-8, UTF-16 native byte order,
                   4547: ** UTF-16 little endian, or UTF-16 big endian, respectively.
                   4548: ** ^SQLite takes the text result from the application from
                   4549: ** the 2nd parameter of the sqlite3_result_text* interfaces.
                   4550: ** ^If the 3rd parameter to the sqlite3_result_text* interfaces
                   4551: ** is negative, then SQLite takes result text from the 2nd parameter
                   4552: ** through the first zero character.
                   4553: ** ^If the 3rd parameter to the sqlite3_result_text* interfaces
                   4554: ** is non-negative, then as many bytes (not characters) of the text
                   4555: ** pointed to by the 2nd parameter are taken as the application-defined
                   4556: ** function result.
                   4557: ** ^If the 4th parameter to the sqlite3_result_text* interfaces
                   4558: ** or sqlite3_result_blob is a non-NULL pointer, then SQLite calls that
                   4559: ** function as the destructor on the text or BLOB result when it has
                   4560: ** finished using that result.
                   4561: ** ^If the 4th parameter to the sqlite3_result_text* interfaces or to
                   4562: ** sqlite3_result_blob is the special constant SQLITE_STATIC, then SQLite
                   4563: ** assumes that the text or BLOB result is in constant space and does not
                   4564: ** copy the content of the parameter nor call a destructor on the content
                   4565: ** when it has finished using that result.
                   4566: ** ^If the 4th parameter to the sqlite3_result_text* interfaces
                   4567: ** or sqlite3_result_blob is the special constant SQLITE_TRANSIENT
                   4568: ** then SQLite makes a copy of the result into space obtained from
                   4569: ** from [sqlite3_malloc()] before it returns.
                   4570: **
                   4571: ** ^The sqlite3_result_value() interface sets the result of
                   4572: ** the application-defined function to be a copy the
                   4573: ** [unprotected sqlite3_value] object specified by the 2nd parameter.  ^The
                   4574: ** sqlite3_result_value() interface makes a copy of the [sqlite3_value]
                   4575: ** so that the [sqlite3_value] specified in the parameter may change or
                   4576: ** be deallocated after sqlite3_result_value() returns without harm.
                   4577: ** ^A [protected sqlite3_value] object may always be used where an
                   4578: ** [unprotected sqlite3_value] object is required, so either
                   4579: ** kind of [sqlite3_value] object can be used with this interface.
                   4580: **
                   4581: ** If these routines are called from within the different thread
                   4582: ** than the one containing the application-defined function that received
                   4583: ** the [sqlite3_context] pointer, the results are undefined.
                   4584: */
                   4585: SQLITE_API void sqlite3_result_blob(sqlite3_context*, const void*, int, void(*)(void*));
                   4586: SQLITE_API void sqlite3_result_double(sqlite3_context*, double);
                   4587: SQLITE_API void sqlite3_result_error(sqlite3_context*, const char*, int);
                   4588: SQLITE_API void sqlite3_result_error16(sqlite3_context*, const void*, int);
                   4589: SQLITE_API void sqlite3_result_error_toobig(sqlite3_context*);
                   4590: SQLITE_API void sqlite3_result_error_nomem(sqlite3_context*);
                   4591: SQLITE_API void sqlite3_result_error_code(sqlite3_context*, int);
                   4592: SQLITE_API void sqlite3_result_int(sqlite3_context*, int);
                   4593: SQLITE_API void sqlite3_result_int64(sqlite3_context*, sqlite3_int64);
                   4594: SQLITE_API void sqlite3_result_null(sqlite3_context*);
                   4595: SQLITE_API void sqlite3_result_text(sqlite3_context*, const char*, int, void(*)(void*));
                   4596: SQLITE_API void sqlite3_result_text16(sqlite3_context*, const void*, int, void(*)(void*));
                   4597: SQLITE_API void sqlite3_result_text16le(sqlite3_context*, const void*, int,void(*)(void*));
                   4598: SQLITE_API void sqlite3_result_text16be(sqlite3_context*, const void*, int,void(*)(void*));
                   4599: SQLITE_API void sqlite3_result_value(sqlite3_context*, sqlite3_value*);
                   4600: SQLITE_API void sqlite3_result_zeroblob(sqlite3_context*, int n);
                   4601: 
                   4602: /*
                   4603: ** CAPI3REF: Define New Collating Sequences
                   4604: **
                   4605: ** ^These functions add, remove, or modify a [collation] associated
                   4606: ** with the [database connection] specified as the first argument.
                   4607: **
                   4608: ** ^The name of the collation is a UTF-8 string
                   4609: ** for sqlite3_create_collation() and sqlite3_create_collation_v2()
                   4610: ** and a UTF-16 string in native byte order for sqlite3_create_collation16().
                   4611: ** ^Collation names that compare equal according to [sqlite3_strnicmp()] are
                   4612: ** considered to be the same name.
                   4613: **
                   4614: ** ^(The third argument (eTextRep) must be one of the constants:
                   4615: ** <ul>
                   4616: ** <li> [SQLITE_UTF8],
                   4617: ** <li> [SQLITE_UTF16LE],
                   4618: ** <li> [SQLITE_UTF16BE],
                   4619: ** <li> [SQLITE_UTF16], or
                   4620: ** <li> [SQLITE_UTF16_ALIGNED].
                   4621: ** </ul>)^
                   4622: ** ^The eTextRep argument determines the encoding of strings passed
                   4623: ** to the collating function callback, xCallback.
                   4624: ** ^The [SQLITE_UTF16] and [SQLITE_UTF16_ALIGNED] values for eTextRep
                   4625: ** force strings to be UTF16 with native byte order.
                   4626: ** ^The [SQLITE_UTF16_ALIGNED] value for eTextRep forces strings to begin
                   4627: ** on an even byte address.
                   4628: **
                   4629: ** ^The fourth argument, pArg, is an application data pointer that is passed
                   4630: ** through as the first argument to the collating function callback.
                   4631: **
                   4632: ** ^The fifth argument, xCallback, is a pointer to the collating function.
                   4633: ** ^Multiple collating functions can be registered using the same name but
                   4634: ** with different eTextRep parameters and SQLite will use whichever
                   4635: ** function requires the least amount of data transformation.
                   4636: ** ^If the xCallback argument is NULL then the collating function is
                   4637: ** deleted.  ^When all collating functions having the same name are deleted,
                   4638: ** that collation is no longer usable.
                   4639: **
                   4640: ** ^The collating function callback is invoked with a copy of the pArg 
                   4641: ** application data pointer and with two strings in the encoding specified
                   4642: ** by the eTextRep argument.  The collating function must return an
                   4643: ** integer that is negative, zero, or positive
                   4644: ** if the first string is less than, equal to, or greater than the second,
                   4645: ** respectively.  A collating function must always return the same answer
                   4646: ** given the same inputs.  If two or more collating functions are registered
                   4647: ** to the same collation name (using different eTextRep values) then all
                   4648: ** must give an equivalent answer when invoked with equivalent strings.
                   4649: ** The collating function must obey the following properties for all
                   4650: ** strings A, B, and C:
                   4651: **
                   4652: ** <ol>
                   4653: ** <li> If A==B then B==A.
                   4654: ** <li> If A==B and B==C then A==C.
                   4655: ** <li> If A&lt;B THEN B&gt;A.
                   4656: ** <li> If A&lt;B and B&lt;C then A&lt;C.
                   4657: ** </ol>
                   4658: **
                   4659: ** If a collating function fails any of the above constraints and that
                   4660: ** collating function is  registered and used, then the behavior of SQLite
                   4661: ** is undefined.
                   4662: **
                   4663: ** ^The sqlite3_create_collation_v2() works like sqlite3_create_collation()
                   4664: ** with the addition that the xDestroy callback is invoked on pArg when
                   4665: ** the collating function is deleted.
                   4666: ** ^Collating functions are deleted when they are overridden by later
                   4667: ** calls to the collation creation functions or when the
                   4668: ** [database connection] is closed using [sqlite3_close()].
                   4669: **
                   4670: ** ^The xDestroy callback is <u>not</u> called if the 
                   4671: ** sqlite3_create_collation_v2() function fails.  Applications that invoke
                   4672: ** sqlite3_create_collation_v2() with a non-NULL xDestroy argument should 
                   4673: ** check the return code and dispose of the application data pointer
                   4674: ** themselves rather than expecting SQLite to deal with it for them.
                   4675: ** This is different from every other SQLite interface.  The inconsistency 
                   4676: ** is unfortunate but cannot be changed without breaking backwards 
                   4677: ** compatibility.
                   4678: **
                   4679: ** See also:  [sqlite3_collation_needed()] and [sqlite3_collation_needed16()].
                   4680: */
                   4681: SQLITE_API int sqlite3_create_collation(
                   4682:   sqlite3*, 
                   4683:   const char *zName, 
                   4684:   int eTextRep, 
                   4685:   void *pArg,
                   4686:   int(*xCompare)(void*,int,const void*,int,const void*)
                   4687: );
                   4688: SQLITE_API int sqlite3_create_collation_v2(
                   4689:   sqlite3*, 
                   4690:   const char *zName, 
                   4691:   int eTextRep, 
                   4692:   void *pArg,
                   4693:   int(*xCompare)(void*,int,const void*,int,const void*),
                   4694:   void(*xDestroy)(void*)
                   4695: );
                   4696: SQLITE_API int sqlite3_create_collation16(
                   4697:   sqlite3*, 
                   4698:   const void *zName,
                   4699:   int eTextRep, 
                   4700:   void *pArg,
                   4701:   int(*xCompare)(void*,int,const void*,int,const void*)
                   4702: );
                   4703: 
                   4704: /*
                   4705: ** CAPI3REF: Collation Needed Callbacks
                   4706: **
                   4707: ** ^To avoid having to register all collation sequences before a database
                   4708: ** can be used, a single callback function may be registered with the
                   4709: ** [database connection] to be invoked whenever an undefined collation
                   4710: ** sequence is required.
                   4711: **
                   4712: ** ^If the function is registered using the sqlite3_collation_needed() API,
                   4713: ** then it is passed the names of undefined collation sequences as strings
                   4714: ** encoded in UTF-8. ^If sqlite3_collation_needed16() is used,
                   4715: ** the names are passed as UTF-16 in machine native byte order.
                   4716: ** ^A call to either function replaces the existing collation-needed callback.
                   4717: **
                   4718: ** ^(When the callback is invoked, the first argument passed is a copy
                   4719: ** of the second argument to sqlite3_collation_needed() or
                   4720: ** sqlite3_collation_needed16().  The second argument is the database
                   4721: ** connection.  The third argument is one of [SQLITE_UTF8], [SQLITE_UTF16BE],
                   4722: ** or [SQLITE_UTF16LE], indicating the most desirable form of the collation
                   4723: ** sequence function required.  The fourth parameter is the name of the
                   4724: ** required collation sequence.)^
                   4725: **
                   4726: ** The callback function should register the desired collation using
                   4727: ** [sqlite3_create_collation()], [sqlite3_create_collation16()], or
                   4728: ** [sqlite3_create_collation_v2()].
                   4729: */
                   4730: SQLITE_API int sqlite3_collation_needed(
                   4731:   sqlite3*, 
                   4732:   void*, 
                   4733:   void(*)(void*,sqlite3*,int eTextRep,const char*)
                   4734: );
                   4735: SQLITE_API int sqlite3_collation_needed16(
                   4736:   sqlite3*, 
                   4737:   void*,
                   4738:   void(*)(void*,sqlite3*,int eTextRep,const void*)
                   4739: );
                   4740: 
                   4741: #ifdef SQLITE_HAS_CODEC
                   4742: /*
                   4743: ** Specify the key for an encrypted database.  This routine should be
                   4744: ** called right after sqlite3_open().
                   4745: **
                   4746: ** The code to implement this API is not available in the public release
                   4747: ** of SQLite.
                   4748: */
                   4749: SQLITE_API int sqlite3_key(
                   4750:   sqlite3 *db,                   /* Database to be rekeyed */
                   4751:   const void *pKey, int nKey     /* The key */
                   4752: );
                   4753: 
                   4754: /*
                   4755: ** Change the key on an open database.  If the current database is not
                   4756: ** encrypted, this routine will encrypt it.  If pNew==0 or nNew==0, the
                   4757: ** database is decrypted.
                   4758: **
                   4759: ** The code to implement this API is not available in the public release
                   4760: ** of SQLite.
                   4761: */
                   4762: SQLITE_API int sqlite3_rekey(
                   4763:   sqlite3 *db,                   /* Database to be rekeyed */
                   4764:   const void *pKey, int nKey     /* The new key */
                   4765: );
                   4766: 
                   4767: /*
                   4768: ** Specify the activation key for a SEE database.  Unless 
                   4769: ** activated, none of the SEE routines will work.
                   4770: */
                   4771: SQLITE_API void sqlite3_activate_see(
                   4772:   const char *zPassPhrase        /* Activation phrase */
                   4773: );
                   4774: #endif
                   4775: 
                   4776: #ifdef SQLITE_ENABLE_CEROD
                   4777: /*
                   4778: ** Specify the activation key for a CEROD database.  Unless 
                   4779: ** activated, none of the CEROD routines will work.
                   4780: */
                   4781: SQLITE_API void sqlite3_activate_cerod(
                   4782:   const char *zPassPhrase        /* Activation phrase */
                   4783: );
                   4784: #endif
                   4785: 
                   4786: /*
                   4787: ** CAPI3REF: Suspend Execution For A Short Time
                   4788: **
                   4789: ** The sqlite3_sleep() function causes the current thread to suspend execution
                   4790: ** for at least a number of milliseconds specified in its parameter.
                   4791: **
                   4792: ** If the operating system does not support sleep requests with
                   4793: ** millisecond time resolution, then the time will be rounded up to
                   4794: ** the nearest second. The number of milliseconds of sleep actually
                   4795: ** requested from the operating system is returned.
                   4796: **
                   4797: ** ^SQLite implements this interface by calling the xSleep()
                   4798: ** method of the default [sqlite3_vfs] object.  If the xSleep() method
                   4799: ** of the default VFS is not implemented correctly, or not implemented at
                   4800: ** all, then the behavior of sqlite3_sleep() may deviate from the description
                   4801: ** in the previous paragraphs.
                   4802: */
                   4803: SQLITE_API int sqlite3_sleep(int);
                   4804: 
                   4805: /*
                   4806: ** CAPI3REF: Name Of The Folder Holding Temporary Files
                   4807: **
                   4808: ** ^(If this global variable is made to point to a string which is
                   4809: ** the name of a folder (a.k.a. directory), then all temporary files
                   4810: ** created by SQLite when using a built-in [sqlite3_vfs | VFS]
                   4811: ** will be placed in that directory.)^  ^If this variable
                   4812: ** is a NULL pointer, then SQLite performs a search for an appropriate
                   4813: ** temporary file directory.
                   4814: **
                   4815: ** It is not safe to read or modify this variable in more than one
                   4816: ** thread at a time.  It is not safe to read or modify this variable
                   4817: ** if a [database connection] is being used at the same time in a separate
                   4818: ** thread.
                   4819: ** It is intended that this variable be set once
                   4820: ** as part of process initialization and before any SQLite interface
                   4821: ** routines have been called and that this variable remain unchanged
                   4822: ** thereafter.
                   4823: **
                   4824: ** ^The [temp_store_directory pragma] may modify this variable and cause
                   4825: ** it to point to memory obtained from [sqlite3_malloc].  ^Furthermore,
                   4826: ** the [temp_store_directory pragma] always assumes that any string
                   4827: ** that this variable points to is held in memory obtained from 
                   4828: ** [sqlite3_malloc] and the pragma may attempt to free that memory
                   4829: ** using [sqlite3_free].
                   4830: ** Hence, if this variable is modified directly, either it should be
                   4831: ** made NULL or made to point to memory obtained from [sqlite3_malloc]
                   4832: ** or else the use of the [temp_store_directory pragma] should be avoided.
                   4833: */
                   4834: SQLITE_API char *sqlite3_temp_directory;
                   4835: 
                   4836: /*
                   4837: ** CAPI3REF: Test For Auto-Commit Mode
                   4838: ** KEYWORDS: {autocommit mode}
                   4839: **
                   4840: ** ^The sqlite3_get_autocommit() interface returns non-zero or
                   4841: ** zero if the given database connection is or is not in autocommit mode,
                   4842: ** respectively.  ^Autocommit mode is on by default.
                   4843: ** ^Autocommit mode is disabled by a [BEGIN] statement.
                   4844: ** ^Autocommit mode is re-enabled by a [COMMIT] or [ROLLBACK].
                   4845: **
                   4846: ** If certain kinds of errors occur on a statement within a multi-statement
                   4847: ** transaction (errors including [SQLITE_FULL], [SQLITE_IOERR],
                   4848: ** [SQLITE_NOMEM], [SQLITE_BUSY], and [SQLITE_INTERRUPT]) then the
                   4849: ** transaction might be rolled back automatically.  The only way to
                   4850: ** find out whether SQLite automatically rolled back the transaction after
                   4851: ** an error is to use this function.
                   4852: **
                   4853: ** If another thread changes the autocommit status of the database
                   4854: ** connection while this routine is running, then the return value
                   4855: ** is undefined.
                   4856: */
                   4857: SQLITE_API int sqlite3_get_autocommit(sqlite3*);
                   4858: 
                   4859: /*
                   4860: ** CAPI3REF: Find The Database Handle Of A Prepared Statement
                   4861: **
                   4862: ** ^The sqlite3_db_handle interface returns the [database connection] handle
                   4863: ** to which a [prepared statement] belongs.  ^The [database connection]
                   4864: ** returned by sqlite3_db_handle is the same [database connection]
                   4865: ** that was the first argument
                   4866: ** to the [sqlite3_prepare_v2()] call (or its variants) that was used to
                   4867: ** create the statement in the first place.
                   4868: */
                   4869: SQLITE_API sqlite3 *sqlite3_db_handle(sqlite3_stmt*);
                   4870: 
                   4871: /*
                   4872: ** CAPI3REF: Find the next prepared statement
                   4873: **
                   4874: ** ^This interface returns a pointer to the next [prepared statement] after
                   4875: ** pStmt associated with the [database connection] pDb.  ^If pStmt is NULL
                   4876: ** then this interface returns a pointer to the first prepared statement
                   4877: ** associated with the database connection pDb.  ^If no prepared statement
                   4878: ** satisfies the conditions of this routine, it returns NULL.
                   4879: **
                   4880: ** The [database connection] pointer D in a call to
                   4881: ** [sqlite3_next_stmt(D,S)] must refer to an open database
                   4882: ** connection and in particular must not be a NULL pointer.
                   4883: */
                   4884: SQLITE_API sqlite3_stmt *sqlite3_next_stmt(sqlite3 *pDb, sqlite3_stmt *pStmt);
                   4885: 
                   4886: /*
                   4887: ** CAPI3REF: Commit And Rollback Notification Callbacks
                   4888: **
                   4889: ** ^The sqlite3_commit_hook() interface registers a callback
                   4890: ** function to be invoked whenever a transaction is [COMMIT | committed].
                   4891: ** ^Any callback set by a previous call to sqlite3_commit_hook()
                   4892: ** for the same database connection is overridden.
                   4893: ** ^The sqlite3_rollback_hook() interface registers a callback
                   4894: ** function to be invoked whenever a transaction is [ROLLBACK | rolled back].
                   4895: ** ^Any callback set by a previous call to sqlite3_rollback_hook()
                   4896: ** for the same database connection is overridden.
                   4897: ** ^The pArg argument is passed through to the callback.
                   4898: ** ^If the callback on a commit hook function returns non-zero,
                   4899: ** then the commit is converted into a rollback.
                   4900: **
                   4901: ** ^The sqlite3_commit_hook(D,C,P) and sqlite3_rollback_hook(D,C,P) functions
                   4902: ** return the P argument from the previous call of the same function
                   4903: ** on the same [database connection] D, or NULL for
                   4904: ** the first call for each function on D.
                   4905: **
                   4906: ** The callback implementation must not do anything that will modify
                   4907: ** the database connection that invoked the callback.  Any actions
                   4908: ** to modify the database connection must be deferred until after the
                   4909: ** completion of the [sqlite3_step()] call that triggered the commit
                   4910: ** or rollback hook in the first place.
                   4911: ** Note that [sqlite3_prepare_v2()] and [sqlite3_step()] both modify their
                   4912: ** database connections for the meaning of "modify" in this paragraph.
                   4913: **
                   4914: ** ^Registering a NULL function disables the callback.
                   4915: **
                   4916: ** ^When the commit hook callback routine returns zero, the [COMMIT]
                   4917: ** operation is allowed to continue normally.  ^If the commit hook
                   4918: ** returns non-zero, then the [COMMIT] is converted into a [ROLLBACK].
                   4919: ** ^The rollback hook is invoked on a rollback that results from a commit
                   4920: ** hook returning non-zero, just as it would be with any other rollback.
                   4921: **
                   4922: ** ^For the purposes of this API, a transaction is said to have been
                   4923: ** rolled back if an explicit "ROLLBACK" statement is executed, or
                   4924: ** an error or constraint causes an implicit rollback to occur.
                   4925: ** ^The rollback callback is not invoked if a transaction is
                   4926: ** automatically rolled back because the database connection is closed.
                   4927: **
                   4928: ** See also the [sqlite3_update_hook()] interface.
                   4929: */
                   4930: SQLITE_API void *sqlite3_commit_hook(sqlite3*, int(*)(void*), void*);
                   4931: SQLITE_API void *sqlite3_rollback_hook(sqlite3*, void(*)(void *), void*);
                   4932: 
                   4933: /*
                   4934: ** CAPI3REF: Data Change Notification Callbacks
                   4935: **
                   4936: ** ^The sqlite3_update_hook() interface registers a callback function
                   4937: ** with the [database connection] identified by the first argument
                   4938: ** to be invoked whenever a row is updated, inserted or deleted.
                   4939: ** ^Any callback set by a previous call to this function
                   4940: ** for the same database connection is overridden.
                   4941: **
                   4942: ** ^The second argument is a pointer to the function to invoke when a
                   4943: ** row is updated, inserted or deleted.
                   4944: ** ^The first argument to the callback is a copy of the third argument
                   4945: ** to sqlite3_update_hook().
                   4946: ** ^The second callback argument is one of [SQLITE_INSERT], [SQLITE_DELETE],
                   4947: ** or [SQLITE_UPDATE], depending on the operation that caused the callback
                   4948: ** to be invoked.
                   4949: ** ^The third and fourth arguments to the callback contain pointers to the
                   4950: ** database and table name containing the affected row.
                   4951: ** ^The final callback parameter is the [rowid] of the row.
                   4952: ** ^In the case of an update, this is the [rowid] after the update takes place.
                   4953: **
                   4954: ** ^(The update hook is not invoked when internal system tables are
                   4955: ** modified (i.e. sqlite_master and sqlite_sequence).)^
                   4956: **
                   4957: ** ^In the current implementation, the update hook
                   4958: ** is not invoked when duplication rows are deleted because of an
                   4959: ** [ON CONFLICT | ON CONFLICT REPLACE] clause.  ^Nor is the update hook
                   4960: ** invoked when rows are deleted using the [truncate optimization].
                   4961: ** The exceptions defined in this paragraph might change in a future
                   4962: ** release of SQLite.
                   4963: **
                   4964: ** The update hook implementation must not do anything that will modify
                   4965: ** the database connection that invoked the update hook.  Any actions
                   4966: ** to modify the database connection must be deferred until after the
                   4967: ** completion of the [sqlite3_step()] call that triggered the update hook.
                   4968: ** Note that [sqlite3_prepare_v2()] and [sqlite3_step()] both modify their
                   4969: ** database connections for the meaning of "modify" in this paragraph.
                   4970: **
                   4971: ** ^The sqlite3_update_hook(D,C,P) function
                   4972: ** returns the P argument from the previous call
                   4973: ** on the same [database connection] D, or NULL for
                   4974: ** the first call on D.
                   4975: **
                   4976: ** See also the [sqlite3_commit_hook()] and [sqlite3_rollback_hook()]
                   4977: ** interfaces.
                   4978: */
                   4979: SQLITE_API void *sqlite3_update_hook(
                   4980:   sqlite3*, 
                   4981:   void(*)(void *,int ,char const *,char const *,sqlite3_int64),
                   4982:   void*
                   4983: );
                   4984: 
                   4985: /*
                   4986: ** CAPI3REF: Enable Or Disable Shared Pager Cache
                   4987: ** KEYWORDS: {shared cache}
                   4988: **
                   4989: ** ^(This routine enables or disables the sharing of the database cache
                   4990: ** and schema data structures between [database connection | connections]
                   4991: ** to the same database. Sharing is enabled if the argument is true
                   4992: ** and disabled if the argument is false.)^
                   4993: **
                   4994: ** ^Cache sharing is enabled and disabled for an entire process.
                   4995: ** This is a change as of SQLite version 3.5.0. In prior versions of SQLite,
                   4996: ** sharing was enabled or disabled for each thread separately.
                   4997: **
                   4998: ** ^(The cache sharing mode set by this interface effects all subsequent
                   4999: ** calls to [sqlite3_open()], [sqlite3_open_v2()], and [sqlite3_open16()].
                   5000: ** Existing database connections continue use the sharing mode
                   5001: ** that was in effect at the time they were opened.)^
                   5002: **
                   5003: ** ^(This routine returns [SQLITE_OK] if shared cache was enabled or disabled
                   5004: ** successfully.  An [error code] is returned otherwise.)^
                   5005: **
                   5006: ** ^Shared cache is disabled by default. But this might change in
                   5007: ** future releases of SQLite.  Applications that care about shared
                   5008: ** cache setting should set it explicitly.
                   5009: **
                   5010: ** See Also:  [SQLite Shared-Cache Mode]
                   5011: */
                   5012: SQLITE_API int sqlite3_enable_shared_cache(int);
                   5013: 
                   5014: /*
                   5015: ** CAPI3REF: Attempt To Free Heap Memory
                   5016: **
                   5017: ** ^The sqlite3_release_memory() interface attempts to free N bytes
                   5018: ** of heap memory by deallocating non-essential memory allocations
                   5019: ** held by the database library.   Memory used to cache database
                   5020: ** pages to improve performance is an example of non-essential memory.
                   5021: ** ^sqlite3_release_memory() returns the number of bytes actually freed,
                   5022: ** which might be more or less than the amount requested.
                   5023: ** ^The sqlite3_release_memory() routine is a no-op returning zero
                   5024: ** if SQLite is not compiled with [SQLITE_ENABLE_MEMORY_MANAGEMENT].
                   5025: */
                   5026: SQLITE_API int sqlite3_release_memory(int);
                   5027: 
                   5028: /*
                   5029: ** CAPI3REF: Impose A Limit On Heap Size
                   5030: **
                   5031: ** ^The sqlite3_soft_heap_limit64() interface sets and/or queries the
                   5032: ** soft limit on the amount of heap memory that may be allocated by SQLite.
                   5033: ** ^SQLite strives to keep heap memory utilization below the soft heap
                   5034: ** limit by reducing the number of pages held in the page cache
                   5035: ** as heap memory usages approaches the limit.
                   5036: ** ^The soft heap limit is "soft" because even though SQLite strives to stay
                   5037: ** below the limit, it will exceed the limit rather than generate
                   5038: ** an [SQLITE_NOMEM] error.  In other words, the soft heap limit 
                   5039: ** is advisory only.
                   5040: **
                   5041: ** ^The return value from sqlite3_soft_heap_limit64() is the size of
                   5042: ** the soft heap limit prior to the call.  ^If the argument N is negative
                   5043: ** then no change is made to the soft heap limit.  Hence, the current
                   5044: ** size of the soft heap limit can be determined by invoking
                   5045: ** sqlite3_soft_heap_limit64() with a negative argument.
                   5046: **
                   5047: ** ^If the argument N is zero then the soft heap limit is disabled.
                   5048: **
                   5049: ** ^(The soft heap limit is not enforced in the current implementation
                   5050: ** if one or more of following conditions are true:
                   5051: **
                   5052: ** <ul>
                   5053: ** <li> The soft heap limit is set to zero.
                   5054: ** <li> Memory accounting is disabled using a combination of the
                   5055: **      [sqlite3_config]([SQLITE_CONFIG_MEMSTATUS],...) start-time option and
                   5056: **      the [SQLITE_DEFAULT_MEMSTATUS] compile-time option.
                   5057: ** <li> An alternative page cache implementation is specified using
                   5058: **      [sqlite3_config]([SQLITE_CONFIG_PCACHE],...).
                   5059: ** <li> The page cache allocates from its own memory pool supplied
                   5060: **      by [sqlite3_config]([SQLITE_CONFIG_PAGECACHE],...) rather than
                   5061: **      from the heap.
                   5062: ** </ul>)^
                   5063: **
                   5064: ** Beginning with SQLite version 3.7.3, the soft heap limit is enforced
                   5065: ** regardless of whether or not the [SQLITE_ENABLE_MEMORY_MANAGEMENT]
                   5066: ** compile-time option is invoked.  With [SQLITE_ENABLE_MEMORY_MANAGEMENT],
                   5067: ** the soft heap limit is enforced on every memory allocation.  Without
                   5068: ** [SQLITE_ENABLE_MEMORY_MANAGEMENT], the soft heap limit is only enforced
                   5069: ** when memory is allocated by the page cache.  Testing suggests that because
                   5070: ** the page cache is the predominate memory user in SQLite, most
                   5071: ** applications will achieve adequate soft heap limit enforcement without
                   5072: ** the use of [SQLITE_ENABLE_MEMORY_MANAGEMENT].
                   5073: **
                   5074: ** The circumstances under which SQLite will enforce the soft heap limit may
                   5075: ** changes in future releases of SQLite.
                   5076: */
                   5077: SQLITE_API sqlite3_int64 sqlite3_soft_heap_limit64(sqlite3_int64 N);
                   5078: 
                   5079: /*
                   5080: ** CAPI3REF: Deprecated Soft Heap Limit Interface
                   5081: ** DEPRECATED
                   5082: **
                   5083: ** This is a deprecated version of the [sqlite3_soft_heap_limit64()]
                   5084: ** interface.  This routine is provided for historical compatibility
                   5085: ** only.  All new applications should use the
                   5086: ** [sqlite3_soft_heap_limit64()] interface rather than this one.
                   5087: */
                   5088: SQLITE_API SQLITE_DEPRECATED void sqlite3_soft_heap_limit(int N);
                   5089: 
                   5090: 
                   5091: /*
                   5092: ** CAPI3REF: Extract Metadata About A Column Of A Table
                   5093: **
                   5094: ** ^This routine returns metadata about a specific column of a specific
                   5095: ** database table accessible using the [database connection] handle
                   5096: ** passed as the first function argument.
                   5097: **
                   5098: ** ^The column is identified by the second, third and fourth parameters to
                   5099: ** this function. ^The second parameter is either the name of the database
                   5100: ** (i.e. "main", "temp", or an attached database) containing the specified
                   5101: ** table or NULL. ^If it is NULL, then all attached databases are searched
                   5102: ** for the table using the same algorithm used by the database engine to
                   5103: ** resolve unqualified table references.
                   5104: **
                   5105: ** ^The third and fourth parameters to this function are the table and column
                   5106: ** name of the desired column, respectively. Neither of these parameters
                   5107: ** may be NULL.
                   5108: **
                   5109: ** ^Metadata is returned by writing to the memory locations passed as the 5th
                   5110: ** and subsequent parameters to this function. ^Any of these arguments may be
                   5111: ** NULL, in which case the corresponding element of metadata is omitted.
                   5112: **
                   5113: ** ^(<blockquote>
                   5114: ** <table border="1">
                   5115: ** <tr><th> Parameter <th> Output<br>Type <th>  Description
                   5116: **
                   5117: ** <tr><td> 5th <td> const char* <td> Data type
                   5118: ** <tr><td> 6th <td> const char* <td> Name of default collation sequence
                   5119: ** <tr><td> 7th <td> int         <td> True if column has a NOT NULL constraint
                   5120: ** <tr><td> 8th <td> int         <td> True if column is part of the PRIMARY KEY
                   5121: ** <tr><td> 9th <td> int         <td> True if column is [AUTOINCREMENT]
                   5122: ** </table>
                   5123: ** </blockquote>)^
                   5124: **
                   5125: ** ^The memory pointed to by the character pointers returned for the
                   5126: ** declaration type and collation sequence is valid only until the next
                   5127: ** call to any SQLite API function.
                   5128: **
                   5129: ** ^If the specified table is actually a view, an [error code] is returned.
                   5130: **
                   5131: ** ^If the specified column is "rowid", "oid" or "_rowid_" and an
                   5132: ** [INTEGER PRIMARY KEY] column has been explicitly declared, then the output
                   5133: ** parameters are set for the explicitly declared column. ^(If there is no
                   5134: ** explicitly declared [INTEGER PRIMARY KEY] column, then the output
                   5135: ** parameters are set as follows:
                   5136: **
                   5137: ** <pre>
                   5138: **     data type: "INTEGER"
                   5139: **     collation sequence: "BINARY"
                   5140: **     not null: 0
                   5141: **     primary key: 1
                   5142: **     auto increment: 0
                   5143: ** </pre>)^
                   5144: **
                   5145: ** ^(This function may load one or more schemas from database files. If an
                   5146: ** error occurs during this process, or if the requested table or column
                   5147: ** cannot be found, an [error code] is returned and an error message left
                   5148: ** in the [database connection] (to be retrieved using sqlite3_errmsg()).)^
                   5149: **
                   5150: ** ^This API is only available if the library was compiled with the
                   5151: ** [SQLITE_ENABLE_COLUMN_METADATA] C-preprocessor symbol defined.
                   5152: */
                   5153: SQLITE_API int sqlite3_table_column_metadata(
                   5154:   sqlite3 *db,                /* Connection handle */
                   5155:   const char *zDbName,        /* Database name or NULL */
                   5156:   const char *zTableName,     /* Table name */
                   5157:   const char *zColumnName,    /* Column name */
                   5158:   char const **pzDataType,    /* OUTPUT: Declared data type */
                   5159:   char const **pzCollSeq,     /* OUTPUT: Collation sequence name */
                   5160:   int *pNotNull,              /* OUTPUT: True if NOT NULL constraint exists */
                   5161:   int *pPrimaryKey,           /* OUTPUT: True if column part of PK */
                   5162:   int *pAutoinc               /* OUTPUT: True if column is auto-increment */
                   5163: );
                   5164: 
                   5165: /*
                   5166: ** CAPI3REF: Load An Extension
                   5167: **
                   5168: ** ^This interface loads an SQLite extension library from the named file.
                   5169: **
                   5170: ** ^The sqlite3_load_extension() interface attempts to load an
                   5171: ** SQLite extension library contained in the file zFile.
                   5172: **
                   5173: ** ^The entry point is zProc.
                   5174: ** ^zProc may be 0, in which case the name of the entry point
                   5175: ** defaults to "sqlite3_extension_init".
                   5176: ** ^The sqlite3_load_extension() interface returns
                   5177: ** [SQLITE_OK] on success and [SQLITE_ERROR] if something goes wrong.
                   5178: ** ^If an error occurs and pzErrMsg is not 0, then the
                   5179: ** [sqlite3_load_extension()] interface shall attempt to
                   5180: ** fill *pzErrMsg with error message text stored in memory
                   5181: ** obtained from [sqlite3_malloc()]. The calling function
                   5182: ** should free this memory by calling [sqlite3_free()].
                   5183: **
                   5184: ** ^Extension loading must be enabled using
                   5185: ** [sqlite3_enable_load_extension()] prior to calling this API,
                   5186: ** otherwise an error will be returned.
                   5187: **
                   5188: ** See also the [load_extension() SQL function].
                   5189: */
                   5190: SQLITE_API int sqlite3_load_extension(
                   5191:   sqlite3 *db,          /* Load the extension into this database connection */
                   5192:   const char *zFile,    /* Name of the shared library containing extension */
                   5193:   const char *zProc,    /* Entry point.  Derived from zFile if 0 */
                   5194:   char **pzErrMsg       /* Put error message here if not 0 */
                   5195: );
                   5196: 
                   5197: /*
                   5198: ** CAPI3REF: Enable Or Disable Extension Loading
                   5199: **
                   5200: ** ^So as not to open security holes in older applications that are
                   5201: ** unprepared to deal with extension loading, and as a means of disabling
                   5202: ** extension loading while evaluating user-entered SQL, the following API
                   5203: ** is provided to turn the [sqlite3_load_extension()] mechanism on and off.
                   5204: **
                   5205: ** ^Extension loading is off by default. See ticket #1863.
                   5206: ** ^Call the sqlite3_enable_load_extension() routine with onoff==1
                   5207: ** to turn extension loading on and call it with onoff==0 to turn
                   5208: ** it back off again.
                   5209: */
                   5210: SQLITE_API int sqlite3_enable_load_extension(sqlite3 *db, int onoff);
                   5211: 
                   5212: /*
                   5213: ** CAPI3REF: Automatically Load Statically Linked Extensions
                   5214: **
                   5215: ** ^This interface causes the xEntryPoint() function to be invoked for
                   5216: ** each new [database connection] that is created.  The idea here is that
                   5217: ** xEntryPoint() is the entry point for a statically linked SQLite extension
                   5218: ** that is to be automatically loaded into all new database connections.
                   5219: **
                   5220: ** ^(Even though the function prototype shows that xEntryPoint() takes
                   5221: ** no arguments and returns void, SQLite invokes xEntryPoint() with three
                   5222: ** arguments and expects and integer result as if the signature of the
                   5223: ** entry point where as follows:
                   5224: **
                   5225: ** <blockquote><pre>
                   5226: ** &nbsp;  int xEntryPoint(
                   5227: ** &nbsp;    sqlite3 *db,
                   5228: ** &nbsp;    const char **pzErrMsg,
                   5229: ** &nbsp;    const struct sqlite3_api_routines *pThunk
                   5230: ** &nbsp;  );
                   5231: ** </pre></blockquote>)^
                   5232: **
                   5233: ** If the xEntryPoint routine encounters an error, it should make *pzErrMsg
                   5234: ** point to an appropriate error message (obtained from [sqlite3_mprintf()])
                   5235: ** and return an appropriate [error code].  ^SQLite ensures that *pzErrMsg
                   5236: ** is NULL before calling the xEntryPoint().  ^SQLite will invoke
                   5237: ** [sqlite3_free()] on *pzErrMsg after xEntryPoint() returns.  ^If any
                   5238: ** xEntryPoint() returns an error, the [sqlite3_open()], [sqlite3_open16()],
                   5239: ** or [sqlite3_open_v2()] call that provoked the xEntryPoint() will fail.
                   5240: **
                   5241: ** ^Calling sqlite3_auto_extension(X) with an entry point X that is already
                   5242: ** on the list of automatic extensions is a harmless no-op. ^No entry point
                   5243: ** will be called more than once for each database connection that is opened.
                   5244: **
                   5245: ** See also: [sqlite3_reset_auto_extension()].
                   5246: */
                   5247: SQLITE_API int sqlite3_auto_extension(void (*xEntryPoint)(void));
                   5248: 
                   5249: /*
                   5250: ** CAPI3REF: Reset Automatic Extension Loading
                   5251: **
                   5252: ** ^This interface disables all automatic extensions previously
                   5253: ** registered using [sqlite3_auto_extension()].
                   5254: */
                   5255: SQLITE_API void sqlite3_reset_auto_extension(void);
                   5256: 
                   5257: /*
                   5258: ** The interface to the virtual-table mechanism is currently considered
                   5259: ** to be experimental.  The interface might change in incompatible ways.
                   5260: ** If this is a problem for you, do not use the interface at this time.
                   5261: **
                   5262: ** When the virtual-table mechanism stabilizes, we will declare the
                   5263: ** interface fixed, support it indefinitely, and remove this comment.
                   5264: */
                   5265: 
                   5266: /*
                   5267: ** Structures used by the virtual table interface
                   5268: */
                   5269: typedef struct sqlite3_vtab sqlite3_vtab;
                   5270: typedef struct sqlite3_index_info sqlite3_index_info;
                   5271: typedef struct sqlite3_vtab_cursor sqlite3_vtab_cursor;
                   5272: typedef struct sqlite3_module sqlite3_module;
                   5273: 
                   5274: /*
                   5275: ** CAPI3REF: Virtual Table Object
                   5276: ** KEYWORDS: sqlite3_module {virtual table module}
                   5277: **
                   5278: ** This structure, sometimes called a "virtual table module", 
                   5279: ** defines the implementation of a [virtual tables].  
                   5280: ** This structure consists mostly of methods for the module.
                   5281: **
                   5282: ** ^A virtual table module is created by filling in a persistent
                   5283: ** instance of this structure and passing a pointer to that instance
                   5284: ** to [sqlite3_create_module()] or [sqlite3_create_module_v2()].
                   5285: ** ^The registration remains valid until it is replaced by a different
                   5286: ** module or until the [database connection] closes.  The content
                   5287: ** of this structure must not change while it is registered with
                   5288: ** any database connection.
                   5289: */
                   5290: struct sqlite3_module {
                   5291:   int iVersion;
                   5292:   int (*xCreate)(sqlite3*, void *pAux,
                   5293:                int argc, const char *const*argv,
                   5294:                sqlite3_vtab **ppVTab, char**);
                   5295:   int (*xConnect)(sqlite3*, void *pAux,
                   5296:                int argc, const char *const*argv,
                   5297:                sqlite3_vtab **ppVTab, char**);
                   5298:   int (*xBestIndex)(sqlite3_vtab *pVTab, sqlite3_index_info*);
                   5299:   int (*xDisconnect)(sqlite3_vtab *pVTab);
                   5300:   int (*xDestroy)(sqlite3_vtab *pVTab);
                   5301:   int (*xOpen)(sqlite3_vtab *pVTab, sqlite3_vtab_cursor **ppCursor);
                   5302:   int (*xClose)(sqlite3_vtab_cursor*);
                   5303:   int (*xFilter)(sqlite3_vtab_cursor*, int idxNum, const char *idxStr,
                   5304:                 int argc, sqlite3_value **argv);
                   5305:   int (*xNext)(sqlite3_vtab_cursor*);
                   5306:   int (*xEof)(sqlite3_vtab_cursor*);
                   5307:   int (*xColumn)(sqlite3_vtab_cursor*, sqlite3_context*, int);
                   5308:   int (*xRowid)(sqlite3_vtab_cursor*, sqlite3_int64 *pRowid);
                   5309:   int (*xUpdate)(sqlite3_vtab *, int, sqlite3_value **, sqlite3_int64 *);
                   5310:   int (*xBegin)(sqlite3_vtab *pVTab);
                   5311:   int (*xSync)(sqlite3_vtab *pVTab);
                   5312:   int (*xCommit)(sqlite3_vtab *pVTab);
                   5313:   int (*xRollback)(sqlite3_vtab *pVTab);
                   5314:   int (*xFindFunction)(sqlite3_vtab *pVtab, int nArg, const char *zName,
                   5315:                        void (**pxFunc)(sqlite3_context*,int,sqlite3_value**),
                   5316:                        void **ppArg);
                   5317:   int (*xRename)(sqlite3_vtab *pVtab, const char *zNew);
                   5318:   /* The methods above are in version 1 of the sqlite_module object. Those 
                   5319:   ** below are for version 2 and greater. */
                   5320:   int (*xSavepoint)(sqlite3_vtab *pVTab, int);
                   5321:   int (*xRelease)(sqlite3_vtab *pVTab, int);
                   5322:   int (*xRollbackTo)(sqlite3_vtab *pVTab, int);
                   5323: };
                   5324: 
                   5325: /*
                   5326: ** CAPI3REF: Virtual Table Indexing Information
                   5327: ** KEYWORDS: sqlite3_index_info
                   5328: **
                   5329: ** The sqlite3_index_info structure and its substructures is used as part
                   5330: ** of the [virtual table] interface to
                   5331: ** pass information into and receive the reply from the [xBestIndex]
                   5332: ** method of a [virtual table module].  The fields under **Inputs** are the
                   5333: ** inputs to xBestIndex and are read-only.  xBestIndex inserts its
                   5334: ** results into the **Outputs** fields.
                   5335: **
                   5336: ** ^(The aConstraint[] array records WHERE clause constraints of the form:
                   5337: **
                   5338: ** <blockquote>column OP expr</blockquote>
                   5339: **
                   5340: ** where OP is =, &lt;, &lt;=, &gt;, or &gt;=.)^  ^(The particular operator is
                   5341: ** stored in aConstraint[].op using one of the
                   5342: ** [SQLITE_INDEX_CONSTRAINT_EQ | SQLITE_INDEX_CONSTRAINT_ values].)^
                   5343: ** ^(The index of the column is stored in
                   5344: ** aConstraint[].iColumn.)^  ^(aConstraint[].usable is TRUE if the
                   5345: ** expr on the right-hand side can be evaluated (and thus the constraint
                   5346: ** is usable) and false if it cannot.)^
                   5347: **
                   5348: ** ^The optimizer automatically inverts terms of the form "expr OP column"
                   5349: ** and makes other simplifications to the WHERE clause in an attempt to
                   5350: ** get as many WHERE clause terms into the form shown above as possible.
                   5351: ** ^The aConstraint[] array only reports WHERE clause terms that are
                   5352: ** relevant to the particular virtual table being queried.
                   5353: **
                   5354: ** ^Information about the ORDER BY clause is stored in aOrderBy[].
                   5355: ** ^Each term of aOrderBy records a column of the ORDER BY clause.
                   5356: **
                   5357: ** The [xBestIndex] method must fill aConstraintUsage[] with information
                   5358: ** about what parameters to pass to xFilter.  ^If argvIndex>0 then
                   5359: ** the right-hand side of the corresponding aConstraint[] is evaluated
                   5360: ** and becomes the argvIndex-th entry in argv.  ^(If aConstraintUsage[].omit
                   5361: ** is true, then the constraint is assumed to be fully handled by the
                   5362: ** virtual table and is not checked again by SQLite.)^
                   5363: **
                   5364: ** ^The idxNum and idxPtr values are recorded and passed into the
                   5365: ** [xFilter] method.
                   5366: ** ^[sqlite3_free()] is used to free idxPtr if and only if
                   5367: ** needToFreeIdxPtr is true.
                   5368: **
                   5369: ** ^The orderByConsumed means that output from [xFilter]/[xNext] will occur in
                   5370: ** the correct order to satisfy the ORDER BY clause so that no separate
                   5371: ** sorting step is required.
                   5372: **
                   5373: ** ^The estimatedCost value is an estimate of the cost of doing the
                   5374: ** particular lookup.  A full scan of a table with N entries should have
                   5375: ** a cost of N.  A binary search of a table of N entries should have a
                   5376: ** cost of approximately log(N).
                   5377: */
                   5378: struct sqlite3_index_info {
                   5379:   /* Inputs */
                   5380:   int nConstraint;           /* Number of entries in aConstraint */
                   5381:   struct sqlite3_index_constraint {
                   5382:      int iColumn;              /* Column on left-hand side of constraint */
                   5383:      unsigned char op;         /* Constraint operator */
                   5384:      unsigned char usable;     /* True if this constraint is usable */
                   5385:      int iTermOffset;          /* Used internally - xBestIndex should ignore */
                   5386:   } *aConstraint;            /* Table of WHERE clause constraints */
                   5387:   int nOrderBy;              /* Number of terms in the ORDER BY clause */
                   5388:   struct sqlite3_index_orderby {
                   5389:      int iColumn;              /* Column number */
                   5390:      unsigned char desc;       /* True for DESC.  False for ASC. */
                   5391:   } *aOrderBy;               /* The ORDER BY clause */
                   5392:   /* Outputs */
                   5393:   struct sqlite3_index_constraint_usage {
                   5394:     int argvIndex;           /* if >0, constraint is part of argv to xFilter */
                   5395:     unsigned char omit;      /* Do not code a test for this constraint */
                   5396:   } *aConstraintUsage;
                   5397:   int idxNum;                /* Number used to identify the index */
                   5398:   char *idxStr;              /* String, possibly obtained from sqlite3_malloc */
                   5399:   int needToFreeIdxStr;      /* Free idxStr using sqlite3_free() if true */
                   5400:   int orderByConsumed;       /* True if output is already ordered */
                   5401:   double estimatedCost;      /* Estimated cost of using this index */
                   5402: };
                   5403: 
                   5404: /*
                   5405: ** CAPI3REF: Virtual Table Constraint Operator Codes
                   5406: **
                   5407: ** These macros defined the allowed values for the
                   5408: ** [sqlite3_index_info].aConstraint[].op field.  Each value represents
                   5409: ** an operator that is part of a constraint term in the wHERE clause of
                   5410: ** a query that uses a [virtual table].
                   5411: */
                   5412: #define SQLITE_INDEX_CONSTRAINT_EQ    2
                   5413: #define SQLITE_INDEX_CONSTRAINT_GT    4
                   5414: #define SQLITE_INDEX_CONSTRAINT_LE    8
                   5415: #define SQLITE_INDEX_CONSTRAINT_LT    16
                   5416: #define SQLITE_INDEX_CONSTRAINT_GE    32
                   5417: #define SQLITE_INDEX_CONSTRAINT_MATCH 64
                   5418: 
                   5419: /*
                   5420: ** CAPI3REF: Register A Virtual Table Implementation
                   5421: **
                   5422: ** ^These routines are used to register a new [virtual table module] name.
                   5423: ** ^Module names must be registered before
                   5424: ** creating a new [virtual table] using the module and before using a
                   5425: ** preexisting [virtual table] for the module.
                   5426: **
                   5427: ** ^The module name is registered on the [database connection] specified
                   5428: ** by the first parameter.  ^The name of the module is given by the 
                   5429: ** second parameter.  ^The third parameter is a pointer to
                   5430: ** the implementation of the [virtual table module].   ^The fourth
                   5431: ** parameter is an arbitrary client data pointer that is passed through
                   5432: ** into the [xCreate] and [xConnect] methods of the virtual table module
                   5433: ** when a new virtual table is be being created or reinitialized.
                   5434: **
                   5435: ** ^The sqlite3_create_module_v2() interface has a fifth parameter which
                   5436: ** is a pointer to a destructor for the pClientData.  ^SQLite will
                   5437: ** invoke the destructor function (if it is not NULL) when SQLite
                   5438: ** no longer needs the pClientData pointer.  ^The destructor will also
                   5439: ** be invoked if the call to sqlite3_create_module_v2() fails.
                   5440: ** ^The sqlite3_create_module()
                   5441: ** interface is equivalent to sqlite3_create_module_v2() with a NULL
                   5442: ** destructor.
                   5443: */
                   5444: SQLITE_API int sqlite3_create_module(
                   5445:   sqlite3 *db,               /* SQLite connection to register module with */
                   5446:   const char *zName,         /* Name of the module */
                   5447:   const sqlite3_module *p,   /* Methods for the module */
                   5448:   void *pClientData          /* Client data for xCreate/xConnect */
                   5449: );
                   5450: SQLITE_API int sqlite3_create_module_v2(
                   5451:   sqlite3 *db,               /* SQLite connection to register module with */
                   5452:   const char *zName,         /* Name of the module */
                   5453:   const sqlite3_module *p,   /* Methods for the module */
                   5454:   void *pClientData,         /* Client data for xCreate/xConnect */
                   5455:   void(*xDestroy)(void*)     /* Module destructor function */
                   5456: );
                   5457: 
                   5458: /*
                   5459: ** CAPI3REF: Virtual Table Instance Object
                   5460: ** KEYWORDS: sqlite3_vtab
                   5461: **
                   5462: ** Every [virtual table module] implementation uses a subclass
                   5463: ** of this object to describe a particular instance
                   5464: ** of the [virtual table].  Each subclass will
                   5465: ** be tailored to the specific needs of the module implementation.
                   5466: ** The purpose of this superclass is to define certain fields that are
                   5467: ** common to all module implementations.
                   5468: **
                   5469: ** ^Virtual tables methods can set an error message by assigning a
                   5470: ** string obtained from [sqlite3_mprintf()] to zErrMsg.  The method should
                   5471: ** take care that any prior string is freed by a call to [sqlite3_free()]
                   5472: ** prior to assigning a new string to zErrMsg.  ^After the error message
                   5473: ** is delivered up to the client application, the string will be automatically
                   5474: ** freed by sqlite3_free() and the zErrMsg field will be zeroed.
                   5475: */
                   5476: struct sqlite3_vtab {
                   5477:   const sqlite3_module *pModule;  /* The module for this virtual table */
                   5478:   int nRef;                       /* NO LONGER USED */
                   5479:   char *zErrMsg;                  /* Error message from sqlite3_mprintf() */
                   5480:   /* Virtual table implementations will typically add additional fields */
                   5481: };
                   5482: 
                   5483: /*
                   5484: ** CAPI3REF: Virtual Table Cursor Object
                   5485: ** KEYWORDS: sqlite3_vtab_cursor {virtual table cursor}
                   5486: **
                   5487: ** Every [virtual table module] implementation uses a subclass of the
                   5488: ** following structure to describe cursors that point into the
                   5489: ** [virtual table] and are used
                   5490: ** to loop through the virtual table.  Cursors are created using the
                   5491: ** [sqlite3_module.xOpen | xOpen] method of the module and are destroyed
                   5492: ** by the [sqlite3_module.xClose | xClose] method.  Cursors are used
                   5493: ** by the [xFilter], [xNext], [xEof], [xColumn], and [xRowid] methods
                   5494: ** of the module.  Each module implementation will define
                   5495: ** the content of a cursor structure to suit its own needs.
                   5496: **
                   5497: ** This superclass exists in order to define fields of the cursor that
                   5498: ** are common to all implementations.
                   5499: */
                   5500: struct sqlite3_vtab_cursor {
                   5501:   sqlite3_vtab *pVtab;      /* Virtual table of this cursor */
                   5502:   /* Virtual table implementations will typically add additional fields */
                   5503: };
                   5504: 
                   5505: /*
                   5506: ** CAPI3REF: Declare The Schema Of A Virtual Table
                   5507: **
                   5508: ** ^The [xCreate] and [xConnect] methods of a
                   5509: ** [virtual table module] call this interface
                   5510: ** to declare the format (the names and datatypes of the columns) of
                   5511: ** the virtual tables they implement.
                   5512: */
                   5513: SQLITE_API int sqlite3_declare_vtab(sqlite3*, const char *zSQL);
                   5514: 
                   5515: /*
                   5516: ** CAPI3REF: Overload A Function For A Virtual Table
                   5517: **
                   5518: ** ^(Virtual tables can provide alternative implementations of functions
                   5519: ** using the [xFindFunction] method of the [virtual table module].  
                   5520: ** But global versions of those functions
                   5521: ** must exist in order to be overloaded.)^
                   5522: **
                   5523: ** ^(This API makes sure a global version of a function with a particular
                   5524: ** name and number of parameters exists.  If no such function exists
                   5525: ** before this API is called, a new function is created.)^  ^The implementation
                   5526: ** of the new function always causes an exception to be thrown.  So
                   5527: ** the new function is not good for anything by itself.  Its only
                   5528: ** purpose is to be a placeholder function that can be overloaded
                   5529: ** by a [virtual table].
                   5530: */
                   5531: SQLITE_API int sqlite3_overload_function(sqlite3*, const char *zFuncName, int nArg);
                   5532: 
                   5533: /*
                   5534: ** The interface to the virtual-table mechanism defined above (back up
                   5535: ** to a comment remarkably similar to this one) is currently considered
                   5536: ** to be experimental.  The interface might change in incompatible ways.
                   5537: ** If this is a problem for you, do not use the interface at this time.
                   5538: **
                   5539: ** When the virtual-table mechanism stabilizes, we will declare the
                   5540: ** interface fixed, support it indefinitely, and remove this comment.
                   5541: */
                   5542: 
                   5543: /*
                   5544: ** CAPI3REF: A Handle To An Open BLOB
                   5545: ** KEYWORDS: {BLOB handle} {BLOB handles}
                   5546: **
                   5547: ** An instance of this object represents an open BLOB on which
                   5548: ** [sqlite3_blob_open | incremental BLOB I/O] can be performed.
                   5549: ** ^Objects of this type are created by [sqlite3_blob_open()]
                   5550: ** and destroyed by [sqlite3_blob_close()].
                   5551: ** ^The [sqlite3_blob_read()] and [sqlite3_blob_write()] interfaces
                   5552: ** can be used to read or write small subsections of the BLOB.
                   5553: ** ^The [sqlite3_blob_bytes()] interface returns the size of the BLOB in bytes.
                   5554: */
                   5555: typedef struct sqlite3_blob sqlite3_blob;
                   5556: 
                   5557: /*
                   5558: ** CAPI3REF: Open A BLOB For Incremental I/O
                   5559: **
                   5560: ** ^(This interfaces opens a [BLOB handle | handle] to the BLOB located
                   5561: ** in row iRow, column zColumn, table zTable in database zDb;
                   5562: ** in other words, the same BLOB that would be selected by:
                   5563: **
                   5564: ** <pre>
                   5565: **     SELECT zColumn FROM zDb.zTable WHERE [rowid] = iRow;
                   5566: ** </pre>)^
                   5567: **
                   5568: ** ^If the flags parameter is non-zero, then the BLOB is opened for read
                   5569: ** and write access. ^If it is zero, the BLOB is opened for read access.
                   5570: ** ^It is not possible to open a column that is part of an index or primary 
                   5571: ** key for writing. ^If [foreign key constraints] are enabled, it is 
                   5572: ** not possible to open a column that is part of a [child key] for writing.
                   5573: **
                   5574: ** ^Note that the database name is not the filename that contains
                   5575: ** the database but rather the symbolic name of the database that
                   5576: ** appears after the AS keyword when the database is connected using [ATTACH].
                   5577: ** ^For the main database file, the database name is "main".
                   5578: ** ^For TEMP tables, the database name is "temp".
                   5579: **
                   5580: ** ^(On success, [SQLITE_OK] is returned and the new [BLOB handle] is written
                   5581: ** to *ppBlob. Otherwise an [error code] is returned and *ppBlob is set
                   5582: ** to be a null pointer.)^
                   5583: ** ^This function sets the [database connection] error code and message
                   5584: ** accessible via [sqlite3_errcode()] and [sqlite3_errmsg()] and related
                   5585: ** functions. ^Note that the *ppBlob variable is always initialized in a
                   5586: ** way that makes it safe to invoke [sqlite3_blob_close()] on *ppBlob
                   5587: ** regardless of the success or failure of this routine.
                   5588: **
                   5589: ** ^(If the row that a BLOB handle points to is modified by an
                   5590: ** [UPDATE], [DELETE], or by [ON CONFLICT] side-effects
                   5591: ** then the BLOB handle is marked as "expired".
                   5592: ** This is true if any column of the row is changed, even a column
                   5593: ** other than the one the BLOB handle is open on.)^
                   5594: ** ^Calls to [sqlite3_blob_read()] and [sqlite3_blob_write()] for
                   5595: ** an expired BLOB handle fail with a return code of [SQLITE_ABORT].
                   5596: ** ^(Changes written into a BLOB prior to the BLOB expiring are not
                   5597: ** rolled back by the expiration of the BLOB.  Such changes will eventually
                   5598: ** commit if the transaction continues to completion.)^
                   5599: **
                   5600: ** ^Use the [sqlite3_blob_bytes()] interface to determine the size of
                   5601: ** the opened blob.  ^The size of a blob may not be changed by this
                   5602: ** interface.  Use the [UPDATE] SQL command to change the size of a
                   5603: ** blob.
                   5604: **
                   5605: ** ^The [sqlite3_bind_zeroblob()] and [sqlite3_result_zeroblob()] interfaces
                   5606: ** and the built-in [zeroblob] SQL function can be used, if desired,
                   5607: ** to create an empty, zero-filled blob in which to read or write using
                   5608: ** this interface.
                   5609: **
                   5610: ** To avoid a resource leak, every open [BLOB handle] should eventually
                   5611: ** be released by a call to [sqlite3_blob_close()].
                   5612: */
                   5613: SQLITE_API int sqlite3_blob_open(
                   5614:   sqlite3*,
                   5615:   const char *zDb,
                   5616:   const char *zTable,
                   5617:   const char *zColumn,
                   5618:   sqlite3_int64 iRow,
                   5619:   int flags,
                   5620:   sqlite3_blob **ppBlob
                   5621: );
                   5622: 
                   5623: /*
                   5624: ** CAPI3REF: Move a BLOB Handle to a New Row
                   5625: **
                   5626: ** ^This function is used to move an existing blob handle so that it points
                   5627: ** to a different row of the same database table. ^The new row is identified
                   5628: ** by the rowid value passed as the second argument. Only the row can be
                   5629: ** changed. ^The database, table and column on which the blob handle is open
                   5630: ** remain the same. Moving an existing blob handle to a new row can be
                   5631: ** faster than closing the existing handle and opening a new one.
                   5632: **
                   5633: ** ^(The new row must meet the same criteria as for [sqlite3_blob_open()] -
                   5634: ** it must exist and there must be either a blob or text value stored in
                   5635: ** the nominated column.)^ ^If the new row is not present in the table, or if
                   5636: ** it does not contain a blob or text value, or if another error occurs, an
                   5637: ** SQLite error code is returned and the blob handle is considered aborted.
                   5638: ** ^All subsequent calls to [sqlite3_blob_read()], [sqlite3_blob_write()] or
                   5639: ** [sqlite3_blob_reopen()] on an aborted blob handle immediately return
                   5640: ** SQLITE_ABORT. ^Calling [sqlite3_blob_bytes()] on an aborted blob handle
                   5641: ** always returns zero.
                   5642: **
                   5643: ** ^This function sets the database handle error code and message.
                   5644: */
                   5645: SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_blob_reopen(sqlite3_blob *, sqlite3_int64);
                   5646: 
                   5647: /*
                   5648: ** CAPI3REF: Close A BLOB Handle
                   5649: **
                   5650: ** ^Closes an open [BLOB handle].
                   5651: **
                   5652: ** ^Closing a BLOB shall cause the current transaction to commit
                   5653: ** if there are no other BLOBs, no pending prepared statements, and the
                   5654: ** database connection is in [autocommit mode].
                   5655: ** ^If any writes were made to the BLOB, they might be held in cache
                   5656: ** until the close operation if they will fit.
                   5657: **
                   5658: ** ^(Closing the BLOB often forces the changes
                   5659: ** out to disk and so if any I/O errors occur, they will likely occur
                   5660: ** at the time when the BLOB is closed.  Any errors that occur during
                   5661: ** closing are reported as a non-zero return value.)^
                   5662: **
                   5663: ** ^(The BLOB is closed unconditionally.  Even if this routine returns
                   5664: ** an error code, the BLOB is still closed.)^
                   5665: **
                   5666: ** ^Calling this routine with a null pointer (such as would be returned
                   5667: ** by a failed call to [sqlite3_blob_open()]) is a harmless no-op.
                   5668: */
                   5669: SQLITE_API int sqlite3_blob_close(sqlite3_blob *);
                   5670: 
                   5671: /*
                   5672: ** CAPI3REF: Return The Size Of An Open BLOB
                   5673: **
                   5674: ** ^Returns the size in bytes of the BLOB accessible via the 
                   5675: ** successfully opened [BLOB handle] in its only argument.  ^The
                   5676: ** incremental blob I/O routines can only read or overwriting existing
                   5677: ** blob content; they cannot change the size of a blob.
                   5678: **
                   5679: ** This routine only works on a [BLOB handle] which has been created
                   5680: ** by a prior successful call to [sqlite3_blob_open()] and which has not
                   5681: ** been closed by [sqlite3_blob_close()].  Passing any other pointer in
                   5682: ** to this routine results in undefined and probably undesirable behavior.
                   5683: */
                   5684: SQLITE_API int sqlite3_blob_bytes(sqlite3_blob *);
                   5685: 
                   5686: /*
                   5687: ** CAPI3REF: Read Data From A BLOB Incrementally
                   5688: **
                   5689: ** ^(This function is used to read data from an open [BLOB handle] into a
                   5690: ** caller-supplied buffer. N bytes of data are copied into buffer Z
                   5691: ** from the open BLOB, starting at offset iOffset.)^
                   5692: **
                   5693: ** ^If offset iOffset is less than N bytes from the end of the BLOB,
                   5694: ** [SQLITE_ERROR] is returned and no data is read.  ^If N or iOffset is
                   5695: ** less than zero, [SQLITE_ERROR] is returned and no data is read.
                   5696: ** ^The size of the blob (and hence the maximum value of N+iOffset)
                   5697: ** can be determined using the [sqlite3_blob_bytes()] interface.
                   5698: **
                   5699: ** ^An attempt to read from an expired [BLOB handle] fails with an
                   5700: ** error code of [SQLITE_ABORT].
                   5701: **
                   5702: ** ^(On success, sqlite3_blob_read() returns SQLITE_OK.
                   5703: ** Otherwise, an [error code] or an [extended error code] is returned.)^
                   5704: **
                   5705: ** This routine only works on a [BLOB handle] which has been created
                   5706: ** by a prior successful call to [sqlite3_blob_open()] and which has not
                   5707: ** been closed by [sqlite3_blob_close()].  Passing any other pointer in
                   5708: ** to this routine results in undefined and probably undesirable behavior.
                   5709: **
                   5710: ** See also: [sqlite3_blob_write()].
                   5711: */
                   5712: SQLITE_API int sqlite3_blob_read(sqlite3_blob *, void *Z, int N, int iOffset);
                   5713: 
                   5714: /*
                   5715: ** CAPI3REF: Write Data Into A BLOB Incrementally
                   5716: **
                   5717: ** ^This function is used to write data into an open [BLOB handle] from a
                   5718: ** caller-supplied buffer. ^N bytes of data are copied from the buffer Z
                   5719: ** into the open BLOB, starting at offset iOffset.
                   5720: **
                   5721: ** ^If the [BLOB handle] passed as the first argument was not opened for
                   5722: ** writing (the flags parameter to [sqlite3_blob_open()] was zero),
                   5723: ** this function returns [SQLITE_READONLY].
                   5724: **
                   5725: ** ^This function may only modify the contents of the BLOB; it is
                   5726: ** not possible to increase the size of a BLOB using this API.
                   5727: ** ^If offset iOffset is less than N bytes from the end of the BLOB,
                   5728: ** [SQLITE_ERROR] is returned and no data is written.  ^If N is
                   5729: ** less than zero [SQLITE_ERROR] is returned and no data is written.
                   5730: ** The size of the BLOB (and hence the maximum value of N+iOffset)
                   5731: ** can be determined using the [sqlite3_blob_bytes()] interface.
                   5732: **
                   5733: ** ^An attempt to write to an expired [BLOB handle] fails with an
                   5734: ** error code of [SQLITE_ABORT].  ^Writes to the BLOB that occurred
                   5735: ** before the [BLOB handle] expired are not rolled back by the
                   5736: ** expiration of the handle, though of course those changes might
                   5737: ** have been overwritten by the statement that expired the BLOB handle
                   5738: ** or by other independent statements.
                   5739: **
                   5740: ** ^(On success, sqlite3_blob_write() returns SQLITE_OK.
                   5741: ** Otherwise, an  [error code] or an [extended error code] is returned.)^
                   5742: **
                   5743: ** This routine only works on a [BLOB handle] which has been created
                   5744: ** by a prior successful call to [sqlite3_blob_open()] and which has not
                   5745: ** been closed by [sqlite3_blob_close()].  Passing any other pointer in
                   5746: ** to this routine results in undefined and probably undesirable behavior.
                   5747: **
                   5748: ** See also: [sqlite3_blob_read()].
                   5749: */
                   5750: SQLITE_API int sqlite3_blob_write(sqlite3_blob *, const void *z, int n, int iOffset);
                   5751: 
                   5752: /*
                   5753: ** CAPI3REF: Virtual File System Objects
                   5754: **
                   5755: ** A virtual filesystem (VFS) is an [sqlite3_vfs] object
                   5756: ** that SQLite uses to interact
                   5757: ** with the underlying operating system.  Most SQLite builds come with a
                   5758: ** single default VFS that is appropriate for the host computer.
                   5759: ** New VFSes can be registered and existing VFSes can be unregistered.
                   5760: ** The following interfaces are provided.
                   5761: **
                   5762: ** ^The sqlite3_vfs_find() interface returns a pointer to a VFS given its name.
                   5763: ** ^Names are case sensitive.
                   5764: ** ^Names are zero-terminated UTF-8 strings.
                   5765: ** ^If there is no match, a NULL pointer is returned.
                   5766: ** ^If zVfsName is NULL then the default VFS is returned.
                   5767: **
                   5768: ** ^New VFSes are registered with sqlite3_vfs_register().
                   5769: ** ^Each new VFS becomes the default VFS if the makeDflt flag is set.
                   5770: ** ^The same VFS can be registered multiple times without injury.
                   5771: ** ^To make an existing VFS into the default VFS, register it again
                   5772: ** with the makeDflt flag set.  If two different VFSes with the
                   5773: ** same name are registered, the behavior is undefined.  If a
                   5774: ** VFS is registered with a name that is NULL or an empty string,
                   5775: ** then the behavior is undefined.
                   5776: **
                   5777: ** ^Unregister a VFS with the sqlite3_vfs_unregister() interface.
                   5778: ** ^(If the default VFS is unregistered, another VFS is chosen as
                   5779: ** the default.  The choice for the new VFS is arbitrary.)^
                   5780: */
                   5781: SQLITE_API sqlite3_vfs *sqlite3_vfs_find(const char *zVfsName);
                   5782: SQLITE_API int sqlite3_vfs_register(sqlite3_vfs*, int makeDflt);
                   5783: SQLITE_API int sqlite3_vfs_unregister(sqlite3_vfs*);
                   5784: 
                   5785: /*
                   5786: ** CAPI3REF: Mutexes
                   5787: **
                   5788: ** The SQLite core uses these routines for thread
                   5789: ** synchronization. Though they are intended for internal
                   5790: ** use by SQLite, code that links against SQLite is
                   5791: ** permitted to use any of these routines.
                   5792: **
                   5793: ** The SQLite source code contains multiple implementations
                   5794: ** of these mutex routines.  An appropriate implementation
                   5795: ** is selected automatically at compile-time.  ^(The following
                   5796: ** implementations are available in the SQLite core:
                   5797: **
                   5798: ** <ul>
                   5799: ** <li>   SQLITE_MUTEX_OS2
                   5800: ** <li>   SQLITE_MUTEX_PTHREAD
                   5801: ** <li>   SQLITE_MUTEX_W32
                   5802: ** <li>   SQLITE_MUTEX_NOOP
                   5803: ** </ul>)^
                   5804: **
                   5805: ** ^The SQLITE_MUTEX_NOOP implementation is a set of routines
                   5806: ** that does no real locking and is appropriate for use in
                   5807: ** a single-threaded application.  ^The SQLITE_MUTEX_OS2,
                   5808: ** SQLITE_MUTEX_PTHREAD, and SQLITE_MUTEX_W32 implementations
                   5809: ** are appropriate for use on OS/2, Unix, and Windows.
                   5810: **
                   5811: ** ^(If SQLite is compiled with the SQLITE_MUTEX_APPDEF preprocessor
                   5812: ** macro defined (with "-DSQLITE_MUTEX_APPDEF=1"), then no mutex
                   5813: ** implementation is included with the library. In this case the
                   5814: ** application must supply a custom mutex implementation using the
                   5815: ** [SQLITE_CONFIG_MUTEX] option of the sqlite3_config() function
                   5816: ** before calling sqlite3_initialize() or any other public sqlite3_
                   5817: ** function that calls sqlite3_initialize().)^
                   5818: **
                   5819: ** ^The sqlite3_mutex_alloc() routine allocates a new
                   5820: ** mutex and returns a pointer to it. ^If it returns NULL
                   5821: ** that means that a mutex could not be allocated.  ^SQLite
                   5822: ** will unwind its stack and return an error.  ^(The argument
                   5823: ** to sqlite3_mutex_alloc() is one of these integer constants:
                   5824: **
                   5825: ** <ul>
                   5826: ** <li>  SQLITE_MUTEX_FAST
                   5827: ** <li>  SQLITE_MUTEX_RECURSIVE
                   5828: ** <li>  SQLITE_MUTEX_STATIC_MASTER
                   5829: ** <li>  SQLITE_MUTEX_STATIC_MEM
                   5830: ** <li>  SQLITE_MUTEX_STATIC_MEM2
                   5831: ** <li>  SQLITE_MUTEX_STATIC_PRNG
                   5832: ** <li>  SQLITE_MUTEX_STATIC_LRU
                   5833: ** <li>  SQLITE_MUTEX_STATIC_LRU2
                   5834: ** </ul>)^
                   5835: **
                   5836: ** ^The first two constants (SQLITE_MUTEX_FAST and SQLITE_MUTEX_RECURSIVE)
                   5837: ** cause sqlite3_mutex_alloc() to create
                   5838: ** a new mutex.  ^The new mutex is recursive when SQLITE_MUTEX_RECURSIVE
                   5839: ** is used but not necessarily so when SQLITE_MUTEX_FAST is used.
                   5840: ** The mutex implementation does not need to make a distinction
                   5841: ** between SQLITE_MUTEX_RECURSIVE and SQLITE_MUTEX_FAST if it does
                   5842: ** not want to.  ^SQLite will only request a recursive mutex in
                   5843: ** cases where it really needs one.  ^If a faster non-recursive mutex
                   5844: ** implementation is available on the host platform, the mutex subsystem
                   5845: ** might return such a mutex in response to SQLITE_MUTEX_FAST.
                   5846: **
                   5847: ** ^The other allowed parameters to sqlite3_mutex_alloc() (anything other
                   5848: ** than SQLITE_MUTEX_FAST and SQLITE_MUTEX_RECURSIVE) each return
                   5849: ** a pointer to a static preexisting mutex.  ^Six static mutexes are
                   5850: ** used by the current version of SQLite.  Future versions of SQLite
                   5851: ** may add additional static mutexes.  Static mutexes are for internal
                   5852: ** use by SQLite only.  Applications that use SQLite mutexes should
                   5853: ** use only the dynamic mutexes returned by SQLITE_MUTEX_FAST or
                   5854: ** SQLITE_MUTEX_RECURSIVE.
                   5855: **
                   5856: ** ^Note that if one of the dynamic mutex parameters (SQLITE_MUTEX_FAST
                   5857: ** or SQLITE_MUTEX_RECURSIVE) is used then sqlite3_mutex_alloc()
                   5858: ** returns a different mutex on every call.  ^But for the static
                   5859: ** mutex types, the same mutex is returned on every call that has
                   5860: ** the same type number.
                   5861: **
                   5862: ** ^The sqlite3_mutex_free() routine deallocates a previously
                   5863: ** allocated dynamic mutex.  ^SQLite is careful to deallocate every
                   5864: ** dynamic mutex that it allocates.  The dynamic mutexes must not be in
                   5865: ** use when they are deallocated.  Attempting to deallocate a static
                   5866: ** mutex results in undefined behavior.  ^SQLite never deallocates
                   5867: ** a static mutex.
                   5868: **
                   5869: ** ^The sqlite3_mutex_enter() and sqlite3_mutex_try() routines attempt
                   5870: ** to enter a mutex.  ^If another thread is already within the mutex,
                   5871: ** sqlite3_mutex_enter() will block and sqlite3_mutex_try() will return
                   5872: ** SQLITE_BUSY.  ^The sqlite3_mutex_try() interface returns [SQLITE_OK]
                   5873: ** upon successful entry.  ^(Mutexes created using
                   5874: ** SQLITE_MUTEX_RECURSIVE can be entered multiple times by the same thread.
                   5875: ** In such cases the,
                   5876: ** mutex must be exited an equal number of times before another thread
                   5877: ** can enter.)^  ^(If the same thread tries to enter any other
                   5878: ** kind of mutex more than once, the behavior is undefined.
                   5879: ** SQLite will never exhibit
                   5880: ** such behavior in its own use of mutexes.)^
                   5881: **
                   5882: ** ^(Some systems (for example, Windows 95) do not support the operation
                   5883: ** implemented by sqlite3_mutex_try().  On those systems, sqlite3_mutex_try()
                   5884: ** will always return SQLITE_BUSY.  The SQLite core only ever uses
                   5885: ** sqlite3_mutex_try() as an optimization so this is acceptable behavior.)^
                   5886: **
                   5887: ** ^The sqlite3_mutex_leave() routine exits a mutex that was
                   5888: ** previously entered by the same thread.   ^(The behavior
                   5889: ** is undefined if the mutex is not currently entered by the
                   5890: ** calling thread or is not currently allocated.  SQLite will
                   5891: ** never do either.)^
                   5892: **
                   5893: ** ^If the argument to sqlite3_mutex_enter(), sqlite3_mutex_try(), or
                   5894: ** sqlite3_mutex_leave() is a NULL pointer, then all three routines
                   5895: ** behave as no-ops.
                   5896: **
                   5897: ** See also: [sqlite3_mutex_held()] and [sqlite3_mutex_notheld()].
                   5898: */
                   5899: SQLITE_API sqlite3_mutex *sqlite3_mutex_alloc(int);
                   5900: SQLITE_API void sqlite3_mutex_free(sqlite3_mutex*);
                   5901: SQLITE_API void sqlite3_mutex_enter(sqlite3_mutex*);
                   5902: SQLITE_API int sqlite3_mutex_try(sqlite3_mutex*);
                   5903: SQLITE_API void sqlite3_mutex_leave(sqlite3_mutex*);
                   5904: 
                   5905: /*
                   5906: ** CAPI3REF: Mutex Methods Object
                   5907: **
                   5908: ** An instance of this structure defines the low-level routines
                   5909: ** used to allocate and use mutexes.
                   5910: **
                   5911: ** Usually, the default mutex implementations provided by SQLite are
                   5912: ** sufficient, however the user has the option of substituting a custom
                   5913: ** implementation for specialized deployments or systems for which SQLite
                   5914: ** does not provide a suitable implementation. In this case, the user
                   5915: ** creates and populates an instance of this structure to pass
                   5916: ** to sqlite3_config() along with the [SQLITE_CONFIG_MUTEX] option.
                   5917: ** Additionally, an instance of this structure can be used as an
                   5918: ** output variable when querying the system for the current mutex
                   5919: ** implementation, using the [SQLITE_CONFIG_GETMUTEX] option.
                   5920: **
                   5921: ** ^The xMutexInit method defined by this structure is invoked as
                   5922: ** part of system initialization by the sqlite3_initialize() function.
                   5923: ** ^The xMutexInit routine is called by SQLite exactly once for each
                   5924: ** effective call to [sqlite3_initialize()].
                   5925: **
                   5926: ** ^The xMutexEnd method defined by this structure is invoked as
                   5927: ** part of system shutdown by the sqlite3_shutdown() function. The
                   5928: ** implementation of this method is expected to release all outstanding
                   5929: ** resources obtained by the mutex methods implementation, especially
                   5930: ** those obtained by the xMutexInit method.  ^The xMutexEnd()
                   5931: ** interface is invoked exactly once for each call to [sqlite3_shutdown()].
                   5932: **
                   5933: ** ^(The remaining seven methods defined by this structure (xMutexAlloc,
                   5934: ** xMutexFree, xMutexEnter, xMutexTry, xMutexLeave, xMutexHeld and
                   5935: ** xMutexNotheld) implement the following interfaces (respectively):
                   5936: **
                   5937: ** <ul>
                   5938: **   <li>  [sqlite3_mutex_alloc()] </li>
                   5939: **   <li>  [sqlite3_mutex_free()] </li>
                   5940: **   <li>  [sqlite3_mutex_enter()] </li>
                   5941: **   <li>  [sqlite3_mutex_try()] </li>
                   5942: **   <li>  [sqlite3_mutex_leave()] </li>
                   5943: **   <li>  [sqlite3_mutex_held()] </li>
                   5944: **   <li>  [sqlite3_mutex_notheld()] </li>
                   5945: ** </ul>)^
                   5946: **
                   5947: ** The only difference is that the public sqlite3_XXX functions enumerated
                   5948: ** above silently ignore any invocations that pass a NULL pointer instead
                   5949: ** of a valid mutex handle. The implementations of the methods defined
                   5950: ** by this structure are not required to handle this case, the results
                   5951: ** of passing a NULL pointer instead of a valid mutex handle are undefined
                   5952: ** (i.e. it is acceptable to provide an implementation that segfaults if
                   5953: ** it is passed a NULL pointer).
                   5954: **
                   5955: ** The xMutexInit() method must be threadsafe.  ^It must be harmless to
                   5956: ** invoke xMutexInit() multiple times within the same process and without
                   5957: ** intervening calls to xMutexEnd().  Second and subsequent calls to
                   5958: ** xMutexInit() must be no-ops.
                   5959: **
                   5960: ** ^xMutexInit() must not use SQLite memory allocation ([sqlite3_malloc()]
                   5961: ** and its associates).  ^Similarly, xMutexAlloc() must not use SQLite memory
                   5962: ** allocation for a static mutex.  ^However xMutexAlloc() may use SQLite
                   5963: ** memory allocation for a fast or recursive mutex.
                   5964: **
                   5965: ** ^SQLite will invoke the xMutexEnd() method when [sqlite3_shutdown()] is
                   5966: ** called, but only if the prior call to xMutexInit returned SQLITE_OK.
                   5967: ** If xMutexInit fails in any way, it is expected to clean up after itself
                   5968: ** prior to returning.
                   5969: */
                   5970: typedef struct sqlite3_mutex_methods sqlite3_mutex_methods;
                   5971: struct sqlite3_mutex_methods {
                   5972:   int (*xMutexInit)(void);
                   5973:   int (*xMutexEnd)(void);
                   5974:   sqlite3_mutex *(*xMutexAlloc)(int);
                   5975:   void (*xMutexFree)(sqlite3_mutex *);
                   5976:   void (*xMutexEnter)(sqlite3_mutex *);
                   5977:   int (*xMutexTry)(sqlite3_mutex *);
                   5978:   void (*xMutexLeave)(sqlite3_mutex *);
                   5979:   int (*xMutexHeld)(sqlite3_mutex *);
                   5980:   int (*xMutexNotheld)(sqlite3_mutex *);
                   5981: };
                   5982: 
                   5983: /*
                   5984: ** CAPI3REF: Mutex Verification Routines
                   5985: **
                   5986: ** The sqlite3_mutex_held() and sqlite3_mutex_notheld() routines
                   5987: ** are intended for use inside assert() statements.  ^The SQLite core
                   5988: ** never uses these routines except inside an assert() and applications
                   5989: ** are advised to follow the lead of the core.  ^The SQLite core only
                   5990: ** provides implementations for these routines when it is compiled
                   5991: ** with the SQLITE_DEBUG flag.  ^External mutex implementations
                   5992: ** are only required to provide these routines if SQLITE_DEBUG is
                   5993: ** defined and if NDEBUG is not defined.
                   5994: **
                   5995: ** ^These routines should return true if the mutex in their argument
                   5996: ** is held or not held, respectively, by the calling thread.
                   5997: **
                   5998: ** ^The implementation is not required to provided versions of these
                   5999: ** routines that actually work. If the implementation does not provide working
                   6000: ** versions of these routines, it should at least provide stubs that always
                   6001: ** return true so that one does not get spurious assertion failures.
                   6002: **
                   6003: ** ^If the argument to sqlite3_mutex_held() is a NULL pointer then
                   6004: ** the routine should return 1.   This seems counter-intuitive since
                   6005: ** clearly the mutex cannot be held if it does not exist.  But
                   6006: ** the reason the mutex does not exist is because the build is not
                   6007: ** using mutexes.  And we do not want the assert() containing the
                   6008: ** call to sqlite3_mutex_held() to fail, so a non-zero return is
                   6009: ** the appropriate thing to do.  ^The sqlite3_mutex_notheld()
                   6010: ** interface should also return 1 when given a NULL pointer.
                   6011: */
                   6012: #ifndef NDEBUG
                   6013: SQLITE_API int sqlite3_mutex_held(sqlite3_mutex*);
                   6014: SQLITE_API int sqlite3_mutex_notheld(sqlite3_mutex*);
                   6015: #endif
                   6016: 
                   6017: /*
                   6018: ** CAPI3REF: Mutex Types
                   6019: **
                   6020: ** The [sqlite3_mutex_alloc()] interface takes a single argument
                   6021: ** which is one of these integer constants.
                   6022: **
                   6023: ** The set of static mutexes may change from one SQLite release to the
                   6024: ** next.  Applications that override the built-in mutex logic must be
                   6025: ** prepared to accommodate additional static mutexes.
                   6026: */
                   6027: #define SQLITE_MUTEX_FAST             0
                   6028: #define SQLITE_MUTEX_RECURSIVE        1
                   6029: #define SQLITE_MUTEX_STATIC_MASTER    2
                   6030: #define SQLITE_MUTEX_STATIC_MEM       3  /* sqlite3_malloc() */
                   6031: #define SQLITE_MUTEX_STATIC_MEM2      4  /* NOT USED */
                   6032: #define SQLITE_MUTEX_STATIC_OPEN      4  /* sqlite3BtreeOpen() */
                   6033: #define SQLITE_MUTEX_STATIC_PRNG      5  /* sqlite3_random() */
                   6034: #define SQLITE_MUTEX_STATIC_LRU       6  /* lru page list */
                   6035: #define SQLITE_MUTEX_STATIC_LRU2      7  /* NOT USED */
                   6036: #define SQLITE_MUTEX_STATIC_PMEM      7  /* sqlite3PageMalloc() */
                   6037: 
                   6038: /*
                   6039: ** CAPI3REF: Retrieve the mutex for a database connection
                   6040: **
                   6041: ** ^This interface returns a pointer the [sqlite3_mutex] object that 
                   6042: ** serializes access to the [database connection] given in the argument
                   6043: ** when the [threading mode] is Serialized.
                   6044: ** ^If the [threading mode] is Single-thread or Multi-thread then this
                   6045: ** routine returns a NULL pointer.
                   6046: */
                   6047: SQLITE_API sqlite3_mutex *sqlite3_db_mutex(sqlite3*);
                   6048: 
                   6049: /*
                   6050: ** CAPI3REF: Low-Level Control Of Database Files
                   6051: **
                   6052: ** ^The [sqlite3_file_control()] interface makes a direct call to the
                   6053: ** xFileControl method for the [sqlite3_io_methods] object associated
                   6054: ** with a particular database identified by the second argument. ^The
                   6055: ** name of the database is "main" for the main database or "temp" for the
                   6056: ** TEMP database, or the name that appears after the AS keyword for
                   6057: ** databases that are added using the [ATTACH] SQL command.
                   6058: ** ^A NULL pointer can be used in place of "main" to refer to the
                   6059: ** main database file.
                   6060: ** ^The third and fourth parameters to this routine
                   6061: ** are passed directly through to the second and third parameters of
                   6062: ** the xFileControl method.  ^The return value of the xFileControl
                   6063: ** method becomes the return value of this routine.
                   6064: **
                   6065: ** ^The SQLITE_FCNTL_FILE_POINTER value for the op parameter causes
                   6066: ** a pointer to the underlying [sqlite3_file] object to be written into
                   6067: ** the space pointed to by the 4th parameter.  ^The SQLITE_FCNTL_FILE_POINTER
                   6068: ** case is a short-circuit path which does not actually invoke the
                   6069: ** underlying sqlite3_io_methods.xFileControl method.
                   6070: **
                   6071: ** ^If the second parameter (zDbName) does not match the name of any
                   6072: ** open database file, then SQLITE_ERROR is returned.  ^This error
                   6073: ** code is not remembered and will not be recalled by [sqlite3_errcode()]
                   6074: ** or [sqlite3_errmsg()].  The underlying xFileControl method might
                   6075: ** also return SQLITE_ERROR.  There is no way to distinguish between
                   6076: ** an incorrect zDbName and an SQLITE_ERROR return from the underlying
                   6077: ** xFileControl method.
                   6078: **
                   6079: ** See also: [SQLITE_FCNTL_LOCKSTATE]
                   6080: */
                   6081: SQLITE_API int sqlite3_file_control(sqlite3*, const char *zDbName, int op, void*);
                   6082: 
                   6083: /*
                   6084: ** CAPI3REF: Testing Interface
                   6085: **
                   6086: ** ^The sqlite3_test_control() interface is used to read out internal
                   6087: ** state of SQLite and to inject faults into SQLite for testing
                   6088: ** purposes.  ^The first parameter is an operation code that determines
                   6089: ** the number, meaning, and operation of all subsequent parameters.
                   6090: **
                   6091: ** This interface is not for use by applications.  It exists solely
                   6092: ** for verifying the correct operation of the SQLite library.  Depending
                   6093: ** on how the SQLite library is compiled, this interface might not exist.
                   6094: **
                   6095: ** The details of the operation codes, their meanings, the parameters
                   6096: ** they take, and what they do are all subject to change without notice.
                   6097: ** Unlike most of the SQLite API, this function is not guaranteed to
                   6098: ** operate consistently from one release to the next.
                   6099: */
                   6100: SQLITE_API int sqlite3_test_control(int op, ...);
                   6101: 
                   6102: /*
                   6103: ** CAPI3REF: Testing Interface Operation Codes
                   6104: **
                   6105: ** These constants are the valid operation code parameters used
                   6106: ** as the first argument to [sqlite3_test_control()].
                   6107: **
                   6108: ** These parameters and their meanings are subject to change
                   6109: ** without notice.  These values are for testing purposes only.
                   6110: ** Applications should not use any of these parameters or the
                   6111: ** [sqlite3_test_control()] interface.
                   6112: */
                   6113: #define SQLITE_TESTCTRL_FIRST                    5
                   6114: #define SQLITE_TESTCTRL_PRNG_SAVE                5
                   6115: #define SQLITE_TESTCTRL_PRNG_RESTORE             6
                   6116: #define SQLITE_TESTCTRL_PRNG_RESET               7
                   6117: #define SQLITE_TESTCTRL_BITVEC_TEST              8
                   6118: #define SQLITE_TESTCTRL_FAULT_INSTALL            9
                   6119: #define SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS     10
                   6120: #define SQLITE_TESTCTRL_PENDING_BYTE            11
                   6121: #define SQLITE_TESTCTRL_ASSERT                  12
                   6122: #define SQLITE_TESTCTRL_ALWAYS                  13
                   6123: #define SQLITE_TESTCTRL_RESERVE                 14
                   6124: #define SQLITE_TESTCTRL_OPTIMIZATIONS           15
                   6125: #define SQLITE_TESTCTRL_ISKEYWORD               16
                   6126: #define SQLITE_TESTCTRL_PGHDRSZ                 17
                   6127: #define SQLITE_TESTCTRL_SCRATCHMALLOC           18
                   6128: #define SQLITE_TESTCTRL_LOCALTIME_FAULT         19
                   6129: #define SQLITE_TESTCTRL_LAST                    19
                   6130: 
                   6131: /*
                   6132: ** CAPI3REF: SQLite Runtime Status
                   6133: **
                   6134: ** ^This interface is used to retrieve runtime status information
                   6135: ** about the performance of SQLite, and optionally to reset various
                   6136: ** highwater marks.  ^The first argument is an integer code for
                   6137: ** the specific parameter to measure.  ^(Recognized integer codes
                   6138: ** are of the form [status parameters | SQLITE_STATUS_...].)^
                   6139: ** ^The current value of the parameter is returned into *pCurrent.
                   6140: ** ^The highest recorded value is returned in *pHighwater.  ^If the
                   6141: ** resetFlag is true, then the highest record value is reset after
                   6142: ** *pHighwater is written.  ^(Some parameters do not record the highest
                   6143: ** value.  For those parameters
                   6144: ** nothing is written into *pHighwater and the resetFlag is ignored.)^
                   6145: ** ^(Other parameters record only the highwater mark and not the current
                   6146: ** value.  For these latter parameters nothing is written into *pCurrent.)^
                   6147: **
                   6148: ** ^The sqlite3_status() routine returns SQLITE_OK on success and a
                   6149: ** non-zero [error code] on failure.
                   6150: **
                   6151: ** This routine is threadsafe but is not atomic.  This routine can be
                   6152: ** called while other threads are running the same or different SQLite
                   6153: ** interfaces.  However the values returned in *pCurrent and
                   6154: ** *pHighwater reflect the status of SQLite at different points in time
                   6155: ** and it is possible that another thread might change the parameter
                   6156: ** in between the times when *pCurrent and *pHighwater are written.
                   6157: **
                   6158: ** See also: [sqlite3_db_status()]
                   6159: */
                   6160: SQLITE_API int sqlite3_status(int op, int *pCurrent, int *pHighwater, int resetFlag);
                   6161: 
                   6162: 
                   6163: /*
                   6164: ** CAPI3REF: Status Parameters
                   6165: ** KEYWORDS: {status parameters}
                   6166: **
                   6167: ** These integer constants designate various run-time status parameters
                   6168: ** that can be returned by [sqlite3_status()].
                   6169: **
                   6170: ** <dl>
                   6171: ** [[SQLITE_STATUS_MEMORY_USED]] ^(<dt>SQLITE_STATUS_MEMORY_USED</dt>
                   6172: ** <dd>This parameter is the current amount of memory checked out
                   6173: ** using [sqlite3_malloc()], either directly or indirectly.  The
                   6174: ** figure includes calls made to [sqlite3_malloc()] by the application
                   6175: ** and internal memory usage by the SQLite library.  Scratch memory
                   6176: ** controlled by [SQLITE_CONFIG_SCRATCH] and auxiliary page-cache
                   6177: ** memory controlled by [SQLITE_CONFIG_PAGECACHE] is not included in
                   6178: ** this parameter.  The amount returned is the sum of the allocation
                   6179: ** sizes as reported by the xSize method in [sqlite3_mem_methods].</dd>)^
                   6180: **
                   6181: ** [[SQLITE_STATUS_MALLOC_SIZE]] ^(<dt>SQLITE_STATUS_MALLOC_SIZE</dt>
                   6182: ** <dd>This parameter records the largest memory allocation request
                   6183: ** handed to [sqlite3_malloc()] or [sqlite3_realloc()] (or their
                   6184: ** internal equivalents).  Only the value returned in the
                   6185: ** *pHighwater parameter to [sqlite3_status()] is of interest.  
                   6186: ** The value written into the *pCurrent parameter is undefined.</dd>)^
                   6187: **
                   6188: ** [[SQLITE_STATUS_MALLOC_COUNT]] ^(<dt>SQLITE_STATUS_MALLOC_COUNT</dt>
                   6189: ** <dd>This parameter records the number of separate memory allocations
                   6190: ** currently checked out.</dd>)^
                   6191: **
                   6192: ** [[SQLITE_STATUS_PAGECACHE_USED]] ^(<dt>SQLITE_STATUS_PAGECACHE_USED</dt>
                   6193: ** <dd>This parameter returns the number of pages used out of the
                   6194: ** [pagecache memory allocator] that was configured using 
                   6195: ** [SQLITE_CONFIG_PAGECACHE].  The
                   6196: ** value returned is in pages, not in bytes.</dd>)^
                   6197: **
                   6198: ** [[SQLITE_STATUS_PAGECACHE_OVERFLOW]] 
                   6199: ** ^(<dt>SQLITE_STATUS_PAGECACHE_OVERFLOW</dt>
                   6200: ** <dd>This parameter returns the number of bytes of page cache
                   6201: ** allocation which could not be satisfied by the [SQLITE_CONFIG_PAGECACHE]
                   6202: ** buffer and where forced to overflow to [sqlite3_malloc()].  The
                   6203: ** returned value includes allocations that overflowed because they
                   6204: ** where too large (they were larger than the "sz" parameter to
                   6205: ** [SQLITE_CONFIG_PAGECACHE]) and allocations that overflowed because
                   6206: ** no space was left in the page cache.</dd>)^
                   6207: **
                   6208: ** [[SQLITE_STATUS_PAGECACHE_SIZE]] ^(<dt>SQLITE_STATUS_PAGECACHE_SIZE</dt>
                   6209: ** <dd>This parameter records the largest memory allocation request
                   6210: ** handed to [pagecache memory allocator].  Only the value returned in the
                   6211: ** *pHighwater parameter to [sqlite3_status()] is of interest.  
                   6212: ** The value written into the *pCurrent parameter is undefined.</dd>)^
                   6213: **
                   6214: ** [[SQLITE_STATUS_SCRATCH_USED]] ^(<dt>SQLITE_STATUS_SCRATCH_USED</dt>
                   6215: ** <dd>This parameter returns the number of allocations used out of the
                   6216: ** [scratch memory allocator] configured using
                   6217: ** [SQLITE_CONFIG_SCRATCH].  The value returned is in allocations, not
                   6218: ** in bytes.  Since a single thread may only have one scratch allocation
                   6219: ** outstanding at time, this parameter also reports the number of threads
                   6220: ** using scratch memory at the same time.</dd>)^
                   6221: **
                   6222: ** [[SQLITE_STATUS_SCRATCH_OVERFLOW]] ^(<dt>SQLITE_STATUS_SCRATCH_OVERFLOW</dt>
                   6223: ** <dd>This parameter returns the number of bytes of scratch memory
                   6224: ** allocation which could not be satisfied by the [SQLITE_CONFIG_SCRATCH]
                   6225: ** buffer and where forced to overflow to [sqlite3_malloc()].  The values
                   6226: ** returned include overflows because the requested allocation was too
                   6227: ** larger (that is, because the requested allocation was larger than the
                   6228: ** "sz" parameter to [SQLITE_CONFIG_SCRATCH]) and because no scratch buffer
                   6229: ** slots were available.
                   6230: ** </dd>)^
                   6231: **
                   6232: ** [[SQLITE_STATUS_SCRATCH_SIZE]] ^(<dt>SQLITE_STATUS_SCRATCH_SIZE</dt>
                   6233: ** <dd>This parameter records the largest memory allocation request
                   6234: ** handed to [scratch memory allocator].  Only the value returned in the
                   6235: ** *pHighwater parameter to [sqlite3_status()] is of interest.  
                   6236: ** The value written into the *pCurrent parameter is undefined.</dd>)^
                   6237: **
                   6238: ** [[SQLITE_STATUS_PARSER_STACK]] ^(<dt>SQLITE_STATUS_PARSER_STACK</dt>
                   6239: ** <dd>This parameter records the deepest parser stack.  It is only
                   6240: ** meaningful if SQLite is compiled with [YYTRACKMAXSTACKDEPTH].</dd>)^
                   6241: ** </dl>
                   6242: **
                   6243: ** New status parameters may be added from time to time.
                   6244: */
                   6245: #define SQLITE_STATUS_MEMORY_USED          0
                   6246: #define SQLITE_STATUS_PAGECACHE_USED       1
                   6247: #define SQLITE_STATUS_PAGECACHE_OVERFLOW   2
                   6248: #define SQLITE_STATUS_SCRATCH_USED         3
                   6249: #define SQLITE_STATUS_SCRATCH_OVERFLOW     4
                   6250: #define SQLITE_STATUS_MALLOC_SIZE          5
                   6251: #define SQLITE_STATUS_PARSER_STACK         6
                   6252: #define SQLITE_STATUS_PAGECACHE_SIZE       7
                   6253: #define SQLITE_STATUS_SCRATCH_SIZE         8
                   6254: #define SQLITE_STATUS_MALLOC_COUNT         9
                   6255: 
                   6256: /*
                   6257: ** CAPI3REF: Database Connection Status
                   6258: **
                   6259: ** ^This interface is used to retrieve runtime status information 
                   6260: ** about a single [database connection].  ^The first argument is the
                   6261: ** database connection object to be interrogated.  ^The second argument
                   6262: ** is an integer constant, taken from the set of
                   6263: ** [SQLITE_DBSTATUS options], that
                   6264: ** determines the parameter to interrogate.  The set of 
                   6265: ** [SQLITE_DBSTATUS options] is likely
                   6266: ** to grow in future releases of SQLite.
                   6267: **
                   6268: ** ^The current value of the requested parameter is written into *pCur
                   6269: ** and the highest instantaneous value is written into *pHiwtr.  ^If
                   6270: ** the resetFlg is true, then the highest instantaneous value is
                   6271: ** reset back down to the current value.
                   6272: **
                   6273: ** ^The sqlite3_db_status() routine returns SQLITE_OK on success and a
                   6274: ** non-zero [error code] on failure.
                   6275: **
                   6276: ** See also: [sqlite3_status()] and [sqlite3_stmt_status()].
                   6277: */
                   6278: SQLITE_API int sqlite3_db_status(sqlite3*, int op, int *pCur, int *pHiwtr, int resetFlg);
                   6279: 
                   6280: /*
                   6281: ** CAPI3REF: Status Parameters for database connections
                   6282: ** KEYWORDS: {SQLITE_DBSTATUS options}
                   6283: **
                   6284: ** These constants are the available integer "verbs" that can be passed as
                   6285: ** the second argument to the [sqlite3_db_status()] interface.
                   6286: **
                   6287: ** New verbs may be added in future releases of SQLite. Existing verbs
                   6288: ** might be discontinued. Applications should check the return code from
                   6289: ** [sqlite3_db_status()] to make sure that the call worked.
                   6290: ** The [sqlite3_db_status()] interface will return a non-zero error code
                   6291: ** if a discontinued or unsupported verb is invoked.
                   6292: **
                   6293: ** <dl>
                   6294: ** [[SQLITE_DBSTATUS_LOOKASIDE_USED]] ^(<dt>SQLITE_DBSTATUS_LOOKASIDE_USED</dt>
                   6295: ** <dd>This parameter returns the number of lookaside memory slots currently
                   6296: ** checked out.</dd>)^
                   6297: **
                   6298: ** [[SQLITE_DBSTATUS_LOOKASIDE_HIT]] ^(<dt>SQLITE_DBSTATUS_LOOKASIDE_HIT</dt>
                   6299: ** <dd>This parameter returns the number malloc attempts that were 
                   6300: ** satisfied using lookaside memory. Only the high-water value is meaningful;
                   6301: ** the current value is always zero.)^
                   6302: **
                   6303: ** [[SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE]]
                   6304: ** ^(<dt>SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE</dt>
                   6305: ** <dd>This parameter returns the number malloc attempts that might have
                   6306: ** been satisfied using lookaside memory but failed due to the amount of
                   6307: ** memory requested being larger than the lookaside slot size.
                   6308: ** Only the high-water value is meaningful;
                   6309: ** the current value is always zero.)^
                   6310: **
                   6311: ** [[SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL]]
                   6312: ** ^(<dt>SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL</dt>
                   6313: ** <dd>This parameter returns the number malloc attempts that might have
                   6314: ** been satisfied using lookaside memory but failed due to all lookaside
                   6315: ** memory already being in use.
                   6316: ** Only the high-water value is meaningful;
                   6317: ** the current value is always zero.)^
                   6318: **
                   6319: ** [[SQLITE_DBSTATUS_CACHE_USED]] ^(<dt>SQLITE_DBSTATUS_CACHE_USED</dt>
                   6320: ** <dd>This parameter returns the approximate number of of bytes of heap
                   6321: ** memory used by all pager caches associated with the database connection.)^
                   6322: ** ^The highwater mark associated with SQLITE_DBSTATUS_CACHE_USED is always 0.
                   6323: **
                   6324: ** [[SQLITE_DBSTATUS_SCHEMA_USED]] ^(<dt>SQLITE_DBSTATUS_SCHEMA_USED</dt>
                   6325: ** <dd>This parameter returns the approximate number of of bytes of heap
                   6326: ** memory used to store the schema for all databases associated
                   6327: ** with the connection - main, temp, and any [ATTACH]-ed databases.)^ 
                   6328: ** ^The full amount of memory used by the schemas is reported, even if the
                   6329: ** schema memory is shared with other database connections due to
                   6330: ** [shared cache mode] being enabled.
                   6331: ** ^The highwater mark associated with SQLITE_DBSTATUS_SCHEMA_USED is always 0.
                   6332: **
                   6333: ** [[SQLITE_DBSTATUS_STMT_USED]] ^(<dt>SQLITE_DBSTATUS_STMT_USED</dt>
                   6334: ** <dd>This parameter returns the approximate number of of bytes of heap
                   6335: ** and lookaside memory used by all prepared statements associated with
                   6336: ** the database connection.)^
                   6337: ** ^The highwater mark associated with SQLITE_DBSTATUS_STMT_USED is always 0.
                   6338: ** </dd>
                   6339: ** </dl>
                   6340: */
                   6341: #define SQLITE_DBSTATUS_LOOKASIDE_USED       0
                   6342: #define SQLITE_DBSTATUS_CACHE_USED           1
                   6343: #define SQLITE_DBSTATUS_SCHEMA_USED          2
                   6344: #define SQLITE_DBSTATUS_STMT_USED            3
                   6345: #define SQLITE_DBSTATUS_LOOKASIDE_HIT        4
                   6346: #define SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE  5
                   6347: #define SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL  6
                   6348: #define SQLITE_DBSTATUS_MAX                  6   /* Largest defined DBSTATUS */
                   6349: 
                   6350: 
                   6351: /*
                   6352: ** CAPI3REF: Prepared Statement Status
                   6353: **
                   6354: ** ^(Each prepared statement maintains various
                   6355: ** [SQLITE_STMTSTATUS counters] that measure the number
                   6356: ** of times it has performed specific operations.)^  These counters can
                   6357: ** be used to monitor the performance characteristics of the prepared
                   6358: ** statements.  For example, if the number of table steps greatly exceeds
                   6359: ** the number of table searches or result rows, that would tend to indicate
                   6360: ** that the prepared statement is using a full table scan rather than
                   6361: ** an index.  
                   6362: **
                   6363: ** ^(This interface is used to retrieve and reset counter values from
                   6364: ** a [prepared statement].  The first argument is the prepared statement
                   6365: ** object to be interrogated.  The second argument
                   6366: ** is an integer code for a specific [SQLITE_STMTSTATUS counter]
                   6367: ** to be interrogated.)^
                   6368: ** ^The current value of the requested counter is returned.
                   6369: ** ^If the resetFlg is true, then the counter is reset to zero after this
                   6370: ** interface call returns.
                   6371: **
                   6372: ** See also: [sqlite3_status()] and [sqlite3_db_status()].
                   6373: */
                   6374: SQLITE_API int sqlite3_stmt_status(sqlite3_stmt*, int op,int resetFlg);
                   6375: 
                   6376: /*
                   6377: ** CAPI3REF: Status Parameters for prepared statements
                   6378: ** KEYWORDS: {SQLITE_STMTSTATUS counter} {SQLITE_STMTSTATUS counters}
                   6379: **
                   6380: ** These preprocessor macros define integer codes that name counter
                   6381: ** values associated with the [sqlite3_stmt_status()] interface.
                   6382: ** The meanings of the various counters are as follows:
                   6383: **
                   6384: ** <dl>
                   6385: ** [[SQLITE_STMTSTATUS_FULLSCAN_STEP]] <dt>SQLITE_STMTSTATUS_FULLSCAN_STEP</dt>
                   6386: ** <dd>^This is the number of times that SQLite has stepped forward in
                   6387: ** a table as part of a full table scan.  Large numbers for this counter
                   6388: ** may indicate opportunities for performance improvement through 
                   6389: ** careful use of indices.</dd>
                   6390: **
                   6391: ** [[SQLITE_STMTSTATUS_SORT]] <dt>SQLITE_STMTSTATUS_SORT</dt>
                   6392: ** <dd>^This is the number of sort operations that have occurred.
                   6393: ** A non-zero value in this counter may indicate an opportunity to
                   6394: ** improvement performance through careful use of indices.</dd>
                   6395: **
                   6396: ** [[SQLITE_STMTSTATUS_AUTOINDEX]] <dt>SQLITE_STMTSTATUS_AUTOINDEX</dt>
                   6397: ** <dd>^This is the number of rows inserted into transient indices that
                   6398: ** were created automatically in order to help joins run faster.
                   6399: ** A non-zero value in this counter may indicate an opportunity to
                   6400: ** improvement performance by adding permanent indices that do not
                   6401: ** need to be reinitialized each time the statement is run.</dd>
                   6402: **
                   6403: ** </dl>
                   6404: */
                   6405: #define SQLITE_STMTSTATUS_FULLSCAN_STEP     1
                   6406: #define SQLITE_STMTSTATUS_SORT              2
                   6407: #define SQLITE_STMTSTATUS_AUTOINDEX         3
                   6408: 
                   6409: /*
                   6410: ** CAPI3REF: Custom Page Cache Object
                   6411: **
                   6412: ** The sqlite3_pcache type is opaque.  It is implemented by
                   6413: ** the pluggable module.  The SQLite core has no knowledge of
                   6414: ** its size or internal structure and never deals with the
                   6415: ** sqlite3_pcache object except by holding and passing pointers
                   6416: ** to the object.
                   6417: **
                   6418: ** See [sqlite3_pcache_methods] for additional information.
                   6419: */
                   6420: typedef struct sqlite3_pcache sqlite3_pcache;
                   6421: 
                   6422: /*
                   6423: ** CAPI3REF: Application Defined Page Cache.
                   6424: ** KEYWORDS: {page cache}
                   6425: **
                   6426: ** ^(The [sqlite3_config]([SQLITE_CONFIG_PCACHE], ...) interface can
                   6427: ** register an alternative page cache implementation by passing in an 
                   6428: ** instance of the sqlite3_pcache_methods structure.)^
                   6429: ** In many applications, most of the heap memory allocated by 
                   6430: ** SQLite is used for the page cache.
                   6431: ** By implementing a 
                   6432: ** custom page cache using this API, an application can better control
                   6433: ** the amount of memory consumed by SQLite, the way in which 
                   6434: ** that memory is allocated and released, and the policies used to 
                   6435: ** determine exactly which parts of a database file are cached and for 
                   6436: ** how long.
                   6437: **
                   6438: ** The alternative page cache mechanism is an
                   6439: ** extreme measure that is only needed by the most demanding applications.
                   6440: ** The built-in page cache is recommended for most uses.
                   6441: **
                   6442: ** ^(The contents of the sqlite3_pcache_methods structure are copied to an
                   6443: ** internal buffer by SQLite within the call to [sqlite3_config].  Hence
                   6444: ** the application may discard the parameter after the call to
                   6445: ** [sqlite3_config()] returns.)^
                   6446: **
                   6447: ** [[the xInit() page cache method]]
                   6448: ** ^(The xInit() method is called once for each effective 
                   6449: ** call to [sqlite3_initialize()])^
                   6450: ** (usually only once during the lifetime of the process). ^(The xInit()
                   6451: ** method is passed a copy of the sqlite3_pcache_methods.pArg value.)^
                   6452: ** The intent of the xInit() method is to set up global data structures 
                   6453: ** required by the custom page cache implementation. 
                   6454: ** ^(If the xInit() method is NULL, then the 
                   6455: ** built-in default page cache is used instead of the application defined
                   6456: ** page cache.)^
                   6457: **
                   6458: ** [[the xShutdown() page cache method]]
                   6459: ** ^The xShutdown() method is called by [sqlite3_shutdown()].
                   6460: ** It can be used to clean up 
                   6461: ** any outstanding resources before process shutdown, if required.
                   6462: ** ^The xShutdown() method may be NULL.
                   6463: **
                   6464: ** ^SQLite automatically serializes calls to the xInit method,
                   6465: ** so the xInit method need not be threadsafe.  ^The
                   6466: ** xShutdown method is only called from [sqlite3_shutdown()] so it does
                   6467: ** not need to be threadsafe either.  All other methods must be threadsafe
                   6468: ** in multithreaded applications.
                   6469: **
                   6470: ** ^SQLite will never invoke xInit() more than once without an intervening
                   6471: ** call to xShutdown().
                   6472: **
                   6473: ** [[the xCreate() page cache methods]]
                   6474: ** ^SQLite invokes the xCreate() method to construct a new cache instance.
                   6475: ** SQLite will typically create one cache instance for each open database file,
                   6476: ** though this is not guaranteed. ^The
                   6477: ** first parameter, szPage, is the size in bytes of the pages that must
                   6478: ** be allocated by the cache.  ^szPage will not be a power of two.  ^szPage
                   6479: ** will the page size of the database file that is to be cached plus an
                   6480: ** increment (here called "R") of less than 250.  SQLite will use the
                   6481: ** extra R bytes on each page to store metadata about the underlying
                   6482: ** database page on disk.  The value of R depends
                   6483: ** on the SQLite version, the target platform, and how SQLite was compiled.
                   6484: ** ^(R is constant for a particular build of SQLite. Except, there are two
                   6485: ** distinct values of R when SQLite is compiled with the proprietary
                   6486: ** ZIPVFS extension.)^  ^The second argument to
                   6487: ** xCreate(), bPurgeable, is true if the cache being created will
                   6488: ** be used to cache database pages of a file stored on disk, or
                   6489: ** false if it is used for an in-memory database. The cache implementation
                   6490: ** does not have to do anything special based with the value of bPurgeable;
                   6491: ** it is purely advisory.  ^On a cache where bPurgeable is false, SQLite will
                   6492: ** never invoke xUnpin() except to deliberately delete a page.
                   6493: ** ^In other words, calls to xUnpin() on a cache with bPurgeable set to
                   6494: ** false will always have the "discard" flag set to true.  
                   6495: ** ^Hence, a cache created with bPurgeable false will
                   6496: ** never contain any unpinned pages.
                   6497: **
                   6498: ** [[the xCachesize() page cache method]]
                   6499: ** ^(The xCachesize() method may be called at any time by SQLite to set the
                   6500: ** suggested maximum cache-size (number of pages stored by) the cache
                   6501: ** instance passed as the first argument. This is the value configured using
                   6502: ** the SQLite "[PRAGMA cache_size]" command.)^  As with the bPurgeable
                   6503: ** parameter, the implementation is not required to do anything with this
                   6504: ** value; it is advisory only.
                   6505: **
                   6506: ** [[the xPagecount() page cache methods]]
                   6507: ** The xPagecount() method must return the number of pages currently
                   6508: ** stored in the cache, both pinned and unpinned.
                   6509: ** 
                   6510: ** [[the xFetch() page cache methods]]
                   6511: ** The xFetch() method locates a page in the cache and returns a pointer to 
                   6512: ** the page, or a NULL pointer.
                   6513: ** A "page", in this context, means a buffer of szPage bytes aligned at an
                   6514: ** 8-byte boundary. The page to be fetched is determined by the key. ^The
                   6515: ** minimum key value is 1.  After it has been retrieved using xFetch, the page 
                   6516: ** is considered to be "pinned".
                   6517: **
                   6518: ** If the requested page is already in the page cache, then the page cache
                   6519: ** implementation must return a pointer to the page buffer with its content
                   6520: ** intact.  If the requested page is not already in the cache, then the
                   6521: ** cache implementation should use the value of the createFlag
                   6522: ** parameter to help it determined what action to take:
                   6523: **
                   6524: ** <table border=1 width=85% align=center>
                   6525: ** <tr><th> createFlag <th> Behaviour when page is not already in cache
                   6526: ** <tr><td> 0 <td> Do not allocate a new page.  Return NULL.
                   6527: ** <tr><td> 1 <td> Allocate a new page if it easy and convenient to do so.
                   6528: **                 Otherwise return NULL.
                   6529: ** <tr><td> 2 <td> Make every effort to allocate a new page.  Only return
                   6530: **                 NULL if allocating a new page is effectively impossible.
                   6531: ** </table>
                   6532: **
                   6533: ** ^(SQLite will normally invoke xFetch() with a createFlag of 0 or 1.  SQLite
                   6534: ** will only use a createFlag of 2 after a prior call with a createFlag of 1
                   6535: ** failed.)^  In between the to xFetch() calls, SQLite may
                   6536: ** attempt to unpin one or more cache pages by spilling the content of
                   6537: ** pinned pages to disk and synching the operating system disk cache.
                   6538: **
                   6539: ** [[the xUnpin() page cache method]]
                   6540: ** ^xUnpin() is called by SQLite with a pointer to a currently pinned page
                   6541: ** as its second argument.  If the third parameter, discard, is non-zero,
                   6542: ** then the page must be evicted from the cache.
                   6543: ** ^If the discard parameter is
                   6544: ** zero, then the page may be discarded or retained at the discretion of
                   6545: ** page cache implementation. ^The page cache implementation
                   6546: ** may choose to evict unpinned pages at any time.
                   6547: **
                   6548: ** The cache must not perform any reference counting. A single 
                   6549: ** call to xUnpin() unpins the page regardless of the number of prior calls 
                   6550: ** to xFetch().
                   6551: **
                   6552: ** [[the xRekey() page cache methods]]
                   6553: ** The xRekey() method is used to change the key value associated with the
                   6554: ** page passed as the second argument. If the cache
                   6555: ** previously contains an entry associated with newKey, it must be
                   6556: ** discarded. ^Any prior cache entry associated with newKey is guaranteed not
                   6557: ** to be pinned.
                   6558: **
                   6559: ** When SQLite calls the xTruncate() method, the cache must discard all
                   6560: ** existing cache entries with page numbers (keys) greater than or equal
                   6561: ** to the value of the iLimit parameter passed to xTruncate(). If any
                   6562: ** of these pages are pinned, they are implicitly unpinned, meaning that
                   6563: ** they can be safely discarded.
                   6564: **
                   6565: ** [[the xDestroy() page cache method]]
                   6566: ** ^The xDestroy() method is used to delete a cache allocated by xCreate().
                   6567: ** All resources associated with the specified cache should be freed. ^After
                   6568: ** calling the xDestroy() method, SQLite considers the [sqlite3_pcache*]
                   6569: ** handle invalid, and will not use it with any other sqlite3_pcache_methods
                   6570: ** functions.
                   6571: */
                   6572: typedef struct sqlite3_pcache_methods sqlite3_pcache_methods;
                   6573: struct sqlite3_pcache_methods {
                   6574:   void *pArg;
                   6575:   int (*xInit)(void*);
                   6576:   void (*xShutdown)(void*);
                   6577:   sqlite3_pcache *(*xCreate)(int szPage, int bPurgeable);
                   6578:   void (*xCachesize)(sqlite3_pcache*, int nCachesize);
                   6579:   int (*xPagecount)(sqlite3_pcache*);
                   6580:   void *(*xFetch)(sqlite3_pcache*, unsigned key, int createFlag);
                   6581:   void (*xUnpin)(sqlite3_pcache*, void*, int discard);
                   6582:   void (*xRekey)(sqlite3_pcache*, void*, unsigned oldKey, unsigned newKey);
                   6583:   void (*xTruncate)(sqlite3_pcache*, unsigned iLimit);
                   6584:   void (*xDestroy)(sqlite3_pcache*);
                   6585: };
                   6586: 
                   6587: /*
                   6588: ** CAPI3REF: Online Backup Object
                   6589: **
                   6590: ** The sqlite3_backup object records state information about an ongoing
                   6591: ** online backup operation.  ^The sqlite3_backup object is created by
                   6592: ** a call to [sqlite3_backup_init()] and is destroyed by a call to
                   6593: ** [sqlite3_backup_finish()].
                   6594: **
                   6595: ** See Also: [Using the SQLite Online Backup API]
                   6596: */
                   6597: typedef struct sqlite3_backup sqlite3_backup;
                   6598: 
                   6599: /*
                   6600: ** CAPI3REF: Online Backup API.
                   6601: **
                   6602: ** The backup API copies the content of one database into another.
                   6603: ** It is useful either for creating backups of databases or
                   6604: ** for copying in-memory databases to or from persistent files. 
                   6605: **
                   6606: ** See Also: [Using the SQLite Online Backup API]
                   6607: **
                   6608: ** ^SQLite holds a write transaction open on the destination database file
                   6609: ** for the duration of the backup operation.
                   6610: ** ^The source database is read-locked only while it is being read;
                   6611: ** it is not locked continuously for the entire backup operation.
                   6612: ** ^Thus, the backup may be performed on a live source database without
                   6613: ** preventing other database connections from
                   6614: ** reading or writing to the source database while the backup is underway.
                   6615: ** 
                   6616: ** ^(To perform a backup operation: 
                   6617: **   <ol>
                   6618: **     <li><b>sqlite3_backup_init()</b> is called once to initialize the
                   6619: **         backup, 
                   6620: **     <li><b>sqlite3_backup_step()</b> is called one or more times to transfer 
                   6621: **         the data between the two databases, and finally
                   6622: **     <li><b>sqlite3_backup_finish()</b> is called to release all resources 
                   6623: **         associated with the backup operation. 
                   6624: **   </ol>)^
                   6625: ** There should be exactly one call to sqlite3_backup_finish() for each
                   6626: ** successful call to sqlite3_backup_init().
                   6627: **
                   6628: ** [[sqlite3_backup_init()]] <b>sqlite3_backup_init()</b>
                   6629: **
                   6630: ** ^The D and N arguments to sqlite3_backup_init(D,N,S,M) are the 
                   6631: ** [database connection] associated with the destination database 
                   6632: ** and the database name, respectively.
                   6633: ** ^The database name is "main" for the main database, "temp" for the
                   6634: ** temporary database, or the name specified after the AS keyword in
                   6635: ** an [ATTACH] statement for an attached database.
                   6636: ** ^The S and M arguments passed to 
                   6637: ** sqlite3_backup_init(D,N,S,M) identify the [database connection]
                   6638: ** and database name of the source database, respectively.
                   6639: ** ^The source and destination [database connections] (parameters S and D)
                   6640: ** must be different or else sqlite3_backup_init(D,N,S,M) will fail with
                   6641: ** an error.
                   6642: **
                   6643: ** ^If an error occurs within sqlite3_backup_init(D,N,S,M), then NULL is
                   6644: ** returned and an error code and error message are stored in the
                   6645: ** destination [database connection] D.
                   6646: ** ^The error code and message for the failed call to sqlite3_backup_init()
                   6647: ** can be retrieved using the [sqlite3_errcode()], [sqlite3_errmsg()], and/or
                   6648: ** [sqlite3_errmsg16()] functions.
                   6649: ** ^A successful call to sqlite3_backup_init() returns a pointer to an
                   6650: ** [sqlite3_backup] object.
                   6651: ** ^The [sqlite3_backup] object may be used with the sqlite3_backup_step() and
                   6652: ** sqlite3_backup_finish() functions to perform the specified backup 
                   6653: ** operation.
                   6654: **
                   6655: ** [[sqlite3_backup_step()]] <b>sqlite3_backup_step()</b>
                   6656: **
                   6657: ** ^Function sqlite3_backup_step(B,N) will copy up to N pages between 
                   6658: ** the source and destination databases specified by [sqlite3_backup] object B.
                   6659: ** ^If N is negative, all remaining source pages are copied. 
                   6660: ** ^If sqlite3_backup_step(B,N) successfully copies N pages and there
                   6661: ** are still more pages to be copied, then the function returns [SQLITE_OK].
                   6662: ** ^If sqlite3_backup_step(B,N) successfully finishes copying all pages
                   6663: ** from source to destination, then it returns [SQLITE_DONE].
                   6664: ** ^If an error occurs while running sqlite3_backup_step(B,N),
                   6665: ** then an [error code] is returned. ^As well as [SQLITE_OK] and
                   6666: ** [SQLITE_DONE], a call to sqlite3_backup_step() may return [SQLITE_READONLY],
                   6667: ** [SQLITE_NOMEM], [SQLITE_BUSY], [SQLITE_LOCKED], or an
                   6668: ** [SQLITE_IOERR_ACCESS | SQLITE_IOERR_XXX] extended error code.
                   6669: **
                   6670: ** ^(The sqlite3_backup_step() might return [SQLITE_READONLY] if
                   6671: ** <ol>
                   6672: ** <li> the destination database was opened read-only, or
                   6673: ** <li> the destination database is using write-ahead-log journaling
                   6674: ** and the destination and source page sizes differ, or
                   6675: ** <li> the destination database is an in-memory database and the
                   6676: ** destination and source page sizes differ.
                   6677: ** </ol>)^
                   6678: **
                   6679: ** ^If sqlite3_backup_step() cannot obtain a required file-system lock, then
                   6680: ** the [sqlite3_busy_handler | busy-handler function]
                   6681: ** is invoked (if one is specified). ^If the 
                   6682: ** busy-handler returns non-zero before the lock is available, then 
                   6683: ** [SQLITE_BUSY] is returned to the caller. ^In this case the call to
                   6684: ** sqlite3_backup_step() can be retried later. ^If the source
                   6685: ** [database connection]
                   6686: ** is being used to write to the source database when sqlite3_backup_step()
                   6687: ** is called, then [SQLITE_LOCKED] is returned immediately. ^Again, in this
                   6688: ** case the call to sqlite3_backup_step() can be retried later on. ^(If
                   6689: ** [SQLITE_IOERR_ACCESS | SQLITE_IOERR_XXX], [SQLITE_NOMEM], or
                   6690: ** [SQLITE_READONLY] is returned, then 
                   6691: ** there is no point in retrying the call to sqlite3_backup_step(). These 
                   6692: ** errors are considered fatal.)^  The application must accept 
                   6693: ** that the backup operation has failed and pass the backup operation handle 
                   6694: ** to the sqlite3_backup_finish() to release associated resources.
                   6695: **
                   6696: ** ^The first call to sqlite3_backup_step() obtains an exclusive lock
                   6697: ** on the destination file. ^The exclusive lock is not released until either 
                   6698: ** sqlite3_backup_finish() is called or the backup operation is complete 
                   6699: ** and sqlite3_backup_step() returns [SQLITE_DONE].  ^Every call to
                   6700: ** sqlite3_backup_step() obtains a [shared lock] on the source database that
                   6701: ** lasts for the duration of the sqlite3_backup_step() call.
                   6702: ** ^Because the source database is not locked between calls to
                   6703: ** sqlite3_backup_step(), the source database may be modified mid-way
                   6704: ** through the backup process.  ^If the source database is modified by an
                   6705: ** external process or via a database connection other than the one being
                   6706: ** used by the backup operation, then the backup will be automatically
                   6707: ** restarted by the next call to sqlite3_backup_step(). ^If the source 
                   6708: ** database is modified by the using the same database connection as is used
                   6709: ** by the backup operation, then the backup database is automatically
                   6710: ** updated at the same time.
                   6711: **
                   6712: ** [[sqlite3_backup_finish()]] <b>sqlite3_backup_finish()</b>
                   6713: **
                   6714: ** When sqlite3_backup_step() has returned [SQLITE_DONE], or when the 
                   6715: ** application wishes to abandon the backup operation, the application
                   6716: ** should destroy the [sqlite3_backup] by passing it to sqlite3_backup_finish().
                   6717: ** ^The sqlite3_backup_finish() interfaces releases all
                   6718: ** resources associated with the [sqlite3_backup] object. 
                   6719: ** ^If sqlite3_backup_step() has not yet returned [SQLITE_DONE], then any
                   6720: ** active write-transaction on the destination database is rolled back.
                   6721: ** The [sqlite3_backup] object is invalid
                   6722: ** and may not be used following a call to sqlite3_backup_finish().
                   6723: **
                   6724: ** ^The value returned by sqlite3_backup_finish is [SQLITE_OK] if no
                   6725: ** sqlite3_backup_step() errors occurred, regardless or whether or not
                   6726: ** sqlite3_backup_step() completed.
                   6727: ** ^If an out-of-memory condition or IO error occurred during any prior
                   6728: ** sqlite3_backup_step() call on the same [sqlite3_backup] object, then
                   6729: ** sqlite3_backup_finish() returns the corresponding [error code].
                   6730: **
                   6731: ** ^A return of [SQLITE_BUSY] or [SQLITE_LOCKED] from sqlite3_backup_step()
                   6732: ** is not a permanent error and does not affect the return value of
                   6733: ** sqlite3_backup_finish().
                   6734: **
                   6735: ** [[sqlite3_backup__remaining()]] [[sqlite3_backup_pagecount()]]
                   6736: ** <b>sqlite3_backup_remaining() and sqlite3_backup_pagecount()</b>
                   6737: **
                   6738: ** ^Each call to sqlite3_backup_step() sets two values inside
                   6739: ** the [sqlite3_backup] object: the number of pages still to be backed
                   6740: ** up and the total number of pages in the source database file.
                   6741: ** The sqlite3_backup_remaining() and sqlite3_backup_pagecount() interfaces
                   6742: ** retrieve these two values, respectively.
                   6743: **
                   6744: ** ^The values returned by these functions are only updated by
                   6745: ** sqlite3_backup_step(). ^If the source database is modified during a backup
                   6746: ** operation, then the values are not updated to account for any extra
                   6747: ** pages that need to be updated or the size of the source database file
                   6748: ** changing.
                   6749: **
                   6750: ** <b>Concurrent Usage of Database Handles</b>
                   6751: **
                   6752: ** ^The source [database connection] may be used by the application for other
                   6753: ** purposes while a backup operation is underway or being initialized.
                   6754: ** ^If SQLite is compiled and configured to support threadsafe database
                   6755: ** connections, then the source database connection may be used concurrently
                   6756: ** from within other threads.
                   6757: **
                   6758: ** However, the application must guarantee that the destination 
                   6759: ** [database connection] is not passed to any other API (by any thread) after 
                   6760: ** sqlite3_backup_init() is called and before the corresponding call to
                   6761: ** sqlite3_backup_finish().  SQLite does not currently check to see
                   6762: ** if the application incorrectly accesses the destination [database connection]
                   6763: ** and so no error code is reported, but the operations may malfunction
                   6764: ** nevertheless.  Use of the destination database connection while a
                   6765: ** backup is in progress might also also cause a mutex deadlock.
                   6766: **
                   6767: ** If running in [shared cache mode], the application must
                   6768: ** guarantee that the shared cache used by the destination database
                   6769: ** is not accessed while the backup is running. In practice this means
                   6770: ** that the application must guarantee that the disk file being 
                   6771: ** backed up to is not accessed by any connection within the process,
                   6772: ** not just the specific connection that was passed to sqlite3_backup_init().
                   6773: **
                   6774: ** The [sqlite3_backup] object itself is partially threadsafe. Multiple 
                   6775: ** threads may safely make multiple concurrent calls to sqlite3_backup_step().
                   6776: ** However, the sqlite3_backup_remaining() and sqlite3_backup_pagecount()
                   6777: ** APIs are not strictly speaking threadsafe. If they are invoked at the
                   6778: ** same time as another thread is invoking sqlite3_backup_step() it is
                   6779: ** possible that they return invalid values.
                   6780: */
                   6781: SQLITE_API sqlite3_backup *sqlite3_backup_init(
                   6782:   sqlite3 *pDest,                        /* Destination database handle */
                   6783:   const char *zDestName,                 /* Destination database name */
                   6784:   sqlite3 *pSource,                      /* Source database handle */
                   6785:   const char *zSourceName                /* Source database name */
                   6786: );
                   6787: SQLITE_API int sqlite3_backup_step(sqlite3_backup *p, int nPage);
                   6788: SQLITE_API int sqlite3_backup_finish(sqlite3_backup *p);
                   6789: SQLITE_API int sqlite3_backup_remaining(sqlite3_backup *p);
                   6790: SQLITE_API int sqlite3_backup_pagecount(sqlite3_backup *p);
                   6791: 
                   6792: /*
                   6793: ** CAPI3REF: Unlock Notification
                   6794: **
                   6795: ** ^When running in shared-cache mode, a database operation may fail with
                   6796: ** an [SQLITE_LOCKED] error if the required locks on the shared-cache or
                   6797: ** individual tables within the shared-cache cannot be obtained. See
                   6798: ** [SQLite Shared-Cache Mode] for a description of shared-cache locking. 
                   6799: ** ^This API may be used to register a callback that SQLite will invoke 
                   6800: ** when the connection currently holding the required lock relinquishes it.
                   6801: ** ^This API is only available if the library was compiled with the
                   6802: ** [SQLITE_ENABLE_UNLOCK_NOTIFY] C-preprocessor symbol defined.
                   6803: **
                   6804: ** See Also: [Using the SQLite Unlock Notification Feature].
                   6805: **
                   6806: ** ^Shared-cache locks are released when a database connection concludes
                   6807: ** its current transaction, either by committing it or rolling it back. 
                   6808: **
                   6809: ** ^When a connection (known as the blocked connection) fails to obtain a
                   6810: ** shared-cache lock and SQLITE_LOCKED is returned to the caller, the
                   6811: ** identity of the database connection (the blocking connection) that
                   6812: ** has locked the required resource is stored internally. ^After an 
                   6813: ** application receives an SQLITE_LOCKED error, it may call the
                   6814: ** sqlite3_unlock_notify() method with the blocked connection handle as 
                   6815: ** the first argument to register for a callback that will be invoked
                   6816: ** when the blocking connections current transaction is concluded. ^The
                   6817: ** callback is invoked from within the [sqlite3_step] or [sqlite3_close]
                   6818: ** call that concludes the blocking connections transaction.
                   6819: **
                   6820: ** ^(If sqlite3_unlock_notify() is called in a multi-threaded application,
                   6821: ** there is a chance that the blocking connection will have already
                   6822: ** concluded its transaction by the time sqlite3_unlock_notify() is invoked.
                   6823: ** If this happens, then the specified callback is invoked immediately,
                   6824: ** from within the call to sqlite3_unlock_notify().)^
                   6825: **
                   6826: ** ^If the blocked connection is attempting to obtain a write-lock on a
                   6827: ** shared-cache table, and more than one other connection currently holds
                   6828: ** a read-lock on the same table, then SQLite arbitrarily selects one of 
                   6829: ** the other connections to use as the blocking connection.
                   6830: **
                   6831: ** ^(There may be at most one unlock-notify callback registered by a 
                   6832: ** blocked connection. If sqlite3_unlock_notify() is called when the
                   6833: ** blocked connection already has a registered unlock-notify callback,
                   6834: ** then the new callback replaces the old.)^ ^If sqlite3_unlock_notify() is
                   6835: ** called with a NULL pointer as its second argument, then any existing
                   6836: ** unlock-notify callback is canceled. ^The blocked connections 
                   6837: ** unlock-notify callback may also be canceled by closing the blocked
                   6838: ** connection using [sqlite3_close()].
                   6839: **
                   6840: ** The unlock-notify callback is not reentrant. If an application invokes
                   6841: ** any sqlite3_xxx API functions from within an unlock-notify callback, a
                   6842: ** crash or deadlock may be the result.
                   6843: **
                   6844: ** ^Unless deadlock is detected (see below), sqlite3_unlock_notify() always
                   6845: ** returns SQLITE_OK.
                   6846: **
                   6847: ** <b>Callback Invocation Details</b>
                   6848: **
                   6849: ** When an unlock-notify callback is registered, the application provides a 
                   6850: ** single void* pointer that is passed to the callback when it is invoked.
                   6851: ** However, the signature of the callback function allows SQLite to pass
                   6852: ** it an array of void* context pointers. The first argument passed to
                   6853: ** an unlock-notify callback is a pointer to an array of void* pointers,
                   6854: ** and the second is the number of entries in the array.
                   6855: **
                   6856: ** When a blocking connections transaction is concluded, there may be
                   6857: ** more than one blocked connection that has registered for an unlock-notify
                   6858: ** callback. ^If two or more such blocked connections have specified the
                   6859: ** same callback function, then instead of invoking the callback function
                   6860: ** multiple times, it is invoked once with the set of void* context pointers
                   6861: ** specified by the blocked connections bundled together into an array.
                   6862: ** This gives the application an opportunity to prioritize any actions 
                   6863: ** related to the set of unblocked database connections.
                   6864: **
                   6865: ** <b>Deadlock Detection</b>
                   6866: **
                   6867: ** Assuming that after registering for an unlock-notify callback a 
                   6868: ** database waits for the callback to be issued before taking any further
                   6869: ** action (a reasonable assumption), then using this API may cause the
                   6870: ** application to deadlock. For example, if connection X is waiting for
                   6871: ** connection Y's transaction to be concluded, and similarly connection
                   6872: ** Y is waiting on connection X's transaction, then neither connection
                   6873: ** will proceed and the system may remain deadlocked indefinitely.
                   6874: **
                   6875: ** To avoid this scenario, the sqlite3_unlock_notify() performs deadlock
                   6876: ** detection. ^If a given call to sqlite3_unlock_notify() would put the
                   6877: ** system in a deadlocked state, then SQLITE_LOCKED is returned and no
                   6878: ** unlock-notify callback is registered. The system is said to be in
                   6879: ** a deadlocked state if connection A has registered for an unlock-notify
                   6880: ** callback on the conclusion of connection B's transaction, and connection
                   6881: ** B has itself registered for an unlock-notify callback when connection
                   6882: ** A's transaction is concluded. ^Indirect deadlock is also detected, so
                   6883: ** the system is also considered to be deadlocked if connection B has
                   6884: ** registered for an unlock-notify callback on the conclusion of connection
                   6885: ** C's transaction, where connection C is waiting on connection A. ^Any
                   6886: ** number of levels of indirection are allowed.
                   6887: **
                   6888: ** <b>The "DROP TABLE" Exception</b>
                   6889: **
                   6890: ** When a call to [sqlite3_step()] returns SQLITE_LOCKED, it is almost 
                   6891: ** always appropriate to call sqlite3_unlock_notify(). There is however,
                   6892: ** one exception. When executing a "DROP TABLE" or "DROP INDEX" statement,
                   6893: ** SQLite checks if there are any currently executing SELECT statements
                   6894: ** that belong to the same connection. If there are, SQLITE_LOCKED is
                   6895: ** returned. In this case there is no "blocking connection", so invoking
                   6896: ** sqlite3_unlock_notify() results in the unlock-notify callback being
                   6897: ** invoked immediately. If the application then re-attempts the "DROP TABLE"
                   6898: ** or "DROP INDEX" query, an infinite loop might be the result.
                   6899: **
                   6900: ** One way around this problem is to check the extended error code returned
                   6901: ** by an sqlite3_step() call. ^(If there is a blocking connection, then the
                   6902: ** extended error code is set to SQLITE_LOCKED_SHAREDCACHE. Otherwise, in
                   6903: ** the special "DROP TABLE/INDEX" case, the extended error code is just 
                   6904: ** SQLITE_LOCKED.)^
                   6905: */
                   6906: SQLITE_API int sqlite3_unlock_notify(
                   6907:   sqlite3 *pBlocked,                          /* Waiting connection */
                   6908:   void (*xNotify)(void **apArg, int nArg),    /* Callback function to invoke */
                   6909:   void *pNotifyArg                            /* Argument to pass to xNotify */
                   6910: );
                   6911: 
                   6912: 
                   6913: /*
                   6914: ** CAPI3REF: String Comparison
                   6915: **
                   6916: ** ^The [sqlite3_strnicmp()] API allows applications and extensions to
                   6917: ** compare the contents of two buffers containing UTF-8 strings in a
                   6918: ** case-independent fashion, using the same definition of case independence 
                   6919: ** that SQLite uses internally when comparing identifiers.
                   6920: */
                   6921: SQLITE_API int sqlite3_strnicmp(const char *, const char *, int);
                   6922: 
                   6923: /*
                   6924: ** CAPI3REF: Error Logging Interface
                   6925: **
                   6926: ** ^The [sqlite3_log()] interface writes a message into the error log
                   6927: ** established by the [SQLITE_CONFIG_LOG] option to [sqlite3_config()].
                   6928: ** ^If logging is enabled, the zFormat string and subsequent arguments are
                   6929: ** used with [sqlite3_snprintf()] to generate the final output string.
                   6930: **
                   6931: ** The sqlite3_log() interface is intended for use by extensions such as
                   6932: ** virtual tables, collating functions, and SQL functions.  While there is
                   6933: ** nothing to prevent an application from calling sqlite3_log(), doing so
                   6934: ** is considered bad form.
                   6935: **
                   6936: ** The zFormat string must not be NULL.
                   6937: **
                   6938: ** To avoid deadlocks and other threading problems, the sqlite3_log() routine
                   6939: ** will not use dynamically allocated memory.  The log message is stored in
                   6940: ** a fixed-length buffer on the stack.  If the log message is longer than
                   6941: ** a few hundred characters, it will be truncated to the length of the
                   6942: ** buffer.
                   6943: */
                   6944: SQLITE_API void sqlite3_log(int iErrCode, const char *zFormat, ...);
                   6945: 
                   6946: /*
                   6947: ** CAPI3REF: Write-Ahead Log Commit Hook
                   6948: **
                   6949: ** ^The [sqlite3_wal_hook()] function is used to register a callback that
                   6950: ** will be invoked each time a database connection commits data to a
                   6951: ** [write-ahead log] (i.e. whenever a transaction is committed in
                   6952: ** [journal_mode | journal_mode=WAL mode]). 
                   6953: **
                   6954: ** ^The callback is invoked by SQLite after the commit has taken place and 
                   6955: ** the associated write-lock on the database released, so the implementation 
                   6956: ** may read, write or [checkpoint] the database as required.
                   6957: **
                   6958: ** ^The first parameter passed to the callback function when it is invoked
                   6959: ** is a copy of the third parameter passed to sqlite3_wal_hook() when
                   6960: ** registering the callback. ^The second is a copy of the database handle.
                   6961: ** ^The third parameter is the name of the database that was written to -
                   6962: ** either "main" or the name of an [ATTACH]-ed database. ^The fourth parameter
                   6963: ** is the number of pages currently in the write-ahead log file,
                   6964: ** including those that were just committed.
                   6965: **
                   6966: ** The callback function should normally return [SQLITE_OK].  ^If an error
                   6967: ** code is returned, that error will propagate back up through the
                   6968: ** SQLite code base to cause the statement that provoked the callback
                   6969: ** to report an error, though the commit will have still occurred. If the
                   6970: ** callback returns [SQLITE_ROW] or [SQLITE_DONE], or if it returns a value
                   6971: ** that does not correspond to any valid SQLite error code, the results
                   6972: ** are undefined.
                   6973: **
                   6974: ** A single database handle may have at most a single write-ahead log callback 
                   6975: ** registered at one time. ^Calling [sqlite3_wal_hook()] replaces any
                   6976: ** previously registered write-ahead log callback. ^Note that the
                   6977: ** [sqlite3_wal_autocheckpoint()] interface and the
                   6978: ** [wal_autocheckpoint pragma] both invoke [sqlite3_wal_hook()] and will
                   6979: ** those overwrite any prior [sqlite3_wal_hook()] settings.
                   6980: */
                   6981: SQLITE_API void *sqlite3_wal_hook(
                   6982:   sqlite3*, 
                   6983:   int(*)(void *,sqlite3*,const char*,int),
                   6984:   void*
                   6985: );
                   6986: 
                   6987: /*
                   6988: ** CAPI3REF: Configure an auto-checkpoint
                   6989: **
                   6990: ** ^The [sqlite3_wal_autocheckpoint(D,N)] is a wrapper around
                   6991: ** [sqlite3_wal_hook()] that causes any database on [database connection] D
                   6992: ** to automatically [checkpoint]
                   6993: ** after committing a transaction if there are N or
                   6994: ** more frames in the [write-ahead log] file.  ^Passing zero or 
                   6995: ** a negative value as the nFrame parameter disables automatic
                   6996: ** checkpoints entirely.
                   6997: **
                   6998: ** ^The callback registered by this function replaces any existing callback
                   6999: ** registered using [sqlite3_wal_hook()].  ^Likewise, registering a callback
                   7000: ** using [sqlite3_wal_hook()] disables the automatic checkpoint mechanism
                   7001: ** configured by this function.
                   7002: **
                   7003: ** ^The [wal_autocheckpoint pragma] can be used to invoke this interface
                   7004: ** from SQL.
                   7005: **
                   7006: ** ^Every new [database connection] defaults to having the auto-checkpoint
                   7007: ** enabled with a threshold of 1000 or [SQLITE_DEFAULT_WAL_AUTOCHECKPOINT]
                   7008: ** pages.  The use of this interface
                   7009: ** is only necessary if the default setting is found to be suboptimal
                   7010: ** for a particular application.
                   7011: */
                   7012: SQLITE_API int sqlite3_wal_autocheckpoint(sqlite3 *db, int N);
                   7013: 
                   7014: /*
                   7015: ** CAPI3REF: Checkpoint a database
                   7016: **
                   7017: ** ^The [sqlite3_wal_checkpoint(D,X)] interface causes database named X
                   7018: ** on [database connection] D to be [checkpointed].  ^If X is NULL or an
                   7019: ** empty string, then a checkpoint is run on all databases of
                   7020: ** connection D.  ^If the database connection D is not in
                   7021: ** [WAL | write-ahead log mode] then this interface is a harmless no-op.
                   7022: **
                   7023: ** ^The [wal_checkpoint pragma] can be used to invoke this interface
                   7024: ** from SQL.  ^The [sqlite3_wal_autocheckpoint()] interface and the
                   7025: ** [wal_autocheckpoint pragma] can be used to cause this interface to be
                   7026: ** run whenever the WAL reaches a certain size threshold.
                   7027: **
                   7028: ** See also: [sqlite3_wal_checkpoint_v2()]
                   7029: */
                   7030: SQLITE_API int sqlite3_wal_checkpoint(sqlite3 *db, const char *zDb);
                   7031: 
                   7032: /*
                   7033: ** CAPI3REF: Checkpoint a database
                   7034: **
                   7035: ** Run a checkpoint operation on WAL database zDb attached to database 
                   7036: ** handle db. The specific operation is determined by the value of the 
                   7037: ** eMode parameter:
                   7038: **
                   7039: ** <dl>
                   7040: ** <dt>SQLITE_CHECKPOINT_PASSIVE<dd>
                   7041: **   Checkpoint as many frames as possible without waiting for any database 
                   7042: **   readers or writers to finish. Sync the db file if all frames in the log
                   7043: **   are checkpointed. This mode is the same as calling 
                   7044: **   sqlite3_wal_checkpoint(). The busy-handler callback is never invoked.
                   7045: **
                   7046: ** <dt>SQLITE_CHECKPOINT_FULL<dd>
                   7047: **   This mode blocks (calls the busy-handler callback) until there is no
                   7048: **   database writer and all readers are reading from the most recent database
                   7049: **   snapshot. It then checkpoints all frames in the log file and syncs the
                   7050: **   database file. This call blocks database writers while it is running,
                   7051: **   but not database readers.
                   7052: **
                   7053: ** <dt>SQLITE_CHECKPOINT_RESTART<dd>
                   7054: **   This mode works the same way as SQLITE_CHECKPOINT_FULL, except after 
                   7055: **   checkpointing the log file it blocks (calls the busy-handler callback)
                   7056: **   until all readers are reading from the database file only. This ensures 
                   7057: **   that the next client to write to the database file restarts the log file 
                   7058: **   from the beginning. This call blocks database writers while it is running,
                   7059: **   but not database readers.
                   7060: ** </dl>
                   7061: **
                   7062: ** If pnLog is not NULL, then *pnLog is set to the total number of frames in
                   7063: ** the log file before returning. If pnCkpt is not NULL, then *pnCkpt is set to
                   7064: ** the total number of checkpointed frames (including any that were already
                   7065: ** checkpointed when this function is called). *pnLog and *pnCkpt may be
                   7066: ** populated even if sqlite3_wal_checkpoint_v2() returns other than SQLITE_OK.
                   7067: ** If no values are available because of an error, they are both set to -1
                   7068: ** before returning to communicate this to the caller.
                   7069: **
                   7070: ** All calls obtain an exclusive "checkpoint" lock on the database file. If
                   7071: ** any other process is running a checkpoint operation at the same time, the 
                   7072: ** lock cannot be obtained and SQLITE_BUSY is returned. Even if there is a 
                   7073: ** busy-handler configured, it will not be invoked in this case.
                   7074: **
                   7075: ** The SQLITE_CHECKPOINT_FULL and RESTART modes also obtain the exclusive 
                   7076: ** "writer" lock on the database file. If the writer lock cannot be obtained
                   7077: ** immediately, and a busy-handler is configured, it is invoked and the writer
                   7078: ** lock retried until either the busy-handler returns 0 or the lock is
                   7079: ** successfully obtained. The busy-handler is also invoked while waiting for
                   7080: ** database readers as described above. If the busy-handler returns 0 before
                   7081: ** the writer lock is obtained or while waiting for database readers, the
                   7082: ** checkpoint operation proceeds from that point in the same way as 
                   7083: ** SQLITE_CHECKPOINT_PASSIVE - checkpointing as many frames as possible 
                   7084: ** without blocking any further. SQLITE_BUSY is returned in this case.
                   7085: **
                   7086: ** If parameter zDb is NULL or points to a zero length string, then the
                   7087: ** specified operation is attempted on all WAL databases. In this case the
                   7088: ** values written to output parameters *pnLog and *pnCkpt are undefined. If 
                   7089: ** an SQLITE_BUSY error is encountered when processing one or more of the 
                   7090: ** attached WAL databases, the operation is still attempted on any remaining 
                   7091: ** attached databases and SQLITE_BUSY is returned to the caller. If any other 
                   7092: ** error occurs while processing an attached database, processing is abandoned 
                   7093: ** and the error code returned to the caller immediately. If no error 
                   7094: ** (SQLITE_BUSY or otherwise) is encountered while processing the attached 
                   7095: ** databases, SQLITE_OK is returned.
                   7096: **
                   7097: ** If database zDb is the name of an attached database that is not in WAL
                   7098: ** mode, SQLITE_OK is returned and both *pnLog and *pnCkpt set to -1. If
                   7099: ** zDb is not NULL (or a zero length string) and is not the name of any
                   7100: ** attached database, SQLITE_ERROR is returned to the caller.
                   7101: */
                   7102: SQLITE_API int sqlite3_wal_checkpoint_v2(
                   7103:   sqlite3 *db,                    /* Database handle */
                   7104:   const char *zDb,                /* Name of attached database (or NULL) */
                   7105:   int eMode,                      /* SQLITE_CHECKPOINT_* value */
                   7106:   int *pnLog,                     /* OUT: Size of WAL log in frames */
                   7107:   int *pnCkpt                     /* OUT: Total number of frames checkpointed */
                   7108: );
                   7109: 
                   7110: /*
                   7111: ** CAPI3REF: Checkpoint operation parameters
                   7112: **
                   7113: ** These constants can be used as the 3rd parameter to
                   7114: ** [sqlite3_wal_checkpoint_v2()].  See the [sqlite3_wal_checkpoint_v2()]
                   7115: ** documentation for additional information about the meaning and use of
                   7116: ** each of these values.
                   7117: */
                   7118: #define SQLITE_CHECKPOINT_PASSIVE 0
                   7119: #define SQLITE_CHECKPOINT_FULL    1
                   7120: #define SQLITE_CHECKPOINT_RESTART 2
                   7121: 
                   7122: /*
                   7123: ** CAPI3REF: Virtual Table Interface Configuration
                   7124: **
                   7125: ** This function may be called by either the [xConnect] or [xCreate] method
                   7126: ** of a [virtual table] implementation to configure
                   7127: ** various facets of the virtual table interface.
                   7128: **
                   7129: ** If this interface is invoked outside the context of an xConnect or
                   7130: ** xCreate virtual table method then the behavior is undefined.
                   7131: **
                   7132: ** At present, there is only one option that may be configured using
                   7133: ** this function. (See [SQLITE_VTAB_CONSTRAINT_SUPPORT].)  Further options
                   7134: ** may be added in the future.
                   7135: */
                   7136: SQLITE_API int sqlite3_vtab_config(sqlite3*, int op, ...);
                   7137: 
                   7138: /*
                   7139: ** CAPI3REF: Virtual Table Configuration Options
                   7140: **
                   7141: ** These macros define the various options to the
                   7142: ** [sqlite3_vtab_config()] interface that [virtual table] implementations
                   7143: ** can use to customize and optimize their behavior.
                   7144: **
                   7145: ** <dl>
                   7146: ** <dt>SQLITE_VTAB_CONSTRAINT_SUPPORT
                   7147: ** <dd>Calls of the form
                   7148: ** [sqlite3_vtab_config](db,SQLITE_VTAB_CONSTRAINT_SUPPORT,X) are supported,
                   7149: ** where X is an integer.  If X is zero, then the [virtual table] whose
                   7150: ** [xCreate] or [xConnect] method invoked [sqlite3_vtab_config()] does not
                   7151: ** support constraints.  In this configuration (which is the default) if
                   7152: ** a call to the [xUpdate] method returns [SQLITE_CONSTRAINT], then the entire
                   7153: ** statement is rolled back as if [ON CONFLICT | OR ABORT] had been
                   7154: ** specified as part of the users SQL statement, regardless of the actual
                   7155: ** ON CONFLICT mode specified.
                   7156: **
                   7157: ** If X is non-zero, then the virtual table implementation guarantees
                   7158: ** that if [xUpdate] returns [SQLITE_CONSTRAINT], it will do so before
                   7159: ** any modifications to internal or persistent data structures have been made.
                   7160: ** If the [ON CONFLICT] mode is ABORT, FAIL, IGNORE or ROLLBACK, SQLite 
                   7161: ** is able to roll back a statement or database transaction, and abandon
                   7162: ** or continue processing the current SQL statement as appropriate. 
                   7163: ** If the ON CONFLICT mode is REPLACE and the [xUpdate] method returns
                   7164: ** [SQLITE_CONSTRAINT], SQLite handles this as if the ON CONFLICT mode
                   7165: ** had been ABORT.
                   7166: **
                   7167: ** Virtual table implementations that are required to handle OR REPLACE
                   7168: ** must do so within the [xUpdate] method. If a call to the 
                   7169: ** [sqlite3_vtab_on_conflict()] function indicates that the current ON 
                   7170: ** CONFLICT policy is REPLACE, the virtual table implementation should 
                   7171: ** silently replace the appropriate rows within the xUpdate callback and
                   7172: ** return SQLITE_OK. Or, if this is not possible, it may return
                   7173: ** SQLITE_CONSTRAINT, in which case SQLite falls back to OR ABORT 
                   7174: ** constraint handling.
                   7175: ** </dl>
                   7176: */
                   7177: #define SQLITE_VTAB_CONSTRAINT_SUPPORT 1
                   7178: 
                   7179: /*
                   7180: ** CAPI3REF: Determine The Virtual Table Conflict Policy
                   7181: **
                   7182: ** This function may only be called from within a call to the [xUpdate] method
                   7183: ** of a [virtual table] implementation for an INSERT or UPDATE operation. ^The
                   7184: ** value returned is one of [SQLITE_ROLLBACK], [SQLITE_IGNORE], [SQLITE_FAIL],
                   7185: ** [SQLITE_ABORT], or [SQLITE_REPLACE], according to the [ON CONFLICT] mode
                   7186: ** of the SQL statement that triggered the call to the [xUpdate] method of the
                   7187: ** [virtual table].
                   7188: */
                   7189: SQLITE_API int sqlite3_vtab_on_conflict(sqlite3 *);
                   7190: 
                   7191: /*
                   7192: ** CAPI3REF: Conflict resolution modes
                   7193: **
                   7194: ** These constants are returned by [sqlite3_vtab_on_conflict()] to
                   7195: ** inform a [virtual table] implementation what the [ON CONFLICT] mode
                   7196: ** is for the SQL statement being evaluated.
                   7197: **
                   7198: ** Note that the [SQLITE_IGNORE] constant is also used as a potential
                   7199: ** return value from the [sqlite3_set_authorizer()] callback and that
                   7200: ** [SQLITE_ABORT] is also a [result code].
                   7201: */
                   7202: #define SQLITE_ROLLBACK 1
                   7203: /* #define SQLITE_IGNORE 2 // Also used by sqlite3_authorizer() callback */
                   7204: #define SQLITE_FAIL     3
                   7205: /* #define SQLITE_ABORT 4  // Also an error code */
                   7206: #define SQLITE_REPLACE  5
                   7207: 
                   7208: 
                   7209: 
                   7210: /*
                   7211: ** Undo the hack that converts floating point types to integer for
                   7212: ** builds on processors without floating point support.
                   7213: */
                   7214: #ifdef SQLITE_OMIT_FLOATING_POINT
                   7215: # undef double
                   7216: #endif
                   7217: 
                   7218: #if 0
                   7219: }  /* End of the 'extern "C"' block */
                   7220: #endif
                   7221: #endif
                   7222: 
                   7223: /*
                   7224: ** 2010 August 30
                   7225: **
                   7226: ** The author disclaims copyright to this source code.  In place of
                   7227: ** a legal notice, here is a blessing:
                   7228: **
                   7229: **    May you do good and not evil.
                   7230: **    May you find forgiveness for yourself and forgive others.
                   7231: **    May you share freely, never taking more than you give.
                   7232: **
                   7233: *************************************************************************
                   7234: */
                   7235: 
                   7236: #ifndef _SQLITE3RTREE_H_
                   7237: #define _SQLITE3RTREE_H_
                   7238: 
                   7239: 
                   7240: #if 0
                   7241: extern "C" {
                   7242: #endif
                   7243: 
                   7244: typedef struct sqlite3_rtree_geometry sqlite3_rtree_geometry;
                   7245: 
                   7246: /*
                   7247: ** Register a geometry callback named zGeom that can be used as part of an
                   7248: ** R-Tree geometry query as follows:
                   7249: **
                   7250: **   SELECT ... FROM <rtree> WHERE <rtree col> MATCH $zGeom(... params ...)
                   7251: */
                   7252: SQLITE_API int sqlite3_rtree_geometry_callback(
                   7253:   sqlite3 *db,
                   7254:   const char *zGeom,
                   7255:   int (*xGeom)(sqlite3_rtree_geometry *, int nCoord, double *aCoord, int *pRes),
                   7256:   void *pContext
                   7257: );
                   7258: 
                   7259: 
                   7260: /*
                   7261: ** A pointer to a structure of the following type is passed as the first
                   7262: ** argument to callbacks registered using rtree_geometry_callback().
                   7263: */
                   7264: struct sqlite3_rtree_geometry {
                   7265:   void *pContext;                 /* Copy of pContext passed to s_r_g_c() */
                   7266:   int nParam;                     /* Size of array aParam[] */
                   7267:   double *aParam;                 /* Parameters passed to SQL geom function */
                   7268:   void *pUser;                    /* Callback implementation user data */
                   7269:   void (*xDelUser)(void *);       /* Called by SQLite to clean up pUser */
                   7270: };
                   7271: 
                   7272: 
                   7273: #if 0
                   7274: }  /* end of the 'extern "C"' block */
                   7275: #endif
                   7276: 
                   7277: #endif  /* ifndef _SQLITE3RTREE_H_ */
                   7278: 
                   7279: 
                   7280: /************** End of sqlite3.h *********************************************/
                   7281: /************** Continuing where we left off in sqliteInt.h ******************/
                   7282: /************** Include hash.h in the middle of sqliteInt.h ******************/
                   7283: /************** Begin file hash.h ********************************************/
                   7284: /*
                   7285: ** 2001 September 22
                   7286: **
                   7287: ** The author disclaims copyright to this source code.  In place of
                   7288: ** a legal notice, here is a blessing:
                   7289: **
                   7290: **    May you do good and not evil.
                   7291: **    May you find forgiveness for yourself and forgive others.
                   7292: **    May you share freely, never taking more than you give.
                   7293: **
                   7294: *************************************************************************
                   7295: ** This is the header file for the generic hash-table implemenation
                   7296: ** used in SQLite.
                   7297: */
                   7298: #ifndef _SQLITE_HASH_H_
                   7299: #define _SQLITE_HASH_H_
                   7300: 
                   7301: /* Forward declarations of structures. */
                   7302: typedef struct Hash Hash;
                   7303: typedef struct HashElem HashElem;
                   7304: 
                   7305: /* A complete hash table is an instance of the following structure.
                   7306: ** The internals of this structure are intended to be opaque -- client
                   7307: ** code should not attempt to access or modify the fields of this structure
                   7308: ** directly.  Change this structure only by using the routines below.
                   7309: ** However, some of the "procedures" and "functions" for modifying and
                   7310: ** accessing this structure are really macros, so we can't really make
                   7311: ** this structure opaque.
                   7312: **
                   7313: ** All elements of the hash table are on a single doubly-linked list.
                   7314: ** Hash.first points to the head of this list.
                   7315: **
                   7316: ** There are Hash.htsize buckets.  Each bucket points to a spot in
                   7317: ** the global doubly-linked list.  The contents of the bucket are the
                   7318: ** element pointed to plus the next _ht.count-1 elements in the list.
                   7319: **
                   7320: ** Hash.htsize and Hash.ht may be zero.  In that case lookup is done
                   7321: ** by a linear search of the global list.  For small tables, the 
                   7322: ** Hash.ht table is never allocated because if there are few elements
                   7323: ** in the table, it is faster to do a linear search than to manage
                   7324: ** the hash table.
                   7325: */
                   7326: struct Hash {
                   7327:   unsigned int htsize;      /* Number of buckets in the hash table */
                   7328:   unsigned int count;       /* Number of entries in this table */
                   7329:   HashElem *first;          /* The first element of the array */
                   7330:   struct _ht {              /* the hash table */
                   7331:     int count;                 /* Number of entries with this hash */
                   7332:     HashElem *chain;           /* Pointer to first entry with this hash */
                   7333:   } *ht;
                   7334: };
                   7335: 
                   7336: /* Each element in the hash table is an instance of the following 
                   7337: ** structure.  All elements are stored on a single doubly-linked list.
                   7338: **
                   7339: ** Again, this structure is intended to be opaque, but it can't really
                   7340: ** be opaque because it is used by macros.
                   7341: */
                   7342: struct HashElem {
                   7343:   HashElem *next, *prev;       /* Next and previous elements in the table */
                   7344:   void *data;                  /* Data associated with this element */
                   7345:   const char *pKey; int nKey;  /* Key associated with this element */
                   7346: };
                   7347: 
                   7348: /*
                   7349: ** Access routines.  To delete, insert a NULL pointer.
                   7350: */
                   7351: SQLITE_PRIVATE void sqlite3HashInit(Hash*);
                   7352: SQLITE_PRIVATE void *sqlite3HashInsert(Hash*, const char *pKey, int nKey, void *pData);
                   7353: SQLITE_PRIVATE void *sqlite3HashFind(const Hash*, const char *pKey, int nKey);
                   7354: SQLITE_PRIVATE void sqlite3HashClear(Hash*);
                   7355: 
                   7356: /*
                   7357: ** Macros for looping over all elements of a hash table.  The idiom is
                   7358: ** like this:
                   7359: **
                   7360: **   Hash h;
                   7361: **   HashElem *p;
                   7362: **   ...
                   7363: **   for(p=sqliteHashFirst(&h); p; p=sqliteHashNext(p)){
                   7364: **     SomeStructure *pData = sqliteHashData(p);
                   7365: **     // do something with pData
                   7366: **   }
                   7367: */
                   7368: #define sqliteHashFirst(H)  ((H)->first)
                   7369: #define sqliteHashNext(E)   ((E)->next)
                   7370: #define sqliteHashData(E)   ((E)->data)
                   7371: /* #define sqliteHashKey(E)    ((E)->pKey) // NOT USED */
                   7372: /* #define sqliteHashKeysize(E) ((E)->nKey)  // NOT USED */
                   7373: 
                   7374: /*
                   7375: ** Number of entries in a hash table
                   7376: */
                   7377: /* #define sqliteHashCount(H)  ((H)->count) // NOT USED */
                   7378: 
                   7379: #endif /* _SQLITE_HASH_H_ */
                   7380: 
                   7381: /************** End of hash.h ************************************************/
                   7382: /************** Continuing where we left off in sqliteInt.h ******************/
                   7383: /************** Include parse.h in the middle of sqliteInt.h *****************/
                   7384: /************** Begin file parse.h *******************************************/
                   7385: #define TK_SEMI                            1
                   7386: #define TK_EXPLAIN                         2
                   7387: #define TK_QUERY                           3
                   7388: #define TK_PLAN                            4
                   7389: #define TK_BEGIN                           5
                   7390: #define TK_TRANSACTION                     6
                   7391: #define TK_DEFERRED                        7
                   7392: #define TK_IMMEDIATE                       8
                   7393: #define TK_EXCLUSIVE                       9
                   7394: #define TK_COMMIT                         10
                   7395: #define TK_END                            11
                   7396: #define TK_ROLLBACK                       12
                   7397: #define TK_SAVEPOINT                      13
                   7398: #define TK_RELEASE                        14
                   7399: #define TK_TO                             15
                   7400: #define TK_TABLE                          16
                   7401: #define TK_CREATE                         17
                   7402: #define TK_IF                             18
                   7403: #define TK_NOT                            19
                   7404: #define TK_EXISTS                         20
                   7405: #define TK_TEMP                           21
                   7406: #define TK_LP                             22
                   7407: #define TK_RP                             23
                   7408: #define TK_AS                             24
                   7409: #define TK_COMMA                          25
                   7410: #define TK_ID                             26
                   7411: #define TK_INDEXED                        27
                   7412: #define TK_ABORT                          28
                   7413: #define TK_ACTION                         29
                   7414: #define TK_AFTER                          30
                   7415: #define TK_ANALYZE                        31
                   7416: #define TK_ASC                            32
                   7417: #define TK_ATTACH                         33
                   7418: #define TK_BEFORE                         34
                   7419: #define TK_BY                             35
                   7420: #define TK_CASCADE                        36
                   7421: #define TK_CAST                           37
                   7422: #define TK_COLUMNKW                       38
                   7423: #define TK_CONFLICT                       39
                   7424: #define TK_DATABASE                       40
                   7425: #define TK_DESC                           41
                   7426: #define TK_DETACH                         42
                   7427: #define TK_EACH                           43
                   7428: #define TK_FAIL                           44
                   7429: #define TK_FOR                            45
                   7430: #define TK_IGNORE                         46
                   7431: #define TK_INITIALLY                      47
                   7432: #define TK_INSTEAD                        48
                   7433: #define TK_LIKE_KW                        49
                   7434: #define TK_MATCH                          50
                   7435: #define TK_NO                             51
                   7436: #define TK_KEY                            52
                   7437: #define TK_OF                             53
                   7438: #define TK_OFFSET                         54
                   7439: #define TK_PRAGMA                         55
                   7440: #define TK_RAISE                          56
                   7441: #define TK_REPLACE                        57
                   7442: #define TK_RESTRICT                       58
                   7443: #define TK_ROW                            59
                   7444: #define TK_TRIGGER                        60
                   7445: #define TK_VACUUM                         61
                   7446: #define TK_VIEW                           62
                   7447: #define TK_VIRTUAL                        63
                   7448: #define TK_REINDEX                        64
                   7449: #define TK_RENAME                         65
                   7450: #define TK_CTIME_KW                       66
                   7451: #define TK_ANY                            67
                   7452: #define TK_OR                             68
                   7453: #define TK_AND                            69
                   7454: #define TK_IS                             70
                   7455: #define TK_BETWEEN                        71
                   7456: #define TK_IN                             72
                   7457: #define TK_ISNULL                         73
                   7458: #define TK_NOTNULL                        74
                   7459: #define TK_NE                             75
                   7460: #define TK_EQ                             76
                   7461: #define TK_GT                             77
                   7462: #define TK_LE                             78
                   7463: #define TK_LT                             79
                   7464: #define TK_GE                             80
                   7465: #define TK_ESCAPE                         81
                   7466: #define TK_BITAND                         82
                   7467: #define TK_BITOR                          83
                   7468: #define TK_LSHIFT                         84
                   7469: #define TK_RSHIFT                         85
                   7470: #define TK_PLUS                           86
                   7471: #define TK_MINUS                          87
                   7472: #define TK_STAR                           88
                   7473: #define TK_SLASH                          89
                   7474: #define TK_REM                            90
                   7475: #define TK_CONCAT                         91
                   7476: #define TK_COLLATE                        92
                   7477: #define TK_BITNOT                         93
                   7478: #define TK_STRING                         94
                   7479: #define TK_JOIN_KW                        95
                   7480: #define TK_CONSTRAINT                     96
                   7481: #define TK_DEFAULT                        97
                   7482: #define TK_NULL                           98
                   7483: #define TK_PRIMARY                        99
                   7484: #define TK_UNIQUE                         100
                   7485: #define TK_CHECK                          101
                   7486: #define TK_REFERENCES                     102
                   7487: #define TK_AUTOINCR                       103
                   7488: #define TK_ON                             104
                   7489: #define TK_INSERT                         105
                   7490: #define TK_DELETE                         106
                   7491: #define TK_UPDATE                         107
                   7492: #define TK_SET                            108
                   7493: #define TK_DEFERRABLE                     109
                   7494: #define TK_FOREIGN                        110
                   7495: #define TK_DROP                           111
                   7496: #define TK_UNION                          112
                   7497: #define TK_ALL                            113
                   7498: #define TK_EXCEPT                         114
                   7499: #define TK_INTERSECT                      115
                   7500: #define TK_SELECT                         116
                   7501: #define TK_DISTINCT                       117
                   7502: #define TK_DOT                            118
                   7503: #define TK_FROM                           119
                   7504: #define TK_JOIN                           120
                   7505: #define TK_USING                          121
                   7506: #define TK_ORDER                          122
                   7507: #define TK_GROUP                          123
                   7508: #define TK_HAVING                         124
                   7509: #define TK_LIMIT                          125
                   7510: #define TK_WHERE                          126
                   7511: #define TK_INTO                           127
                   7512: #define TK_VALUES                         128
                   7513: #define TK_INTEGER                        129
                   7514: #define TK_FLOAT                          130
                   7515: #define TK_BLOB                           131
                   7516: #define TK_REGISTER                       132
                   7517: #define TK_VARIABLE                       133
                   7518: #define TK_CASE                           134
                   7519: #define TK_WHEN                           135
                   7520: #define TK_THEN                           136
                   7521: #define TK_ELSE                           137
                   7522: #define TK_INDEX                          138
                   7523: #define TK_ALTER                          139
                   7524: #define TK_ADD                            140
                   7525: #define TK_TO_TEXT                        141
                   7526: #define TK_TO_BLOB                        142
                   7527: #define TK_TO_NUMERIC                     143
                   7528: #define TK_TO_INT                         144
                   7529: #define TK_TO_REAL                        145
                   7530: #define TK_ISNOT                          146
                   7531: #define TK_END_OF_FILE                    147
                   7532: #define TK_ILLEGAL                        148
                   7533: #define TK_SPACE                          149
                   7534: #define TK_UNCLOSED_STRING                150
                   7535: #define TK_FUNCTION                       151
                   7536: #define TK_COLUMN                         152
                   7537: #define TK_AGG_FUNCTION                   153
                   7538: #define TK_AGG_COLUMN                     154
                   7539: #define TK_CONST_FUNC                     155
                   7540: #define TK_UMINUS                         156
                   7541: #define TK_UPLUS                          157
                   7542: 
                   7543: /************** End of parse.h ***********************************************/
                   7544: /************** Continuing where we left off in sqliteInt.h ******************/
                   7545: #include <stdio.h>
                   7546: #include <stdlib.h>
                   7547: #include <string.h>
                   7548: #include <assert.h>
                   7549: #include <stddef.h>
                   7550: 
                   7551: /*
                   7552: ** If compiling for a processor that lacks floating point support,
                   7553: ** substitute integer for floating-point
                   7554: */
                   7555: #ifdef SQLITE_OMIT_FLOATING_POINT
                   7556: # define double sqlite_int64
                   7557: # define float sqlite_int64
                   7558: # define LONGDOUBLE_TYPE sqlite_int64
                   7559: # ifndef SQLITE_BIG_DBL
                   7560: #   define SQLITE_BIG_DBL (((sqlite3_int64)1)<<50)
                   7561: # endif
                   7562: # define SQLITE_OMIT_DATETIME_FUNCS 1
                   7563: # define SQLITE_OMIT_TRACE 1
                   7564: # undef SQLITE_MIXED_ENDIAN_64BIT_FLOAT
                   7565: # undef SQLITE_HAVE_ISNAN
                   7566: #endif
                   7567: #ifndef SQLITE_BIG_DBL
                   7568: # define SQLITE_BIG_DBL (1e99)
                   7569: #endif
                   7570: 
                   7571: /*
                   7572: ** OMIT_TEMPDB is set to 1 if SQLITE_OMIT_TEMPDB is defined, or 0
                   7573: ** afterward. Having this macro allows us to cause the C compiler 
                   7574: ** to omit code used by TEMP tables without messy #ifndef statements.
                   7575: */
                   7576: #ifdef SQLITE_OMIT_TEMPDB
                   7577: #define OMIT_TEMPDB 1
                   7578: #else
                   7579: #define OMIT_TEMPDB 0
                   7580: #endif
                   7581: 
                   7582: /*
                   7583: ** The "file format" number is an integer that is incremented whenever
                   7584: ** the VDBE-level file format changes.  The following macros define the
                   7585: ** the default file format for new databases and the maximum file format
                   7586: ** that the library can read.
                   7587: */
                   7588: #define SQLITE_MAX_FILE_FORMAT 4
                   7589: #ifndef SQLITE_DEFAULT_FILE_FORMAT
                   7590: # define SQLITE_DEFAULT_FILE_FORMAT 1
                   7591: #endif
                   7592: 
                   7593: /*
                   7594: ** Determine whether triggers are recursive by default.  This can be
                   7595: ** changed at run-time using a pragma.
                   7596: */
                   7597: #ifndef SQLITE_DEFAULT_RECURSIVE_TRIGGERS
                   7598: # define SQLITE_DEFAULT_RECURSIVE_TRIGGERS 0
                   7599: #endif
                   7600: 
                   7601: /*
                   7602: ** Provide a default value for SQLITE_TEMP_STORE in case it is not specified
                   7603: ** on the command-line
                   7604: */
                   7605: #ifndef SQLITE_TEMP_STORE
                   7606: # define SQLITE_TEMP_STORE 1
                   7607: #endif
                   7608: 
                   7609: /*
                   7610: ** GCC does not define the offsetof() macro so we'll have to do it
                   7611: ** ourselves.
                   7612: */
                   7613: #ifndef offsetof
                   7614: #define offsetof(STRUCTURE,FIELD) ((int)((char*)&((STRUCTURE*)0)->FIELD))
                   7615: #endif
                   7616: 
                   7617: /*
                   7618: ** Check to see if this machine uses EBCDIC.  (Yes, believe it or
                   7619: ** not, there are still machines out there that use EBCDIC.)
                   7620: */
                   7621: #if 'A' == '\301'
                   7622: # define SQLITE_EBCDIC 1
                   7623: #else
                   7624: # define SQLITE_ASCII 1
                   7625: #endif
                   7626: 
                   7627: /*
                   7628: ** Integers of known sizes.  These typedefs might change for architectures
                   7629: ** where the sizes very.  Preprocessor macros are available so that the
                   7630: ** types can be conveniently redefined at compile-type.  Like this:
                   7631: **
                   7632: **         cc '-DUINTPTR_TYPE=long long int' ...
                   7633: */
                   7634: #ifndef UINT32_TYPE
                   7635: # ifdef HAVE_UINT32_T
                   7636: #  define UINT32_TYPE uint32_t
                   7637: # else
                   7638: #  define UINT32_TYPE unsigned int
                   7639: # endif
                   7640: #endif
                   7641: #ifndef UINT16_TYPE
                   7642: # ifdef HAVE_UINT16_T
                   7643: #  define UINT16_TYPE uint16_t
                   7644: # else
                   7645: #  define UINT16_TYPE unsigned short int
                   7646: # endif
                   7647: #endif
                   7648: #ifndef INT16_TYPE
                   7649: # ifdef HAVE_INT16_T
                   7650: #  define INT16_TYPE int16_t
                   7651: # else
                   7652: #  define INT16_TYPE short int
                   7653: # endif
                   7654: #endif
                   7655: #ifndef UINT8_TYPE
                   7656: # ifdef HAVE_UINT8_T
                   7657: #  define UINT8_TYPE uint8_t
                   7658: # else
                   7659: #  define UINT8_TYPE unsigned char
                   7660: # endif
                   7661: #endif
                   7662: #ifndef INT8_TYPE
                   7663: # ifdef HAVE_INT8_T
                   7664: #  define INT8_TYPE int8_t
                   7665: # else
                   7666: #  define INT8_TYPE signed char
                   7667: # endif
                   7668: #endif
                   7669: #ifndef LONGDOUBLE_TYPE
                   7670: # define LONGDOUBLE_TYPE long double
                   7671: #endif
                   7672: typedef sqlite_int64 i64;          /* 8-byte signed integer */
                   7673: typedef sqlite_uint64 u64;         /* 8-byte unsigned integer */
                   7674: typedef UINT32_TYPE u32;           /* 4-byte unsigned integer */
                   7675: typedef UINT16_TYPE u16;           /* 2-byte unsigned integer */
                   7676: typedef INT16_TYPE i16;            /* 2-byte signed integer */
                   7677: typedef UINT8_TYPE u8;             /* 1-byte unsigned integer */
                   7678: typedef INT8_TYPE i8;              /* 1-byte signed integer */
                   7679: 
                   7680: /*
                   7681: ** SQLITE_MAX_U32 is a u64 constant that is the maximum u64 value
                   7682: ** that can be stored in a u32 without loss of data.  The value
                   7683: ** is 0x00000000ffffffff.  But because of quirks of some compilers, we
                   7684: ** have to specify the value in the less intuitive manner shown:
                   7685: */
                   7686: #define SQLITE_MAX_U32  ((((u64)1)<<32)-1)
                   7687: 
                   7688: /*
                   7689: ** Macros to determine whether the machine is big or little endian,
                   7690: ** evaluated at runtime.
                   7691: */
                   7692: #ifdef SQLITE_AMALGAMATION
                   7693: SQLITE_PRIVATE const int sqlite3one = 1;
                   7694: #else
                   7695: SQLITE_PRIVATE const int sqlite3one;
                   7696: #endif
                   7697: #if defined(i386) || defined(__i386__) || defined(_M_IX86)\
                   7698:                              || defined(__x86_64) || defined(__x86_64__)
                   7699: # define SQLITE_BIGENDIAN    0
                   7700: # define SQLITE_LITTLEENDIAN 1
                   7701: # define SQLITE_UTF16NATIVE  SQLITE_UTF16LE
                   7702: #else
                   7703: # define SQLITE_BIGENDIAN    (*(char *)(&sqlite3one)==0)
                   7704: # define SQLITE_LITTLEENDIAN (*(char *)(&sqlite3one)==1)
                   7705: # define SQLITE_UTF16NATIVE (SQLITE_BIGENDIAN?SQLITE_UTF16BE:SQLITE_UTF16LE)
                   7706: #endif
                   7707: 
                   7708: /*
                   7709: ** Constants for the largest and smallest possible 64-bit signed integers.
                   7710: ** These macros are designed to work correctly on both 32-bit and 64-bit
                   7711: ** compilers.
                   7712: */
                   7713: #define LARGEST_INT64  (0xffffffff|(((i64)0x7fffffff)<<32))
                   7714: #define SMALLEST_INT64 (((i64)-1) - LARGEST_INT64)
                   7715: 
                   7716: /* 
                   7717: ** Round up a number to the next larger multiple of 8.  This is used
                   7718: ** to force 8-byte alignment on 64-bit architectures.
                   7719: */
                   7720: #define ROUND8(x)     (((x)+7)&~7)
                   7721: 
                   7722: /*
                   7723: ** Round down to the nearest multiple of 8
                   7724: */
                   7725: #define ROUNDDOWN8(x) ((x)&~7)
                   7726: 
                   7727: /*
                   7728: ** Assert that the pointer X is aligned to an 8-byte boundary.  This
                   7729: ** macro is used only within assert() to verify that the code gets
                   7730: ** all alignment restrictions correct.
                   7731: **
                   7732: ** Except, if SQLITE_4_BYTE_ALIGNED_MALLOC is defined, then the
                   7733: ** underlying malloc() implemention might return us 4-byte aligned
                   7734: ** pointers.  In that case, only verify 4-byte alignment.
                   7735: */
                   7736: #ifdef SQLITE_4_BYTE_ALIGNED_MALLOC
                   7737: # define EIGHT_BYTE_ALIGNMENT(X)   ((((char*)(X) - (char*)0)&3)==0)
                   7738: #else
                   7739: # define EIGHT_BYTE_ALIGNMENT(X)   ((((char*)(X) - (char*)0)&7)==0)
                   7740: #endif
                   7741: 
                   7742: 
                   7743: /*
                   7744: ** An instance of the following structure is used to store the busy-handler
                   7745: ** callback for a given sqlite handle. 
                   7746: **
                   7747: ** The sqlite.busyHandler member of the sqlite struct contains the busy
                   7748: ** callback for the database handle. Each pager opened via the sqlite
                   7749: ** handle is passed a pointer to sqlite.busyHandler. The busy-handler
                   7750: ** callback is currently invoked only from within pager.c.
                   7751: */
                   7752: typedef struct BusyHandler BusyHandler;
                   7753: struct BusyHandler {
                   7754:   int (*xFunc)(void *,int);  /* The busy callback */
                   7755:   void *pArg;                /* First arg to busy callback */
                   7756:   int nBusy;                 /* Incremented with each busy call */
                   7757: };
                   7758: 
                   7759: /*
                   7760: ** Name of the master database table.  The master database table
                   7761: ** is a special table that holds the names and attributes of all
                   7762: ** user tables and indices.
                   7763: */
                   7764: #define MASTER_NAME       "sqlite_master"
                   7765: #define TEMP_MASTER_NAME  "sqlite_temp_master"
                   7766: 
                   7767: /*
                   7768: ** The root-page of the master database table.
                   7769: */
                   7770: #define MASTER_ROOT       1
                   7771: 
                   7772: /*
                   7773: ** The name of the schema table.
                   7774: */
                   7775: #define SCHEMA_TABLE(x)  ((!OMIT_TEMPDB)&&(x==1)?TEMP_MASTER_NAME:MASTER_NAME)
                   7776: 
                   7777: /*
                   7778: ** A convenience macro that returns the number of elements in
                   7779: ** an array.
                   7780: */
                   7781: #define ArraySize(X)    ((int)(sizeof(X)/sizeof(X[0])))
                   7782: 
                   7783: /*
                   7784: ** The following value as a destructor means to use sqlite3DbFree().
                   7785: ** This is an internal extension to SQLITE_STATIC and SQLITE_TRANSIENT.
                   7786: */
                   7787: #define SQLITE_DYNAMIC   ((sqlite3_destructor_type)sqlite3DbFree)
                   7788: 
                   7789: /*
                   7790: ** When SQLITE_OMIT_WSD is defined, it means that the target platform does
                   7791: ** not support Writable Static Data (WSD) such as global and static variables.
                   7792: ** All variables must either be on the stack or dynamically allocated from
                   7793: ** the heap.  When WSD is unsupported, the variable declarations scattered
                   7794: ** throughout the SQLite code must become constants instead.  The SQLITE_WSD
                   7795: ** macro is used for this purpose.  And instead of referencing the variable
                   7796: ** directly, we use its constant as a key to lookup the run-time allocated
                   7797: ** buffer that holds real variable.  The constant is also the initializer
                   7798: ** for the run-time allocated buffer.
                   7799: **
                   7800: ** In the usual case where WSD is supported, the SQLITE_WSD and GLOBAL
                   7801: ** macros become no-ops and have zero performance impact.
                   7802: */
                   7803: #ifdef SQLITE_OMIT_WSD
                   7804:   #define SQLITE_WSD const
                   7805:   #define GLOBAL(t,v) (*(t*)sqlite3_wsd_find((void*)&(v), sizeof(v)))
                   7806:   #define sqlite3GlobalConfig GLOBAL(struct Sqlite3Config, sqlite3Config)
                   7807: SQLITE_API   int sqlite3_wsd_init(int N, int J);
                   7808: SQLITE_API   void *sqlite3_wsd_find(void *K, int L);
                   7809: #else
                   7810:   #define SQLITE_WSD 
                   7811:   #define GLOBAL(t,v) v
                   7812:   #define sqlite3GlobalConfig sqlite3Config
                   7813: #endif
                   7814: 
                   7815: /*
                   7816: ** The following macros are used to suppress compiler warnings and to
                   7817: ** make it clear to human readers when a function parameter is deliberately 
                   7818: ** left unused within the body of a function. This usually happens when
                   7819: ** a function is called via a function pointer. For example the 
                   7820: ** implementation of an SQL aggregate step callback may not use the
                   7821: ** parameter indicating the number of arguments passed to the aggregate,
                   7822: ** if it knows that this is enforced elsewhere.
                   7823: **
                   7824: ** When a function parameter is not used at all within the body of a function,
                   7825: ** it is generally named "NotUsed" or "NotUsed2" to make things even clearer.
                   7826: ** However, these macros may also be used to suppress warnings related to
                   7827: ** parameters that may or may not be used depending on compilation options.
                   7828: ** For example those parameters only used in assert() statements. In these
                   7829: ** cases the parameters are named as per the usual conventions.
                   7830: */
                   7831: #define UNUSED_PARAMETER(x) (void)(x)
                   7832: #define UNUSED_PARAMETER2(x,y) UNUSED_PARAMETER(x),UNUSED_PARAMETER(y)
                   7833: 
                   7834: /*
                   7835: ** Forward references to structures
                   7836: */
                   7837: typedef struct AggInfo AggInfo;
                   7838: typedef struct AuthContext AuthContext;
                   7839: typedef struct AutoincInfo AutoincInfo;
                   7840: typedef struct Bitvec Bitvec;
                   7841: typedef struct CollSeq CollSeq;
                   7842: typedef struct Column Column;
                   7843: typedef struct Db Db;
                   7844: typedef struct Schema Schema;
                   7845: typedef struct Expr Expr;
                   7846: typedef struct ExprList ExprList;
                   7847: typedef struct ExprSpan ExprSpan;
                   7848: typedef struct FKey FKey;
                   7849: typedef struct FuncDestructor FuncDestructor;
                   7850: typedef struct FuncDef FuncDef;
                   7851: typedef struct FuncDefHash FuncDefHash;
                   7852: typedef struct IdList IdList;
                   7853: typedef struct Index Index;
                   7854: typedef struct IndexSample IndexSample;
                   7855: typedef struct KeyClass KeyClass;
                   7856: typedef struct KeyInfo KeyInfo;
                   7857: typedef struct Lookaside Lookaside;
                   7858: typedef struct LookasideSlot LookasideSlot;
                   7859: typedef struct Module Module;
                   7860: typedef struct NameContext NameContext;
                   7861: typedef struct Parse Parse;
                   7862: typedef struct RowSet RowSet;
                   7863: typedef struct Savepoint Savepoint;
                   7864: typedef struct Select Select;
                   7865: typedef struct SrcList SrcList;
                   7866: typedef struct StrAccum StrAccum;
                   7867: typedef struct Table Table;
                   7868: typedef struct TableLock TableLock;
                   7869: typedef struct Token Token;
                   7870: typedef struct Trigger Trigger;
                   7871: typedef struct TriggerPrg TriggerPrg;
                   7872: typedef struct TriggerStep TriggerStep;
                   7873: typedef struct UnpackedRecord UnpackedRecord;
                   7874: typedef struct VTable VTable;
                   7875: typedef struct VtabCtx VtabCtx;
                   7876: typedef struct Walker Walker;
                   7877: typedef struct WherePlan WherePlan;
                   7878: typedef struct WhereInfo WhereInfo;
                   7879: typedef struct WhereLevel WhereLevel;
                   7880: 
                   7881: /*
                   7882: ** Defer sourcing vdbe.h and btree.h until after the "u8" and 
                   7883: ** "BusyHandler" typedefs. vdbe.h also requires a few of the opaque
                   7884: ** pointer types (i.e. FuncDef) defined above.
                   7885: */
                   7886: /************** Include btree.h in the middle of sqliteInt.h *****************/
                   7887: /************** Begin file btree.h *******************************************/
                   7888: /*
                   7889: ** 2001 September 15
                   7890: **
                   7891: ** The author disclaims copyright to this source code.  In place of
                   7892: ** a legal notice, here is a blessing:
                   7893: **
                   7894: **    May you do good and not evil.
                   7895: **    May you find forgiveness for yourself and forgive others.
                   7896: **    May you share freely, never taking more than you give.
                   7897: **
                   7898: *************************************************************************
                   7899: ** This header file defines the interface that the sqlite B-Tree file
                   7900: ** subsystem.  See comments in the source code for a detailed description
                   7901: ** of what each interface routine does.
                   7902: */
                   7903: #ifndef _BTREE_H_
                   7904: #define _BTREE_H_
                   7905: 
                   7906: /* TODO: This definition is just included so other modules compile. It
                   7907: ** needs to be revisited.
                   7908: */
                   7909: #define SQLITE_N_BTREE_META 10
                   7910: 
                   7911: /*
                   7912: ** If defined as non-zero, auto-vacuum is enabled by default. Otherwise
                   7913: ** it must be turned on for each database using "PRAGMA auto_vacuum = 1".
                   7914: */
                   7915: #ifndef SQLITE_DEFAULT_AUTOVACUUM
                   7916:   #define SQLITE_DEFAULT_AUTOVACUUM 0
                   7917: #endif
                   7918: 
                   7919: #define BTREE_AUTOVACUUM_NONE 0        /* Do not do auto-vacuum */
                   7920: #define BTREE_AUTOVACUUM_FULL 1        /* Do full auto-vacuum */
                   7921: #define BTREE_AUTOVACUUM_INCR 2        /* Incremental vacuum */
                   7922: 
                   7923: /*
                   7924: ** Forward declarations of structure
                   7925: */
                   7926: typedef struct Btree Btree;
                   7927: typedef struct BtCursor BtCursor;
                   7928: typedef struct BtShared BtShared;
                   7929: 
                   7930: 
                   7931: SQLITE_PRIVATE int sqlite3BtreeOpen(
                   7932:   sqlite3_vfs *pVfs,       /* VFS to use with this b-tree */
                   7933:   const char *zFilename,   /* Name of database file to open */
                   7934:   sqlite3 *db,             /* Associated database connection */
                   7935:   Btree **ppBtree,         /* Return open Btree* here */
                   7936:   int flags,               /* Flags */
                   7937:   int vfsFlags             /* Flags passed through to VFS open */
                   7938: );
                   7939: 
                   7940: /* The flags parameter to sqlite3BtreeOpen can be the bitwise or of the
                   7941: ** following values.
                   7942: **
                   7943: ** NOTE:  These values must match the corresponding PAGER_ values in
                   7944: ** pager.h.
                   7945: */
                   7946: #define BTREE_OMIT_JOURNAL  1  /* Do not create or use a rollback journal */
                   7947: #define BTREE_NO_READLOCK   2  /* Omit readlocks on readonly files */
                   7948: #define BTREE_MEMORY        4  /* This is an in-memory DB */
                   7949: #define BTREE_SINGLE        8  /* The file contains at most 1 b-tree */
                   7950: #define BTREE_UNORDERED    16  /* Use of a hash implementation is OK */
                   7951: 
                   7952: SQLITE_PRIVATE int sqlite3BtreeClose(Btree*);
                   7953: SQLITE_PRIVATE int sqlite3BtreeSetCacheSize(Btree*,int);
                   7954: SQLITE_PRIVATE int sqlite3BtreeSetSafetyLevel(Btree*,int,int,int);
                   7955: SQLITE_PRIVATE int sqlite3BtreeSyncDisabled(Btree*);
                   7956: SQLITE_PRIVATE int sqlite3BtreeSetPageSize(Btree *p, int nPagesize, int nReserve, int eFix);
                   7957: SQLITE_PRIVATE int sqlite3BtreeGetPageSize(Btree*);
                   7958: SQLITE_PRIVATE int sqlite3BtreeMaxPageCount(Btree*,int);
                   7959: SQLITE_PRIVATE u32 sqlite3BtreeLastPage(Btree*);
                   7960: SQLITE_PRIVATE int sqlite3BtreeSecureDelete(Btree*,int);
                   7961: SQLITE_PRIVATE int sqlite3BtreeGetReserve(Btree*);
                   7962: SQLITE_PRIVATE int sqlite3BtreeSetAutoVacuum(Btree *, int);
                   7963: SQLITE_PRIVATE int sqlite3BtreeGetAutoVacuum(Btree *);
                   7964: SQLITE_PRIVATE int sqlite3BtreeBeginTrans(Btree*,int);
                   7965: SQLITE_PRIVATE int sqlite3BtreeCommitPhaseOne(Btree*, const char *zMaster);
                   7966: SQLITE_PRIVATE int sqlite3BtreeCommitPhaseTwo(Btree*, int);
                   7967: SQLITE_PRIVATE int sqlite3BtreeCommit(Btree*);
                   7968: SQLITE_PRIVATE int sqlite3BtreeRollback(Btree*);
                   7969: SQLITE_PRIVATE int sqlite3BtreeBeginStmt(Btree*,int);
                   7970: SQLITE_PRIVATE int sqlite3BtreeCreateTable(Btree*, int*, int flags);
                   7971: SQLITE_PRIVATE int sqlite3BtreeIsInTrans(Btree*);
                   7972: SQLITE_PRIVATE int sqlite3BtreeIsInReadTrans(Btree*);
                   7973: SQLITE_PRIVATE int sqlite3BtreeIsInBackup(Btree*);
                   7974: SQLITE_PRIVATE void *sqlite3BtreeSchema(Btree *, int, void(*)(void *));
                   7975: SQLITE_PRIVATE int sqlite3BtreeSchemaLocked(Btree *pBtree);
                   7976: SQLITE_PRIVATE int sqlite3BtreeLockTable(Btree *pBtree, int iTab, u8 isWriteLock);
                   7977: SQLITE_PRIVATE int sqlite3BtreeSavepoint(Btree *, int, int);
                   7978: 
                   7979: SQLITE_PRIVATE const char *sqlite3BtreeGetFilename(Btree *);
                   7980: SQLITE_PRIVATE const char *sqlite3BtreeGetJournalname(Btree *);
                   7981: SQLITE_PRIVATE int sqlite3BtreeCopyFile(Btree *, Btree *);
                   7982: 
                   7983: SQLITE_PRIVATE int sqlite3BtreeIncrVacuum(Btree *);
                   7984: 
                   7985: /* The flags parameter to sqlite3BtreeCreateTable can be the bitwise OR
                   7986: ** of the flags shown below.
                   7987: **
                   7988: ** Every SQLite table must have either BTREE_INTKEY or BTREE_BLOBKEY set.
                   7989: ** With BTREE_INTKEY, the table key is a 64-bit integer and arbitrary data
                   7990: ** is stored in the leaves.  (BTREE_INTKEY is used for SQL tables.)  With
                   7991: ** BTREE_BLOBKEY, the key is an arbitrary BLOB and no content is stored
                   7992: ** anywhere - the key is the content.  (BTREE_BLOBKEY is used for SQL
                   7993: ** indices.)
                   7994: */
                   7995: #define BTREE_INTKEY     1    /* Table has only 64-bit signed integer keys */
                   7996: #define BTREE_BLOBKEY    2    /* Table has keys only - no data */
                   7997: 
                   7998: SQLITE_PRIVATE int sqlite3BtreeDropTable(Btree*, int, int*);
                   7999: SQLITE_PRIVATE int sqlite3BtreeClearTable(Btree*, int, int*);
                   8000: SQLITE_PRIVATE void sqlite3BtreeTripAllCursors(Btree*, int);
                   8001: 
                   8002: SQLITE_PRIVATE void sqlite3BtreeGetMeta(Btree *pBtree, int idx, u32 *pValue);
                   8003: SQLITE_PRIVATE int sqlite3BtreeUpdateMeta(Btree*, int idx, u32 value);
                   8004: 
                   8005: /*
                   8006: ** The second parameter to sqlite3BtreeGetMeta or sqlite3BtreeUpdateMeta
                   8007: ** should be one of the following values. The integer values are assigned 
                   8008: ** to constants so that the offset of the corresponding field in an
                   8009: ** SQLite database header may be found using the following formula:
                   8010: **
                   8011: **   offset = 36 + (idx * 4)
                   8012: **
                   8013: ** For example, the free-page-count field is located at byte offset 36 of
                   8014: ** the database file header. The incr-vacuum-flag field is located at
                   8015: ** byte offset 64 (== 36+4*7).
                   8016: */
                   8017: #define BTREE_FREE_PAGE_COUNT     0
                   8018: #define BTREE_SCHEMA_VERSION      1
                   8019: #define BTREE_FILE_FORMAT         2
                   8020: #define BTREE_DEFAULT_CACHE_SIZE  3
                   8021: #define BTREE_LARGEST_ROOT_PAGE   4
                   8022: #define BTREE_TEXT_ENCODING       5
                   8023: #define BTREE_USER_VERSION        6
                   8024: #define BTREE_INCR_VACUUM         7
                   8025: 
                   8026: SQLITE_PRIVATE int sqlite3BtreeCursor(
                   8027:   Btree*,                              /* BTree containing table to open */
                   8028:   int iTable,                          /* Index of root page */
                   8029:   int wrFlag,                          /* 1 for writing.  0 for read-only */
                   8030:   struct KeyInfo*,                     /* First argument to compare function */
                   8031:   BtCursor *pCursor                    /* Space to write cursor structure */
                   8032: );
                   8033: SQLITE_PRIVATE int sqlite3BtreeCursorSize(void);
                   8034: SQLITE_PRIVATE void sqlite3BtreeCursorZero(BtCursor*);
                   8035: 
                   8036: SQLITE_PRIVATE int sqlite3BtreeCloseCursor(BtCursor*);
                   8037: SQLITE_PRIVATE int sqlite3BtreeMovetoUnpacked(
                   8038:   BtCursor*,
                   8039:   UnpackedRecord *pUnKey,
                   8040:   i64 intKey,
                   8041:   int bias,
                   8042:   int *pRes
                   8043: );
                   8044: SQLITE_PRIVATE int sqlite3BtreeCursorHasMoved(BtCursor*, int*);
                   8045: SQLITE_PRIVATE int sqlite3BtreeDelete(BtCursor*);
                   8046: SQLITE_PRIVATE int sqlite3BtreeInsert(BtCursor*, const void *pKey, i64 nKey,
                   8047:                                   const void *pData, int nData,
                   8048:                                   int nZero, int bias, int seekResult);
                   8049: SQLITE_PRIVATE int sqlite3BtreeFirst(BtCursor*, int *pRes);
                   8050: SQLITE_PRIVATE int sqlite3BtreeLast(BtCursor*, int *pRes);
                   8051: SQLITE_PRIVATE int sqlite3BtreeNext(BtCursor*, int *pRes);
                   8052: SQLITE_PRIVATE int sqlite3BtreeEof(BtCursor*);
                   8053: SQLITE_PRIVATE int sqlite3BtreePrevious(BtCursor*, int *pRes);
                   8054: SQLITE_PRIVATE int sqlite3BtreeKeySize(BtCursor*, i64 *pSize);
                   8055: SQLITE_PRIVATE int sqlite3BtreeKey(BtCursor*, u32 offset, u32 amt, void*);
                   8056: SQLITE_PRIVATE const void *sqlite3BtreeKeyFetch(BtCursor*, int *pAmt);
                   8057: SQLITE_PRIVATE const void *sqlite3BtreeDataFetch(BtCursor*, int *pAmt);
                   8058: SQLITE_PRIVATE int sqlite3BtreeDataSize(BtCursor*, u32 *pSize);
                   8059: SQLITE_PRIVATE int sqlite3BtreeData(BtCursor*, u32 offset, u32 amt, void*);
                   8060: SQLITE_PRIVATE void sqlite3BtreeSetCachedRowid(BtCursor*, sqlite3_int64);
                   8061: SQLITE_PRIVATE sqlite3_int64 sqlite3BtreeGetCachedRowid(BtCursor*);
                   8062: 
                   8063: SQLITE_PRIVATE char *sqlite3BtreeIntegrityCheck(Btree*, int *aRoot, int nRoot, int, int*);
                   8064: SQLITE_PRIVATE struct Pager *sqlite3BtreePager(Btree*);
                   8065: 
                   8066: SQLITE_PRIVATE int sqlite3BtreePutData(BtCursor*, u32 offset, u32 amt, void*);
                   8067: SQLITE_PRIVATE void sqlite3BtreeCacheOverflow(BtCursor *);
                   8068: SQLITE_PRIVATE void sqlite3BtreeClearCursor(BtCursor *);
                   8069: 
                   8070: SQLITE_PRIVATE int sqlite3BtreeSetVersion(Btree *pBt, int iVersion);
                   8071: 
                   8072: #ifndef NDEBUG
                   8073: SQLITE_PRIVATE int sqlite3BtreeCursorIsValid(BtCursor*);
                   8074: #endif
                   8075: 
                   8076: #ifndef SQLITE_OMIT_BTREECOUNT
                   8077: SQLITE_PRIVATE int sqlite3BtreeCount(BtCursor *, i64 *);
                   8078: #endif
                   8079: 
                   8080: #ifdef SQLITE_TEST
                   8081: SQLITE_PRIVATE int sqlite3BtreeCursorInfo(BtCursor*, int*, int);
                   8082: SQLITE_PRIVATE void sqlite3BtreeCursorList(Btree*);
                   8083: #endif
                   8084: 
                   8085: #ifndef SQLITE_OMIT_WAL
                   8086: SQLITE_PRIVATE   int sqlite3BtreeCheckpoint(Btree*, int, int *, int *);
                   8087: #endif
                   8088: 
                   8089: /*
                   8090: ** If we are not using shared cache, then there is no need to
                   8091: ** use mutexes to access the BtShared structures.  So make the
                   8092: ** Enter and Leave procedures no-ops.
                   8093: */
                   8094: #ifndef SQLITE_OMIT_SHARED_CACHE
                   8095: SQLITE_PRIVATE   void sqlite3BtreeEnter(Btree*);
                   8096: SQLITE_PRIVATE   void sqlite3BtreeEnterAll(sqlite3*);
                   8097: #else
                   8098: # define sqlite3BtreeEnter(X) 
                   8099: # define sqlite3BtreeEnterAll(X)
                   8100: #endif
                   8101: 
                   8102: #if !defined(SQLITE_OMIT_SHARED_CACHE) && SQLITE_THREADSAFE
                   8103: SQLITE_PRIVATE   int sqlite3BtreeSharable(Btree*);
                   8104: SQLITE_PRIVATE   void sqlite3BtreeLeave(Btree*);
                   8105: SQLITE_PRIVATE   void sqlite3BtreeEnterCursor(BtCursor*);
                   8106: SQLITE_PRIVATE   void sqlite3BtreeLeaveCursor(BtCursor*);
                   8107: SQLITE_PRIVATE   void sqlite3BtreeLeaveAll(sqlite3*);
                   8108: #ifndef NDEBUG
                   8109:   /* These routines are used inside assert() statements only. */
                   8110: SQLITE_PRIVATE   int sqlite3BtreeHoldsMutex(Btree*);
                   8111: SQLITE_PRIVATE   int sqlite3BtreeHoldsAllMutexes(sqlite3*);
                   8112: SQLITE_PRIVATE   int sqlite3SchemaMutexHeld(sqlite3*,int,Schema*);
                   8113: #endif
                   8114: #else
                   8115: 
                   8116: # define sqlite3BtreeSharable(X) 0
                   8117: # define sqlite3BtreeLeave(X)
                   8118: # define sqlite3BtreeEnterCursor(X)
                   8119: # define sqlite3BtreeLeaveCursor(X)
                   8120: # define sqlite3BtreeLeaveAll(X)
                   8121: 
                   8122: # define sqlite3BtreeHoldsMutex(X) 1
                   8123: # define sqlite3BtreeHoldsAllMutexes(X) 1
                   8124: # define sqlite3SchemaMutexHeld(X,Y,Z) 1
                   8125: #endif
                   8126: 
                   8127: 
                   8128: #endif /* _BTREE_H_ */
                   8129: 
                   8130: /************** End of btree.h ***********************************************/
                   8131: /************** Continuing where we left off in sqliteInt.h ******************/
                   8132: /************** Include vdbe.h in the middle of sqliteInt.h ******************/
                   8133: /************** Begin file vdbe.h ********************************************/
                   8134: /*
                   8135: ** 2001 September 15
                   8136: **
                   8137: ** The author disclaims copyright to this source code.  In place of
                   8138: ** a legal notice, here is a blessing:
                   8139: **
                   8140: **    May you do good and not evil.
                   8141: **    May you find forgiveness for yourself and forgive others.
                   8142: **    May you share freely, never taking more than you give.
                   8143: **
                   8144: *************************************************************************
                   8145: ** Header file for the Virtual DataBase Engine (VDBE)
                   8146: **
                   8147: ** This header defines the interface to the virtual database engine
                   8148: ** or VDBE.  The VDBE implements an abstract machine that runs a
                   8149: ** simple program to access and modify the underlying database.
                   8150: */
                   8151: #ifndef _SQLITE_VDBE_H_
                   8152: #define _SQLITE_VDBE_H_
                   8153: 
                   8154: /*
                   8155: ** A single VDBE is an opaque structure named "Vdbe".  Only routines
                   8156: ** in the source file sqliteVdbe.c are allowed to see the insides
                   8157: ** of this structure.
                   8158: */
                   8159: typedef struct Vdbe Vdbe;
                   8160: 
                   8161: /*
                   8162: ** The names of the following types declared in vdbeInt.h are required
                   8163: ** for the VdbeOp definition.
                   8164: */
                   8165: typedef struct VdbeFunc VdbeFunc;
                   8166: typedef struct Mem Mem;
                   8167: typedef struct SubProgram SubProgram;
                   8168: 
                   8169: /*
                   8170: ** A single instruction of the virtual machine has an opcode
                   8171: ** and as many as three operands.  The instruction is recorded
                   8172: ** as an instance of the following structure:
                   8173: */
                   8174: struct VdbeOp {
                   8175:   u8 opcode;          /* What operation to perform */
                   8176:   signed char p4type; /* One of the P4_xxx constants for p4 */
                   8177:   u8 opflags;         /* Mask of the OPFLG_* flags in opcodes.h */
                   8178:   u8 p5;              /* Fifth parameter is an unsigned character */
                   8179:   int p1;             /* First operand */
                   8180:   int p2;             /* Second parameter (often the jump destination) */
                   8181:   int p3;             /* The third parameter */
                   8182:   union {             /* fourth parameter */
                   8183:     int i;                 /* Integer value if p4type==P4_INT32 */
                   8184:     void *p;               /* Generic pointer */
                   8185:     char *z;               /* Pointer to data for string (char array) types */
                   8186:     i64 *pI64;             /* Used when p4type is P4_INT64 */
                   8187:     double *pReal;         /* Used when p4type is P4_REAL */
                   8188:     FuncDef *pFunc;        /* Used when p4type is P4_FUNCDEF */
                   8189:     VdbeFunc *pVdbeFunc;   /* Used when p4type is P4_VDBEFUNC */
                   8190:     CollSeq *pColl;        /* Used when p4type is P4_COLLSEQ */
                   8191:     Mem *pMem;             /* Used when p4type is P4_MEM */
                   8192:     VTable *pVtab;         /* Used when p4type is P4_VTAB */
                   8193:     KeyInfo *pKeyInfo;     /* Used when p4type is P4_KEYINFO */
                   8194:     int *ai;               /* Used when p4type is P4_INTARRAY */
                   8195:     SubProgram *pProgram;  /* Used when p4type is P4_SUBPROGRAM */
                   8196:   } p4;
                   8197: #ifdef SQLITE_DEBUG
                   8198:   char *zComment;          /* Comment to improve readability */
                   8199: #endif
                   8200: #ifdef VDBE_PROFILE
                   8201:   int cnt;                 /* Number of times this instruction was executed */
                   8202:   u64 cycles;              /* Total time spent executing this instruction */
                   8203: #endif
                   8204: };
                   8205: typedef struct VdbeOp VdbeOp;
                   8206: 
                   8207: 
                   8208: /*
                   8209: ** A sub-routine used to implement a trigger program.
                   8210: */
                   8211: struct SubProgram {
                   8212:   VdbeOp *aOp;                  /* Array of opcodes for sub-program */
                   8213:   int nOp;                      /* Elements in aOp[] */
                   8214:   int nMem;                     /* Number of memory cells required */
                   8215:   int nCsr;                     /* Number of cursors required */
                   8216:   void *token;                  /* id that may be used to recursive triggers */
                   8217:   SubProgram *pNext;            /* Next sub-program already visited */
                   8218: };
                   8219: 
                   8220: /*
                   8221: ** A smaller version of VdbeOp used for the VdbeAddOpList() function because
                   8222: ** it takes up less space.
                   8223: */
                   8224: struct VdbeOpList {
                   8225:   u8 opcode;          /* What operation to perform */
                   8226:   signed char p1;     /* First operand */
                   8227:   signed char p2;     /* Second parameter (often the jump destination) */
                   8228:   signed char p3;     /* Third parameter */
                   8229: };
                   8230: typedef struct VdbeOpList VdbeOpList;
                   8231: 
                   8232: /*
                   8233: ** Allowed values of VdbeOp.p4type
                   8234: */
                   8235: #define P4_NOTUSED    0   /* The P4 parameter is not used */
                   8236: #define P4_DYNAMIC  (-1)  /* Pointer to a string obtained from sqliteMalloc() */
                   8237: #define P4_STATIC   (-2)  /* Pointer to a static string */
                   8238: #define P4_COLLSEQ  (-4)  /* P4 is a pointer to a CollSeq structure */
                   8239: #define P4_FUNCDEF  (-5)  /* P4 is a pointer to a FuncDef structure */
                   8240: #define P4_KEYINFO  (-6)  /* P4 is a pointer to a KeyInfo structure */
                   8241: #define P4_VDBEFUNC (-7)  /* P4 is a pointer to a VdbeFunc structure */
                   8242: #define P4_MEM      (-8)  /* P4 is a pointer to a Mem*    structure */
                   8243: #define P4_TRANSIENT  0   /* P4 is a pointer to a transient string */
                   8244: #define P4_VTAB     (-10) /* P4 is a pointer to an sqlite3_vtab structure */
                   8245: #define P4_MPRINTF  (-11) /* P4 is a string obtained from sqlite3_mprintf() */
                   8246: #define P4_REAL     (-12) /* P4 is a 64-bit floating point value */
                   8247: #define P4_INT64    (-13) /* P4 is a 64-bit signed integer */
                   8248: #define P4_INT32    (-14) /* P4 is a 32-bit signed integer */
                   8249: #define P4_INTARRAY (-15) /* P4 is a vector of 32-bit integers */
                   8250: #define P4_SUBPROGRAM  (-18) /* P4 is a pointer to a SubProgram structure */
                   8251: 
                   8252: /* When adding a P4 argument using P4_KEYINFO, a copy of the KeyInfo structure
                   8253: ** is made.  That copy is freed when the Vdbe is finalized.  But if the
                   8254: ** argument is P4_KEYINFO_HANDOFF, the passed in pointer is used.  It still
                   8255: ** gets freed when the Vdbe is finalized so it still should be obtained
                   8256: ** from a single sqliteMalloc().  But no copy is made and the calling
                   8257: ** function should *not* try to free the KeyInfo.
                   8258: */
                   8259: #define P4_KEYINFO_HANDOFF (-16)
                   8260: #define P4_KEYINFO_STATIC  (-17)
                   8261: 
                   8262: /*
                   8263: ** The Vdbe.aColName array contains 5n Mem structures, where n is the 
                   8264: ** number of columns of data returned by the statement.
                   8265: */
                   8266: #define COLNAME_NAME     0
                   8267: #define COLNAME_DECLTYPE 1
                   8268: #define COLNAME_DATABASE 2
                   8269: #define COLNAME_TABLE    3
                   8270: #define COLNAME_COLUMN   4
                   8271: #ifdef SQLITE_ENABLE_COLUMN_METADATA
                   8272: # define COLNAME_N        5      /* Number of COLNAME_xxx symbols */
                   8273: #else
                   8274: # ifdef SQLITE_OMIT_DECLTYPE
                   8275: #   define COLNAME_N      1      /* Store only the name */
                   8276: # else
                   8277: #   define COLNAME_N      2      /* Store the name and decltype */
                   8278: # endif
                   8279: #endif
                   8280: 
                   8281: /*
                   8282: ** The following macro converts a relative address in the p2 field
                   8283: ** of a VdbeOp structure into a negative number so that 
                   8284: ** sqlite3VdbeAddOpList() knows that the address is relative.  Calling
                   8285: ** the macro again restores the address.
                   8286: */
                   8287: #define ADDR(X)  (-1-(X))
                   8288: 
                   8289: /*
                   8290: ** The makefile scans the vdbe.c source file and creates the "opcodes.h"
                   8291: ** header file that defines a number for each opcode used by the VDBE.
                   8292: */
                   8293: /************** Include opcodes.h in the middle of vdbe.h ********************/
                   8294: /************** Begin file opcodes.h *****************************************/
                   8295: /* Automatically generated.  Do not edit */
                   8296: /* See the mkopcodeh.awk script for details */
                   8297: #define OP_Goto                                 1
                   8298: #define OP_Gosub                                2
                   8299: #define OP_Return                               3
                   8300: #define OP_Yield                                4
                   8301: #define OP_HaltIfNull                           5
                   8302: #define OP_Halt                                 6
                   8303: #define OP_Integer                              7
                   8304: #define OP_Int64                                8
                   8305: #define OP_Real                               130   /* same as TK_FLOAT    */
                   8306: #define OP_String8                             94   /* same as TK_STRING   */
                   8307: #define OP_String                               9
                   8308: #define OP_Null                                10
                   8309: #define OP_Blob                                11
                   8310: #define OP_Variable                            12
                   8311: #define OP_Move                                13
                   8312: #define OP_Copy                                14
                   8313: #define OP_SCopy                               15
                   8314: #define OP_ResultRow                           16
                   8315: #define OP_Concat                              91   /* same as TK_CONCAT   */
                   8316: #define OP_Add                                 86   /* same as TK_PLUS     */
                   8317: #define OP_Subtract                            87   /* same as TK_MINUS    */
                   8318: #define OP_Multiply                            88   /* same as TK_STAR     */
                   8319: #define OP_Divide                              89   /* same as TK_SLASH    */
                   8320: #define OP_Remainder                           90   /* same as TK_REM      */
                   8321: #define OP_CollSeq                             17
                   8322: #define OP_Function                            18
                   8323: #define OP_BitAnd                              82   /* same as TK_BITAND   */
                   8324: #define OP_BitOr                               83   /* same as TK_BITOR    */
                   8325: #define OP_ShiftLeft                           84   /* same as TK_LSHIFT   */
                   8326: #define OP_ShiftRight                          85   /* same as TK_RSHIFT   */
                   8327: #define OP_AddImm                              20
                   8328: #define OP_MustBeInt                           21
                   8329: #define OP_RealAffinity                        22
                   8330: #define OP_ToText                             141   /* same as TK_TO_TEXT  */
                   8331: #define OP_ToBlob                             142   /* same as TK_TO_BLOB  */
                   8332: #define OP_ToNumeric                          143   /* same as TK_TO_NUMERIC*/
                   8333: #define OP_ToInt                              144   /* same as TK_TO_INT   */
                   8334: #define OP_ToReal                             145   /* same as TK_TO_REAL  */
                   8335: #define OP_Eq                                  76   /* same as TK_EQ       */
                   8336: #define OP_Ne                                  75   /* same as TK_NE       */
                   8337: #define OP_Lt                                  79   /* same as TK_LT       */
                   8338: #define OP_Le                                  78   /* same as TK_LE       */
                   8339: #define OP_Gt                                  77   /* same as TK_GT       */
                   8340: #define OP_Ge                                  80   /* same as TK_GE       */
                   8341: #define OP_Permutation                         23
                   8342: #define OP_Compare                             24
                   8343: #define OP_Jump                                25
                   8344: #define OP_And                                 69   /* same as TK_AND      */
                   8345: #define OP_Or                                  68   /* same as TK_OR       */
                   8346: #define OP_Not                                 19   /* same as TK_NOT      */
                   8347: #define OP_BitNot                              93   /* same as TK_BITNOT   */
                   8348: #define OP_If                                  26
                   8349: #define OP_IfNot                               27
                   8350: #define OP_IsNull                              73   /* same as TK_ISNULL   */
                   8351: #define OP_NotNull                             74   /* same as TK_NOTNULL  */
                   8352: #define OP_Column                              28
                   8353: #define OP_Affinity                            29
                   8354: #define OP_MakeRecord                          30
                   8355: #define OP_Count                               31
                   8356: #define OP_Savepoint                           32
                   8357: #define OP_AutoCommit                          33
                   8358: #define OP_Transaction                         34
                   8359: #define OP_ReadCookie                          35
                   8360: #define OP_SetCookie                           36
                   8361: #define OP_VerifyCookie                        37
                   8362: #define OP_OpenRead                            38
                   8363: #define OP_OpenWrite                           39
                   8364: #define OP_OpenAutoindex                       40
                   8365: #define OP_OpenEphemeral                       41
                   8366: #define OP_OpenPseudo                          42
                   8367: #define OP_Close                               43
                   8368: #define OP_SeekLt                              44
                   8369: #define OP_SeekLe                              45
                   8370: #define OP_SeekGe                              46
                   8371: #define OP_SeekGt                              47
                   8372: #define OP_Seek                                48
                   8373: #define OP_NotFound                            49
                   8374: #define OP_Found                               50
                   8375: #define OP_IsUnique                            51
                   8376: #define OP_NotExists                           52
                   8377: #define OP_Sequence                            53
                   8378: #define OP_NewRowid                            54
                   8379: #define OP_Insert                              55
                   8380: #define OP_InsertInt                           56
                   8381: #define OP_Delete                              57
                   8382: #define OP_ResetCount                          58
                   8383: #define OP_RowKey                              59
                   8384: #define OP_RowData                             60
                   8385: #define OP_Rowid                               61
                   8386: #define OP_NullRow                             62
                   8387: #define OP_Last                                63
                   8388: #define OP_Sort                                64
                   8389: #define OP_Rewind                              65
                   8390: #define OP_Prev                                66
                   8391: #define OP_Next                                67
                   8392: #define OP_IdxInsert                           70
                   8393: #define OP_IdxDelete                           71
                   8394: #define OP_IdxRowid                            72
                   8395: #define OP_IdxLT                               81
                   8396: #define OP_IdxGE                               92
                   8397: #define OP_Destroy                             95
                   8398: #define OP_Clear                               96
                   8399: #define OP_CreateIndex                         97
                   8400: #define OP_CreateTable                         98
                   8401: #define OP_ParseSchema                         99
                   8402: #define OP_LoadAnalysis                       100
                   8403: #define OP_DropTable                          101
                   8404: #define OP_DropIndex                          102
                   8405: #define OP_DropTrigger                        103
                   8406: #define OP_IntegrityCk                        104
                   8407: #define OP_RowSetAdd                          105
                   8408: #define OP_RowSetRead                         106
                   8409: #define OP_RowSetTest                         107
                   8410: #define OP_Program                            108
                   8411: #define OP_Param                              109
                   8412: #define OP_FkCounter                          110
                   8413: #define OP_FkIfZero                           111
                   8414: #define OP_MemMax                             112
                   8415: #define OP_IfPos                              113
                   8416: #define OP_IfNeg                              114
                   8417: #define OP_IfZero                             115
                   8418: #define OP_AggStep                            116
                   8419: #define OP_AggFinal                           117
                   8420: #define OP_Checkpoint                         118
                   8421: #define OP_JournalMode                        119
                   8422: #define OP_Vacuum                             120
                   8423: #define OP_IncrVacuum                         121
                   8424: #define OP_Expire                             122
                   8425: #define OP_TableLock                          123
                   8426: #define OP_VBegin                             124
                   8427: #define OP_VCreate                            125
                   8428: #define OP_VDestroy                           126
                   8429: #define OP_VOpen                              127
                   8430: #define OP_VFilter                            128
                   8431: #define OP_VColumn                            129
                   8432: #define OP_VNext                              131
                   8433: #define OP_VRename                            132
                   8434: #define OP_VUpdate                            133
                   8435: #define OP_Pagecount                          134
                   8436: #define OP_MaxPgcnt                           135
                   8437: #define OP_Trace                              136
                   8438: #define OP_Noop                               137
                   8439: #define OP_Explain                            138
                   8440: 
                   8441: /* The following opcode values are never used */
                   8442: #define OP_NotUsed_139                        139
                   8443: #define OP_NotUsed_140                        140
                   8444: 
                   8445: 
                   8446: /* Properties such as "out2" or "jump" that are specified in
                   8447: ** comments following the "case" for each opcode in the vdbe.c
                   8448: ** are encoded into bitvectors as follows:
                   8449: */
                   8450: #define OPFLG_JUMP            0x0001  /* jump:  P2 holds jmp target */
                   8451: #define OPFLG_OUT2_PRERELEASE 0x0002  /* out2-prerelease: */
                   8452: #define OPFLG_IN1             0x0004  /* in1:   P1 is an input */
                   8453: #define OPFLG_IN2             0x0008  /* in2:   P2 is an input */
                   8454: #define OPFLG_IN3             0x0010  /* in3:   P3 is an input */
                   8455: #define OPFLG_OUT2            0x0020  /* out2:  P2 is an output */
                   8456: #define OPFLG_OUT3            0x0040  /* out3:  P3 is an output */
                   8457: #define OPFLG_INITIALIZER {\
                   8458: /*   0 */ 0x00, 0x01, 0x05, 0x04, 0x04, 0x10, 0x00, 0x02,\
                   8459: /*   8 */ 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x24, 0x24,\
                   8460: /*  16 */ 0x00, 0x00, 0x00, 0x24, 0x04, 0x05, 0x04, 0x00,\
                   8461: /*  24 */ 0x00, 0x01, 0x05, 0x05, 0x00, 0x00, 0x00, 0x02,\
                   8462: /*  32 */ 0x00, 0x00, 0x00, 0x02, 0x10, 0x00, 0x00, 0x00,\
                   8463: /*  40 */ 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x11, 0x11,\
                   8464: /*  48 */ 0x08, 0x11, 0x11, 0x11, 0x11, 0x02, 0x02, 0x00,\
                   8465: /*  56 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01,\
                   8466: /*  64 */ 0x01, 0x01, 0x01, 0x01, 0x4c, 0x4c, 0x08, 0x00,\
                   8467: /*  72 */ 0x02, 0x05, 0x05, 0x15, 0x15, 0x15, 0x15, 0x15,\
                   8468: /*  80 */ 0x15, 0x01, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c,\
                   8469: /*  88 */ 0x4c, 0x4c, 0x4c, 0x4c, 0x01, 0x24, 0x02, 0x02,\
                   8470: /*  96 */ 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,\
                   8471: /* 104 */ 0x00, 0x0c, 0x45, 0x15, 0x01, 0x02, 0x00, 0x01,\
                   8472: /* 112 */ 0x08, 0x05, 0x05, 0x05, 0x00, 0x00, 0x00, 0x02,\
                   8473: /* 120 */ 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\
                   8474: /* 128 */ 0x01, 0x00, 0x02, 0x01, 0x00, 0x00, 0x02, 0x02,\
                   8475: /* 136 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x04,\
                   8476: /* 144 */ 0x04, 0x04,}
                   8477: 
                   8478: /************** End of opcodes.h *********************************************/
                   8479: /************** Continuing where we left off in vdbe.h ***********************/
                   8480: 
                   8481: /*
                   8482: ** Prototypes for the VDBE interface.  See comments on the implementation
                   8483: ** for a description of what each of these routines does.
                   8484: */
                   8485: SQLITE_PRIVATE Vdbe *sqlite3VdbeCreate(sqlite3*);
                   8486: SQLITE_PRIVATE int sqlite3VdbeAddOp0(Vdbe*,int);
                   8487: SQLITE_PRIVATE int sqlite3VdbeAddOp1(Vdbe*,int,int);
                   8488: SQLITE_PRIVATE int sqlite3VdbeAddOp2(Vdbe*,int,int,int);
                   8489: SQLITE_PRIVATE int sqlite3VdbeAddOp3(Vdbe*,int,int,int,int);
                   8490: SQLITE_PRIVATE int sqlite3VdbeAddOp4(Vdbe*,int,int,int,int,const char *zP4,int);
                   8491: SQLITE_PRIVATE int sqlite3VdbeAddOp4Int(Vdbe*,int,int,int,int,int);
                   8492: SQLITE_PRIVATE int sqlite3VdbeAddOpList(Vdbe*, int nOp, VdbeOpList const *aOp);
                   8493: SQLITE_PRIVATE void sqlite3VdbeAddParseSchemaOp(Vdbe*,int,char*);
                   8494: SQLITE_PRIVATE void sqlite3VdbeChangeP1(Vdbe*, int addr, int P1);
                   8495: SQLITE_PRIVATE void sqlite3VdbeChangeP2(Vdbe*, int addr, int P2);
                   8496: SQLITE_PRIVATE void sqlite3VdbeChangeP3(Vdbe*, int addr, int P3);
                   8497: SQLITE_PRIVATE void sqlite3VdbeChangeP5(Vdbe*, u8 P5);
                   8498: SQLITE_PRIVATE void sqlite3VdbeJumpHere(Vdbe*, int addr);
                   8499: SQLITE_PRIVATE void sqlite3VdbeChangeToNoop(Vdbe*, int addr, int N);
                   8500: SQLITE_PRIVATE void sqlite3VdbeChangeP4(Vdbe*, int addr, const char *zP4, int N);
                   8501: SQLITE_PRIVATE void sqlite3VdbeUsesBtree(Vdbe*, int);
                   8502: SQLITE_PRIVATE VdbeOp *sqlite3VdbeGetOp(Vdbe*, int);
                   8503: SQLITE_PRIVATE int sqlite3VdbeMakeLabel(Vdbe*);
                   8504: SQLITE_PRIVATE void sqlite3VdbeRunOnlyOnce(Vdbe*);
                   8505: SQLITE_PRIVATE void sqlite3VdbeDelete(Vdbe*);
                   8506: SQLITE_PRIVATE void sqlite3VdbeDeleteObject(sqlite3*,Vdbe*);
                   8507: SQLITE_PRIVATE void sqlite3VdbeMakeReady(Vdbe*,Parse*);
                   8508: SQLITE_PRIVATE int sqlite3VdbeFinalize(Vdbe*);
                   8509: SQLITE_PRIVATE void sqlite3VdbeResolveLabel(Vdbe*, int);
                   8510: SQLITE_PRIVATE int sqlite3VdbeCurrentAddr(Vdbe*);
                   8511: #ifdef SQLITE_DEBUG
                   8512: SQLITE_PRIVATE   int sqlite3VdbeAssertMayAbort(Vdbe *, int);
                   8513: SQLITE_PRIVATE   void sqlite3VdbeTrace(Vdbe*,FILE*);
                   8514: #endif
                   8515: SQLITE_PRIVATE void sqlite3VdbeResetStepResult(Vdbe*);
                   8516: SQLITE_PRIVATE void sqlite3VdbeRewind(Vdbe*);
                   8517: SQLITE_PRIVATE int sqlite3VdbeReset(Vdbe*);
                   8518: SQLITE_PRIVATE void sqlite3VdbeSetNumCols(Vdbe*,int);
                   8519: SQLITE_PRIVATE int sqlite3VdbeSetColName(Vdbe*, int, int, const char *, void(*)(void*));
                   8520: SQLITE_PRIVATE void sqlite3VdbeCountChanges(Vdbe*);
                   8521: SQLITE_PRIVATE sqlite3 *sqlite3VdbeDb(Vdbe*);
                   8522: SQLITE_PRIVATE void sqlite3VdbeSetSql(Vdbe*, const char *z, int n, int);
                   8523: SQLITE_PRIVATE void sqlite3VdbeSwap(Vdbe*,Vdbe*);
                   8524: SQLITE_PRIVATE VdbeOp *sqlite3VdbeTakeOpArray(Vdbe*, int*, int*);
                   8525: SQLITE_PRIVATE sqlite3_value *sqlite3VdbeGetValue(Vdbe*, int, u8);
                   8526: SQLITE_PRIVATE void sqlite3VdbeSetVarmask(Vdbe*, int);
                   8527: #ifndef SQLITE_OMIT_TRACE
                   8528: SQLITE_PRIVATE   char *sqlite3VdbeExpandSql(Vdbe*, const char*);
                   8529: #endif
                   8530: 
                   8531: SQLITE_PRIVATE UnpackedRecord *sqlite3VdbeRecordUnpack(KeyInfo*,int,const void*,char*,int);
                   8532: SQLITE_PRIVATE void sqlite3VdbeDeleteUnpackedRecord(UnpackedRecord*);
                   8533: SQLITE_PRIVATE int sqlite3VdbeRecordCompare(int,const void*,UnpackedRecord*);
                   8534: 
                   8535: #ifndef SQLITE_OMIT_TRIGGER
                   8536: SQLITE_PRIVATE void sqlite3VdbeLinkSubProgram(Vdbe *, SubProgram *);
                   8537: #endif
                   8538: 
                   8539: 
                   8540: #ifndef NDEBUG
                   8541: SQLITE_PRIVATE   void sqlite3VdbeComment(Vdbe*, const char*, ...);
                   8542: # define VdbeComment(X)  sqlite3VdbeComment X
                   8543: SQLITE_PRIVATE   void sqlite3VdbeNoopComment(Vdbe*, const char*, ...);
                   8544: # define VdbeNoopComment(X)  sqlite3VdbeNoopComment X
                   8545: #else
                   8546: # define VdbeComment(X)
                   8547: # define VdbeNoopComment(X)
                   8548: #endif
                   8549: 
                   8550: #endif
                   8551: 
                   8552: /************** End of vdbe.h ************************************************/
                   8553: /************** Continuing where we left off in sqliteInt.h ******************/
                   8554: /************** Include pager.h in the middle of sqliteInt.h *****************/
                   8555: /************** Begin file pager.h *******************************************/
                   8556: /*
                   8557: ** 2001 September 15
                   8558: **
                   8559: ** The author disclaims copyright to this source code.  In place of
                   8560: ** a legal notice, here is a blessing:
                   8561: **
                   8562: **    May you do good and not evil.
                   8563: **    May you find forgiveness for yourself and forgive others.
                   8564: **    May you share freely, never taking more than you give.
                   8565: **
                   8566: *************************************************************************
                   8567: ** This header file defines the interface that the sqlite page cache
                   8568: ** subsystem.  The page cache subsystem reads and writes a file a page
                   8569: ** at a time and provides a journal for rollback.
                   8570: */
                   8571: 
                   8572: #ifndef _PAGER_H_
                   8573: #define _PAGER_H_
                   8574: 
                   8575: /*
                   8576: ** Default maximum size for persistent journal files. A negative 
                   8577: ** value means no limit. This value may be overridden using the 
                   8578: ** sqlite3PagerJournalSizeLimit() API. See also "PRAGMA journal_size_limit".
                   8579: */
                   8580: #ifndef SQLITE_DEFAULT_JOURNAL_SIZE_LIMIT
                   8581:   #define SQLITE_DEFAULT_JOURNAL_SIZE_LIMIT -1
                   8582: #endif
                   8583: 
                   8584: /*
                   8585: ** The type used to represent a page number.  The first page in a file
                   8586: ** is called page 1.  0 is used to represent "not a page".
                   8587: */
                   8588: typedef u32 Pgno;
                   8589: 
                   8590: /*
                   8591: ** Each open file is managed by a separate instance of the "Pager" structure.
                   8592: */
                   8593: typedef struct Pager Pager;
                   8594: 
                   8595: /*
                   8596: ** Handle type for pages.
                   8597: */
                   8598: typedef struct PgHdr DbPage;
                   8599: 
                   8600: /*
                   8601: ** Page number PAGER_MJ_PGNO is never used in an SQLite database (it is
                   8602: ** reserved for working around a windows/posix incompatibility). It is
                   8603: ** used in the journal to signify that the remainder of the journal file 
                   8604: ** is devoted to storing a master journal name - there are no more pages to
                   8605: ** roll back. See comments for function writeMasterJournal() in pager.c 
                   8606: ** for details.
                   8607: */
                   8608: #define PAGER_MJ_PGNO(x) ((Pgno)((PENDING_BYTE/((x)->pageSize))+1))
                   8609: 
                   8610: /*
                   8611: ** Allowed values for the flags parameter to sqlite3PagerOpen().
                   8612: **
                   8613: ** NOTE: These values must match the corresponding BTREE_ values in btree.h.
                   8614: */
                   8615: #define PAGER_OMIT_JOURNAL  0x0001    /* Do not use a rollback journal */
                   8616: #define PAGER_NO_READLOCK   0x0002    /* Omit readlocks on readonly files */
                   8617: #define PAGER_MEMORY        0x0004    /* In-memory database */
                   8618: 
                   8619: /*
                   8620: ** Valid values for the second argument to sqlite3PagerLockingMode().
                   8621: */
                   8622: #define PAGER_LOCKINGMODE_QUERY      -1
                   8623: #define PAGER_LOCKINGMODE_NORMAL      0
                   8624: #define PAGER_LOCKINGMODE_EXCLUSIVE   1
                   8625: 
                   8626: /*
                   8627: ** Numeric constants that encode the journalmode.  
                   8628: */
                   8629: #define PAGER_JOURNALMODE_QUERY     (-1)  /* Query the value of journalmode */
                   8630: #define PAGER_JOURNALMODE_DELETE      0   /* Commit by deleting journal file */
                   8631: #define PAGER_JOURNALMODE_PERSIST     1   /* Commit by zeroing journal header */
                   8632: #define PAGER_JOURNALMODE_OFF         2   /* Journal omitted.  */
                   8633: #define PAGER_JOURNALMODE_TRUNCATE    3   /* Commit by truncating journal */
                   8634: #define PAGER_JOURNALMODE_MEMORY      4   /* In-memory journal file */
                   8635: #define PAGER_JOURNALMODE_WAL         5   /* Use write-ahead logging */
                   8636: 
                   8637: /*
                   8638: ** The remainder of this file contains the declarations of the functions
                   8639: ** that make up the Pager sub-system API. See source code comments for 
                   8640: ** a detailed description of each routine.
                   8641: */
                   8642: 
                   8643: /* Open and close a Pager connection. */ 
                   8644: SQLITE_PRIVATE int sqlite3PagerOpen(
                   8645:   sqlite3_vfs*,
                   8646:   Pager **ppPager,
                   8647:   const char*,
                   8648:   int,
                   8649:   int,
                   8650:   int,
                   8651:   void(*)(DbPage*)
                   8652: );
                   8653: SQLITE_PRIVATE int sqlite3PagerClose(Pager *pPager);
                   8654: SQLITE_PRIVATE int sqlite3PagerReadFileheader(Pager*, int, unsigned char*);
                   8655: 
                   8656: /* Functions used to configure a Pager object. */
                   8657: SQLITE_PRIVATE void sqlite3PagerSetBusyhandler(Pager*, int(*)(void *), void *);
                   8658: SQLITE_PRIVATE int sqlite3PagerSetPagesize(Pager*, u32*, int);
                   8659: SQLITE_PRIVATE int sqlite3PagerMaxPageCount(Pager*, int);
                   8660: SQLITE_PRIVATE void sqlite3PagerSetCachesize(Pager*, int);
                   8661: SQLITE_PRIVATE void sqlite3PagerSetSafetyLevel(Pager*,int,int,int);
                   8662: SQLITE_PRIVATE int sqlite3PagerLockingMode(Pager *, int);
                   8663: SQLITE_PRIVATE int sqlite3PagerSetJournalMode(Pager *, int);
                   8664: SQLITE_PRIVATE int sqlite3PagerGetJournalMode(Pager*);
                   8665: SQLITE_PRIVATE int sqlite3PagerOkToChangeJournalMode(Pager*);
                   8666: SQLITE_PRIVATE i64 sqlite3PagerJournalSizeLimit(Pager *, i64);
                   8667: SQLITE_PRIVATE sqlite3_backup **sqlite3PagerBackupPtr(Pager*);
                   8668: 
                   8669: /* Functions used to obtain and release page references. */ 
                   8670: SQLITE_PRIVATE int sqlite3PagerAcquire(Pager *pPager, Pgno pgno, DbPage **ppPage, int clrFlag);
                   8671: #define sqlite3PagerGet(A,B,C) sqlite3PagerAcquire(A,B,C,0)
                   8672: SQLITE_PRIVATE DbPage *sqlite3PagerLookup(Pager *pPager, Pgno pgno);
                   8673: SQLITE_PRIVATE void sqlite3PagerRef(DbPage*);
                   8674: SQLITE_PRIVATE void sqlite3PagerUnref(DbPage*);
                   8675: 
                   8676: /* Operations on page references. */
                   8677: SQLITE_PRIVATE int sqlite3PagerWrite(DbPage*);
                   8678: SQLITE_PRIVATE void sqlite3PagerDontWrite(DbPage*);
                   8679: SQLITE_PRIVATE int sqlite3PagerMovepage(Pager*,DbPage*,Pgno,int);
                   8680: SQLITE_PRIVATE int sqlite3PagerPageRefcount(DbPage*);
                   8681: SQLITE_PRIVATE void *sqlite3PagerGetData(DbPage *); 
                   8682: SQLITE_PRIVATE void *sqlite3PagerGetExtra(DbPage *); 
                   8683: 
                   8684: /* Functions used to manage pager transactions and savepoints. */
                   8685: SQLITE_PRIVATE void sqlite3PagerPagecount(Pager*, int*);
                   8686: SQLITE_PRIVATE int sqlite3PagerBegin(Pager*, int exFlag, int);
                   8687: SQLITE_PRIVATE int sqlite3PagerCommitPhaseOne(Pager*,const char *zMaster, int);
                   8688: SQLITE_PRIVATE int sqlite3PagerExclusiveLock(Pager*);
                   8689: SQLITE_PRIVATE int sqlite3PagerSync(Pager *pPager);
                   8690: SQLITE_PRIVATE int sqlite3PagerCommitPhaseTwo(Pager*);
                   8691: SQLITE_PRIVATE int sqlite3PagerRollback(Pager*);
                   8692: SQLITE_PRIVATE int sqlite3PagerOpenSavepoint(Pager *pPager, int n);
                   8693: SQLITE_PRIVATE int sqlite3PagerSavepoint(Pager *pPager, int op, int iSavepoint);
                   8694: SQLITE_PRIVATE int sqlite3PagerSharedLock(Pager *pPager);
                   8695: 
                   8696: SQLITE_PRIVATE int sqlite3PagerCheckpoint(Pager *pPager, int, int*, int*);
                   8697: SQLITE_PRIVATE int sqlite3PagerWalSupported(Pager *pPager);
                   8698: SQLITE_PRIVATE int sqlite3PagerWalCallback(Pager *pPager);
                   8699: SQLITE_PRIVATE int sqlite3PagerOpenWal(Pager *pPager, int *pisOpen);
                   8700: SQLITE_PRIVATE int sqlite3PagerCloseWal(Pager *pPager);
                   8701: 
                   8702: /* Functions used to query pager state and configuration. */
                   8703: SQLITE_PRIVATE u8 sqlite3PagerIsreadonly(Pager*);
                   8704: SQLITE_PRIVATE int sqlite3PagerRefcount(Pager*);
                   8705: SQLITE_PRIVATE int sqlite3PagerMemUsed(Pager*);
                   8706: SQLITE_PRIVATE const char *sqlite3PagerFilename(Pager*);
                   8707: SQLITE_PRIVATE const sqlite3_vfs *sqlite3PagerVfs(Pager*);
                   8708: SQLITE_PRIVATE sqlite3_file *sqlite3PagerFile(Pager*);
                   8709: SQLITE_PRIVATE const char *sqlite3PagerJournalname(Pager*);
                   8710: SQLITE_PRIVATE int sqlite3PagerNosync(Pager*);
                   8711: SQLITE_PRIVATE void *sqlite3PagerTempSpace(Pager*);
                   8712: SQLITE_PRIVATE int sqlite3PagerIsMemdb(Pager*);
                   8713: 
                   8714: /* Functions used to truncate the database file. */
                   8715: SQLITE_PRIVATE void sqlite3PagerTruncateImage(Pager*,Pgno);
                   8716: 
                   8717: #if defined(SQLITE_HAS_CODEC) && !defined(SQLITE_OMIT_WAL)
                   8718: SQLITE_PRIVATE void *sqlite3PagerCodec(DbPage *);
                   8719: #endif
                   8720: 
                   8721: /* Functions to support testing and debugging. */
                   8722: #if !defined(NDEBUG) || defined(SQLITE_TEST)
                   8723: SQLITE_PRIVATE   Pgno sqlite3PagerPagenumber(DbPage*);
                   8724: SQLITE_PRIVATE   int sqlite3PagerIswriteable(DbPage*);
                   8725: #endif
                   8726: #ifdef SQLITE_TEST
                   8727: SQLITE_PRIVATE   int *sqlite3PagerStats(Pager*);
                   8728: SQLITE_PRIVATE   void sqlite3PagerRefdump(Pager*);
                   8729:   void disable_simulated_io_errors(void);
                   8730:   void enable_simulated_io_errors(void);
                   8731: #else
                   8732: # define disable_simulated_io_errors()
                   8733: # define enable_simulated_io_errors()
                   8734: #endif
                   8735: 
                   8736: #endif /* _PAGER_H_ */
                   8737: 
                   8738: /************** End of pager.h ***********************************************/
                   8739: /************** Continuing where we left off in sqliteInt.h ******************/
                   8740: /************** Include pcache.h in the middle of sqliteInt.h ****************/
                   8741: /************** Begin file pcache.h ******************************************/
                   8742: /*
                   8743: ** 2008 August 05
                   8744: **
                   8745: ** The author disclaims copyright to this source code.  In place of
                   8746: ** a legal notice, here is a blessing:
                   8747: **
                   8748: **    May you do good and not evil.
                   8749: **    May you find forgiveness for yourself and forgive others.
                   8750: **    May you share freely, never taking more than you give.
                   8751: **
                   8752: *************************************************************************
                   8753: ** This header file defines the interface that the sqlite page cache
                   8754: ** subsystem. 
                   8755: */
                   8756: 
                   8757: #ifndef _PCACHE_H_
                   8758: 
                   8759: typedef struct PgHdr PgHdr;
                   8760: typedef struct PCache PCache;
                   8761: 
                   8762: /*
                   8763: ** Every page in the cache is controlled by an instance of the following
                   8764: ** structure.
                   8765: */
                   8766: struct PgHdr {
                   8767:   void *pData;                   /* Content of this page */
                   8768:   void *pExtra;                  /* Extra content */
                   8769:   PgHdr *pDirty;                 /* Transient list of dirty pages */
                   8770:   Pgno pgno;                     /* Page number for this page */
                   8771:   Pager *pPager;                 /* The pager this page is part of */
                   8772: #ifdef SQLITE_CHECK_PAGES
                   8773:   u32 pageHash;                  /* Hash of page content */
                   8774: #endif
                   8775:   u16 flags;                     /* PGHDR flags defined below */
                   8776: 
                   8777:   /**********************************************************************
                   8778:   ** Elements above are public.  All that follows is private to pcache.c
                   8779:   ** and should not be accessed by other modules.
                   8780:   */
                   8781:   i16 nRef;                      /* Number of users of this page */
                   8782:   PCache *pCache;                /* Cache that owns this page */
                   8783: 
                   8784:   PgHdr *pDirtyNext;             /* Next element in list of dirty pages */
                   8785:   PgHdr *pDirtyPrev;             /* Previous element in list of dirty pages */
                   8786: };
                   8787: 
                   8788: /* Bit values for PgHdr.flags */
                   8789: #define PGHDR_DIRTY             0x002  /* Page has changed */
                   8790: #define PGHDR_NEED_SYNC         0x004  /* Fsync the rollback journal before
                   8791:                                        ** writing this page to the database */
                   8792: #define PGHDR_NEED_READ         0x008  /* Content is unread */
                   8793: #define PGHDR_REUSE_UNLIKELY    0x010  /* A hint that reuse is unlikely */
                   8794: #define PGHDR_DONT_WRITE        0x020  /* Do not write content to disk */
                   8795: 
                   8796: /* Initialize and shutdown the page cache subsystem */
                   8797: SQLITE_PRIVATE int sqlite3PcacheInitialize(void);
                   8798: SQLITE_PRIVATE void sqlite3PcacheShutdown(void);
                   8799: 
                   8800: /* Page cache buffer management:
                   8801: ** These routines implement SQLITE_CONFIG_PAGECACHE.
                   8802: */
                   8803: SQLITE_PRIVATE void sqlite3PCacheBufferSetup(void *, int sz, int n);
                   8804: 
                   8805: /* Create a new pager cache.
                   8806: ** Under memory stress, invoke xStress to try to make pages clean.
                   8807: ** Only clean and unpinned pages can be reclaimed.
                   8808: */
                   8809: SQLITE_PRIVATE void sqlite3PcacheOpen(
                   8810:   int szPage,                    /* Size of every page */
                   8811:   int szExtra,                   /* Extra space associated with each page */
                   8812:   int bPurgeable,                /* True if pages are on backing store */
                   8813:   int (*xStress)(void*, PgHdr*), /* Call to try to make pages clean */
                   8814:   void *pStress,                 /* Argument to xStress */
                   8815:   PCache *pToInit                /* Preallocated space for the PCache */
                   8816: );
                   8817: 
                   8818: /* Modify the page-size after the cache has been created. */
                   8819: SQLITE_PRIVATE void sqlite3PcacheSetPageSize(PCache *, int);
                   8820: 
                   8821: /* Return the size in bytes of a PCache object.  Used to preallocate
                   8822: ** storage space.
                   8823: */
                   8824: SQLITE_PRIVATE int sqlite3PcacheSize(void);
                   8825: 
                   8826: /* One release per successful fetch.  Page is pinned until released.
                   8827: ** Reference counted. 
                   8828: */
                   8829: SQLITE_PRIVATE int sqlite3PcacheFetch(PCache*, Pgno, int createFlag, PgHdr**);
                   8830: SQLITE_PRIVATE void sqlite3PcacheRelease(PgHdr*);
                   8831: 
                   8832: SQLITE_PRIVATE void sqlite3PcacheDrop(PgHdr*);         /* Remove page from cache */
                   8833: SQLITE_PRIVATE void sqlite3PcacheMakeDirty(PgHdr*);    /* Make sure page is marked dirty */
                   8834: SQLITE_PRIVATE void sqlite3PcacheMakeClean(PgHdr*);    /* Mark a single page as clean */
                   8835: SQLITE_PRIVATE void sqlite3PcacheCleanAll(PCache*);    /* Mark all dirty list pages as clean */
                   8836: 
                   8837: /* Change a page number.  Used by incr-vacuum. */
                   8838: SQLITE_PRIVATE void sqlite3PcacheMove(PgHdr*, Pgno);
                   8839: 
                   8840: /* Remove all pages with pgno>x.  Reset the cache if x==0 */
                   8841: SQLITE_PRIVATE void sqlite3PcacheTruncate(PCache*, Pgno x);
                   8842: 
                   8843: /* Get a list of all dirty pages in the cache, sorted by page number */
                   8844: SQLITE_PRIVATE PgHdr *sqlite3PcacheDirtyList(PCache*);
                   8845: 
                   8846: /* Reset and close the cache object */
                   8847: SQLITE_PRIVATE void sqlite3PcacheClose(PCache*);
                   8848: 
                   8849: /* Clear flags from pages of the page cache */
                   8850: SQLITE_PRIVATE void sqlite3PcacheClearSyncFlags(PCache *);
                   8851: 
                   8852: /* Discard the contents of the cache */
                   8853: SQLITE_PRIVATE void sqlite3PcacheClear(PCache*);
                   8854: 
                   8855: /* Return the total number of outstanding page references */
                   8856: SQLITE_PRIVATE int sqlite3PcacheRefCount(PCache*);
                   8857: 
                   8858: /* Increment the reference count of an existing page */
                   8859: SQLITE_PRIVATE void sqlite3PcacheRef(PgHdr*);
                   8860: 
                   8861: SQLITE_PRIVATE int sqlite3PcachePageRefcount(PgHdr*);
                   8862: 
                   8863: /* Return the total number of pages stored in the cache */
                   8864: SQLITE_PRIVATE int sqlite3PcachePagecount(PCache*);
                   8865: 
                   8866: #if defined(SQLITE_CHECK_PAGES) || defined(SQLITE_DEBUG)
                   8867: /* Iterate through all dirty pages currently stored in the cache. This
                   8868: ** interface is only available if SQLITE_CHECK_PAGES is defined when the 
                   8869: ** library is built.
                   8870: */
                   8871: SQLITE_PRIVATE void sqlite3PcacheIterateDirty(PCache *pCache, void (*xIter)(PgHdr *));
                   8872: #endif
                   8873: 
                   8874: /* Set and get the suggested cache-size for the specified pager-cache.
                   8875: **
                   8876: ** If no global maximum is configured, then the system attempts to limit
                   8877: ** the total number of pages cached by purgeable pager-caches to the sum
                   8878: ** of the suggested cache-sizes.
                   8879: */
                   8880: SQLITE_PRIVATE void sqlite3PcacheSetCachesize(PCache *, int);
                   8881: #ifdef SQLITE_TEST
                   8882: SQLITE_PRIVATE int sqlite3PcacheGetCachesize(PCache *);
                   8883: #endif
                   8884: 
                   8885: #ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT
                   8886: /* Try to return memory used by the pcache module to the main memory heap */
                   8887: SQLITE_PRIVATE int sqlite3PcacheReleaseMemory(int);
                   8888: #endif
                   8889: 
                   8890: #ifdef SQLITE_TEST
                   8891: SQLITE_PRIVATE void sqlite3PcacheStats(int*,int*,int*,int*);
                   8892: #endif
                   8893: 
                   8894: SQLITE_PRIVATE void sqlite3PCacheSetDefault(void);
                   8895: 
                   8896: #endif /* _PCACHE_H_ */
                   8897: 
                   8898: /************** End of pcache.h **********************************************/
                   8899: /************** Continuing where we left off in sqliteInt.h ******************/
                   8900: 
                   8901: /************** Include os.h in the middle of sqliteInt.h ********************/
                   8902: /************** Begin file os.h **********************************************/
                   8903: /*
                   8904: ** 2001 September 16
                   8905: **
                   8906: ** The author disclaims copyright to this source code.  In place of
                   8907: ** a legal notice, here is a blessing:
                   8908: **
                   8909: **    May you do good and not evil.
                   8910: **    May you find forgiveness for yourself and forgive others.
                   8911: **    May you share freely, never taking more than you give.
                   8912: **
                   8913: ******************************************************************************
                   8914: **
                   8915: ** This header file (together with is companion C source-code file
                   8916: ** "os.c") attempt to abstract the underlying operating system so that
                   8917: ** the SQLite library will work on both POSIX and windows systems.
                   8918: **
                   8919: ** This header file is #include-ed by sqliteInt.h and thus ends up
                   8920: ** being included by every source file.
                   8921: */
                   8922: #ifndef _SQLITE_OS_H_
                   8923: #define _SQLITE_OS_H_
                   8924: 
                   8925: /*
                   8926: ** Figure out if we are dealing with Unix, Windows, or some other
                   8927: ** operating system.  After the following block of preprocess macros,
                   8928: ** all of SQLITE_OS_UNIX, SQLITE_OS_WIN, SQLITE_OS_OS2, and SQLITE_OS_OTHER 
                   8929: ** will defined to either 1 or 0.  One of the four will be 1.  The other 
                   8930: ** three will be 0.
                   8931: */
                   8932: #if defined(SQLITE_OS_OTHER)
                   8933: # if SQLITE_OS_OTHER==1
                   8934: #   undef SQLITE_OS_UNIX
                   8935: #   define SQLITE_OS_UNIX 0
                   8936: #   undef SQLITE_OS_WIN
                   8937: #   define SQLITE_OS_WIN 0
                   8938: #   undef SQLITE_OS_OS2
                   8939: #   define SQLITE_OS_OS2 0
                   8940: # else
                   8941: #   undef SQLITE_OS_OTHER
                   8942: # endif
                   8943: #endif
                   8944: #if !defined(SQLITE_OS_UNIX) && !defined(SQLITE_OS_OTHER)
                   8945: # define SQLITE_OS_OTHER 0
                   8946: # ifndef SQLITE_OS_WIN
                   8947: #   if defined(_WIN32) || defined(WIN32) || defined(__CYGWIN__) || defined(__MINGW32__) || defined(__BORLANDC__)
                   8948: #     define SQLITE_OS_WIN 1
                   8949: #     define SQLITE_OS_UNIX 0
                   8950: #     define SQLITE_OS_OS2 0
                   8951: #   elif defined(__EMX__) || defined(_OS2) || defined(OS2) || defined(_OS2_) || defined(__OS2__)
                   8952: #     define SQLITE_OS_WIN 0
                   8953: #     define SQLITE_OS_UNIX 0
                   8954: #     define SQLITE_OS_OS2 1
                   8955: #   else
                   8956: #     define SQLITE_OS_WIN 0
                   8957: #     define SQLITE_OS_UNIX 1
                   8958: #     define SQLITE_OS_OS2 0
                   8959: #  endif
                   8960: # else
                   8961: #  define SQLITE_OS_UNIX 0
                   8962: #  define SQLITE_OS_OS2 0
                   8963: # endif
                   8964: #else
                   8965: # ifndef SQLITE_OS_WIN
                   8966: #  define SQLITE_OS_WIN 0
                   8967: # endif
                   8968: #endif
                   8969: 
                   8970: /*
                   8971: ** Determine if we are dealing with WindowsCE - which has a much
                   8972: ** reduced API.
                   8973: */
                   8974: #if defined(_WIN32_WCE)
                   8975: # define SQLITE_OS_WINCE 1
                   8976: #else
                   8977: # define SQLITE_OS_WINCE 0
                   8978: #endif
                   8979: 
                   8980: 
                   8981: /*
                   8982: ** Define the maximum size of a temporary filename
                   8983: */
                   8984: #if SQLITE_OS_WIN
                   8985: # include <windows.h>
                   8986: # define SQLITE_TEMPNAME_SIZE (MAX_PATH+50)
                   8987: #elif SQLITE_OS_OS2
                   8988: # if (__GNUC__ > 3 || __GNUC__ == 3 && __GNUC_MINOR__ >= 3) && defined(OS2_HIGH_MEMORY)
                   8989: #  include <os2safe.h> /* has to be included before os2.h for linking to work */
                   8990: # endif
                   8991: # define INCL_DOSDATETIME
                   8992: # define INCL_DOSFILEMGR
                   8993: # define INCL_DOSERRORS
                   8994: # define INCL_DOSMISC
                   8995: # define INCL_DOSPROCESS
                   8996: # define INCL_DOSMODULEMGR
                   8997: # define INCL_DOSSEMAPHORES
                   8998: # include <os2.h>
                   8999: # include <uconv.h>
                   9000: # define SQLITE_TEMPNAME_SIZE (CCHMAXPATHCOMP)
                   9001: #else
                   9002: # define SQLITE_TEMPNAME_SIZE 200
                   9003: #endif
                   9004: 
                   9005: /* If the SET_FULLSYNC macro is not defined above, then make it
                   9006: ** a no-op
                   9007: */
                   9008: #ifndef SET_FULLSYNC
                   9009: # define SET_FULLSYNC(x,y)
                   9010: #endif
                   9011: 
                   9012: /*
                   9013: ** The default size of a disk sector
                   9014: */
                   9015: #ifndef SQLITE_DEFAULT_SECTOR_SIZE
                   9016: # define SQLITE_DEFAULT_SECTOR_SIZE 512
                   9017: #endif
                   9018: 
                   9019: /*
                   9020: ** Temporary files are named starting with this prefix followed by 16 random
                   9021: ** alphanumeric characters, and no file extension. They are stored in the
                   9022: ** OS's standard temporary file directory, and are deleted prior to exit.
                   9023: ** If sqlite is being embedded in another program, you may wish to change the
                   9024: ** prefix to reflect your program's name, so that if your program exits
                   9025: ** prematurely, old temporary files can be easily identified. This can be done
                   9026: ** using -DSQLITE_TEMP_FILE_PREFIX=myprefix_ on the compiler command line.
                   9027: **
                   9028: ** 2006-10-31:  The default prefix used to be "sqlite_".  But then
                   9029: ** Mcafee started using SQLite in their anti-virus product and it
                   9030: ** started putting files with the "sqlite" name in the c:/temp folder.
                   9031: ** This annoyed many windows users.  Those users would then do a 
                   9032: ** Google search for "sqlite", find the telephone numbers of the
                   9033: ** developers and call to wake them up at night and complain.
                   9034: ** For this reason, the default name prefix is changed to be "sqlite" 
                   9035: ** spelled backwards.  So the temp files are still identified, but
                   9036: ** anybody smart enough to figure out the code is also likely smart
                   9037: ** enough to know that calling the developer will not help get rid
                   9038: ** of the file.
                   9039: */
                   9040: #ifndef SQLITE_TEMP_FILE_PREFIX
                   9041: # define SQLITE_TEMP_FILE_PREFIX "etilqs_"
                   9042: #endif
                   9043: 
                   9044: /*
                   9045: ** The following values may be passed as the second argument to
                   9046: ** sqlite3OsLock(). The various locks exhibit the following semantics:
                   9047: **
                   9048: ** SHARED:    Any number of processes may hold a SHARED lock simultaneously.
                   9049: ** RESERVED:  A single process may hold a RESERVED lock on a file at
                   9050: **            any time. Other processes may hold and obtain new SHARED locks.
                   9051: ** PENDING:   A single process may hold a PENDING lock on a file at
                   9052: **            any one time. Existing SHARED locks may persist, but no new
                   9053: **            SHARED locks may be obtained by other processes.
                   9054: ** EXCLUSIVE: An EXCLUSIVE lock precludes all other locks.
                   9055: **
                   9056: ** PENDING_LOCK may not be passed directly to sqlite3OsLock(). Instead, a
                   9057: ** process that requests an EXCLUSIVE lock may actually obtain a PENDING
                   9058: ** lock. This can be upgraded to an EXCLUSIVE lock by a subsequent call to
                   9059: ** sqlite3OsLock().
                   9060: */
                   9061: #define NO_LOCK         0
                   9062: #define SHARED_LOCK     1
                   9063: #define RESERVED_LOCK   2
                   9064: #define PENDING_LOCK    3
                   9065: #define EXCLUSIVE_LOCK  4
                   9066: 
                   9067: /*
                   9068: ** File Locking Notes:  (Mostly about windows but also some info for Unix)
                   9069: **
                   9070: ** We cannot use LockFileEx() or UnlockFileEx() on Win95/98/ME because
                   9071: ** those functions are not available.  So we use only LockFile() and
                   9072: ** UnlockFile().
                   9073: **
                   9074: ** LockFile() prevents not just writing but also reading by other processes.
                   9075: ** A SHARED_LOCK is obtained by locking a single randomly-chosen 
                   9076: ** byte out of a specific range of bytes. The lock byte is obtained at 
                   9077: ** random so two separate readers can probably access the file at the 
                   9078: ** same time, unless they are unlucky and choose the same lock byte.
                   9079: ** An EXCLUSIVE_LOCK is obtained by locking all bytes in the range.
                   9080: ** There can only be one writer.  A RESERVED_LOCK is obtained by locking
                   9081: ** a single byte of the file that is designated as the reserved lock byte.
                   9082: ** A PENDING_LOCK is obtained by locking a designated byte different from
                   9083: ** the RESERVED_LOCK byte.
                   9084: **
                   9085: ** On WinNT/2K/XP systems, LockFileEx() and UnlockFileEx() are available,
                   9086: ** which means we can use reader/writer locks.  When reader/writer locks
                   9087: ** are used, the lock is placed on the same range of bytes that is used
                   9088: ** for probabilistic locking in Win95/98/ME.  Hence, the locking scheme
                   9089: ** will support two or more Win95 readers or two or more WinNT readers.
                   9090: ** But a single Win95 reader will lock out all WinNT readers and a single
                   9091: ** WinNT reader will lock out all other Win95 readers.
                   9092: **
                   9093: ** The following #defines specify the range of bytes used for locking.
                   9094: ** SHARED_SIZE is the number of bytes available in the pool from which
                   9095: ** a random byte is selected for a shared lock.  The pool of bytes for
                   9096: ** shared locks begins at SHARED_FIRST. 
                   9097: **
                   9098: ** The same locking strategy and
                   9099: ** byte ranges are used for Unix.  This leaves open the possiblity of having
                   9100: ** clients on win95, winNT, and unix all talking to the same shared file
                   9101: ** and all locking correctly.  To do so would require that samba (or whatever
                   9102: ** tool is being used for file sharing) implements locks correctly between
                   9103: ** windows and unix.  I'm guessing that isn't likely to happen, but by
                   9104: ** using the same locking range we are at least open to the possibility.
                   9105: **
                   9106: ** Locking in windows is manditory.  For this reason, we cannot store
                   9107: ** actual data in the bytes used for locking.  The pager never allocates
                   9108: ** the pages involved in locking therefore.  SHARED_SIZE is selected so
                   9109: ** that all locks will fit on a single page even at the minimum page size.
                   9110: ** PENDING_BYTE defines the beginning of the locks.  By default PENDING_BYTE
                   9111: ** is set high so that we don't have to allocate an unused page except
                   9112: ** for very large databases.  But one should test the page skipping logic 
                   9113: ** by setting PENDING_BYTE low and running the entire regression suite.
                   9114: **
                   9115: ** Changing the value of PENDING_BYTE results in a subtly incompatible
                   9116: ** file format.  Depending on how it is changed, you might not notice
                   9117: ** the incompatibility right away, even running a full regression test.
                   9118: ** The default location of PENDING_BYTE is the first byte past the
                   9119: ** 1GB boundary.
                   9120: **
                   9121: */
                   9122: #ifdef SQLITE_OMIT_WSD
                   9123: # define PENDING_BYTE     (0x40000000)
                   9124: #else
                   9125: # define PENDING_BYTE      sqlite3PendingByte
                   9126: #endif
                   9127: #define RESERVED_BYTE     (PENDING_BYTE+1)
                   9128: #define SHARED_FIRST      (PENDING_BYTE+2)
                   9129: #define SHARED_SIZE       510
                   9130: 
                   9131: /*
                   9132: ** Wrapper around OS specific sqlite3_os_init() function.
                   9133: */
                   9134: SQLITE_PRIVATE int sqlite3OsInit(void);
                   9135: 
                   9136: /* 
                   9137: ** Functions for accessing sqlite3_file methods 
                   9138: */
                   9139: SQLITE_PRIVATE int sqlite3OsClose(sqlite3_file*);
                   9140: SQLITE_PRIVATE int sqlite3OsRead(sqlite3_file*, void*, int amt, i64 offset);
                   9141: SQLITE_PRIVATE int sqlite3OsWrite(sqlite3_file*, const void*, int amt, i64 offset);
                   9142: SQLITE_PRIVATE int sqlite3OsTruncate(sqlite3_file*, i64 size);
                   9143: SQLITE_PRIVATE int sqlite3OsSync(sqlite3_file*, int);
                   9144: SQLITE_PRIVATE int sqlite3OsFileSize(sqlite3_file*, i64 *pSize);
                   9145: SQLITE_PRIVATE int sqlite3OsLock(sqlite3_file*, int);
                   9146: SQLITE_PRIVATE int sqlite3OsUnlock(sqlite3_file*, int);
                   9147: SQLITE_PRIVATE int sqlite3OsCheckReservedLock(sqlite3_file *id, int *pResOut);
                   9148: SQLITE_PRIVATE int sqlite3OsFileControl(sqlite3_file*,int,void*);
                   9149: #define SQLITE_FCNTL_DB_UNCHANGED 0xca093fa0
                   9150: SQLITE_PRIVATE int sqlite3OsSectorSize(sqlite3_file *id);
                   9151: SQLITE_PRIVATE int sqlite3OsDeviceCharacteristics(sqlite3_file *id);
                   9152: SQLITE_PRIVATE int sqlite3OsShmMap(sqlite3_file *,int,int,int,void volatile **);
                   9153: SQLITE_PRIVATE int sqlite3OsShmLock(sqlite3_file *id, int, int, int);
                   9154: SQLITE_PRIVATE void sqlite3OsShmBarrier(sqlite3_file *id);
                   9155: SQLITE_PRIVATE int sqlite3OsShmUnmap(sqlite3_file *id, int);
                   9156: 
                   9157: /* 
                   9158: ** Functions for accessing sqlite3_vfs methods 
                   9159: */
                   9160: SQLITE_PRIVATE int sqlite3OsOpen(sqlite3_vfs *, const char *, sqlite3_file*, int, int *);
                   9161: SQLITE_PRIVATE int sqlite3OsDelete(sqlite3_vfs *, const char *, int);
                   9162: SQLITE_PRIVATE int sqlite3OsAccess(sqlite3_vfs *, const char *, int, int *pResOut);
                   9163: SQLITE_PRIVATE int sqlite3OsFullPathname(sqlite3_vfs *, const char *, int, char *);
                   9164: #ifndef SQLITE_OMIT_LOAD_EXTENSION
                   9165: SQLITE_PRIVATE void *sqlite3OsDlOpen(sqlite3_vfs *, const char *);
                   9166: SQLITE_PRIVATE void sqlite3OsDlError(sqlite3_vfs *, int, char *);
                   9167: SQLITE_PRIVATE void (*sqlite3OsDlSym(sqlite3_vfs *, void *, const char *))(void);
                   9168: SQLITE_PRIVATE void sqlite3OsDlClose(sqlite3_vfs *, void *);
                   9169: #endif /* SQLITE_OMIT_LOAD_EXTENSION */
                   9170: SQLITE_PRIVATE int sqlite3OsRandomness(sqlite3_vfs *, int, char *);
                   9171: SQLITE_PRIVATE int sqlite3OsSleep(sqlite3_vfs *, int);
                   9172: SQLITE_PRIVATE int sqlite3OsCurrentTimeInt64(sqlite3_vfs *, sqlite3_int64*);
                   9173: 
                   9174: /*
                   9175: ** Convenience functions for opening and closing files using 
                   9176: ** sqlite3_malloc() to obtain space for the file-handle structure.
                   9177: */
                   9178: SQLITE_PRIVATE int sqlite3OsOpenMalloc(sqlite3_vfs *, const char *, sqlite3_file **, int,int*);
                   9179: SQLITE_PRIVATE int sqlite3OsCloseFree(sqlite3_file *);
                   9180: 
                   9181: #endif /* _SQLITE_OS_H_ */
                   9182: 
                   9183: /************** End of os.h **************************************************/
                   9184: /************** Continuing where we left off in sqliteInt.h ******************/
                   9185: /************** Include mutex.h in the middle of sqliteInt.h *****************/
                   9186: /************** Begin file mutex.h *******************************************/
                   9187: /*
                   9188: ** 2007 August 28
                   9189: **
                   9190: ** The author disclaims copyright to this source code.  In place of
                   9191: ** a legal notice, here is a blessing:
                   9192: **
                   9193: **    May you do good and not evil.
                   9194: **    May you find forgiveness for yourself and forgive others.
                   9195: **    May you share freely, never taking more than you give.
                   9196: **
                   9197: *************************************************************************
                   9198: **
                   9199: ** This file contains the common header for all mutex implementations.
                   9200: ** The sqliteInt.h header #includes this file so that it is available
                   9201: ** to all source files.  We break it out in an effort to keep the code
                   9202: ** better organized.
                   9203: **
                   9204: ** NOTE:  source files should *not* #include this header file directly.
                   9205: ** Source files should #include the sqliteInt.h file and let that file
                   9206: ** include this one indirectly.
                   9207: */
                   9208: 
                   9209: 
                   9210: /*
                   9211: ** Figure out what version of the code to use.  The choices are
                   9212: **
                   9213: **   SQLITE_MUTEX_OMIT         No mutex logic.  Not even stubs.  The
                   9214: **                             mutexes implemention cannot be overridden
                   9215: **                             at start-time.
                   9216: **
                   9217: **   SQLITE_MUTEX_NOOP         For single-threaded applications.  No
                   9218: **                             mutual exclusion is provided.  But this
                   9219: **                             implementation can be overridden at
                   9220: **                             start-time.
                   9221: **
                   9222: **   SQLITE_MUTEX_PTHREADS     For multi-threaded applications on Unix.
                   9223: **
                   9224: **   SQLITE_MUTEX_W32          For multi-threaded applications on Win32.
                   9225: **
                   9226: **   SQLITE_MUTEX_OS2          For multi-threaded applications on OS/2.
                   9227: */
                   9228: #if !SQLITE_THREADSAFE
                   9229: # define SQLITE_MUTEX_OMIT
                   9230: #endif
                   9231: #if SQLITE_THREADSAFE && !defined(SQLITE_MUTEX_NOOP)
                   9232: #  if SQLITE_OS_UNIX
                   9233: #    define SQLITE_MUTEX_PTHREADS
                   9234: #  elif SQLITE_OS_WIN
                   9235: #    define SQLITE_MUTEX_W32
                   9236: #  elif SQLITE_OS_OS2
                   9237: #    define SQLITE_MUTEX_OS2
                   9238: #  else
                   9239: #    define SQLITE_MUTEX_NOOP
                   9240: #  endif
                   9241: #endif
                   9242: 
                   9243: #ifdef SQLITE_MUTEX_OMIT
                   9244: /*
                   9245: ** If this is a no-op implementation, implement everything as macros.
                   9246: */
                   9247: #define sqlite3_mutex_alloc(X)    ((sqlite3_mutex*)8)
                   9248: #define sqlite3_mutex_free(X)
                   9249: #define sqlite3_mutex_enter(X)
                   9250: #define sqlite3_mutex_try(X)      SQLITE_OK
                   9251: #define sqlite3_mutex_leave(X)
                   9252: #define sqlite3_mutex_held(X)     ((void)(X),1)
                   9253: #define sqlite3_mutex_notheld(X)  ((void)(X),1)
                   9254: #define sqlite3MutexAlloc(X)      ((sqlite3_mutex*)8)
                   9255: #define sqlite3MutexInit()        SQLITE_OK
                   9256: #define sqlite3MutexEnd()
                   9257: #endif /* defined(SQLITE_MUTEX_OMIT) */
                   9258: 
                   9259: /************** End of mutex.h ***********************************************/
                   9260: /************** Continuing where we left off in sqliteInt.h ******************/
                   9261: 
                   9262: 
                   9263: /*
                   9264: ** Each database file to be accessed by the system is an instance
                   9265: ** of the following structure.  There are normally two of these structures
                   9266: ** in the sqlite.aDb[] array.  aDb[0] is the main database file and
                   9267: ** aDb[1] is the database file used to hold temporary tables.  Additional
                   9268: ** databases may be attached.
                   9269: */
                   9270: struct Db {
                   9271:   char *zName;         /* Name of this database */
                   9272:   Btree *pBt;          /* The B*Tree structure for this database file */
                   9273:   u8 inTrans;          /* 0: not writable.  1: Transaction.  2: Checkpoint */
                   9274:   u8 safety_level;     /* How aggressive at syncing data to disk */
                   9275:   Schema *pSchema;     /* Pointer to database schema (possibly shared) */
                   9276: };
                   9277: 
                   9278: /*
                   9279: ** An instance of the following structure stores a database schema.
                   9280: **
                   9281: ** Most Schema objects are associated with a Btree.  The exception is
                   9282: ** the Schema for the TEMP databaes (sqlite3.aDb[1]) which is free-standing.
                   9283: ** In shared cache mode, a single Schema object can be shared by multiple
                   9284: ** Btrees that refer to the same underlying BtShared object.
                   9285: ** 
                   9286: ** Schema objects are automatically deallocated when the last Btree that
                   9287: ** references them is destroyed.   The TEMP Schema is manually freed by
                   9288: ** sqlite3_close().
                   9289: *
                   9290: ** A thread must be holding a mutex on the corresponding Btree in order
                   9291: ** to access Schema content.  This implies that the thread must also be
                   9292: ** holding a mutex on the sqlite3 connection pointer that owns the Btree.
                   9293: ** For a TEMP Schema, only the connection mutex is required.
                   9294: */
                   9295: struct Schema {
                   9296:   int schema_cookie;   /* Database schema version number for this file */
                   9297:   int iGeneration;     /* Generation counter.  Incremented with each change */
                   9298:   Hash tblHash;        /* All tables indexed by name */
                   9299:   Hash idxHash;        /* All (named) indices indexed by name */
                   9300:   Hash trigHash;       /* All triggers indexed by name */
                   9301:   Hash fkeyHash;       /* All foreign keys by referenced table name */
                   9302:   Table *pSeqTab;      /* The sqlite_sequence table used by AUTOINCREMENT */
                   9303:   u8 file_format;      /* Schema format version for this file */
                   9304:   u8 enc;              /* Text encoding used by this database */
                   9305:   u16 flags;           /* Flags associated with this schema */
                   9306:   int cache_size;      /* Number of pages to use in the cache */
                   9307: };
                   9308: 
                   9309: /*
                   9310: ** These macros can be used to test, set, or clear bits in the 
                   9311: ** Db.pSchema->flags field.
                   9312: */
                   9313: #define DbHasProperty(D,I,P)     (((D)->aDb[I].pSchema->flags&(P))==(P))
                   9314: #define DbHasAnyProperty(D,I,P)  (((D)->aDb[I].pSchema->flags&(P))!=0)
                   9315: #define DbSetProperty(D,I,P)     (D)->aDb[I].pSchema->flags|=(P)
                   9316: #define DbClearProperty(D,I,P)   (D)->aDb[I].pSchema->flags&=~(P)
                   9317: 
                   9318: /*
                   9319: ** Allowed values for the DB.pSchema->flags field.
                   9320: **
                   9321: ** The DB_SchemaLoaded flag is set after the database schema has been
                   9322: ** read into internal hash tables.
                   9323: **
                   9324: ** DB_UnresetViews means that one or more views have column names that
                   9325: ** have been filled out.  If the schema changes, these column names might
                   9326: ** changes and so the view will need to be reset.
                   9327: */
                   9328: #define DB_SchemaLoaded    0x0001  /* The schema has been loaded */
                   9329: #define DB_UnresetViews    0x0002  /* Some views have defined column names */
                   9330: #define DB_Empty           0x0004  /* The file is empty (length 0 bytes) */
                   9331: 
                   9332: /*
                   9333: ** The number of different kinds of things that can be limited
                   9334: ** using the sqlite3_limit() interface.
                   9335: */
                   9336: #define SQLITE_N_LIMIT (SQLITE_LIMIT_TRIGGER_DEPTH+1)
                   9337: 
                   9338: /*
                   9339: ** Lookaside malloc is a set of fixed-size buffers that can be used
                   9340: ** to satisfy small transient memory allocation requests for objects
                   9341: ** associated with a particular database connection.  The use of
                   9342: ** lookaside malloc provides a significant performance enhancement
                   9343: ** (approx 10%) by avoiding numerous malloc/free requests while parsing
                   9344: ** SQL statements.
                   9345: **
                   9346: ** The Lookaside structure holds configuration information about the
                   9347: ** lookaside malloc subsystem.  Each available memory allocation in
                   9348: ** the lookaside subsystem is stored on a linked list of LookasideSlot
                   9349: ** objects.
                   9350: **
                   9351: ** Lookaside allocations are only allowed for objects that are associated
                   9352: ** with a particular database connection.  Hence, schema information cannot
                   9353: ** be stored in lookaside because in shared cache mode the schema information
                   9354: ** is shared by multiple database connections.  Therefore, while parsing
                   9355: ** schema information, the Lookaside.bEnabled flag is cleared so that
                   9356: ** lookaside allocations are not used to construct the schema objects.
                   9357: */
                   9358: struct Lookaside {
                   9359:   u16 sz;                 /* Size of each buffer in bytes */
                   9360:   u8 bEnabled;            /* False to disable new lookaside allocations */
                   9361:   u8 bMalloced;           /* True if pStart obtained from sqlite3_malloc() */
                   9362:   int nOut;               /* Number of buffers currently checked out */
                   9363:   int mxOut;              /* Highwater mark for nOut */
                   9364:   int anStat[3];          /* 0: hits.  1: size misses.  2: full misses */
                   9365:   LookasideSlot *pFree;   /* List of available buffers */
                   9366:   void *pStart;           /* First byte of available memory space */
                   9367:   void *pEnd;             /* First byte past end of available space */
                   9368: };
                   9369: struct LookasideSlot {
                   9370:   LookasideSlot *pNext;    /* Next buffer in the list of free buffers */
                   9371: };
                   9372: 
                   9373: /*
                   9374: ** A hash table for function definitions.
                   9375: **
                   9376: ** Hash each FuncDef structure into one of the FuncDefHash.a[] slots.
                   9377: ** Collisions are on the FuncDef.pHash chain.
                   9378: */
                   9379: struct FuncDefHash {
                   9380:   FuncDef *a[23];       /* Hash table for functions */
                   9381: };
                   9382: 
                   9383: /*
                   9384: ** Each database connection is an instance of the following structure.
                   9385: **
                   9386: ** The sqlite.lastRowid records the last insert rowid generated by an
                   9387: ** insert statement.  Inserts on views do not affect its value.  Each
                   9388: ** trigger has its own context, so that lastRowid can be updated inside
                   9389: ** triggers as usual.  The previous value will be restored once the trigger
                   9390: ** exits.  Upon entering a before or instead of trigger, lastRowid is no
                   9391: ** longer (since after version 2.8.12) reset to -1.
                   9392: **
                   9393: ** The sqlite.nChange does not count changes within triggers and keeps no
                   9394: ** context.  It is reset at start of sqlite3_exec.
                   9395: ** The sqlite.lsChange represents the number of changes made by the last
                   9396: ** insert, update, or delete statement.  It remains constant throughout the
                   9397: ** length of a statement and is then updated by OP_SetCounts.  It keeps a
                   9398: ** context stack just like lastRowid so that the count of changes
                   9399: ** within a trigger is not seen outside the trigger.  Changes to views do not
                   9400: ** affect the value of lsChange.
                   9401: ** The sqlite.csChange keeps track of the number of current changes (since
                   9402: ** the last statement) and is used to update sqlite_lsChange.
                   9403: **
                   9404: ** The member variables sqlite.errCode, sqlite.zErrMsg and sqlite.zErrMsg16
                   9405: ** store the most recent error code and, if applicable, string. The
                   9406: ** internal function sqlite3Error() is used to set these variables
                   9407: ** consistently.
                   9408: */
                   9409: struct sqlite3 {
                   9410:   sqlite3_vfs *pVfs;            /* OS Interface */
                   9411:   int nDb;                      /* Number of backends currently in use */
                   9412:   Db *aDb;                      /* All backends */
                   9413:   int flags;                    /* Miscellaneous flags. See below */
                   9414:   unsigned int openFlags;       /* Flags passed to sqlite3_vfs.xOpen() */
                   9415:   int errCode;                  /* Most recent error code (SQLITE_*) */
                   9416:   int errMask;                  /* & result codes with this before returning */
                   9417:   u8 autoCommit;                /* The auto-commit flag. */
                   9418:   u8 temp_store;                /* 1: file 2: memory 0: default */
                   9419:   u8 mallocFailed;              /* True if we have seen a malloc failure */
                   9420:   u8 dfltLockMode;              /* Default locking-mode for attached dbs */
                   9421:   signed char nextAutovac;      /* Autovac setting after VACUUM if >=0 */
                   9422:   u8 suppressErr;               /* Do not issue error messages if true */
                   9423:   u8 vtabOnConflict;            /* Value to return for s3_vtab_on_conflict() */
                   9424:   int nextPagesize;             /* Pagesize after VACUUM if >0 */
                   9425:   int nTable;                   /* Number of tables in the database */
                   9426:   CollSeq *pDfltColl;           /* The default collating sequence (BINARY) */
                   9427:   i64 lastRowid;                /* ROWID of most recent insert (see above) */
                   9428:   u32 magic;                    /* Magic number for detect library misuse */
                   9429:   int nChange;                  /* Value returned by sqlite3_changes() */
                   9430:   int nTotalChange;             /* Value returned by sqlite3_total_changes() */
                   9431:   sqlite3_mutex *mutex;         /* Connection mutex */
                   9432:   int aLimit[SQLITE_N_LIMIT];   /* Limits */
                   9433:   struct sqlite3InitInfo {      /* Information used during initialization */
                   9434:     int iDb;                    /* When back is being initialized */
                   9435:     int newTnum;                /* Rootpage of table being initialized */
                   9436:     u8 busy;                    /* TRUE if currently initializing */
                   9437:     u8 orphanTrigger;           /* Last statement is orphaned TEMP trigger */
                   9438:   } init;
                   9439:   int nExtension;               /* Number of loaded extensions */
                   9440:   void **aExtension;            /* Array of shared library handles */
                   9441:   struct Vdbe *pVdbe;           /* List of active virtual machines */
                   9442:   int activeVdbeCnt;            /* Number of VDBEs currently executing */
                   9443:   int writeVdbeCnt;             /* Number of active VDBEs that are writing */
                   9444:   int vdbeExecCnt;              /* Number of nested calls to VdbeExec() */
                   9445:   void (*xTrace)(void*,const char*);        /* Trace function */
                   9446:   void *pTraceArg;                          /* Argument to the trace function */
                   9447:   void (*xProfile)(void*,const char*,u64);  /* Profiling function */
                   9448:   void *pProfileArg;                        /* Argument to profile function */
                   9449:   void *pCommitArg;                 /* Argument to xCommitCallback() */   
                   9450:   int (*xCommitCallback)(void*);    /* Invoked at every commit. */
                   9451:   void *pRollbackArg;               /* Argument to xRollbackCallback() */   
                   9452:   void (*xRollbackCallback)(void*); /* Invoked at every commit. */
                   9453:   void *pUpdateArg;
                   9454:   void (*xUpdateCallback)(void*,int, const char*,const char*,sqlite_int64);
                   9455: #ifndef SQLITE_OMIT_WAL
                   9456:   int (*xWalCallback)(void *, sqlite3 *, const char *, int);
                   9457:   void *pWalArg;
                   9458: #endif
                   9459:   void(*xCollNeeded)(void*,sqlite3*,int eTextRep,const char*);
                   9460:   void(*xCollNeeded16)(void*,sqlite3*,int eTextRep,const void*);
                   9461:   void *pCollNeededArg;
                   9462:   sqlite3_value *pErr;          /* Most recent error message */
                   9463:   char *zErrMsg;                /* Most recent error message (UTF-8 encoded) */
                   9464:   char *zErrMsg16;              /* Most recent error message (UTF-16 encoded) */
                   9465:   union {
                   9466:     volatile int isInterrupted; /* True if sqlite3_interrupt has been called */
                   9467:     double notUsed1;            /* Spacer */
                   9468:   } u1;
                   9469:   Lookaside lookaside;          /* Lookaside malloc configuration */
                   9470: #ifndef SQLITE_OMIT_AUTHORIZATION
                   9471:   int (*xAuth)(void*,int,const char*,const char*,const char*,const char*);
                   9472:                                 /* Access authorization function */
                   9473:   void *pAuthArg;               /* 1st argument to the access auth function */
                   9474: #endif
                   9475: #ifndef SQLITE_OMIT_PROGRESS_CALLBACK
                   9476:   int (*xProgress)(void *);     /* The progress callback */
                   9477:   void *pProgressArg;           /* Argument to the progress callback */
                   9478:   int nProgressOps;             /* Number of opcodes for progress callback */
                   9479: #endif
                   9480: #ifndef SQLITE_OMIT_VIRTUALTABLE
                   9481:   Hash aModule;                 /* populated by sqlite3_create_module() */
                   9482:   VtabCtx *pVtabCtx;            /* Context for active vtab connect/create */
                   9483:   VTable **aVTrans;             /* Virtual tables with open transactions */
                   9484:   int nVTrans;                  /* Allocated size of aVTrans */
                   9485:   VTable *pDisconnect;    /* Disconnect these in next sqlite3_prepare() */
                   9486: #endif
                   9487:   FuncDefHash aFunc;            /* Hash table of connection functions */
                   9488:   Hash aCollSeq;                /* All collating sequences */
                   9489:   BusyHandler busyHandler;      /* Busy callback */
                   9490:   int busyTimeout;              /* Busy handler timeout, in msec */
                   9491:   Db aDbStatic[2];              /* Static space for the 2 default backends */
                   9492:   Savepoint *pSavepoint;        /* List of active savepoints */
                   9493:   int nSavepoint;               /* Number of non-transaction savepoints */
                   9494:   int nStatement;               /* Number of nested statement-transactions  */
                   9495:   u8 isTransactionSavepoint;    /* True if the outermost savepoint is a TS */
                   9496:   i64 nDeferredCons;            /* Net deferred constraints this transaction. */
                   9497:   int *pnBytesFreed;            /* If not NULL, increment this in DbFree() */
                   9498: 
                   9499: #ifdef SQLITE_ENABLE_UNLOCK_NOTIFY
                   9500:   /* The following variables are all protected by the STATIC_MASTER 
                   9501:   ** mutex, not by sqlite3.mutex. They are used by code in notify.c. 
                   9502:   **
                   9503:   ** When X.pUnlockConnection==Y, that means that X is waiting for Y to
                   9504:   ** unlock so that it can proceed.
                   9505:   **
                   9506:   ** When X.pBlockingConnection==Y, that means that something that X tried
                   9507:   ** tried to do recently failed with an SQLITE_LOCKED error due to locks
                   9508:   ** held by Y.
                   9509:   */
                   9510:   sqlite3 *pBlockingConnection; /* Connection that caused SQLITE_LOCKED */
                   9511:   sqlite3 *pUnlockConnection;           /* Connection to watch for unlock */
                   9512:   void *pUnlockArg;                     /* Argument to xUnlockNotify */
                   9513:   void (*xUnlockNotify)(void **, int);  /* Unlock notify callback */
                   9514:   sqlite3 *pNextBlocked;        /* Next in list of all blocked connections */
                   9515: #endif
                   9516: };
                   9517: 
                   9518: /*
                   9519: ** A macro to discover the encoding of a database.
                   9520: */
                   9521: #define ENC(db) ((db)->aDb[0].pSchema->enc)
                   9522: 
                   9523: /*
                   9524: ** Possible values for the sqlite3.flags.
                   9525: */
                   9526: #define SQLITE_VdbeTrace      0x00000100  /* True to trace VDBE execution */
                   9527: #define SQLITE_InternChanges  0x00000200  /* Uncommitted Hash table changes */
                   9528: #define SQLITE_FullColNames   0x00000400  /* Show full column names on SELECT */
                   9529: #define SQLITE_ShortColNames  0x00000800  /* Show short columns names */
                   9530: #define SQLITE_CountRows      0x00001000  /* Count rows changed by INSERT, */
                   9531:                                           /*   DELETE, or UPDATE and return */
                   9532:                                           /*   the count using a callback. */
                   9533: #define SQLITE_NullCallback   0x00002000  /* Invoke the callback once if the */
                   9534:                                           /*   result set is empty */
                   9535: #define SQLITE_SqlTrace       0x00004000  /* Debug print SQL as it executes */
                   9536: #define SQLITE_VdbeListing    0x00008000  /* Debug listings of VDBE programs */
                   9537: #define SQLITE_WriteSchema    0x00010000  /* OK to update SQLITE_MASTER */
                   9538: #define SQLITE_NoReadlock     0x00020000  /* Readlocks are omitted when 
                   9539:                                           ** accessing read-only databases */
                   9540: #define SQLITE_IgnoreChecks   0x00040000  /* Do not enforce check constraints */
                   9541: #define SQLITE_ReadUncommitted 0x0080000  /* For shared-cache mode */
                   9542: #define SQLITE_LegacyFileFmt  0x00100000  /* Create new databases in format 1 */
                   9543: #define SQLITE_FullFSync      0x00200000  /* Use full fsync on the backend */
                   9544: #define SQLITE_CkptFullFSync  0x00400000  /* Use full fsync for checkpoint */
                   9545: #define SQLITE_RecoveryMode   0x00800000  /* Ignore schema errors */
                   9546: #define SQLITE_ReverseOrder   0x01000000  /* Reverse unordered SELECTs */
                   9547: #define SQLITE_RecTriggers    0x02000000  /* Enable recursive triggers */
                   9548: #define SQLITE_ForeignKeys    0x04000000  /* Enforce foreign key constraints  */
                   9549: #define SQLITE_AutoIndex      0x08000000  /* Enable automatic indexes */
                   9550: #define SQLITE_PreferBuiltin  0x10000000  /* Preference to built-in funcs */
                   9551: #define SQLITE_LoadExtension  0x20000000  /* Enable load_extension */
                   9552: #define SQLITE_EnableTrigger  0x40000000  /* True to enable triggers */
                   9553: 
                   9554: /*
                   9555: ** Bits of the sqlite3.flags field that are used by the
                   9556: ** sqlite3_test_control(SQLITE_TESTCTRL_OPTIMIZATIONS,...) interface.
                   9557: ** These must be the low-order bits of the flags field.
                   9558: */
                   9559: #define SQLITE_QueryFlattener 0x01        /* Disable query flattening */
                   9560: #define SQLITE_ColumnCache    0x02        /* Disable the column cache */
                   9561: #define SQLITE_IndexSort      0x04        /* Disable indexes for sorting */
                   9562: #define SQLITE_IndexSearch    0x08        /* Disable indexes for searching */
                   9563: #define SQLITE_IndexCover     0x10        /* Disable index covering table */
                   9564: #define SQLITE_GroupByOrder   0x20        /* Disable GROUPBY cover of ORDERBY */
                   9565: #define SQLITE_FactorOutConst 0x40        /* Disable factoring out constants */
                   9566: #define SQLITE_IdxRealAsInt   0x80        /* Store REAL as INT in indices */
                   9567: #define SQLITE_OptMask        0xff        /* Mask of all disablable opts */
                   9568: 
                   9569: /*
                   9570: ** Possible values for the sqlite.magic field.
                   9571: ** The numbers are obtained at random and have no special meaning, other
                   9572: ** than being distinct from one another.
                   9573: */
                   9574: #define SQLITE_MAGIC_OPEN     0xa029a697  /* Database is open */
                   9575: #define SQLITE_MAGIC_CLOSED   0x9f3c2d33  /* Database is closed */
                   9576: #define SQLITE_MAGIC_SICK     0x4b771290  /* Error and awaiting close */
                   9577: #define SQLITE_MAGIC_BUSY     0xf03b7906  /* Database currently in use */
                   9578: #define SQLITE_MAGIC_ERROR    0xb5357930  /* An SQLITE_MISUSE error occurred */
                   9579: 
                   9580: /*
                   9581: ** Each SQL function is defined by an instance of the following
                   9582: ** structure.  A pointer to this structure is stored in the sqlite.aFunc
                   9583: ** hash table.  When multiple functions have the same name, the hash table
                   9584: ** points to a linked list of these structures.
                   9585: */
                   9586: struct FuncDef {
                   9587:   i16 nArg;            /* Number of arguments.  -1 means unlimited */
                   9588:   u8 iPrefEnc;         /* Preferred text encoding (SQLITE_UTF8, 16LE, 16BE) */
                   9589:   u8 flags;            /* Some combination of SQLITE_FUNC_* */
                   9590:   void *pUserData;     /* User data parameter */
                   9591:   FuncDef *pNext;      /* Next function with same name */
                   9592:   void (*xFunc)(sqlite3_context*,int,sqlite3_value**); /* Regular function */
                   9593:   void (*xStep)(sqlite3_context*,int,sqlite3_value**); /* Aggregate step */
                   9594:   void (*xFinalize)(sqlite3_context*);                /* Aggregate finalizer */
                   9595:   char *zName;         /* SQL name of the function. */
                   9596:   FuncDef *pHash;      /* Next with a different name but the same hash */
                   9597:   FuncDestructor *pDestructor;   /* Reference counted destructor function */
                   9598: };
                   9599: 
                   9600: /*
                   9601: ** This structure encapsulates a user-function destructor callback (as
                   9602: ** configured using create_function_v2()) and a reference counter. When
                   9603: ** create_function_v2() is called to create a function with a destructor,
                   9604: ** a single object of this type is allocated. FuncDestructor.nRef is set to 
                   9605: ** the number of FuncDef objects created (either 1 or 3, depending on whether
                   9606: ** or not the specified encoding is SQLITE_ANY). The FuncDef.pDestructor
                   9607: ** member of each of the new FuncDef objects is set to point to the allocated
                   9608: ** FuncDestructor.
                   9609: **
                   9610: ** Thereafter, when one of the FuncDef objects is deleted, the reference
                   9611: ** count on this object is decremented. When it reaches 0, the destructor
                   9612: ** is invoked and the FuncDestructor structure freed.
                   9613: */
                   9614: struct FuncDestructor {
                   9615:   int nRef;
                   9616:   void (*xDestroy)(void *);
                   9617:   void *pUserData;
                   9618: };
                   9619: 
                   9620: /*
                   9621: ** Possible values for FuncDef.flags
                   9622: */
                   9623: #define SQLITE_FUNC_LIKE     0x01 /* Candidate for the LIKE optimization */
                   9624: #define SQLITE_FUNC_CASE     0x02 /* Case-sensitive LIKE-type function */
                   9625: #define SQLITE_FUNC_EPHEM    0x04 /* Ephemeral.  Delete with VDBE */
                   9626: #define SQLITE_FUNC_NEEDCOLL 0x08 /* sqlite3GetFuncCollSeq() might be called */
                   9627: #define SQLITE_FUNC_PRIVATE  0x10 /* Allowed for internal use only */
                   9628: #define SQLITE_FUNC_COUNT    0x20 /* Built-in count(*) aggregate */
                   9629: #define SQLITE_FUNC_COALESCE 0x40 /* Built-in coalesce() or ifnull() function */
                   9630: 
                   9631: /*
                   9632: ** The following three macros, FUNCTION(), LIKEFUNC() and AGGREGATE() are
                   9633: ** used to create the initializers for the FuncDef structures.
                   9634: **
                   9635: **   FUNCTION(zName, nArg, iArg, bNC, xFunc)
                   9636: **     Used to create a scalar function definition of a function zName 
                   9637: **     implemented by C function xFunc that accepts nArg arguments. The
                   9638: **     value passed as iArg is cast to a (void*) and made available
                   9639: **     as the user-data (sqlite3_user_data()) for the function. If 
                   9640: **     argument bNC is true, then the SQLITE_FUNC_NEEDCOLL flag is set.
                   9641: **
                   9642: **   AGGREGATE(zName, nArg, iArg, bNC, xStep, xFinal)
                   9643: **     Used to create an aggregate function definition implemented by
                   9644: **     the C functions xStep and xFinal. The first four parameters
                   9645: **     are interpreted in the same way as the first 4 parameters to
                   9646: **     FUNCTION().
                   9647: **
                   9648: **   LIKEFUNC(zName, nArg, pArg, flags)
                   9649: **     Used to create a scalar function definition of a function zName 
                   9650: **     that accepts nArg arguments and is implemented by a call to C 
                   9651: **     function likeFunc. Argument pArg is cast to a (void *) and made
                   9652: **     available as the function user-data (sqlite3_user_data()). The
                   9653: **     FuncDef.flags variable is set to the value passed as the flags
                   9654: **     parameter.
                   9655: */
                   9656: #define FUNCTION(zName, nArg, iArg, bNC, xFunc) \
                   9657:   {nArg, SQLITE_UTF8, bNC*SQLITE_FUNC_NEEDCOLL, \
                   9658:    SQLITE_INT_TO_PTR(iArg), 0, xFunc, 0, 0, #zName, 0, 0}
                   9659: #define STR_FUNCTION(zName, nArg, pArg, bNC, xFunc) \
                   9660:   {nArg, SQLITE_UTF8, bNC*SQLITE_FUNC_NEEDCOLL, \
                   9661:    pArg, 0, xFunc, 0, 0, #zName, 0, 0}
                   9662: #define LIKEFUNC(zName, nArg, arg, flags) \
                   9663:   {nArg, SQLITE_UTF8, flags, (void *)arg, 0, likeFunc, 0, 0, #zName, 0, 0}
                   9664: #define AGGREGATE(zName, nArg, arg, nc, xStep, xFinal) \
                   9665:   {nArg, SQLITE_UTF8, nc*SQLITE_FUNC_NEEDCOLL, \
                   9666:    SQLITE_INT_TO_PTR(arg), 0, 0, xStep,xFinal,#zName,0,0}
                   9667: 
                   9668: /*
                   9669: ** All current savepoints are stored in a linked list starting at
                   9670: ** sqlite3.pSavepoint. The first element in the list is the most recently
                   9671: ** opened savepoint. Savepoints are added to the list by the vdbe
                   9672: ** OP_Savepoint instruction.
                   9673: */
                   9674: struct Savepoint {
                   9675:   char *zName;                        /* Savepoint name (nul-terminated) */
                   9676:   i64 nDeferredCons;                  /* Number of deferred fk violations */
                   9677:   Savepoint *pNext;                   /* Parent savepoint (if any) */
                   9678: };
                   9679: 
                   9680: /*
                   9681: ** The following are used as the second parameter to sqlite3Savepoint(),
                   9682: ** and as the P1 argument to the OP_Savepoint instruction.
                   9683: */
                   9684: #define SAVEPOINT_BEGIN      0
                   9685: #define SAVEPOINT_RELEASE    1
                   9686: #define SAVEPOINT_ROLLBACK   2
                   9687: 
                   9688: 
                   9689: /*
                   9690: ** Each SQLite module (virtual table definition) is defined by an
                   9691: ** instance of the following structure, stored in the sqlite3.aModule
                   9692: ** hash table.
                   9693: */
                   9694: struct Module {
                   9695:   const sqlite3_module *pModule;       /* Callback pointers */
                   9696:   const char *zName;                   /* Name passed to create_module() */
                   9697:   void *pAux;                          /* pAux passed to create_module() */
                   9698:   void (*xDestroy)(void *);            /* Module destructor function */
                   9699: };
                   9700: 
                   9701: /*
                   9702: ** information about each column of an SQL table is held in an instance
                   9703: ** of this structure.
                   9704: */
                   9705: struct Column {
                   9706:   char *zName;     /* Name of this column */
                   9707:   Expr *pDflt;     /* Default value of this column */
                   9708:   char *zDflt;     /* Original text of the default value */
                   9709:   char *zType;     /* Data type for this column */
                   9710:   char *zColl;     /* Collating sequence.  If NULL, use the default */
                   9711:   u8 notNull;      /* True if there is a NOT NULL constraint */
                   9712:   u8 isPrimKey;    /* True if this column is part of the PRIMARY KEY */
                   9713:   char affinity;   /* One of the SQLITE_AFF_... values */
                   9714: #ifndef SQLITE_OMIT_VIRTUALTABLE
                   9715:   u8 isHidden;     /* True if this column is 'hidden' */
                   9716: #endif
                   9717: };
                   9718: 
                   9719: /*
                   9720: ** A "Collating Sequence" is defined by an instance of the following
                   9721: ** structure. Conceptually, a collating sequence consists of a name and
                   9722: ** a comparison routine that defines the order of that sequence.
                   9723: **
                   9724: ** There may two separate implementations of the collation function, one
                   9725: ** that processes text in UTF-8 encoding (CollSeq.xCmp) and another that
                   9726: ** processes text encoded in UTF-16 (CollSeq.xCmp16), using the machine
                   9727: ** native byte order. When a collation sequence is invoked, SQLite selects
                   9728: ** the version that will require the least expensive encoding
                   9729: ** translations, if any.
                   9730: **
                   9731: ** The CollSeq.pUser member variable is an extra parameter that passed in
                   9732: ** as the first argument to the UTF-8 comparison function, xCmp.
                   9733: ** CollSeq.pUser16 is the equivalent for the UTF-16 comparison function,
                   9734: ** xCmp16.
                   9735: **
                   9736: ** If both CollSeq.xCmp and CollSeq.xCmp16 are NULL, it means that the
                   9737: ** collating sequence is undefined.  Indices built on an undefined
                   9738: ** collating sequence may not be read or written.
                   9739: */
                   9740: struct CollSeq {
                   9741:   char *zName;          /* Name of the collating sequence, UTF-8 encoded */
                   9742:   u8 enc;               /* Text encoding handled by xCmp() */
                   9743:   u8 type;              /* One of the SQLITE_COLL_... values below */
                   9744:   void *pUser;          /* First argument to xCmp() */
                   9745:   int (*xCmp)(void*,int, const void*, int, const void*);
                   9746:   void (*xDel)(void*);  /* Destructor for pUser */
                   9747: };
                   9748: 
                   9749: /*
                   9750: ** Allowed values of CollSeq.type:
                   9751: */
                   9752: #define SQLITE_COLL_BINARY  1  /* The default memcmp() collating sequence */
                   9753: #define SQLITE_COLL_NOCASE  2  /* The built-in NOCASE collating sequence */
                   9754: #define SQLITE_COLL_REVERSE 3  /* The built-in REVERSE collating sequence */
                   9755: #define SQLITE_COLL_USER    0  /* Any other user-defined collating sequence */
                   9756: 
                   9757: /*
                   9758: ** A sort order can be either ASC or DESC.
                   9759: */
                   9760: #define SQLITE_SO_ASC       0  /* Sort in ascending order */
                   9761: #define SQLITE_SO_DESC      1  /* Sort in ascending order */
                   9762: 
                   9763: /*
                   9764: ** Column affinity types.
                   9765: **
                   9766: ** These used to have mnemonic name like 'i' for SQLITE_AFF_INTEGER and
                   9767: ** 't' for SQLITE_AFF_TEXT.  But we can save a little space and improve
                   9768: ** the speed a little by numbering the values consecutively.  
                   9769: **
                   9770: ** But rather than start with 0 or 1, we begin with 'a'.  That way,
                   9771: ** when multiple affinity types are concatenated into a string and
                   9772: ** used as the P4 operand, they will be more readable.
                   9773: **
                   9774: ** Note also that the numeric types are grouped together so that testing
                   9775: ** for a numeric type is a single comparison.
                   9776: */
                   9777: #define SQLITE_AFF_TEXT     'a'
                   9778: #define SQLITE_AFF_NONE     'b'
                   9779: #define SQLITE_AFF_NUMERIC  'c'
                   9780: #define SQLITE_AFF_INTEGER  'd'
                   9781: #define SQLITE_AFF_REAL     'e'
                   9782: 
                   9783: #define sqlite3IsNumericAffinity(X)  ((X)>=SQLITE_AFF_NUMERIC)
                   9784: 
                   9785: /*
                   9786: ** The SQLITE_AFF_MASK values masks off the significant bits of an
                   9787: ** affinity value. 
                   9788: */
                   9789: #define SQLITE_AFF_MASK     0x67
                   9790: 
                   9791: /*
                   9792: ** Additional bit values that can be ORed with an affinity without
                   9793: ** changing the affinity.
                   9794: */
                   9795: #define SQLITE_JUMPIFNULL   0x08  /* jumps if either operand is NULL */
                   9796: #define SQLITE_STOREP2      0x10  /* Store result in reg[P2] rather than jump */
                   9797: #define SQLITE_NULLEQ       0x80  /* NULL=NULL */
                   9798: 
                   9799: /*
                   9800: ** An object of this type is created for each virtual table present in
                   9801: ** the database schema. 
                   9802: **
                   9803: ** If the database schema is shared, then there is one instance of this
                   9804: ** structure for each database connection (sqlite3*) that uses the shared
                   9805: ** schema. This is because each database connection requires its own unique
                   9806: ** instance of the sqlite3_vtab* handle used to access the virtual table 
                   9807: ** implementation. sqlite3_vtab* handles can not be shared between 
                   9808: ** database connections, even when the rest of the in-memory database 
                   9809: ** schema is shared, as the implementation often stores the database
                   9810: ** connection handle passed to it via the xConnect() or xCreate() method
                   9811: ** during initialization internally. This database connection handle may
                   9812: ** then be used by the virtual table implementation to access real tables 
                   9813: ** within the database. So that they appear as part of the callers 
                   9814: ** transaction, these accesses need to be made via the same database 
                   9815: ** connection as that used to execute SQL operations on the virtual table.
                   9816: **
                   9817: ** All VTable objects that correspond to a single table in a shared
                   9818: ** database schema are initially stored in a linked-list pointed to by
                   9819: ** the Table.pVTable member variable of the corresponding Table object.
                   9820: ** When an sqlite3_prepare() operation is required to access the virtual
                   9821: ** table, it searches the list for the VTable that corresponds to the
                   9822: ** database connection doing the preparing so as to use the correct
                   9823: ** sqlite3_vtab* handle in the compiled query.
                   9824: **
                   9825: ** When an in-memory Table object is deleted (for example when the
                   9826: ** schema is being reloaded for some reason), the VTable objects are not 
                   9827: ** deleted and the sqlite3_vtab* handles are not xDisconnect()ed 
                   9828: ** immediately. Instead, they are moved from the Table.pVTable list to
                   9829: ** another linked list headed by the sqlite3.pDisconnect member of the
                   9830: ** corresponding sqlite3 structure. They are then deleted/xDisconnected 
                   9831: ** next time a statement is prepared using said sqlite3*. This is done
                   9832: ** to avoid deadlock issues involving multiple sqlite3.mutex mutexes.
                   9833: ** Refer to comments above function sqlite3VtabUnlockList() for an
                   9834: ** explanation as to why it is safe to add an entry to an sqlite3.pDisconnect
                   9835: ** list without holding the corresponding sqlite3.mutex mutex.
                   9836: **
                   9837: ** The memory for objects of this type is always allocated by 
                   9838: ** sqlite3DbMalloc(), using the connection handle stored in VTable.db as 
                   9839: ** the first argument.
                   9840: */
                   9841: struct VTable {
                   9842:   sqlite3 *db;              /* Database connection associated with this table */
                   9843:   Module *pMod;             /* Pointer to module implementation */
                   9844:   sqlite3_vtab *pVtab;      /* Pointer to vtab instance */
                   9845:   int nRef;                 /* Number of pointers to this structure */
                   9846:   u8 bConstraint;           /* True if constraints are supported */
                   9847:   int iSavepoint;           /* Depth of the SAVEPOINT stack */
                   9848:   VTable *pNext;            /* Next in linked list (see above) */
                   9849: };
                   9850: 
                   9851: /*
                   9852: ** Each SQL table is represented in memory by an instance of the
                   9853: ** following structure.
                   9854: **
                   9855: ** Table.zName is the name of the table.  The case of the original
                   9856: ** CREATE TABLE statement is stored, but case is not significant for
                   9857: ** comparisons.
                   9858: **
                   9859: ** Table.nCol is the number of columns in this table.  Table.aCol is a
                   9860: ** pointer to an array of Column structures, one for each column.
                   9861: **
                   9862: ** If the table has an INTEGER PRIMARY KEY, then Table.iPKey is the index of
                   9863: ** the column that is that key.   Otherwise Table.iPKey is negative.  Note
                   9864: ** that the datatype of the PRIMARY KEY must be INTEGER for this field to
                   9865: ** be set.  An INTEGER PRIMARY KEY is used as the rowid for each row of
                   9866: ** the table.  If a table has no INTEGER PRIMARY KEY, then a random rowid
                   9867: ** is generated for each row of the table.  TF_HasPrimaryKey is set if
                   9868: ** the table has any PRIMARY KEY, INTEGER or otherwise.
                   9869: **
                   9870: ** Table.tnum is the page number for the root BTree page of the table in the
                   9871: ** database file.  If Table.iDb is the index of the database table backend
                   9872: ** in sqlite.aDb[].  0 is for the main database and 1 is for the file that
                   9873: ** holds temporary tables and indices.  If TF_Ephemeral is set
                   9874: ** then the table is stored in a file that is automatically deleted
                   9875: ** when the VDBE cursor to the table is closed.  In this case Table.tnum 
                   9876: ** refers VDBE cursor number that holds the table open, not to the root
                   9877: ** page number.  Transient tables are used to hold the results of a
                   9878: ** sub-query that appears instead of a real table name in the FROM clause 
                   9879: ** of a SELECT statement.
                   9880: */
                   9881: struct Table {
                   9882:   char *zName;         /* Name of the table or view */
                   9883:   int iPKey;           /* If not negative, use aCol[iPKey] as the primary key */
                   9884:   int nCol;            /* Number of columns in this table */
                   9885:   Column *aCol;        /* Information about each column */
                   9886:   Index *pIndex;       /* List of SQL indexes on this table. */
                   9887:   int tnum;            /* Root BTree node for this table (see note above) */
                   9888:   unsigned nRowEst;    /* Estimated rows in table - from sqlite_stat1 table */
                   9889:   Select *pSelect;     /* NULL for tables.  Points to definition if a view. */
                   9890:   u16 nRef;            /* Number of pointers to this Table */
                   9891:   u8 tabFlags;         /* Mask of TF_* values */
                   9892:   u8 keyConf;          /* What to do in case of uniqueness conflict on iPKey */
                   9893:   FKey *pFKey;         /* Linked list of all foreign keys in this table */
                   9894:   char *zColAff;       /* String defining the affinity of each column */
                   9895: #ifndef SQLITE_OMIT_CHECK
                   9896:   Expr *pCheck;        /* The AND of all CHECK constraints */
                   9897: #endif
                   9898: #ifndef SQLITE_OMIT_ALTERTABLE
                   9899:   int addColOffset;    /* Offset in CREATE TABLE stmt to add a new column */
                   9900: #endif
                   9901: #ifndef SQLITE_OMIT_VIRTUALTABLE
                   9902:   VTable *pVTable;     /* List of VTable objects. */
                   9903:   int nModuleArg;      /* Number of arguments to the module */
                   9904:   char **azModuleArg;  /* Text of all module args. [0] is module name */
                   9905: #endif
                   9906:   Trigger *pTrigger;   /* List of triggers stored in pSchema */
                   9907:   Schema *pSchema;     /* Schema that contains this table */
                   9908:   Table *pNextZombie;  /* Next on the Parse.pZombieTab list */
                   9909: };
                   9910: 
                   9911: /*
                   9912: ** Allowed values for Tabe.tabFlags.
                   9913: */
                   9914: #define TF_Readonly        0x01    /* Read-only system table */
                   9915: #define TF_Ephemeral       0x02    /* An ephemeral table */
                   9916: #define TF_HasPrimaryKey   0x04    /* Table has a primary key */
                   9917: #define TF_Autoincrement   0x08    /* Integer primary key is autoincrement */
                   9918: #define TF_Virtual         0x10    /* Is a virtual table */
                   9919: #define TF_NeedMetadata    0x20    /* aCol[].zType and aCol[].pColl missing */
                   9920: 
                   9921: 
                   9922: 
                   9923: /*
                   9924: ** Test to see whether or not a table is a virtual table.  This is
                   9925: ** done as a macro so that it will be optimized out when virtual
                   9926: ** table support is omitted from the build.
                   9927: */
                   9928: #ifndef SQLITE_OMIT_VIRTUALTABLE
                   9929: #  define IsVirtual(X)      (((X)->tabFlags & TF_Virtual)!=0)
                   9930: #  define IsHiddenColumn(X) ((X)->isHidden)
                   9931: #else
                   9932: #  define IsVirtual(X)      0
                   9933: #  define IsHiddenColumn(X) 0
                   9934: #endif
                   9935: 
                   9936: /*
                   9937: ** Each foreign key constraint is an instance of the following structure.
                   9938: **
                   9939: ** A foreign key is associated with two tables.  The "from" table is
                   9940: ** the table that contains the REFERENCES clause that creates the foreign
                   9941: ** key.  The "to" table is the table that is named in the REFERENCES clause.
                   9942: ** Consider this example:
                   9943: **
                   9944: **     CREATE TABLE ex1(
                   9945: **       a INTEGER PRIMARY KEY,
                   9946: **       b INTEGER CONSTRAINT fk1 REFERENCES ex2(x)
                   9947: **     );
                   9948: **
                   9949: ** For foreign key "fk1", the from-table is "ex1" and the to-table is "ex2".
                   9950: **
                   9951: ** Each REFERENCES clause generates an instance of the following structure
                   9952: ** which is attached to the from-table.  The to-table need not exist when
                   9953: ** the from-table is created.  The existence of the to-table is not checked.
                   9954: */
                   9955: struct FKey {
                   9956:   Table *pFrom;     /* Table containing the REFERENCES clause (aka: Child) */
                   9957:   FKey *pNextFrom;  /* Next foreign key in pFrom */
                   9958:   char *zTo;        /* Name of table that the key points to (aka: Parent) */
                   9959:   FKey *pNextTo;    /* Next foreign key on table named zTo */
                   9960:   FKey *pPrevTo;    /* Previous foreign key on table named zTo */
                   9961:   int nCol;         /* Number of columns in this key */
                   9962:   /* EV: R-30323-21917 */
                   9963:   u8 isDeferred;    /* True if constraint checking is deferred till COMMIT */
                   9964:   u8 aAction[2];          /* ON DELETE and ON UPDATE actions, respectively */
                   9965:   Trigger *apTrigger[2];  /* Triggers for aAction[] actions */
                   9966:   struct sColMap {  /* Mapping of columns in pFrom to columns in zTo */
                   9967:     int iFrom;         /* Index of column in pFrom */
                   9968:     char *zCol;        /* Name of column in zTo.  If 0 use PRIMARY KEY */
                   9969:   } aCol[1];        /* One entry for each of nCol column s */
                   9970: };
                   9971: 
                   9972: /*
                   9973: ** SQLite supports many different ways to resolve a constraint
                   9974: ** error.  ROLLBACK processing means that a constraint violation
                   9975: ** causes the operation in process to fail and for the current transaction
                   9976: ** to be rolled back.  ABORT processing means the operation in process
                   9977: ** fails and any prior changes from that one operation are backed out,
                   9978: ** but the transaction is not rolled back.  FAIL processing means that
                   9979: ** the operation in progress stops and returns an error code.  But prior
                   9980: ** changes due to the same operation are not backed out and no rollback
                   9981: ** occurs.  IGNORE means that the particular row that caused the constraint
                   9982: ** error is not inserted or updated.  Processing continues and no error
                   9983: ** is returned.  REPLACE means that preexisting database rows that caused
                   9984: ** a UNIQUE constraint violation are removed so that the new insert or
                   9985: ** update can proceed.  Processing continues and no error is reported.
                   9986: **
                   9987: ** RESTRICT, SETNULL, and CASCADE actions apply only to foreign keys.
                   9988: ** RESTRICT is the same as ABORT for IMMEDIATE foreign keys and the
                   9989: ** same as ROLLBACK for DEFERRED keys.  SETNULL means that the foreign
                   9990: ** key is set to NULL.  CASCADE means that a DELETE or UPDATE of the
                   9991: ** referenced table row is propagated into the row that holds the
                   9992: ** foreign key.
                   9993: ** 
                   9994: ** The following symbolic values are used to record which type
                   9995: ** of action to take.
                   9996: */
                   9997: #define OE_None     0   /* There is no constraint to check */
                   9998: #define OE_Rollback 1   /* Fail the operation and rollback the transaction */
                   9999: #define OE_Abort    2   /* Back out changes but do no rollback transaction */
                   10000: #define OE_Fail     3   /* Stop the operation but leave all prior changes */
                   10001: #define OE_Ignore   4   /* Ignore the error. Do not do the INSERT or UPDATE */
                   10002: #define OE_Replace  5   /* Delete existing record, then do INSERT or UPDATE */
                   10003: 
                   10004: #define OE_Restrict 6   /* OE_Abort for IMMEDIATE, OE_Rollback for DEFERRED */
                   10005: #define OE_SetNull  7   /* Set the foreign key value to NULL */
                   10006: #define OE_SetDflt  8   /* Set the foreign key value to its default */
                   10007: #define OE_Cascade  9   /* Cascade the changes */
                   10008: 
                   10009: #define OE_Default  99  /* Do whatever the default action is */
                   10010: 
                   10011: 
                   10012: /*
                   10013: ** An instance of the following structure is passed as the first
                   10014: ** argument to sqlite3VdbeKeyCompare and is used to control the 
                   10015: ** comparison of the two index keys.
                   10016: */
                   10017: struct KeyInfo {
                   10018:   sqlite3 *db;        /* The database connection */
                   10019:   u8 enc;             /* Text encoding - one of the SQLITE_UTF* values */
                   10020:   u16 nField;         /* Number of entries in aColl[] */
                   10021:   u8 *aSortOrder;     /* Sort order for each column.  May be NULL */
                   10022:   CollSeq *aColl[1];  /* Collating sequence for each term of the key */
                   10023: };
                   10024: 
                   10025: /*
                   10026: ** An instance of the following structure holds information about a
                   10027: ** single index record that has already been parsed out into individual
                   10028: ** values.
                   10029: **
                   10030: ** A record is an object that contains one or more fields of data.
                   10031: ** Records are used to store the content of a table row and to store
                   10032: ** the key of an index.  A blob encoding of a record is created by
                   10033: ** the OP_MakeRecord opcode of the VDBE and is disassembled by the
                   10034: ** OP_Column opcode.
                   10035: **
                   10036: ** This structure holds a record that has already been disassembled
                   10037: ** into its constituent fields.
                   10038: */
                   10039: struct UnpackedRecord {
                   10040:   KeyInfo *pKeyInfo;  /* Collation and sort-order information */
                   10041:   u16 nField;         /* Number of entries in apMem[] */
                   10042:   u16 flags;          /* Boolean settings.  UNPACKED_... below */
                   10043:   i64 rowid;          /* Used by UNPACKED_PREFIX_SEARCH */
                   10044:   Mem *aMem;          /* Values */
                   10045: };
                   10046: 
                   10047: /*
                   10048: ** Allowed values of UnpackedRecord.flags
                   10049: */
                   10050: #define UNPACKED_NEED_FREE     0x0001  /* Memory is from sqlite3Malloc() */
                   10051: #define UNPACKED_NEED_DESTROY  0x0002  /* apMem[]s should all be destroyed */
                   10052: #define UNPACKED_IGNORE_ROWID  0x0004  /* Ignore trailing rowid on key1 */
                   10053: #define UNPACKED_INCRKEY       0x0008  /* Make this key an epsilon larger */
                   10054: #define UNPACKED_PREFIX_MATCH  0x0010  /* A prefix match is considered OK */
                   10055: #define UNPACKED_PREFIX_SEARCH 0x0020  /* A prefix match is considered OK */
                   10056: 
                   10057: /*
                   10058: ** Each SQL index is represented in memory by an
                   10059: ** instance of the following structure.
                   10060: **
                   10061: ** The columns of the table that are to be indexed are described
                   10062: ** by the aiColumn[] field of this structure.  For example, suppose
                   10063: ** we have the following table and index:
                   10064: **
                   10065: **     CREATE TABLE Ex1(c1 int, c2 int, c3 text);
                   10066: **     CREATE INDEX Ex2 ON Ex1(c3,c1);
                   10067: **
                   10068: ** In the Table structure describing Ex1, nCol==3 because there are
                   10069: ** three columns in the table.  In the Index structure describing
                   10070: ** Ex2, nColumn==2 since 2 of the 3 columns of Ex1 are indexed.
                   10071: ** The value of aiColumn is {2, 0}.  aiColumn[0]==2 because the 
                   10072: ** first column to be indexed (c3) has an index of 2 in Ex1.aCol[].
                   10073: ** The second column to be indexed (c1) has an index of 0 in
                   10074: ** Ex1.aCol[], hence Ex2.aiColumn[1]==0.
                   10075: **
                   10076: ** The Index.onError field determines whether or not the indexed columns
                   10077: ** must be unique and what to do if they are not.  When Index.onError=OE_None,
                   10078: ** it means this is not a unique index.  Otherwise it is a unique index
                   10079: ** and the value of Index.onError indicate the which conflict resolution 
                   10080: ** algorithm to employ whenever an attempt is made to insert a non-unique
                   10081: ** element.
                   10082: */
                   10083: struct Index {
                   10084:   char *zName;     /* Name of this index */
                   10085:   int nColumn;     /* Number of columns in the table used by this index */
                   10086:   int *aiColumn;   /* Which columns are used by this index.  1st is 0 */
                   10087:   unsigned *aiRowEst; /* Result of ANALYZE: Est. rows selected by each column */
                   10088:   Table *pTable;   /* The SQL table being indexed */
                   10089:   int tnum;        /* Page containing root of this index in database file */
                   10090:   u8 onError;      /* OE_Abort, OE_Ignore, OE_Replace, or OE_None */
                   10091:   u8 autoIndex;    /* True if is automatically created (ex: by UNIQUE) */
                   10092:   u8 bUnordered;   /* Use this index for == or IN queries only */
                   10093:   char *zColAff;   /* String defining the affinity of each column */
                   10094:   Index *pNext;    /* The next index associated with the same table */
                   10095:   Schema *pSchema; /* Schema containing this index */
                   10096:   u8 *aSortOrder;  /* Array of size Index.nColumn. True==DESC, False==ASC */
                   10097:   char **azColl;   /* Array of collation sequence names for index */
                   10098:   IndexSample *aSample;    /* Array of SQLITE_INDEX_SAMPLES samples */
                   10099: };
                   10100: 
                   10101: /*
                   10102: ** Each sample stored in the sqlite_stat2 table is represented in memory 
                   10103: ** using a structure of this type.
                   10104: */
                   10105: struct IndexSample {
                   10106:   union {
                   10107:     char *z;        /* Value if eType is SQLITE_TEXT or SQLITE_BLOB */
                   10108:     double r;       /* Value if eType is SQLITE_FLOAT or SQLITE_INTEGER */
                   10109:   } u;
                   10110:   u8 eType;         /* SQLITE_NULL, SQLITE_INTEGER ... etc. */
                   10111:   u8 nByte;         /* Size in byte of text or blob. */
                   10112: };
                   10113: 
                   10114: /*
                   10115: ** Each token coming out of the lexer is an instance of
                   10116: ** this structure.  Tokens are also used as part of an expression.
                   10117: **
                   10118: ** Note if Token.z==0 then Token.dyn and Token.n are undefined and
                   10119: ** may contain random values.  Do not make any assumptions about Token.dyn
                   10120: ** and Token.n when Token.z==0.
                   10121: */
                   10122: struct Token {
                   10123:   const char *z;     /* Text of the token.  Not NULL-terminated! */
                   10124:   unsigned int n;    /* Number of characters in this token */
                   10125: };
                   10126: 
                   10127: /*
                   10128: ** An instance of this structure contains information needed to generate
                   10129: ** code for a SELECT that contains aggregate functions.
                   10130: **
                   10131: ** If Expr.op==TK_AGG_COLUMN or TK_AGG_FUNCTION then Expr.pAggInfo is a
                   10132: ** pointer to this structure.  The Expr.iColumn field is the index in
                   10133: ** AggInfo.aCol[] or AggInfo.aFunc[] of information needed to generate
                   10134: ** code for that node.
                   10135: **
                   10136: ** AggInfo.pGroupBy and AggInfo.aFunc.pExpr point to fields within the
                   10137: ** original Select structure that describes the SELECT statement.  These
                   10138: ** fields do not need to be freed when deallocating the AggInfo structure.
                   10139: */
                   10140: struct AggInfo {
                   10141:   u8 directMode;          /* Direct rendering mode means take data directly
                   10142:                           ** from source tables rather than from accumulators */
                   10143:   u8 useSortingIdx;       /* In direct mode, reference the sorting index rather
                   10144:                           ** than the source table */
                   10145:   int sortingIdx;         /* Cursor number of the sorting index */
                   10146:   ExprList *pGroupBy;     /* The group by clause */
                   10147:   int nSortingColumn;     /* Number of columns in the sorting index */
                   10148:   struct AggInfo_col {    /* For each column used in source tables */
                   10149:     Table *pTab;             /* Source table */
                   10150:     int iTable;              /* Cursor number of the source table */
                   10151:     int iColumn;             /* Column number within the source table */
                   10152:     int iSorterColumn;       /* Column number in the sorting index */
                   10153:     int iMem;                /* Memory location that acts as accumulator */
                   10154:     Expr *pExpr;             /* The original expression */
                   10155:   } *aCol;
                   10156:   int nColumn;            /* Number of used entries in aCol[] */
                   10157:   int nColumnAlloc;       /* Number of slots allocated for aCol[] */
                   10158:   int nAccumulator;       /* Number of columns that show through to the output.
                   10159:                           ** Additional columns are used only as parameters to
                   10160:                           ** aggregate functions */
                   10161:   struct AggInfo_func {   /* For each aggregate function */
                   10162:     Expr *pExpr;             /* Expression encoding the function */
                   10163:     FuncDef *pFunc;          /* The aggregate function implementation */
                   10164:     int iMem;                /* Memory location that acts as accumulator */
                   10165:     int iDistinct;           /* Ephemeral table used to enforce DISTINCT */
                   10166:   } *aFunc;
                   10167:   int nFunc;              /* Number of entries in aFunc[] */
                   10168:   int nFuncAlloc;         /* Number of slots allocated for aFunc[] */
                   10169: };
                   10170: 
                   10171: /*
                   10172: ** The datatype ynVar is a signed integer, either 16-bit or 32-bit.
                   10173: ** Usually it is 16-bits.  But if SQLITE_MAX_VARIABLE_NUMBER is greater
                   10174: ** than 32767 we have to make it 32-bit.  16-bit is preferred because
                   10175: ** it uses less memory in the Expr object, which is a big memory user
                   10176: ** in systems with lots of prepared statements.  And few applications
                   10177: ** need more than about 10 or 20 variables.  But some extreme users want
                   10178: ** to have prepared statements with over 32767 variables, and for them
                   10179: ** the option is available (at compile-time).
                   10180: */
                   10181: #if SQLITE_MAX_VARIABLE_NUMBER<=32767
                   10182: typedef i16 ynVar;
                   10183: #else
                   10184: typedef int ynVar;
                   10185: #endif
                   10186: 
                   10187: /*
                   10188: ** Each node of an expression in the parse tree is an instance
                   10189: ** of this structure.
                   10190: **
                   10191: ** Expr.op is the opcode. The integer parser token codes are reused
                   10192: ** as opcodes here. For example, the parser defines TK_GE to be an integer
                   10193: ** code representing the ">=" operator. This same integer code is reused
                   10194: ** to represent the greater-than-or-equal-to operator in the expression
                   10195: ** tree.
                   10196: **
                   10197: ** If the expression is an SQL literal (TK_INTEGER, TK_FLOAT, TK_BLOB, 
                   10198: ** or TK_STRING), then Expr.token contains the text of the SQL literal. If
                   10199: ** the expression is a variable (TK_VARIABLE), then Expr.token contains the 
                   10200: ** variable name. Finally, if the expression is an SQL function (TK_FUNCTION),
                   10201: ** then Expr.token contains the name of the function.
                   10202: **
                   10203: ** Expr.pRight and Expr.pLeft are the left and right subexpressions of a
                   10204: ** binary operator. Either or both may be NULL.
                   10205: **
                   10206: ** Expr.x.pList is a list of arguments if the expression is an SQL function,
                   10207: ** a CASE expression or an IN expression of the form "<lhs> IN (<y>, <z>...)".
                   10208: ** Expr.x.pSelect is used if the expression is a sub-select or an expression of
                   10209: ** the form "<lhs> IN (SELECT ...)". If the EP_xIsSelect bit is set in the
                   10210: ** Expr.flags mask, then Expr.x.pSelect is valid. Otherwise, Expr.x.pList is 
                   10211: ** valid.
                   10212: **
                   10213: ** An expression of the form ID or ID.ID refers to a column in a table.
                   10214: ** For such expressions, Expr.op is set to TK_COLUMN and Expr.iTable is
                   10215: ** the integer cursor number of a VDBE cursor pointing to that table and
                   10216: ** Expr.iColumn is the column number for the specific column.  If the
                   10217: ** expression is used as a result in an aggregate SELECT, then the
                   10218: ** value is also stored in the Expr.iAgg column in the aggregate so that
                   10219: ** it can be accessed after all aggregates are computed.
                   10220: **
                   10221: ** If the expression is an unbound variable marker (a question mark 
                   10222: ** character '?' in the original SQL) then the Expr.iTable holds the index 
                   10223: ** number for that variable.
                   10224: **
                   10225: ** If the expression is a subquery then Expr.iColumn holds an integer
                   10226: ** register number containing the result of the subquery.  If the
                   10227: ** subquery gives a constant result, then iTable is -1.  If the subquery
                   10228: ** gives a different answer at different times during statement processing
                   10229: ** then iTable is the address of a subroutine that computes the subquery.
                   10230: **
                   10231: ** If the Expr is of type OP_Column, and the table it is selecting from
                   10232: ** is a disk table or the "old.*" pseudo-table, then pTab points to the
                   10233: ** corresponding table definition.
                   10234: **
                   10235: ** ALLOCATION NOTES:
                   10236: **
                   10237: ** Expr objects can use a lot of memory space in database schema.  To
                   10238: ** help reduce memory requirements, sometimes an Expr object will be
                   10239: ** truncated.  And to reduce the number of memory allocations, sometimes
                   10240: ** two or more Expr objects will be stored in a single memory allocation,
                   10241: ** together with Expr.zToken strings.
                   10242: **
                   10243: ** If the EP_Reduced and EP_TokenOnly flags are set when
                   10244: ** an Expr object is truncated.  When EP_Reduced is set, then all
                   10245: ** the child Expr objects in the Expr.pLeft and Expr.pRight subtrees
                   10246: ** are contained within the same memory allocation.  Note, however, that
                   10247: ** the subtrees in Expr.x.pList or Expr.x.pSelect are always separately
                   10248: ** allocated, regardless of whether or not EP_Reduced is set.
                   10249: */
                   10250: struct Expr {
                   10251:   u8 op;                 /* Operation performed by this node */
                   10252:   char affinity;         /* The affinity of the column or 0 if not a column */
                   10253:   u16 flags;             /* Various flags.  EP_* See below */
                   10254:   union {
                   10255:     char *zToken;          /* Token value. Zero terminated and dequoted */
                   10256:     int iValue;            /* Non-negative integer value if EP_IntValue */
                   10257:   } u;
                   10258: 
                   10259:   /* If the EP_TokenOnly flag is set in the Expr.flags mask, then no
                   10260:   ** space is allocated for the fields below this point. An attempt to
                   10261:   ** access them will result in a segfault or malfunction. 
                   10262:   *********************************************************************/
                   10263: 
                   10264:   Expr *pLeft;           /* Left subnode */
                   10265:   Expr *pRight;          /* Right subnode */
                   10266:   union {
                   10267:     ExprList *pList;     /* Function arguments or in "<expr> IN (<expr-list)" */
                   10268:     Select *pSelect;     /* Used for sub-selects and "<expr> IN (<select>)" */
                   10269:   } x;
                   10270:   CollSeq *pColl;        /* The collation type of the column or 0 */
                   10271: 
                   10272:   /* If the EP_Reduced flag is set in the Expr.flags mask, then no
                   10273:   ** space is allocated for the fields below this point. An attempt to
                   10274:   ** access them will result in a segfault or malfunction.
                   10275:   *********************************************************************/
                   10276: 
                   10277:   int iTable;            /* TK_COLUMN: cursor number of table holding column
                   10278:                          ** TK_REGISTER: register number
                   10279:                          ** TK_TRIGGER: 1 -> new, 0 -> old */
                   10280:   ynVar iColumn;         /* TK_COLUMN: column index.  -1 for rowid.
                   10281:                          ** TK_VARIABLE: variable number (always >= 1). */
                   10282:   i16 iAgg;              /* Which entry in pAggInfo->aCol[] or ->aFunc[] */
                   10283:   i16 iRightJoinTable;   /* If EP_FromJoin, the right table of the join */
                   10284:   u8 flags2;             /* Second set of flags.  EP2_... */
                   10285:   u8 op2;                /* If a TK_REGISTER, the original value of Expr.op */
                   10286:   AggInfo *pAggInfo;     /* Used by TK_AGG_COLUMN and TK_AGG_FUNCTION */
                   10287:   Table *pTab;           /* Table for TK_COLUMN expressions. */
                   10288: #if SQLITE_MAX_EXPR_DEPTH>0
                   10289:   int nHeight;           /* Height of the tree headed by this node */
                   10290: #endif
                   10291: };
                   10292: 
                   10293: /*
                   10294: ** The following are the meanings of bits in the Expr.flags field.
                   10295: */
                   10296: #define EP_FromJoin   0x0001  /* Originated in ON or USING clause of a join */
                   10297: #define EP_Agg        0x0002  /* Contains one or more aggregate functions */
                   10298: #define EP_Resolved   0x0004  /* IDs have been resolved to COLUMNs */
                   10299: #define EP_Error      0x0008  /* Expression contains one or more errors */
                   10300: #define EP_Distinct   0x0010  /* Aggregate function with DISTINCT keyword */
                   10301: #define EP_VarSelect  0x0020  /* pSelect is correlated, not constant */
                   10302: #define EP_DblQuoted  0x0040  /* token.z was originally in "..." */
                   10303: #define EP_InfixFunc  0x0080  /* True for an infix function: LIKE, GLOB, etc */
                   10304: #define EP_ExpCollate 0x0100  /* Collating sequence specified explicitly */
                   10305: #define EP_FixedDest  0x0200  /* Result needed in a specific register */
                   10306: #define EP_IntValue   0x0400  /* Integer value contained in u.iValue */
                   10307: #define EP_xIsSelect  0x0800  /* x.pSelect is valid (otherwise x.pList is) */
                   10308: 
                   10309: #define EP_Reduced    0x1000  /* Expr struct is EXPR_REDUCEDSIZE bytes only */
                   10310: #define EP_TokenOnly  0x2000  /* Expr struct is EXPR_TOKENONLYSIZE bytes only */
                   10311: #define EP_Static     0x4000  /* Held in memory not obtained from malloc() */
                   10312: 
                   10313: /*
                   10314: ** The following are the meanings of bits in the Expr.flags2 field.
                   10315: */
                   10316: #define EP2_MallocedToken  0x0001  /* Need to sqlite3DbFree() Expr.zToken */
                   10317: #define EP2_Irreducible    0x0002  /* Cannot EXPRDUP_REDUCE this Expr */
                   10318: 
                   10319: /*
                   10320: ** The pseudo-routine sqlite3ExprSetIrreducible sets the EP2_Irreducible
                   10321: ** flag on an expression structure.  This flag is used for VV&A only.  The
                   10322: ** routine is implemented as a macro that only works when in debugging mode,
                   10323: ** so as not to burden production code.
                   10324: */
                   10325: #ifdef SQLITE_DEBUG
                   10326: # define ExprSetIrreducible(X)  (X)->flags2 |= EP2_Irreducible
                   10327: #else
                   10328: # define ExprSetIrreducible(X)
                   10329: #endif
                   10330: 
                   10331: /*
                   10332: ** These macros can be used to test, set, or clear bits in the 
                   10333: ** Expr.flags field.
                   10334: */
                   10335: #define ExprHasProperty(E,P)     (((E)->flags&(P))==(P))
                   10336: #define ExprHasAnyProperty(E,P)  (((E)->flags&(P))!=0)
                   10337: #define ExprSetProperty(E,P)     (E)->flags|=(P)
                   10338: #define ExprClearProperty(E,P)   (E)->flags&=~(P)
                   10339: 
                   10340: /*
                   10341: ** Macros to determine the number of bytes required by a normal Expr 
                   10342: ** struct, an Expr struct with the EP_Reduced flag set in Expr.flags 
                   10343: ** and an Expr struct with the EP_TokenOnly flag set.
                   10344: */
                   10345: #define EXPR_FULLSIZE           sizeof(Expr)           /* Full size */
                   10346: #define EXPR_REDUCEDSIZE        offsetof(Expr,iTable)  /* Common features */
                   10347: #define EXPR_TOKENONLYSIZE      offsetof(Expr,pLeft)   /* Fewer features */
                   10348: 
                   10349: /*
                   10350: ** Flags passed to the sqlite3ExprDup() function. See the header comment 
                   10351: ** above sqlite3ExprDup() for details.
                   10352: */
                   10353: #define EXPRDUP_REDUCE         0x0001  /* Used reduced-size Expr nodes */
                   10354: 
                   10355: /*
                   10356: ** A list of expressions.  Each expression may optionally have a
                   10357: ** name.  An expr/name combination can be used in several ways, such
                   10358: ** as the list of "expr AS ID" fields following a "SELECT" or in the
                   10359: ** list of "ID = expr" items in an UPDATE.  A list of expressions can
                   10360: ** also be used as the argument to a function, in which case the a.zName
                   10361: ** field is not used.
                   10362: */
                   10363: struct ExprList {
                   10364:   int nExpr;             /* Number of expressions on the list */
                   10365:   int nAlloc;            /* Number of entries allocated below */
                   10366:   int iECursor;          /* VDBE Cursor associated with this ExprList */
                   10367:   struct ExprList_item {
                   10368:     Expr *pExpr;           /* The list of expressions */
                   10369:     char *zName;           /* Token associated with this expression */
                   10370:     char *zSpan;           /* Original text of the expression */
                   10371:     u8 sortOrder;          /* 1 for DESC or 0 for ASC */
                   10372:     u8 done;               /* A flag to indicate when processing is finished */
                   10373:     u16 iCol;              /* For ORDER BY, column number in result set */
                   10374:     u16 iAlias;            /* Index into Parse.aAlias[] for zName */
                   10375:   } *a;                  /* One entry for each expression */
                   10376: };
                   10377: 
                   10378: /*
                   10379: ** An instance of this structure is used by the parser to record both
                   10380: ** the parse tree for an expression and the span of input text for an
                   10381: ** expression.
                   10382: */
                   10383: struct ExprSpan {
                   10384:   Expr *pExpr;          /* The expression parse tree */
                   10385:   const char *zStart;   /* First character of input text */
                   10386:   const char *zEnd;     /* One character past the end of input text */
                   10387: };
                   10388: 
                   10389: /*
                   10390: ** An instance of this structure can hold a simple list of identifiers,
                   10391: ** such as the list "a,b,c" in the following statements:
                   10392: **
                   10393: **      INSERT INTO t(a,b,c) VALUES ...;
                   10394: **      CREATE INDEX idx ON t(a,b,c);
                   10395: **      CREATE TRIGGER trig BEFORE UPDATE ON t(a,b,c) ...;
                   10396: **
                   10397: ** The IdList.a.idx field is used when the IdList represents the list of
                   10398: ** column names after a table name in an INSERT statement.  In the statement
                   10399: **
                   10400: **     INSERT INTO t(a,b,c) ...
                   10401: **
                   10402: ** If "a" is the k-th column of table "t", then IdList.a[0].idx==k.
                   10403: */
                   10404: struct IdList {
                   10405:   struct IdList_item {
                   10406:     char *zName;      /* Name of the identifier */
                   10407:     int idx;          /* Index in some Table.aCol[] of a column named zName */
                   10408:   } *a;
                   10409:   int nId;         /* Number of identifiers on the list */
                   10410:   int nAlloc;      /* Number of entries allocated for a[] below */
                   10411: };
                   10412: 
                   10413: /*
                   10414: ** The bitmask datatype defined below is used for various optimizations.
                   10415: **
                   10416: ** Changing this from a 64-bit to a 32-bit type limits the number of
                   10417: ** tables in a join to 32 instead of 64.  But it also reduces the size
                   10418: ** of the library by 738 bytes on ix86.
                   10419: */
                   10420: typedef u64 Bitmask;
                   10421: 
                   10422: /*
                   10423: ** The number of bits in a Bitmask.  "BMS" means "BitMask Size".
                   10424: */
                   10425: #define BMS  ((int)(sizeof(Bitmask)*8))
                   10426: 
                   10427: /*
                   10428: ** The following structure describes the FROM clause of a SELECT statement.
                   10429: ** Each table or subquery in the FROM clause is a separate element of
                   10430: ** the SrcList.a[] array.
                   10431: **
                   10432: ** With the addition of multiple database support, the following structure
                   10433: ** can also be used to describe a particular table such as the table that
                   10434: ** is modified by an INSERT, DELETE, or UPDATE statement.  In standard SQL,
                   10435: ** such a table must be a simple name: ID.  But in SQLite, the table can
                   10436: ** now be identified by a database name, a dot, then the table name: ID.ID.
                   10437: **
                   10438: ** The jointype starts out showing the join type between the current table
                   10439: ** and the next table on the list.  The parser builds the list this way.
                   10440: ** But sqlite3SrcListShiftJoinType() later shifts the jointypes so that each
                   10441: ** jointype expresses the join between the table and the previous table.
                   10442: **
                   10443: ** In the colUsed field, the high-order bit (bit 63) is set if the table
                   10444: ** contains more than 63 columns and the 64-th or later column is used.
                   10445: */
                   10446: struct SrcList {
                   10447:   i16 nSrc;        /* Number of tables or subqueries in the FROM clause */
                   10448:   i16 nAlloc;      /* Number of entries allocated in a[] below */
                   10449:   struct SrcList_item {
                   10450:     char *zDatabase;  /* Name of database holding this table */
                   10451:     char *zName;      /* Name of the table */
                   10452:     char *zAlias;     /* The "B" part of a "A AS B" phrase.  zName is the "A" */
                   10453:     Table *pTab;      /* An SQL table corresponding to zName */
                   10454:     Select *pSelect;  /* A SELECT statement used in place of a table name */
                   10455:     u8 isPopulated;   /* Temporary table associated with SELECT is populated */
                   10456:     u8 jointype;      /* Type of join between this able and the previous */
                   10457:     u8 notIndexed;    /* True if there is a NOT INDEXED clause */
                   10458: #ifndef SQLITE_OMIT_EXPLAIN
                   10459:     u8 iSelectId;     /* If pSelect!=0, the id of the sub-select in EQP */
                   10460: #endif
                   10461:     int iCursor;      /* The VDBE cursor number used to access this table */
                   10462:     Expr *pOn;        /* The ON clause of a join */
                   10463:     IdList *pUsing;   /* The USING clause of a join */
                   10464:     Bitmask colUsed;  /* Bit N (1<<N) set if column N of pTab is used */
                   10465:     char *zIndex;     /* Identifier from "INDEXED BY <zIndex>" clause */
                   10466:     Index *pIndex;    /* Index structure corresponding to zIndex, if any */
                   10467:   } a[1];             /* One entry for each identifier on the list */
                   10468: };
                   10469: 
                   10470: /*
                   10471: ** Permitted values of the SrcList.a.jointype field
                   10472: */
                   10473: #define JT_INNER     0x0001    /* Any kind of inner or cross join */
                   10474: #define JT_CROSS     0x0002    /* Explicit use of the CROSS keyword */
                   10475: #define JT_NATURAL   0x0004    /* True for a "natural" join */
                   10476: #define JT_LEFT      0x0008    /* Left outer join */
                   10477: #define JT_RIGHT     0x0010    /* Right outer join */
                   10478: #define JT_OUTER     0x0020    /* The "OUTER" keyword is present */
                   10479: #define JT_ERROR     0x0040    /* unknown or unsupported join type */
                   10480: 
                   10481: 
                   10482: /*
                   10483: ** A WherePlan object holds information that describes a lookup
                   10484: ** strategy.
                   10485: **
                   10486: ** This object is intended to be opaque outside of the where.c module.
                   10487: ** It is included here only so that that compiler will know how big it
                   10488: ** is.  None of the fields in this object should be used outside of
                   10489: ** the where.c module.
                   10490: **
                   10491: ** Within the union, pIdx is only used when wsFlags&WHERE_INDEXED is true.
                   10492: ** pTerm is only used when wsFlags&WHERE_MULTI_OR is true.  And pVtabIdx
                   10493: ** is only used when wsFlags&WHERE_VIRTUALTABLE is true.  It is never the
                   10494: ** case that more than one of these conditions is true.
                   10495: */
                   10496: struct WherePlan {
                   10497:   u32 wsFlags;                   /* WHERE_* flags that describe the strategy */
                   10498:   u32 nEq;                       /* Number of == constraints */
                   10499:   double nRow;                   /* Estimated number of rows (for EQP) */
                   10500:   union {
                   10501:     Index *pIdx;                   /* Index when WHERE_INDEXED is true */
                   10502:     struct WhereTerm *pTerm;       /* WHERE clause term for OR-search */
                   10503:     sqlite3_index_info *pVtabIdx;  /* Virtual table index to use */
                   10504:   } u;
                   10505: };
                   10506: 
                   10507: /*
                   10508: ** For each nested loop in a WHERE clause implementation, the WhereInfo
                   10509: ** structure contains a single instance of this structure.  This structure
                   10510: ** is intended to be private the the where.c module and should not be
                   10511: ** access or modified by other modules.
                   10512: **
                   10513: ** The pIdxInfo field is used to help pick the best index on a
                   10514: ** virtual table.  The pIdxInfo pointer contains indexing
                   10515: ** information for the i-th table in the FROM clause before reordering.
                   10516: ** All the pIdxInfo pointers are freed by whereInfoFree() in where.c.
                   10517: ** All other information in the i-th WhereLevel object for the i-th table
                   10518: ** after FROM clause ordering.
                   10519: */
                   10520: struct WhereLevel {
                   10521:   WherePlan plan;       /* query plan for this element of the FROM clause */
                   10522:   int iLeftJoin;        /* Memory cell used to implement LEFT OUTER JOIN */
                   10523:   int iTabCur;          /* The VDBE cursor used to access the table */
                   10524:   int iIdxCur;          /* The VDBE cursor used to access pIdx */
                   10525:   int addrBrk;          /* Jump here to break out of the loop */
                   10526:   int addrNxt;          /* Jump here to start the next IN combination */
                   10527:   int addrCont;         /* Jump here to continue with the next loop cycle */
                   10528:   int addrFirst;        /* First instruction of interior of the loop */
                   10529:   u8 iFrom;             /* Which entry in the FROM clause */
                   10530:   u8 op, p5;            /* Opcode and P5 of the opcode that ends the loop */
                   10531:   int p1, p2;           /* Operands of the opcode used to ends the loop */
                   10532:   union {               /* Information that depends on plan.wsFlags */
                   10533:     struct {
                   10534:       int nIn;              /* Number of entries in aInLoop[] */
                   10535:       struct InLoop {
                   10536:         int iCur;              /* The VDBE cursor used by this IN operator */
                   10537:         int addrInTop;         /* Top of the IN loop */
                   10538:       } *aInLoop;           /* Information about each nested IN operator */
                   10539:     } in;                 /* Used when plan.wsFlags&WHERE_IN_ABLE */
                   10540:   } u;
                   10541: 
                   10542:   /* The following field is really not part of the current level.  But
                   10543:   ** we need a place to cache virtual table index information for each
                   10544:   ** virtual table in the FROM clause and the WhereLevel structure is
                   10545:   ** a convenient place since there is one WhereLevel for each FROM clause
                   10546:   ** element.
                   10547:   */
                   10548:   sqlite3_index_info *pIdxInfo;  /* Index info for n-th source table */
                   10549: };
                   10550: 
                   10551: /*
                   10552: ** Flags appropriate for the wctrlFlags parameter of sqlite3WhereBegin()
                   10553: ** and the WhereInfo.wctrlFlags member.
                   10554: */
                   10555: #define WHERE_ORDERBY_NORMAL   0x0000 /* No-op */
                   10556: #define WHERE_ORDERBY_MIN      0x0001 /* ORDER BY processing for min() func */
                   10557: #define WHERE_ORDERBY_MAX      0x0002 /* ORDER BY processing for max() func */
                   10558: #define WHERE_ONEPASS_DESIRED  0x0004 /* Want to do one-pass UPDATE/DELETE */
                   10559: #define WHERE_DUPLICATES_OK    0x0008 /* Ok to return a row more than once */
                   10560: #define WHERE_OMIT_OPEN        0x0010 /* Table cursors are already open */
                   10561: #define WHERE_OMIT_CLOSE       0x0020 /* Omit close of table & index cursors */
                   10562: #define WHERE_FORCE_TABLE      0x0040 /* Do not use an index-only search */
                   10563: #define WHERE_ONETABLE_ONLY    0x0080 /* Only code the 1st table in pTabList */
                   10564: 
                   10565: /*
                   10566: ** The WHERE clause processing routine has two halves.  The
                   10567: ** first part does the start of the WHERE loop and the second
                   10568: ** half does the tail of the WHERE loop.  An instance of
                   10569: ** this structure is returned by the first half and passed
                   10570: ** into the second half to give some continuity.
                   10571: */
                   10572: struct WhereInfo {
                   10573:   Parse *pParse;       /* Parsing and code generating context */
                   10574:   u16 wctrlFlags;      /* Flags originally passed to sqlite3WhereBegin() */
                   10575:   u8 okOnePass;        /* Ok to use one-pass algorithm for UPDATE or DELETE */
                   10576:   u8 untestedTerms;    /* Not all WHERE terms resolved by outer loop */
                   10577:   SrcList *pTabList;             /* List of tables in the join */
                   10578:   int iTop;                      /* The very beginning of the WHERE loop */
                   10579:   int iContinue;                 /* Jump here to continue with next record */
                   10580:   int iBreak;                    /* Jump here to break out of the loop */
                   10581:   int nLevel;                    /* Number of nested loop */
                   10582:   struct WhereClause *pWC;       /* Decomposition of the WHERE clause */
                   10583:   double savedNQueryLoop;        /* pParse->nQueryLoop outside the WHERE loop */
                   10584:   double nRowOut;                /* Estimated number of output rows */
                   10585:   WhereLevel a[1];               /* Information about each nest loop in WHERE */
                   10586: };
                   10587: 
                   10588: /*
                   10589: ** A NameContext defines a context in which to resolve table and column
                   10590: ** names.  The context consists of a list of tables (the pSrcList) field and
                   10591: ** a list of named expression (pEList).  The named expression list may
                   10592: ** be NULL.  The pSrc corresponds to the FROM clause of a SELECT or
                   10593: ** to the table being operated on by INSERT, UPDATE, or DELETE.  The
                   10594: ** pEList corresponds to the result set of a SELECT and is NULL for
                   10595: ** other statements.
                   10596: **
                   10597: ** NameContexts can be nested.  When resolving names, the inner-most 
                   10598: ** context is searched first.  If no match is found, the next outer
                   10599: ** context is checked.  If there is still no match, the next context
                   10600: ** is checked.  This process continues until either a match is found
                   10601: ** or all contexts are check.  When a match is found, the nRef member of
                   10602: ** the context containing the match is incremented. 
                   10603: **
                   10604: ** Each subquery gets a new NameContext.  The pNext field points to the
                   10605: ** NameContext in the parent query.  Thus the process of scanning the
                   10606: ** NameContext list corresponds to searching through successively outer
                   10607: ** subqueries looking for a match.
                   10608: */
                   10609: struct NameContext {
                   10610:   Parse *pParse;       /* The parser */
                   10611:   SrcList *pSrcList;   /* One or more tables used to resolve names */
                   10612:   ExprList *pEList;    /* Optional list of named expressions */
                   10613:   int nRef;            /* Number of names resolved by this context */
                   10614:   int nErr;            /* Number of errors encountered while resolving names */
                   10615:   u8 allowAgg;         /* Aggregate functions allowed here */
                   10616:   u8 hasAgg;           /* True if aggregates are seen */
                   10617:   u8 isCheck;          /* True if resolving names in a CHECK constraint */
                   10618:   int nDepth;          /* Depth of subquery recursion. 1 for no recursion */
                   10619:   AggInfo *pAggInfo;   /* Information about aggregates at this level */
                   10620:   NameContext *pNext;  /* Next outer name context.  NULL for outermost */
                   10621: };
                   10622: 
                   10623: /*
                   10624: ** An instance of the following structure contains all information
                   10625: ** needed to generate code for a single SELECT statement.
                   10626: **
                   10627: ** nLimit is set to -1 if there is no LIMIT clause.  nOffset is set to 0.
                   10628: ** If there is a LIMIT clause, the parser sets nLimit to the value of the
                   10629: ** limit and nOffset to the value of the offset (or 0 if there is not
                   10630: ** offset).  But later on, nLimit and nOffset become the memory locations
                   10631: ** in the VDBE that record the limit and offset counters.
                   10632: **
                   10633: ** addrOpenEphm[] entries contain the address of OP_OpenEphemeral opcodes.
                   10634: ** These addresses must be stored so that we can go back and fill in
                   10635: ** the P4_KEYINFO and P2 parameters later.  Neither the KeyInfo nor
                   10636: ** the number of columns in P2 can be computed at the same time
                   10637: ** as the OP_OpenEphm instruction is coded because not
                   10638: ** enough information about the compound query is known at that point.
                   10639: ** The KeyInfo for addrOpenTran[0] and [1] contains collating sequences
                   10640: ** for the result set.  The KeyInfo for addrOpenTran[2] contains collating
                   10641: ** sequences for the ORDER BY clause.
                   10642: */
                   10643: struct Select {
                   10644:   ExprList *pEList;      /* The fields of the result */
                   10645:   u8 op;                 /* One of: TK_UNION TK_ALL TK_INTERSECT TK_EXCEPT */
                   10646:   char affinity;         /* MakeRecord with this affinity for SRT_Set */
                   10647:   u16 selFlags;          /* Various SF_* values */
                   10648:   SrcList *pSrc;         /* The FROM clause */
                   10649:   Expr *pWhere;          /* The WHERE clause */
                   10650:   ExprList *pGroupBy;    /* The GROUP BY clause */
                   10651:   Expr *pHaving;         /* The HAVING clause */
                   10652:   ExprList *pOrderBy;    /* The ORDER BY clause */
                   10653:   Select *pPrior;        /* Prior select in a compound select statement */
                   10654:   Select *pNext;         /* Next select to the left in a compound */
                   10655:   Select *pRightmost;    /* Right-most select in a compound select statement */
                   10656:   Expr *pLimit;          /* LIMIT expression. NULL means not used. */
                   10657:   Expr *pOffset;         /* OFFSET expression. NULL means not used. */
                   10658:   int iLimit, iOffset;   /* Memory registers holding LIMIT & OFFSET counters */
                   10659:   int addrOpenEphm[3];   /* OP_OpenEphem opcodes related to this select */
                   10660:   double nSelectRow;     /* Estimated number of result rows */
                   10661: };
                   10662: 
                   10663: /*
                   10664: ** Allowed values for Select.selFlags.  The "SF" prefix stands for
                   10665: ** "Select Flag".
                   10666: */
                   10667: #define SF_Distinct        0x0001  /* Output should be DISTINCT */
                   10668: #define SF_Resolved        0x0002  /* Identifiers have been resolved */
                   10669: #define SF_Aggregate       0x0004  /* Contains aggregate functions */
                   10670: #define SF_UsesEphemeral   0x0008  /* Uses the OpenEphemeral opcode */
                   10671: #define SF_Expanded        0x0010  /* sqlite3SelectExpand() called on this */
                   10672: #define SF_HasTypeInfo     0x0020  /* FROM subqueries have Table metadata */
                   10673: 
                   10674: 
                   10675: /*
                   10676: ** The results of a select can be distributed in several ways.  The
                   10677: ** "SRT" prefix means "SELECT Result Type".
                   10678: */
                   10679: #define SRT_Union        1  /* Store result as keys in an index */
                   10680: #define SRT_Except       2  /* Remove result from a UNION index */
                   10681: #define SRT_Exists       3  /* Store 1 if the result is not empty */
                   10682: #define SRT_Discard      4  /* Do not save the results anywhere */
                   10683: 
                   10684: /* The ORDER BY clause is ignored for all of the above */
                   10685: #define IgnorableOrderby(X) ((X->eDest)<=SRT_Discard)
                   10686: 
                   10687: #define SRT_Output       5  /* Output each row of result */
                   10688: #define SRT_Mem          6  /* Store result in a memory cell */
                   10689: #define SRT_Set          7  /* Store results as keys in an index */
                   10690: #define SRT_Table        8  /* Store result as data with an automatic rowid */
                   10691: #define SRT_EphemTab     9  /* Create transient tab and store like SRT_Table */
                   10692: #define SRT_Coroutine   10  /* Generate a single row of result */
                   10693: 
                   10694: /*
                   10695: ** A structure used to customize the behavior of sqlite3Select(). See
                   10696: ** comments above sqlite3Select() for details.
                   10697: */
                   10698: typedef struct SelectDest SelectDest;
                   10699: struct SelectDest {
                   10700:   u8 eDest;         /* How to dispose of the results */
                   10701:   u8 affinity;      /* Affinity used when eDest==SRT_Set */
                   10702:   int iParm;        /* A parameter used by the eDest disposal method */
                   10703:   int iMem;         /* Base register where results are written */
                   10704:   int nMem;         /* Number of registers allocated */
                   10705: };
                   10706: 
                   10707: /*
                   10708: ** During code generation of statements that do inserts into AUTOINCREMENT 
                   10709: ** tables, the following information is attached to the Table.u.autoInc.p
                   10710: ** pointer of each autoincrement table to record some side information that
                   10711: ** the code generator needs.  We have to keep per-table autoincrement
                   10712: ** information in case inserts are down within triggers.  Triggers do not
                   10713: ** normally coordinate their activities, but we do need to coordinate the
                   10714: ** loading and saving of autoincrement information.
                   10715: */
                   10716: struct AutoincInfo {
                   10717:   AutoincInfo *pNext;   /* Next info block in a list of them all */
                   10718:   Table *pTab;          /* Table this info block refers to */
                   10719:   int iDb;              /* Index in sqlite3.aDb[] of database holding pTab */
                   10720:   int regCtr;           /* Memory register holding the rowid counter */
                   10721: };
                   10722: 
                   10723: /*
                   10724: ** Size of the column cache
                   10725: */
                   10726: #ifndef SQLITE_N_COLCACHE
                   10727: # define SQLITE_N_COLCACHE 10
                   10728: #endif
                   10729: 
                   10730: /*
                   10731: ** At least one instance of the following structure is created for each 
                   10732: ** trigger that may be fired while parsing an INSERT, UPDATE or DELETE
                   10733: ** statement. All such objects are stored in the linked list headed at
                   10734: ** Parse.pTriggerPrg and deleted once statement compilation has been
                   10735: ** completed.
                   10736: **
                   10737: ** A Vdbe sub-program that implements the body and WHEN clause of trigger
                   10738: ** TriggerPrg.pTrigger, assuming a default ON CONFLICT clause of
                   10739: ** TriggerPrg.orconf, is stored in the TriggerPrg.pProgram variable.
                   10740: ** The Parse.pTriggerPrg list never contains two entries with the same
                   10741: ** values for both pTrigger and orconf.
                   10742: **
                   10743: ** The TriggerPrg.aColmask[0] variable is set to a mask of old.* columns
                   10744: ** accessed (or set to 0 for triggers fired as a result of INSERT 
                   10745: ** statements). Similarly, the TriggerPrg.aColmask[1] variable is set to
                   10746: ** a mask of new.* columns used by the program.
                   10747: */
                   10748: struct TriggerPrg {
                   10749:   Trigger *pTrigger;      /* Trigger this program was coded from */
                   10750:   int orconf;             /* Default ON CONFLICT policy */
                   10751:   SubProgram *pProgram;   /* Program implementing pTrigger/orconf */
                   10752:   u32 aColmask[2];        /* Masks of old.*, new.* columns accessed */
                   10753:   TriggerPrg *pNext;      /* Next entry in Parse.pTriggerPrg list */
                   10754: };
                   10755: 
                   10756: /*
                   10757: ** The yDbMask datatype for the bitmask of all attached databases.
                   10758: */
                   10759: #if SQLITE_MAX_ATTACHED>30
                   10760:   typedef sqlite3_uint64 yDbMask;
                   10761: #else
                   10762:   typedef unsigned int yDbMask;
                   10763: #endif
                   10764: 
                   10765: /*
                   10766: ** An SQL parser context.  A copy of this structure is passed through
                   10767: ** the parser and down into all the parser action routine in order to
                   10768: ** carry around information that is global to the entire parse.
                   10769: **
                   10770: ** The structure is divided into two parts.  When the parser and code
                   10771: ** generate call themselves recursively, the first part of the structure
                   10772: ** is constant but the second part is reset at the beginning and end of
                   10773: ** each recursion.
                   10774: **
                   10775: ** The nTableLock and aTableLock variables are only used if the shared-cache 
                   10776: ** feature is enabled (if sqlite3Tsd()->useSharedData is true). They are
                   10777: ** used to store the set of table-locks required by the statement being
                   10778: ** compiled. Function sqlite3TableLock() is used to add entries to the
                   10779: ** list.
                   10780: */
                   10781: struct Parse {
                   10782:   sqlite3 *db;         /* The main database structure */
                   10783:   int rc;              /* Return code from execution */
                   10784:   char *zErrMsg;       /* An error message */
                   10785:   Vdbe *pVdbe;         /* An engine for executing database bytecode */
                   10786:   u8 colNamesSet;      /* TRUE after OP_ColumnName has been issued to pVdbe */
                   10787:   u8 nameClash;        /* A permanent table name clashes with temp table name */
                   10788:   u8 checkSchema;      /* Causes schema cookie check after an error */
                   10789:   u8 nested;           /* Number of nested calls to the parser/code generator */
                   10790:   u8 parseError;       /* True after a parsing error.  Ticket #1794 */
                   10791:   u8 nTempReg;         /* Number of temporary registers in aTempReg[] */
                   10792:   u8 nTempInUse;       /* Number of aTempReg[] currently checked out */
                   10793:   int aTempReg[8];     /* Holding area for temporary registers */
                   10794:   int nRangeReg;       /* Size of the temporary register block */
                   10795:   int iRangeReg;       /* First register in temporary register block */
                   10796:   int nErr;            /* Number of errors seen */
                   10797:   int nTab;            /* Number of previously allocated VDBE cursors */
                   10798:   int nMem;            /* Number of memory cells used so far */
                   10799:   int nSet;            /* Number of sets used so far */
                   10800:   int ckBase;          /* Base register of data during check constraints */
                   10801:   int iCacheLevel;     /* ColCache valid when aColCache[].iLevel<=iCacheLevel */
                   10802:   int iCacheCnt;       /* Counter used to generate aColCache[].lru values */
                   10803:   u8 nColCache;        /* Number of entries in the column cache */
                   10804:   u8 iColCache;        /* Next entry of the cache to replace */
                   10805:   struct yColCache {
                   10806:     int iTable;           /* Table cursor number */
                   10807:     int iColumn;          /* Table column number */
                   10808:     u8 tempReg;           /* iReg is a temp register that needs to be freed */
                   10809:     int iLevel;           /* Nesting level */
                   10810:     int iReg;             /* Reg with value of this column. 0 means none. */
                   10811:     int lru;              /* Least recently used entry has the smallest value */
                   10812:   } aColCache[SQLITE_N_COLCACHE];  /* One for each column cache entry */
                   10813:   yDbMask writeMask;   /* Start a write transaction on these databases */
                   10814:   yDbMask cookieMask;  /* Bitmask of schema verified databases */
                   10815:   u8 isMultiWrite;     /* True if statement may affect/insert multiple rows */
                   10816:   u8 mayAbort;         /* True if statement may throw an ABORT exception */
                   10817:   int cookieGoto;      /* Address of OP_Goto to cookie verifier subroutine */
                   10818:   int cookieValue[SQLITE_MAX_ATTACHED+2];  /* Values of cookies to verify */
                   10819: #ifndef SQLITE_OMIT_SHARED_CACHE
                   10820:   int nTableLock;        /* Number of locks in aTableLock */
                   10821:   TableLock *aTableLock; /* Required table locks for shared-cache mode */
                   10822: #endif
                   10823:   int regRowid;        /* Register holding rowid of CREATE TABLE entry */
                   10824:   int regRoot;         /* Register holding root page number for new objects */
                   10825:   AutoincInfo *pAinc;  /* Information about AUTOINCREMENT counters */
                   10826:   int nMaxArg;         /* Max args passed to user function by sub-program */
                   10827: 
                   10828:   /* Information used while coding trigger programs. */
                   10829:   Parse *pToplevel;    /* Parse structure for main program (or NULL) */
                   10830:   Table *pTriggerTab;  /* Table triggers are being coded for */
                   10831:   u32 oldmask;         /* Mask of old.* columns referenced */
                   10832:   u32 newmask;         /* Mask of new.* columns referenced */
                   10833:   u8 eTriggerOp;       /* TK_UPDATE, TK_INSERT or TK_DELETE */
                   10834:   u8 eOrconf;          /* Default ON CONFLICT policy for trigger steps */
                   10835:   u8 disableTriggers;  /* True to disable triggers */
                   10836:   double nQueryLoop;   /* Estimated number of iterations of a query */
                   10837: 
                   10838:   /* Above is constant between recursions.  Below is reset before and after
                   10839:   ** each recursion */
                   10840: 
                   10841:   int nVar;            /* Number of '?' variables seen in the SQL so far */
                   10842:   int nzVar;           /* Number of available slots in azVar[] */
                   10843:   char **azVar;        /* Pointers to names of parameters */
                   10844:   Vdbe *pReprepare;    /* VM being reprepared (sqlite3Reprepare()) */
                   10845:   int nAlias;          /* Number of aliased result set columns */
                   10846:   int nAliasAlloc;     /* Number of allocated slots for aAlias[] */
                   10847:   int *aAlias;         /* Register used to hold aliased result */
                   10848:   u8 explain;          /* True if the EXPLAIN flag is found on the query */
                   10849:   Token sNameToken;    /* Token with unqualified schema object name */
                   10850:   Token sLastToken;    /* The last token parsed */
                   10851:   const char *zTail;   /* All SQL text past the last semicolon parsed */
                   10852:   Table *pNewTable;    /* A table being constructed by CREATE TABLE */
                   10853:   Trigger *pNewTrigger;     /* Trigger under construct by a CREATE TRIGGER */
                   10854:   const char *zAuthContext; /* The 6th parameter to db->xAuth callbacks */
                   10855: #ifndef SQLITE_OMIT_VIRTUALTABLE
                   10856:   Token sArg;                /* Complete text of a module argument */
                   10857:   u8 declareVtab;            /* True if inside sqlite3_declare_vtab() */
                   10858:   int nVtabLock;             /* Number of virtual tables to lock */
                   10859:   Table **apVtabLock;        /* Pointer to virtual tables needing locking */
                   10860: #endif
                   10861:   int nHeight;            /* Expression tree height of current sub-select */
                   10862:   Table *pZombieTab;      /* List of Table objects to delete after code gen */
                   10863:   TriggerPrg *pTriggerPrg;    /* Linked list of coded triggers */
                   10864: 
                   10865: #ifndef SQLITE_OMIT_EXPLAIN
                   10866:   int iSelectId;
                   10867:   int iNextSelectId;
                   10868: #endif
                   10869: };
                   10870: 
                   10871: #ifdef SQLITE_OMIT_VIRTUALTABLE
                   10872:   #define IN_DECLARE_VTAB 0
                   10873: #else
                   10874:   #define IN_DECLARE_VTAB (pParse->declareVtab)
                   10875: #endif
                   10876: 
                   10877: /*
                   10878: ** An instance of the following structure can be declared on a stack and used
                   10879: ** to save the Parse.zAuthContext value so that it can be restored later.
                   10880: */
                   10881: struct AuthContext {
                   10882:   const char *zAuthContext;   /* Put saved Parse.zAuthContext here */
                   10883:   Parse *pParse;              /* The Parse structure */
                   10884: };
                   10885: 
                   10886: /*
                   10887: ** Bitfield flags for P5 value in OP_Insert and OP_Delete
                   10888: */
                   10889: #define OPFLAG_NCHANGE       0x01    /* Set to update db->nChange */
                   10890: #define OPFLAG_LASTROWID     0x02    /* Set to update db->lastRowid */
                   10891: #define OPFLAG_ISUPDATE      0x04    /* This OP_Insert is an sql UPDATE */
                   10892: #define OPFLAG_APPEND        0x08    /* This is likely to be an append */
                   10893: #define OPFLAG_USESEEKRESULT 0x10    /* Try to avoid a seek in BtreeInsert() */
                   10894: #define OPFLAG_CLEARCACHE    0x20    /* Clear pseudo-table cache in OP_Column */
                   10895: 
                   10896: /*
                   10897:  * Each trigger present in the database schema is stored as an instance of
                   10898:  * struct Trigger. 
                   10899:  *
                   10900:  * Pointers to instances of struct Trigger are stored in two ways.
                   10901:  * 1. In the "trigHash" hash table (part of the sqlite3* that represents the 
                   10902:  *    database). This allows Trigger structures to be retrieved by name.
                   10903:  * 2. All triggers associated with a single table form a linked list, using the
                   10904:  *    pNext member of struct Trigger. A pointer to the first element of the
                   10905:  *    linked list is stored as the "pTrigger" member of the associated
                   10906:  *    struct Table.
                   10907:  *
                   10908:  * The "step_list" member points to the first element of a linked list
                   10909:  * containing the SQL statements specified as the trigger program.
                   10910:  */
                   10911: struct Trigger {
                   10912:   char *zName;            /* The name of the trigger                        */
                   10913:   char *table;            /* The table or view to which the trigger applies */
                   10914:   u8 op;                  /* One of TK_DELETE, TK_UPDATE, TK_INSERT         */
                   10915:   u8 tr_tm;               /* One of TRIGGER_BEFORE, TRIGGER_AFTER */
                   10916:   Expr *pWhen;            /* The WHEN clause of the expression (may be NULL) */
                   10917:   IdList *pColumns;       /* If this is an UPDATE OF <column-list> trigger,
                   10918:                              the <column-list> is stored here */
                   10919:   Schema *pSchema;        /* Schema containing the trigger */
                   10920:   Schema *pTabSchema;     /* Schema containing the table */
                   10921:   TriggerStep *step_list; /* Link list of trigger program steps             */
                   10922:   Trigger *pNext;         /* Next trigger associated with the table */
                   10923: };
                   10924: 
                   10925: /*
                   10926: ** A trigger is either a BEFORE or an AFTER trigger.  The following constants
                   10927: ** determine which. 
                   10928: **
                   10929: ** If there are multiple triggers, you might of some BEFORE and some AFTER.
                   10930: ** In that cases, the constants below can be ORed together.
                   10931: */
                   10932: #define TRIGGER_BEFORE  1
                   10933: #define TRIGGER_AFTER   2
                   10934: 
                   10935: /*
                   10936:  * An instance of struct TriggerStep is used to store a single SQL statement
                   10937:  * that is a part of a trigger-program. 
                   10938:  *
                   10939:  * Instances of struct TriggerStep are stored in a singly linked list (linked
                   10940:  * using the "pNext" member) referenced by the "step_list" member of the 
                   10941:  * associated struct Trigger instance. The first element of the linked list is
                   10942:  * the first step of the trigger-program.
                   10943:  * 
                   10944:  * The "op" member indicates whether this is a "DELETE", "INSERT", "UPDATE" or
                   10945:  * "SELECT" statement. The meanings of the other members is determined by the 
                   10946:  * value of "op" as follows:
                   10947:  *
                   10948:  * (op == TK_INSERT)
                   10949:  * orconf    -> stores the ON CONFLICT algorithm
                   10950:  * pSelect   -> If this is an INSERT INTO ... SELECT ... statement, then
                   10951:  *              this stores a pointer to the SELECT statement. Otherwise NULL.
                   10952:  * target    -> A token holding the quoted name of the table to insert into.
                   10953:  * pExprList -> If this is an INSERT INTO ... VALUES ... statement, then
                   10954:  *              this stores values to be inserted. Otherwise NULL.
                   10955:  * pIdList   -> If this is an INSERT INTO ... (<column-names>) VALUES ... 
                   10956:  *              statement, then this stores the column-names to be
                   10957:  *              inserted into.
                   10958:  *
                   10959:  * (op == TK_DELETE)
                   10960:  * target    -> A token holding the quoted name of the table to delete from.
                   10961:  * pWhere    -> The WHERE clause of the DELETE statement if one is specified.
                   10962:  *              Otherwise NULL.
                   10963:  * 
                   10964:  * (op == TK_UPDATE)
                   10965:  * target    -> A token holding the quoted name of the table to update rows of.
                   10966:  * pWhere    -> The WHERE clause of the UPDATE statement if one is specified.
                   10967:  *              Otherwise NULL.
                   10968:  * pExprList -> A list of the columns to update and the expressions to update
                   10969:  *              them to. See sqlite3Update() documentation of "pChanges"
                   10970:  *              argument.
                   10971:  * 
                   10972:  */
                   10973: struct TriggerStep {
                   10974:   u8 op;               /* One of TK_DELETE, TK_UPDATE, TK_INSERT, TK_SELECT */
                   10975:   u8 orconf;           /* OE_Rollback etc. */
                   10976:   Trigger *pTrig;      /* The trigger that this step is a part of */
                   10977:   Select *pSelect;     /* SELECT statment or RHS of INSERT INTO .. SELECT ... */
                   10978:   Token target;        /* Target table for DELETE, UPDATE, INSERT */
                   10979:   Expr *pWhere;        /* The WHERE clause for DELETE or UPDATE steps */
                   10980:   ExprList *pExprList; /* SET clause for UPDATE.  VALUES clause for INSERT */
                   10981:   IdList *pIdList;     /* Column names for INSERT */
                   10982:   TriggerStep *pNext;  /* Next in the link-list */
                   10983:   TriggerStep *pLast;  /* Last element in link-list. Valid for 1st elem only */
                   10984: };
                   10985: 
                   10986: /*
                   10987: ** The following structure contains information used by the sqliteFix...
                   10988: ** routines as they walk the parse tree to make database references
                   10989: ** explicit.  
                   10990: */
                   10991: typedef struct DbFixer DbFixer;
                   10992: struct DbFixer {
                   10993:   Parse *pParse;      /* The parsing context.  Error messages written here */
                   10994:   const char *zDb;    /* Make sure all objects are contained in this database */
                   10995:   const char *zType;  /* Type of the container - used for error messages */
                   10996:   const Token *pName; /* Name of the container - used for error messages */
                   10997: };
                   10998: 
                   10999: /*
                   11000: ** An objected used to accumulate the text of a string where we
                   11001: ** do not necessarily know how big the string will be in the end.
                   11002: */
                   11003: struct StrAccum {
                   11004:   sqlite3 *db;         /* Optional database for lookaside.  Can be NULL */
                   11005:   char *zBase;         /* A base allocation.  Not from malloc. */
                   11006:   char *zText;         /* The string collected so far */
                   11007:   int  nChar;          /* Length of the string so far */
                   11008:   int  nAlloc;         /* Amount of space allocated in zText */
                   11009:   int  mxAlloc;        /* Maximum allowed string length */
                   11010:   u8   mallocFailed;   /* Becomes true if any memory allocation fails */
                   11011:   u8   useMalloc;      /* 0: none,  1: sqlite3DbMalloc,  2: sqlite3_malloc */
                   11012:   u8   tooBig;         /* Becomes true if string size exceeds limits */
                   11013: };
                   11014: 
                   11015: /*
                   11016: ** A pointer to this structure is used to communicate information
                   11017: ** from sqlite3Init and OP_ParseSchema into the sqlite3InitCallback.
                   11018: */
                   11019: typedef struct {
                   11020:   sqlite3 *db;        /* The database being initialized */
                   11021:   int iDb;            /* 0 for main database.  1 for TEMP, 2.. for ATTACHed */
                   11022:   char **pzErrMsg;    /* Error message stored here */
                   11023:   int rc;             /* Result code stored here */
                   11024: } InitData;
                   11025: 
                   11026: /*
                   11027: ** Structure containing global configuration data for the SQLite library.
                   11028: **
                   11029: ** This structure also contains some state information.
                   11030: */
                   11031: struct Sqlite3Config {
                   11032:   int bMemstat;                     /* True to enable memory status */
                   11033:   int bCoreMutex;                   /* True to enable core mutexing */
                   11034:   int bFullMutex;                   /* True to enable full mutexing */
                   11035:   int bOpenUri;                     /* True to interpret filenames as URIs */
                   11036:   int mxStrlen;                     /* Maximum string length */
                   11037:   int szLookaside;                  /* Default lookaside buffer size */
                   11038:   int nLookaside;                   /* Default lookaside buffer count */
                   11039:   sqlite3_mem_methods m;            /* Low-level memory allocation interface */
                   11040:   sqlite3_mutex_methods mutex;      /* Low-level mutex interface */
                   11041:   sqlite3_pcache_methods pcache;    /* Low-level page-cache interface */
                   11042:   void *pHeap;                      /* Heap storage space */
                   11043:   int nHeap;                        /* Size of pHeap[] */
                   11044:   int mnReq, mxReq;                 /* Min and max heap requests sizes */
                   11045:   void *pScratch;                   /* Scratch memory */
                   11046:   int szScratch;                    /* Size of each scratch buffer */
                   11047:   int nScratch;                     /* Number of scratch buffers */
                   11048:   void *pPage;                      /* Page cache memory */
                   11049:   int szPage;                       /* Size of each page in pPage[] */
                   11050:   int nPage;                        /* Number of pages in pPage[] */
                   11051:   int mxParserStack;                /* maximum depth of the parser stack */
                   11052:   int sharedCacheEnabled;           /* true if shared-cache mode enabled */
                   11053:   /* The above might be initialized to non-zero.  The following need to always
                   11054:   ** initially be zero, however. */
                   11055:   int isInit;                       /* True after initialization has finished */
                   11056:   int inProgress;                   /* True while initialization in progress */
                   11057:   int isMutexInit;                  /* True after mutexes are initialized */
                   11058:   int isMallocInit;                 /* True after malloc is initialized */
                   11059:   int isPCacheInit;                 /* True after malloc is initialized */
                   11060:   sqlite3_mutex *pInitMutex;        /* Mutex used by sqlite3_initialize() */
                   11061:   int nRefInitMutex;                /* Number of users of pInitMutex */
                   11062:   void (*xLog)(void*,int,const char*); /* Function for logging */
                   11063:   void *pLogArg;                       /* First argument to xLog() */
                   11064:   int bLocaltimeFault;              /* True to fail localtime() calls */
                   11065: };
                   11066: 
                   11067: /*
                   11068: ** Context pointer passed down through the tree-walk.
                   11069: */
                   11070: struct Walker {
                   11071:   int (*xExprCallback)(Walker*, Expr*);     /* Callback for expressions */
                   11072:   int (*xSelectCallback)(Walker*,Select*);  /* Callback for SELECTs */
                   11073:   Parse *pParse;                            /* Parser context.  */
                   11074:   union {                                   /* Extra data for callback */
                   11075:     NameContext *pNC;                          /* Naming context */
                   11076:     int i;                                     /* Integer value */
                   11077:   } u;
                   11078: };
                   11079: 
                   11080: /* Forward declarations */
                   11081: SQLITE_PRIVATE int sqlite3WalkExpr(Walker*, Expr*);
                   11082: SQLITE_PRIVATE int sqlite3WalkExprList(Walker*, ExprList*);
                   11083: SQLITE_PRIVATE int sqlite3WalkSelect(Walker*, Select*);
                   11084: SQLITE_PRIVATE int sqlite3WalkSelectExpr(Walker*, Select*);
                   11085: SQLITE_PRIVATE int sqlite3WalkSelectFrom(Walker*, Select*);
                   11086: 
                   11087: /*
                   11088: ** Return code from the parse-tree walking primitives and their
                   11089: ** callbacks.
                   11090: */
                   11091: #define WRC_Continue    0   /* Continue down into children */
                   11092: #define WRC_Prune       1   /* Omit children but continue walking siblings */
                   11093: #define WRC_Abort       2   /* Abandon the tree walk */
                   11094: 
                   11095: /*
                   11096: ** Assuming zIn points to the first byte of a UTF-8 character,
                   11097: ** advance zIn to point to the first byte of the next UTF-8 character.
                   11098: */
                   11099: #define SQLITE_SKIP_UTF8(zIn) {                        \
                   11100:   if( (*(zIn++))>=0xc0 ){                              \
                   11101:     while( (*zIn & 0xc0)==0x80 ){ zIn++; }             \
                   11102:   }                                                    \
                   11103: }
                   11104: 
                   11105: /*
                   11106: ** The SQLITE_*_BKPT macros are substitutes for the error codes with
                   11107: ** the same name but without the _BKPT suffix.  These macros invoke
                   11108: ** routines that report the line-number on which the error originated
                   11109: ** using sqlite3_log().  The routines also provide a convenient place
                   11110: ** to set a debugger breakpoint.
                   11111: */
                   11112: SQLITE_PRIVATE int sqlite3CorruptError(int);
                   11113: SQLITE_PRIVATE int sqlite3MisuseError(int);
                   11114: SQLITE_PRIVATE int sqlite3CantopenError(int);
                   11115: #define SQLITE_CORRUPT_BKPT sqlite3CorruptError(__LINE__)
                   11116: #define SQLITE_MISUSE_BKPT sqlite3MisuseError(__LINE__)
                   11117: #define SQLITE_CANTOPEN_BKPT sqlite3CantopenError(__LINE__)
                   11118: 
                   11119: 
                   11120: /*
                   11121: ** FTS4 is really an extension for FTS3.  It is enabled using the
                   11122: ** SQLITE_ENABLE_FTS3 macro.  But to avoid confusion we also all
                   11123: ** the SQLITE_ENABLE_FTS4 macro to serve as an alisse for SQLITE_ENABLE_FTS3.
                   11124: */
                   11125: #if defined(SQLITE_ENABLE_FTS4) && !defined(SQLITE_ENABLE_FTS3)
                   11126: # define SQLITE_ENABLE_FTS3
                   11127: #endif
                   11128: 
                   11129: /*
                   11130: ** The ctype.h header is needed for non-ASCII systems.  It is also
                   11131: ** needed by FTS3 when FTS3 is included in the amalgamation.
                   11132: */
                   11133: #if !defined(SQLITE_ASCII) || \
                   11134:     (defined(SQLITE_ENABLE_FTS3) && defined(SQLITE_AMALGAMATION))
                   11135: # include <ctype.h>
                   11136: #endif
                   11137: 
                   11138: /*
                   11139: ** The following macros mimic the standard library functions toupper(),
                   11140: ** isspace(), isalnum(), isdigit() and isxdigit(), respectively. The
                   11141: ** sqlite versions only work for ASCII characters, regardless of locale.
                   11142: */
                   11143: #ifdef SQLITE_ASCII
                   11144: # define sqlite3Toupper(x)  ((x)&~(sqlite3CtypeMap[(unsigned char)(x)]&0x20))
                   11145: # define sqlite3Isspace(x)   (sqlite3CtypeMap[(unsigned char)(x)]&0x01)
                   11146: # define sqlite3Isalnum(x)   (sqlite3CtypeMap[(unsigned char)(x)]&0x06)
                   11147: # define sqlite3Isalpha(x)   (sqlite3CtypeMap[(unsigned char)(x)]&0x02)
                   11148: # define sqlite3Isdigit(x)   (sqlite3CtypeMap[(unsigned char)(x)]&0x04)
                   11149: # define sqlite3Isxdigit(x)  (sqlite3CtypeMap[(unsigned char)(x)]&0x08)
                   11150: # define sqlite3Tolower(x)   (sqlite3UpperToLower[(unsigned char)(x)])
                   11151: #else
                   11152: # define sqlite3Toupper(x)   toupper((unsigned char)(x))
                   11153: # define sqlite3Isspace(x)   isspace((unsigned char)(x))
                   11154: # define sqlite3Isalnum(x)   isalnum((unsigned char)(x))
                   11155: # define sqlite3Isalpha(x)   isalpha((unsigned char)(x))
                   11156: # define sqlite3Isdigit(x)   isdigit((unsigned char)(x))
                   11157: # define sqlite3Isxdigit(x)  isxdigit((unsigned char)(x))
                   11158: # define sqlite3Tolower(x)   tolower((unsigned char)(x))
                   11159: #endif
                   11160: 
                   11161: /*
                   11162: ** Internal function prototypes
                   11163: */
                   11164: SQLITE_PRIVATE int sqlite3StrICmp(const char *, const char *);
                   11165: SQLITE_PRIVATE int sqlite3Strlen30(const char*);
                   11166: #define sqlite3StrNICmp sqlite3_strnicmp
                   11167: 
                   11168: SQLITE_PRIVATE int sqlite3MallocInit(void);
                   11169: SQLITE_PRIVATE void sqlite3MallocEnd(void);
                   11170: SQLITE_PRIVATE void *sqlite3Malloc(int);
                   11171: SQLITE_PRIVATE void *sqlite3MallocZero(int);
                   11172: SQLITE_PRIVATE void *sqlite3DbMallocZero(sqlite3*, int);
                   11173: SQLITE_PRIVATE void *sqlite3DbMallocRaw(sqlite3*, int);
                   11174: SQLITE_PRIVATE char *sqlite3DbStrDup(sqlite3*,const char*);
                   11175: SQLITE_PRIVATE char *sqlite3DbStrNDup(sqlite3*,const char*, int);
                   11176: SQLITE_PRIVATE void *sqlite3Realloc(void*, int);
                   11177: SQLITE_PRIVATE void *sqlite3DbReallocOrFree(sqlite3 *, void *, int);
                   11178: SQLITE_PRIVATE void *sqlite3DbRealloc(sqlite3 *, void *, int);
                   11179: SQLITE_PRIVATE void sqlite3DbFree(sqlite3*, void*);
                   11180: SQLITE_PRIVATE int sqlite3MallocSize(void*);
                   11181: SQLITE_PRIVATE int sqlite3DbMallocSize(sqlite3*, void*);
                   11182: SQLITE_PRIVATE void *sqlite3ScratchMalloc(int);
                   11183: SQLITE_PRIVATE void sqlite3ScratchFree(void*);
                   11184: SQLITE_PRIVATE void *sqlite3PageMalloc(int);
                   11185: SQLITE_PRIVATE void sqlite3PageFree(void*);
                   11186: SQLITE_PRIVATE void sqlite3MemSetDefault(void);
                   11187: SQLITE_PRIVATE void sqlite3BenignMallocHooks(void (*)(void), void (*)(void));
                   11188: SQLITE_PRIVATE int sqlite3HeapNearlyFull(void);
                   11189: 
                   11190: /*
                   11191: ** On systems with ample stack space and that support alloca(), make
                   11192: ** use of alloca() to obtain space for large automatic objects.  By default,
                   11193: ** obtain space from malloc().
                   11194: **
                   11195: ** The alloca() routine never returns NULL.  This will cause code paths
                   11196: ** that deal with sqlite3StackAlloc() failures to be unreachable.
                   11197: */
                   11198: #ifdef SQLITE_USE_ALLOCA
                   11199: # define sqlite3StackAllocRaw(D,N)   alloca(N)
                   11200: # define sqlite3StackAllocZero(D,N)  memset(alloca(N), 0, N)
                   11201: # define sqlite3StackFree(D,P)       
                   11202: #else
                   11203: # define sqlite3StackAllocRaw(D,N)   sqlite3DbMallocRaw(D,N)
                   11204: # define sqlite3StackAllocZero(D,N)  sqlite3DbMallocZero(D,N)
                   11205: # define sqlite3StackFree(D,P)       sqlite3DbFree(D,P)
                   11206: #endif
                   11207: 
                   11208: #ifdef SQLITE_ENABLE_MEMSYS3
                   11209: SQLITE_PRIVATE const sqlite3_mem_methods *sqlite3MemGetMemsys3(void);
                   11210: #endif
                   11211: #ifdef SQLITE_ENABLE_MEMSYS5
                   11212: SQLITE_PRIVATE const sqlite3_mem_methods *sqlite3MemGetMemsys5(void);
                   11213: #endif
                   11214: 
                   11215: 
                   11216: #ifndef SQLITE_MUTEX_OMIT
                   11217: SQLITE_PRIVATE   sqlite3_mutex_methods const *sqlite3DefaultMutex(void);
                   11218: SQLITE_PRIVATE   sqlite3_mutex_methods const *sqlite3NoopMutex(void);
                   11219: SQLITE_PRIVATE   sqlite3_mutex *sqlite3MutexAlloc(int);
                   11220: SQLITE_PRIVATE   int sqlite3MutexInit(void);
                   11221: SQLITE_PRIVATE   int sqlite3MutexEnd(void);
                   11222: #endif
                   11223: 
                   11224: SQLITE_PRIVATE int sqlite3StatusValue(int);
                   11225: SQLITE_PRIVATE void sqlite3StatusAdd(int, int);
                   11226: SQLITE_PRIVATE void sqlite3StatusSet(int, int);
                   11227: 
                   11228: #ifndef SQLITE_OMIT_FLOATING_POINT
                   11229: SQLITE_PRIVATE   int sqlite3IsNaN(double);
                   11230: #else
                   11231: # define sqlite3IsNaN(X)  0
                   11232: #endif
                   11233: 
                   11234: SQLITE_PRIVATE void sqlite3VXPrintf(StrAccum*, int, const char*, va_list);
                   11235: #ifndef SQLITE_OMIT_TRACE
                   11236: SQLITE_PRIVATE void sqlite3XPrintf(StrAccum*, const char*, ...);
                   11237: #endif
                   11238: SQLITE_PRIVATE char *sqlite3MPrintf(sqlite3*,const char*, ...);
                   11239: SQLITE_PRIVATE char *sqlite3VMPrintf(sqlite3*,const char*, va_list);
                   11240: SQLITE_PRIVATE char *sqlite3MAppendf(sqlite3*,char*,const char*,...);
                   11241: #if defined(SQLITE_TEST) || defined(SQLITE_DEBUG)
                   11242: SQLITE_PRIVATE   void sqlite3DebugPrintf(const char*, ...);
                   11243: #endif
                   11244: #if defined(SQLITE_TEST)
                   11245: SQLITE_PRIVATE   void *sqlite3TestTextToPtr(const char*);
                   11246: #endif
                   11247: SQLITE_PRIVATE void sqlite3SetString(char **, sqlite3*, const char*, ...);
                   11248: SQLITE_PRIVATE void sqlite3ErrorMsg(Parse*, const char*, ...);
                   11249: SQLITE_PRIVATE int sqlite3Dequote(char*);
                   11250: SQLITE_PRIVATE int sqlite3KeywordCode(const unsigned char*, int);
                   11251: SQLITE_PRIVATE int sqlite3RunParser(Parse*, const char*, char **);
                   11252: SQLITE_PRIVATE void sqlite3FinishCoding(Parse*);
                   11253: SQLITE_PRIVATE int sqlite3GetTempReg(Parse*);
                   11254: SQLITE_PRIVATE void sqlite3ReleaseTempReg(Parse*,int);
                   11255: SQLITE_PRIVATE int sqlite3GetTempRange(Parse*,int);
                   11256: SQLITE_PRIVATE void sqlite3ReleaseTempRange(Parse*,int,int);
                   11257: SQLITE_PRIVATE Expr *sqlite3ExprAlloc(sqlite3*,int,const Token*,int);
                   11258: SQLITE_PRIVATE Expr *sqlite3Expr(sqlite3*,int,const char*);
                   11259: SQLITE_PRIVATE void sqlite3ExprAttachSubtrees(sqlite3*,Expr*,Expr*,Expr*);
                   11260: SQLITE_PRIVATE Expr *sqlite3PExpr(Parse*, int, Expr*, Expr*, const Token*);
                   11261: SQLITE_PRIVATE Expr *sqlite3ExprAnd(sqlite3*,Expr*, Expr*);
                   11262: SQLITE_PRIVATE Expr *sqlite3ExprFunction(Parse*,ExprList*, Token*);
                   11263: SQLITE_PRIVATE void sqlite3ExprAssignVarNumber(Parse*, Expr*);
                   11264: SQLITE_PRIVATE void sqlite3ExprDelete(sqlite3*, Expr*);
                   11265: SQLITE_PRIVATE ExprList *sqlite3ExprListAppend(Parse*,ExprList*,Expr*);
                   11266: SQLITE_PRIVATE void sqlite3ExprListSetName(Parse*,ExprList*,Token*,int);
                   11267: SQLITE_PRIVATE void sqlite3ExprListSetSpan(Parse*,ExprList*,ExprSpan*);
                   11268: SQLITE_PRIVATE void sqlite3ExprListDelete(sqlite3*, ExprList*);
                   11269: SQLITE_PRIVATE int sqlite3Init(sqlite3*, char**);
                   11270: SQLITE_PRIVATE int sqlite3InitCallback(void*, int, char**, char**);
                   11271: SQLITE_PRIVATE void sqlite3Pragma(Parse*,Token*,Token*,Token*,int);
                   11272: SQLITE_PRIVATE void sqlite3ResetInternalSchema(sqlite3*, int);
                   11273: SQLITE_PRIVATE void sqlite3BeginParse(Parse*,int);
                   11274: SQLITE_PRIVATE void sqlite3CommitInternalChanges(sqlite3*);
                   11275: SQLITE_PRIVATE Table *sqlite3ResultSetOfSelect(Parse*,Select*);
                   11276: SQLITE_PRIVATE void sqlite3OpenMasterTable(Parse *, int);
                   11277: SQLITE_PRIVATE void sqlite3StartTable(Parse*,Token*,Token*,int,int,int,int);
                   11278: SQLITE_PRIVATE void sqlite3AddColumn(Parse*,Token*);
                   11279: SQLITE_PRIVATE void sqlite3AddNotNull(Parse*, int);
                   11280: SQLITE_PRIVATE void sqlite3AddPrimaryKey(Parse*, ExprList*, int, int, int);
                   11281: SQLITE_PRIVATE void sqlite3AddCheckConstraint(Parse*, Expr*);
                   11282: SQLITE_PRIVATE void sqlite3AddColumnType(Parse*,Token*);
                   11283: SQLITE_PRIVATE void sqlite3AddDefaultValue(Parse*,ExprSpan*);
                   11284: SQLITE_PRIVATE void sqlite3AddCollateType(Parse*, Token*);
                   11285: SQLITE_PRIVATE void sqlite3EndTable(Parse*,Token*,Token*,Select*);
                   11286: SQLITE_PRIVATE int sqlite3ParseUri(const char*,const char*,unsigned int*,
                   11287:                     sqlite3_vfs**,char**,char **);
                   11288: 
                   11289: SQLITE_PRIVATE Bitvec *sqlite3BitvecCreate(u32);
                   11290: SQLITE_PRIVATE int sqlite3BitvecTest(Bitvec*, u32);
                   11291: SQLITE_PRIVATE int sqlite3BitvecSet(Bitvec*, u32);
                   11292: SQLITE_PRIVATE void sqlite3BitvecClear(Bitvec*, u32, void*);
                   11293: SQLITE_PRIVATE void sqlite3BitvecDestroy(Bitvec*);
                   11294: SQLITE_PRIVATE u32 sqlite3BitvecSize(Bitvec*);
                   11295: SQLITE_PRIVATE int sqlite3BitvecBuiltinTest(int,int*);
                   11296: 
                   11297: SQLITE_PRIVATE RowSet *sqlite3RowSetInit(sqlite3*, void*, unsigned int);
                   11298: SQLITE_PRIVATE void sqlite3RowSetClear(RowSet*);
                   11299: SQLITE_PRIVATE void sqlite3RowSetInsert(RowSet*, i64);
                   11300: SQLITE_PRIVATE int sqlite3RowSetTest(RowSet*, u8 iBatch, i64);
                   11301: SQLITE_PRIVATE int sqlite3RowSetNext(RowSet*, i64*);
                   11302: 
                   11303: SQLITE_PRIVATE void sqlite3CreateView(Parse*,Token*,Token*,Token*,Select*,int,int);
                   11304: 
                   11305: #if !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_VIRTUALTABLE)
                   11306: SQLITE_PRIVATE   int sqlite3ViewGetColumnNames(Parse*,Table*);
                   11307: #else
                   11308: # define sqlite3ViewGetColumnNames(A,B) 0
                   11309: #endif
                   11310: 
                   11311: SQLITE_PRIVATE void sqlite3DropTable(Parse*, SrcList*, int, int);
                   11312: SQLITE_PRIVATE void sqlite3DeleteTable(sqlite3*, Table*);
                   11313: #ifndef SQLITE_OMIT_AUTOINCREMENT
                   11314: SQLITE_PRIVATE   void sqlite3AutoincrementBegin(Parse *pParse);
                   11315: SQLITE_PRIVATE   void sqlite3AutoincrementEnd(Parse *pParse);
                   11316: #else
                   11317: # define sqlite3AutoincrementBegin(X)
                   11318: # define sqlite3AutoincrementEnd(X)
                   11319: #endif
                   11320: SQLITE_PRIVATE void sqlite3Insert(Parse*, SrcList*, ExprList*, Select*, IdList*, int);
                   11321: SQLITE_PRIVATE void *sqlite3ArrayAllocate(sqlite3*,void*,int,int,int*,int*,int*);
                   11322: SQLITE_PRIVATE IdList *sqlite3IdListAppend(sqlite3*, IdList*, Token*);
                   11323: SQLITE_PRIVATE int sqlite3IdListIndex(IdList*,const char*);
                   11324: SQLITE_PRIVATE SrcList *sqlite3SrcListEnlarge(sqlite3*, SrcList*, int, int);
                   11325: SQLITE_PRIVATE SrcList *sqlite3SrcListAppend(sqlite3*, SrcList*, Token*, Token*);
                   11326: SQLITE_PRIVATE SrcList *sqlite3SrcListAppendFromTerm(Parse*, SrcList*, Token*, Token*,
                   11327:                                       Token*, Select*, Expr*, IdList*);
                   11328: SQLITE_PRIVATE void sqlite3SrcListIndexedBy(Parse *, SrcList *, Token *);
                   11329: SQLITE_PRIVATE int sqlite3IndexedByLookup(Parse *, struct SrcList_item *);
                   11330: SQLITE_PRIVATE void sqlite3SrcListShiftJoinType(SrcList*);
                   11331: SQLITE_PRIVATE void sqlite3SrcListAssignCursors(Parse*, SrcList*);
                   11332: SQLITE_PRIVATE void sqlite3IdListDelete(sqlite3*, IdList*);
                   11333: SQLITE_PRIVATE void sqlite3SrcListDelete(sqlite3*, SrcList*);
                   11334: SQLITE_PRIVATE Index *sqlite3CreateIndex(Parse*,Token*,Token*,SrcList*,ExprList*,int,Token*,
                   11335:                         Token*, int, int);
                   11336: SQLITE_PRIVATE void sqlite3DropIndex(Parse*, SrcList*, int);
                   11337: SQLITE_PRIVATE int sqlite3Select(Parse*, Select*, SelectDest*);
                   11338: SQLITE_PRIVATE Select *sqlite3SelectNew(Parse*,ExprList*,SrcList*,Expr*,ExprList*,
                   11339:                          Expr*,ExprList*,int,Expr*,Expr*);
                   11340: SQLITE_PRIVATE void sqlite3SelectDelete(sqlite3*, Select*);
                   11341: SQLITE_PRIVATE Table *sqlite3SrcListLookup(Parse*, SrcList*);
                   11342: SQLITE_PRIVATE int sqlite3IsReadOnly(Parse*, Table*, int);
                   11343: SQLITE_PRIVATE void sqlite3OpenTable(Parse*, int iCur, int iDb, Table*, int);
                   11344: #if defined(SQLITE_ENABLE_UPDATE_DELETE_LIMIT) && !defined(SQLITE_OMIT_SUBQUERY)
                   11345: SQLITE_PRIVATE Expr *sqlite3LimitWhere(Parse *, SrcList *, Expr *, ExprList *, Expr *, Expr *, char *);
                   11346: #endif
                   11347: SQLITE_PRIVATE void sqlite3DeleteFrom(Parse*, SrcList*, Expr*);
                   11348: SQLITE_PRIVATE void sqlite3Update(Parse*, SrcList*, ExprList*, Expr*, int);
                   11349: SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin(Parse*, SrcList*, Expr*, ExprList**, u16);
                   11350: SQLITE_PRIVATE void sqlite3WhereEnd(WhereInfo*);
                   11351: SQLITE_PRIVATE int sqlite3ExprCodeGetColumn(Parse*, Table*, int, int, int);
                   11352: SQLITE_PRIVATE void sqlite3ExprCodeGetColumnOfTable(Vdbe*, Table*, int, int, int);
                   11353: SQLITE_PRIVATE void sqlite3ExprCodeMove(Parse*, int, int, int);
                   11354: SQLITE_PRIVATE void sqlite3ExprCodeCopy(Parse*, int, int, int);
                   11355: SQLITE_PRIVATE void sqlite3ExprCacheStore(Parse*, int, int, int);
                   11356: SQLITE_PRIVATE void sqlite3ExprCachePush(Parse*);
                   11357: SQLITE_PRIVATE void sqlite3ExprCachePop(Parse*, int);
                   11358: SQLITE_PRIVATE void sqlite3ExprCacheRemove(Parse*, int, int);
                   11359: SQLITE_PRIVATE void sqlite3ExprCacheClear(Parse*);
                   11360: SQLITE_PRIVATE void sqlite3ExprCacheAffinityChange(Parse*, int, int);
                   11361: SQLITE_PRIVATE int sqlite3ExprCode(Parse*, Expr*, int);
                   11362: SQLITE_PRIVATE int sqlite3ExprCodeTemp(Parse*, Expr*, int*);
                   11363: SQLITE_PRIVATE int sqlite3ExprCodeTarget(Parse*, Expr*, int);
                   11364: SQLITE_PRIVATE int sqlite3ExprCodeAndCache(Parse*, Expr*, int);
                   11365: SQLITE_PRIVATE void sqlite3ExprCodeConstants(Parse*, Expr*);
                   11366: SQLITE_PRIVATE int sqlite3ExprCodeExprList(Parse*, ExprList*, int, int);
                   11367: SQLITE_PRIVATE void sqlite3ExprIfTrue(Parse*, Expr*, int, int);
                   11368: SQLITE_PRIVATE void sqlite3ExprIfFalse(Parse*, Expr*, int, int);
                   11369: SQLITE_PRIVATE Table *sqlite3FindTable(sqlite3*,const char*, const char*);
                   11370: SQLITE_PRIVATE Table *sqlite3LocateTable(Parse*,int isView,const char*, const char*);
                   11371: SQLITE_PRIVATE Index *sqlite3FindIndex(sqlite3*,const char*, const char*);
                   11372: SQLITE_PRIVATE void sqlite3UnlinkAndDeleteTable(sqlite3*,int,const char*);
                   11373: SQLITE_PRIVATE void sqlite3UnlinkAndDeleteIndex(sqlite3*,int,const char*);
                   11374: SQLITE_PRIVATE void sqlite3Vacuum(Parse*);
                   11375: SQLITE_PRIVATE int sqlite3RunVacuum(char**, sqlite3*);
                   11376: SQLITE_PRIVATE char *sqlite3NameFromToken(sqlite3*, Token*);
                   11377: SQLITE_PRIVATE int sqlite3ExprCompare(Expr*, Expr*);
                   11378: SQLITE_PRIVATE int sqlite3ExprListCompare(ExprList*, ExprList*);
                   11379: SQLITE_PRIVATE void sqlite3ExprAnalyzeAggregates(NameContext*, Expr*);
                   11380: SQLITE_PRIVATE void sqlite3ExprAnalyzeAggList(NameContext*,ExprList*);
                   11381: SQLITE_PRIVATE Vdbe *sqlite3GetVdbe(Parse*);
                   11382: SQLITE_PRIVATE void sqlite3PrngSaveState(void);
                   11383: SQLITE_PRIVATE void sqlite3PrngRestoreState(void);
                   11384: SQLITE_PRIVATE void sqlite3PrngResetState(void);
                   11385: SQLITE_PRIVATE void sqlite3RollbackAll(sqlite3*);
                   11386: SQLITE_PRIVATE void sqlite3CodeVerifySchema(Parse*, int);
                   11387: SQLITE_PRIVATE void sqlite3CodeVerifyNamedSchema(Parse*, const char *zDb);
                   11388: SQLITE_PRIVATE void sqlite3BeginTransaction(Parse*, int);
                   11389: SQLITE_PRIVATE void sqlite3CommitTransaction(Parse*);
                   11390: SQLITE_PRIVATE void sqlite3RollbackTransaction(Parse*);
                   11391: SQLITE_PRIVATE void sqlite3Savepoint(Parse*, int, Token*);
                   11392: SQLITE_PRIVATE void sqlite3CloseSavepoints(sqlite3 *);
                   11393: SQLITE_PRIVATE int sqlite3ExprIsConstant(Expr*);
                   11394: SQLITE_PRIVATE int sqlite3ExprIsConstantNotJoin(Expr*);
                   11395: SQLITE_PRIVATE int sqlite3ExprIsConstantOrFunction(Expr*);
                   11396: SQLITE_PRIVATE int sqlite3ExprIsInteger(Expr*, int*);
                   11397: SQLITE_PRIVATE int sqlite3ExprCanBeNull(const Expr*);
                   11398: SQLITE_PRIVATE void sqlite3ExprCodeIsNullJump(Vdbe*, const Expr*, int, int);
                   11399: SQLITE_PRIVATE int sqlite3ExprNeedsNoAffinityChange(const Expr*, char);
                   11400: SQLITE_PRIVATE int sqlite3IsRowid(const char*);
                   11401: SQLITE_PRIVATE void sqlite3GenerateRowDelete(Parse*, Table*, int, int, int, Trigger *, int);
                   11402: SQLITE_PRIVATE void sqlite3GenerateRowIndexDelete(Parse*, Table*, int, int*);
                   11403: SQLITE_PRIVATE int sqlite3GenerateIndexKey(Parse*, Index*, int, int, int);
                   11404: SQLITE_PRIVATE void sqlite3GenerateConstraintChecks(Parse*,Table*,int,int,
                   11405:                                      int*,int,int,int,int,int*);
                   11406: SQLITE_PRIVATE void sqlite3CompleteInsertion(Parse*, Table*, int, int, int*, int, int, int);
                   11407: SQLITE_PRIVATE int sqlite3OpenTableAndIndices(Parse*, Table*, int, int);
                   11408: SQLITE_PRIVATE void sqlite3BeginWriteOperation(Parse*, int, int);
                   11409: SQLITE_PRIVATE void sqlite3MultiWrite(Parse*);
                   11410: SQLITE_PRIVATE void sqlite3MayAbort(Parse*);
                   11411: SQLITE_PRIVATE void sqlite3HaltConstraint(Parse*, int, char*, int);
                   11412: SQLITE_PRIVATE Expr *sqlite3ExprDup(sqlite3*,Expr*,int);
                   11413: SQLITE_PRIVATE ExprList *sqlite3ExprListDup(sqlite3*,ExprList*,int);
                   11414: SQLITE_PRIVATE SrcList *sqlite3SrcListDup(sqlite3*,SrcList*,int);
                   11415: SQLITE_PRIVATE IdList *sqlite3IdListDup(sqlite3*,IdList*);
                   11416: SQLITE_PRIVATE Select *sqlite3SelectDup(sqlite3*,Select*,int);
                   11417: SQLITE_PRIVATE void sqlite3FuncDefInsert(FuncDefHash*, FuncDef*);
                   11418: SQLITE_PRIVATE FuncDef *sqlite3FindFunction(sqlite3*,const char*,int,int,u8,int);
                   11419: SQLITE_PRIVATE void sqlite3RegisterBuiltinFunctions(sqlite3*);
                   11420: SQLITE_PRIVATE void sqlite3RegisterDateTimeFunctions(void);
                   11421: SQLITE_PRIVATE void sqlite3RegisterGlobalFunctions(void);
                   11422: SQLITE_PRIVATE int sqlite3SafetyCheckOk(sqlite3*);
                   11423: SQLITE_PRIVATE int sqlite3SafetyCheckSickOrOk(sqlite3*);
                   11424: SQLITE_PRIVATE void sqlite3ChangeCookie(Parse*, int);
                   11425: 
                   11426: #if !defined(SQLITE_OMIT_VIEW) && !defined(SQLITE_OMIT_TRIGGER)
                   11427: SQLITE_PRIVATE void sqlite3MaterializeView(Parse*, Table*, Expr*, int);
                   11428: #endif
                   11429: 
                   11430: #ifndef SQLITE_OMIT_TRIGGER
                   11431: SQLITE_PRIVATE   void sqlite3BeginTrigger(Parse*, Token*,Token*,int,int,IdList*,SrcList*,
                   11432:                            Expr*,int, int);
                   11433: SQLITE_PRIVATE   void sqlite3FinishTrigger(Parse*, TriggerStep*, Token*);
                   11434: SQLITE_PRIVATE   void sqlite3DropTrigger(Parse*, SrcList*, int);
                   11435: SQLITE_PRIVATE   void sqlite3DropTriggerPtr(Parse*, Trigger*);
                   11436: SQLITE_PRIVATE   Trigger *sqlite3TriggersExist(Parse *, Table*, int, ExprList*, int *pMask);
                   11437: SQLITE_PRIVATE   Trigger *sqlite3TriggerList(Parse *, Table *);
                   11438: SQLITE_PRIVATE   void sqlite3CodeRowTrigger(Parse*, Trigger *, int, ExprList*, int, Table *,
                   11439:                             int, int, int);
                   11440: SQLITE_PRIVATE   void sqlite3CodeRowTriggerDirect(Parse *, Trigger *, Table *, int, int, int);
                   11441:   void sqliteViewTriggers(Parse*, Table*, Expr*, int, ExprList*);
                   11442: SQLITE_PRIVATE   void sqlite3DeleteTriggerStep(sqlite3*, TriggerStep*);
                   11443: SQLITE_PRIVATE   TriggerStep *sqlite3TriggerSelectStep(sqlite3*,Select*);
                   11444: SQLITE_PRIVATE   TriggerStep *sqlite3TriggerInsertStep(sqlite3*,Token*, IdList*,
                   11445:                                         ExprList*,Select*,u8);
                   11446: SQLITE_PRIVATE   TriggerStep *sqlite3TriggerUpdateStep(sqlite3*,Token*,ExprList*, Expr*, u8);
                   11447: SQLITE_PRIVATE   TriggerStep *sqlite3TriggerDeleteStep(sqlite3*,Token*, Expr*);
                   11448: SQLITE_PRIVATE   void sqlite3DeleteTrigger(sqlite3*, Trigger*);
                   11449: SQLITE_PRIVATE   void sqlite3UnlinkAndDeleteTrigger(sqlite3*,int,const char*);
                   11450: SQLITE_PRIVATE   u32 sqlite3TriggerColmask(Parse*,Trigger*,ExprList*,int,int,Table*,int);
                   11451: # define sqlite3ParseToplevel(p) ((p)->pToplevel ? (p)->pToplevel : (p))
                   11452: #else
                   11453: # define sqlite3TriggersExist(B,C,D,E,F) 0
                   11454: # define sqlite3DeleteTrigger(A,B)
                   11455: # define sqlite3DropTriggerPtr(A,B)
                   11456: # define sqlite3UnlinkAndDeleteTrigger(A,B,C)
                   11457: # define sqlite3CodeRowTrigger(A,B,C,D,E,F,G,H,I)
                   11458: # define sqlite3CodeRowTriggerDirect(A,B,C,D,E,F)
                   11459: # define sqlite3TriggerList(X, Y) 0
                   11460: # define sqlite3ParseToplevel(p) p
                   11461: # define sqlite3TriggerColmask(A,B,C,D,E,F,G) 0
                   11462: #endif
                   11463: 
                   11464: SQLITE_PRIVATE int sqlite3JoinType(Parse*, Token*, Token*, Token*);
                   11465: SQLITE_PRIVATE void sqlite3CreateForeignKey(Parse*, ExprList*, Token*, ExprList*, int);
                   11466: SQLITE_PRIVATE void sqlite3DeferForeignKey(Parse*, int);
                   11467: #ifndef SQLITE_OMIT_AUTHORIZATION
                   11468: SQLITE_PRIVATE   void sqlite3AuthRead(Parse*,Expr*,Schema*,SrcList*);
                   11469: SQLITE_PRIVATE   int sqlite3AuthCheck(Parse*,int, const char*, const char*, const char*);
                   11470: SQLITE_PRIVATE   void sqlite3AuthContextPush(Parse*, AuthContext*, const char*);
                   11471: SQLITE_PRIVATE   void sqlite3AuthContextPop(AuthContext*);
                   11472: SQLITE_PRIVATE   int sqlite3AuthReadCol(Parse*, const char *, const char *, int);
                   11473: #else
                   11474: # define sqlite3AuthRead(a,b,c,d)
                   11475: # define sqlite3AuthCheck(a,b,c,d,e)    SQLITE_OK
                   11476: # define sqlite3AuthContextPush(a,b,c)
                   11477: # define sqlite3AuthContextPop(a)  ((void)(a))
                   11478: #endif
                   11479: SQLITE_PRIVATE void sqlite3Attach(Parse*, Expr*, Expr*, Expr*);
                   11480: SQLITE_PRIVATE void sqlite3Detach(Parse*, Expr*);
                   11481: SQLITE_PRIVATE int sqlite3FixInit(DbFixer*, Parse*, int, const char*, const Token*);
                   11482: SQLITE_PRIVATE int sqlite3FixSrcList(DbFixer*, SrcList*);
                   11483: SQLITE_PRIVATE int sqlite3FixSelect(DbFixer*, Select*);
                   11484: SQLITE_PRIVATE int sqlite3FixExpr(DbFixer*, Expr*);
                   11485: SQLITE_PRIVATE int sqlite3FixExprList(DbFixer*, ExprList*);
                   11486: SQLITE_PRIVATE int sqlite3FixTriggerStep(DbFixer*, TriggerStep*);
                   11487: SQLITE_PRIVATE int sqlite3AtoF(const char *z, double*, int, u8);
                   11488: SQLITE_PRIVATE int sqlite3GetInt32(const char *, int*);
                   11489: SQLITE_PRIVATE int sqlite3Atoi(const char*);
                   11490: SQLITE_PRIVATE int sqlite3Utf16ByteLen(const void *pData, int nChar);
                   11491: SQLITE_PRIVATE int sqlite3Utf8CharLen(const char *pData, int nByte);
                   11492: SQLITE_PRIVATE u32 sqlite3Utf8Read(const u8*, const u8**);
                   11493: 
                   11494: /*
                   11495: ** Routines to read and write variable-length integers.  These used to
                   11496: ** be defined locally, but now we use the varint routines in the util.c
                   11497: ** file.  Code should use the MACRO forms below, as the Varint32 versions
                   11498: ** are coded to assume the single byte case is already handled (which 
                   11499: ** the MACRO form does).
                   11500: */
                   11501: SQLITE_PRIVATE int sqlite3PutVarint(unsigned char*, u64);
                   11502: SQLITE_PRIVATE int sqlite3PutVarint32(unsigned char*, u32);
                   11503: SQLITE_PRIVATE u8 sqlite3GetVarint(const unsigned char *, u64 *);
                   11504: SQLITE_PRIVATE u8 sqlite3GetVarint32(const unsigned char *, u32 *);
                   11505: SQLITE_PRIVATE int sqlite3VarintLen(u64 v);
                   11506: 
                   11507: /*
                   11508: ** The header of a record consists of a sequence variable-length integers.
                   11509: ** These integers are almost always small and are encoded as a single byte.
                   11510: ** The following macros take advantage this fact to provide a fast encode
                   11511: ** and decode of the integers in a record header.  It is faster for the common
                   11512: ** case where the integer is a single byte.  It is a little slower when the
                   11513: ** integer is two or more bytes.  But overall it is faster.
                   11514: **
                   11515: ** The following expressions are equivalent:
                   11516: **
                   11517: **     x = sqlite3GetVarint32( A, &B );
                   11518: **     x = sqlite3PutVarint32( A, B );
                   11519: **
                   11520: **     x = getVarint32( A, B );
                   11521: **     x = putVarint32( A, B );
                   11522: **
                   11523: */
                   11524: #define getVarint32(A,B)  (u8)((*(A)<(u8)0x80) ? ((B) = (u32)*(A)),1 : sqlite3GetVarint32((A), (u32 *)&(B)))
                   11525: #define putVarint32(A,B)  (u8)(((u32)(B)<(u32)0x80) ? (*(A) = (unsigned char)(B)),1 : sqlite3PutVarint32((A), (B)))
                   11526: #define getVarint    sqlite3GetVarint
                   11527: #define putVarint    sqlite3PutVarint
                   11528: 
                   11529: 
                   11530: SQLITE_PRIVATE const char *sqlite3IndexAffinityStr(Vdbe *, Index *);
                   11531: SQLITE_PRIVATE void sqlite3TableAffinityStr(Vdbe *, Table *);
                   11532: SQLITE_PRIVATE char sqlite3CompareAffinity(Expr *pExpr, char aff2);
                   11533: SQLITE_PRIVATE int sqlite3IndexAffinityOk(Expr *pExpr, char idx_affinity);
                   11534: SQLITE_PRIVATE char sqlite3ExprAffinity(Expr *pExpr);
                   11535: SQLITE_PRIVATE int sqlite3Atoi64(const char*, i64*, int, u8);
                   11536: SQLITE_PRIVATE void sqlite3Error(sqlite3*, int, const char*,...);
                   11537: SQLITE_PRIVATE void *sqlite3HexToBlob(sqlite3*, const char *z, int n);
                   11538: SQLITE_PRIVATE u8 sqlite3HexToInt(int h);
                   11539: SQLITE_PRIVATE int sqlite3TwoPartName(Parse *, Token *, Token *, Token **);
                   11540: SQLITE_PRIVATE const char *sqlite3ErrStr(int);
                   11541: SQLITE_PRIVATE int sqlite3ReadSchema(Parse *pParse);
                   11542: SQLITE_PRIVATE CollSeq *sqlite3FindCollSeq(sqlite3*,u8 enc, const char*,int);
                   11543: SQLITE_PRIVATE CollSeq *sqlite3LocateCollSeq(Parse *pParse, const char*zName);
                   11544: SQLITE_PRIVATE CollSeq *sqlite3ExprCollSeq(Parse *pParse, Expr *pExpr);
                   11545: SQLITE_PRIVATE Expr *sqlite3ExprSetColl(Expr*, CollSeq*);
                   11546: SQLITE_PRIVATE Expr *sqlite3ExprSetCollByToken(Parse *pParse, Expr*, Token*);
                   11547: SQLITE_PRIVATE int sqlite3CheckCollSeq(Parse *, CollSeq *);
                   11548: SQLITE_PRIVATE int sqlite3CheckObjectName(Parse *, const char *);
                   11549: SQLITE_PRIVATE void sqlite3VdbeSetChanges(sqlite3 *, int);
                   11550: SQLITE_PRIVATE int sqlite3AddInt64(i64*,i64);
                   11551: SQLITE_PRIVATE int sqlite3SubInt64(i64*,i64);
                   11552: SQLITE_PRIVATE int sqlite3MulInt64(i64*,i64);
                   11553: SQLITE_PRIVATE int sqlite3AbsInt32(int);
                   11554: #ifdef SQLITE_ENABLE_8_3_NAMES
                   11555: SQLITE_PRIVATE void sqlite3FileSuffix3(const char*, char*);
                   11556: #else
                   11557: # define sqlite3FileSuffix3(X,Y)
                   11558: #endif
                   11559: SQLITE_PRIVATE u8 sqlite3GetBoolean(const char *z);
                   11560: 
                   11561: SQLITE_PRIVATE const void *sqlite3ValueText(sqlite3_value*, u8);
                   11562: SQLITE_PRIVATE int sqlite3ValueBytes(sqlite3_value*, u8);
                   11563: SQLITE_PRIVATE void sqlite3ValueSetStr(sqlite3_value*, int, const void *,u8, 
                   11564:                         void(*)(void*));
                   11565: SQLITE_PRIVATE void sqlite3ValueFree(sqlite3_value*);
                   11566: SQLITE_PRIVATE sqlite3_value *sqlite3ValueNew(sqlite3 *);
                   11567: SQLITE_PRIVATE char *sqlite3Utf16to8(sqlite3 *, const void*, int, u8);
                   11568: #ifdef SQLITE_ENABLE_STAT2
                   11569: SQLITE_PRIVATE char *sqlite3Utf8to16(sqlite3 *, u8, char *, int, int *);
                   11570: #endif
                   11571: SQLITE_PRIVATE int sqlite3ValueFromExpr(sqlite3 *, Expr *, u8, u8, sqlite3_value **);
                   11572: SQLITE_PRIVATE void sqlite3ValueApplyAffinity(sqlite3_value *, u8, u8);
                   11573: #ifndef SQLITE_AMALGAMATION
                   11574: SQLITE_PRIVATE const unsigned char sqlite3OpcodeProperty[];
                   11575: SQLITE_PRIVATE const unsigned char sqlite3UpperToLower[];
                   11576: SQLITE_PRIVATE const unsigned char sqlite3CtypeMap[];
                   11577: SQLITE_PRIVATE const Token sqlite3IntTokens[];
                   11578: SQLITE_PRIVATE SQLITE_WSD struct Sqlite3Config sqlite3Config;
                   11579: SQLITE_PRIVATE SQLITE_WSD FuncDefHash sqlite3GlobalFunctions;
                   11580: #ifndef SQLITE_OMIT_WSD
                   11581: SQLITE_PRIVATE int sqlite3PendingByte;
                   11582: #endif
                   11583: #endif
                   11584: SQLITE_PRIVATE void sqlite3RootPageMoved(sqlite3*, int, int, int);
                   11585: SQLITE_PRIVATE void sqlite3Reindex(Parse*, Token*, Token*);
                   11586: SQLITE_PRIVATE void sqlite3AlterFunctions(void);
                   11587: SQLITE_PRIVATE void sqlite3AlterRenameTable(Parse*, SrcList*, Token*);
                   11588: SQLITE_PRIVATE int sqlite3GetToken(const unsigned char *, int *);
                   11589: SQLITE_PRIVATE void sqlite3NestedParse(Parse*, const char*, ...);
                   11590: SQLITE_PRIVATE void sqlite3ExpirePreparedStatements(sqlite3*);
                   11591: SQLITE_PRIVATE int sqlite3CodeSubselect(Parse *, Expr *, int, int);
                   11592: SQLITE_PRIVATE void sqlite3SelectPrep(Parse*, Select*, NameContext*);
                   11593: SQLITE_PRIVATE int sqlite3ResolveExprNames(NameContext*, Expr*);
                   11594: SQLITE_PRIVATE void sqlite3ResolveSelectNames(Parse*, Select*, NameContext*);
                   11595: SQLITE_PRIVATE int sqlite3ResolveOrderGroupBy(Parse*, Select*, ExprList*, const char*);
                   11596: SQLITE_PRIVATE void sqlite3ColumnDefault(Vdbe *, Table *, int, int);
                   11597: SQLITE_PRIVATE void sqlite3AlterFinishAddColumn(Parse *, Token *);
                   11598: SQLITE_PRIVATE void sqlite3AlterBeginAddColumn(Parse *, SrcList *);
                   11599: SQLITE_PRIVATE CollSeq *sqlite3GetCollSeq(sqlite3*, u8, CollSeq *, const char*);
                   11600: SQLITE_PRIVATE char sqlite3AffinityType(const char*);
                   11601: SQLITE_PRIVATE void sqlite3Analyze(Parse*, Token*, Token*);
                   11602: SQLITE_PRIVATE int sqlite3InvokeBusyHandler(BusyHandler*);
                   11603: SQLITE_PRIVATE int sqlite3FindDb(sqlite3*, Token*);
                   11604: SQLITE_PRIVATE int sqlite3FindDbName(sqlite3 *, const char *);
                   11605: SQLITE_PRIVATE int sqlite3AnalysisLoad(sqlite3*,int iDB);
                   11606: SQLITE_PRIVATE void sqlite3DeleteIndexSamples(sqlite3*,Index*);
                   11607: SQLITE_PRIVATE void sqlite3DefaultRowEst(Index*);
                   11608: SQLITE_PRIVATE void sqlite3RegisterLikeFunctions(sqlite3*, int);
                   11609: SQLITE_PRIVATE int sqlite3IsLikeFunction(sqlite3*,Expr*,int*,char*);
                   11610: SQLITE_PRIVATE void sqlite3MinimumFileFormat(Parse*, int, int);
                   11611: SQLITE_PRIVATE void sqlite3SchemaClear(void *);
                   11612: SQLITE_PRIVATE Schema *sqlite3SchemaGet(sqlite3 *, Btree *);
                   11613: SQLITE_PRIVATE int sqlite3SchemaToIndex(sqlite3 *db, Schema *);
                   11614: SQLITE_PRIVATE KeyInfo *sqlite3IndexKeyinfo(Parse *, Index *);
                   11615: SQLITE_PRIVATE int sqlite3CreateFunc(sqlite3 *, const char *, int, int, void *, 
                   11616:   void (*)(sqlite3_context*,int,sqlite3_value **),
                   11617:   void (*)(sqlite3_context*,int,sqlite3_value **), void (*)(sqlite3_context*),
                   11618:   FuncDestructor *pDestructor
                   11619: );
                   11620: SQLITE_PRIVATE int sqlite3ApiExit(sqlite3 *db, int);
                   11621: SQLITE_PRIVATE int sqlite3OpenTempDatabase(Parse *);
                   11622: 
                   11623: SQLITE_PRIVATE void sqlite3StrAccumInit(StrAccum*, char*, int, int);
                   11624: SQLITE_PRIVATE void sqlite3StrAccumAppend(StrAccum*,const char*,int);
                   11625: SQLITE_PRIVATE char *sqlite3StrAccumFinish(StrAccum*);
                   11626: SQLITE_PRIVATE void sqlite3StrAccumReset(StrAccum*);
                   11627: SQLITE_PRIVATE void sqlite3SelectDestInit(SelectDest*,int,int);
                   11628: SQLITE_PRIVATE Expr *sqlite3CreateColumnExpr(sqlite3 *, SrcList *, int, int);
                   11629: 
                   11630: SQLITE_PRIVATE void sqlite3BackupRestart(sqlite3_backup *);
                   11631: SQLITE_PRIVATE void sqlite3BackupUpdate(sqlite3_backup *, Pgno, const u8 *);
                   11632: 
                   11633: /*
                   11634: ** The interface to the LEMON-generated parser
                   11635: */
                   11636: SQLITE_PRIVATE void *sqlite3ParserAlloc(void*(*)(size_t));
                   11637: SQLITE_PRIVATE void sqlite3ParserFree(void*, void(*)(void*));
                   11638: SQLITE_PRIVATE void sqlite3Parser(void*, int, Token, Parse*);
                   11639: #ifdef YYTRACKMAXSTACKDEPTH
                   11640: SQLITE_PRIVATE   int sqlite3ParserStackPeak(void*);
                   11641: #endif
                   11642: 
                   11643: SQLITE_PRIVATE void sqlite3AutoLoadExtensions(sqlite3*);
                   11644: #ifndef SQLITE_OMIT_LOAD_EXTENSION
                   11645: SQLITE_PRIVATE   void sqlite3CloseExtensions(sqlite3*);
                   11646: #else
                   11647: # define sqlite3CloseExtensions(X)
                   11648: #endif
                   11649: 
                   11650: #ifndef SQLITE_OMIT_SHARED_CACHE
                   11651: SQLITE_PRIVATE   void sqlite3TableLock(Parse *, int, int, u8, const char *);
                   11652: #else
                   11653:   #define sqlite3TableLock(v,w,x,y,z)
                   11654: #endif
                   11655: 
                   11656: #ifdef SQLITE_TEST
                   11657: SQLITE_PRIVATE   int sqlite3Utf8To8(unsigned char*);
                   11658: #endif
                   11659: 
                   11660: #ifdef SQLITE_OMIT_VIRTUALTABLE
                   11661: #  define sqlite3VtabClear(Y)
                   11662: #  define sqlite3VtabSync(X,Y) SQLITE_OK
                   11663: #  define sqlite3VtabRollback(X)
                   11664: #  define sqlite3VtabCommit(X)
                   11665: #  define sqlite3VtabInSync(db) 0
                   11666: #  define sqlite3VtabLock(X) 
                   11667: #  define sqlite3VtabUnlock(X)
                   11668: #  define sqlite3VtabUnlockList(X)
                   11669: #  define sqlite3VtabSavepoint(X, Y, Z) SQLITE_OK
                   11670: #else
                   11671: SQLITE_PRIVATE    void sqlite3VtabClear(sqlite3 *db, Table*);
                   11672: SQLITE_PRIVATE    int sqlite3VtabSync(sqlite3 *db, char **);
                   11673: SQLITE_PRIVATE    int sqlite3VtabRollback(sqlite3 *db);
                   11674: SQLITE_PRIVATE    int sqlite3VtabCommit(sqlite3 *db);
                   11675: SQLITE_PRIVATE    void sqlite3VtabLock(VTable *);
                   11676: SQLITE_PRIVATE    void sqlite3VtabUnlock(VTable *);
                   11677: SQLITE_PRIVATE    void sqlite3VtabUnlockList(sqlite3*);
                   11678: SQLITE_PRIVATE    int sqlite3VtabSavepoint(sqlite3 *, int, int);
                   11679: #  define sqlite3VtabInSync(db) ((db)->nVTrans>0 && (db)->aVTrans==0)
                   11680: #endif
                   11681: SQLITE_PRIVATE void sqlite3VtabMakeWritable(Parse*,Table*);
                   11682: SQLITE_PRIVATE void sqlite3VtabBeginParse(Parse*, Token*, Token*, Token*);
                   11683: SQLITE_PRIVATE void sqlite3VtabFinishParse(Parse*, Token*);
                   11684: SQLITE_PRIVATE void sqlite3VtabArgInit(Parse*);
                   11685: SQLITE_PRIVATE void sqlite3VtabArgExtend(Parse*, Token*);
                   11686: SQLITE_PRIVATE int sqlite3VtabCallCreate(sqlite3*, int, const char *, char **);
                   11687: SQLITE_PRIVATE int sqlite3VtabCallConnect(Parse*, Table*);
                   11688: SQLITE_PRIVATE int sqlite3VtabCallDestroy(sqlite3*, int, const char *);
                   11689: SQLITE_PRIVATE int sqlite3VtabBegin(sqlite3 *, VTable *);
                   11690: SQLITE_PRIVATE FuncDef *sqlite3VtabOverloadFunction(sqlite3 *,FuncDef*, int nArg, Expr*);
                   11691: SQLITE_PRIVATE void sqlite3InvalidFunction(sqlite3_context*,int,sqlite3_value**);
                   11692: SQLITE_PRIVATE int sqlite3VdbeParameterIndex(Vdbe*, const char*, int);
                   11693: SQLITE_PRIVATE int sqlite3TransferBindings(sqlite3_stmt *, sqlite3_stmt *);
                   11694: SQLITE_PRIVATE int sqlite3Reprepare(Vdbe*);
                   11695: SQLITE_PRIVATE void sqlite3ExprListCheckLength(Parse*, ExprList*, const char*);
                   11696: SQLITE_PRIVATE CollSeq *sqlite3BinaryCompareCollSeq(Parse *, Expr *, Expr *);
                   11697: SQLITE_PRIVATE int sqlite3TempInMemory(const sqlite3*);
                   11698: SQLITE_PRIVATE VTable *sqlite3GetVTable(sqlite3*, Table*);
                   11699: SQLITE_PRIVATE const char *sqlite3JournalModename(int);
                   11700: SQLITE_PRIVATE int sqlite3Checkpoint(sqlite3*, int, int, int*, int*);
                   11701: SQLITE_PRIVATE int sqlite3WalDefaultHook(void*,sqlite3*,const char*,int);
                   11702: 
                   11703: /* Declarations for functions in fkey.c. All of these are replaced by
                   11704: ** no-op macros if OMIT_FOREIGN_KEY is defined. In this case no foreign
                   11705: ** key functionality is available. If OMIT_TRIGGER is defined but
                   11706: ** OMIT_FOREIGN_KEY is not, only some of the functions are no-oped. In
                   11707: ** this case foreign keys are parsed, but no other functionality is 
                   11708: ** provided (enforcement of FK constraints requires the triggers sub-system).
                   11709: */
                   11710: #if !defined(SQLITE_OMIT_FOREIGN_KEY) && !defined(SQLITE_OMIT_TRIGGER)
                   11711: SQLITE_PRIVATE   void sqlite3FkCheck(Parse*, Table*, int, int);
                   11712: SQLITE_PRIVATE   void sqlite3FkDropTable(Parse*, SrcList *, Table*);
                   11713: SQLITE_PRIVATE   void sqlite3FkActions(Parse*, Table*, ExprList*, int);
                   11714: SQLITE_PRIVATE   int sqlite3FkRequired(Parse*, Table*, int*, int);
                   11715: SQLITE_PRIVATE   u32 sqlite3FkOldmask(Parse*, Table*);
                   11716: SQLITE_PRIVATE   FKey *sqlite3FkReferences(Table *);
                   11717: #else
                   11718:   #define sqlite3FkActions(a,b,c,d)
                   11719:   #define sqlite3FkCheck(a,b,c,d)
                   11720:   #define sqlite3FkDropTable(a,b,c)
                   11721:   #define sqlite3FkOldmask(a,b)      0
                   11722:   #define sqlite3FkRequired(a,b,c,d) 0
                   11723: #endif
                   11724: #ifndef SQLITE_OMIT_FOREIGN_KEY
                   11725: SQLITE_PRIVATE   void sqlite3FkDelete(sqlite3 *, Table*);
                   11726: #else
                   11727:   #define sqlite3FkDelete(a,b)
                   11728: #endif
                   11729: 
                   11730: 
                   11731: /*
                   11732: ** Available fault injectors.  Should be numbered beginning with 0.
                   11733: */
                   11734: #define SQLITE_FAULTINJECTOR_MALLOC     0
                   11735: #define SQLITE_FAULTINJECTOR_COUNT      1
                   11736: 
                   11737: /*
                   11738: ** The interface to the code in fault.c used for identifying "benign"
                   11739: ** malloc failures. This is only present if SQLITE_OMIT_BUILTIN_TEST
                   11740: ** is not defined.
                   11741: */
                   11742: #ifndef SQLITE_OMIT_BUILTIN_TEST
                   11743: SQLITE_PRIVATE   void sqlite3BeginBenignMalloc(void);
                   11744: SQLITE_PRIVATE   void sqlite3EndBenignMalloc(void);
                   11745: #else
                   11746:   #define sqlite3BeginBenignMalloc()
                   11747:   #define sqlite3EndBenignMalloc()
                   11748: #endif
                   11749: 
                   11750: #define IN_INDEX_ROWID           1
                   11751: #define IN_INDEX_EPH             2
                   11752: #define IN_INDEX_INDEX           3
                   11753: SQLITE_PRIVATE int sqlite3FindInIndex(Parse *, Expr *, int*);
                   11754: 
                   11755: #ifdef SQLITE_ENABLE_ATOMIC_WRITE
                   11756: SQLITE_PRIVATE   int sqlite3JournalOpen(sqlite3_vfs *, const char *, sqlite3_file *, int, int);
                   11757: SQLITE_PRIVATE   int sqlite3JournalSize(sqlite3_vfs *);
                   11758: SQLITE_PRIVATE   int sqlite3JournalCreate(sqlite3_file *);
                   11759: #else
                   11760:   #define sqlite3JournalSize(pVfs) ((pVfs)->szOsFile)
                   11761: #endif
                   11762: 
                   11763: SQLITE_PRIVATE void sqlite3MemJournalOpen(sqlite3_file *);
                   11764: SQLITE_PRIVATE int sqlite3MemJournalSize(void);
                   11765: SQLITE_PRIVATE int sqlite3IsMemJournal(sqlite3_file *);
                   11766: 
                   11767: #if SQLITE_MAX_EXPR_DEPTH>0
                   11768: SQLITE_PRIVATE   void sqlite3ExprSetHeight(Parse *pParse, Expr *p);
                   11769: SQLITE_PRIVATE   int sqlite3SelectExprHeight(Select *);
                   11770: SQLITE_PRIVATE   int sqlite3ExprCheckHeight(Parse*, int);
                   11771: #else
                   11772:   #define sqlite3ExprSetHeight(x,y)
                   11773:   #define sqlite3SelectExprHeight(x) 0
                   11774:   #define sqlite3ExprCheckHeight(x,y)
                   11775: #endif
                   11776: 
                   11777: SQLITE_PRIVATE u32 sqlite3Get4byte(const u8*);
                   11778: SQLITE_PRIVATE void sqlite3Put4byte(u8*, u32);
                   11779: 
                   11780: #ifdef SQLITE_ENABLE_UNLOCK_NOTIFY
                   11781: SQLITE_PRIVATE   void sqlite3ConnectionBlocked(sqlite3 *, sqlite3 *);
                   11782: SQLITE_PRIVATE   void sqlite3ConnectionUnlocked(sqlite3 *db);
                   11783: SQLITE_PRIVATE   void sqlite3ConnectionClosed(sqlite3 *db);
                   11784: #else
                   11785:   #define sqlite3ConnectionBlocked(x,y)
                   11786:   #define sqlite3ConnectionUnlocked(x)
                   11787:   #define sqlite3ConnectionClosed(x)
                   11788: #endif
                   11789: 
                   11790: #ifdef SQLITE_DEBUG
                   11791: SQLITE_PRIVATE   void sqlite3ParserTrace(FILE*, char *);
                   11792: #endif
                   11793: 
                   11794: /*
                   11795: ** If the SQLITE_ENABLE IOTRACE exists then the global variable
                   11796: ** sqlite3IoTrace is a pointer to a printf-like routine used to
                   11797: ** print I/O tracing messages. 
                   11798: */
                   11799: #ifdef SQLITE_ENABLE_IOTRACE
                   11800: # define IOTRACE(A)  if( sqlite3IoTrace ){ sqlite3IoTrace A; }
                   11801: SQLITE_PRIVATE   void sqlite3VdbeIOTraceSql(Vdbe*);
                   11802: SQLITE_PRIVATE void (*sqlite3IoTrace)(const char*,...);
                   11803: #else
                   11804: # define IOTRACE(A)
                   11805: # define sqlite3VdbeIOTraceSql(X)
                   11806: #endif
                   11807: 
                   11808: /*
                   11809: ** These routines are available for the mem2.c debugging memory allocator
                   11810: ** only.  They are used to verify that different "types" of memory
                   11811: ** allocations are properly tracked by the system.
                   11812: **
                   11813: ** sqlite3MemdebugSetType() sets the "type" of an allocation to one of
                   11814: ** the MEMTYPE_* macros defined below.  The type must be a bitmask with
                   11815: ** a single bit set.
                   11816: **
                   11817: ** sqlite3MemdebugHasType() returns true if any of the bits in its second
                   11818: ** argument match the type set by the previous sqlite3MemdebugSetType().
                   11819: ** sqlite3MemdebugHasType() is intended for use inside assert() statements.
                   11820: **
                   11821: ** sqlite3MemdebugNoType() returns true if none of the bits in its second
                   11822: ** argument match the type set by the previous sqlite3MemdebugSetType().
                   11823: **
                   11824: ** Perhaps the most important point is the difference between MEMTYPE_HEAP
                   11825: ** and MEMTYPE_LOOKASIDE.  If an allocation is MEMTYPE_LOOKASIDE, that means
                   11826: ** it might have been allocated by lookaside, except the allocation was
                   11827: ** too large or lookaside was already full.  It is important to verify
                   11828: ** that allocations that might have been satisfied by lookaside are not
                   11829: ** passed back to non-lookaside free() routines.  Asserts such as the
                   11830: ** example above are placed on the non-lookaside free() routines to verify
                   11831: ** this constraint. 
                   11832: **
                   11833: ** All of this is no-op for a production build.  It only comes into
                   11834: ** play when the SQLITE_MEMDEBUG compile-time option is used.
                   11835: */
                   11836: #ifdef SQLITE_MEMDEBUG
                   11837: SQLITE_PRIVATE   void sqlite3MemdebugSetType(void*,u8);
                   11838: SQLITE_PRIVATE   int sqlite3MemdebugHasType(void*,u8);
                   11839: SQLITE_PRIVATE   int sqlite3MemdebugNoType(void*,u8);
                   11840: #else
                   11841: # define sqlite3MemdebugSetType(X,Y)  /* no-op */
                   11842: # define sqlite3MemdebugHasType(X,Y)  1
                   11843: # define sqlite3MemdebugNoType(X,Y)   1
                   11844: #endif
                   11845: #define MEMTYPE_HEAP       0x01  /* General heap allocations */
                   11846: #define MEMTYPE_LOOKASIDE  0x02  /* Might have been lookaside memory */
                   11847: #define MEMTYPE_SCRATCH    0x04  /* Scratch allocations */
                   11848: #define MEMTYPE_PCACHE     0x08  /* Page cache allocations */
                   11849: #define MEMTYPE_DB         0x10  /* Uses sqlite3DbMalloc, not sqlite_malloc */
                   11850: 
                   11851: #endif /* _SQLITEINT_H_ */
                   11852: 
                   11853: /************** End of sqliteInt.h *******************************************/
                   11854: /************** Begin file global.c ******************************************/
                   11855: /*
                   11856: ** 2008 June 13
                   11857: **
                   11858: ** The author disclaims copyright to this source code.  In place of
                   11859: ** a legal notice, here is a blessing:
                   11860: **
                   11861: **    May you do good and not evil.
                   11862: **    May you find forgiveness for yourself and forgive others.
                   11863: **    May you share freely, never taking more than you give.
                   11864: **
                   11865: *************************************************************************
                   11866: **
                   11867: ** This file contains definitions of global variables and contants.
                   11868: */
                   11869: 
                   11870: /* An array to map all upper-case characters into their corresponding
                   11871: ** lower-case character. 
                   11872: **
                   11873: ** SQLite only considers US-ASCII (or EBCDIC) characters.  We do not
                   11874: ** handle case conversions for the UTF character set since the tables
                   11875: ** involved are nearly as big or bigger than SQLite itself.
                   11876: */
                   11877: SQLITE_PRIVATE const unsigned char sqlite3UpperToLower[] = {
                   11878: #ifdef SQLITE_ASCII
                   11879:       0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,
                   11880:      18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
                   11881:      36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
                   11882:      54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 97, 98, 99,100,101,102,103,
                   11883:     104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,
                   11884:     122, 91, 92, 93, 94, 95, 96, 97, 98, 99,100,101,102,103,104,105,106,107,
                   11885:     108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,
                   11886:     126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,
                   11887:     144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,
                   11888:     162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,
                   11889:     180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,
                   11890:     198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,
                   11891:     216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,
                   11892:     234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,
                   11893:     252,253,254,255
                   11894: #endif
                   11895: #ifdef SQLITE_EBCDIC
                   11896:       0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, /* 0x */
                   11897:      16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, /* 1x */
                   11898:      32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, /* 2x */
                   11899:      48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, /* 3x */
                   11900:      64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, /* 4x */
                   11901:      80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, /* 5x */
                   11902:      96, 97, 66, 67, 68, 69, 70, 71, 72, 73,106,107,108,109,110,111, /* 6x */
                   11903:     112, 81, 82, 83, 84, 85, 86, 87, 88, 89,122,123,124,125,126,127, /* 7x */
                   11904:     128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, /* 8x */
                   11905:     144,145,146,147,148,149,150,151,152,153,154,155,156,157,156,159, /* 9x */
                   11906:     160,161,162,163,164,165,166,167,168,169,170,171,140,141,142,175, /* Ax */
                   11907:     176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191, /* Bx */
                   11908:     192,129,130,131,132,133,134,135,136,137,202,203,204,205,206,207, /* Cx */
                   11909:     208,145,146,147,148,149,150,151,152,153,218,219,220,221,222,223, /* Dx */
                   11910:     224,225,162,163,164,165,166,167,168,169,232,203,204,205,206,207, /* Ex */
                   11911:     239,240,241,242,243,244,245,246,247,248,249,219,220,221,222,255, /* Fx */
                   11912: #endif
                   11913: };
                   11914: 
                   11915: /*
                   11916: ** The following 256 byte lookup table is used to support SQLites built-in
                   11917: ** equivalents to the following standard library functions:
                   11918: **
                   11919: **   isspace()                        0x01
                   11920: **   isalpha()                        0x02
                   11921: **   isdigit()                        0x04
                   11922: **   isalnum()                        0x06
                   11923: **   isxdigit()                       0x08
                   11924: **   toupper()                        0x20
                   11925: **   SQLite identifier character      0x40
                   11926: **
                   11927: ** Bit 0x20 is set if the mapped character requires translation to upper
                   11928: ** case. i.e. if the character is a lower-case ASCII character.
                   11929: ** If x is a lower-case ASCII character, then its upper-case equivalent
                   11930: ** is (x - 0x20). Therefore toupper() can be implemented as:
                   11931: **
                   11932: **   (x & ~(map[x]&0x20))
                   11933: **
                   11934: ** Standard function tolower() is implemented using the sqlite3UpperToLower[]
                   11935: ** array. tolower() is used more often than toupper() by SQLite.
                   11936: **
                   11937: ** Bit 0x40 is set if the character non-alphanumeric and can be used in an 
                   11938: ** SQLite identifier.  Identifiers are alphanumerics, "_", "$", and any
                   11939: ** non-ASCII UTF character. Hence the test for whether or not a character is
                   11940: ** part of an identifier is 0x46.
                   11941: **
                   11942: ** SQLite's versions are identical to the standard versions assuming a
                   11943: ** locale of "C". They are implemented as macros in sqliteInt.h.
                   11944: */
                   11945: #ifdef SQLITE_ASCII
                   11946: SQLITE_PRIVATE const unsigned char sqlite3CtypeMap[256] = {
                   11947:   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  /* 00..07    ........ */
                   11948:   0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,  /* 08..0f    ........ */
                   11949:   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  /* 10..17    ........ */
                   11950:   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  /* 18..1f    ........ */
                   11951:   0x01, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,  /* 20..27     !"#$%&' */
                   11952:   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  /* 28..2f    ()*+,-./ */
                   11953:   0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,  /* 30..37    01234567 */
                   11954:   0x0c, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  /* 38..3f    89:;<=>? */
                   11955: 
                   11956:   0x00, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x02,  /* 40..47    @ABCDEFG */
                   11957:   0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,  /* 48..4f    HIJKLMNO */
                   11958:   0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,  /* 50..57    PQRSTUVW */
                   11959:   0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x40,  /* 58..5f    XYZ[\]^_ */
                   11960:   0x00, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x22,  /* 60..67    `abcdefg */
                   11961:   0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,  /* 68..6f    hijklmno */
                   11962:   0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,  /* 70..77    pqrstuvw */
                   11963:   0x22, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00,  /* 78..7f    xyz{|}~. */
                   11964: 
                   11965:   0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,  /* 80..87    ........ */
                   11966:   0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,  /* 88..8f    ........ */
                   11967:   0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,  /* 90..97    ........ */
                   11968:   0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,  /* 98..9f    ........ */
                   11969:   0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,  /* a0..a7    ........ */
                   11970:   0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,  /* a8..af    ........ */
                   11971:   0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,  /* b0..b7    ........ */
                   11972:   0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,  /* b8..bf    ........ */
                   11973: 
                   11974:   0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,  /* c0..c7    ........ */
                   11975:   0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,  /* c8..cf    ........ */
                   11976:   0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,  /* d0..d7    ........ */
                   11977:   0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,  /* d8..df    ........ */
                   11978:   0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,  /* e0..e7    ........ */
                   11979:   0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,  /* e8..ef    ........ */
                   11980:   0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,  /* f0..f7    ........ */
                   11981:   0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40   /* f8..ff    ........ */
                   11982: };
                   11983: #endif
                   11984: 
                   11985: #ifndef SQLITE_USE_URI
                   11986: # define  SQLITE_USE_URI 0
                   11987: #endif
                   11988: 
                   11989: /*
                   11990: ** The following singleton contains the global configuration for
                   11991: ** the SQLite library.
                   11992: */
                   11993: SQLITE_PRIVATE SQLITE_WSD struct Sqlite3Config sqlite3Config = {
                   11994:    SQLITE_DEFAULT_MEMSTATUS,  /* bMemstat */
                   11995:    1,                         /* bCoreMutex */
                   11996:    SQLITE_THREADSAFE==1,      /* bFullMutex */
                   11997:    SQLITE_USE_URI,            /* bOpenUri */
                   11998:    0x7ffffffe,                /* mxStrlen */
                   11999:    100,                       /* szLookaside */
                   12000:    500,                       /* nLookaside */
                   12001:    {0,0,0,0,0,0,0,0},         /* m */
                   12002:    {0,0,0,0,0,0,0,0,0},       /* mutex */
                   12003:    {0,0,0,0,0,0,0,0,0,0,0},   /* pcache */
                   12004:    (void*)0,                  /* pHeap */
                   12005:    0,                         /* nHeap */
                   12006:    0, 0,                      /* mnHeap, mxHeap */
                   12007:    (void*)0,                  /* pScratch */
                   12008:    0,                         /* szScratch */
                   12009:    0,                         /* nScratch */
                   12010:    (void*)0,                  /* pPage */
                   12011:    0,                         /* szPage */
                   12012:    0,                         /* nPage */
                   12013:    0,                         /* mxParserStack */
                   12014:    0,                         /* sharedCacheEnabled */
                   12015:    /* All the rest should always be initialized to zero */
                   12016:    0,                         /* isInit */
                   12017:    0,                         /* inProgress */
                   12018:    0,                         /* isMutexInit */
                   12019:    0,                         /* isMallocInit */
                   12020:    0,                         /* isPCacheInit */
                   12021:    0,                         /* pInitMutex */
                   12022:    0,                         /* nRefInitMutex */
                   12023:    0,                         /* xLog */
                   12024:    0,                         /* pLogArg */
                   12025:    0,                         /* bLocaltimeFault */
                   12026: };
                   12027: 
                   12028: 
                   12029: /*
                   12030: ** Hash table for global functions - functions common to all
                   12031: ** database connections.  After initialization, this table is
                   12032: ** read-only.
                   12033: */
                   12034: SQLITE_PRIVATE SQLITE_WSD FuncDefHash sqlite3GlobalFunctions;
                   12035: 
                   12036: /*
                   12037: ** Constant tokens for values 0 and 1.
                   12038: */
                   12039: SQLITE_PRIVATE const Token sqlite3IntTokens[] = {
                   12040:    { "0", 1 },
                   12041:    { "1", 1 }
                   12042: };
                   12043: 
                   12044: 
                   12045: /*
                   12046: ** The value of the "pending" byte must be 0x40000000 (1 byte past the
                   12047: ** 1-gibabyte boundary) in a compatible database.  SQLite never uses
                   12048: ** the database page that contains the pending byte.  It never attempts
                   12049: ** to read or write that page.  The pending byte page is set assign
                   12050: ** for use by the VFS layers as space for managing file locks.
                   12051: **
                   12052: ** During testing, it is often desirable to move the pending byte to
                   12053: ** a different position in the file.  This allows code that has to
                   12054: ** deal with the pending byte to run on files that are much smaller
                   12055: ** than 1 GiB.  The sqlite3_test_control() interface can be used to
                   12056: ** move the pending byte.
                   12057: **
                   12058: ** IMPORTANT:  Changing the pending byte to any value other than
                   12059: ** 0x40000000 results in an incompatible database file format!
                   12060: ** Changing the pending byte during operating results in undefined
                   12061: ** and dileterious behavior.
                   12062: */
                   12063: #ifndef SQLITE_OMIT_WSD
                   12064: SQLITE_PRIVATE int sqlite3PendingByte = 0x40000000;
                   12065: #endif
                   12066: 
                   12067: /*
                   12068: ** Properties of opcodes.  The OPFLG_INITIALIZER macro is
                   12069: ** created by mkopcodeh.awk during compilation.  Data is obtained
                   12070: ** from the comments following the "case OP_xxxx:" statements in
                   12071: ** the vdbe.c file.  
                   12072: */
                   12073: SQLITE_PRIVATE const unsigned char sqlite3OpcodeProperty[] = OPFLG_INITIALIZER;
                   12074: 
                   12075: /************** End of global.c **********************************************/
                   12076: /************** Begin file ctime.c *******************************************/
                   12077: /*
                   12078: ** 2010 February 23
                   12079: **
                   12080: ** The author disclaims copyright to this source code.  In place of
                   12081: ** a legal notice, here is a blessing:
                   12082: **
                   12083: **    May you do good and not evil.
                   12084: **    May you find forgiveness for yourself and forgive others.
                   12085: **    May you share freely, never taking more than you give.
                   12086: **
                   12087: *************************************************************************
                   12088: **
                   12089: ** This file implements routines used to report what compile-time options
                   12090: ** SQLite was built with.
                   12091: */
                   12092: 
                   12093: #ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
                   12094: 
                   12095: 
                   12096: /*
                   12097: ** An array of names of all compile-time options.  This array should 
                   12098: ** be sorted A-Z.
                   12099: **
                   12100: ** This array looks large, but in a typical installation actually uses
                   12101: ** only a handful of compile-time options, so most times this array is usually
                   12102: ** rather short and uses little memory space.
                   12103: */
                   12104: static const char * const azCompileOpt[] = {
                   12105: 
                   12106: /* These macros are provided to "stringify" the value of the define
                   12107: ** for those options in which the value is meaningful. */
                   12108: #define CTIMEOPT_VAL_(opt) #opt
                   12109: #define CTIMEOPT_VAL(opt) CTIMEOPT_VAL_(opt)
                   12110: 
                   12111: #ifdef SQLITE_32BIT_ROWID
                   12112:   "32BIT_ROWID",
                   12113: #endif
                   12114: #ifdef SQLITE_4_BYTE_ALIGNED_MALLOC
                   12115:   "4_BYTE_ALIGNED_MALLOC",
                   12116: #endif
                   12117: #ifdef SQLITE_CASE_SENSITIVE_LIKE
                   12118:   "CASE_SENSITIVE_LIKE",
                   12119: #endif
                   12120: #ifdef SQLITE_CHECK_PAGES
                   12121:   "CHECK_PAGES",
                   12122: #endif
                   12123: #ifdef SQLITE_COVERAGE_TEST
                   12124:   "COVERAGE_TEST",
                   12125: #endif
                   12126: #ifdef SQLITE_DEBUG
                   12127:   "DEBUG",
                   12128: #endif
                   12129: #ifdef SQLITE_DEFAULT_LOCKING_MODE
                   12130:   "DEFAULT_LOCKING_MODE=" CTIMEOPT_VAL(SQLITE_DEFAULT_LOCKING_MODE),
                   12131: #endif
                   12132: #ifdef SQLITE_DISABLE_DIRSYNC
                   12133:   "DISABLE_DIRSYNC",
                   12134: #endif
                   12135: #ifdef SQLITE_DISABLE_LFS
                   12136:   "DISABLE_LFS",
                   12137: #endif
                   12138: #ifdef SQLITE_ENABLE_ATOMIC_WRITE
                   12139:   "ENABLE_ATOMIC_WRITE",
                   12140: #endif
                   12141: #ifdef SQLITE_ENABLE_CEROD
                   12142:   "ENABLE_CEROD",
                   12143: #endif
                   12144: #ifdef SQLITE_ENABLE_COLUMN_METADATA
                   12145:   "ENABLE_COLUMN_METADATA",
                   12146: #endif
                   12147: #ifdef SQLITE_ENABLE_EXPENSIVE_ASSERT
                   12148:   "ENABLE_EXPENSIVE_ASSERT",
                   12149: #endif
                   12150: #ifdef SQLITE_ENABLE_FTS1
                   12151:   "ENABLE_FTS1",
                   12152: #endif
                   12153: #ifdef SQLITE_ENABLE_FTS2
                   12154:   "ENABLE_FTS2",
                   12155: #endif
                   12156: #ifdef SQLITE_ENABLE_FTS3
                   12157:   "ENABLE_FTS3",
                   12158: #endif
                   12159: #ifdef SQLITE_ENABLE_FTS3_PARENTHESIS
                   12160:   "ENABLE_FTS3_PARENTHESIS",
                   12161: #endif
                   12162: #ifdef SQLITE_ENABLE_FTS4
                   12163:   "ENABLE_FTS4",
                   12164: #endif
                   12165: #ifdef SQLITE_ENABLE_ICU
                   12166:   "ENABLE_ICU",
                   12167: #endif
                   12168: #ifdef SQLITE_ENABLE_IOTRACE
                   12169:   "ENABLE_IOTRACE",
                   12170: #endif
                   12171: #ifdef SQLITE_ENABLE_LOAD_EXTENSION
                   12172:   "ENABLE_LOAD_EXTENSION",
                   12173: #endif
                   12174: #ifdef SQLITE_ENABLE_LOCKING_STYLE
                   12175:   "ENABLE_LOCKING_STYLE=" CTIMEOPT_VAL(SQLITE_ENABLE_LOCKING_STYLE),
                   12176: #endif
                   12177: #ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT
                   12178:   "ENABLE_MEMORY_MANAGEMENT",
                   12179: #endif
                   12180: #ifdef SQLITE_ENABLE_MEMSYS3
                   12181:   "ENABLE_MEMSYS3",
                   12182: #endif
                   12183: #ifdef SQLITE_ENABLE_MEMSYS5
                   12184:   "ENABLE_MEMSYS5",
                   12185: #endif
                   12186: #ifdef SQLITE_ENABLE_OVERSIZE_CELL_CHECK
                   12187:   "ENABLE_OVERSIZE_CELL_CHECK",
                   12188: #endif
                   12189: #ifdef SQLITE_ENABLE_RTREE
                   12190:   "ENABLE_RTREE",
                   12191: #endif
                   12192: #ifdef SQLITE_ENABLE_STAT2
                   12193:   "ENABLE_STAT2",
                   12194: #endif
                   12195: #ifdef SQLITE_ENABLE_UNLOCK_NOTIFY
                   12196:   "ENABLE_UNLOCK_NOTIFY",
                   12197: #endif
                   12198: #ifdef SQLITE_ENABLE_UPDATE_DELETE_LIMIT
                   12199:   "ENABLE_UPDATE_DELETE_LIMIT",
                   12200: #endif
                   12201: #ifdef SQLITE_HAS_CODEC
                   12202:   "HAS_CODEC",
                   12203: #endif
                   12204: #ifdef SQLITE_HAVE_ISNAN
                   12205:   "HAVE_ISNAN",
                   12206: #endif
                   12207: #ifdef SQLITE_HOMEGROWN_RECURSIVE_MUTEX
                   12208:   "HOMEGROWN_RECURSIVE_MUTEX",
                   12209: #endif
                   12210: #ifdef SQLITE_IGNORE_AFP_LOCK_ERRORS
                   12211:   "IGNORE_AFP_LOCK_ERRORS",
                   12212: #endif
                   12213: #ifdef SQLITE_IGNORE_FLOCK_LOCK_ERRORS
                   12214:   "IGNORE_FLOCK_LOCK_ERRORS",
                   12215: #endif
                   12216: #ifdef SQLITE_INT64_TYPE
                   12217:   "INT64_TYPE",
                   12218: #endif
                   12219: #ifdef SQLITE_LOCK_TRACE
                   12220:   "LOCK_TRACE",
                   12221: #endif
                   12222: #ifdef SQLITE_MEMDEBUG
                   12223:   "MEMDEBUG",
                   12224: #endif
                   12225: #ifdef SQLITE_MIXED_ENDIAN_64BIT_FLOAT
                   12226:   "MIXED_ENDIAN_64BIT_FLOAT",
                   12227: #endif
                   12228: #ifdef SQLITE_NO_SYNC
                   12229:   "NO_SYNC",
                   12230: #endif
                   12231: #ifdef SQLITE_OMIT_ALTERTABLE
                   12232:   "OMIT_ALTERTABLE",
                   12233: #endif
                   12234: #ifdef SQLITE_OMIT_ANALYZE
                   12235:   "OMIT_ANALYZE",
                   12236: #endif
                   12237: #ifdef SQLITE_OMIT_ATTACH
                   12238:   "OMIT_ATTACH",
                   12239: #endif
                   12240: #ifdef SQLITE_OMIT_AUTHORIZATION
                   12241:   "OMIT_AUTHORIZATION",
                   12242: #endif
                   12243: #ifdef SQLITE_OMIT_AUTOINCREMENT
                   12244:   "OMIT_AUTOINCREMENT",
                   12245: #endif
                   12246: #ifdef SQLITE_OMIT_AUTOINIT
                   12247:   "OMIT_AUTOINIT",
                   12248: #endif
                   12249: #ifdef SQLITE_OMIT_AUTOMATIC_INDEX
                   12250:   "OMIT_AUTOMATIC_INDEX",
                   12251: #endif
                   12252: #ifdef SQLITE_OMIT_AUTORESET
                   12253:   "OMIT_AUTORESET",
                   12254: #endif
                   12255: #ifdef SQLITE_OMIT_AUTOVACUUM
                   12256:   "OMIT_AUTOVACUUM",
                   12257: #endif
                   12258: #ifdef SQLITE_OMIT_BETWEEN_OPTIMIZATION
                   12259:   "OMIT_BETWEEN_OPTIMIZATION",
                   12260: #endif
                   12261: #ifdef SQLITE_OMIT_BLOB_LITERAL
                   12262:   "OMIT_BLOB_LITERAL",
                   12263: #endif
                   12264: #ifdef SQLITE_OMIT_BTREECOUNT
                   12265:   "OMIT_BTREECOUNT",
                   12266: #endif
                   12267: #ifdef SQLITE_OMIT_BUILTIN_TEST
                   12268:   "OMIT_BUILTIN_TEST",
                   12269: #endif
                   12270: #ifdef SQLITE_OMIT_CAST
                   12271:   "OMIT_CAST",
                   12272: #endif
                   12273: #ifdef SQLITE_OMIT_CHECK
                   12274:   "OMIT_CHECK",
                   12275: #endif
                   12276: /* // redundant
                   12277: ** #ifdef SQLITE_OMIT_COMPILEOPTION_DIAGS
                   12278: **   "OMIT_COMPILEOPTION_DIAGS",
                   12279: ** #endif
                   12280: */
                   12281: #ifdef SQLITE_OMIT_COMPLETE
                   12282:   "OMIT_COMPLETE",
                   12283: #endif
                   12284: #ifdef SQLITE_OMIT_COMPOUND_SELECT
                   12285:   "OMIT_COMPOUND_SELECT",
                   12286: #endif
                   12287: #ifdef SQLITE_OMIT_DATETIME_FUNCS
                   12288:   "OMIT_DATETIME_FUNCS",
                   12289: #endif
                   12290: #ifdef SQLITE_OMIT_DECLTYPE
                   12291:   "OMIT_DECLTYPE",
                   12292: #endif
                   12293: #ifdef SQLITE_OMIT_DEPRECATED
                   12294:   "OMIT_DEPRECATED",
                   12295: #endif
                   12296: #ifdef SQLITE_OMIT_DISKIO
                   12297:   "OMIT_DISKIO",
                   12298: #endif
                   12299: #ifdef SQLITE_OMIT_EXPLAIN
                   12300:   "OMIT_EXPLAIN",
                   12301: #endif
                   12302: #ifdef SQLITE_OMIT_FLAG_PRAGMAS
                   12303:   "OMIT_FLAG_PRAGMAS",
                   12304: #endif
                   12305: #ifdef SQLITE_OMIT_FLOATING_POINT
                   12306:   "OMIT_FLOATING_POINT",
                   12307: #endif
                   12308: #ifdef SQLITE_OMIT_FOREIGN_KEY
                   12309:   "OMIT_FOREIGN_KEY",
                   12310: #endif
                   12311: #ifdef SQLITE_OMIT_GET_TABLE
                   12312:   "OMIT_GET_TABLE",
                   12313: #endif
                   12314: #ifdef SQLITE_OMIT_INCRBLOB
                   12315:   "OMIT_INCRBLOB",
                   12316: #endif
                   12317: #ifdef SQLITE_OMIT_INTEGRITY_CHECK
                   12318:   "OMIT_INTEGRITY_CHECK",
                   12319: #endif
                   12320: #ifdef SQLITE_OMIT_LIKE_OPTIMIZATION
                   12321:   "OMIT_LIKE_OPTIMIZATION",
                   12322: #endif
                   12323: #ifdef SQLITE_OMIT_LOAD_EXTENSION
                   12324:   "OMIT_LOAD_EXTENSION",
                   12325: #endif
                   12326: #ifdef SQLITE_OMIT_LOCALTIME
                   12327:   "OMIT_LOCALTIME",
                   12328: #endif
                   12329: #ifdef SQLITE_OMIT_LOOKASIDE
                   12330:   "OMIT_LOOKASIDE",
                   12331: #endif
                   12332: #ifdef SQLITE_OMIT_MEMORYDB
                   12333:   "OMIT_MEMORYDB",
                   12334: #endif
                   12335: #ifdef SQLITE_OMIT_OR_OPTIMIZATION
                   12336:   "OMIT_OR_OPTIMIZATION",
                   12337: #endif
                   12338: #ifdef SQLITE_OMIT_PAGER_PRAGMAS
                   12339:   "OMIT_PAGER_PRAGMAS",
                   12340: #endif
                   12341: #ifdef SQLITE_OMIT_PRAGMA
                   12342:   "OMIT_PRAGMA",
                   12343: #endif
                   12344: #ifdef SQLITE_OMIT_PROGRESS_CALLBACK
                   12345:   "OMIT_PROGRESS_CALLBACK",
                   12346: #endif
                   12347: #ifdef SQLITE_OMIT_QUICKBALANCE
                   12348:   "OMIT_QUICKBALANCE",
                   12349: #endif
                   12350: #ifdef SQLITE_OMIT_REINDEX
                   12351:   "OMIT_REINDEX",
                   12352: #endif
                   12353: #ifdef SQLITE_OMIT_SCHEMA_PRAGMAS
                   12354:   "OMIT_SCHEMA_PRAGMAS",
                   12355: #endif
                   12356: #ifdef SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS
                   12357:   "OMIT_SCHEMA_VERSION_PRAGMAS",
                   12358: #endif
                   12359: #ifdef SQLITE_OMIT_SHARED_CACHE
                   12360:   "OMIT_SHARED_CACHE",
                   12361: #endif
                   12362: #ifdef SQLITE_OMIT_SUBQUERY
                   12363:   "OMIT_SUBQUERY",
                   12364: #endif
                   12365: #ifdef SQLITE_OMIT_TCL_VARIABLE
                   12366:   "OMIT_TCL_VARIABLE",
                   12367: #endif
                   12368: #ifdef SQLITE_OMIT_TEMPDB
                   12369:   "OMIT_TEMPDB",
                   12370: #endif
                   12371: #ifdef SQLITE_OMIT_TRACE
                   12372:   "OMIT_TRACE",
                   12373: #endif
                   12374: #ifdef SQLITE_OMIT_TRIGGER
                   12375:   "OMIT_TRIGGER",
                   12376: #endif
                   12377: #ifdef SQLITE_OMIT_TRUNCATE_OPTIMIZATION
                   12378:   "OMIT_TRUNCATE_OPTIMIZATION",
                   12379: #endif
                   12380: #ifdef SQLITE_OMIT_UTF16
                   12381:   "OMIT_UTF16",
                   12382: #endif
                   12383: #ifdef SQLITE_OMIT_VACUUM
                   12384:   "OMIT_VACUUM",
                   12385: #endif
                   12386: #ifdef SQLITE_OMIT_VIEW
                   12387:   "OMIT_VIEW",
                   12388: #endif
                   12389: #ifdef SQLITE_OMIT_VIRTUALTABLE
                   12390:   "OMIT_VIRTUALTABLE",
                   12391: #endif
                   12392: #ifdef SQLITE_OMIT_WAL
                   12393:   "OMIT_WAL",
                   12394: #endif
                   12395: #ifdef SQLITE_OMIT_WSD
                   12396:   "OMIT_WSD",
                   12397: #endif
                   12398: #ifdef SQLITE_OMIT_XFER_OPT
                   12399:   "OMIT_XFER_OPT",
                   12400: #endif
                   12401: #ifdef SQLITE_PERFORMANCE_TRACE
                   12402:   "PERFORMANCE_TRACE",
                   12403: #endif
                   12404: #ifdef SQLITE_PROXY_DEBUG
                   12405:   "PROXY_DEBUG",
                   12406: #endif
                   12407: #ifdef SQLITE_SECURE_DELETE
                   12408:   "SECURE_DELETE",
                   12409: #endif
                   12410: #ifdef SQLITE_SMALL_STACK
                   12411:   "SMALL_STACK",
                   12412: #endif
                   12413: #ifdef SQLITE_SOUNDEX
                   12414:   "SOUNDEX",
                   12415: #endif
                   12416: #ifdef SQLITE_TCL
                   12417:   "TCL",
                   12418: #endif
                   12419: #ifdef SQLITE_TEMP_STORE
                   12420:   "TEMP_STORE=" CTIMEOPT_VAL(SQLITE_TEMP_STORE),
                   12421: #endif
                   12422: #ifdef SQLITE_TEST
                   12423:   "TEST",
                   12424: #endif
                   12425: #ifdef SQLITE_THREADSAFE
                   12426:   "THREADSAFE=" CTIMEOPT_VAL(SQLITE_THREADSAFE),
                   12427: #endif
                   12428: #ifdef SQLITE_USE_ALLOCA
                   12429:   "USE_ALLOCA",
                   12430: #endif
                   12431: #ifdef SQLITE_ZERO_MALLOC
                   12432:   "ZERO_MALLOC"
                   12433: #endif
                   12434: };
                   12435: 
                   12436: /*
                   12437: ** Given the name of a compile-time option, return true if that option
                   12438: ** was used and false if not.
                   12439: **
                   12440: ** The name can optionally begin with "SQLITE_" but the "SQLITE_" prefix
                   12441: ** is not required for a match.
                   12442: */
                   12443: SQLITE_API int sqlite3_compileoption_used(const char *zOptName){
                   12444:   int i, n;
                   12445:   if( sqlite3StrNICmp(zOptName, "SQLITE_", 7)==0 ) zOptName += 7;
                   12446:   n = sqlite3Strlen30(zOptName);
                   12447: 
                   12448:   /* Since ArraySize(azCompileOpt) is normally in single digits, a
                   12449:   ** linear search is adequate.  No need for a binary search. */
                   12450:   for(i=0; i<ArraySize(azCompileOpt); i++){
                   12451:     if(   (sqlite3StrNICmp(zOptName, azCompileOpt[i], n)==0)
                   12452:        && ( (azCompileOpt[i][n]==0) || (azCompileOpt[i][n]=='=') ) ) return 1;
                   12453:   }
                   12454:   return 0;
                   12455: }
                   12456: 
                   12457: /*
                   12458: ** Return the N-th compile-time option string.  If N is out of range,
                   12459: ** return a NULL pointer.
                   12460: */
                   12461: SQLITE_API const char *sqlite3_compileoption_get(int N){
                   12462:   if( N>=0 && N<ArraySize(azCompileOpt) ){
                   12463:     return azCompileOpt[N];
                   12464:   }
                   12465:   return 0;
                   12466: }
                   12467: 
                   12468: #endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */
                   12469: 
                   12470: /************** End of ctime.c ***********************************************/
                   12471: /************** Begin file status.c ******************************************/
                   12472: /*
                   12473: ** 2008 June 18
                   12474: **
                   12475: ** The author disclaims copyright to this source code.  In place of
                   12476: ** a legal notice, here is a blessing:
                   12477: **
                   12478: **    May you do good and not evil.
                   12479: **    May you find forgiveness for yourself and forgive others.
                   12480: **    May you share freely, never taking more than you give.
                   12481: **
                   12482: *************************************************************************
                   12483: **
                   12484: ** This module implements the sqlite3_status() interface and related
                   12485: ** functionality.
                   12486: */
                   12487: /************** Include vdbeInt.h in the middle of status.c ******************/
                   12488: /************** Begin file vdbeInt.h *****************************************/
                   12489: /*
                   12490: ** 2003 September 6
                   12491: **
                   12492: ** The author disclaims copyright to this source code.  In place of
                   12493: ** a legal notice, here is a blessing:
                   12494: **
                   12495: **    May you do good and not evil.
                   12496: **    May you find forgiveness for yourself and forgive others.
                   12497: **    May you share freely, never taking more than you give.
                   12498: **
                   12499: *************************************************************************
                   12500: ** This is the header file for information that is private to the
                   12501: ** VDBE.  This information used to all be at the top of the single
                   12502: ** source code file "vdbe.c".  When that file became too big (over
                   12503: ** 6000 lines long) it was split up into several smaller files and
                   12504: ** this header information was factored out.
                   12505: */
                   12506: #ifndef _VDBEINT_H_
                   12507: #define _VDBEINT_H_
                   12508: 
                   12509: /*
                   12510: ** SQL is translated into a sequence of instructions to be
                   12511: ** executed by a virtual machine.  Each instruction is an instance
                   12512: ** of the following structure.
                   12513: */
                   12514: typedef struct VdbeOp Op;
                   12515: 
                   12516: /*
                   12517: ** Boolean values
                   12518: */
                   12519: typedef unsigned char Bool;
                   12520: 
                   12521: /*
                   12522: ** A cursor is a pointer into a single BTree within a database file.
                   12523: ** The cursor can seek to a BTree entry with a particular key, or
                   12524: ** loop over all entries of the Btree.  You can also insert new BTree
                   12525: ** entries or retrieve the key or data from the entry that the cursor
                   12526: ** is currently pointing to.
                   12527: ** 
                   12528: ** Every cursor that the virtual machine has open is represented by an
                   12529: ** instance of the following structure.
                   12530: */
                   12531: struct VdbeCursor {
                   12532:   BtCursor *pCursor;    /* The cursor structure of the backend */
                   12533:   Btree *pBt;           /* Separate file holding temporary table */
                   12534:   KeyInfo *pKeyInfo;    /* Info about index keys needed by index cursors */
                   12535:   int iDb;              /* Index of cursor database in db->aDb[] (or -1) */
                   12536:   int pseudoTableReg;   /* Register holding pseudotable content. */
                   12537:   int nField;           /* Number of fields in the header */
                   12538:   Bool zeroed;          /* True if zeroed out and ready for reuse */
                   12539:   Bool rowidIsValid;    /* True if lastRowid is valid */
                   12540:   Bool atFirst;         /* True if pointing to first entry */
                   12541:   Bool useRandomRowid;  /* Generate new record numbers semi-randomly */
                   12542:   Bool nullRow;         /* True if pointing to a row with no data */
                   12543:   Bool deferredMoveto;  /* A call to sqlite3BtreeMoveto() is needed */
                   12544:   Bool isTable;         /* True if a table requiring integer keys */
                   12545:   Bool isIndex;         /* True if an index containing keys only - no data */
                   12546:   Bool isOrdered;       /* True if the underlying table is BTREE_UNORDERED */
                   12547:   sqlite3_vtab_cursor *pVtabCursor;  /* The cursor for a virtual table */
                   12548:   const sqlite3_module *pModule;     /* Module for cursor pVtabCursor */
                   12549:   i64 seqCount;         /* Sequence counter */
                   12550:   i64 movetoTarget;     /* Argument to the deferred sqlite3BtreeMoveto() */
                   12551:   i64 lastRowid;        /* Last rowid from a Next or NextIdx operation */
                   12552: 
                   12553:   /* Result of last sqlite3BtreeMoveto() done by an OP_NotExists or 
                   12554:   ** OP_IsUnique opcode on this cursor. */
                   12555:   int seekResult;
                   12556: 
                   12557:   /* Cached information about the header for the data record that the
                   12558:   ** cursor is currently pointing to.  Only valid if cacheStatus matches
                   12559:   ** Vdbe.cacheCtr.  Vdbe.cacheCtr will never take on the value of
                   12560:   ** CACHE_STALE and so setting cacheStatus=CACHE_STALE guarantees that
                   12561:   ** the cache is out of date.
                   12562:   **
                   12563:   ** aRow might point to (ephemeral) data for the current row, or it might
                   12564:   ** be NULL.
                   12565:   */
                   12566:   u32 cacheStatus;      /* Cache is valid if this matches Vdbe.cacheCtr */
                   12567:   int payloadSize;      /* Total number of bytes in the record */
                   12568:   u32 *aType;           /* Type values for all entries in the record */
                   12569:   u32 *aOffset;         /* Cached offsets to the start of each columns data */
                   12570:   u8 *aRow;             /* Data for the current row, if all on one page */
                   12571: };
                   12572: typedef struct VdbeCursor VdbeCursor;
                   12573: 
                   12574: /*
                   12575: ** When a sub-program is executed (OP_Program), a structure of this type
                   12576: ** is allocated to store the current value of the program counter, as
                   12577: ** well as the current memory cell array and various other frame specific
                   12578: ** values stored in the Vdbe struct. When the sub-program is finished, 
                   12579: ** these values are copied back to the Vdbe from the VdbeFrame structure,
                   12580: ** restoring the state of the VM to as it was before the sub-program
                   12581: ** began executing.
                   12582: **
                   12583: ** The memory for a VdbeFrame object is allocated and managed by a memory
                   12584: ** cell in the parent (calling) frame. When the memory cell is deleted or
                   12585: ** overwritten, the VdbeFrame object is not freed immediately. Instead, it
                   12586: ** is linked into the Vdbe.pDelFrame list. The contents of the Vdbe.pDelFrame
                   12587: ** list is deleted when the VM is reset in VdbeHalt(). The reason for doing
                   12588: ** this instead of deleting the VdbeFrame immediately is to avoid recursive
                   12589: ** calls to sqlite3VdbeMemRelease() when the memory cells belonging to the
                   12590: ** child frame are released.
                   12591: **
                   12592: ** The currently executing frame is stored in Vdbe.pFrame. Vdbe.pFrame is
                   12593: ** set to NULL if the currently executing frame is the main program.
                   12594: */
                   12595: typedef struct VdbeFrame VdbeFrame;
                   12596: struct VdbeFrame {
                   12597:   Vdbe *v;                /* VM this frame belongs to */
                   12598:   int pc;                 /* Program Counter in parent (calling) frame */
                   12599:   Op *aOp;                /* Program instructions for parent frame */
                   12600:   int nOp;                /* Size of aOp array */
                   12601:   Mem *aMem;              /* Array of memory cells for parent frame */
                   12602:   int nMem;               /* Number of entries in aMem */
                   12603:   VdbeCursor **apCsr;     /* Array of Vdbe cursors for parent frame */
                   12604:   u16 nCursor;            /* Number of entries in apCsr */
                   12605:   void *token;            /* Copy of SubProgram.token */
                   12606:   int nChildMem;          /* Number of memory cells for child frame */
                   12607:   int nChildCsr;          /* Number of cursors for child frame */
                   12608:   i64 lastRowid;          /* Last insert rowid (sqlite3.lastRowid) */
                   12609:   int nChange;            /* Statement changes (Vdbe.nChanges)     */
                   12610:   VdbeFrame *pParent;     /* Parent of this frame, or NULL if parent is main */
                   12611: };
                   12612: 
                   12613: #define VdbeFrameMem(p) ((Mem *)&((u8 *)p)[ROUND8(sizeof(VdbeFrame))])
                   12614: 
                   12615: /*
                   12616: ** A value for VdbeCursor.cacheValid that means the cache is always invalid.
                   12617: */
                   12618: #define CACHE_STALE 0
                   12619: 
                   12620: /*
                   12621: ** Internally, the vdbe manipulates nearly all SQL values as Mem
                   12622: ** structures. Each Mem struct may cache multiple representations (string,
                   12623: ** integer etc.) of the same value.
                   12624: */
                   12625: struct Mem {
                   12626:   sqlite3 *db;        /* The associated database connection */
                   12627:   char *z;            /* String or BLOB value */
                   12628:   double r;           /* Real value */
                   12629:   union {
                   12630:     i64 i;              /* Integer value used when MEM_Int is set in flags */
                   12631:     int nZero;          /* Used when bit MEM_Zero is set in flags */
                   12632:     FuncDef *pDef;      /* Used only when flags==MEM_Agg */
                   12633:     RowSet *pRowSet;    /* Used only when flags==MEM_RowSet */
                   12634:     VdbeFrame *pFrame;  /* Used when flags==MEM_Frame */
                   12635:   } u;
                   12636:   int n;              /* Number of characters in string value, excluding '\0' */
                   12637:   u16 flags;          /* Some combination of MEM_Null, MEM_Str, MEM_Dyn, etc. */
                   12638:   u8  type;           /* One of SQLITE_NULL, SQLITE_TEXT, SQLITE_INTEGER, etc */
                   12639:   u8  enc;            /* SQLITE_UTF8, SQLITE_UTF16BE, SQLITE_UTF16LE */
                   12640: #ifdef SQLITE_DEBUG
                   12641:   Mem *pScopyFrom;    /* This Mem is a shallow copy of pScopyFrom */
                   12642:   void *pFiller;      /* So that sizeof(Mem) is a multiple of 8 */
                   12643: #endif
                   12644:   void (*xDel)(void *);  /* If not null, call this function to delete Mem.z */
                   12645:   char *zMalloc;      /* Dynamic buffer allocated by sqlite3_malloc() */
                   12646: };
                   12647: 
                   12648: /* One or more of the following flags are set to indicate the validOK
                   12649: ** representations of the value stored in the Mem struct.
                   12650: **
                   12651: ** If the MEM_Null flag is set, then the value is an SQL NULL value.
                   12652: ** No other flags may be set in this case.
                   12653: **
                   12654: ** If the MEM_Str flag is set then Mem.z points at a string representation.
                   12655: ** Usually this is encoded in the same unicode encoding as the main
                   12656: ** database (see below for exceptions). If the MEM_Term flag is also
                   12657: ** set, then the string is nul terminated. The MEM_Int and MEM_Real 
                   12658: ** flags may coexist with the MEM_Str flag.
                   12659: */
                   12660: #define MEM_Null      0x0001   /* Value is NULL */
                   12661: #define MEM_Str       0x0002   /* Value is a string */
                   12662: #define MEM_Int       0x0004   /* Value is an integer */
                   12663: #define MEM_Real      0x0008   /* Value is a real number */
                   12664: #define MEM_Blob      0x0010   /* Value is a BLOB */
                   12665: #define MEM_RowSet    0x0020   /* Value is a RowSet object */
                   12666: #define MEM_Frame     0x0040   /* Value is a VdbeFrame object */
                   12667: #define MEM_Invalid   0x0080   /* Value is undefined */
                   12668: #define MEM_TypeMask  0x00ff   /* Mask of type bits */
                   12669: 
                   12670: /* Whenever Mem contains a valid string or blob representation, one of
                   12671: ** the following flags must be set to determine the memory management
                   12672: ** policy for Mem.z.  The MEM_Term flag tells us whether or not the
                   12673: ** string is \000 or \u0000 terminated
                   12674: */
                   12675: #define MEM_Term      0x0200   /* String rep is nul terminated */
                   12676: #define MEM_Dyn       0x0400   /* Need to call sqliteFree() on Mem.z */
                   12677: #define MEM_Static    0x0800   /* Mem.z points to a static string */
                   12678: #define MEM_Ephem     0x1000   /* Mem.z points to an ephemeral string */
                   12679: #define MEM_Agg       0x2000   /* Mem.z points to an agg function context */
                   12680: #define MEM_Zero      0x4000   /* Mem.i contains count of 0s appended to blob */
                   12681: #ifdef SQLITE_OMIT_INCRBLOB
                   12682:   #undef MEM_Zero
                   12683:   #define MEM_Zero 0x0000
                   12684: #endif
                   12685: 
                   12686: /*
                   12687: ** Clear any existing type flags from a Mem and replace them with f
                   12688: */
                   12689: #define MemSetTypeFlag(p, f) \
                   12690:    ((p)->flags = ((p)->flags&~(MEM_TypeMask|MEM_Zero))|f)
                   12691: 
                   12692: /*
                   12693: ** Return true if a memory cell is not marked as invalid.  This macro
                   12694: ** is for use inside assert() statements only.
                   12695: */
                   12696: #ifdef SQLITE_DEBUG
                   12697: #define memIsValid(M)  ((M)->flags & MEM_Invalid)==0
                   12698: #endif
                   12699: 
                   12700: 
                   12701: /* A VdbeFunc is just a FuncDef (defined in sqliteInt.h) that contains
                   12702: ** additional information about auxiliary information bound to arguments
                   12703: ** of the function.  This is used to implement the sqlite3_get_auxdata()
                   12704: ** and sqlite3_set_auxdata() APIs.  The "auxdata" is some auxiliary data
                   12705: ** that can be associated with a constant argument to a function.  This
                   12706: ** allows functions such as "regexp" to compile their constant regular
                   12707: ** expression argument once and reused the compiled code for multiple
                   12708: ** invocations.
                   12709: */
                   12710: struct VdbeFunc {
                   12711:   FuncDef *pFunc;               /* The definition of the function */
                   12712:   int nAux;                     /* Number of entries allocated for apAux[] */
                   12713:   struct AuxData {
                   12714:     void *pAux;                   /* Aux data for the i-th argument */
                   12715:     void (*xDelete)(void *);      /* Destructor for the aux data */
                   12716:   } apAux[1];                   /* One slot for each function argument */
                   12717: };
                   12718: 
                   12719: /*
                   12720: ** The "context" argument for a installable function.  A pointer to an
                   12721: ** instance of this structure is the first argument to the routines used
                   12722: ** implement the SQL functions.
                   12723: **
                   12724: ** There is a typedef for this structure in sqlite.h.  So all routines,
                   12725: ** even the public interface to SQLite, can use a pointer to this structure.
                   12726: ** But this file is the only place where the internal details of this
                   12727: ** structure are known.
                   12728: **
                   12729: ** This structure is defined inside of vdbeInt.h because it uses substructures
                   12730: ** (Mem) which are only defined there.
                   12731: */
                   12732: struct sqlite3_context {
                   12733:   FuncDef *pFunc;       /* Pointer to function information.  MUST BE FIRST */
                   12734:   VdbeFunc *pVdbeFunc;  /* Auxilary data, if created. */
                   12735:   Mem s;                /* The return value is stored here */
                   12736:   Mem *pMem;            /* Memory cell used to store aggregate context */
                   12737:   int isError;          /* Error code returned by the function. */
                   12738:   CollSeq *pColl;       /* Collating sequence */
                   12739: };
                   12740: 
                   12741: /*
                   12742: ** An instance of the virtual machine.  This structure contains the complete
                   12743: ** state of the virtual machine.
                   12744: **
                   12745: ** The "sqlite3_stmt" structure pointer that is returned by sqlite3_prepare()
                   12746: ** is really a pointer to an instance of this structure.
                   12747: **
                   12748: ** The Vdbe.inVtabMethod variable is set to non-zero for the duration of
                   12749: ** any virtual table method invocations made by the vdbe program. It is
                   12750: ** set to 2 for xDestroy method calls and 1 for all other methods. This
                   12751: ** variable is used for two purposes: to allow xDestroy methods to execute
                   12752: ** "DROP TABLE" statements and to prevent some nasty side effects of
                   12753: ** malloc failure when SQLite is invoked recursively by a virtual table 
                   12754: ** method function.
                   12755: */
                   12756: struct Vdbe {
                   12757:   sqlite3 *db;            /* The database connection that owns this statement */
                   12758:   Op *aOp;                /* Space to hold the virtual machine's program */
                   12759:   Mem *aMem;              /* The memory locations */
                   12760:   Mem **apArg;            /* Arguments to currently executing user function */
                   12761:   Mem *aColName;          /* Column names to return */
                   12762:   Mem *pResultSet;        /* Pointer to an array of results */
                   12763:   int nMem;               /* Number of memory locations currently allocated */
                   12764:   int nOp;                /* Number of instructions in the program */
                   12765:   int nOpAlloc;           /* Number of slots allocated for aOp[] */
                   12766:   int nLabel;             /* Number of labels used */
                   12767:   int nLabelAlloc;        /* Number of slots allocated in aLabel[] */
                   12768:   int *aLabel;            /* Space to hold the labels */
                   12769:   u16 nResColumn;         /* Number of columns in one row of the result set */
                   12770:   u16 nCursor;            /* Number of slots in apCsr[] */
                   12771:   u32 magic;              /* Magic number for sanity checking */
                   12772:   char *zErrMsg;          /* Error message written here */
                   12773:   Vdbe *pPrev,*pNext;     /* Linked list of VDBEs with the same Vdbe.db */
                   12774:   VdbeCursor **apCsr;     /* One element of this array for each open cursor */
                   12775:   Mem *aVar;              /* Values for the OP_Variable opcode. */
                   12776:   char **azVar;           /* Name of variables */
                   12777:   ynVar nVar;             /* Number of entries in aVar[] */
                   12778:   ynVar nzVar;            /* Number of entries in azVar[] */
                   12779:   u32 cacheCtr;           /* VdbeCursor row cache generation counter */
                   12780:   int pc;                 /* The program counter */
                   12781:   int rc;                 /* Value to return */
                   12782:   u8 errorAction;         /* Recovery action to do in case of an error */
                   12783:   u8 explain;             /* True if EXPLAIN present on SQL command */
                   12784:   u8 changeCntOn;         /* True to update the change-counter */
                   12785:   u8 expired;             /* True if the VM needs to be recompiled */
                   12786:   u8 runOnlyOnce;         /* Automatically expire on reset */
                   12787:   u8 minWriteFileFormat;  /* Minimum file format for writable database files */
                   12788:   u8 inVtabMethod;        /* See comments above */
                   12789:   u8 usesStmtJournal;     /* True if uses a statement journal */
                   12790:   u8 readOnly;            /* True for read-only statements */
                   12791:   u8 isPrepareV2;         /* True if prepared with prepare_v2() */
                   12792:   int nChange;            /* Number of db changes made since last reset */
                   12793:   yDbMask btreeMask;      /* Bitmask of db->aDb[] entries referenced */
                   12794:   yDbMask lockMask;       /* Subset of btreeMask that requires a lock */
                   12795:   int iStatement;         /* Statement number (or 0 if has not opened stmt) */
                   12796:   int aCounter[3];        /* Counters used by sqlite3_stmt_status() */
                   12797: #ifndef SQLITE_OMIT_TRACE
                   12798:   i64 startTime;          /* Time when query started - used for profiling */
                   12799: #endif
                   12800:   i64 nFkConstraint;      /* Number of imm. FK constraints this VM */
                   12801:   i64 nStmtDefCons;       /* Number of def. constraints when stmt started */
                   12802:   char *zSql;             /* Text of the SQL statement that generated this */
                   12803:   void *pFree;            /* Free this when deleting the vdbe */
                   12804: #ifdef SQLITE_DEBUG
                   12805:   FILE *trace;            /* Write an execution trace here, if not NULL */
                   12806: #endif
                   12807:   VdbeFrame *pFrame;      /* Parent frame */
                   12808:   VdbeFrame *pDelFrame;   /* List of frame objects to free on VM reset */
                   12809:   int nFrame;             /* Number of frames in pFrame list */
                   12810:   u32 expmask;            /* Binding to these vars invalidates VM */
                   12811:   SubProgram *pProgram;   /* Linked list of all sub-programs used by VM */
                   12812: };
                   12813: 
                   12814: /*
                   12815: ** The following are allowed values for Vdbe.magic
                   12816: */
                   12817: #define VDBE_MAGIC_INIT     0x26bceaa5    /* Building a VDBE program */
                   12818: #define VDBE_MAGIC_RUN      0xbdf20da3    /* VDBE is ready to execute */
                   12819: #define VDBE_MAGIC_HALT     0x519c2973    /* VDBE has completed execution */
                   12820: #define VDBE_MAGIC_DEAD     0xb606c3c8    /* The VDBE has been deallocated */
                   12821: 
                   12822: /*
                   12823: ** Function prototypes
                   12824: */
                   12825: SQLITE_PRIVATE void sqlite3VdbeFreeCursor(Vdbe *, VdbeCursor*);
                   12826: void sqliteVdbePopStack(Vdbe*,int);
                   12827: SQLITE_PRIVATE int sqlite3VdbeCursorMoveto(VdbeCursor*);
                   12828: #if defined(SQLITE_DEBUG) || defined(VDBE_PROFILE)
                   12829: SQLITE_PRIVATE void sqlite3VdbePrintOp(FILE*, int, Op*);
                   12830: #endif
                   12831: SQLITE_PRIVATE u32 sqlite3VdbeSerialTypeLen(u32);
                   12832: SQLITE_PRIVATE u32 sqlite3VdbeSerialType(Mem*, int);
                   12833: SQLITE_PRIVATE u32 sqlite3VdbeSerialPut(unsigned char*, int, Mem*, int);
                   12834: SQLITE_PRIVATE u32 sqlite3VdbeSerialGet(const unsigned char*, u32, Mem*);
                   12835: SQLITE_PRIVATE void sqlite3VdbeDeleteAuxData(VdbeFunc*, int);
                   12836: 
                   12837: int sqlite2BtreeKeyCompare(BtCursor *, const void *, int, int, int *);
                   12838: SQLITE_PRIVATE int sqlite3VdbeIdxKeyCompare(VdbeCursor*,UnpackedRecord*,int*);
                   12839: SQLITE_PRIVATE int sqlite3VdbeIdxRowid(sqlite3*, BtCursor *, i64 *);
                   12840: SQLITE_PRIVATE int sqlite3MemCompare(const Mem*, const Mem*, const CollSeq*);
                   12841: SQLITE_PRIVATE int sqlite3VdbeExec(Vdbe*);
                   12842: SQLITE_PRIVATE int sqlite3VdbeList(Vdbe*);
                   12843: SQLITE_PRIVATE int sqlite3VdbeHalt(Vdbe*);
                   12844: SQLITE_PRIVATE int sqlite3VdbeChangeEncoding(Mem *, int);
                   12845: SQLITE_PRIVATE int sqlite3VdbeMemTooBig(Mem*);
                   12846: SQLITE_PRIVATE int sqlite3VdbeMemCopy(Mem*, const Mem*);
                   12847: SQLITE_PRIVATE void sqlite3VdbeMemShallowCopy(Mem*, const Mem*, int);
                   12848: SQLITE_PRIVATE void sqlite3VdbeMemMove(Mem*, Mem*);
                   12849: SQLITE_PRIVATE int sqlite3VdbeMemNulTerminate(Mem*);
                   12850: SQLITE_PRIVATE int sqlite3VdbeMemSetStr(Mem*, const char*, int, u8, void(*)(void*));
                   12851: SQLITE_PRIVATE void sqlite3VdbeMemSetInt64(Mem*, i64);
                   12852: #ifdef SQLITE_OMIT_FLOATING_POINT
                   12853: # define sqlite3VdbeMemSetDouble sqlite3VdbeMemSetInt64
                   12854: #else
                   12855: SQLITE_PRIVATE   void sqlite3VdbeMemSetDouble(Mem*, double);
                   12856: #endif
                   12857: SQLITE_PRIVATE void sqlite3VdbeMemSetNull(Mem*);
                   12858: SQLITE_PRIVATE void sqlite3VdbeMemSetZeroBlob(Mem*,int);
                   12859: SQLITE_PRIVATE void sqlite3VdbeMemSetRowSet(Mem*);
                   12860: SQLITE_PRIVATE int sqlite3VdbeMemMakeWriteable(Mem*);
                   12861: SQLITE_PRIVATE int sqlite3VdbeMemStringify(Mem*, int);
                   12862: SQLITE_PRIVATE i64 sqlite3VdbeIntValue(Mem*);
                   12863: SQLITE_PRIVATE int sqlite3VdbeMemIntegerify(Mem*);
                   12864: SQLITE_PRIVATE double sqlite3VdbeRealValue(Mem*);
                   12865: SQLITE_PRIVATE void sqlite3VdbeIntegerAffinity(Mem*);
                   12866: SQLITE_PRIVATE int sqlite3VdbeMemRealify(Mem*);
                   12867: SQLITE_PRIVATE int sqlite3VdbeMemNumerify(Mem*);
                   12868: SQLITE_PRIVATE int sqlite3VdbeMemFromBtree(BtCursor*,int,int,int,Mem*);
                   12869: SQLITE_PRIVATE void sqlite3VdbeMemRelease(Mem *p);
                   12870: SQLITE_PRIVATE void sqlite3VdbeMemReleaseExternal(Mem *p);
                   12871: SQLITE_PRIVATE int sqlite3VdbeMemFinalize(Mem*, FuncDef*);
                   12872: SQLITE_PRIVATE const char *sqlite3OpcodeName(int);
                   12873: SQLITE_PRIVATE int sqlite3VdbeMemGrow(Mem *pMem, int n, int preserve);
                   12874: SQLITE_PRIVATE int sqlite3VdbeCloseStatement(Vdbe *, int);
                   12875: SQLITE_PRIVATE void sqlite3VdbeFrameDelete(VdbeFrame*);
                   12876: SQLITE_PRIVATE int sqlite3VdbeFrameRestore(VdbeFrame *);
                   12877: SQLITE_PRIVATE void sqlite3VdbeMemStoreType(Mem *pMem);
                   12878: 
                   12879: #if !defined(SQLITE_OMIT_SHARED_CACHE) && SQLITE_THREADSAFE>0
                   12880: SQLITE_PRIVATE   void sqlite3VdbeEnter(Vdbe*);
                   12881: SQLITE_PRIVATE   void sqlite3VdbeLeave(Vdbe*);
                   12882: #else
                   12883: # define sqlite3VdbeEnter(X)
                   12884: # define sqlite3VdbeLeave(X)
                   12885: #endif
                   12886: 
                   12887: #ifdef SQLITE_DEBUG
                   12888: SQLITE_PRIVATE void sqlite3VdbeMemPrepareToChange(Vdbe*,Mem*);
                   12889: #endif
                   12890: 
                   12891: #ifndef SQLITE_OMIT_FOREIGN_KEY
                   12892: SQLITE_PRIVATE int sqlite3VdbeCheckFk(Vdbe *, int);
                   12893: #else
                   12894: # define sqlite3VdbeCheckFk(p,i) 0
                   12895: #endif
                   12896: 
                   12897: SQLITE_PRIVATE int sqlite3VdbeMemTranslate(Mem*, u8);
                   12898: #ifdef SQLITE_DEBUG
                   12899: SQLITE_PRIVATE   void sqlite3VdbePrintSql(Vdbe*);
                   12900: SQLITE_PRIVATE   void sqlite3VdbeMemPrettyPrint(Mem *pMem, char *zBuf);
                   12901: #endif
                   12902: SQLITE_PRIVATE int sqlite3VdbeMemHandleBom(Mem *pMem);
                   12903: 
                   12904: #ifndef SQLITE_OMIT_INCRBLOB
                   12905: SQLITE_PRIVATE   int sqlite3VdbeMemExpandBlob(Mem *);
                   12906: #else
                   12907:   #define sqlite3VdbeMemExpandBlob(x) SQLITE_OK
                   12908: #endif
                   12909: 
                   12910: #endif /* !defined(_VDBEINT_H_) */
                   12911: 
                   12912: /************** End of vdbeInt.h *********************************************/
                   12913: /************** Continuing where we left off in status.c *********************/
                   12914: 
                   12915: /*
                   12916: ** Variables in which to record status information.
                   12917: */
                   12918: typedef struct sqlite3StatType sqlite3StatType;
                   12919: static SQLITE_WSD struct sqlite3StatType {
                   12920:   int nowValue[10];         /* Current value */
                   12921:   int mxValue[10];          /* Maximum value */
                   12922: } sqlite3Stat = { {0,}, {0,} };
                   12923: 
                   12924: 
                   12925: /* The "wsdStat" macro will resolve to the status information
                   12926: ** state vector.  If writable static data is unsupported on the target,
                   12927: ** we have to locate the state vector at run-time.  In the more common
                   12928: ** case where writable static data is supported, wsdStat can refer directly
                   12929: ** to the "sqlite3Stat" state vector declared above.
                   12930: */
                   12931: #ifdef SQLITE_OMIT_WSD
                   12932: # define wsdStatInit  sqlite3StatType *x = &GLOBAL(sqlite3StatType,sqlite3Stat)
                   12933: # define wsdStat x[0]
                   12934: #else
                   12935: # define wsdStatInit
                   12936: # define wsdStat sqlite3Stat
                   12937: #endif
                   12938: 
                   12939: /*
                   12940: ** Return the current value of a status parameter.
                   12941: */
                   12942: SQLITE_PRIVATE int sqlite3StatusValue(int op){
                   12943:   wsdStatInit;
                   12944:   assert( op>=0 && op<ArraySize(wsdStat.nowValue) );
                   12945:   return wsdStat.nowValue[op];
                   12946: }
                   12947: 
                   12948: /*
                   12949: ** Add N to the value of a status record.  It is assumed that the
                   12950: ** caller holds appropriate locks.
                   12951: */
                   12952: SQLITE_PRIVATE void sqlite3StatusAdd(int op, int N){
                   12953:   wsdStatInit;
                   12954:   assert( op>=0 && op<ArraySize(wsdStat.nowValue) );
                   12955:   wsdStat.nowValue[op] += N;
                   12956:   if( wsdStat.nowValue[op]>wsdStat.mxValue[op] ){
                   12957:     wsdStat.mxValue[op] = wsdStat.nowValue[op];
                   12958:   }
                   12959: }
                   12960: 
                   12961: /*
                   12962: ** Set the value of a status to X.
                   12963: */
                   12964: SQLITE_PRIVATE void sqlite3StatusSet(int op, int X){
                   12965:   wsdStatInit;
                   12966:   assert( op>=0 && op<ArraySize(wsdStat.nowValue) );
                   12967:   wsdStat.nowValue[op] = X;
                   12968:   if( wsdStat.nowValue[op]>wsdStat.mxValue[op] ){
                   12969:     wsdStat.mxValue[op] = wsdStat.nowValue[op];
                   12970:   }
                   12971: }
                   12972: 
                   12973: /*
                   12974: ** Query status information.
                   12975: **
                   12976: ** This implementation assumes that reading or writing an aligned
                   12977: ** 32-bit integer is an atomic operation.  If that assumption is not true,
                   12978: ** then this routine is not threadsafe.
                   12979: */
                   12980: SQLITE_API int sqlite3_status(int op, int *pCurrent, int *pHighwater, int resetFlag){
                   12981:   wsdStatInit;
                   12982:   if( op<0 || op>=ArraySize(wsdStat.nowValue) ){
                   12983:     return SQLITE_MISUSE_BKPT;
                   12984:   }
                   12985:   *pCurrent = wsdStat.nowValue[op];
                   12986:   *pHighwater = wsdStat.mxValue[op];
                   12987:   if( resetFlag ){
                   12988:     wsdStat.mxValue[op] = wsdStat.nowValue[op];
                   12989:   }
                   12990:   return SQLITE_OK;
                   12991: }
                   12992: 
                   12993: /*
                   12994: ** Query status information for a single database connection
                   12995: */
                   12996: SQLITE_API int sqlite3_db_status(
                   12997:   sqlite3 *db,          /* The database connection whose status is desired */
                   12998:   int op,               /* Status verb */
                   12999:   int *pCurrent,        /* Write current value here */
                   13000:   int *pHighwater,      /* Write high-water mark here */
                   13001:   int resetFlag         /* Reset high-water mark if true */
                   13002: ){
                   13003:   int rc = SQLITE_OK;   /* Return code */
                   13004:   sqlite3_mutex_enter(db->mutex);
                   13005:   switch( op ){
                   13006:     case SQLITE_DBSTATUS_LOOKASIDE_USED: {
                   13007:       *pCurrent = db->lookaside.nOut;
                   13008:       *pHighwater = db->lookaside.mxOut;
                   13009:       if( resetFlag ){
                   13010:         db->lookaside.mxOut = db->lookaside.nOut;
                   13011:       }
                   13012:       break;
                   13013:     }
                   13014: 
                   13015:     case SQLITE_DBSTATUS_LOOKASIDE_HIT:
                   13016:     case SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE:
                   13017:     case SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL: {
                   13018:       testcase( op==SQLITE_DBSTATUS_LOOKASIDE_HIT );
                   13019:       testcase( op==SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE );
                   13020:       testcase( op==SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL );
                   13021:       assert( (op-SQLITE_DBSTATUS_LOOKASIDE_HIT)>=0 );
                   13022:       assert( (op-SQLITE_DBSTATUS_LOOKASIDE_HIT)<3 );
                   13023:       *pCurrent = 0;
                   13024:       *pHighwater = db->lookaside.anStat[op - SQLITE_DBSTATUS_LOOKASIDE_HIT];
                   13025:       if( resetFlag ){
                   13026:         db->lookaside.anStat[op - SQLITE_DBSTATUS_LOOKASIDE_HIT] = 0;
                   13027:       }
                   13028:       break;
                   13029:     }
                   13030: 
                   13031:     /* 
                   13032:     ** Return an approximation for the amount of memory currently used
                   13033:     ** by all pagers associated with the given database connection.  The
                   13034:     ** highwater mark is meaningless and is returned as zero.
                   13035:     */
                   13036:     case SQLITE_DBSTATUS_CACHE_USED: {
                   13037:       int totalUsed = 0;
                   13038:       int i;
                   13039:       sqlite3BtreeEnterAll(db);
                   13040:       for(i=0; i<db->nDb; i++){
                   13041:         Btree *pBt = db->aDb[i].pBt;
                   13042:         if( pBt ){
                   13043:           Pager *pPager = sqlite3BtreePager(pBt);
                   13044:           totalUsed += sqlite3PagerMemUsed(pPager);
                   13045:         }
                   13046:       }
                   13047:       sqlite3BtreeLeaveAll(db);
                   13048:       *pCurrent = totalUsed;
                   13049:       *pHighwater = 0;
                   13050:       break;
                   13051:     }
                   13052: 
                   13053:     /*
                   13054:     ** *pCurrent gets an accurate estimate of the amount of memory used
                   13055:     ** to store the schema for all databases (main, temp, and any ATTACHed
                   13056:     ** databases.  *pHighwater is set to zero.
                   13057:     */
                   13058:     case SQLITE_DBSTATUS_SCHEMA_USED: {
                   13059:       int i;                      /* Used to iterate through schemas */
                   13060:       int nByte = 0;              /* Used to accumulate return value */
                   13061: 
                   13062:       sqlite3BtreeEnterAll(db);
                   13063:       db->pnBytesFreed = &nByte;
                   13064:       for(i=0; i<db->nDb; i++){
                   13065:         Schema *pSchema = db->aDb[i].pSchema;
                   13066:         if( ALWAYS(pSchema!=0) ){
                   13067:           HashElem *p;
                   13068: 
                   13069:           nByte += sqlite3GlobalConfig.m.xRoundup(sizeof(HashElem)) * (
                   13070:               pSchema->tblHash.count 
                   13071:             + pSchema->trigHash.count
                   13072:             + pSchema->idxHash.count
                   13073:             + pSchema->fkeyHash.count
                   13074:           );
                   13075:           nByte += sqlite3MallocSize(pSchema->tblHash.ht);
                   13076:           nByte += sqlite3MallocSize(pSchema->trigHash.ht);
                   13077:           nByte += sqlite3MallocSize(pSchema->idxHash.ht);
                   13078:           nByte += sqlite3MallocSize(pSchema->fkeyHash.ht);
                   13079: 
                   13080:           for(p=sqliteHashFirst(&pSchema->trigHash); p; p=sqliteHashNext(p)){
                   13081:             sqlite3DeleteTrigger(db, (Trigger*)sqliteHashData(p));
                   13082:           }
                   13083:           for(p=sqliteHashFirst(&pSchema->tblHash); p; p=sqliteHashNext(p)){
                   13084:             sqlite3DeleteTable(db, (Table *)sqliteHashData(p));
                   13085:           }
                   13086:         }
                   13087:       }
                   13088:       db->pnBytesFreed = 0;
                   13089:       sqlite3BtreeLeaveAll(db);
                   13090: 
                   13091:       *pHighwater = 0;
                   13092:       *pCurrent = nByte;
                   13093:       break;
                   13094:     }
                   13095: 
                   13096:     /*
                   13097:     ** *pCurrent gets an accurate estimate of the amount of memory used
                   13098:     ** to store all prepared statements.
                   13099:     ** *pHighwater is set to zero.
                   13100:     */
                   13101:     case SQLITE_DBSTATUS_STMT_USED: {
                   13102:       struct Vdbe *pVdbe;         /* Used to iterate through VMs */
                   13103:       int nByte = 0;              /* Used to accumulate return value */
                   13104: 
                   13105:       db->pnBytesFreed = &nByte;
                   13106:       for(pVdbe=db->pVdbe; pVdbe; pVdbe=pVdbe->pNext){
                   13107:         sqlite3VdbeDeleteObject(db, pVdbe);
                   13108:       }
                   13109:       db->pnBytesFreed = 0;
                   13110: 
                   13111:       *pHighwater = 0;
                   13112:       *pCurrent = nByte;
                   13113: 
                   13114:       break;
                   13115:     }
                   13116: 
                   13117:     default: {
                   13118:       rc = SQLITE_ERROR;
                   13119:     }
                   13120:   }
                   13121:   sqlite3_mutex_leave(db->mutex);
                   13122:   return rc;
                   13123: }
                   13124: 
                   13125: /************** End of status.c **********************************************/
                   13126: /************** Begin file date.c ********************************************/
                   13127: /*
                   13128: ** 2003 October 31
                   13129: **
                   13130: ** The author disclaims copyright to this source code.  In place of
                   13131: ** a legal notice, here is a blessing:
                   13132: **
                   13133: **    May you do good and not evil.
                   13134: **    May you find forgiveness for yourself and forgive others.
                   13135: **    May you share freely, never taking more than you give.
                   13136: **
                   13137: *************************************************************************
                   13138: ** This file contains the C functions that implement date and time
                   13139: ** functions for SQLite.  
                   13140: **
                   13141: ** There is only one exported symbol in this file - the function
                   13142: ** sqlite3RegisterDateTimeFunctions() found at the bottom of the file.
                   13143: ** All other code has file scope.
                   13144: **
                   13145: ** SQLite processes all times and dates as Julian Day numbers.  The
                   13146: ** dates and times are stored as the number of days since noon
                   13147: ** in Greenwich on November 24, 4714 B.C. according to the Gregorian
                   13148: ** calendar system. 
                   13149: **
                   13150: ** 1970-01-01 00:00:00 is JD 2440587.5
                   13151: ** 2000-01-01 00:00:00 is JD 2451544.5
                   13152: **
                   13153: ** This implemention requires years to be expressed as a 4-digit number
                   13154: ** which means that only dates between 0000-01-01 and 9999-12-31 can
                   13155: ** be represented, even though julian day numbers allow a much wider
                   13156: ** range of dates.
                   13157: **
                   13158: ** The Gregorian calendar system is used for all dates and times,
                   13159: ** even those that predate the Gregorian calendar.  Historians usually
                   13160: ** use the Julian calendar for dates prior to 1582-10-15 and for some
                   13161: ** dates afterwards, depending on locale.  Beware of this difference.
                   13162: **
                   13163: ** The conversion algorithms are implemented based on descriptions
                   13164: ** in the following text:
                   13165: **
                   13166: **      Jean Meeus
                   13167: **      Astronomical Algorithms, 2nd Edition, 1998
                   13168: **      ISBM 0-943396-61-1
                   13169: **      Willmann-Bell, Inc
                   13170: **      Richmond, Virginia (USA)
                   13171: */
                   13172: #include <time.h>
                   13173: 
                   13174: #ifndef SQLITE_OMIT_DATETIME_FUNCS
                   13175: 
                   13176: 
                   13177: /*
                   13178: ** A structure for holding a single date and time.
                   13179: */
                   13180: typedef struct DateTime DateTime;
                   13181: struct DateTime {
                   13182:   sqlite3_int64 iJD; /* The julian day number times 86400000 */
                   13183:   int Y, M, D;       /* Year, month, and day */
                   13184:   int h, m;          /* Hour and minutes */
                   13185:   int tz;            /* Timezone offset in minutes */
                   13186:   double s;          /* Seconds */
                   13187:   char validYMD;     /* True (1) if Y,M,D are valid */
                   13188:   char validHMS;     /* True (1) if h,m,s are valid */
                   13189:   char validJD;      /* True (1) if iJD is valid */
                   13190:   char validTZ;      /* True (1) if tz is valid */
                   13191: };
                   13192: 
                   13193: 
                   13194: /*
                   13195: ** Convert zDate into one or more integers.  Additional arguments
                   13196: ** come in groups of 5 as follows:
                   13197: **
                   13198: **       N       number of digits in the integer
                   13199: **       min     minimum allowed value of the integer
                   13200: **       max     maximum allowed value of the integer
                   13201: **       nextC   first character after the integer
                   13202: **       pVal    where to write the integers value.
                   13203: **
                   13204: ** Conversions continue until one with nextC==0 is encountered.
                   13205: ** The function returns the number of successful conversions.
                   13206: */
                   13207: static int getDigits(const char *zDate, ...){
                   13208:   va_list ap;
                   13209:   int val;
                   13210:   int N;
                   13211:   int min;
                   13212:   int max;
                   13213:   int nextC;
                   13214:   int *pVal;
                   13215:   int cnt = 0;
                   13216:   va_start(ap, zDate);
                   13217:   do{
                   13218:     N = va_arg(ap, int);
                   13219:     min = va_arg(ap, int);
                   13220:     max = va_arg(ap, int);
                   13221:     nextC = va_arg(ap, int);
                   13222:     pVal = va_arg(ap, int*);
                   13223:     val = 0;
                   13224:     while( N-- ){
                   13225:       if( !sqlite3Isdigit(*zDate) ){
                   13226:         goto end_getDigits;
                   13227:       }
                   13228:       val = val*10 + *zDate - '0';
                   13229:       zDate++;
                   13230:     }
                   13231:     if( val<min || val>max || (nextC!=0 && nextC!=*zDate) ){
                   13232:       goto end_getDigits;
                   13233:     }
                   13234:     *pVal = val;
                   13235:     zDate++;
                   13236:     cnt++;
                   13237:   }while( nextC );
                   13238: end_getDigits:
                   13239:   va_end(ap);
                   13240:   return cnt;
                   13241: }
                   13242: 
                   13243: /*
                   13244: ** Parse a timezone extension on the end of a date-time.
                   13245: ** The extension is of the form:
                   13246: **
                   13247: **        (+/-)HH:MM
                   13248: **
                   13249: ** Or the "zulu" notation:
                   13250: **
                   13251: **        Z
                   13252: **
                   13253: ** If the parse is successful, write the number of minutes
                   13254: ** of change in p->tz and return 0.  If a parser error occurs,
                   13255: ** return non-zero.
                   13256: **
                   13257: ** A missing specifier is not considered an error.
                   13258: */
                   13259: static int parseTimezone(const char *zDate, DateTime *p){
                   13260:   int sgn = 0;
                   13261:   int nHr, nMn;
                   13262:   int c;
                   13263:   while( sqlite3Isspace(*zDate) ){ zDate++; }
                   13264:   p->tz = 0;
                   13265:   c = *zDate;
                   13266:   if( c=='-' ){
                   13267:     sgn = -1;
                   13268:   }else if( c=='+' ){
                   13269:     sgn = +1;
                   13270:   }else if( c=='Z' || c=='z' ){
                   13271:     zDate++;
                   13272:     goto zulu_time;
                   13273:   }else{
                   13274:     return c!=0;
                   13275:   }
                   13276:   zDate++;
                   13277:   if( getDigits(zDate, 2, 0, 14, ':', &nHr, 2, 0, 59, 0, &nMn)!=2 ){
                   13278:     return 1;
                   13279:   }
                   13280:   zDate += 5;
                   13281:   p->tz = sgn*(nMn + nHr*60);
                   13282: zulu_time:
                   13283:   while( sqlite3Isspace(*zDate) ){ zDate++; }
                   13284:   return *zDate!=0;
                   13285: }
                   13286: 
                   13287: /*
                   13288: ** Parse times of the form HH:MM or HH:MM:SS or HH:MM:SS.FFFF.
                   13289: ** The HH, MM, and SS must each be exactly 2 digits.  The
                   13290: ** fractional seconds FFFF can be one or more digits.
                   13291: **
                   13292: ** Return 1 if there is a parsing error and 0 on success.
                   13293: */
                   13294: static int parseHhMmSs(const char *zDate, DateTime *p){
                   13295:   int h, m, s;
                   13296:   double ms = 0.0;
                   13297:   if( getDigits(zDate, 2, 0, 24, ':', &h, 2, 0, 59, 0, &m)!=2 ){
                   13298:     return 1;
                   13299:   }
                   13300:   zDate += 5;
                   13301:   if( *zDate==':' ){
                   13302:     zDate++;
                   13303:     if( getDigits(zDate, 2, 0, 59, 0, &s)!=1 ){
                   13304:       return 1;
                   13305:     }
                   13306:     zDate += 2;
                   13307:     if( *zDate=='.' && sqlite3Isdigit(zDate[1]) ){
                   13308:       double rScale = 1.0;
                   13309:       zDate++;
                   13310:       while( sqlite3Isdigit(*zDate) ){
                   13311:         ms = ms*10.0 + *zDate - '0';
                   13312:         rScale *= 10.0;
                   13313:         zDate++;
                   13314:       }
                   13315:       ms /= rScale;
                   13316:     }
                   13317:   }else{
                   13318:     s = 0;
                   13319:   }
                   13320:   p->validJD = 0;
                   13321:   p->validHMS = 1;
                   13322:   p->h = h;
                   13323:   p->m = m;
                   13324:   p->s = s + ms;
                   13325:   if( parseTimezone(zDate, p) ) return 1;
                   13326:   p->validTZ = (p->tz!=0)?1:0;
                   13327:   return 0;
                   13328: }
                   13329: 
                   13330: /*
                   13331: ** Convert from YYYY-MM-DD HH:MM:SS to julian day.  We always assume
                   13332: ** that the YYYY-MM-DD is according to the Gregorian calendar.
                   13333: **
                   13334: ** Reference:  Meeus page 61
                   13335: */
                   13336: static void computeJD(DateTime *p){
                   13337:   int Y, M, D, A, B, X1, X2;
                   13338: 
                   13339:   if( p->validJD ) return;
                   13340:   if( p->validYMD ){
                   13341:     Y = p->Y;
                   13342:     M = p->M;
                   13343:     D = p->D;
                   13344:   }else{
                   13345:     Y = 2000;  /* If no YMD specified, assume 2000-Jan-01 */
                   13346:     M = 1;
                   13347:     D = 1;
                   13348:   }
                   13349:   if( M<=2 ){
                   13350:     Y--;
                   13351:     M += 12;
                   13352:   }
                   13353:   A = Y/100;
                   13354:   B = 2 - A + (A/4);
                   13355:   X1 = 36525*(Y+4716)/100;
                   13356:   X2 = 306001*(M+1)/10000;
                   13357:   p->iJD = (sqlite3_int64)((X1 + X2 + D + B - 1524.5 ) * 86400000);
                   13358:   p->validJD = 1;
                   13359:   if( p->validHMS ){
                   13360:     p->iJD += p->h*3600000 + p->m*60000 + (sqlite3_int64)(p->s*1000);
                   13361:     if( p->validTZ ){
                   13362:       p->iJD -= p->tz*60000;
                   13363:       p->validYMD = 0;
                   13364:       p->validHMS = 0;
                   13365:       p->validTZ = 0;
                   13366:     }
                   13367:   }
                   13368: }
                   13369: 
                   13370: /*
                   13371: ** Parse dates of the form
                   13372: **
                   13373: **     YYYY-MM-DD HH:MM:SS.FFF
                   13374: **     YYYY-MM-DD HH:MM:SS
                   13375: **     YYYY-MM-DD HH:MM
                   13376: **     YYYY-MM-DD
                   13377: **
                   13378: ** Write the result into the DateTime structure and return 0
                   13379: ** on success and 1 if the input string is not a well-formed
                   13380: ** date.
                   13381: */
                   13382: static int parseYyyyMmDd(const char *zDate, DateTime *p){
                   13383:   int Y, M, D, neg;
                   13384: 
                   13385:   if( zDate[0]=='-' ){
                   13386:     zDate++;
                   13387:     neg = 1;
                   13388:   }else{
                   13389:     neg = 0;
                   13390:   }
                   13391:   if( getDigits(zDate,4,0,9999,'-',&Y,2,1,12,'-',&M,2,1,31,0,&D)!=3 ){
                   13392:     return 1;
                   13393:   }
                   13394:   zDate += 10;
                   13395:   while( sqlite3Isspace(*zDate) || 'T'==*(u8*)zDate ){ zDate++; }
                   13396:   if( parseHhMmSs(zDate, p)==0 ){
                   13397:     /* We got the time */
                   13398:   }else if( *zDate==0 ){
                   13399:     p->validHMS = 0;
                   13400:   }else{
                   13401:     return 1;
                   13402:   }
                   13403:   p->validJD = 0;
                   13404:   p->validYMD = 1;
                   13405:   p->Y = neg ? -Y : Y;
                   13406:   p->M = M;
                   13407:   p->D = D;
                   13408:   if( p->validTZ ){
                   13409:     computeJD(p);
                   13410:   }
                   13411:   return 0;
                   13412: }
                   13413: 
                   13414: /*
                   13415: ** Set the time to the current time reported by the VFS
                   13416: */
                   13417: static void setDateTimeToCurrent(sqlite3_context *context, DateTime *p){
                   13418:   sqlite3 *db = sqlite3_context_db_handle(context);
                   13419:   sqlite3OsCurrentTimeInt64(db->pVfs, &p->iJD);
                   13420:   p->validJD = 1;
                   13421: }
                   13422: 
                   13423: /*
                   13424: ** Attempt to parse the given string into a Julian Day Number.  Return
                   13425: ** the number of errors.
                   13426: **
                   13427: ** The following are acceptable forms for the input string:
                   13428: **
                   13429: **      YYYY-MM-DD HH:MM:SS.FFF  +/-HH:MM
                   13430: **      DDDD.DD 
                   13431: **      now
                   13432: **
                   13433: ** In the first form, the +/-HH:MM is always optional.  The fractional
                   13434: ** seconds extension (the ".FFF") is optional.  The seconds portion
                   13435: ** (":SS.FFF") is option.  The year and date can be omitted as long
                   13436: ** as there is a time string.  The time string can be omitted as long
                   13437: ** as there is a year and date.
                   13438: */
                   13439: static int parseDateOrTime(
                   13440:   sqlite3_context *context, 
                   13441:   const char *zDate, 
                   13442:   DateTime *p
                   13443: ){
                   13444:   double r;
                   13445:   if( parseYyyyMmDd(zDate,p)==0 ){
                   13446:     return 0;
                   13447:   }else if( parseHhMmSs(zDate, p)==0 ){
                   13448:     return 0;
                   13449:   }else if( sqlite3StrICmp(zDate,"now")==0){
                   13450:     setDateTimeToCurrent(context, p);
                   13451:     return 0;
                   13452:   }else if( sqlite3AtoF(zDate, &r, sqlite3Strlen30(zDate), SQLITE_UTF8) ){
                   13453:     p->iJD = (sqlite3_int64)(r*86400000.0 + 0.5);
                   13454:     p->validJD = 1;
                   13455:     return 0;
                   13456:   }
                   13457:   return 1;
                   13458: }
                   13459: 
                   13460: /*
                   13461: ** Compute the Year, Month, and Day from the julian day number.
                   13462: */
                   13463: static void computeYMD(DateTime *p){
                   13464:   int Z, A, B, C, D, E, X1;
                   13465:   if( p->validYMD ) return;
                   13466:   if( !p->validJD ){
                   13467:     p->Y = 2000;
                   13468:     p->M = 1;
                   13469:     p->D = 1;
                   13470:   }else{
                   13471:     Z = (int)((p->iJD + 43200000)/86400000);
                   13472:     A = (int)((Z - 1867216.25)/36524.25);
                   13473:     A = Z + 1 + A - (A/4);
                   13474:     B = A + 1524;
                   13475:     C = (int)((B - 122.1)/365.25);
                   13476:     D = (36525*C)/100;
                   13477:     E = (int)((B-D)/30.6001);
                   13478:     X1 = (int)(30.6001*E);
                   13479:     p->D = B - D - X1;
                   13480:     p->M = E<14 ? E-1 : E-13;
                   13481:     p->Y = p->M>2 ? C - 4716 : C - 4715;
                   13482:   }
                   13483:   p->validYMD = 1;
                   13484: }
                   13485: 
                   13486: /*
                   13487: ** Compute the Hour, Minute, and Seconds from the julian day number.
                   13488: */
                   13489: static void computeHMS(DateTime *p){
                   13490:   int s;
                   13491:   if( p->validHMS ) return;
                   13492:   computeJD(p);
                   13493:   s = (int)((p->iJD + 43200000) % 86400000);
                   13494:   p->s = s/1000.0;
                   13495:   s = (int)p->s;
                   13496:   p->s -= s;
                   13497:   p->h = s/3600;
                   13498:   s -= p->h*3600;
                   13499:   p->m = s/60;
                   13500:   p->s += s - p->m*60;
                   13501:   p->validHMS = 1;
                   13502: }
                   13503: 
                   13504: /*
                   13505: ** Compute both YMD and HMS
                   13506: */
                   13507: static void computeYMD_HMS(DateTime *p){
                   13508:   computeYMD(p);
                   13509:   computeHMS(p);
                   13510: }
                   13511: 
                   13512: /*
                   13513: ** Clear the YMD and HMS and the TZ
                   13514: */
                   13515: static void clearYMD_HMS_TZ(DateTime *p){
                   13516:   p->validYMD = 0;
                   13517:   p->validHMS = 0;
                   13518:   p->validTZ = 0;
                   13519: }
                   13520: 
                   13521: /*
                   13522: ** On recent Windows platforms, the localtime_s() function is available
                   13523: ** as part of the "Secure CRT". It is essentially equivalent to 
                   13524: ** localtime_r() available under most POSIX platforms, except that the 
                   13525: ** order of the parameters is reversed.
                   13526: **
                   13527: ** See http://msdn.microsoft.com/en-us/library/a442x3ye(VS.80).aspx.
                   13528: **
                   13529: ** If the user has not indicated to use localtime_r() or localtime_s()
                   13530: ** already, check for an MSVC build environment that provides 
                   13531: ** localtime_s().
                   13532: */
                   13533: #if !defined(HAVE_LOCALTIME_R) && !defined(HAVE_LOCALTIME_S) && \
                   13534:      defined(_MSC_VER) && defined(_CRT_INSECURE_DEPRECATE)
                   13535: #define HAVE_LOCALTIME_S 1
                   13536: #endif
                   13537: 
                   13538: #ifndef SQLITE_OMIT_LOCALTIME
                   13539: /*
                   13540: ** The following routine implements the rough equivalent of localtime_r()
                   13541: ** using whatever operating-system specific localtime facility that
                   13542: ** is available.  This routine returns 0 on success and
                   13543: ** non-zero on any kind of error.
                   13544: **
                   13545: ** If the sqlite3GlobalConfig.bLocaltimeFault variable is true then this
                   13546: ** routine will always fail.
                   13547: */
                   13548: static int osLocaltime(time_t *t, struct tm *pTm){
                   13549:   int rc;
                   13550: #if (!defined(HAVE_LOCALTIME_R) || !HAVE_LOCALTIME_R) \
                   13551:       && (!defined(HAVE_LOCALTIME_S) || !HAVE_LOCALTIME_S)
                   13552:   struct tm *pX;
                   13553:   sqlite3_mutex *mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER);
                   13554:   sqlite3_mutex_enter(mutex);
                   13555:   pX = localtime(t);
                   13556: #ifndef SQLITE_OMIT_BUILTIN_TEST
                   13557:   if( sqlite3GlobalConfig.bLocaltimeFault ) pX = 0;
                   13558: #endif
                   13559:   if( pX ) *pTm = *pX;
                   13560:   sqlite3_mutex_leave(mutex);
                   13561:   rc = pX==0;
                   13562: #else
                   13563: #ifndef SQLITE_OMIT_BUILTIN_TEST
                   13564:   if( sqlite3GlobalConfig.bLocaltimeFault ) return 1;
                   13565: #endif
                   13566: #if defined(HAVE_LOCALTIME_R) && HAVE_LOCALTIME_R
                   13567:   rc = localtime_r(t, pTm)==0;
                   13568: #else
                   13569:   rc = localtime_s(pTm, t);
                   13570: #endif /* HAVE_LOCALTIME_R */
                   13571: #endif /* HAVE_LOCALTIME_R || HAVE_LOCALTIME_S */
                   13572:   return rc;
                   13573: }
                   13574: #endif /* SQLITE_OMIT_LOCALTIME */
                   13575: 
                   13576: 
                   13577: #ifndef SQLITE_OMIT_LOCALTIME
                   13578: /*
                   13579: ** Compute the difference (in milliseconds) between localtime and UTC
                   13580: ** (a.k.a. GMT) for the time value p where p is in UTC. If no error occurs,
                   13581: ** return this value and set *pRc to SQLITE_OK. 
                   13582: **
                   13583: ** Or, if an error does occur, set *pRc to SQLITE_ERROR. The returned value
                   13584: ** is undefined in this case.
                   13585: */
                   13586: static sqlite3_int64 localtimeOffset(
                   13587:   DateTime *p,                    /* Date at which to calculate offset */
                   13588:   sqlite3_context *pCtx,          /* Write error here if one occurs */
                   13589:   int *pRc                        /* OUT: Error code. SQLITE_OK or ERROR */
                   13590: ){
                   13591:   DateTime x, y;
                   13592:   time_t t;
                   13593:   struct tm sLocal;
                   13594: 
                   13595:   /* Initialize the contents of sLocal to avoid a compiler warning. */
                   13596:   memset(&sLocal, 0, sizeof(sLocal));
                   13597: 
                   13598:   x = *p;
                   13599:   computeYMD_HMS(&x);
                   13600:   if( x.Y<1971 || x.Y>=2038 ){
                   13601:     x.Y = 2000;
                   13602:     x.M = 1;
                   13603:     x.D = 1;
                   13604:     x.h = 0;
                   13605:     x.m = 0;
                   13606:     x.s = 0.0;
                   13607:   } else {
                   13608:     int s = (int)(x.s + 0.5);
                   13609:     x.s = s;
                   13610:   }
                   13611:   x.tz = 0;
                   13612:   x.validJD = 0;
                   13613:   computeJD(&x);
                   13614:   t = (time_t)(x.iJD/1000 - 21086676*(i64)10000);
                   13615:   if( osLocaltime(&t, &sLocal) ){
                   13616:     sqlite3_result_error(pCtx, "local time unavailable", -1);
                   13617:     *pRc = SQLITE_ERROR;
                   13618:     return 0;
                   13619:   }
                   13620:   y.Y = sLocal.tm_year + 1900;
                   13621:   y.M = sLocal.tm_mon + 1;
                   13622:   y.D = sLocal.tm_mday;
                   13623:   y.h = sLocal.tm_hour;
                   13624:   y.m = sLocal.tm_min;
                   13625:   y.s = sLocal.tm_sec;
                   13626:   y.validYMD = 1;
                   13627:   y.validHMS = 1;
                   13628:   y.validJD = 0;
                   13629:   y.validTZ = 0;
                   13630:   computeJD(&y);
                   13631:   *pRc = SQLITE_OK;
                   13632:   return y.iJD - x.iJD;
                   13633: }
                   13634: #endif /* SQLITE_OMIT_LOCALTIME */
                   13635: 
                   13636: /*
                   13637: ** Process a modifier to a date-time stamp.  The modifiers are
                   13638: ** as follows:
                   13639: **
                   13640: **     NNN days
                   13641: **     NNN hours
                   13642: **     NNN minutes
                   13643: **     NNN.NNNN seconds
                   13644: **     NNN months
                   13645: **     NNN years
                   13646: **     start of month
                   13647: **     start of year
                   13648: **     start of week
                   13649: **     start of day
                   13650: **     weekday N
                   13651: **     unixepoch
                   13652: **     localtime
                   13653: **     utc
                   13654: **
                   13655: ** Return 0 on success and 1 if there is any kind of error. If the error
                   13656: ** is in a system call (i.e. localtime()), then an error message is written
                   13657: ** to context pCtx. If the error is an unrecognized modifier, no error is
                   13658: ** written to pCtx.
                   13659: */
                   13660: static int parseModifier(sqlite3_context *pCtx, const char *zMod, DateTime *p){
                   13661:   int rc = 1;
                   13662:   int n;
                   13663:   double r;
                   13664:   char *z, zBuf[30];
                   13665:   z = zBuf;
                   13666:   for(n=0; n<ArraySize(zBuf)-1 && zMod[n]; n++){
                   13667:     z[n] = (char)sqlite3UpperToLower[(u8)zMod[n]];
                   13668:   }
                   13669:   z[n] = 0;
                   13670:   switch( z[0] ){
                   13671: #ifndef SQLITE_OMIT_LOCALTIME
                   13672:     case 'l': {
                   13673:       /*    localtime
                   13674:       **
                   13675:       ** Assuming the current time value is UTC (a.k.a. GMT), shift it to
                   13676:       ** show local time.
                   13677:       */
                   13678:       if( strcmp(z, "localtime")==0 ){
                   13679:         computeJD(p);
                   13680:         p->iJD += localtimeOffset(p, pCtx, &rc);
                   13681:         clearYMD_HMS_TZ(p);
                   13682:       }
                   13683:       break;
                   13684:     }
                   13685: #endif
                   13686:     case 'u': {
                   13687:       /*
                   13688:       **    unixepoch
                   13689:       **
                   13690:       ** Treat the current value of p->iJD as the number of
                   13691:       ** seconds since 1970.  Convert to a real julian day number.
                   13692:       */
                   13693:       if( strcmp(z, "unixepoch")==0 && p->validJD ){
                   13694:         p->iJD = (p->iJD + 43200)/86400 + 21086676*(i64)10000000;
                   13695:         clearYMD_HMS_TZ(p);
                   13696:         rc = 0;
                   13697:       }
                   13698: #ifndef SQLITE_OMIT_LOCALTIME
                   13699:       else if( strcmp(z, "utc")==0 ){
                   13700:         sqlite3_int64 c1;
                   13701:         computeJD(p);
                   13702:         c1 = localtimeOffset(p, pCtx, &rc);
                   13703:         if( rc==SQLITE_OK ){
                   13704:           p->iJD -= c1;
                   13705:           clearYMD_HMS_TZ(p);
                   13706:           p->iJD += c1 - localtimeOffset(p, pCtx, &rc);
                   13707:         }
                   13708:       }
                   13709: #endif
                   13710:       break;
                   13711:     }
                   13712:     case 'w': {
                   13713:       /*
                   13714:       **    weekday N
                   13715:       **
                   13716:       ** Move the date to the same time on the next occurrence of
                   13717:       ** weekday N where 0==Sunday, 1==Monday, and so forth.  If the
                   13718:       ** date is already on the appropriate weekday, this is a no-op.
                   13719:       */
                   13720:       if( strncmp(z, "weekday ", 8)==0
                   13721:                && sqlite3AtoF(&z[8], &r, sqlite3Strlen30(&z[8]), SQLITE_UTF8)
                   13722:                && (n=(int)r)==r && n>=0 && r<7 ){
                   13723:         sqlite3_int64 Z;
                   13724:         computeYMD_HMS(p);
                   13725:         p->validTZ = 0;
                   13726:         p->validJD = 0;
                   13727:         computeJD(p);
                   13728:         Z = ((p->iJD + 129600000)/86400000) % 7;
                   13729:         if( Z>n ) Z -= 7;
                   13730:         p->iJD += (n - Z)*86400000;
                   13731:         clearYMD_HMS_TZ(p);
                   13732:         rc = 0;
                   13733:       }
                   13734:       break;
                   13735:     }
                   13736:     case 's': {
                   13737:       /*
                   13738:       **    start of TTTTT
                   13739:       **
                   13740:       ** Move the date backwards to the beginning of the current day,
                   13741:       ** or month or year.
                   13742:       */
                   13743:       if( strncmp(z, "start of ", 9)!=0 ) break;
                   13744:       z += 9;
                   13745:       computeYMD(p);
                   13746:       p->validHMS = 1;
                   13747:       p->h = p->m = 0;
                   13748:       p->s = 0.0;
                   13749:       p->validTZ = 0;
                   13750:       p->validJD = 0;
                   13751:       if( strcmp(z,"month")==0 ){
                   13752:         p->D = 1;
                   13753:         rc = 0;
                   13754:       }else if( strcmp(z,"year")==0 ){
                   13755:         computeYMD(p);
                   13756:         p->M = 1;
                   13757:         p->D = 1;
                   13758:         rc = 0;
                   13759:       }else if( strcmp(z,"day")==0 ){
                   13760:         rc = 0;
                   13761:       }
                   13762:       break;
                   13763:     }
                   13764:     case '+':
                   13765:     case '-':
                   13766:     case '0':
                   13767:     case '1':
                   13768:     case '2':
                   13769:     case '3':
                   13770:     case '4':
                   13771:     case '5':
                   13772:     case '6':
                   13773:     case '7':
                   13774:     case '8':
                   13775:     case '9': {
                   13776:       double rRounder;
                   13777:       for(n=1; z[n] && z[n]!=':' && !sqlite3Isspace(z[n]); n++){}
                   13778:       if( !sqlite3AtoF(z, &r, n, SQLITE_UTF8) ){
                   13779:         rc = 1;
                   13780:         break;
                   13781:       }
                   13782:       if( z[n]==':' ){
                   13783:         /* A modifier of the form (+|-)HH:MM:SS.FFF adds (or subtracts) the
                   13784:         ** specified number of hours, minutes, seconds, and fractional seconds
                   13785:         ** to the time.  The ".FFF" may be omitted.  The ":SS.FFF" may be
                   13786:         ** omitted.
                   13787:         */
                   13788:         const char *z2 = z;
                   13789:         DateTime tx;
                   13790:         sqlite3_int64 day;
                   13791:         if( !sqlite3Isdigit(*z2) ) z2++;
                   13792:         memset(&tx, 0, sizeof(tx));
                   13793:         if( parseHhMmSs(z2, &tx) ) break;
                   13794:         computeJD(&tx);
                   13795:         tx.iJD -= 43200000;
                   13796:         day = tx.iJD/86400000;
                   13797:         tx.iJD -= day*86400000;
                   13798:         if( z[0]=='-' ) tx.iJD = -tx.iJD;
                   13799:         computeJD(p);
                   13800:         clearYMD_HMS_TZ(p);
                   13801:         p->iJD += tx.iJD;
                   13802:         rc = 0;
                   13803:         break;
                   13804:       }
                   13805:       z += n;
                   13806:       while( sqlite3Isspace(*z) ) z++;
                   13807:       n = sqlite3Strlen30(z);
                   13808:       if( n>10 || n<3 ) break;
                   13809:       if( z[n-1]=='s' ){ z[n-1] = 0; n--; }
                   13810:       computeJD(p);
                   13811:       rc = 0;
                   13812:       rRounder = r<0 ? -0.5 : +0.5;
                   13813:       if( n==3 && strcmp(z,"day")==0 ){
                   13814:         p->iJD += (sqlite3_int64)(r*86400000.0 + rRounder);
                   13815:       }else if( n==4 && strcmp(z,"hour")==0 ){
                   13816:         p->iJD += (sqlite3_int64)(r*(86400000.0/24.0) + rRounder);
                   13817:       }else if( n==6 && strcmp(z,"minute")==0 ){
                   13818:         p->iJD += (sqlite3_int64)(r*(86400000.0/(24.0*60.0)) + rRounder);
                   13819:       }else if( n==6 && strcmp(z,"second")==0 ){
                   13820:         p->iJD += (sqlite3_int64)(r*(86400000.0/(24.0*60.0*60.0)) + rRounder);
                   13821:       }else if( n==5 && strcmp(z,"month")==0 ){
                   13822:         int x, y;
                   13823:         computeYMD_HMS(p);
                   13824:         p->M += (int)r;
                   13825:         x = p->M>0 ? (p->M-1)/12 : (p->M-12)/12;
                   13826:         p->Y += x;
                   13827:         p->M -= x*12;
                   13828:         p->validJD = 0;
                   13829:         computeJD(p);
                   13830:         y = (int)r;
                   13831:         if( y!=r ){
                   13832:           p->iJD += (sqlite3_int64)((r - y)*30.0*86400000.0 + rRounder);
                   13833:         }
                   13834:       }else if( n==4 && strcmp(z,"year")==0 ){
                   13835:         int y = (int)r;
                   13836:         computeYMD_HMS(p);
                   13837:         p->Y += y;
                   13838:         p->validJD = 0;
                   13839:         computeJD(p);
                   13840:         if( y!=r ){
                   13841:           p->iJD += (sqlite3_int64)((r - y)*365.0*86400000.0 + rRounder);
                   13842:         }
                   13843:       }else{
                   13844:         rc = 1;
                   13845:       }
                   13846:       clearYMD_HMS_TZ(p);
                   13847:       break;
                   13848:     }
                   13849:     default: {
                   13850:       break;
                   13851:     }
                   13852:   }
                   13853:   return rc;
                   13854: }
                   13855: 
                   13856: /*
                   13857: ** Process time function arguments.  argv[0] is a date-time stamp.
                   13858: ** argv[1] and following are modifiers.  Parse them all and write
                   13859: ** the resulting time into the DateTime structure p.  Return 0
                   13860: ** on success and 1 if there are any errors.
                   13861: **
                   13862: ** If there are zero parameters (if even argv[0] is undefined)
                   13863: ** then assume a default value of "now" for argv[0].
                   13864: */
                   13865: static int isDate(
                   13866:   sqlite3_context *context, 
                   13867:   int argc, 
                   13868:   sqlite3_value **argv, 
                   13869:   DateTime *p
                   13870: ){
                   13871:   int i;
                   13872:   const unsigned char *z;
                   13873:   int eType;
                   13874:   memset(p, 0, sizeof(*p));
                   13875:   if( argc==0 ){
                   13876:     setDateTimeToCurrent(context, p);
                   13877:   }else if( (eType = sqlite3_value_type(argv[0]))==SQLITE_FLOAT
                   13878:                    || eType==SQLITE_INTEGER ){
                   13879:     p->iJD = (sqlite3_int64)(sqlite3_value_double(argv[0])*86400000.0 + 0.5);
                   13880:     p->validJD = 1;
                   13881:   }else{
                   13882:     z = sqlite3_value_text(argv[0]);
                   13883:     if( !z || parseDateOrTime(context, (char*)z, p) ){
                   13884:       return 1;
                   13885:     }
                   13886:   }
                   13887:   for(i=1; i<argc; i++){
                   13888:     z = sqlite3_value_text(argv[i]);
                   13889:     if( z==0 || parseModifier(context, (char*)z, p) ) return 1;
                   13890:   }
                   13891:   return 0;
                   13892: }
                   13893: 
                   13894: 
                   13895: /*
                   13896: ** The following routines implement the various date and time functions
                   13897: ** of SQLite.
                   13898: */
                   13899: 
                   13900: /*
                   13901: **    julianday( TIMESTRING, MOD, MOD, ...)
                   13902: **
                   13903: ** Return the julian day number of the date specified in the arguments
                   13904: */
                   13905: static void juliandayFunc(
                   13906:   sqlite3_context *context,
                   13907:   int argc,
                   13908:   sqlite3_value **argv
                   13909: ){
                   13910:   DateTime x;
                   13911:   if( isDate(context, argc, argv, &x)==0 ){
                   13912:     computeJD(&x);
                   13913:     sqlite3_result_double(context, x.iJD/86400000.0);
                   13914:   }
                   13915: }
                   13916: 
                   13917: /*
                   13918: **    datetime( TIMESTRING, MOD, MOD, ...)
                   13919: **
                   13920: ** Return YYYY-MM-DD HH:MM:SS
                   13921: */
                   13922: static void datetimeFunc(
                   13923:   sqlite3_context *context,
                   13924:   int argc,
                   13925:   sqlite3_value **argv
                   13926: ){
                   13927:   DateTime x;
                   13928:   if( isDate(context, argc, argv, &x)==0 ){
                   13929:     char zBuf[100];
                   13930:     computeYMD_HMS(&x);
                   13931:     sqlite3_snprintf(sizeof(zBuf), zBuf, "%04d-%02d-%02d %02d:%02d:%02d",
                   13932:                      x.Y, x.M, x.D, x.h, x.m, (int)(x.s));
                   13933:     sqlite3_result_text(context, zBuf, -1, SQLITE_TRANSIENT);
                   13934:   }
                   13935: }
                   13936: 
                   13937: /*
                   13938: **    time( TIMESTRING, MOD, MOD, ...)
                   13939: **
                   13940: ** Return HH:MM:SS
                   13941: */
                   13942: static void timeFunc(
                   13943:   sqlite3_context *context,
                   13944:   int argc,
                   13945:   sqlite3_value **argv
                   13946: ){
                   13947:   DateTime x;
                   13948:   if( isDate(context, argc, argv, &x)==0 ){
                   13949:     char zBuf[100];
                   13950:     computeHMS(&x);
                   13951:     sqlite3_snprintf(sizeof(zBuf), zBuf, "%02d:%02d:%02d", x.h, x.m, (int)x.s);
                   13952:     sqlite3_result_text(context, zBuf, -1, SQLITE_TRANSIENT);
                   13953:   }
                   13954: }
                   13955: 
                   13956: /*
                   13957: **    date( TIMESTRING, MOD, MOD, ...)
                   13958: **
                   13959: ** Return YYYY-MM-DD
                   13960: */
                   13961: static void dateFunc(
                   13962:   sqlite3_context *context,
                   13963:   int argc,
                   13964:   sqlite3_value **argv
                   13965: ){
                   13966:   DateTime x;
                   13967:   if( isDate(context, argc, argv, &x)==0 ){
                   13968:     char zBuf[100];
                   13969:     computeYMD(&x);
                   13970:     sqlite3_snprintf(sizeof(zBuf), zBuf, "%04d-%02d-%02d", x.Y, x.M, x.D);
                   13971:     sqlite3_result_text(context, zBuf, -1, SQLITE_TRANSIENT);
                   13972:   }
                   13973: }
                   13974: 
                   13975: /*
                   13976: **    strftime( FORMAT, TIMESTRING, MOD, MOD, ...)
                   13977: **
                   13978: ** Return a string described by FORMAT.  Conversions as follows:
                   13979: **
                   13980: **   %d  day of month
                   13981: **   %f  ** fractional seconds  SS.SSS
                   13982: **   %H  hour 00-24
                   13983: **   %j  day of year 000-366
                   13984: **   %J  ** Julian day number
                   13985: **   %m  month 01-12
                   13986: **   %M  minute 00-59
                   13987: **   %s  seconds since 1970-01-01
                   13988: **   %S  seconds 00-59
                   13989: **   %w  day of week 0-6  sunday==0
                   13990: **   %W  week of year 00-53
                   13991: **   %Y  year 0000-9999
                   13992: **   %%  %
                   13993: */
                   13994: static void strftimeFunc(
                   13995:   sqlite3_context *context,
                   13996:   int argc,
                   13997:   sqlite3_value **argv
                   13998: ){
                   13999:   DateTime x;
                   14000:   u64 n;
                   14001:   size_t i,j;
                   14002:   char *z;
                   14003:   sqlite3 *db;
                   14004:   const char *zFmt = (const char*)sqlite3_value_text(argv[0]);
                   14005:   char zBuf[100];
                   14006:   if( zFmt==0 || isDate(context, argc-1, argv+1, &x) ) return;
                   14007:   db = sqlite3_context_db_handle(context);
                   14008:   for(i=0, n=1; zFmt[i]; i++, n++){
                   14009:     if( zFmt[i]=='%' ){
                   14010:       switch( zFmt[i+1] ){
                   14011:         case 'd':
                   14012:         case 'H':
                   14013:         case 'm':
                   14014:         case 'M':
                   14015:         case 'S':
                   14016:         case 'W':
                   14017:           n++;
                   14018:           /* fall thru */
                   14019:         case 'w':
                   14020:         case '%':
                   14021:           break;
                   14022:         case 'f':
                   14023:           n += 8;
                   14024:           break;
                   14025:         case 'j':
                   14026:           n += 3;
                   14027:           break;
                   14028:         case 'Y':
                   14029:           n += 8;
                   14030:           break;
                   14031:         case 's':
                   14032:         case 'J':
                   14033:           n += 50;
                   14034:           break;
                   14035:         default:
                   14036:           return;  /* ERROR.  return a NULL */
                   14037:       }
                   14038:       i++;
                   14039:     }
                   14040:   }
                   14041:   testcase( n==sizeof(zBuf)-1 );
                   14042:   testcase( n==sizeof(zBuf) );
                   14043:   testcase( n==(u64)db->aLimit[SQLITE_LIMIT_LENGTH]+1 );
                   14044:   testcase( n==(u64)db->aLimit[SQLITE_LIMIT_LENGTH] );
                   14045:   if( n<sizeof(zBuf) ){
                   14046:     z = zBuf;
                   14047:   }else if( n>(u64)db->aLimit[SQLITE_LIMIT_LENGTH] ){
                   14048:     sqlite3_result_error_toobig(context);
                   14049:     return;
                   14050:   }else{
                   14051:     z = sqlite3DbMallocRaw(db, (int)n);
                   14052:     if( z==0 ){
                   14053:       sqlite3_result_error_nomem(context);
                   14054:       return;
                   14055:     }
                   14056:   }
                   14057:   computeJD(&x);
                   14058:   computeYMD_HMS(&x);
                   14059:   for(i=j=0; zFmt[i]; i++){
                   14060:     if( zFmt[i]!='%' ){
                   14061:       z[j++] = zFmt[i];
                   14062:     }else{
                   14063:       i++;
                   14064:       switch( zFmt[i] ){
                   14065:         case 'd':  sqlite3_snprintf(3, &z[j],"%02d",x.D); j+=2; break;
                   14066:         case 'f': {
                   14067:           double s = x.s;
                   14068:           if( s>59.999 ) s = 59.999;
                   14069:           sqlite3_snprintf(7, &z[j],"%06.3f", s);
                   14070:           j += sqlite3Strlen30(&z[j]);
                   14071:           break;
                   14072:         }
                   14073:         case 'H':  sqlite3_snprintf(3, &z[j],"%02d",x.h); j+=2; break;
                   14074:         case 'W': /* Fall thru */
                   14075:         case 'j': {
                   14076:           int nDay;             /* Number of days since 1st day of year */
                   14077:           DateTime y = x;
                   14078:           y.validJD = 0;
                   14079:           y.M = 1;
                   14080:           y.D = 1;
                   14081:           computeJD(&y);
                   14082:           nDay = (int)((x.iJD-y.iJD+43200000)/86400000);
                   14083:           if( zFmt[i]=='W' ){
                   14084:             int wd;   /* 0=Monday, 1=Tuesday, ... 6=Sunday */
                   14085:             wd = (int)(((x.iJD+43200000)/86400000)%7);
                   14086:             sqlite3_snprintf(3, &z[j],"%02d",(nDay+7-wd)/7);
                   14087:             j += 2;
                   14088:           }else{
                   14089:             sqlite3_snprintf(4, &z[j],"%03d",nDay+1);
                   14090:             j += 3;
                   14091:           }
                   14092:           break;
                   14093:         }
                   14094:         case 'J': {
                   14095:           sqlite3_snprintf(20, &z[j],"%.16g",x.iJD/86400000.0);
                   14096:           j+=sqlite3Strlen30(&z[j]);
                   14097:           break;
                   14098:         }
                   14099:         case 'm':  sqlite3_snprintf(3, &z[j],"%02d",x.M); j+=2; break;
                   14100:         case 'M':  sqlite3_snprintf(3, &z[j],"%02d",x.m); j+=2; break;
                   14101:         case 's': {
                   14102:           sqlite3_snprintf(30,&z[j],"%lld",
                   14103:                            (i64)(x.iJD/1000 - 21086676*(i64)10000));
                   14104:           j += sqlite3Strlen30(&z[j]);
                   14105:           break;
                   14106:         }
                   14107:         case 'S':  sqlite3_snprintf(3,&z[j],"%02d",(int)x.s); j+=2; break;
                   14108:         case 'w': {
                   14109:           z[j++] = (char)(((x.iJD+129600000)/86400000) % 7) + '0';
                   14110:           break;
                   14111:         }
                   14112:         case 'Y': {
                   14113:           sqlite3_snprintf(5,&z[j],"%04d",x.Y); j+=sqlite3Strlen30(&z[j]);
                   14114:           break;
                   14115:         }
                   14116:         default:   z[j++] = '%'; break;
                   14117:       }
                   14118:     }
                   14119:   }
                   14120:   z[j] = 0;
                   14121:   sqlite3_result_text(context, z, -1,
                   14122:                       z==zBuf ? SQLITE_TRANSIENT : SQLITE_DYNAMIC);
                   14123: }
                   14124: 
                   14125: /*
                   14126: ** current_time()
                   14127: **
                   14128: ** This function returns the same value as time('now').
                   14129: */
                   14130: static void ctimeFunc(
                   14131:   sqlite3_context *context,
                   14132:   int NotUsed,
                   14133:   sqlite3_value **NotUsed2
                   14134: ){
                   14135:   UNUSED_PARAMETER2(NotUsed, NotUsed2);
                   14136:   timeFunc(context, 0, 0);
                   14137: }
                   14138: 
                   14139: /*
                   14140: ** current_date()
                   14141: **
                   14142: ** This function returns the same value as date('now').
                   14143: */
                   14144: static void cdateFunc(
                   14145:   sqlite3_context *context,
                   14146:   int NotUsed,
                   14147:   sqlite3_value **NotUsed2
                   14148: ){
                   14149:   UNUSED_PARAMETER2(NotUsed, NotUsed2);
                   14150:   dateFunc(context, 0, 0);
                   14151: }
                   14152: 
                   14153: /*
                   14154: ** current_timestamp()
                   14155: **
                   14156: ** This function returns the same value as datetime('now').
                   14157: */
                   14158: static void ctimestampFunc(
                   14159:   sqlite3_context *context,
                   14160:   int NotUsed,
                   14161:   sqlite3_value **NotUsed2
                   14162: ){
                   14163:   UNUSED_PARAMETER2(NotUsed, NotUsed2);
                   14164:   datetimeFunc(context, 0, 0);
                   14165: }
                   14166: #endif /* !defined(SQLITE_OMIT_DATETIME_FUNCS) */
                   14167: 
                   14168: #ifdef SQLITE_OMIT_DATETIME_FUNCS
                   14169: /*
                   14170: ** If the library is compiled to omit the full-scale date and time
                   14171: ** handling (to get a smaller binary), the following minimal version
                   14172: ** of the functions current_time(), current_date() and current_timestamp()
                   14173: ** are included instead. This is to support column declarations that
                   14174: ** include "DEFAULT CURRENT_TIME" etc.
                   14175: **
                   14176: ** This function uses the C-library functions time(), gmtime()
                   14177: ** and strftime(). The format string to pass to strftime() is supplied
                   14178: ** as the user-data for the function.
                   14179: */
                   14180: static void currentTimeFunc(
                   14181:   sqlite3_context *context,
                   14182:   int argc,
                   14183:   sqlite3_value **argv
                   14184: ){
                   14185:   time_t t;
                   14186:   char *zFormat = (char *)sqlite3_user_data(context);
                   14187:   sqlite3 *db;
                   14188:   sqlite3_int64 iT;
                   14189:   char zBuf[20];
                   14190: 
                   14191:   UNUSED_PARAMETER(argc);
                   14192:   UNUSED_PARAMETER(argv);
                   14193: 
                   14194:   db = sqlite3_context_db_handle(context);
                   14195:   sqlite3OsCurrentTimeInt64(db->pVfs, &iT);
                   14196:   t = iT/1000 - 10000*(sqlite3_int64)21086676;
                   14197: #ifdef HAVE_GMTIME_R
                   14198:   {
                   14199:     struct tm sNow;
                   14200:     gmtime_r(&t, &sNow);
                   14201:     strftime(zBuf, 20, zFormat, &sNow);
                   14202:   }
                   14203: #else
                   14204:   {
                   14205:     struct tm *pTm;
                   14206:     sqlite3_mutex_enter(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER));
                   14207:     pTm = gmtime(&t);
                   14208:     strftime(zBuf, 20, zFormat, pTm);
                   14209:     sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER));
                   14210:   }
                   14211: #endif
                   14212: 
                   14213:   sqlite3_result_text(context, zBuf, -1, SQLITE_TRANSIENT);
                   14214: }
                   14215: #endif
                   14216: 
                   14217: /*
                   14218: ** This function registered all of the above C functions as SQL
                   14219: ** functions.  This should be the only routine in this file with
                   14220: ** external linkage.
                   14221: */
                   14222: SQLITE_PRIVATE void sqlite3RegisterDateTimeFunctions(void){
                   14223:   static SQLITE_WSD FuncDef aDateTimeFuncs[] = {
                   14224: #ifndef SQLITE_OMIT_DATETIME_FUNCS
                   14225:     FUNCTION(julianday,        -1, 0, 0, juliandayFunc ),
                   14226:     FUNCTION(date,             -1, 0, 0, dateFunc      ),
                   14227:     FUNCTION(time,             -1, 0, 0, timeFunc      ),
                   14228:     FUNCTION(datetime,         -1, 0, 0, datetimeFunc  ),
                   14229:     FUNCTION(strftime,         -1, 0, 0, strftimeFunc  ),
                   14230:     FUNCTION(current_time,      0, 0, 0, ctimeFunc     ),
                   14231:     FUNCTION(current_timestamp, 0, 0, 0, ctimestampFunc),
                   14232:     FUNCTION(current_date,      0, 0, 0, cdateFunc     ),
                   14233: #else
                   14234:     STR_FUNCTION(current_time,      0, "%H:%M:%S",          0, currentTimeFunc),
                   14235:     STR_FUNCTION(current_date,      0, "%Y-%m-%d",          0, currentTimeFunc),
                   14236:     STR_FUNCTION(current_timestamp, 0, "%Y-%m-%d %H:%M:%S", 0, currentTimeFunc),
                   14237: #endif
                   14238:   };
                   14239:   int i;
                   14240:   FuncDefHash *pHash = &GLOBAL(FuncDefHash, sqlite3GlobalFunctions);
                   14241:   FuncDef *aFunc = (FuncDef*)&GLOBAL(FuncDef, aDateTimeFuncs);
                   14242: 
                   14243:   for(i=0; i<ArraySize(aDateTimeFuncs); i++){
                   14244:     sqlite3FuncDefInsert(pHash, &aFunc[i]);
                   14245:   }
                   14246: }
                   14247: 
                   14248: /************** End of date.c ************************************************/
                   14249: /************** Begin file os.c **********************************************/
                   14250: /*
                   14251: ** 2005 November 29
                   14252: **
                   14253: ** The author disclaims copyright to this source code.  In place of
                   14254: ** a legal notice, here is a blessing:
                   14255: **
                   14256: **    May you do good and not evil.
                   14257: **    May you find forgiveness for yourself and forgive others.
                   14258: **    May you share freely, never taking more than you give.
                   14259: **
                   14260: ******************************************************************************
                   14261: **
                   14262: ** This file contains OS interface code that is common to all
                   14263: ** architectures.
                   14264: */
                   14265: #define _SQLITE_OS_C_ 1
                   14266: #undef _SQLITE_OS_C_
                   14267: 
                   14268: /*
                   14269: ** The default SQLite sqlite3_vfs implementations do not allocate
                   14270: ** memory (actually, os_unix.c allocates a small amount of memory
                   14271: ** from within OsOpen()), but some third-party implementations may.
                   14272: ** So we test the effects of a malloc() failing and the sqlite3OsXXX()
                   14273: ** function returning SQLITE_IOERR_NOMEM using the DO_OS_MALLOC_TEST macro.
                   14274: **
                   14275: ** The following functions are instrumented for malloc() failure 
                   14276: ** testing:
                   14277: **
                   14278: **     sqlite3OsOpen()
                   14279: **     sqlite3OsRead()
                   14280: **     sqlite3OsWrite()
                   14281: **     sqlite3OsSync()
                   14282: **     sqlite3OsLock()
                   14283: **
                   14284: */
                   14285: #if defined(SQLITE_TEST)
                   14286: SQLITE_API int sqlite3_memdebug_vfs_oom_test = 1;
                   14287:   #define DO_OS_MALLOC_TEST(x)                                       \
                   14288:   if (sqlite3_memdebug_vfs_oom_test && (!x || !sqlite3IsMemJournal(x))) {  \
                   14289:     void *pTstAlloc = sqlite3Malloc(10);                             \
                   14290:     if (!pTstAlloc) return SQLITE_IOERR_NOMEM;                       \
                   14291:     sqlite3_free(pTstAlloc);                                         \
                   14292:   }
                   14293: #else
                   14294:   #define DO_OS_MALLOC_TEST(x)
                   14295: #endif
                   14296: 
                   14297: /*
                   14298: ** The following routines are convenience wrappers around methods
                   14299: ** of the sqlite3_file object.  This is mostly just syntactic sugar. All
                   14300: ** of this would be completely automatic if SQLite were coded using
                   14301: ** C++ instead of plain old C.
                   14302: */
                   14303: SQLITE_PRIVATE int sqlite3OsClose(sqlite3_file *pId){
                   14304:   int rc = SQLITE_OK;
                   14305:   if( pId->pMethods ){
                   14306:     rc = pId->pMethods->xClose(pId);
                   14307:     pId->pMethods = 0;
                   14308:   }
                   14309:   return rc;
                   14310: }
                   14311: SQLITE_PRIVATE int sqlite3OsRead(sqlite3_file *id, void *pBuf, int amt, i64 offset){
                   14312:   DO_OS_MALLOC_TEST(id);
                   14313:   return id->pMethods->xRead(id, pBuf, amt, offset);
                   14314: }
                   14315: SQLITE_PRIVATE int sqlite3OsWrite(sqlite3_file *id, const void *pBuf, int amt, i64 offset){
                   14316:   DO_OS_MALLOC_TEST(id);
                   14317:   return id->pMethods->xWrite(id, pBuf, amt, offset);
                   14318: }
                   14319: SQLITE_PRIVATE int sqlite3OsTruncate(sqlite3_file *id, i64 size){
                   14320:   return id->pMethods->xTruncate(id, size);
                   14321: }
                   14322: SQLITE_PRIVATE int sqlite3OsSync(sqlite3_file *id, int flags){
                   14323:   DO_OS_MALLOC_TEST(id);
                   14324:   return id->pMethods->xSync(id, flags);
                   14325: }
                   14326: SQLITE_PRIVATE int sqlite3OsFileSize(sqlite3_file *id, i64 *pSize){
                   14327:   DO_OS_MALLOC_TEST(id);
                   14328:   return id->pMethods->xFileSize(id, pSize);
                   14329: }
                   14330: SQLITE_PRIVATE int sqlite3OsLock(sqlite3_file *id, int lockType){
                   14331:   DO_OS_MALLOC_TEST(id);
                   14332:   return id->pMethods->xLock(id, lockType);
                   14333: }
                   14334: SQLITE_PRIVATE int sqlite3OsUnlock(sqlite3_file *id, int lockType){
                   14335:   return id->pMethods->xUnlock(id, lockType);
                   14336: }
                   14337: SQLITE_PRIVATE int sqlite3OsCheckReservedLock(sqlite3_file *id, int *pResOut){
                   14338:   DO_OS_MALLOC_TEST(id);
                   14339:   return id->pMethods->xCheckReservedLock(id, pResOut);
                   14340: }
                   14341: SQLITE_PRIVATE int sqlite3OsFileControl(sqlite3_file *id, int op, void *pArg){
                   14342:   return id->pMethods->xFileControl(id, op, pArg);
                   14343: }
                   14344: SQLITE_PRIVATE int sqlite3OsSectorSize(sqlite3_file *id){
                   14345:   int (*xSectorSize)(sqlite3_file*) = id->pMethods->xSectorSize;
                   14346:   return (xSectorSize ? xSectorSize(id) : SQLITE_DEFAULT_SECTOR_SIZE);
                   14347: }
                   14348: SQLITE_PRIVATE int sqlite3OsDeviceCharacteristics(sqlite3_file *id){
                   14349:   return id->pMethods->xDeviceCharacteristics(id);
                   14350: }
                   14351: SQLITE_PRIVATE int sqlite3OsShmLock(sqlite3_file *id, int offset, int n, int flags){
                   14352:   return id->pMethods->xShmLock(id, offset, n, flags);
                   14353: }
                   14354: SQLITE_PRIVATE void sqlite3OsShmBarrier(sqlite3_file *id){
                   14355:   id->pMethods->xShmBarrier(id);
                   14356: }
                   14357: SQLITE_PRIVATE int sqlite3OsShmUnmap(sqlite3_file *id, int deleteFlag){
                   14358:   return id->pMethods->xShmUnmap(id, deleteFlag);
                   14359: }
                   14360: SQLITE_PRIVATE int sqlite3OsShmMap(
                   14361:   sqlite3_file *id,               /* Database file handle */
                   14362:   int iPage,
                   14363:   int pgsz,
                   14364:   int bExtend,                    /* True to extend file if necessary */
                   14365:   void volatile **pp              /* OUT: Pointer to mapping */
                   14366: ){
                   14367:   return id->pMethods->xShmMap(id, iPage, pgsz, bExtend, pp);
                   14368: }
                   14369: 
                   14370: /*
                   14371: ** The next group of routines are convenience wrappers around the
                   14372: ** VFS methods.
                   14373: */
                   14374: SQLITE_PRIVATE int sqlite3OsOpen(
                   14375:   sqlite3_vfs *pVfs, 
                   14376:   const char *zPath, 
                   14377:   sqlite3_file *pFile, 
                   14378:   int flags, 
                   14379:   int *pFlagsOut
                   14380: ){
                   14381:   int rc;
                   14382:   DO_OS_MALLOC_TEST(0);
                   14383:   /* 0x87f3f is a mask of SQLITE_OPEN_ flags that are valid to be passed
                   14384:   ** down into the VFS layer.  Some SQLITE_OPEN_ flags (for example,
                   14385:   ** SQLITE_OPEN_FULLMUTEX or SQLITE_OPEN_SHAREDCACHE) are blocked before
                   14386:   ** reaching the VFS. */
                   14387:   rc = pVfs->xOpen(pVfs, zPath, pFile, flags & 0x87f3f, pFlagsOut);
                   14388:   assert( rc==SQLITE_OK || pFile->pMethods==0 );
                   14389:   return rc;
                   14390: }
                   14391: SQLITE_PRIVATE int sqlite3OsDelete(sqlite3_vfs *pVfs, const char *zPath, int dirSync){
                   14392:   return pVfs->xDelete(pVfs, zPath, dirSync);
                   14393: }
                   14394: SQLITE_PRIVATE int sqlite3OsAccess(
                   14395:   sqlite3_vfs *pVfs, 
                   14396:   const char *zPath, 
                   14397:   int flags, 
                   14398:   int *pResOut
                   14399: ){
                   14400:   DO_OS_MALLOC_TEST(0);
                   14401:   return pVfs->xAccess(pVfs, zPath, flags, pResOut);
                   14402: }
                   14403: SQLITE_PRIVATE int sqlite3OsFullPathname(
                   14404:   sqlite3_vfs *pVfs, 
                   14405:   const char *zPath, 
                   14406:   int nPathOut, 
                   14407:   char *zPathOut
                   14408: ){
                   14409:   zPathOut[0] = 0;
                   14410:   return pVfs->xFullPathname(pVfs, zPath, nPathOut, zPathOut);
                   14411: }
                   14412: #ifndef SQLITE_OMIT_LOAD_EXTENSION
                   14413: SQLITE_PRIVATE void *sqlite3OsDlOpen(sqlite3_vfs *pVfs, const char *zPath){
                   14414:   return pVfs->xDlOpen(pVfs, zPath);
                   14415: }
                   14416: SQLITE_PRIVATE void sqlite3OsDlError(sqlite3_vfs *pVfs, int nByte, char *zBufOut){
                   14417:   pVfs->xDlError(pVfs, nByte, zBufOut);
                   14418: }
                   14419: SQLITE_PRIVATE void (*sqlite3OsDlSym(sqlite3_vfs *pVfs, void *pHdle, const char *zSym))(void){
                   14420:   return pVfs->xDlSym(pVfs, pHdle, zSym);
                   14421: }
                   14422: SQLITE_PRIVATE void sqlite3OsDlClose(sqlite3_vfs *pVfs, void *pHandle){
                   14423:   pVfs->xDlClose(pVfs, pHandle);
                   14424: }
                   14425: #endif /* SQLITE_OMIT_LOAD_EXTENSION */
                   14426: SQLITE_PRIVATE int sqlite3OsRandomness(sqlite3_vfs *pVfs, int nByte, char *zBufOut){
                   14427:   return pVfs->xRandomness(pVfs, nByte, zBufOut);
                   14428: }
                   14429: SQLITE_PRIVATE int sqlite3OsSleep(sqlite3_vfs *pVfs, int nMicro){
                   14430:   return pVfs->xSleep(pVfs, nMicro);
                   14431: }
                   14432: SQLITE_PRIVATE int sqlite3OsCurrentTimeInt64(sqlite3_vfs *pVfs, sqlite3_int64 *pTimeOut){
                   14433:   int rc;
                   14434:   /* IMPLEMENTATION-OF: R-49045-42493 SQLite will use the xCurrentTimeInt64()
                   14435:   ** method to get the current date and time if that method is available
                   14436:   ** (if iVersion is 2 or greater and the function pointer is not NULL) and
                   14437:   ** will fall back to xCurrentTime() if xCurrentTimeInt64() is
                   14438:   ** unavailable.
                   14439:   */
                   14440:   if( pVfs->iVersion>=2 && pVfs->xCurrentTimeInt64 ){
                   14441:     rc = pVfs->xCurrentTimeInt64(pVfs, pTimeOut);
                   14442:   }else{
                   14443:     double r;
                   14444:     rc = pVfs->xCurrentTime(pVfs, &r);
                   14445:     *pTimeOut = (sqlite3_int64)(r*86400000.0);
                   14446:   }
                   14447:   return rc;
                   14448: }
                   14449: 
                   14450: SQLITE_PRIVATE int sqlite3OsOpenMalloc(
                   14451:   sqlite3_vfs *pVfs, 
                   14452:   const char *zFile, 
                   14453:   sqlite3_file **ppFile, 
                   14454:   int flags,
                   14455:   int *pOutFlags
                   14456: ){
                   14457:   int rc = SQLITE_NOMEM;
                   14458:   sqlite3_file *pFile;
                   14459:   pFile = (sqlite3_file *)sqlite3Malloc(pVfs->szOsFile);
                   14460:   if( pFile ){
                   14461:     rc = sqlite3OsOpen(pVfs, zFile, pFile, flags, pOutFlags);
                   14462:     if( rc!=SQLITE_OK ){
                   14463:       sqlite3_free(pFile);
                   14464:     }else{
                   14465:       *ppFile = pFile;
                   14466:     }
                   14467:   }
                   14468:   return rc;
                   14469: }
                   14470: SQLITE_PRIVATE int sqlite3OsCloseFree(sqlite3_file *pFile){
                   14471:   int rc = SQLITE_OK;
                   14472:   assert( pFile );
                   14473:   rc = sqlite3OsClose(pFile);
                   14474:   sqlite3_free(pFile);
                   14475:   return rc;
                   14476: }
                   14477: 
                   14478: /*
                   14479: ** This function is a wrapper around the OS specific implementation of
                   14480: ** sqlite3_os_init(). The purpose of the wrapper is to provide the
                   14481: ** ability to simulate a malloc failure, so that the handling of an
                   14482: ** error in sqlite3_os_init() by the upper layers can be tested.
                   14483: */
                   14484: SQLITE_PRIVATE int sqlite3OsInit(void){
                   14485:   void *p = sqlite3_malloc(10);
                   14486:   if( p==0 ) return SQLITE_NOMEM;
                   14487:   sqlite3_free(p);
                   14488:   return sqlite3_os_init();
                   14489: }
                   14490: 
                   14491: /*
                   14492: ** The list of all registered VFS implementations.
                   14493: */
                   14494: static sqlite3_vfs * SQLITE_WSD vfsList = 0;
                   14495: #define vfsList GLOBAL(sqlite3_vfs *, vfsList)
                   14496: 
                   14497: /*
                   14498: ** Locate a VFS by name.  If no name is given, simply return the
                   14499: ** first VFS on the list.
                   14500: */
                   14501: SQLITE_API sqlite3_vfs *sqlite3_vfs_find(const char *zVfs){
                   14502:   sqlite3_vfs *pVfs = 0;
                   14503: #if SQLITE_THREADSAFE
                   14504:   sqlite3_mutex *mutex;
                   14505: #endif
                   14506: #ifndef SQLITE_OMIT_AUTOINIT
                   14507:   int rc = sqlite3_initialize();
                   14508:   if( rc ) return 0;
                   14509: #endif
                   14510: #if SQLITE_THREADSAFE
                   14511:   mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER);
                   14512: #endif
                   14513:   sqlite3_mutex_enter(mutex);
                   14514:   for(pVfs = vfsList; pVfs; pVfs=pVfs->pNext){
                   14515:     if( zVfs==0 ) break;
                   14516:     if( strcmp(zVfs, pVfs->zName)==0 ) break;
                   14517:   }
                   14518:   sqlite3_mutex_leave(mutex);
                   14519:   return pVfs;
                   14520: }
                   14521: 
                   14522: /*
                   14523: ** Unlink a VFS from the linked list
                   14524: */
                   14525: static void vfsUnlink(sqlite3_vfs *pVfs){
                   14526:   assert( sqlite3_mutex_held(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER)) );
                   14527:   if( pVfs==0 ){
                   14528:     /* No-op */
                   14529:   }else if( vfsList==pVfs ){
                   14530:     vfsList = pVfs->pNext;
                   14531:   }else if( vfsList ){
                   14532:     sqlite3_vfs *p = vfsList;
                   14533:     while( p->pNext && p->pNext!=pVfs ){
                   14534:       p = p->pNext;
                   14535:     }
                   14536:     if( p->pNext==pVfs ){
                   14537:       p->pNext = pVfs->pNext;
                   14538:     }
                   14539:   }
                   14540: }
                   14541: 
                   14542: /*
                   14543: ** Register a VFS with the system.  It is harmless to register the same
                   14544: ** VFS multiple times.  The new VFS becomes the default if makeDflt is
                   14545: ** true.
                   14546: */
                   14547: SQLITE_API int sqlite3_vfs_register(sqlite3_vfs *pVfs, int makeDflt){
                   14548:   sqlite3_mutex *mutex = 0;
                   14549: #ifndef SQLITE_OMIT_AUTOINIT
                   14550:   int rc = sqlite3_initialize();
                   14551:   if( rc ) return rc;
                   14552: #endif
                   14553:   mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER);
                   14554:   sqlite3_mutex_enter(mutex);
                   14555:   vfsUnlink(pVfs);
                   14556:   if( makeDflt || vfsList==0 ){
                   14557:     pVfs->pNext = vfsList;
                   14558:     vfsList = pVfs;
                   14559:   }else{
                   14560:     pVfs->pNext = vfsList->pNext;
                   14561:     vfsList->pNext = pVfs;
                   14562:   }
                   14563:   assert(vfsList);
                   14564:   sqlite3_mutex_leave(mutex);
                   14565:   return SQLITE_OK;
                   14566: }
                   14567: 
                   14568: /*
                   14569: ** Unregister a VFS so that it is no longer accessible.
                   14570: */
                   14571: SQLITE_API int sqlite3_vfs_unregister(sqlite3_vfs *pVfs){
                   14572: #if SQLITE_THREADSAFE
                   14573:   sqlite3_mutex *mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER);
                   14574: #endif
                   14575:   sqlite3_mutex_enter(mutex);
                   14576:   vfsUnlink(pVfs);
                   14577:   sqlite3_mutex_leave(mutex);
                   14578:   return SQLITE_OK;
                   14579: }
                   14580: 
                   14581: /************** End of os.c **************************************************/
                   14582: /************** Begin file fault.c *******************************************/
                   14583: /*
                   14584: ** 2008 Jan 22
                   14585: **
                   14586: ** The author disclaims copyright to this source code.  In place of
                   14587: ** a legal notice, here is a blessing:
                   14588: **
                   14589: **    May you do good and not evil.
                   14590: **    May you find forgiveness for yourself and forgive others.
                   14591: **    May you share freely, never taking more than you give.
                   14592: **
                   14593: *************************************************************************
                   14594: **
                   14595: ** This file contains code to support the concept of "benign" 
                   14596: ** malloc failures (when the xMalloc() or xRealloc() method of the
                   14597: ** sqlite3_mem_methods structure fails to allocate a block of memory
                   14598: ** and returns 0). 
                   14599: **
                   14600: ** Most malloc failures are non-benign. After they occur, SQLite
                   14601: ** abandons the current operation and returns an error code (usually
                   14602: ** SQLITE_NOMEM) to the user. However, sometimes a fault is not necessarily
                   14603: ** fatal. For example, if a malloc fails while resizing a hash table, this 
                   14604: ** is completely recoverable simply by not carrying out the resize. The 
                   14605: ** hash table will continue to function normally.  So a malloc failure 
                   14606: ** during a hash table resize is a benign fault.
                   14607: */
                   14608: 
                   14609: 
                   14610: #ifndef SQLITE_OMIT_BUILTIN_TEST
                   14611: 
                   14612: /*
                   14613: ** Global variables.
                   14614: */
                   14615: typedef struct BenignMallocHooks BenignMallocHooks;
                   14616: static SQLITE_WSD struct BenignMallocHooks {
                   14617:   void (*xBenignBegin)(void);
                   14618:   void (*xBenignEnd)(void);
                   14619: } sqlite3Hooks = { 0, 0 };
                   14620: 
                   14621: /* The "wsdHooks" macro will resolve to the appropriate BenignMallocHooks
                   14622: ** structure.  If writable static data is unsupported on the target,
                   14623: ** we have to locate the state vector at run-time.  In the more common
                   14624: ** case where writable static data is supported, wsdHooks can refer directly
                   14625: ** to the "sqlite3Hooks" state vector declared above.
                   14626: */
                   14627: #ifdef SQLITE_OMIT_WSD
                   14628: # define wsdHooksInit \
                   14629:   BenignMallocHooks *x = &GLOBAL(BenignMallocHooks,sqlite3Hooks)
                   14630: # define wsdHooks x[0]
                   14631: #else
                   14632: # define wsdHooksInit
                   14633: # define wsdHooks sqlite3Hooks
                   14634: #endif
                   14635: 
                   14636: 
                   14637: /*
                   14638: ** Register hooks to call when sqlite3BeginBenignMalloc() and
                   14639: ** sqlite3EndBenignMalloc() are called, respectively.
                   14640: */
                   14641: SQLITE_PRIVATE void sqlite3BenignMallocHooks(
                   14642:   void (*xBenignBegin)(void),
                   14643:   void (*xBenignEnd)(void)
                   14644: ){
                   14645:   wsdHooksInit;
                   14646:   wsdHooks.xBenignBegin = xBenignBegin;
                   14647:   wsdHooks.xBenignEnd = xBenignEnd;
                   14648: }
                   14649: 
                   14650: /*
                   14651: ** This (sqlite3EndBenignMalloc()) is called by SQLite code to indicate that
                   14652: ** subsequent malloc failures are benign. A call to sqlite3EndBenignMalloc()
                   14653: ** indicates that subsequent malloc failures are non-benign.
                   14654: */
                   14655: SQLITE_PRIVATE void sqlite3BeginBenignMalloc(void){
                   14656:   wsdHooksInit;
                   14657:   if( wsdHooks.xBenignBegin ){
                   14658:     wsdHooks.xBenignBegin();
                   14659:   }
                   14660: }
                   14661: SQLITE_PRIVATE void sqlite3EndBenignMalloc(void){
                   14662:   wsdHooksInit;
                   14663:   if( wsdHooks.xBenignEnd ){
                   14664:     wsdHooks.xBenignEnd();
                   14665:   }
                   14666: }
                   14667: 
                   14668: #endif   /* #ifndef SQLITE_OMIT_BUILTIN_TEST */
                   14669: 
                   14670: /************** End of fault.c ***********************************************/
                   14671: /************** Begin file mem0.c ********************************************/
                   14672: /*
                   14673: ** 2008 October 28
                   14674: **
                   14675: ** The author disclaims copyright to this source code.  In place of
                   14676: ** a legal notice, here is a blessing:
                   14677: **
                   14678: **    May you do good and not evil.
                   14679: **    May you find forgiveness for yourself and forgive others.
                   14680: **    May you share freely, never taking more than you give.
                   14681: **
                   14682: *************************************************************************
                   14683: **
                   14684: ** This file contains a no-op memory allocation drivers for use when
                   14685: ** SQLITE_ZERO_MALLOC is defined.  The allocation drivers implemented
                   14686: ** here always fail.  SQLite will not operate with these drivers.  These
                   14687: ** are merely placeholders.  Real drivers must be substituted using
                   14688: ** sqlite3_config() before SQLite will operate.
                   14689: */
                   14690: 
                   14691: /*
                   14692: ** This version of the memory allocator is the default.  It is
                   14693: ** used when no other memory allocator is specified using compile-time
                   14694: ** macros.
                   14695: */
                   14696: #ifdef SQLITE_ZERO_MALLOC
                   14697: 
                   14698: /*
                   14699: ** No-op versions of all memory allocation routines
                   14700: */
                   14701: static void *sqlite3MemMalloc(int nByte){ return 0; }
                   14702: static void sqlite3MemFree(void *pPrior){ return; }
                   14703: static void *sqlite3MemRealloc(void *pPrior, int nByte){ return 0; }
                   14704: static int sqlite3MemSize(void *pPrior){ return 0; }
                   14705: static int sqlite3MemRoundup(int n){ return n; }
                   14706: static int sqlite3MemInit(void *NotUsed){ return SQLITE_OK; }
                   14707: static void sqlite3MemShutdown(void *NotUsed){ return; }
                   14708: 
                   14709: /*
                   14710: ** This routine is the only routine in this file with external linkage.
                   14711: **
                   14712: ** Populate the low-level memory allocation function pointers in
                   14713: ** sqlite3GlobalConfig.m with pointers to the routines in this file.
                   14714: */
                   14715: SQLITE_PRIVATE void sqlite3MemSetDefault(void){
                   14716:   static const sqlite3_mem_methods defaultMethods = {
                   14717:      sqlite3MemMalloc,
                   14718:      sqlite3MemFree,
                   14719:      sqlite3MemRealloc,
                   14720:      sqlite3MemSize,
                   14721:      sqlite3MemRoundup,
                   14722:      sqlite3MemInit,
                   14723:      sqlite3MemShutdown,
                   14724:      0
                   14725:   };
                   14726:   sqlite3_config(SQLITE_CONFIG_MALLOC, &defaultMethods);
                   14727: }
                   14728: 
                   14729: #endif /* SQLITE_ZERO_MALLOC */
                   14730: 
                   14731: /************** End of mem0.c ************************************************/
                   14732: /************** Begin file mem1.c ********************************************/
                   14733: /*
                   14734: ** 2007 August 14
                   14735: **
                   14736: ** The author disclaims copyright to this source code.  In place of
                   14737: ** a legal notice, here is a blessing:
                   14738: **
                   14739: **    May you do good and not evil.
                   14740: **    May you find forgiveness for yourself and forgive others.
                   14741: **    May you share freely, never taking more than you give.
                   14742: **
                   14743: *************************************************************************
                   14744: **
                   14745: ** This file contains low-level memory allocation drivers for when
                   14746: ** SQLite will use the standard C-library malloc/realloc/free interface
                   14747: ** to obtain the memory it needs.
                   14748: **
                   14749: ** This file contains implementations of the low-level memory allocation
                   14750: ** routines specified in the sqlite3_mem_methods object.
                   14751: */
                   14752: 
                   14753: /*
                   14754: ** This version of the memory allocator is the default.  It is
                   14755: ** used when no other memory allocator is specified using compile-time
                   14756: ** macros.
                   14757: */
                   14758: #ifdef SQLITE_SYSTEM_MALLOC
                   14759: 
                   14760: /*
                   14761: ** Like malloc(), but remember the size of the allocation
                   14762: ** so that we can find it later using sqlite3MemSize().
                   14763: **
                   14764: ** For this low-level routine, we are guaranteed that nByte>0 because
                   14765: ** cases of nByte<=0 will be intercepted and dealt with by higher level
                   14766: ** routines.
                   14767: */
                   14768: static void *sqlite3MemMalloc(int nByte){
                   14769:   sqlite3_int64 *p;
                   14770:   assert( nByte>0 );
                   14771:   nByte = ROUND8(nByte);
                   14772:   p = malloc( nByte+8 );
                   14773:   if( p ){
                   14774:     p[0] = nByte;
                   14775:     p++;
                   14776:   }else{
                   14777:     testcase( sqlite3GlobalConfig.xLog!=0 );
                   14778:     sqlite3_log(SQLITE_NOMEM, "failed to allocate %u bytes of memory", nByte);
                   14779:   }
                   14780:   return (void *)p;
                   14781: }
                   14782: 
                   14783: /*
                   14784: ** Like free() but works for allocations obtained from sqlite3MemMalloc()
                   14785: ** or sqlite3MemRealloc().
                   14786: **
                   14787: ** For this low-level routine, we already know that pPrior!=0 since
                   14788: ** cases where pPrior==0 will have been intecepted and dealt with
                   14789: ** by higher-level routines.
                   14790: */
                   14791: static void sqlite3MemFree(void *pPrior){
                   14792:   sqlite3_int64 *p = (sqlite3_int64*)pPrior;
                   14793:   assert( pPrior!=0 );
                   14794:   p--;
                   14795:   free(p);
                   14796: }
                   14797: 
                   14798: /*
                   14799: ** Report the allocated size of a prior return from xMalloc()
                   14800: ** or xRealloc().
                   14801: */
                   14802: static int sqlite3MemSize(void *pPrior){
                   14803:   sqlite3_int64 *p;
                   14804:   if( pPrior==0 ) return 0;
                   14805:   p = (sqlite3_int64*)pPrior;
                   14806:   p--;
                   14807:   return (int)p[0];
                   14808: }
                   14809: 
                   14810: /*
                   14811: ** Like realloc().  Resize an allocation previously obtained from
                   14812: ** sqlite3MemMalloc().
                   14813: **
                   14814: ** For this low-level interface, we know that pPrior!=0.  Cases where
                   14815: ** pPrior==0 while have been intercepted by higher-level routine and
                   14816: ** redirected to xMalloc.  Similarly, we know that nByte>0 becauses
                   14817: ** cases where nByte<=0 will have been intercepted by higher-level
                   14818: ** routines and redirected to xFree.
                   14819: */
                   14820: static void *sqlite3MemRealloc(void *pPrior, int nByte){
                   14821:   sqlite3_int64 *p = (sqlite3_int64*)pPrior;
                   14822:   assert( pPrior!=0 && nByte>0 );
                   14823:   assert( nByte==ROUND8(nByte) ); /* EV: R-46199-30249 */
                   14824:   p--;
                   14825:   p = realloc(p, nByte+8 );
                   14826:   if( p ){
                   14827:     p[0] = nByte;
                   14828:     p++;
                   14829:   }else{
                   14830:     testcase( sqlite3GlobalConfig.xLog!=0 );
                   14831:     sqlite3_log(SQLITE_NOMEM,
                   14832:       "failed memory resize %u to %u bytes",
                   14833:       sqlite3MemSize(pPrior), nByte);
                   14834:   }
                   14835:   return (void*)p;
                   14836: }
                   14837: 
                   14838: /*
                   14839: ** Round up a request size to the next valid allocation size.
                   14840: */
                   14841: static int sqlite3MemRoundup(int n){
                   14842:   return ROUND8(n);
                   14843: }
                   14844: 
                   14845: /*
                   14846: ** Initialize this module.
                   14847: */
                   14848: static int sqlite3MemInit(void *NotUsed){
                   14849:   UNUSED_PARAMETER(NotUsed);
                   14850:   return SQLITE_OK;
                   14851: }
                   14852: 
                   14853: /*
                   14854: ** Deinitialize this module.
                   14855: */
                   14856: static void sqlite3MemShutdown(void *NotUsed){
                   14857:   UNUSED_PARAMETER(NotUsed);
                   14858:   return;
                   14859: }
                   14860: 
                   14861: /*
                   14862: ** This routine is the only routine in this file with external linkage.
                   14863: **
                   14864: ** Populate the low-level memory allocation function pointers in
                   14865: ** sqlite3GlobalConfig.m with pointers to the routines in this file.
                   14866: */
                   14867: SQLITE_PRIVATE void sqlite3MemSetDefault(void){
                   14868:   static const sqlite3_mem_methods defaultMethods = {
                   14869:      sqlite3MemMalloc,
                   14870:      sqlite3MemFree,
                   14871:      sqlite3MemRealloc,
                   14872:      sqlite3MemSize,
                   14873:      sqlite3MemRoundup,
                   14874:      sqlite3MemInit,
                   14875:      sqlite3MemShutdown,
                   14876:      0
                   14877:   };
                   14878:   sqlite3_config(SQLITE_CONFIG_MALLOC, &defaultMethods);
                   14879: }
                   14880: 
                   14881: #endif /* SQLITE_SYSTEM_MALLOC */
                   14882: 
                   14883: /************** End of mem1.c ************************************************/
                   14884: /************** Begin file mem2.c ********************************************/
                   14885: /*
                   14886: ** 2007 August 15
                   14887: **
                   14888: ** The author disclaims copyright to this source code.  In place of
                   14889: ** a legal notice, here is a blessing:
                   14890: **
                   14891: **    May you do good and not evil.
                   14892: **    May you find forgiveness for yourself and forgive others.
                   14893: **    May you share freely, never taking more than you give.
                   14894: **
                   14895: *************************************************************************
                   14896: **
                   14897: ** This file contains low-level memory allocation drivers for when
                   14898: ** SQLite will use the standard C-library malloc/realloc/free interface
                   14899: ** to obtain the memory it needs while adding lots of additional debugging
                   14900: ** information to each allocation in order to help detect and fix memory
                   14901: ** leaks and memory usage errors.
                   14902: **
                   14903: ** This file contains implementations of the low-level memory allocation
                   14904: ** routines specified in the sqlite3_mem_methods object.
                   14905: */
                   14906: 
                   14907: /*
                   14908: ** This version of the memory allocator is used only if the
                   14909: ** SQLITE_MEMDEBUG macro is defined
                   14910: */
                   14911: #ifdef SQLITE_MEMDEBUG
                   14912: 
                   14913: /*
                   14914: ** The backtrace functionality is only available with GLIBC
                   14915: */
                   14916: #ifdef __GLIBC__
                   14917:   extern int backtrace(void**,int);
                   14918:   extern void backtrace_symbols_fd(void*const*,int,int);
                   14919: #else
                   14920: # define backtrace(A,B) 1
                   14921: # define backtrace_symbols_fd(A,B,C)
                   14922: #endif
                   14923: 
                   14924: /*
                   14925: ** Each memory allocation looks like this:
                   14926: **
                   14927: **  ------------------------------------------------------------------------
                   14928: **  | Title |  backtrace pointers |  MemBlockHdr |  allocation |  EndGuard |
                   14929: **  ------------------------------------------------------------------------
                   14930: **
                   14931: ** The application code sees only a pointer to the allocation.  We have
                   14932: ** to back up from the allocation pointer to find the MemBlockHdr.  The
                   14933: ** MemBlockHdr tells us the size of the allocation and the number of
                   14934: ** backtrace pointers.  There is also a guard word at the end of the
                   14935: ** MemBlockHdr.
                   14936: */
                   14937: struct MemBlockHdr {
                   14938:   i64 iSize;                          /* Size of this allocation */
                   14939:   struct MemBlockHdr *pNext, *pPrev;  /* Linked list of all unfreed memory */
                   14940:   char nBacktrace;                    /* Number of backtraces on this alloc */
                   14941:   char nBacktraceSlots;               /* Available backtrace slots */
                   14942:   u8 nTitle;                          /* Bytes of title; includes '\0' */
                   14943:   u8 eType;                           /* Allocation type code */
                   14944:   int iForeGuard;                     /* Guard word for sanity */
                   14945: };
                   14946: 
                   14947: /*
                   14948: ** Guard words
                   14949: */
                   14950: #define FOREGUARD 0x80F5E153
                   14951: #define REARGUARD 0xE4676B53
                   14952: 
                   14953: /*
                   14954: ** Number of malloc size increments to track.
                   14955: */
                   14956: #define NCSIZE  1000
                   14957: 
                   14958: /*
                   14959: ** All of the static variables used by this module are collected
                   14960: ** into a single structure named "mem".  This is to keep the
                   14961: ** static variables organized and to reduce namespace pollution
                   14962: ** when this module is combined with other in the amalgamation.
                   14963: */
                   14964: static struct {
                   14965:   
                   14966:   /*
                   14967:   ** Mutex to control access to the memory allocation subsystem.
                   14968:   */
                   14969:   sqlite3_mutex *mutex;
                   14970: 
                   14971:   /*
                   14972:   ** Head and tail of a linked list of all outstanding allocations
                   14973:   */
                   14974:   struct MemBlockHdr *pFirst;
                   14975:   struct MemBlockHdr *pLast;
                   14976:   
                   14977:   /*
                   14978:   ** The number of levels of backtrace to save in new allocations.
                   14979:   */
                   14980:   int nBacktrace;
                   14981:   void (*xBacktrace)(int, int, void **);
                   14982: 
                   14983:   /*
                   14984:   ** Title text to insert in front of each block
                   14985:   */
                   14986:   int nTitle;        /* Bytes of zTitle to save.  Includes '\0' and padding */
                   14987:   char zTitle[100];  /* The title text */
                   14988: 
                   14989:   /* 
                   14990:   ** sqlite3MallocDisallow() increments the following counter.
                   14991:   ** sqlite3MallocAllow() decrements it.
                   14992:   */
                   14993:   int disallow; /* Do not allow memory allocation */
                   14994: 
                   14995:   /*
                   14996:   ** Gather statistics on the sizes of memory allocations.
                   14997:   ** nAlloc[i] is the number of allocation attempts of i*8
                   14998:   ** bytes.  i==NCSIZE is the number of allocation attempts for
                   14999:   ** sizes more than NCSIZE*8 bytes.
                   15000:   */
                   15001:   int nAlloc[NCSIZE];      /* Total number of allocations */
                   15002:   int nCurrent[NCSIZE];    /* Current number of allocations */
                   15003:   int mxCurrent[NCSIZE];   /* Highwater mark for nCurrent */
                   15004: 
                   15005: } mem;
                   15006: 
                   15007: 
                   15008: /*
                   15009: ** Adjust memory usage statistics
                   15010: */
                   15011: static void adjustStats(int iSize, int increment){
                   15012:   int i = ROUND8(iSize)/8;
                   15013:   if( i>NCSIZE-1 ){
                   15014:     i = NCSIZE - 1;
                   15015:   }
                   15016:   if( increment>0 ){
                   15017:     mem.nAlloc[i]++;
                   15018:     mem.nCurrent[i]++;
                   15019:     if( mem.nCurrent[i]>mem.mxCurrent[i] ){
                   15020:       mem.mxCurrent[i] = mem.nCurrent[i];
                   15021:     }
                   15022:   }else{
                   15023:     mem.nCurrent[i]--;
                   15024:     assert( mem.nCurrent[i]>=0 );
                   15025:   }
                   15026: }
                   15027: 
                   15028: /*
                   15029: ** Given an allocation, find the MemBlockHdr for that allocation.
                   15030: **
                   15031: ** This routine checks the guards at either end of the allocation and
                   15032: ** if they are incorrect it asserts.
                   15033: */
                   15034: static struct MemBlockHdr *sqlite3MemsysGetHeader(void *pAllocation){
                   15035:   struct MemBlockHdr *p;
                   15036:   int *pInt;
                   15037:   u8 *pU8;
                   15038:   int nReserve;
                   15039: 
                   15040:   p = (struct MemBlockHdr*)pAllocation;
                   15041:   p--;
                   15042:   assert( p->iForeGuard==(int)FOREGUARD );
                   15043:   nReserve = ROUND8(p->iSize);
                   15044:   pInt = (int*)pAllocation;
                   15045:   pU8 = (u8*)pAllocation;
                   15046:   assert( pInt[nReserve/sizeof(int)]==(int)REARGUARD );
                   15047:   /* This checks any of the "extra" bytes allocated due
                   15048:   ** to rounding up to an 8 byte boundary to ensure 
                   15049:   ** they haven't been overwritten.
                   15050:   */
                   15051:   while( nReserve-- > p->iSize ) assert( pU8[nReserve]==0x65 );
                   15052:   return p;
                   15053: }
                   15054: 
                   15055: /*
                   15056: ** Return the number of bytes currently allocated at address p.
                   15057: */
                   15058: static int sqlite3MemSize(void *p){
                   15059:   struct MemBlockHdr *pHdr;
                   15060:   if( !p ){
                   15061:     return 0;
                   15062:   }
                   15063:   pHdr = sqlite3MemsysGetHeader(p);
                   15064:   return pHdr->iSize;
                   15065: }
                   15066: 
                   15067: /*
                   15068: ** Initialize the memory allocation subsystem.
                   15069: */
                   15070: static int sqlite3MemInit(void *NotUsed){
                   15071:   UNUSED_PARAMETER(NotUsed);
                   15072:   assert( (sizeof(struct MemBlockHdr)&7) == 0 );
                   15073:   if( !sqlite3GlobalConfig.bMemstat ){
                   15074:     /* If memory status is enabled, then the malloc.c wrapper will already
                   15075:     ** hold the STATIC_MEM mutex when the routines here are invoked. */
                   15076:     mem.mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MEM);
                   15077:   }
                   15078:   return SQLITE_OK;
                   15079: }
                   15080: 
                   15081: /*
                   15082: ** Deinitialize the memory allocation subsystem.
                   15083: */
                   15084: static void sqlite3MemShutdown(void *NotUsed){
                   15085:   UNUSED_PARAMETER(NotUsed);
                   15086:   mem.mutex = 0;
                   15087: }
                   15088: 
                   15089: /*
                   15090: ** Round up a request size to the next valid allocation size.
                   15091: */
                   15092: static int sqlite3MemRoundup(int n){
                   15093:   return ROUND8(n);
                   15094: }
                   15095: 
                   15096: /*
                   15097: ** Fill a buffer with pseudo-random bytes.  This is used to preset
                   15098: ** the content of a new memory allocation to unpredictable values and
                   15099: ** to clear the content of a freed allocation to unpredictable values.
                   15100: */
                   15101: static void randomFill(char *pBuf, int nByte){
                   15102:   unsigned int x, y, r;
                   15103:   x = SQLITE_PTR_TO_INT(pBuf);
                   15104:   y = nByte | 1;
                   15105:   while( nByte >= 4 ){
                   15106:     x = (x>>1) ^ (-(x&1) & 0xd0000001);
                   15107:     y = y*1103515245 + 12345;
                   15108:     r = x ^ y;
                   15109:     *(int*)pBuf = r;
                   15110:     pBuf += 4;
                   15111:     nByte -= 4;
                   15112:   }
                   15113:   while( nByte-- > 0 ){
                   15114:     x = (x>>1) ^ (-(x&1) & 0xd0000001);
                   15115:     y = y*1103515245 + 12345;
                   15116:     r = x ^ y;
                   15117:     *(pBuf++) = r & 0xff;
                   15118:   }
                   15119: }
                   15120: 
                   15121: /*
                   15122: ** Allocate nByte bytes of memory.
                   15123: */
                   15124: static void *sqlite3MemMalloc(int nByte){
                   15125:   struct MemBlockHdr *pHdr;
                   15126:   void **pBt;
                   15127:   char *z;
                   15128:   int *pInt;
                   15129:   void *p = 0;
                   15130:   int totalSize;
                   15131:   int nReserve;
                   15132:   sqlite3_mutex_enter(mem.mutex);
                   15133:   assert( mem.disallow==0 );
                   15134:   nReserve = ROUND8(nByte);
                   15135:   totalSize = nReserve + sizeof(*pHdr) + sizeof(int) +
                   15136:                mem.nBacktrace*sizeof(void*) + mem.nTitle;
                   15137:   p = malloc(totalSize);
                   15138:   if( p ){
                   15139:     z = p;
                   15140:     pBt = (void**)&z[mem.nTitle];
                   15141:     pHdr = (struct MemBlockHdr*)&pBt[mem.nBacktrace];
                   15142:     pHdr->pNext = 0;
                   15143:     pHdr->pPrev = mem.pLast;
                   15144:     if( mem.pLast ){
                   15145:       mem.pLast->pNext = pHdr;
                   15146:     }else{
                   15147:       mem.pFirst = pHdr;
                   15148:     }
                   15149:     mem.pLast = pHdr;
                   15150:     pHdr->iForeGuard = FOREGUARD;
                   15151:     pHdr->eType = MEMTYPE_HEAP;
                   15152:     pHdr->nBacktraceSlots = mem.nBacktrace;
                   15153:     pHdr->nTitle = mem.nTitle;
                   15154:     if( mem.nBacktrace ){
                   15155:       void *aAddr[40];
                   15156:       pHdr->nBacktrace = backtrace(aAddr, mem.nBacktrace+1)-1;
                   15157:       memcpy(pBt, &aAddr[1], pHdr->nBacktrace*sizeof(void*));
                   15158:       assert(pBt[0]);
                   15159:       if( mem.xBacktrace ){
                   15160:         mem.xBacktrace(nByte, pHdr->nBacktrace-1, &aAddr[1]);
                   15161:       }
                   15162:     }else{
                   15163:       pHdr->nBacktrace = 0;
                   15164:     }
                   15165:     if( mem.nTitle ){
                   15166:       memcpy(z, mem.zTitle, mem.nTitle);
                   15167:     }
                   15168:     pHdr->iSize = nByte;
                   15169:     adjustStats(nByte, +1);
                   15170:     pInt = (int*)&pHdr[1];
                   15171:     pInt[nReserve/sizeof(int)] = REARGUARD;
                   15172:     randomFill((char*)pInt, nByte);
                   15173:     memset(((char*)pInt)+nByte, 0x65, nReserve-nByte);
                   15174:     p = (void*)pInt;
                   15175:   }
                   15176:   sqlite3_mutex_leave(mem.mutex);
                   15177:   return p; 
                   15178: }
                   15179: 
                   15180: /*
                   15181: ** Free memory.
                   15182: */
                   15183: static void sqlite3MemFree(void *pPrior){
                   15184:   struct MemBlockHdr *pHdr;
                   15185:   void **pBt;
                   15186:   char *z;
                   15187:   assert( sqlite3GlobalConfig.bMemstat || sqlite3GlobalConfig.bCoreMutex==0 
                   15188:        || mem.mutex!=0 );
                   15189:   pHdr = sqlite3MemsysGetHeader(pPrior);
                   15190:   pBt = (void**)pHdr;
                   15191:   pBt -= pHdr->nBacktraceSlots;
                   15192:   sqlite3_mutex_enter(mem.mutex);
                   15193:   if( pHdr->pPrev ){
                   15194:     assert( pHdr->pPrev->pNext==pHdr );
                   15195:     pHdr->pPrev->pNext = pHdr->pNext;
                   15196:   }else{
                   15197:     assert( mem.pFirst==pHdr );
                   15198:     mem.pFirst = pHdr->pNext;
                   15199:   }
                   15200:   if( pHdr->pNext ){
                   15201:     assert( pHdr->pNext->pPrev==pHdr );
                   15202:     pHdr->pNext->pPrev = pHdr->pPrev;
                   15203:   }else{
                   15204:     assert( mem.pLast==pHdr );
                   15205:     mem.pLast = pHdr->pPrev;
                   15206:   }
                   15207:   z = (char*)pBt;
                   15208:   z -= pHdr->nTitle;
                   15209:   adjustStats(pHdr->iSize, -1);
                   15210:   randomFill(z, sizeof(void*)*pHdr->nBacktraceSlots + sizeof(*pHdr) +
                   15211:                 pHdr->iSize + sizeof(int) + pHdr->nTitle);
                   15212:   free(z);
                   15213:   sqlite3_mutex_leave(mem.mutex);  
                   15214: }
                   15215: 
                   15216: /*
                   15217: ** Change the size of an existing memory allocation.
                   15218: **
                   15219: ** For this debugging implementation, we *always* make a copy of the
                   15220: ** allocation into a new place in memory.  In this way, if the 
                   15221: ** higher level code is using pointer to the old allocation, it is 
                   15222: ** much more likely to break and we are much more liking to find
                   15223: ** the error.
                   15224: */
                   15225: static void *sqlite3MemRealloc(void *pPrior, int nByte){
                   15226:   struct MemBlockHdr *pOldHdr;
                   15227:   void *pNew;
                   15228:   assert( mem.disallow==0 );
                   15229:   assert( (nByte & 7)==0 );     /* EV: R-46199-30249 */
                   15230:   pOldHdr = sqlite3MemsysGetHeader(pPrior);
                   15231:   pNew = sqlite3MemMalloc(nByte);
                   15232:   if( pNew ){
                   15233:     memcpy(pNew, pPrior, nByte<pOldHdr->iSize ? nByte : pOldHdr->iSize);
                   15234:     if( nByte>pOldHdr->iSize ){
                   15235:       randomFill(&((char*)pNew)[pOldHdr->iSize], nByte - pOldHdr->iSize);
                   15236:     }
                   15237:     sqlite3MemFree(pPrior);
                   15238:   }
                   15239:   return pNew;
                   15240: }
                   15241: 
                   15242: /*
                   15243: ** Populate the low-level memory allocation function pointers in
                   15244: ** sqlite3GlobalConfig.m with pointers to the routines in this file.
                   15245: */
                   15246: SQLITE_PRIVATE void sqlite3MemSetDefault(void){
                   15247:   static const sqlite3_mem_methods defaultMethods = {
                   15248:      sqlite3MemMalloc,
                   15249:      sqlite3MemFree,
                   15250:      sqlite3MemRealloc,
                   15251:      sqlite3MemSize,
                   15252:      sqlite3MemRoundup,
                   15253:      sqlite3MemInit,
                   15254:      sqlite3MemShutdown,
                   15255:      0
                   15256:   };
                   15257:   sqlite3_config(SQLITE_CONFIG_MALLOC, &defaultMethods);
                   15258: }
                   15259: 
                   15260: /*
                   15261: ** Set the "type" of an allocation.
                   15262: */
                   15263: SQLITE_PRIVATE void sqlite3MemdebugSetType(void *p, u8 eType){
                   15264:   if( p && sqlite3GlobalConfig.m.xMalloc==sqlite3MemMalloc ){
                   15265:     struct MemBlockHdr *pHdr;
                   15266:     pHdr = sqlite3MemsysGetHeader(p);
                   15267:     assert( pHdr->iForeGuard==FOREGUARD );
                   15268:     pHdr->eType = eType;
                   15269:   }
                   15270: }
                   15271: 
                   15272: /*
                   15273: ** Return TRUE if the mask of type in eType matches the type of the
                   15274: ** allocation p.  Also return true if p==NULL.
                   15275: **
                   15276: ** This routine is designed for use within an assert() statement, to
                   15277: ** verify the type of an allocation.  For example:
                   15278: **
                   15279: **     assert( sqlite3MemdebugHasType(p, MEMTYPE_DB) );
                   15280: */
                   15281: SQLITE_PRIVATE int sqlite3MemdebugHasType(void *p, u8 eType){
                   15282:   int rc = 1;
                   15283:   if( p && sqlite3GlobalConfig.m.xMalloc==sqlite3MemMalloc ){
                   15284:     struct MemBlockHdr *pHdr;
                   15285:     pHdr = sqlite3MemsysGetHeader(p);
                   15286:     assert( pHdr->iForeGuard==FOREGUARD );         /* Allocation is valid */
                   15287:     if( (pHdr->eType&eType)==0 ){
                   15288:       rc = 0;
                   15289:     }
                   15290:   }
                   15291:   return rc;
                   15292: }
                   15293: 
                   15294: /*
                   15295: ** Return TRUE if the mask of type in eType matches no bits of the type of the
                   15296: ** allocation p.  Also return true if p==NULL.
                   15297: **
                   15298: ** This routine is designed for use within an assert() statement, to
                   15299: ** verify the type of an allocation.  For example:
                   15300: **
                   15301: **     assert( sqlite3MemdebugNoType(p, MEMTYPE_DB) );
                   15302: */
                   15303: SQLITE_PRIVATE int sqlite3MemdebugNoType(void *p, u8 eType){
                   15304:   int rc = 1;
                   15305:   if( p && sqlite3GlobalConfig.m.xMalloc==sqlite3MemMalloc ){
                   15306:     struct MemBlockHdr *pHdr;
                   15307:     pHdr = sqlite3MemsysGetHeader(p);
                   15308:     assert( pHdr->iForeGuard==FOREGUARD );         /* Allocation is valid */
                   15309:     if( (pHdr->eType&eType)!=0 ){
                   15310:       rc = 0;
                   15311:     }
                   15312:   }
                   15313:   return rc;
                   15314: }
                   15315: 
                   15316: /*
                   15317: ** Set the number of backtrace levels kept for each allocation.
                   15318: ** A value of zero turns off backtracing.  The number is always rounded
                   15319: ** up to a multiple of 2.
                   15320: */
                   15321: SQLITE_PRIVATE void sqlite3MemdebugBacktrace(int depth){
                   15322:   if( depth<0 ){ depth = 0; }
                   15323:   if( depth>20 ){ depth = 20; }
                   15324:   depth = (depth+1)&0xfe;
                   15325:   mem.nBacktrace = depth;
                   15326: }
                   15327: 
                   15328: SQLITE_PRIVATE void sqlite3MemdebugBacktraceCallback(void (*xBacktrace)(int, int, void **)){
                   15329:   mem.xBacktrace = xBacktrace;
                   15330: }
                   15331: 
                   15332: /*
                   15333: ** Set the title string for subsequent allocations.
                   15334: */
                   15335: SQLITE_PRIVATE void sqlite3MemdebugSettitle(const char *zTitle){
                   15336:   unsigned int n = sqlite3Strlen30(zTitle) + 1;
                   15337:   sqlite3_mutex_enter(mem.mutex);
                   15338:   if( n>=sizeof(mem.zTitle) ) n = sizeof(mem.zTitle)-1;
                   15339:   memcpy(mem.zTitle, zTitle, n);
                   15340:   mem.zTitle[n] = 0;
                   15341:   mem.nTitle = ROUND8(n);
                   15342:   sqlite3_mutex_leave(mem.mutex);
                   15343: }
                   15344: 
                   15345: SQLITE_PRIVATE void sqlite3MemdebugSync(){
                   15346:   struct MemBlockHdr *pHdr;
                   15347:   for(pHdr=mem.pFirst; pHdr; pHdr=pHdr->pNext){
                   15348:     void **pBt = (void**)pHdr;
                   15349:     pBt -= pHdr->nBacktraceSlots;
                   15350:     mem.xBacktrace(pHdr->iSize, pHdr->nBacktrace-1, &pBt[1]);
                   15351:   }
                   15352: }
                   15353: 
                   15354: /*
                   15355: ** Open the file indicated and write a log of all unfreed memory 
                   15356: ** allocations into that log.
                   15357: */
                   15358: SQLITE_PRIVATE void sqlite3MemdebugDump(const char *zFilename){
                   15359:   FILE *out;
                   15360:   struct MemBlockHdr *pHdr;
                   15361:   void **pBt;
                   15362:   int i;
                   15363:   out = fopen(zFilename, "w");
                   15364:   if( out==0 ){
                   15365:     fprintf(stderr, "** Unable to output memory debug output log: %s **\n",
                   15366:                     zFilename);
                   15367:     return;
                   15368:   }
                   15369:   for(pHdr=mem.pFirst; pHdr; pHdr=pHdr->pNext){
                   15370:     char *z = (char*)pHdr;
                   15371:     z -= pHdr->nBacktraceSlots*sizeof(void*) + pHdr->nTitle;
                   15372:     fprintf(out, "**** %lld bytes at %p from %s ****\n", 
                   15373:             pHdr->iSize, &pHdr[1], pHdr->nTitle ? z : "???");
                   15374:     if( pHdr->nBacktrace ){
                   15375:       fflush(out);
                   15376:       pBt = (void**)pHdr;
                   15377:       pBt -= pHdr->nBacktraceSlots;
                   15378:       backtrace_symbols_fd(pBt, pHdr->nBacktrace, fileno(out));
                   15379:       fprintf(out, "\n");
                   15380:     }
                   15381:   }
                   15382:   fprintf(out, "COUNTS:\n");
                   15383:   for(i=0; i<NCSIZE-1; i++){
                   15384:     if( mem.nAlloc[i] ){
                   15385:       fprintf(out, "   %5d: %10d %10d %10d\n", 
                   15386:             i*8, mem.nAlloc[i], mem.nCurrent[i], mem.mxCurrent[i]);
                   15387:     }
                   15388:   }
                   15389:   if( mem.nAlloc[NCSIZE-1] ){
                   15390:     fprintf(out, "   %5d: %10d %10d %10d\n",
                   15391:              NCSIZE*8-8, mem.nAlloc[NCSIZE-1],
                   15392:              mem.nCurrent[NCSIZE-1], mem.mxCurrent[NCSIZE-1]);
                   15393:   }
                   15394:   fclose(out);
                   15395: }
                   15396: 
                   15397: /*
                   15398: ** Return the number of times sqlite3MemMalloc() has been called.
                   15399: */
                   15400: SQLITE_PRIVATE int sqlite3MemdebugMallocCount(){
                   15401:   int i;
                   15402:   int nTotal = 0;
                   15403:   for(i=0; i<NCSIZE; i++){
                   15404:     nTotal += mem.nAlloc[i];
                   15405:   }
                   15406:   return nTotal;
                   15407: }
                   15408: 
                   15409: 
                   15410: #endif /* SQLITE_MEMDEBUG */
                   15411: 
                   15412: /************** End of mem2.c ************************************************/
                   15413: /************** Begin file mem3.c ********************************************/
                   15414: /*
                   15415: ** 2007 October 14
                   15416: **
                   15417: ** The author disclaims copyright to this source code.  In place of
                   15418: ** a legal notice, here is a blessing:
                   15419: **
                   15420: **    May you do good and not evil.
                   15421: **    May you find forgiveness for yourself and forgive others.
                   15422: **    May you share freely, never taking more than you give.
                   15423: **
                   15424: *************************************************************************
                   15425: ** This file contains the C functions that implement a memory
                   15426: ** allocation subsystem for use by SQLite. 
                   15427: **
                   15428: ** This version of the memory allocation subsystem omits all
                   15429: ** use of malloc(). The SQLite user supplies a block of memory
                   15430: ** before calling sqlite3_initialize() from which allocations
                   15431: ** are made and returned by the xMalloc() and xRealloc() 
                   15432: ** implementations. Once sqlite3_initialize() has been called,
                   15433: ** the amount of memory available to SQLite is fixed and cannot
                   15434: ** be changed.
                   15435: **
                   15436: ** This version of the memory allocation subsystem is included
                   15437: ** in the build only if SQLITE_ENABLE_MEMSYS3 is defined.
                   15438: */
                   15439: 
                   15440: /*
                   15441: ** This version of the memory allocator is only built into the library
                   15442: ** SQLITE_ENABLE_MEMSYS3 is defined. Defining this symbol does not
                   15443: ** mean that the library will use a memory-pool by default, just that
                   15444: ** it is available. The mempool allocator is activated by calling
                   15445: ** sqlite3_config().
                   15446: */
                   15447: #ifdef SQLITE_ENABLE_MEMSYS3
                   15448: 
                   15449: /*
                   15450: ** Maximum size (in Mem3Blocks) of a "small" chunk.
                   15451: */
                   15452: #define MX_SMALL 10
                   15453: 
                   15454: 
                   15455: /*
                   15456: ** Number of freelist hash slots
                   15457: */
                   15458: #define N_HASH  61
                   15459: 
                   15460: /*
                   15461: ** A memory allocation (also called a "chunk") consists of two or 
                   15462: ** more blocks where each block is 8 bytes.  The first 8 bytes are 
                   15463: ** a header that is not returned to the user.
                   15464: **
                   15465: ** A chunk is two or more blocks that is either checked out or
                   15466: ** free.  The first block has format u.hdr.  u.hdr.size4x is 4 times the
                   15467: ** size of the allocation in blocks if the allocation is free.
                   15468: ** The u.hdr.size4x&1 bit is true if the chunk is checked out and
                   15469: ** false if the chunk is on the freelist.  The u.hdr.size4x&2 bit
                   15470: ** is true if the previous chunk is checked out and false if the
                   15471: ** previous chunk is free.  The u.hdr.prevSize field is the size of
                   15472: ** the previous chunk in blocks if the previous chunk is on the
                   15473: ** freelist. If the previous chunk is checked out, then
                   15474: ** u.hdr.prevSize can be part of the data for that chunk and should
                   15475: ** not be read or written.
                   15476: **
                   15477: ** We often identify a chunk by its index in mem3.aPool[].  When
                   15478: ** this is done, the chunk index refers to the second block of
                   15479: ** the chunk.  In this way, the first chunk has an index of 1.
                   15480: ** A chunk index of 0 means "no such chunk" and is the equivalent
                   15481: ** of a NULL pointer.
                   15482: **
                   15483: ** The second block of free chunks is of the form u.list.  The
                   15484: ** two fields form a double-linked list of chunks of related sizes.
                   15485: ** Pointers to the head of the list are stored in mem3.aiSmall[] 
                   15486: ** for smaller chunks and mem3.aiHash[] for larger chunks.
                   15487: **
                   15488: ** The second block of a chunk is user data if the chunk is checked 
                   15489: ** out.  If a chunk is checked out, the user data may extend into
                   15490: ** the u.hdr.prevSize value of the following chunk.
                   15491: */
                   15492: typedef struct Mem3Block Mem3Block;
                   15493: struct Mem3Block {
                   15494:   union {
                   15495:     struct {
                   15496:       u32 prevSize;   /* Size of previous chunk in Mem3Block elements */
                   15497:       u32 size4x;     /* 4x the size of current chunk in Mem3Block elements */
                   15498:     } hdr;
                   15499:     struct {
                   15500:       u32 next;       /* Index in mem3.aPool[] of next free chunk */
                   15501:       u32 prev;       /* Index in mem3.aPool[] of previous free chunk */
                   15502:     } list;
                   15503:   } u;
                   15504: };
                   15505: 
                   15506: /*
                   15507: ** All of the static variables used by this module are collected
                   15508: ** into a single structure named "mem3".  This is to keep the
                   15509: ** static variables organized and to reduce namespace pollution
                   15510: ** when this module is combined with other in the amalgamation.
                   15511: */
                   15512: static SQLITE_WSD struct Mem3Global {
                   15513:   /*
                   15514:   ** Memory available for allocation. nPool is the size of the array
                   15515:   ** (in Mem3Blocks) pointed to by aPool less 2.
                   15516:   */
                   15517:   u32 nPool;
                   15518:   Mem3Block *aPool;
                   15519: 
                   15520:   /*
                   15521:   ** True if we are evaluating an out-of-memory callback.
                   15522:   */
                   15523:   int alarmBusy;
                   15524:   
                   15525:   /*
                   15526:   ** Mutex to control access to the memory allocation subsystem.
                   15527:   */
                   15528:   sqlite3_mutex *mutex;
                   15529:   
                   15530:   /*
                   15531:   ** The minimum amount of free space that we have seen.
                   15532:   */
                   15533:   u32 mnMaster;
                   15534: 
                   15535:   /*
                   15536:   ** iMaster is the index of the master chunk.  Most new allocations
                   15537:   ** occur off of this chunk.  szMaster is the size (in Mem3Blocks)
                   15538:   ** of the current master.  iMaster is 0 if there is not master chunk.
                   15539:   ** The master chunk is not in either the aiHash[] or aiSmall[].
                   15540:   */
                   15541:   u32 iMaster;
                   15542:   u32 szMaster;
                   15543: 
                   15544:   /*
                   15545:   ** Array of lists of free blocks according to the block size 
                   15546:   ** for smaller chunks, or a hash on the block size for larger
                   15547:   ** chunks.
                   15548:   */
                   15549:   u32 aiSmall[MX_SMALL-1];   /* For sizes 2 through MX_SMALL, inclusive */
                   15550:   u32 aiHash[N_HASH];        /* For sizes MX_SMALL+1 and larger */
                   15551: } mem3 = { 97535575 };
                   15552: 
                   15553: #define mem3 GLOBAL(struct Mem3Global, mem3)
                   15554: 
                   15555: /*
                   15556: ** Unlink the chunk at mem3.aPool[i] from list it is currently
                   15557: ** on.  *pRoot is the list that i is a member of.
                   15558: */
                   15559: static void memsys3UnlinkFromList(u32 i, u32 *pRoot){
                   15560:   u32 next = mem3.aPool[i].u.list.next;
                   15561:   u32 prev = mem3.aPool[i].u.list.prev;
                   15562:   assert( sqlite3_mutex_held(mem3.mutex) );
                   15563:   if( prev==0 ){
                   15564:     *pRoot = next;
                   15565:   }else{
                   15566:     mem3.aPool[prev].u.list.next = next;
                   15567:   }
                   15568:   if( next ){
                   15569:     mem3.aPool[next].u.list.prev = prev;
                   15570:   }
                   15571:   mem3.aPool[i].u.list.next = 0;
                   15572:   mem3.aPool[i].u.list.prev = 0;
                   15573: }
                   15574: 
                   15575: /*
                   15576: ** Unlink the chunk at index i from 
                   15577: ** whatever list is currently a member of.
                   15578: */
                   15579: static void memsys3Unlink(u32 i){
                   15580:   u32 size, hash;
                   15581:   assert( sqlite3_mutex_held(mem3.mutex) );
                   15582:   assert( (mem3.aPool[i-1].u.hdr.size4x & 1)==0 );
                   15583:   assert( i>=1 );
                   15584:   size = mem3.aPool[i-1].u.hdr.size4x/4;
                   15585:   assert( size==mem3.aPool[i+size-1].u.hdr.prevSize );
                   15586:   assert( size>=2 );
                   15587:   if( size <= MX_SMALL ){
                   15588:     memsys3UnlinkFromList(i, &mem3.aiSmall[size-2]);
                   15589:   }else{
                   15590:     hash = size % N_HASH;
                   15591:     memsys3UnlinkFromList(i, &mem3.aiHash[hash]);
                   15592:   }
                   15593: }
                   15594: 
                   15595: /*
                   15596: ** Link the chunk at mem3.aPool[i] so that is on the list rooted
                   15597: ** at *pRoot.
                   15598: */
                   15599: static void memsys3LinkIntoList(u32 i, u32 *pRoot){
                   15600:   assert( sqlite3_mutex_held(mem3.mutex) );
                   15601:   mem3.aPool[i].u.list.next = *pRoot;
                   15602:   mem3.aPool[i].u.list.prev = 0;
                   15603:   if( *pRoot ){
                   15604:     mem3.aPool[*pRoot].u.list.prev = i;
                   15605:   }
                   15606:   *pRoot = i;
                   15607: }
                   15608: 
                   15609: /*
                   15610: ** Link the chunk at index i into either the appropriate
                   15611: ** small chunk list, or into the large chunk hash table.
                   15612: */
                   15613: static void memsys3Link(u32 i){
                   15614:   u32 size, hash;
                   15615:   assert( sqlite3_mutex_held(mem3.mutex) );
                   15616:   assert( i>=1 );
                   15617:   assert( (mem3.aPool[i-1].u.hdr.size4x & 1)==0 );
                   15618:   size = mem3.aPool[i-1].u.hdr.size4x/4;
                   15619:   assert( size==mem3.aPool[i+size-1].u.hdr.prevSize );
                   15620:   assert( size>=2 );
                   15621:   if( size <= MX_SMALL ){
                   15622:     memsys3LinkIntoList(i, &mem3.aiSmall[size-2]);
                   15623:   }else{
                   15624:     hash = size % N_HASH;
                   15625:     memsys3LinkIntoList(i, &mem3.aiHash[hash]);
                   15626:   }
                   15627: }
                   15628: 
                   15629: /*
                   15630: ** If the STATIC_MEM mutex is not already held, obtain it now. The mutex
                   15631: ** will already be held (obtained by code in malloc.c) if
                   15632: ** sqlite3GlobalConfig.bMemStat is true.
                   15633: */
                   15634: static void memsys3Enter(void){
                   15635:   if( sqlite3GlobalConfig.bMemstat==0 && mem3.mutex==0 ){
                   15636:     mem3.mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MEM);
                   15637:   }
                   15638:   sqlite3_mutex_enter(mem3.mutex);
                   15639: }
                   15640: static void memsys3Leave(void){
                   15641:   sqlite3_mutex_leave(mem3.mutex);
                   15642: }
                   15643: 
                   15644: /*
                   15645: ** Called when we are unable to satisfy an allocation of nBytes.
                   15646: */
                   15647: static void memsys3OutOfMemory(int nByte){
                   15648:   if( !mem3.alarmBusy ){
                   15649:     mem3.alarmBusy = 1;
                   15650:     assert( sqlite3_mutex_held(mem3.mutex) );
                   15651:     sqlite3_mutex_leave(mem3.mutex);
                   15652:     sqlite3_release_memory(nByte);
                   15653:     sqlite3_mutex_enter(mem3.mutex);
                   15654:     mem3.alarmBusy = 0;
                   15655:   }
                   15656: }
                   15657: 
                   15658: 
                   15659: /*
                   15660: ** Chunk i is a free chunk that has been unlinked.  Adjust its 
                   15661: ** size parameters for check-out and return a pointer to the 
                   15662: ** user portion of the chunk.
                   15663: */
                   15664: static void *memsys3Checkout(u32 i, u32 nBlock){
                   15665:   u32 x;
                   15666:   assert( sqlite3_mutex_held(mem3.mutex) );
                   15667:   assert( i>=1 );
                   15668:   assert( mem3.aPool[i-1].u.hdr.size4x/4==nBlock );
                   15669:   assert( mem3.aPool[i+nBlock-1].u.hdr.prevSize==nBlock );
                   15670:   x = mem3.aPool[i-1].u.hdr.size4x;
                   15671:   mem3.aPool[i-1].u.hdr.size4x = nBlock*4 | 1 | (x&2);
                   15672:   mem3.aPool[i+nBlock-1].u.hdr.prevSize = nBlock;
                   15673:   mem3.aPool[i+nBlock-1].u.hdr.size4x |= 2;
                   15674:   return &mem3.aPool[i];
                   15675: }
                   15676: 
                   15677: /*
                   15678: ** Carve a piece off of the end of the mem3.iMaster free chunk.
                   15679: ** Return a pointer to the new allocation.  Or, if the master chunk
                   15680: ** is not large enough, return 0.
                   15681: */
                   15682: static void *memsys3FromMaster(u32 nBlock){
                   15683:   assert( sqlite3_mutex_held(mem3.mutex) );
                   15684:   assert( mem3.szMaster>=nBlock );
                   15685:   if( nBlock>=mem3.szMaster-1 ){
                   15686:     /* Use the entire master */
                   15687:     void *p = memsys3Checkout(mem3.iMaster, mem3.szMaster);
                   15688:     mem3.iMaster = 0;
                   15689:     mem3.szMaster = 0;
                   15690:     mem3.mnMaster = 0;
                   15691:     return p;
                   15692:   }else{
                   15693:     /* Split the master block.  Return the tail. */
                   15694:     u32 newi, x;
                   15695:     newi = mem3.iMaster + mem3.szMaster - nBlock;
                   15696:     assert( newi > mem3.iMaster+1 );
                   15697:     mem3.aPool[mem3.iMaster+mem3.szMaster-1].u.hdr.prevSize = nBlock;
                   15698:     mem3.aPool[mem3.iMaster+mem3.szMaster-1].u.hdr.size4x |= 2;
                   15699:     mem3.aPool[newi-1].u.hdr.size4x = nBlock*4 + 1;
                   15700:     mem3.szMaster -= nBlock;
                   15701:     mem3.aPool[newi-1].u.hdr.prevSize = mem3.szMaster;
                   15702:     x = mem3.aPool[mem3.iMaster-1].u.hdr.size4x & 2;
                   15703:     mem3.aPool[mem3.iMaster-1].u.hdr.size4x = mem3.szMaster*4 | x;
                   15704:     if( mem3.szMaster < mem3.mnMaster ){
                   15705:       mem3.mnMaster = mem3.szMaster;
                   15706:     }
                   15707:     return (void*)&mem3.aPool[newi];
                   15708:   }
                   15709: }
                   15710: 
                   15711: /*
                   15712: ** *pRoot is the head of a list of free chunks of the same size
                   15713: ** or same size hash.  In other words, *pRoot is an entry in either
                   15714: ** mem3.aiSmall[] or mem3.aiHash[].  
                   15715: **
                   15716: ** This routine examines all entries on the given list and tries
                   15717: ** to coalesce each entries with adjacent free chunks.  
                   15718: **
                   15719: ** If it sees a chunk that is larger than mem3.iMaster, it replaces 
                   15720: ** the current mem3.iMaster with the new larger chunk.  In order for
                   15721: ** this mem3.iMaster replacement to work, the master chunk must be
                   15722: ** linked into the hash tables.  That is not the normal state of
                   15723: ** affairs, of course.  The calling routine must link the master
                   15724: ** chunk before invoking this routine, then must unlink the (possibly
                   15725: ** changed) master chunk once this routine has finished.
                   15726: */
                   15727: static void memsys3Merge(u32 *pRoot){
                   15728:   u32 iNext, prev, size, i, x;
                   15729: 
                   15730:   assert( sqlite3_mutex_held(mem3.mutex) );
                   15731:   for(i=*pRoot; i>0; i=iNext){
                   15732:     iNext = mem3.aPool[i].u.list.next;
                   15733:     size = mem3.aPool[i-1].u.hdr.size4x;
                   15734:     assert( (size&1)==0 );
                   15735:     if( (size&2)==0 ){
                   15736:       memsys3UnlinkFromList(i, pRoot);
                   15737:       assert( i > mem3.aPool[i-1].u.hdr.prevSize );
                   15738:       prev = i - mem3.aPool[i-1].u.hdr.prevSize;
                   15739:       if( prev==iNext ){
                   15740:         iNext = mem3.aPool[prev].u.list.next;
                   15741:       }
                   15742:       memsys3Unlink(prev);
                   15743:       size = i + size/4 - prev;
                   15744:       x = mem3.aPool[prev-1].u.hdr.size4x & 2;
                   15745:       mem3.aPool[prev-1].u.hdr.size4x = size*4 | x;
                   15746:       mem3.aPool[prev+size-1].u.hdr.prevSize = size;
                   15747:       memsys3Link(prev);
                   15748:       i = prev;
                   15749:     }else{
                   15750:       size /= 4;
                   15751:     }
                   15752:     if( size>mem3.szMaster ){
                   15753:       mem3.iMaster = i;
                   15754:       mem3.szMaster = size;
                   15755:     }
                   15756:   }
                   15757: }
                   15758: 
                   15759: /*
                   15760: ** Return a block of memory of at least nBytes in size.
                   15761: ** Return NULL if unable.
                   15762: **
                   15763: ** This function assumes that the necessary mutexes, if any, are
                   15764: ** already held by the caller. Hence "Unsafe".
                   15765: */
                   15766: static void *memsys3MallocUnsafe(int nByte){
                   15767:   u32 i;
                   15768:   u32 nBlock;
                   15769:   u32 toFree;
                   15770: 
                   15771:   assert( sqlite3_mutex_held(mem3.mutex) );
                   15772:   assert( sizeof(Mem3Block)==8 );
                   15773:   if( nByte<=12 ){
                   15774:     nBlock = 2;
                   15775:   }else{
                   15776:     nBlock = (nByte + 11)/8;
                   15777:   }
                   15778:   assert( nBlock>=2 );
                   15779: 
                   15780:   /* STEP 1:
                   15781:   ** Look for an entry of the correct size in either the small
                   15782:   ** chunk table or in the large chunk hash table.  This is
                   15783:   ** successful most of the time (about 9 times out of 10).
                   15784:   */
                   15785:   if( nBlock <= MX_SMALL ){
                   15786:     i = mem3.aiSmall[nBlock-2];
                   15787:     if( i>0 ){
                   15788:       memsys3UnlinkFromList(i, &mem3.aiSmall[nBlock-2]);
                   15789:       return memsys3Checkout(i, nBlock);
                   15790:     }
                   15791:   }else{
                   15792:     int hash = nBlock % N_HASH;
                   15793:     for(i=mem3.aiHash[hash]; i>0; i=mem3.aPool[i].u.list.next){
                   15794:       if( mem3.aPool[i-1].u.hdr.size4x/4==nBlock ){
                   15795:         memsys3UnlinkFromList(i, &mem3.aiHash[hash]);
                   15796:         return memsys3Checkout(i, nBlock);
                   15797:       }
                   15798:     }
                   15799:   }
                   15800: 
                   15801:   /* STEP 2:
                   15802:   ** Try to satisfy the allocation by carving a piece off of the end
                   15803:   ** of the master chunk.  This step usually works if step 1 fails.
                   15804:   */
                   15805:   if( mem3.szMaster>=nBlock ){
                   15806:     return memsys3FromMaster(nBlock);
                   15807:   }
                   15808: 
                   15809: 
                   15810:   /* STEP 3:  
                   15811:   ** Loop through the entire memory pool.  Coalesce adjacent free
                   15812:   ** chunks.  Recompute the master chunk as the largest free chunk.
                   15813:   ** Then try again to satisfy the allocation by carving a piece off
                   15814:   ** of the end of the master chunk.  This step happens very
                   15815:   ** rarely (we hope!)
                   15816:   */
                   15817:   for(toFree=nBlock*16; toFree<(mem3.nPool*16); toFree *= 2){
                   15818:     memsys3OutOfMemory(toFree);
                   15819:     if( mem3.iMaster ){
                   15820:       memsys3Link(mem3.iMaster);
                   15821:       mem3.iMaster = 0;
                   15822:       mem3.szMaster = 0;
                   15823:     }
                   15824:     for(i=0; i<N_HASH; i++){
                   15825:       memsys3Merge(&mem3.aiHash[i]);
                   15826:     }
                   15827:     for(i=0; i<MX_SMALL-1; i++){
                   15828:       memsys3Merge(&mem3.aiSmall[i]);
                   15829:     }
                   15830:     if( mem3.szMaster ){
                   15831:       memsys3Unlink(mem3.iMaster);
                   15832:       if( mem3.szMaster>=nBlock ){
                   15833:         return memsys3FromMaster(nBlock);
                   15834:       }
                   15835:     }
                   15836:   }
                   15837: 
                   15838:   /* If none of the above worked, then we fail. */
                   15839:   return 0;
                   15840: }
                   15841: 
                   15842: /*
                   15843: ** Free an outstanding memory allocation.
                   15844: **
                   15845: ** This function assumes that the necessary mutexes, if any, are
                   15846: ** already held by the caller. Hence "Unsafe".
                   15847: */
                   15848: void memsys3FreeUnsafe(void *pOld){
                   15849:   Mem3Block *p = (Mem3Block*)pOld;
                   15850:   int i;
                   15851:   u32 size, x;
                   15852:   assert( sqlite3_mutex_held(mem3.mutex) );
                   15853:   assert( p>mem3.aPool && p<&mem3.aPool[mem3.nPool] );
                   15854:   i = p - mem3.aPool;
                   15855:   assert( (mem3.aPool[i-1].u.hdr.size4x&1)==1 );
                   15856:   size = mem3.aPool[i-1].u.hdr.size4x/4;
                   15857:   assert( i+size<=mem3.nPool+1 );
                   15858:   mem3.aPool[i-1].u.hdr.size4x &= ~1;
                   15859:   mem3.aPool[i+size-1].u.hdr.prevSize = size;
                   15860:   mem3.aPool[i+size-1].u.hdr.size4x &= ~2;
                   15861:   memsys3Link(i);
                   15862: 
                   15863:   /* Try to expand the master using the newly freed chunk */
                   15864:   if( mem3.iMaster ){
                   15865:     while( (mem3.aPool[mem3.iMaster-1].u.hdr.size4x&2)==0 ){
                   15866:       size = mem3.aPool[mem3.iMaster-1].u.hdr.prevSize;
                   15867:       mem3.iMaster -= size;
                   15868:       mem3.szMaster += size;
                   15869:       memsys3Unlink(mem3.iMaster);
                   15870:       x = mem3.aPool[mem3.iMaster-1].u.hdr.size4x & 2;
                   15871:       mem3.aPool[mem3.iMaster-1].u.hdr.size4x = mem3.szMaster*4 | x;
                   15872:       mem3.aPool[mem3.iMaster+mem3.szMaster-1].u.hdr.prevSize = mem3.szMaster;
                   15873:     }
                   15874:     x = mem3.aPool[mem3.iMaster-1].u.hdr.size4x & 2;
                   15875:     while( (mem3.aPool[mem3.iMaster+mem3.szMaster-1].u.hdr.size4x&1)==0 ){
                   15876:       memsys3Unlink(mem3.iMaster+mem3.szMaster);
                   15877:       mem3.szMaster += mem3.aPool[mem3.iMaster+mem3.szMaster-1].u.hdr.size4x/4;
                   15878:       mem3.aPool[mem3.iMaster-1].u.hdr.size4x = mem3.szMaster*4 | x;
                   15879:       mem3.aPool[mem3.iMaster+mem3.szMaster-1].u.hdr.prevSize = mem3.szMaster;
                   15880:     }
                   15881:   }
                   15882: }
                   15883: 
                   15884: /*
                   15885: ** Return the size of an outstanding allocation, in bytes.  The
                   15886: ** size returned omits the 8-byte header overhead.  This only
                   15887: ** works for chunks that are currently checked out.
                   15888: */
                   15889: static int memsys3Size(void *p){
                   15890:   Mem3Block *pBlock;
                   15891:   if( p==0 ) return 0;
                   15892:   pBlock = (Mem3Block*)p;
                   15893:   assert( (pBlock[-1].u.hdr.size4x&1)!=0 );
                   15894:   return (pBlock[-1].u.hdr.size4x&~3)*2 - 4;
                   15895: }
                   15896: 
                   15897: /*
                   15898: ** Round up a request size to the next valid allocation size.
                   15899: */
                   15900: static int memsys3Roundup(int n){
                   15901:   if( n<=12 ){
                   15902:     return 12;
                   15903:   }else{
                   15904:     return ((n+11)&~7) - 4;
                   15905:   }
                   15906: }
                   15907: 
                   15908: /*
                   15909: ** Allocate nBytes of memory.
                   15910: */
                   15911: static void *memsys3Malloc(int nBytes){
                   15912:   sqlite3_int64 *p;
                   15913:   assert( nBytes>0 );          /* malloc.c filters out 0 byte requests */
                   15914:   memsys3Enter();
                   15915:   p = memsys3MallocUnsafe(nBytes);
                   15916:   memsys3Leave();
                   15917:   return (void*)p; 
                   15918: }
                   15919: 
                   15920: /*
                   15921: ** Free memory.
                   15922: */
                   15923: void memsys3Free(void *pPrior){
                   15924:   assert( pPrior );
                   15925:   memsys3Enter();
                   15926:   memsys3FreeUnsafe(pPrior);
                   15927:   memsys3Leave();
                   15928: }
                   15929: 
                   15930: /*
                   15931: ** Change the size of an existing memory allocation
                   15932: */
                   15933: void *memsys3Realloc(void *pPrior, int nBytes){
                   15934:   int nOld;
                   15935:   void *p;
                   15936:   if( pPrior==0 ){
                   15937:     return sqlite3_malloc(nBytes);
                   15938:   }
                   15939:   if( nBytes<=0 ){
                   15940:     sqlite3_free(pPrior);
                   15941:     return 0;
                   15942:   }
                   15943:   nOld = memsys3Size(pPrior);
                   15944:   if( nBytes<=nOld && nBytes>=nOld-128 ){
                   15945:     return pPrior;
                   15946:   }
                   15947:   memsys3Enter();
                   15948:   p = memsys3MallocUnsafe(nBytes);
                   15949:   if( p ){
                   15950:     if( nOld<nBytes ){
                   15951:       memcpy(p, pPrior, nOld);
                   15952:     }else{
                   15953:       memcpy(p, pPrior, nBytes);
                   15954:     }
                   15955:     memsys3FreeUnsafe(pPrior);
                   15956:   }
                   15957:   memsys3Leave();
                   15958:   return p;
                   15959: }
                   15960: 
                   15961: /*
                   15962: ** Initialize this module.
                   15963: */
                   15964: static int memsys3Init(void *NotUsed){
                   15965:   UNUSED_PARAMETER(NotUsed);
                   15966:   if( !sqlite3GlobalConfig.pHeap ){
                   15967:     return SQLITE_ERROR;
                   15968:   }
                   15969: 
                   15970:   /* Store a pointer to the memory block in global structure mem3. */
                   15971:   assert( sizeof(Mem3Block)==8 );
                   15972:   mem3.aPool = (Mem3Block *)sqlite3GlobalConfig.pHeap;
                   15973:   mem3.nPool = (sqlite3GlobalConfig.nHeap / sizeof(Mem3Block)) - 2;
                   15974: 
                   15975:   /* Initialize the master block. */
                   15976:   mem3.szMaster = mem3.nPool;
                   15977:   mem3.mnMaster = mem3.szMaster;
                   15978:   mem3.iMaster = 1;
                   15979:   mem3.aPool[0].u.hdr.size4x = (mem3.szMaster<<2) + 2;
                   15980:   mem3.aPool[mem3.nPool].u.hdr.prevSize = mem3.nPool;
                   15981:   mem3.aPool[mem3.nPool].u.hdr.size4x = 1;
                   15982: 
                   15983:   return SQLITE_OK;
                   15984: }
                   15985: 
                   15986: /*
                   15987: ** Deinitialize this module.
                   15988: */
                   15989: static void memsys3Shutdown(void *NotUsed){
                   15990:   UNUSED_PARAMETER(NotUsed);
                   15991:   mem3.mutex = 0;
                   15992:   return;
                   15993: }
                   15994: 
                   15995: 
                   15996: 
                   15997: /*
                   15998: ** Open the file indicated and write a log of all unfreed memory 
                   15999: ** allocations into that log.
                   16000: */
                   16001: SQLITE_PRIVATE void sqlite3Memsys3Dump(const char *zFilename){
                   16002: #ifdef SQLITE_DEBUG
                   16003:   FILE *out;
                   16004:   u32 i, j;
                   16005:   u32 size;
                   16006:   if( zFilename==0 || zFilename[0]==0 ){
                   16007:     out = stdout;
                   16008:   }else{
                   16009:     out = fopen(zFilename, "w");
                   16010:     if( out==0 ){
                   16011:       fprintf(stderr, "** Unable to output memory debug output log: %s **\n",
                   16012:                       zFilename);
                   16013:       return;
                   16014:     }
                   16015:   }
                   16016:   memsys3Enter();
                   16017:   fprintf(out, "CHUNKS:\n");
                   16018:   for(i=1; i<=mem3.nPool; i+=size/4){
                   16019:     size = mem3.aPool[i-1].u.hdr.size4x;
                   16020:     if( size/4<=1 ){
                   16021:       fprintf(out, "%p size error\n", &mem3.aPool[i]);
                   16022:       assert( 0 );
                   16023:       break;
                   16024:     }
                   16025:     if( (size&1)==0 && mem3.aPool[i+size/4-1].u.hdr.prevSize!=size/4 ){
                   16026:       fprintf(out, "%p tail size does not match\n", &mem3.aPool[i]);
                   16027:       assert( 0 );
                   16028:       break;
                   16029:     }
                   16030:     if( ((mem3.aPool[i+size/4-1].u.hdr.size4x&2)>>1)!=(size&1) ){
                   16031:       fprintf(out, "%p tail checkout bit is incorrect\n", &mem3.aPool[i]);
                   16032:       assert( 0 );
                   16033:       break;
                   16034:     }
                   16035:     if( size&1 ){
                   16036:       fprintf(out, "%p %6d bytes checked out\n", &mem3.aPool[i], (size/4)*8-8);
                   16037:     }else{
                   16038:       fprintf(out, "%p %6d bytes free%s\n", &mem3.aPool[i], (size/4)*8-8,
                   16039:                   i==mem3.iMaster ? " **master**" : "");
                   16040:     }
                   16041:   }
                   16042:   for(i=0; i<MX_SMALL-1; i++){
                   16043:     if( mem3.aiSmall[i]==0 ) continue;
                   16044:     fprintf(out, "small(%2d):", i);
                   16045:     for(j = mem3.aiSmall[i]; j>0; j=mem3.aPool[j].u.list.next){
                   16046:       fprintf(out, " %p(%d)", &mem3.aPool[j],
                   16047:               (mem3.aPool[j-1].u.hdr.size4x/4)*8-8);
                   16048:     }
                   16049:     fprintf(out, "\n"); 
                   16050:   }
                   16051:   for(i=0; i<N_HASH; i++){
                   16052:     if( mem3.aiHash[i]==0 ) continue;
                   16053:     fprintf(out, "hash(%2d):", i);
                   16054:     for(j = mem3.aiHash[i]; j>0; j=mem3.aPool[j].u.list.next){
                   16055:       fprintf(out, " %p(%d)", &mem3.aPool[j],
                   16056:               (mem3.aPool[j-1].u.hdr.size4x/4)*8-8);
                   16057:     }
                   16058:     fprintf(out, "\n"); 
                   16059:   }
                   16060:   fprintf(out, "master=%d\n", mem3.iMaster);
                   16061:   fprintf(out, "nowUsed=%d\n", mem3.nPool*8 - mem3.szMaster*8);
                   16062:   fprintf(out, "mxUsed=%d\n", mem3.nPool*8 - mem3.mnMaster*8);
                   16063:   sqlite3_mutex_leave(mem3.mutex);
                   16064:   if( out==stdout ){
                   16065:     fflush(stdout);
                   16066:   }else{
                   16067:     fclose(out);
                   16068:   }
                   16069: #else
                   16070:   UNUSED_PARAMETER(zFilename);
                   16071: #endif
                   16072: }
                   16073: 
                   16074: /*
                   16075: ** This routine is the only routine in this file with external 
                   16076: ** linkage.
                   16077: **
                   16078: ** Populate the low-level memory allocation function pointers in
                   16079: ** sqlite3GlobalConfig.m with pointers to the routines in this file. The
                   16080: ** arguments specify the block of memory to manage.
                   16081: **
                   16082: ** This routine is only called by sqlite3_config(), and therefore
                   16083: ** is not required to be threadsafe (it is not).
                   16084: */
                   16085: SQLITE_PRIVATE const sqlite3_mem_methods *sqlite3MemGetMemsys3(void){
                   16086:   static const sqlite3_mem_methods mempoolMethods = {
                   16087:      memsys3Malloc,
                   16088:      memsys3Free,
                   16089:      memsys3Realloc,
                   16090:      memsys3Size,
                   16091:      memsys3Roundup,
                   16092:      memsys3Init,
                   16093:      memsys3Shutdown,
                   16094:      0
                   16095:   };
                   16096:   return &mempoolMethods;
                   16097: }
                   16098: 
                   16099: #endif /* SQLITE_ENABLE_MEMSYS3 */
                   16100: 
                   16101: /************** End of mem3.c ************************************************/
                   16102: /************** Begin file mem5.c ********************************************/
                   16103: /*
                   16104: ** 2007 October 14
                   16105: **
                   16106: ** The author disclaims copyright to this source code.  In place of
                   16107: ** a legal notice, here is a blessing:
                   16108: **
                   16109: **    May you do good and not evil.
                   16110: **    May you find forgiveness for yourself and forgive others.
                   16111: **    May you share freely, never taking more than you give.
                   16112: **
                   16113: *************************************************************************
                   16114: ** This file contains the C functions that implement a memory
                   16115: ** allocation subsystem for use by SQLite. 
                   16116: **
                   16117: ** This version of the memory allocation subsystem omits all
                   16118: ** use of malloc(). The application gives SQLite a block of memory
                   16119: ** before calling sqlite3_initialize() from which allocations
                   16120: ** are made and returned by the xMalloc() and xRealloc() 
                   16121: ** implementations. Once sqlite3_initialize() has been called,
                   16122: ** the amount of memory available to SQLite is fixed and cannot
                   16123: ** be changed.
                   16124: **
                   16125: ** This version of the memory allocation subsystem is included
                   16126: ** in the build only if SQLITE_ENABLE_MEMSYS5 is defined.
                   16127: **
                   16128: ** This memory allocator uses the following algorithm:
                   16129: **
                   16130: **   1.  All memory allocations sizes are rounded up to a power of 2.
                   16131: **
                   16132: **   2.  If two adjacent free blocks are the halves of a larger block,
                   16133: **       then the two blocks are coalesed into the single larger block.
                   16134: **
                   16135: **   3.  New memory is allocated from the first available free block.
                   16136: **
                   16137: ** This algorithm is described in: J. M. Robson. "Bounds for Some Functions
                   16138: ** Concerning Dynamic Storage Allocation". Journal of the Association for
                   16139: ** Computing Machinery, Volume 21, Number 8, July 1974, pages 491-499.
                   16140: ** 
                   16141: ** Let n be the size of the largest allocation divided by the minimum
                   16142: ** allocation size (after rounding all sizes up to a power of 2.)  Let M
                   16143: ** be the maximum amount of memory ever outstanding at one time.  Let
                   16144: ** N be the total amount of memory available for allocation.  Robson
                   16145: ** proved that this memory allocator will never breakdown due to 
                   16146: ** fragmentation as long as the following constraint holds:
                   16147: **
                   16148: **      N >=  M*(1 + log2(n)/2) - n + 1
                   16149: **
                   16150: ** The sqlite3_status() logic tracks the maximum values of n and M so
                   16151: ** that an application can, at any time, verify this constraint.
                   16152: */
                   16153: 
                   16154: /*
                   16155: ** This version of the memory allocator is used only when 
                   16156: ** SQLITE_ENABLE_MEMSYS5 is defined.
                   16157: */
                   16158: #ifdef SQLITE_ENABLE_MEMSYS5
                   16159: 
                   16160: /*
                   16161: ** A minimum allocation is an instance of the following structure.
                   16162: ** Larger allocations are an array of these structures where the
                   16163: ** size of the array is a power of 2.
                   16164: **
                   16165: ** The size of this object must be a power of two.  That fact is
                   16166: ** verified in memsys5Init().
                   16167: */
                   16168: typedef struct Mem5Link Mem5Link;
                   16169: struct Mem5Link {
                   16170:   int next;       /* Index of next free chunk */
                   16171:   int prev;       /* Index of previous free chunk */
                   16172: };
                   16173: 
                   16174: /*
                   16175: ** Maximum size of any allocation is ((1<<LOGMAX)*mem5.szAtom). Since
                   16176: ** mem5.szAtom is always at least 8 and 32-bit integers are used,
                   16177: ** it is not actually possible to reach this limit.
                   16178: */
                   16179: #define LOGMAX 30
                   16180: 
                   16181: /*
                   16182: ** Masks used for mem5.aCtrl[] elements.
                   16183: */
                   16184: #define CTRL_LOGSIZE  0x1f    /* Log2 Size of this block */
                   16185: #define CTRL_FREE     0x20    /* True if not checked out */
                   16186: 
                   16187: /*
                   16188: ** All of the static variables used by this module are collected
                   16189: ** into a single structure named "mem5".  This is to keep the
                   16190: ** static variables organized and to reduce namespace pollution
                   16191: ** when this module is combined with other in the amalgamation.
                   16192: */
                   16193: static SQLITE_WSD struct Mem5Global {
                   16194:   /*
                   16195:   ** Memory available for allocation
                   16196:   */
                   16197:   int szAtom;      /* Smallest possible allocation in bytes */
                   16198:   int nBlock;      /* Number of szAtom sized blocks in zPool */
                   16199:   u8 *zPool;       /* Memory available to be allocated */
                   16200:   
                   16201:   /*
                   16202:   ** Mutex to control access to the memory allocation subsystem.
                   16203:   */
                   16204:   sqlite3_mutex *mutex;
                   16205: 
                   16206:   /*
                   16207:   ** Performance statistics
                   16208:   */
                   16209:   u64 nAlloc;         /* Total number of calls to malloc */
                   16210:   u64 totalAlloc;     /* Total of all malloc calls - includes internal frag */
                   16211:   u64 totalExcess;    /* Total internal fragmentation */
                   16212:   u32 currentOut;     /* Current checkout, including internal fragmentation */
                   16213:   u32 currentCount;   /* Current number of distinct checkouts */
                   16214:   u32 maxOut;         /* Maximum instantaneous currentOut */
                   16215:   u32 maxCount;       /* Maximum instantaneous currentCount */
                   16216:   u32 maxRequest;     /* Largest allocation (exclusive of internal frag) */
                   16217:   
                   16218:   /*
                   16219:   ** Lists of free blocks.  aiFreelist[0] is a list of free blocks of
                   16220:   ** size mem5.szAtom.  aiFreelist[1] holds blocks of size szAtom*2.
                   16221:   ** and so forth.
                   16222:   */
                   16223:   int aiFreelist[LOGMAX+1];
                   16224: 
                   16225:   /*
                   16226:   ** Space for tracking which blocks are checked out and the size
                   16227:   ** of each block.  One byte per block.
                   16228:   */
                   16229:   u8 *aCtrl;
                   16230: 
                   16231: } mem5;
                   16232: 
                   16233: /*
                   16234: ** Access the static variable through a macro for SQLITE_OMIT_WSD
                   16235: */
                   16236: #define mem5 GLOBAL(struct Mem5Global, mem5)
                   16237: 
                   16238: /*
                   16239: ** Assuming mem5.zPool is divided up into an array of Mem5Link
                   16240: ** structures, return a pointer to the idx-th such lik.
                   16241: */
                   16242: #define MEM5LINK(idx) ((Mem5Link *)(&mem5.zPool[(idx)*mem5.szAtom]))
                   16243: 
                   16244: /*
                   16245: ** Unlink the chunk at mem5.aPool[i] from list it is currently
                   16246: ** on.  It should be found on mem5.aiFreelist[iLogsize].
                   16247: */
                   16248: static void memsys5Unlink(int i, int iLogsize){
                   16249:   int next, prev;
                   16250:   assert( i>=0 && i<mem5.nBlock );
                   16251:   assert( iLogsize>=0 && iLogsize<=LOGMAX );
                   16252:   assert( (mem5.aCtrl[i] & CTRL_LOGSIZE)==iLogsize );
                   16253: 
                   16254:   next = MEM5LINK(i)->next;
                   16255:   prev = MEM5LINK(i)->prev;
                   16256:   if( prev<0 ){
                   16257:     mem5.aiFreelist[iLogsize] = next;
                   16258:   }else{
                   16259:     MEM5LINK(prev)->next = next;
                   16260:   }
                   16261:   if( next>=0 ){
                   16262:     MEM5LINK(next)->prev = prev;
                   16263:   }
                   16264: }
                   16265: 
                   16266: /*
                   16267: ** Link the chunk at mem5.aPool[i] so that is on the iLogsize
                   16268: ** free list.
                   16269: */
                   16270: static void memsys5Link(int i, int iLogsize){
                   16271:   int x;
                   16272:   assert( sqlite3_mutex_held(mem5.mutex) );
                   16273:   assert( i>=0 && i<mem5.nBlock );
                   16274:   assert( iLogsize>=0 && iLogsize<=LOGMAX );
                   16275:   assert( (mem5.aCtrl[i] & CTRL_LOGSIZE)==iLogsize );
                   16276: 
                   16277:   x = MEM5LINK(i)->next = mem5.aiFreelist[iLogsize];
                   16278:   MEM5LINK(i)->prev = -1;
                   16279:   if( x>=0 ){
                   16280:     assert( x<mem5.nBlock );
                   16281:     MEM5LINK(x)->prev = i;
                   16282:   }
                   16283:   mem5.aiFreelist[iLogsize] = i;
                   16284: }
                   16285: 
                   16286: /*
                   16287: ** If the STATIC_MEM mutex is not already held, obtain it now. The mutex
                   16288: ** will already be held (obtained by code in malloc.c) if
                   16289: ** sqlite3GlobalConfig.bMemStat is true.
                   16290: */
                   16291: static void memsys5Enter(void){
                   16292:   sqlite3_mutex_enter(mem5.mutex);
                   16293: }
                   16294: static void memsys5Leave(void){
                   16295:   sqlite3_mutex_leave(mem5.mutex);
                   16296: }
                   16297: 
                   16298: /*
                   16299: ** Return the size of an outstanding allocation, in bytes.  The
                   16300: ** size returned omits the 8-byte header overhead.  This only
                   16301: ** works for chunks that are currently checked out.
                   16302: */
                   16303: static int memsys5Size(void *p){
                   16304:   int iSize = 0;
                   16305:   if( p ){
                   16306:     int i = ((u8 *)p-mem5.zPool)/mem5.szAtom;
                   16307:     assert( i>=0 && i<mem5.nBlock );
                   16308:     iSize = mem5.szAtom * (1 << (mem5.aCtrl[i]&CTRL_LOGSIZE));
                   16309:   }
                   16310:   return iSize;
                   16311: }
                   16312: 
                   16313: /*
                   16314: ** Find the first entry on the freelist iLogsize.  Unlink that
                   16315: ** entry and return its index. 
                   16316: */
                   16317: static int memsys5UnlinkFirst(int iLogsize){
                   16318:   int i;
                   16319:   int iFirst;
                   16320: 
                   16321:   assert( iLogsize>=0 && iLogsize<=LOGMAX );
                   16322:   i = iFirst = mem5.aiFreelist[iLogsize];
                   16323:   assert( iFirst>=0 );
                   16324:   while( i>0 ){
                   16325:     if( i<iFirst ) iFirst = i;
                   16326:     i = MEM5LINK(i)->next;
                   16327:   }
                   16328:   memsys5Unlink(iFirst, iLogsize);
                   16329:   return iFirst;
                   16330: }
                   16331: 
                   16332: /*
                   16333: ** Return a block of memory of at least nBytes in size.
                   16334: ** Return NULL if unable.  Return NULL if nBytes==0.
                   16335: **
                   16336: ** The caller guarantees that nByte positive.
                   16337: **
                   16338: ** The caller has obtained a mutex prior to invoking this
                   16339: ** routine so there is never any chance that two or more
                   16340: ** threads can be in this routine at the same time.
                   16341: */
                   16342: static void *memsys5MallocUnsafe(int nByte){
                   16343:   int i;           /* Index of a mem5.aPool[] slot */
                   16344:   int iBin;        /* Index into mem5.aiFreelist[] */
                   16345:   int iFullSz;     /* Size of allocation rounded up to power of 2 */
                   16346:   int iLogsize;    /* Log2 of iFullSz/POW2_MIN */
                   16347: 
                   16348:   /* nByte must be a positive */
                   16349:   assert( nByte>0 );
                   16350: 
                   16351:   /* Keep track of the maximum allocation request.  Even unfulfilled
                   16352:   ** requests are counted */
                   16353:   if( (u32)nByte>mem5.maxRequest ){
                   16354:     mem5.maxRequest = nByte;
                   16355:   }
                   16356: 
                   16357:   /* Abort if the requested allocation size is larger than the largest
                   16358:   ** power of two that we can represent using 32-bit signed integers.
                   16359:   */
                   16360:   if( nByte > 0x40000000 ){
                   16361:     return 0;
                   16362:   }
                   16363: 
                   16364:   /* Round nByte up to the next valid power of two */
                   16365:   for(iFullSz=mem5.szAtom, iLogsize=0; iFullSz<nByte; iFullSz *= 2, iLogsize++){}
                   16366: 
                   16367:   /* Make sure mem5.aiFreelist[iLogsize] contains at least one free
                   16368:   ** block.  If not, then split a block of the next larger power of
                   16369:   ** two in order to create a new free block of size iLogsize.
                   16370:   */
                   16371:   for(iBin=iLogsize; mem5.aiFreelist[iBin]<0 && iBin<=LOGMAX; iBin++){}
                   16372:   if( iBin>LOGMAX ){
                   16373:     testcase( sqlite3GlobalConfig.xLog!=0 );
                   16374:     sqlite3_log(SQLITE_NOMEM, "failed to allocate %u bytes", nByte);
                   16375:     return 0;
                   16376:   }
                   16377:   i = memsys5UnlinkFirst(iBin);
                   16378:   while( iBin>iLogsize ){
                   16379:     int newSize;
                   16380: 
                   16381:     iBin--;
                   16382:     newSize = 1 << iBin;
                   16383:     mem5.aCtrl[i+newSize] = CTRL_FREE | iBin;
                   16384:     memsys5Link(i+newSize, iBin);
                   16385:   }
                   16386:   mem5.aCtrl[i] = iLogsize;
                   16387: 
                   16388:   /* Update allocator performance statistics. */
                   16389:   mem5.nAlloc++;
                   16390:   mem5.totalAlloc += iFullSz;
                   16391:   mem5.totalExcess += iFullSz - nByte;
                   16392:   mem5.currentCount++;
                   16393:   mem5.currentOut += iFullSz;
                   16394:   if( mem5.maxCount<mem5.currentCount ) mem5.maxCount = mem5.currentCount;
                   16395:   if( mem5.maxOut<mem5.currentOut ) mem5.maxOut = mem5.currentOut;
                   16396: 
                   16397:   /* Return a pointer to the allocated memory. */
                   16398:   return (void*)&mem5.zPool[i*mem5.szAtom];
                   16399: }
                   16400: 
                   16401: /*
                   16402: ** Free an outstanding memory allocation.
                   16403: */
                   16404: static void memsys5FreeUnsafe(void *pOld){
                   16405:   u32 size, iLogsize;
                   16406:   int iBlock;
                   16407: 
                   16408:   /* Set iBlock to the index of the block pointed to by pOld in 
                   16409:   ** the array of mem5.szAtom byte blocks pointed to by mem5.zPool.
                   16410:   */
                   16411:   iBlock = ((u8 *)pOld-mem5.zPool)/mem5.szAtom;
                   16412: 
                   16413:   /* Check that the pointer pOld points to a valid, non-free block. */
                   16414:   assert( iBlock>=0 && iBlock<mem5.nBlock );
                   16415:   assert( ((u8 *)pOld-mem5.zPool)%mem5.szAtom==0 );
                   16416:   assert( (mem5.aCtrl[iBlock] & CTRL_FREE)==0 );
                   16417: 
                   16418:   iLogsize = mem5.aCtrl[iBlock] & CTRL_LOGSIZE;
                   16419:   size = 1<<iLogsize;
                   16420:   assert( iBlock+size-1<(u32)mem5.nBlock );
                   16421: 
                   16422:   mem5.aCtrl[iBlock] |= CTRL_FREE;
                   16423:   mem5.aCtrl[iBlock+size-1] |= CTRL_FREE;
                   16424:   assert( mem5.currentCount>0 );
                   16425:   assert( mem5.currentOut>=(size*mem5.szAtom) );
                   16426:   mem5.currentCount--;
                   16427:   mem5.currentOut -= size*mem5.szAtom;
                   16428:   assert( mem5.currentOut>0 || mem5.currentCount==0 );
                   16429:   assert( mem5.currentCount>0 || mem5.currentOut==0 );
                   16430: 
                   16431:   mem5.aCtrl[iBlock] = CTRL_FREE | iLogsize;
                   16432:   while( ALWAYS(iLogsize<LOGMAX) ){
                   16433:     int iBuddy;
                   16434:     if( (iBlock>>iLogsize) & 1 ){
                   16435:       iBuddy = iBlock - size;
                   16436:     }else{
                   16437:       iBuddy = iBlock + size;
                   16438:     }
                   16439:     assert( iBuddy>=0 );
                   16440:     if( (iBuddy+(1<<iLogsize))>mem5.nBlock ) break;
                   16441:     if( mem5.aCtrl[iBuddy]!=(CTRL_FREE | iLogsize) ) break;
                   16442:     memsys5Unlink(iBuddy, iLogsize);
                   16443:     iLogsize++;
                   16444:     if( iBuddy<iBlock ){
                   16445:       mem5.aCtrl[iBuddy] = CTRL_FREE | iLogsize;
                   16446:       mem5.aCtrl[iBlock] = 0;
                   16447:       iBlock = iBuddy;
                   16448:     }else{
                   16449:       mem5.aCtrl[iBlock] = CTRL_FREE | iLogsize;
                   16450:       mem5.aCtrl[iBuddy] = 0;
                   16451:     }
                   16452:     size *= 2;
                   16453:   }
                   16454:   memsys5Link(iBlock, iLogsize);
                   16455: }
                   16456: 
                   16457: /*
                   16458: ** Allocate nBytes of memory
                   16459: */
                   16460: static void *memsys5Malloc(int nBytes){
                   16461:   sqlite3_int64 *p = 0;
                   16462:   if( nBytes>0 ){
                   16463:     memsys5Enter();
                   16464:     p = memsys5MallocUnsafe(nBytes);
                   16465:     memsys5Leave();
                   16466:   }
                   16467:   return (void*)p; 
                   16468: }
                   16469: 
                   16470: /*
                   16471: ** Free memory.
                   16472: **
                   16473: ** The outer layer memory allocator prevents this routine from
                   16474: ** being called with pPrior==0.
                   16475: */
                   16476: static void memsys5Free(void *pPrior){
                   16477:   assert( pPrior!=0 );
                   16478:   memsys5Enter();
                   16479:   memsys5FreeUnsafe(pPrior);
                   16480:   memsys5Leave();  
                   16481: }
                   16482: 
                   16483: /*
                   16484: ** Change the size of an existing memory allocation.
                   16485: **
                   16486: ** The outer layer memory allocator prevents this routine from
                   16487: ** being called with pPrior==0.  
                   16488: **
                   16489: ** nBytes is always a value obtained from a prior call to
                   16490: ** memsys5Round().  Hence nBytes is always a non-negative power
                   16491: ** of two.  If nBytes==0 that means that an oversize allocation
                   16492: ** (an allocation larger than 0x40000000) was requested and this
                   16493: ** routine should return 0 without freeing pPrior.
                   16494: */
                   16495: static void *memsys5Realloc(void *pPrior, int nBytes){
                   16496:   int nOld;
                   16497:   void *p;
                   16498:   assert( pPrior!=0 );
                   16499:   assert( (nBytes&(nBytes-1))==0 );  /* EV: R-46199-30249 */
                   16500:   assert( nBytes>=0 );
                   16501:   if( nBytes==0 ){
                   16502:     return 0;
                   16503:   }
                   16504:   nOld = memsys5Size(pPrior);
                   16505:   if( nBytes<=nOld ){
                   16506:     return pPrior;
                   16507:   }
                   16508:   memsys5Enter();
                   16509:   p = memsys5MallocUnsafe(nBytes);
                   16510:   if( p ){
                   16511:     memcpy(p, pPrior, nOld);
                   16512:     memsys5FreeUnsafe(pPrior);
                   16513:   }
                   16514:   memsys5Leave();
                   16515:   return p;
                   16516: }
                   16517: 
                   16518: /*
                   16519: ** Round up a request size to the next valid allocation size.  If
                   16520: ** the allocation is too large to be handled by this allocation system,
                   16521: ** return 0.
                   16522: **
                   16523: ** All allocations must be a power of two and must be expressed by a
                   16524: ** 32-bit signed integer.  Hence the largest allocation is 0x40000000
                   16525: ** or 1073741824 bytes.
                   16526: */
                   16527: static int memsys5Roundup(int n){
                   16528:   int iFullSz;
                   16529:   if( n > 0x40000000 ) return 0;
                   16530:   for(iFullSz=mem5.szAtom; iFullSz<n; iFullSz *= 2);
                   16531:   return iFullSz;
                   16532: }
                   16533: 
                   16534: /*
                   16535: ** Return the ceiling of the logarithm base 2 of iValue.
                   16536: **
                   16537: ** Examples:   memsys5Log(1) -> 0
                   16538: **             memsys5Log(2) -> 1
                   16539: **             memsys5Log(4) -> 2
                   16540: **             memsys5Log(5) -> 3
                   16541: **             memsys5Log(8) -> 3
                   16542: **             memsys5Log(9) -> 4
                   16543: */
                   16544: static int memsys5Log(int iValue){
                   16545:   int iLog;
                   16546:   for(iLog=0; (iLog<(int)((sizeof(int)*8)-1)) && (1<<iLog)<iValue; iLog++);
                   16547:   return iLog;
                   16548: }
                   16549: 
                   16550: /*
                   16551: ** Initialize the memory allocator.
                   16552: **
                   16553: ** This routine is not threadsafe.  The caller must be holding a mutex
                   16554: ** to prevent multiple threads from entering at the same time.
                   16555: */
                   16556: static int memsys5Init(void *NotUsed){
                   16557:   int ii;            /* Loop counter */
                   16558:   int nByte;         /* Number of bytes of memory available to this allocator */
                   16559:   u8 *zByte;         /* Memory usable by this allocator */
                   16560:   int nMinLog;       /* Log base 2 of minimum allocation size in bytes */
                   16561:   int iOffset;       /* An offset into mem5.aCtrl[] */
                   16562: 
                   16563:   UNUSED_PARAMETER(NotUsed);
                   16564: 
                   16565:   /* For the purposes of this routine, disable the mutex */
                   16566:   mem5.mutex = 0;
                   16567: 
                   16568:   /* The size of a Mem5Link object must be a power of two.  Verify that
                   16569:   ** this is case.
                   16570:   */
                   16571:   assert( (sizeof(Mem5Link)&(sizeof(Mem5Link)-1))==0 );
                   16572: 
                   16573:   nByte = sqlite3GlobalConfig.nHeap;
                   16574:   zByte = (u8*)sqlite3GlobalConfig.pHeap;
                   16575:   assert( zByte!=0 );  /* sqlite3_config() does not allow otherwise */
                   16576: 
                   16577:   /* boundaries on sqlite3GlobalConfig.mnReq are enforced in sqlite3_config() */
                   16578:   nMinLog = memsys5Log(sqlite3GlobalConfig.mnReq);
                   16579:   mem5.szAtom = (1<<nMinLog);
                   16580:   while( (int)sizeof(Mem5Link)>mem5.szAtom ){
                   16581:     mem5.szAtom = mem5.szAtom << 1;
                   16582:   }
                   16583: 
                   16584:   mem5.nBlock = (nByte / (mem5.szAtom+sizeof(u8)));
                   16585:   mem5.zPool = zByte;
                   16586:   mem5.aCtrl = (u8 *)&mem5.zPool[mem5.nBlock*mem5.szAtom];
                   16587: 
                   16588:   for(ii=0; ii<=LOGMAX; ii++){
                   16589:     mem5.aiFreelist[ii] = -1;
                   16590:   }
                   16591: 
                   16592:   iOffset = 0;
                   16593:   for(ii=LOGMAX; ii>=0; ii--){
                   16594:     int nAlloc = (1<<ii);
                   16595:     if( (iOffset+nAlloc)<=mem5.nBlock ){
                   16596:       mem5.aCtrl[iOffset] = ii | CTRL_FREE;
                   16597:       memsys5Link(iOffset, ii);
                   16598:       iOffset += nAlloc;
                   16599:     }
                   16600:     assert((iOffset+nAlloc)>mem5.nBlock);
                   16601:   }
                   16602: 
                   16603:   /* If a mutex is required for normal operation, allocate one */
                   16604:   if( sqlite3GlobalConfig.bMemstat==0 ){
                   16605:     mem5.mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MEM);
                   16606:   }
                   16607: 
                   16608:   return SQLITE_OK;
                   16609: }
                   16610: 
                   16611: /*
                   16612: ** Deinitialize this module.
                   16613: */
                   16614: static void memsys5Shutdown(void *NotUsed){
                   16615:   UNUSED_PARAMETER(NotUsed);
                   16616:   mem5.mutex = 0;
                   16617:   return;
                   16618: }
                   16619: 
                   16620: #ifdef SQLITE_TEST
                   16621: /*
                   16622: ** Open the file indicated and write a log of all unfreed memory 
                   16623: ** allocations into that log.
                   16624: */
                   16625: SQLITE_PRIVATE void sqlite3Memsys5Dump(const char *zFilename){
                   16626:   FILE *out;
                   16627:   int i, j, n;
                   16628:   int nMinLog;
                   16629: 
                   16630:   if( zFilename==0 || zFilename[0]==0 ){
                   16631:     out = stdout;
                   16632:   }else{
                   16633:     out = fopen(zFilename, "w");
                   16634:     if( out==0 ){
                   16635:       fprintf(stderr, "** Unable to output memory debug output log: %s **\n",
                   16636:                       zFilename);
                   16637:       return;
                   16638:     }
                   16639:   }
                   16640:   memsys5Enter();
                   16641:   nMinLog = memsys5Log(mem5.szAtom);
                   16642:   for(i=0; i<=LOGMAX && i+nMinLog<32; i++){
                   16643:     for(n=0, j=mem5.aiFreelist[i]; j>=0; j = MEM5LINK(j)->next, n++){}
                   16644:     fprintf(out, "freelist items of size %d: %d\n", mem5.szAtom << i, n);
                   16645:   }
                   16646:   fprintf(out, "mem5.nAlloc       = %llu\n", mem5.nAlloc);
                   16647:   fprintf(out, "mem5.totalAlloc   = %llu\n", mem5.totalAlloc);
                   16648:   fprintf(out, "mem5.totalExcess  = %llu\n", mem5.totalExcess);
                   16649:   fprintf(out, "mem5.currentOut   = %u\n", mem5.currentOut);
                   16650:   fprintf(out, "mem5.currentCount = %u\n", mem5.currentCount);
                   16651:   fprintf(out, "mem5.maxOut       = %u\n", mem5.maxOut);
                   16652:   fprintf(out, "mem5.maxCount     = %u\n", mem5.maxCount);
                   16653:   fprintf(out, "mem5.maxRequest   = %u\n", mem5.maxRequest);
                   16654:   memsys5Leave();
                   16655:   if( out==stdout ){
                   16656:     fflush(stdout);
                   16657:   }else{
                   16658:     fclose(out);
                   16659:   }
                   16660: }
                   16661: #endif
                   16662: 
                   16663: /*
                   16664: ** This routine is the only routine in this file with external 
                   16665: ** linkage. It returns a pointer to a static sqlite3_mem_methods
                   16666: ** struct populated with the memsys5 methods.
                   16667: */
                   16668: SQLITE_PRIVATE const sqlite3_mem_methods *sqlite3MemGetMemsys5(void){
                   16669:   static const sqlite3_mem_methods memsys5Methods = {
                   16670:      memsys5Malloc,
                   16671:      memsys5Free,
                   16672:      memsys5Realloc,
                   16673:      memsys5Size,
                   16674:      memsys5Roundup,
                   16675:      memsys5Init,
                   16676:      memsys5Shutdown,
                   16677:      0
                   16678:   };
                   16679:   return &memsys5Methods;
                   16680: }
                   16681: 
                   16682: #endif /* SQLITE_ENABLE_MEMSYS5 */
                   16683: 
                   16684: /************** End of mem5.c ************************************************/
                   16685: /************** Begin file mutex.c *******************************************/
                   16686: /*
                   16687: ** 2007 August 14
                   16688: **
                   16689: ** The author disclaims copyright to this source code.  In place of
                   16690: ** a legal notice, here is a blessing:
                   16691: **
                   16692: **    May you do good and not evil.
                   16693: **    May you find forgiveness for yourself and forgive others.
                   16694: **    May you share freely, never taking more than you give.
                   16695: **
                   16696: *************************************************************************
                   16697: ** This file contains the C functions that implement mutexes.
                   16698: **
                   16699: ** This file contains code that is common across all mutex implementations.
                   16700: */
                   16701: 
                   16702: #if defined(SQLITE_DEBUG) && !defined(SQLITE_MUTEX_OMIT)
                   16703: /*
                   16704: ** For debugging purposes, record when the mutex subsystem is initialized
                   16705: ** and uninitialized so that we can assert() if there is an attempt to
                   16706: ** allocate a mutex while the system is uninitialized.
                   16707: */
                   16708: static SQLITE_WSD int mutexIsInit = 0;
                   16709: #endif /* SQLITE_DEBUG */
                   16710: 
                   16711: 
                   16712: #ifndef SQLITE_MUTEX_OMIT
                   16713: /*
                   16714: ** Initialize the mutex system.
                   16715: */
                   16716: SQLITE_PRIVATE int sqlite3MutexInit(void){ 
                   16717:   int rc = SQLITE_OK;
                   16718:   if( !sqlite3GlobalConfig.mutex.xMutexAlloc ){
                   16719:     /* If the xMutexAlloc method has not been set, then the user did not
                   16720:     ** install a mutex implementation via sqlite3_config() prior to 
                   16721:     ** sqlite3_initialize() being called. This block copies pointers to
                   16722:     ** the default implementation into the sqlite3GlobalConfig structure.
                   16723:     */
                   16724:     sqlite3_mutex_methods const *pFrom;
                   16725:     sqlite3_mutex_methods *pTo = &sqlite3GlobalConfig.mutex;
                   16726: 
                   16727:     if( sqlite3GlobalConfig.bCoreMutex ){
                   16728:       pFrom = sqlite3DefaultMutex();
                   16729:     }else{
                   16730:       pFrom = sqlite3NoopMutex();
                   16731:     }
                   16732:     memcpy(pTo, pFrom, offsetof(sqlite3_mutex_methods, xMutexAlloc));
                   16733:     memcpy(&pTo->xMutexFree, &pFrom->xMutexFree,
                   16734:            sizeof(*pTo) - offsetof(sqlite3_mutex_methods, xMutexFree));
                   16735:     pTo->xMutexAlloc = pFrom->xMutexAlloc;
                   16736:   }
                   16737:   rc = sqlite3GlobalConfig.mutex.xMutexInit();
                   16738: 
                   16739: #ifdef SQLITE_DEBUG
                   16740:   GLOBAL(int, mutexIsInit) = 1;
                   16741: #endif
                   16742: 
                   16743:   return rc;
                   16744: }
                   16745: 
                   16746: /*
                   16747: ** Shutdown the mutex system. This call frees resources allocated by
                   16748: ** sqlite3MutexInit().
                   16749: */
                   16750: SQLITE_PRIVATE int sqlite3MutexEnd(void){
                   16751:   int rc = SQLITE_OK;
                   16752:   if( sqlite3GlobalConfig.mutex.xMutexEnd ){
                   16753:     rc = sqlite3GlobalConfig.mutex.xMutexEnd();
                   16754:   }
                   16755: 
                   16756: #ifdef SQLITE_DEBUG
                   16757:   GLOBAL(int, mutexIsInit) = 0;
                   16758: #endif
                   16759: 
                   16760:   return rc;
                   16761: }
                   16762: 
                   16763: /*
                   16764: ** Retrieve a pointer to a static mutex or allocate a new dynamic one.
                   16765: */
                   16766: SQLITE_API sqlite3_mutex *sqlite3_mutex_alloc(int id){
                   16767: #ifndef SQLITE_OMIT_AUTOINIT
                   16768:   if( sqlite3_initialize() ) return 0;
                   16769: #endif
                   16770:   return sqlite3GlobalConfig.mutex.xMutexAlloc(id);
                   16771: }
                   16772: 
                   16773: SQLITE_PRIVATE sqlite3_mutex *sqlite3MutexAlloc(int id){
                   16774:   if( !sqlite3GlobalConfig.bCoreMutex ){
                   16775:     return 0;
                   16776:   }
                   16777:   assert( GLOBAL(int, mutexIsInit) );
                   16778:   return sqlite3GlobalConfig.mutex.xMutexAlloc(id);
                   16779: }
                   16780: 
                   16781: /*
                   16782: ** Free a dynamic mutex.
                   16783: */
                   16784: SQLITE_API void sqlite3_mutex_free(sqlite3_mutex *p){
                   16785:   if( p ){
                   16786:     sqlite3GlobalConfig.mutex.xMutexFree(p);
                   16787:   }
                   16788: }
                   16789: 
                   16790: /*
                   16791: ** Obtain the mutex p. If some other thread already has the mutex, block
                   16792: ** until it can be obtained.
                   16793: */
                   16794: SQLITE_API void sqlite3_mutex_enter(sqlite3_mutex *p){
                   16795:   if( p ){
                   16796:     sqlite3GlobalConfig.mutex.xMutexEnter(p);
                   16797:   }
                   16798: }
                   16799: 
                   16800: /*
                   16801: ** Obtain the mutex p. If successful, return SQLITE_OK. Otherwise, if another
                   16802: ** thread holds the mutex and it cannot be obtained, return SQLITE_BUSY.
                   16803: */
                   16804: SQLITE_API int sqlite3_mutex_try(sqlite3_mutex *p){
                   16805:   int rc = SQLITE_OK;
                   16806:   if( p ){
                   16807:     return sqlite3GlobalConfig.mutex.xMutexTry(p);
                   16808:   }
                   16809:   return rc;
                   16810: }
                   16811: 
                   16812: /*
                   16813: ** The sqlite3_mutex_leave() routine exits a mutex that was previously
                   16814: ** entered by the same thread.  The behavior is undefined if the mutex 
                   16815: ** is not currently entered. If a NULL pointer is passed as an argument
                   16816: ** this function is a no-op.
                   16817: */
                   16818: SQLITE_API void sqlite3_mutex_leave(sqlite3_mutex *p){
                   16819:   if( p ){
                   16820:     sqlite3GlobalConfig.mutex.xMutexLeave(p);
                   16821:   }
                   16822: }
                   16823: 
                   16824: #ifndef NDEBUG
                   16825: /*
                   16826: ** The sqlite3_mutex_held() and sqlite3_mutex_notheld() routine are
                   16827: ** intended for use inside assert() statements.
                   16828: */
                   16829: SQLITE_API int sqlite3_mutex_held(sqlite3_mutex *p){
                   16830:   return p==0 || sqlite3GlobalConfig.mutex.xMutexHeld(p);
                   16831: }
                   16832: SQLITE_API int sqlite3_mutex_notheld(sqlite3_mutex *p){
                   16833:   return p==0 || sqlite3GlobalConfig.mutex.xMutexNotheld(p);
                   16834: }
                   16835: #endif
                   16836: 
                   16837: #endif /* SQLITE_MUTEX_OMIT */
                   16838: 
                   16839: /************** End of mutex.c ***********************************************/
                   16840: /************** Begin file mutex_noop.c **************************************/
                   16841: /*
                   16842: ** 2008 October 07
                   16843: **
                   16844: ** The author disclaims copyright to this source code.  In place of
                   16845: ** a legal notice, here is a blessing:
                   16846: **
                   16847: **    May you do good and not evil.
                   16848: **    May you find forgiveness for yourself and forgive others.
                   16849: **    May you share freely, never taking more than you give.
                   16850: **
                   16851: *************************************************************************
                   16852: ** This file contains the C functions that implement mutexes.
                   16853: **
                   16854: ** This implementation in this file does not provide any mutual
                   16855: ** exclusion and is thus suitable for use only in applications
                   16856: ** that use SQLite in a single thread.  The routines defined
                   16857: ** here are place-holders.  Applications can substitute working
                   16858: ** mutex routines at start-time using the
                   16859: **
                   16860: **     sqlite3_config(SQLITE_CONFIG_MUTEX,...)
                   16861: **
                   16862: ** interface.
                   16863: **
                   16864: ** If compiled with SQLITE_DEBUG, then additional logic is inserted
                   16865: ** that does error checking on mutexes to make sure they are being
                   16866: ** called correctly.
                   16867: */
                   16868: 
                   16869: #ifndef SQLITE_MUTEX_OMIT
                   16870: 
                   16871: #ifndef SQLITE_DEBUG
                   16872: /*
                   16873: ** Stub routines for all mutex methods.
                   16874: **
                   16875: ** This routines provide no mutual exclusion or error checking.
                   16876: */
                   16877: static int noopMutexInit(void){ return SQLITE_OK; }
                   16878: static int noopMutexEnd(void){ return SQLITE_OK; }
                   16879: static sqlite3_mutex *noopMutexAlloc(int id){ 
                   16880:   UNUSED_PARAMETER(id);
                   16881:   return (sqlite3_mutex*)8; 
                   16882: }
                   16883: static void noopMutexFree(sqlite3_mutex *p){ UNUSED_PARAMETER(p); return; }
                   16884: static void noopMutexEnter(sqlite3_mutex *p){ UNUSED_PARAMETER(p); return; }
                   16885: static int noopMutexTry(sqlite3_mutex *p){
                   16886:   UNUSED_PARAMETER(p);
                   16887:   return SQLITE_OK;
                   16888: }
                   16889: static void noopMutexLeave(sqlite3_mutex *p){ UNUSED_PARAMETER(p); return; }
                   16890: 
                   16891: SQLITE_PRIVATE sqlite3_mutex_methods const *sqlite3NoopMutex(void){
                   16892:   static const sqlite3_mutex_methods sMutex = {
                   16893:     noopMutexInit,
                   16894:     noopMutexEnd,
                   16895:     noopMutexAlloc,
                   16896:     noopMutexFree,
                   16897:     noopMutexEnter,
                   16898:     noopMutexTry,
                   16899:     noopMutexLeave,
                   16900: 
                   16901:     0,
                   16902:     0,
                   16903:   };
                   16904: 
                   16905:   return &sMutex;
                   16906: }
                   16907: #endif /* !SQLITE_DEBUG */
                   16908: 
                   16909: #ifdef SQLITE_DEBUG
                   16910: /*
                   16911: ** In this implementation, error checking is provided for testing
                   16912: ** and debugging purposes.  The mutexes still do not provide any
                   16913: ** mutual exclusion.
                   16914: */
                   16915: 
                   16916: /*
                   16917: ** The mutex object
                   16918: */
                   16919: typedef struct sqlite3_debug_mutex {
                   16920:   int id;     /* The mutex type */
                   16921:   int cnt;    /* Number of entries without a matching leave */
                   16922: } sqlite3_debug_mutex;
                   16923: 
                   16924: /*
                   16925: ** The sqlite3_mutex_held() and sqlite3_mutex_notheld() routine are
                   16926: ** intended for use inside assert() statements.
                   16927: */
                   16928: static int debugMutexHeld(sqlite3_mutex *pX){
                   16929:   sqlite3_debug_mutex *p = (sqlite3_debug_mutex*)pX;
                   16930:   return p==0 || p->cnt>0;
                   16931: }
                   16932: static int debugMutexNotheld(sqlite3_mutex *pX){
                   16933:   sqlite3_debug_mutex *p = (sqlite3_debug_mutex*)pX;
                   16934:   return p==0 || p->cnt==0;
                   16935: }
                   16936: 
                   16937: /*
                   16938: ** Initialize and deinitialize the mutex subsystem.
                   16939: */
                   16940: static int debugMutexInit(void){ return SQLITE_OK; }
                   16941: static int debugMutexEnd(void){ return SQLITE_OK; }
                   16942: 
                   16943: /*
                   16944: ** The sqlite3_mutex_alloc() routine allocates a new
                   16945: ** mutex and returns a pointer to it.  If it returns NULL
                   16946: ** that means that a mutex could not be allocated. 
                   16947: */
                   16948: static sqlite3_mutex *debugMutexAlloc(int id){
                   16949:   static sqlite3_debug_mutex aStatic[6];
                   16950:   sqlite3_debug_mutex *pNew = 0;
                   16951:   switch( id ){
                   16952:     case SQLITE_MUTEX_FAST:
                   16953:     case SQLITE_MUTEX_RECURSIVE: {
                   16954:       pNew = sqlite3Malloc(sizeof(*pNew));
                   16955:       if( pNew ){
                   16956:         pNew->id = id;
                   16957:         pNew->cnt = 0;
                   16958:       }
                   16959:       break;
                   16960:     }
                   16961:     default: {
                   16962:       assert( id-2 >= 0 );
                   16963:       assert( id-2 < (int)(sizeof(aStatic)/sizeof(aStatic[0])) );
                   16964:       pNew = &aStatic[id-2];
                   16965:       pNew->id = id;
                   16966:       break;
                   16967:     }
                   16968:   }
                   16969:   return (sqlite3_mutex*)pNew;
                   16970: }
                   16971: 
                   16972: /*
                   16973: ** This routine deallocates a previously allocated mutex.
                   16974: */
                   16975: static void debugMutexFree(sqlite3_mutex *pX){
                   16976:   sqlite3_debug_mutex *p = (sqlite3_debug_mutex*)pX;
                   16977:   assert( p->cnt==0 );
                   16978:   assert( p->id==SQLITE_MUTEX_FAST || p->id==SQLITE_MUTEX_RECURSIVE );
                   16979:   sqlite3_free(p);
                   16980: }
                   16981: 
                   16982: /*
                   16983: ** The sqlite3_mutex_enter() and sqlite3_mutex_try() routines attempt
                   16984: ** to enter a mutex.  If another thread is already within the mutex,
                   16985: ** sqlite3_mutex_enter() will block and sqlite3_mutex_try() will return
                   16986: ** SQLITE_BUSY.  The sqlite3_mutex_try() interface returns SQLITE_OK
                   16987: ** upon successful entry.  Mutexes created using SQLITE_MUTEX_RECURSIVE can
                   16988: ** be entered multiple times by the same thread.  In such cases the,
                   16989: ** mutex must be exited an equal number of times before another thread
                   16990: ** can enter.  If the same thread tries to enter any other kind of mutex
                   16991: ** more than once, the behavior is undefined.
                   16992: */
                   16993: static void debugMutexEnter(sqlite3_mutex *pX){
                   16994:   sqlite3_debug_mutex *p = (sqlite3_debug_mutex*)pX;
                   16995:   assert( p->id==SQLITE_MUTEX_RECURSIVE || debugMutexNotheld(pX) );
                   16996:   p->cnt++;
                   16997: }
                   16998: static int debugMutexTry(sqlite3_mutex *pX){
                   16999:   sqlite3_debug_mutex *p = (sqlite3_debug_mutex*)pX;
                   17000:   assert( p->id==SQLITE_MUTEX_RECURSIVE || debugMutexNotheld(pX) );
                   17001:   p->cnt++;
                   17002:   return SQLITE_OK;
                   17003: }
                   17004: 
                   17005: /*
                   17006: ** The sqlite3_mutex_leave() routine exits a mutex that was
                   17007: ** previously entered by the same thread.  The behavior
                   17008: ** is undefined if the mutex is not currently entered or
                   17009: ** is not currently allocated.  SQLite will never do either.
                   17010: */
                   17011: static void debugMutexLeave(sqlite3_mutex *pX){
                   17012:   sqlite3_debug_mutex *p = (sqlite3_debug_mutex*)pX;
                   17013:   assert( debugMutexHeld(pX) );
                   17014:   p->cnt--;
                   17015:   assert( p->id==SQLITE_MUTEX_RECURSIVE || debugMutexNotheld(pX) );
                   17016: }
                   17017: 
                   17018: SQLITE_PRIVATE sqlite3_mutex_methods const *sqlite3NoopMutex(void){
                   17019:   static const sqlite3_mutex_methods sMutex = {
                   17020:     debugMutexInit,
                   17021:     debugMutexEnd,
                   17022:     debugMutexAlloc,
                   17023:     debugMutexFree,
                   17024:     debugMutexEnter,
                   17025:     debugMutexTry,
                   17026:     debugMutexLeave,
                   17027: 
                   17028:     debugMutexHeld,
                   17029:     debugMutexNotheld
                   17030:   };
                   17031: 
                   17032:   return &sMutex;
                   17033: }
                   17034: #endif /* SQLITE_DEBUG */
                   17035: 
                   17036: /*
                   17037: ** If compiled with SQLITE_MUTEX_NOOP, then the no-op mutex implementation
                   17038: ** is used regardless of the run-time threadsafety setting.
                   17039: */
                   17040: #ifdef SQLITE_MUTEX_NOOP
                   17041: SQLITE_PRIVATE sqlite3_mutex_methods const *sqlite3DefaultMutex(void){
                   17042:   return sqlite3NoopMutex();
                   17043: }
                   17044: #endif /* SQLITE_MUTEX_NOOP */
                   17045: #endif /* SQLITE_MUTEX_OMIT */
                   17046: 
                   17047: /************** End of mutex_noop.c ******************************************/
                   17048: /************** Begin file mutex_os2.c ***************************************/
                   17049: /*
                   17050: ** 2007 August 28
                   17051: **
                   17052: ** The author disclaims copyright to this source code.  In place of
                   17053: ** a legal notice, here is a blessing:
                   17054: **
                   17055: **    May you do good and not evil.
                   17056: **    May you find forgiveness for yourself and forgive others.
                   17057: **    May you share freely, never taking more than you give.
                   17058: **
                   17059: *************************************************************************
                   17060: ** This file contains the C functions that implement mutexes for OS/2
                   17061: */
                   17062: 
                   17063: /*
                   17064: ** The code in this file is only used if SQLITE_MUTEX_OS2 is defined.
                   17065: ** See the mutex.h file for details.
                   17066: */
                   17067: #ifdef SQLITE_MUTEX_OS2
                   17068: 
                   17069: /********************** OS/2 Mutex Implementation **********************
                   17070: **
                   17071: ** This implementation of mutexes is built using the OS/2 API.
                   17072: */
                   17073: 
                   17074: /*
                   17075: ** The mutex object
                   17076: ** Each recursive mutex is an instance of the following structure.
                   17077: */
                   17078: struct sqlite3_mutex {
                   17079:   HMTX mutex;       /* Mutex controlling the lock */
                   17080:   int  id;          /* Mutex type */
                   17081: #ifdef SQLITE_DEBUG
                   17082:  int   trace;       /* True to trace changes */
                   17083: #endif
                   17084: };
                   17085: 
                   17086: #ifdef SQLITE_DEBUG
                   17087: #define SQLITE3_MUTEX_INITIALIZER { 0, 0, 0 }
                   17088: #else
                   17089: #define SQLITE3_MUTEX_INITIALIZER { 0, 0 }
                   17090: #endif
                   17091: 
                   17092: /*
                   17093: ** Initialize and deinitialize the mutex subsystem.
                   17094: */
                   17095: static int os2MutexInit(void){ return SQLITE_OK; }
                   17096: static int os2MutexEnd(void){ return SQLITE_OK; }
                   17097: 
                   17098: /*
                   17099: ** The sqlite3_mutex_alloc() routine allocates a new
                   17100: ** mutex and returns a pointer to it.  If it returns NULL
                   17101: ** that means that a mutex could not be allocated. 
                   17102: ** SQLite will unwind its stack and return an error.  The argument
                   17103: ** to sqlite3_mutex_alloc() is one of these integer constants:
                   17104: **
                   17105: ** <ul>
                   17106: ** <li>  SQLITE_MUTEX_FAST
                   17107: ** <li>  SQLITE_MUTEX_RECURSIVE
                   17108: ** <li>  SQLITE_MUTEX_STATIC_MASTER
                   17109: ** <li>  SQLITE_MUTEX_STATIC_MEM
                   17110: ** <li>  SQLITE_MUTEX_STATIC_MEM2
                   17111: ** <li>  SQLITE_MUTEX_STATIC_PRNG
                   17112: ** <li>  SQLITE_MUTEX_STATIC_LRU
                   17113: ** <li>  SQLITE_MUTEX_STATIC_LRU2
                   17114: ** </ul>
                   17115: **
                   17116: ** The first two constants cause sqlite3_mutex_alloc() to create
                   17117: ** a new mutex.  The new mutex is recursive when SQLITE_MUTEX_RECURSIVE
                   17118: ** is used but not necessarily so when SQLITE_MUTEX_FAST is used.
                   17119: ** The mutex implementation does not need to make a distinction
                   17120: ** between SQLITE_MUTEX_RECURSIVE and SQLITE_MUTEX_FAST if it does
                   17121: ** not want to.  But SQLite will only request a recursive mutex in
                   17122: ** cases where it really needs one.  If a faster non-recursive mutex
                   17123: ** implementation is available on the host platform, the mutex subsystem
                   17124: ** might return such a mutex in response to SQLITE_MUTEX_FAST.
                   17125: **
                   17126: ** The other allowed parameters to sqlite3_mutex_alloc() each return
                   17127: ** a pointer to a static preexisting mutex.  Six static mutexes are
                   17128: ** used by the current version of SQLite.  Future versions of SQLite
                   17129: ** may add additional static mutexes.  Static mutexes are for internal
                   17130: ** use by SQLite only.  Applications that use SQLite mutexes should
                   17131: ** use only the dynamic mutexes returned by SQLITE_MUTEX_FAST or
                   17132: ** SQLITE_MUTEX_RECURSIVE.
                   17133: **
                   17134: ** Note that if one of the dynamic mutex parameters (SQLITE_MUTEX_FAST
                   17135: ** or SQLITE_MUTEX_RECURSIVE) is used then sqlite3_mutex_alloc()
                   17136: ** returns a different mutex on every call.  But for the static
                   17137: ** mutex types, the same mutex is returned on every call that has
                   17138: ** the same type number.
                   17139: */
                   17140: static sqlite3_mutex *os2MutexAlloc(int iType){
                   17141:   sqlite3_mutex *p = NULL;
                   17142:   switch( iType ){
                   17143:     case SQLITE_MUTEX_FAST:
                   17144:     case SQLITE_MUTEX_RECURSIVE: {
                   17145:       p = sqlite3MallocZero( sizeof(*p) );
                   17146:       if( p ){
                   17147:         p->id = iType;
                   17148:         if( DosCreateMutexSem( 0, &p->mutex, 0, FALSE ) != NO_ERROR ){
                   17149:           sqlite3_free( p );
                   17150:           p = NULL;
                   17151:         }
                   17152:       }
                   17153:       break;
                   17154:     }
                   17155:     default: {
                   17156:       static volatile int isInit = 0;
                   17157:       static sqlite3_mutex staticMutexes[6] = {
                   17158:         SQLITE3_MUTEX_INITIALIZER,
                   17159:         SQLITE3_MUTEX_INITIALIZER,
                   17160:         SQLITE3_MUTEX_INITIALIZER,
                   17161:         SQLITE3_MUTEX_INITIALIZER,
                   17162:         SQLITE3_MUTEX_INITIALIZER,
                   17163:         SQLITE3_MUTEX_INITIALIZER,
                   17164:       };
                   17165:       if ( !isInit ){
                   17166:         APIRET rc;
                   17167:         PTIB ptib;
                   17168:         PPIB ppib;
                   17169:         HMTX mutex;
                   17170:         char name[32];
                   17171:         DosGetInfoBlocks( &ptib, &ppib );
                   17172:         sqlite3_snprintf( sizeof(name), name, "\\SEM32\\SQLITE%04x",
                   17173:                           ppib->pib_ulpid );
                   17174:         while( !isInit ){
                   17175:           mutex = 0;
                   17176:           rc = DosCreateMutexSem( name, &mutex, 0, FALSE);
                   17177:           if( rc == NO_ERROR ){
                   17178:             unsigned int i;
                   17179:             if( !isInit ){
                   17180:               for( i = 0; i < sizeof(staticMutexes)/sizeof(staticMutexes[0]); i++ ){
                   17181:                 DosCreateMutexSem( 0, &staticMutexes[i].mutex, 0, FALSE );
                   17182:               }
                   17183:               isInit = 1;
                   17184:             }
                   17185:             DosCloseMutexSem( mutex );
                   17186:           }else if( rc == ERROR_DUPLICATE_NAME ){
                   17187:             DosSleep( 1 );
                   17188:           }else{
                   17189:             return p;
                   17190:           }
                   17191:         }
                   17192:       }
                   17193:       assert( iType-2 >= 0 );
                   17194:       assert( iType-2 < sizeof(staticMutexes)/sizeof(staticMutexes[0]) );
                   17195:       p = &staticMutexes[iType-2];
                   17196:       p->id = iType;
                   17197:       break;
                   17198:     }
                   17199:   }
                   17200:   return p;
                   17201: }
                   17202: 
                   17203: 
                   17204: /*
                   17205: ** This routine deallocates a previously allocated mutex.
                   17206: ** SQLite is careful to deallocate every mutex that it allocates.
                   17207: */
                   17208: static void os2MutexFree(sqlite3_mutex *p){
                   17209: #ifdef SQLITE_DEBUG
                   17210:   TID tid;
                   17211:   PID pid;
                   17212:   ULONG ulCount;
                   17213:   DosQueryMutexSem(p->mutex, &pid, &tid, &ulCount);
                   17214:   assert( ulCount==0 );
                   17215:   assert( p->id==SQLITE_MUTEX_FAST || p->id==SQLITE_MUTEX_RECURSIVE );
                   17216: #endif
                   17217:   DosCloseMutexSem( p->mutex );
                   17218:   sqlite3_free( p );
                   17219: }
                   17220: 
                   17221: #ifdef SQLITE_DEBUG
                   17222: /*
                   17223: ** The sqlite3_mutex_held() and sqlite3_mutex_notheld() routine are
                   17224: ** intended for use inside assert() statements.
                   17225: */
                   17226: static int os2MutexHeld(sqlite3_mutex *p){
                   17227:   TID tid;
                   17228:   PID pid;
                   17229:   ULONG ulCount;
                   17230:   PTIB ptib;
                   17231:   DosQueryMutexSem(p->mutex, &pid, &tid, &ulCount);
                   17232:   if( ulCount==0 || ( ulCount>1 && p->id!=SQLITE_MUTEX_RECURSIVE ) )
                   17233:     return 0;
                   17234:   DosGetInfoBlocks(&ptib, NULL);
                   17235:   return tid==ptib->tib_ptib2->tib2_ultid;
                   17236: }
                   17237: static int os2MutexNotheld(sqlite3_mutex *p){
                   17238:   TID tid;
                   17239:   PID pid;
                   17240:   ULONG ulCount;
                   17241:   PTIB ptib;
                   17242:   DosQueryMutexSem(p->mutex, &pid, &tid, &ulCount);
                   17243:   if( ulCount==0 )
                   17244:     return 1;
                   17245:   DosGetInfoBlocks(&ptib, NULL);
                   17246:   return tid!=ptib->tib_ptib2->tib2_ultid;
                   17247: }
                   17248: static void os2MutexTrace(sqlite3_mutex *p, char *pAction){
                   17249:   TID   tid;
                   17250:   PID   pid;
                   17251:   ULONG ulCount;
                   17252:   DosQueryMutexSem(p->mutex, &pid, &tid, &ulCount);
                   17253:   printf("%s mutex %p (%d) with nRef=%ld\n", pAction, (void*)p, p->trace, ulCount);
                   17254: }
                   17255: #endif
                   17256: 
                   17257: /*
                   17258: ** The sqlite3_mutex_enter() and sqlite3_mutex_try() routines attempt
                   17259: ** to enter a mutex.  If another thread is already within the mutex,
                   17260: ** sqlite3_mutex_enter() will block and sqlite3_mutex_try() will return
                   17261: ** SQLITE_BUSY.  The sqlite3_mutex_try() interface returns SQLITE_OK
                   17262: ** upon successful entry.  Mutexes created using SQLITE_MUTEX_RECURSIVE can
                   17263: ** be entered multiple times by the same thread.  In such cases the,
                   17264: ** mutex must be exited an equal number of times before another thread
                   17265: ** can enter.  If the same thread tries to enter any other kind of mutex
                   17266: ** more than once, the behavior is undefined.
                   17267: */
                   17268: static void os2MutexEnter(sqlite3_mutex *p){
                   17269:   assert( p->id==SQLITE_MUTEX_RECURSIVE || os2MutexNotheld(p) );
                   17270:   DosRequestMutexSem(p->mutex, SEM_INDEFINITE_WAIT);
                   17271: #ifdef SQLITE_DEBUG
                   17272:   if( p->trace ) os2MutexTrace(p, "enter");
                   17273: #endif
                   17274: }
                   17275: static int os2MutexTry(sqlite3_mutex *p){
                   17276:   int rc = SQLITE_BUSY;
                   17277:   assert( p->id==SQLITE_MUTEX_RECURSIVE || os2MutexNotheld(p) );
                   17278:   if( DosRequestMutexSem(p->mutex, SEM_IMMEDIATE_RETURN) == NO_ERROR ) {
                   17279:     rc = SQLITE_OK;
                   17280: #ifdef SQLITE_DEBUG
                   17281:     if( p->trace ) os2MutexTrace(p, "try");
                   17282: #endif
                   17283:   }
                   17284:   return rc;
                   17285: }
                   17286: 
                   17287: /*
                   17288: ** The sqlite3_mutex_leave() routine exits a mutex that was
                   17289: ** previously entered by the same thread.  The behavior
                   17290: ** is undefined if the mutex is not currently entered or
                   17291: ** is not currently allocated.  SQLite will never do either.
                   17292: */
                   17293: static void os2MutexLeave(sqlite3_mutex *p){
                   17294:   assert( os2MutexHeld(p) );
                   17295:   DosReleaseMutexSem(p->mutex);
                   17296: #ifdef SQLITE_DEBUG
                   17297:   if( p->trace ) os2MutexTrace(p, "leave");
                   17298: #endif
                   17299: }
                   17300: 
                   17301: SQLITE_PRIVATE sqlite3_mutex_methods const *sqlite3DefaultMutex(void){
                   17302:   static const sqlite3_mutex_methods sMutex = {
                   17303:     os2MutexInit,
                   17304:     os2MutexEnd,
                   17305:     os2MutexAlloc,
                   17306:     os2MutexFree,
                   17307:     os2MutexEnter,
                   17308:     os2MutexTry,
                   17309:     os2MutexLeave,
                   17310: #ifdef SQLITE_DEBUG
                   17311:     os2MutexHeld,
                   17312:     os2MutexNotheld
                   17313: #else
                   17314:     0,
                   17315:     0
                   17316: #endif
                   17317:   };
                   17318: 
                   17319:   return &sMutex;
                   17320: }
                   17321: #endif /* SQLITE_MUTEX_OS2 */
                   17322: 
                   17323: /************** End of mutex_os2.c *******************************************/
                   17324: /************** Begin file mutex_unix.c **************************************/
                   17325: /*
                   17326: ** 2007 August 28
                   17327: **
                   17328: ** The author disclaims copyright to this source code.  In place of
                   17329: ** a legal notice, here is a blessing:
                   17330: **
                   17331: **    May you do good and not evil.
                   17332: **    May you find forgiveness for yourself and forgive others.
                   17333: **    May you share freely, never taking more than you give.
                   17334: **
                   17335: *************************************************************************
                   17336: ** This file contains the C functions that implement mutexes for pthreads
                   17337: */
                   17338: 
                   17339: /*
                   17340: ** The code in this file is only used if we are compiling threadsafe
                   17341: ** under unix with pthreads.
                   17342: **
                   17343: ** Note that this implementation requires a version of pthreads that
                   17344: ** supports recursive mutexes.
                   17345: */
                   17346: #ifdef SQLITE_MUTEX_PTHREADS
                   17347: 
                   17348: #include <pthread.h>
                   17349: 
                   17350: /*
                   17351: ** The sqlite3_mutex.id, sqlite3_mutex.nRef, and sqlite3_mutex.owner fields
                   17352: ** are necessary under two condidtions:  (1) Debug builds and (2) using
                   17353: ** home-grown mutexes.  Encapsulate these conditions into a single #define.
                   17354: */
                   17355: #if defined(SQLITE_DEBUG) || defined(SQLITE_HOMEGROWN_RECURSIVE_MUTEX)
                   17356: # define SQLITE_MUTEX_NREF 1
                   17357: #else
                   17358: # define SQLITE_MUTEX_NREF 0
                   17359: #endif
                   17360: 
                   17361: /*
                   17362: ** Each recursive mutex is an instance of the following structure.
                   17363: */
                   17364: struct sqlite3_mutex {
                   17365:   pthread_mutex_t mutex;     /* Mutex controlling the lock */
                   17366: #if SQLITE_MUTEX_NREF
                   17367:   int id;                    /* Mutex type */
                   17368:   volatile int nRef;         /* Number of entrances */
                   17369:   volatile pthread_t owner;  /* Thread that is within this mutex */
                   17370:   int trace;                 /* True to trace changes */
                   17371: #endif
                   17372: };
                   17373: #if SQLITE_MUTEX_NREF
                   17374: #define SQLITE3_MUTEX_INITIALIZER { PTHREAD_MUTEX_INITIALIZER, 0, 0, (pthread_t)0, 0 }
                   17375: #else
                   17376: #define SQLITE3_MUTEX_INITIALIZER { PTHREAD_MUTEX_INITIALIZER }
                   17377: #endif
                   17378: 
                   17379: /*
                   17380: ** The sqlite3_mutex_held() and sqlite3_mutex_notheld() routine are
                   17381: ** intended for use only inside assert() statements.  On some platforms,
                   17382: ** there might be race conditions that can cause these routines to
                   17383: ** deliver incorrect results.  In particular, if pthread_equal() is
                   17384: ** not an atomic operation, then these routines might delivery
                   17385: ** incorrect results.  On most platforms, pthread_equal() is a 
                   17386: ** comparison of two integers and is therefore atomic.  But we are
                   17387: ** told that HPUX is not such a platform.  If so, then these routines
                   17388: ** will not always work correctly on HPUX.
                   17389: **
                   17390: ** On those platforms where pthread_equal() is not atomic, SQLite
                   17391: ** should be compiled without -DSQLITE_DEBUG and with -DNDEBUG to
                   17392: ** make sure no assert() statements are evaluated and hence these
                   17393: ** routines are never called.
                   17394: */
                   17395: #if !defined(NDEBUG) || defined(SQLITE_DEBUG)
                   17396: static int pthreadMutexHeld(sqlite3_mutex *p){
                   17397:   return (p->nRef!=0 && pthread_equal(p->owner, pthread_self()));
                   17398: }
                   17399: static int pthreadMutexNotheld(sqlite3_mutex *p){
                   17400:   return p->nRef==0 || pthread_equal(p->owner, pthread_self())==0;
                   17401: }
                   17402: #endif
                   17403: 
                   17404: /*
                   17405: ** Initialize and deinitialize the mutex subsystem.
                   17406: */
                   17407: static int pthreadMutexInit(void){ return SQLITE_OK; }
                   17408: static int pthreadMutexEnd(void){ return SQLITE_OK; }
                   17409: 
                   17410: /*
                   17411: ** The sqlite3_mutex_alloc() routine allocates a new
                   17412: ** mutex and returns a pointer to it.  If it returns NULL
                   17413: ** that means that a mutex could not be allocated.  SQLite
                   17414: ** will unwind its stack and return an error.  The argument
                   17415: ** to sqlite3_mutex_alloc() is one of these integer constants:
                   17416: **
                   17417: ** <ul>
                   17418: ** <li>  SQLITE_MUTEX_FAST
                   17419: ** <li>  SQLITE_MUTEX_RECURSIVE
                   17420: ** <li>  SQLITE_MUTEX_STATIC_MASTER
                   17421: ** <li>  SQLITE_MUTEX_STATIC_MEM
                   17422: ** <li>  SQLITE_MUTEX_STATIC_MEM2
                   17423: ** <li>  SQLITE_MUTEX_STATIC_PRNG
                   17424: ** <li>  SQLITE_MUTEX_STATIC_LRU
                   17425: ** <li>  SQLITE_MUTEX_STATIC_PMEM
                   17426: ** </ul>
                   17427: **
                   17428: ** The first two constants cause sqlite3_mutex_alloc() to create
                   17429: ** a new mutex.  The new mutex is recursive when SQLITE_MUTEX_RECURSIVE
                   17430: ** is used but not necessarily so when SQLITE_MUTEX_FAST is used.
                   17431: ** The mutex implementation does not need to make a distinction
                   17432: ** between SQLITE_MUTEX_RECURSIVE and SQLITE_MUTEX_FAST if it does
                   17433: ** not want to.  But SQLite will only request a recursive mutex in
                   17434: ** cases where it really needs one.  If a faster non-recursive mutex
                   17435: ** implementation is available on the host platform, the mutex subsystem
                   17436: ** might return such a mutex in response to SQLITE_MUTEX_FAST.
                   17437: **
                   17438: ** The other allowed parameters to sqlite3_mutex_alloc() each return
                   17439: ** a pointer to a static preexisting mutex.  Six static mutexes are
                   17440: ** used by the current version of SQLite.  Future versions of SQLite
                   17441: ** may add additional static mutexes.  Static mutexes are for internal
                   17442: ** use by SQLite only.  Applications that use SQLite mutexes should
                   17443: ** use only the dynamic mutexes returned by SQLITE_MUTEX_FAST or
                   17444: ** SQLITE_MUTEX_RECURSIVE.
                   17445: **
                   17446: ** Note that if one of the dynamic mutex parameters (SQLITE_MUTEX_FAST
                   17447: ** or SQLITE_MUTEX_RECURSIVE) is used then sqlite3_mutex_alloc()
                   17448: ** returns a different mutex on every call.  But for the static 
                   17449: ** mutex types, the same mutex is returned on every call that has
                   17450: ** the same type number.
                   17451: */
                   17452: static sqlite3_mutex *pthreadMutexAlloc(int iType){
                   17453:   static sqlite3_mutex staticMutexes[] = {
                   17454:     SQLITE3_MUTEX_INITIALIZER,
                   17455:     SQLITE3_MUTEX_INITIALIZER,
                   17456:     SQLITE3_MUTEX_INITIALIZER,
                   17457:     SQLITE3_MUTEX_INITIALIZER,
                   17458:     SQLITE3_MUTEX_INITIALIZER,
                   17459:     SQLITE3_MUTEX_INITIALIZER
                   17460:   };
                   17461:   sqlite3_mutex *p;
                   17462:   switch( iType ){
                   17463:     case SQLITE_MUTEX_RECURSIVE: {
                   17464:       p = sqlite3MallocZero( sizeof(*p) );
                   17465:       if( p ){
                   17466: #ifdef SQLITE_HOMEGROWN_RECURSIVE_MUTEX
                   17467:         /* If recursive mutexes are not available, we will have to
                   17468:         ** build our own.  See below. */
                   17469:         pthread_mutex_init(&p->mutex, 0);
                   17470: #else
                   17471:         /* Use a recursive mutex if it is available */
                   17472:         pthread_mutexattr_t recursiveAttr;
                   17473:         pthread_mutexattr_init(&recursiveAttr);
                   17474:         pthread_mutexattr_settype(&recursiveAttr, PTHREAD_MUTEX_RECURSIVE);
                   17475:         pthread_mutex_init(&p->mutex, &recursiveAttr);
                   17476:         pthread_mutexattr_destroy(&recursiveAttr);
                   17477: #endif
                   17478: #if SQLITE_MUTEX_NREF
                   17479:         p->id = iType;
                   17480: #endif
                   17481:       }
                   17482:       break;
                   17483:     }
                   17484:     case SQLITE_MUTEX_FAST: {
                   17485:       p = sqlite3MallocZero( sizeof(*p) );
                   17486:       if( p ){
                   17487: #if SQLITE_MUTEX_NREF
                   17488:         p->id = iType;
                   17489: #endif
                   17490:         pthread_mutex_init(&p->mutex, 0);
                   17491:       }
                   17492:       break;
                   17493:     }
                   17494:     default: {
                   17495:       assert( iType-2 >= 0 );
                   17496:       assert( iType-2 < ArraySize(staticMutexes) );
                   17497:       p = &staticMutexes[iType-2];
                   17498: #if SQLITE_MUTEX_NREF
                   17499:       p->id = iType;
                   17500: #endif
                   17501:       break;
                   17502:     }
                   17503:   }
                   17504:   return p;
                   17505: }
                   17506: 
                   17507: 
                   17508: /*
                   17509: ** This routine deallocates a previously
                   17510: ** allocated mutex.  SQLite is careful to deallocate every
                   17511: ** mutex that it allocates.
                   17512: */
                   17513: static void pthreadMutexFree(sqlite3_mutex *p){
                   17514:   assert( p->nRef==0 );
                   17515:   assert( p->id==SQLITE_MUTEX_FAST || p->id==SQLITE_MUTEX_RECURSIVE );
                   17516:   pthread_mutex_destroy(&p->mutex);
                   17517:   sqlite3_free(p);
                   17518: }
                   17519: 
                   17520: /*
                   17521: ** The sqlite3_mutex_enter() and sqlite3_mutex_try() routines attempt
                   17522: ** to enter a mutex.  If another thread is already within the mutex,
                   17523: ** sqlite3_mutex_enter() will block and sqlite3_mutex_try() will return
                   17524: ** SQLITE_BUSY.  The sqlite3_mutex_try() interface returns SQLITE_OK
                   17525: ** upon successful entry.  Mutexes created using SQLITE_MUTEX_RECURSIVE can
                   17526: ** be entered multiple times by the same thread.  In such cases the,
                   17527: ** mutex must be exited an equal number of times before another thread
                   17528: ** can enter.  If the same thread tries to enter any other kind of mutex
                   17529: ** more than once, the behavior is undefined.
                   17530: */
                   17531: static void pthreadMutexEnter(sqlite3_mutex *p){
                   17532:   assert( p->id==SQLITE_MUTEX_RECURSIVE || pthreadMutexNotheld(p) );
                   17533: 
                   17534: #ifdef SQLITE_HOMEGROWN_RECURSIVE_MUTEX
                   17535:   /* If recursive mutexes are not available, then we have to grow
                   17536:   ** our own.  This implementation assumes that pthread_equal()
                   17537:   ** is atomic - that it cannot be deceived into thinking self
                   17538:   ** and p->owner are equal if p->owner changes between two values
                   17539:   ** that are not equal to self while the comparison is taking place.
                   17540:   ** This implementation also assumes a coherent cache - that 
                   17541:   ** separate processes cannot read different values from the same
                   17542:   ** address at the same time.  If either of these two conditions
                   17543:   ** are not met, then the mutexes will fail and problems will result.
                   17544:   */
                   17545:   {
                   17546:     pthread_t self = pthread_self();
                   17547:     if( p->nRef>0 && pthread_equal(p->owner, self) ){
                   17548:       p->nRef++;
                   17549:     }else{
                   17550:       pthread_mutex_lock(&p->mutex);
                   17551:       assert( p->nRef==0 );
                   17552:       p->owner = self;
                   17553:       p->nRef = 1;
                   17554:     }
                   17555:   }
                   17556: #else
                   17557:   /* Use the built-in recursive mutexes if they are available.
                   17558:   */
                   17559:   pthread_mutex_lock(&p->mutex);
                   17560: #if SQLITE_MUTEX_NREF
                   17561:   assert( p->nRef>0 || p->owner==0 );
                   17562:   p->owner = pthread_self();
                   17563:   p->nRef++;
                   17564: #endif
                   17565: #endif
                   17566: 
                   17567: #ifdef SQLITE_DEBUG
                   17568:   if( p->trace ){
                   17569:     printf("enter mutex %p (%d) with nRef=%d\n", p, p->trace, p->nRef);
                   17570:   }
                   17571: #endif
                   17572: }
                   17573: static int pthreadMutexTry(sqlite3_mutex *p){
                   17574:   int rc;
                   17575:   assert( p->id==SQLITE_MUTEX_RECURSIVE || pthreadMutexNotheld(p) );
                   17576: 
                   17577: #ifdef SQLITE_HOMEGROWN_RECURSIVE_MUTEX
                   17578:   /* If recursive mutexes are not available, then we have to grow
                   17579:   ** our own.  This implementation assumes that pthread_equal()
                   17580:   ** is atomic - that it cannot be deceived into thinking self
                   17581:   ** and p->owner are equal if p->owner changes between two values
                   17582:   ** that are not equal to self while the comparison is taking place.
                   17583:   ** This implementation also assumes a coherent cache - that 
                   17584:   ** separate processes cannot read different values from the same
                   17585:   ** address at the same time.  If either of these two conditions
                   17586:   ** are not met, then the mutexes will fail and problems will result.
                   17587:   */
                   17588:   {
                   17589:     pthread_t self = pthread_self();
                   17590:     if( p->nRef>0 && pthread_equal(p->owner, self) ){
                   17591:       p->nRef++;
                   17592:       rc = SQLITE_OK;
                   17593:     }else if( pthread_mutex_trylock(&p->mutex)==0 ){
                   17594:       assert( p->nRef==0 );
                   17595:       p->owner = self;
                   17596:       p->nRef = 1;
                   17597:       rc = SQLITE_OK;
                   17598:     }else{
                   17599:       rc = SQLITE_BUSY;
                   17600:     }
                   17601:   }
                   17602: #else
                   17603:   /* Use the built-in recursive mutexes if they are available.
                   17604:   */
                   17605:   if( pthread_mutex_trylock(&p->mutex)==0 ){
                   17606: #if SQLITE_MUTEX_NREF
                   17607:     p->owner = pthread_self();
                   17608:     p->nRef++;
                   17609: #endif
                   17610:     rc = SQLITE_OK;
                   17611:   }else{
                   17612:     rc = SQLITE_BUSY;
                   17613:   }
                   17614: #endif
                   17615: 
                   17616: #ifdef SQLITE_DEBUG
                   17617:   if( rc==SQLITE_OK && p->trace ){
                   17618:     printf("enter mutex %p (%d) with nRef=%d\n", p, p->trace, p->nRef);
                   17619:   }
                   17620: #endif
                   17621:   return rc;
                   17622: }
                   17623: 
                   17624: /*
                   17625: ** The sqlite3_mutex_leave() routine exits a mutex that was
                   17626: ** previously entered by the same thread.  The behavior
                   17627: ** is undefined if the mutex is not currently entered or
                   17628: ** is not currently allocated.  SQLite will never do either.
                   17629: */
                   17630: static void pthreadMutexLeave(sqlite3_mutex *p){
                   17631:   assert( pthreadMutexHeld(p) );
                   17632: #if SQLITE_MUTEX_NREF
                   17633:   p->nRef--;
                   17634:   if( p->nRef==0 ) p->owner = 0;
                   17635: #endif
                   17636:   assert( p->nRef==0 || p->id==SQLITE_MUTEX_RECURSIVE );
                   17637: 
                   17638: #ifdef SQLITE_HOMEGROWN_RECURSIVE_MUTEX
                   17639:   if( p->nRef==0 ){
                   17640:     pthread_mutex_unlock(&p->mutex);
                   17641:   }
                   17642: #else
                   17643:   pthread_mutex_unlock(&p->mutex);
                   17644: #endif
                   17645: 
                   17646: #ifdef SQLITE_DEBUG
                   17647:   if( p->trace ){
                   17648:     printf("leave mutex %p (%d) with nRef=%d\n", p, p->trace, p->nRef);
                   17649:   }
                   17650: #endif
                   17651: }
                   17652: 
                   17653: SQLITE_PRIVATE sqlite3_mutex_methods const *sqlite3DefaultMutex(void){
                   17654:   static const sqlite3_mutex_methods sMutex = {
                   17655:     pthreadMutexInit,
                   17656:     pthreadMutexEnd,
                   17657:     pthreadMutexAlloc,
                   17658:     pthreadMutexFree,
                   17659:     pthreadMutexEnter,
                   17660:     pthreadMutexTry,
                   17661:     pthreadMutexLeave,
                   17662: #ifdef SQLITE_DEBUG
                   17663:     pthreadMutexHeld,
                   17664:     pthreadMutexNotheld
                   17665: #else
                   17666:     0,
                   17667:     0
                   17668: #endif
                   17669:   };
                   17670: 
                   17671:   return &sMutex;
                   17672: }
                   17673: 
                   17674: #endif /* SQLITE_MUTEX_PTHREAD */
                   17675: 
                   17676: /************** End of mutex_unix.c ******************************************/
                   17677: /************** Begin file mutex_w32.c ***************************************/
                   17678: /*
                   17679: ** 2007 August 14
                   17680: **
                   17681: ** The author disclaims copyright to this source code.  In place of
                   17682: ** a legal notice, here is a blessing:
                   17683: **
                   17684: **    May you do good and not evil.
                   17685: **    May you find forgiveness for yourself and forgive others.
                   17686: **    May you share freely, never taking more than you give.
                   17687: **
                   17688: *************************************************************************
                   17689: ** This file contains the C functions that implement mutexes for win32
                   17690: */
                   17691: 
                   17692: /*
                   17693: ** The code in this file is only used if we are compiling multithreaded
                   17694: ** on a win32 system.
                   17695: */
                   17696: #ifdef SQLITE_MUTEX_W32
                   17697: 
                   17698: /*
                   17699: ** Each recursive mutex is an instance of the following structure.
                   17700: */
                   17701: struct sqlite3_mutex {
                   17702:   CRITICAL_SECTION mutex;    /* Mutex controlling the lock */
                   17703:   int id;                    /* Mutex type */
                   17704: #ifdef SQLITE_DEBUG
                   17705:   volatile int nRef;         /* Number of enterances */
                   17706:   volatile DWORD owner;      /* Thread holding this mutex */
                   17707:   int trace;                 /* True to trace changes */
                   17708: #endif
                   17709: };
                   17710: #define SQLITE_W32_MUTEX_INITIALIZER { 0 }
                   17711: #ifdef SQLITE_DEBUG
                   17712: #define SQLITE3_MUTEX_INITIALIZER { SQLITE_W32_MUTEX_INITIALIZER, 0, 0L, (DWORD)0, 0 }
                   17713: #else
                   17714: #define SQLITE3_MUTEX_INITIALIZER { SQLITE_W32_MUTEX_INITIALIZER, 0 }
                   17715: #endif
                   17716: 
                   17717: /*
                   17718: ** Return true (non-zero) if we are running under WinNT, Win2K, WinXP,
                   17719: ** or WinCE.  Return false (zero) for Win95, Win98, or WinME.
                   17720: **
                   17721: ** Here is an interesting observation:  Win95, Win98, and WinME lack
                   17722: ** the LockFileEx() API.  But we can still statically link against that
                   17723: ** API as long as we don't call it win running Win95/98/ME.  A call to
                   17724: ** this routine is used to determine if the host is Win95/98/ME or
                   17725: ** WinNT/2K/XP so that we will know whether or not we can safely call
                   17726: ** the LockFileEx() API.
                   17727: **
                   17728: ** mutexIsNT() is only used for the TryEnterCriticalSection() API call,
                   17729: ** which is only available if your application was compiled with 
                   17730: ** _WIN32_WINNT defined to a value >= 0x0400.  Currently, the only
                   17731: ** call to TryEnterCriticalSection() is #ifdef'ed out, so #ifdef 
                   17732: ** this out as well.
                   17733: */
                   17734: #if 0
                   17735: #if SQLITE_OS_WINCE
                   17736: # define mutexIsNT()  (1)
                   17737: #else
                   17738:   static int mutexIsNT(void){
                   17739:     static int osType = 0;
                   17740:     if( osType==0 ){
                   17741:       OSVERSIONINFO sInfo;
                   17742:       sInfo.dwOSVersionInfoSize = sizeof(sInfo);
                   17743:       GetVersionEx(&sInfo);
                   17744:       osType = sInfo.dwPlatformId==VER_PLATFORM_WIN32_NT ? 2 : 1;
                   17745:     }
                   17746:     return osType==2;
                   17747:   }
                   17748: #endif /* SQLITE_OS_WINCE */
                   17749: #endif
                   17750: 
                   17751: #ifdef SQLITE_DEBUG
                   17752: /*
                   17753: ** The sqlite3_mutex_held() and sqlite3_mutex_notheld() routine are
                   17754: ** intended for use only inside assert() statements.
                   17755: */
                   17756: static int winMutexHeld(sqlite3_mutex *p){
                   17757:   return p->nRef!=0 && p->owner==GetCurrentThreadId();
                   17758: }
                   17759: static int winMutexNotheld2(sqlite3_mutex *p, DWORD tid){
                   17760:   return p->nRef==0 || p->owner!=tid;
                   17761: }
                   17762: static int winMutexNotheld(sqlite3_mutex *p){
                   17763:   DWORD tid = GetCurrentThreadId(); 
                   17764:   return winMutexNotheld2(p, tid);
                   17765: }
                   17766: #endif
                   17767: 
                   17768: 
                   17769: /*
                   17770: ** Initialize and deinitialize the mutex subsystem.
                   17771: */
                   17772: static sqlite3_mutex winMutex_staticMutexes[6] = {
                   17773:   SQLITE3_MUTEX_INITIALIZER,
                   17774:   SQLITE3_MUTEX_INITIALIZER,
                   17775:   SQLITE3_MUTEX_INITIALIZER,
                   17776:   SQLITE3_MUTEX_INITIALIZER,
                   17777:   SQLITE3_MUTEX_INITIALIZER,
                   17778:   SQLITE3_MUTEX_INITIALIZER
                   17779: };
                   17780: static int winMutex_isInit = 0;
                   17781: /* As winMutexInit() and winMutexEnd() are called as part
                   17782: ** of the sqlite3_initialize and sqlite3_shutdown()
                   17783: ** processing, the "interlocked" magic is probably not
                   17784: ** strictly necessary.
                   17785: */
                   17786: static long winMutex_lock = 0;
                   17787: 
                   17788: static int winMutexInit(void){ 
                   17789:   /* The first to increment to 1 does actual initialization */
                   17790:   if( InterlockedCompareExchange(&winMutex_lock, 1, 0)==0 ){
                   17791:     int i;
                   17792:     for(i=0; i<ArraySize(winMutex_staticMutexes); i++){
                   17793:       InitializeCriticalSection(&winMutex_staticMutexes[i].mutex);
                   17794:     }
                   17795:     winMutex_isInit = 1;
                   17796:   }else{
                   17797:     /* Someone else is in the process of initing the static mutexes */
                   17798:     while( !winMutex_isInit ){
                   17799:       Sleep(1);
                   17800:     }
                   17801:   }
                   17802:   return SQLITE_OK; 
                   17803: }
                   17804: 
                   17805: static int winMutexEnd(void){ 
                   17806:   /* The first to decrement to 0 does actual shutdown 
                   17807:   ** (which should be the last to shutdown.) */
                   17808:   if( InterlockedCompareExchange(&winMutex_lock, 0, 1)==1 ){
                   17809:     if( winMutex_isInit==1 ){
                   17810:       int i;
                   17811:       for(i=0; i<ArraySize(winMutex_staticMutexes); i++){
                   17812:         DeleteCriticalSection(&winMutex_staticMutexes[i].mutex);
                   17813:       }
                   17814:       winMutex_isInit = 0;
                   17815:     }
                   17816:   }
                   17817:   return SQLITE_OK; 
                   17818: }
                   17819: 
                   17820: /*
                   17821: ** The sqlite3_mutex_alloc() routine allocates a new
                   17822: ** mutex and returns a pointer to it.  If it returns NULL
                   17823: ** that means that a mutex could not be allocated.  SQLite
                   17824: ** will unwind its stack and return an error.  The argument
                   17825: ** to sqlite3_mutex_alloc() is one of these integer constants:
                   17826: **
                   17827: ** <ul>
                   17828: ** <li>  SQLITE_MUTEX_FAST
                   17829: ** <li>  SQLITE_MUTEX_RECURSIVE
                   17830: ** <li>  SQLITE_MUTEX_STATIC_MASTER
                   17831: ** <li>  SQLITE_MUTEX_STATIC_MEM
                   17832: ** <li>  SQLITE_MUTEX_STATIC_MEM2
                   17833: ** <li>  SQLITE_MUTEX_STATIC_PRNG
                   17834: ** <li>  SQLITE_MUTEX_STATIC_LRU
                   17835: ** <li>  SQLITE_MUTEX_STATIC_PMEM
                   17836: ** </ul>
                   17837: **
                   17838: ** The first two constants cause sqlite3_mutex_alloc() to create
                   17839: ** a new mutex.  The new mutex is recursive when SQLITE_MUTEX_RECURSIVE
                   17840: ** is used but not necessarily so when SQLITE_MUTEX_FAST is used.
                   17841: ** The mutex implementation does not need to make a distinction
                   17842: ** between SQLITE_MUTEX_RECURSIVE and SQLITE_MUTEX_FAST if it does
                   17843: ** not want to.  But SQLite will only request a recursive mutex in
                   17844: ** cases where it really needs one.  If a faster non-recursive mutex
                   17845: ** implementation is available on the host platform, the mutex subsystem
                   17846: ** might return such a mutex in response to SQLITE_MUTEX_FAST.
                   17847: **
                   17848: ** The other allowed parameters to sqlite3_mutex_alloc() each return
                   17849: ** a pointer to a static preexisting mutex.  Six static mutexes are
                   17850: ** used by the current version of SQLite.  Future versions of SQLite
                   17851: ** may add additional static mutexes.  Static mutexes are for internal
                   17852: ** use by SQLite only.  Applications that use SQLite mutexes should
                   17853: ** use only the dynamic mutexes returned by SQLITE_MUTEX_FAST or
                   17854: ** SQLITE_MUTEX_RECURSIVE.
                   17855: **
                   17856: ** Note that if one of the dynamic mutex parameters (SQLITE_MUTEX_FAST
                   17857: ** or SQLITE_MUTEX_RECURSIVE) is used then sqlite3_mutex_alloc()
                   17858: ** returns a different mutex on every call.  But for the static 
                   17859: ** mutex types, the same mutex is returned on every call that has
                   17860: ** the same type number.
                   17861: */
                   17862: static sqlite3_mutex *winMutexAlloc(int iType){
                   17863:   sqlite3_mutex *p;
                   17864: 
                   17865:   switch( iType ){
                   17866:     case SQLITE_MUTEX_FAST:
                   17867:     case SQLITE_MUTEX_RECURSIVE: {
                   17868:       p = sqlite3MallocZero( sizeof(*p) );
                   17869:       if( p ){  
                   17870: #ifdef SQLITE_DEBUG
                   17871:         p->id = iType;
                   17872: #endif
                   17873:         InitializeCriticalSection(&p->mutex);
                   17874:       }
                   17875:       break;
                   17876:     }
                   17877:     default: {
                   17878:       assert( winMutex_isInit==1 );
                   17879:       assert( iType-2 >= 0 );
                   17880:       assert( iType-2 < ArraySize(winMutex_staticMutexes) );
                   17881:       p = &winMutex_staticMutexes[iType-2];
                   17882: #ifdef SQLITE_DEBUG
                   17883:       p->id = iType;
                   17884: #endif
                   17885:       break;
                   17886:     }
                   17887:   }
                   17888:   return p;
                   17889: }
                   17890: 
                   17891: 
                   17892: /*
                   17893: ** This routine deallocates a previously
                   17894: ** allocated mutex.  SQLite is careful to deallocate every
                   17895: ** mutex that it allocates.
                   17896: */
                   17897: static void winMutexFree(sqlite3_mutex *p){
                   17898:   assert( p );
                   17899:   assert( p->nRef==0 && p->owner==0 );
                   17900:   assert( p->id==SQLITE_MUTEX_FAST || p->id==SQLITE_MUTEX_RECURSIVE );
                   17901:   DeleteCriticalSection(&p->mutex);
                   17902:   sqlite3_free(p);
                   17903: }
                   17904: 
                   17905: /*
                   17906: ** The sqlite3_mutex_enter() and sqlite3_mutex_try() routines attempt
                   17907: ** to enter a mutex.  If another thread is already within the mutex,
                   17908: ** sqlite3_mutex_enter() will block and sqlite3_mutex_try() will return
                   17909: ** SQLITE_BUSY.  The sqlite3_mutex_try() interface returns SQLITE_OK
                   17910: ** upon successful entry.  Mutexes created using SQLITE_MUTEX_RECURSIVE can
                   17911: ** be entered multiple times by the same thread.  In such cases the,
                   17912: ** mutex must be exited an equal number of times before another thread
                   17913: ** can enter.  If the same thread tries to enter any other kind of mutex
                   17914: ** more than once, the behavior is undefined.
                   17915: */
                   17916: static void winMutexEnter(sqlite3_mutex *p){
                   17917: #ifdef SQLITE_DEBUG
                   17918:   DWORD tid = GetCurrentThreadId(); 
                   17919:   assert( p->id==SQLITE_MUTEX_RECURSIVE || winMutexNotheld2(p, tid) );
                   17920: #endif
                   17921:   EnterCriticalSection(&p->mutex);
                   17922: #ifdef SQLITE_DEBUG
                   17923:   assert( p->nRef>0 || p->owner==0 );
                   17924:   p->owner = tid; 
                   17925:   p->nRef++;
                   17926:   if( p->trace ){
                   17927:     printf("enter mutex %p (%d) with nRef=%d\n", p, p->trace, p->nRef);
                   17928:   }
                   17929: #endif
                   17930: }
                   17931: static int winMutexTry(sqlite3_mutex *p){
                   17932: #ifndef NDEBUG
                   17933:   DWORD tid = GetCurrentThreadId(); 
                   17934: #endif
                   17935:   int rc = SQLITE_BUSY;
                   17936:   assert( p->id==SQLITE_MUTEX_RECURSIVE || winMutexNotheld2(p, tid) );
                   17937:   /*
                   17938:   ** The sqlite3_mutex_try() routine is very rarely used, and when it
                   17939:   ** is used it is merely an optimization.  So it is OK for it to always
                   17940:   ** fail.  
                   17941:   **
                   17942:   ** The TryEnterCriticalSection() interface is only available on WinNT.
                   17943:   ** And some windows compilers complain if you try to use it without
                   17944:   ** first doing some #defines that prevent SQLite from building on Win98.
                   17945:   ** For that reason, we will omit this optimization for now.  See
                   17946:   ** ticket #2685.
                   17947:   */
                   17948: #if 0
                   17949:   if( mutexIsNT() && TryEnterCriticalSection(&p->mutex) ){
                   17950:     p->owner = tid;
                   17951:     p->nRef++;
                   17952:     rc = SQLITE_OK;
                   17953:   }
                   17954: #else
                   17955:   UNUSED_PARAMETER(p);
                   17956: #endif
                   17957: #ifdef SQLITE_DEBUG
                   17958:   if( rc==SQLITE_OK && p->trace ){
                   17959:     printf("try mutex %p (%d) with nRef=%d\n", p, p->trace, p->nRef);
                   17960:   }
                   17961: #endif
                   17962:   return rc;
                   17963: }
                   17964: 
                   17965: /*
                   17966: ** The sqlite3_mutex_leave() routine exits a mutex that was
                   17967: ** previously entered by the same thread.  The behavior
                   17968: ** is undefined if the mutex is not currently entered or
                   17969: ** is not currently allocated.  SQLite will never do either.
                   17970: */
                   17971: static void winMutexLeave(sqlite3_mutex *p){
                   17972: #ifndef NDEBUG
                   17973:   DWORD tid = GetCurrentThreadId();
                   17974:   assert( p->nRef>0 );
                   17975:   assert( p->owner==tid );
                   17976:   p->nRef--;
                   17977:   if( p->nRef==0 ) p->owner = 0;
                   17978:   assert( p->nRef==0 || p->id==SQLITE_MUTEX_RECURSIVE );
                   17979: #endif
                   17980:   LeaveCriticalSection(&p->mutex);
                   17981: #ifdef SQLITE_DEBUG
                   17982:   if( p->trace ){
                   17983:     printf("leave mutex %p (%d) with nRef=%d\n", p, p->trace, p->nRef);
                   17984:   }
                   17985: #endif
                   17986: }
                   17987: 
                   17988: SQLITE_PRIVATE sqlite3_mutex_methods const *sqlite3DefaultMutex(void){
                   17989:   static const sqlite3_mutex_methods sMutex = {
                   17990:     winMutexInit,
                   17991:     winMutexEnd,
                   17992:     winMutexAlloc,
                   17993:     winMutexFree,
                   17994:     winMutexEnter,
                   17995:     winMutexTry,
                   17996:     winMutexLeave,
                   17997: #ifdef SQLITE_DEBUG
                   17998:     winMutexHeld,
                   17999:     winMutexNotheld
                   18000: #else
                   18001:     0,
                   18002:     0
                   18003: #endif
                   18004:   };
                   18005: 
                   18006:   return &sMutex;
                   18007: }
                   18008: #endif /* SQLITE_MUTEX_W32 */
                   18009: 
                   18010: /************** End of mutex_w32.c *******************************************/
                   18011: /************** Begin file malloc.c ******************************************/
                   18012: /*
                   18013: ** 2001 September 15
                   18014: **
                   18015: ** The author disclaims copyright to this source code.  In place of
                   18016: ** a legal notice, here is a blessing:
                   18017: **
                   18018: **    May you do good and not evil.
                   18019: **    May you find forgiveness for yourself and forgive others.
                   18020: **    May you share freely, never taking more than you give.
                   18021: **
                   18022: *************************************************************************
                   18023: **
                   18024: ** Memory allocation functions used throughout sqlite.
                   18025: */
                   18026: 
                   18027: /*
                   18028: ** Attempt to release up to n bytes of non-essential memory currently
                   18029: ** held by SQLite. An example of non-essential memory is memory used to
                   18030: ** cache database pages that are not currently in use.
                   18031: */
                   18032: SQLITE_API int sqlite3_release_memory(int n){
                   18033: #ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT
                   18034:   return sqlite3PcacheReleaseMemory(n);
                   18035: #else
                   18036:   /* IMPLEMENTATION-OF: R-34391-24921 The sqlite3_release_memory() routine
                   18037:   ** is a no-op returning zero if SQLite is not compiled with
                   18038:   ** SQLITE_ENABLE_MEMORY_MANAGEMENT. */
                   18039:   UNUSED_PARAMETER(n);
                   18040:   return 0;
                   18041: #endif
                   18042: }
                   18043: 
                   18044: /*
                   18045: ** An instance of the following object records the location of
                   18046: ** each unused scratch buffer.
                   18047: */
                   18048: typedef struct ScratchFreeslot {
                   18049:   struct ScratchFreeslot *pNext;   /* Next unused scratch buffer */
                   18050: } ScratchFreeslot;
                   18051: 
                   18052: /*
                   18053: ** State information local to the memory allocation subsystem.
                   18054: */
                   18055: static SQLITE_WSD struct Mem0Global {
                   18056:   sqlite3_mutex *mutex;         /* Mutex to serialize access */
                   18057: 
                   18058:   /*
                   18059:   ** The alarm callback and its arguments.  The mem0.mutex lock will
                   18060:   ** be held while the callback is running.  Recursive calls into
                   18061:   ** the memory subsystem are allowed, but no new callbacks will be
                   18062:   ** issued.
                   18063:   */
                   18064:   sqlite3_int64 alarmThreshold;
                   18065:   void (*alarmCallback)(void*, sqlite3_int64,int);
                   18066:   void *alarmArg;
                   18067: 
                   18068:   /*
                   18069:   ** Pointers to the end of sqlite3GlobalConfig.pScratch memory
                   18070:   ** (so that a range test can be used to determine if an allocation
                   18071:   ** being freed came from pScratch) and a pointer to the list of
                   18072:   ** unused scratch allocations.
                   18073:   */
                   18074:   void *pScratchEnd;
                   18075:   ScratchFreeslot *pScratchFree;
                   18076:   u32 nScratchFree;
                   18077: 
                   18078:   /*
                   18079:   ** True if heap is nearly "full" where "full" is defined by the
                   18080:   ** sqlite3_soft_heap_limit() setting.
                   18081:   */
                   18082:   int nearlyFull;
                   18083: } mem0 = { 0, 0, 0, 0, 0, 0, 0, 0 };
                   18084: 
                   18085: #define mem0 GLOBAL(struct Mem0Global, mem0)
                   18086: 
                   18087: /*
                   18088: ** This routine runs when the memory allocator sees that the
                   18089: ** total memory allocation is about to exceed the soft heap
                   18090: ** limit.
                   18091: */
                   18092: static void softHeapLimitEnforcer(
                   18093:   void *NotUsed, 
                   18094:   sqlite3_int64 NotUsed2,
                   18095:   int allocSize
                   18096: ){
                   18097:   UNUSED_PARAMETER2(NotUsed, NotUsed2);
                   18098:   sqlite3_release_memory(allocSize);
                   18099: }
                   18100: 
                   18101: /*
                   18102: ** Change the alarm callback
                   18103: */
                   18104: static int sqlite3MemoryAlarm(
                   18105:   void(*xCallback)(void *pArg, sqlite3_int64 used,int N),
                   18106:   void *pArg,
                   18107:   sqlite3_int64 iThreshold
                   18108: ){
                   18109:   int nUsed;
                   18110:   sqlite3_mutex_enter(mem0.mutex);
                   18111:   mem0.alarmCallback = xCallback;
                   18112:   mem0.alarmArg = pArg;
                   18113:   mem0.alarmThreshold = iThreshold;
                   18114:   nUsed = sqlite3StatusValue(SQLITE_STATUS_MEMORY_USED);
                   18115:   mem0.nearlyFull = (iThreshold>0 && iThreshold<=nUsed);
                   18116:   sqlite3_mutex_leave(mem0.mutex);
                   18117:   return SQLITE_OK;
                   18118: }
                   18119: 
                   18120: #ifndef SQLITE_OMIT_DEPRECATED
                   18121: /*
                   18122: ** Deprecated external interface.  Internal/core SQLite code
                   18123: ** should call sqlite3MemoryAlarm.
                   18124: */
                   18125: SQLITE_API int sqlite3_memory_alarm(
                   18126:   void(*xCallback)(void *pArg, sqlite3_int64 used,int N),
                   18127:   void *pArg,
                   18128:   sqlite3_int64 iThreshold
                   18129: ){
                   18130:   return sqlite3MemoryAlarm(xCallback, pArg, iThreshold);
                   18131: }
                   18132: #endif
                   18133: 
                   18134: /*
                   18135: ** Set the soft heap-size limit for the library. Passing a zero or 
                   18136: ** negative value indicates no limit.
                   18137: */
                   18138: SQLITE_API sqlite3_int64 sqlite3_soft_heap_limit64(sqlite3_int64 n){
                   18139:   sqlite3_int64 priorLimit;
                   18140:   sqlite3_int64 excess;
                   18141: #ifndef SQLITE_OMIT_AUTOINIT
                   18142:   sqlite3_initialize();
                   18143: #endif
                   18144:   sqlite3_mutex_enter(mem0.mutex);
                   18145:   priorLimit = mem0.alarmThreshold;
                   18146:   sqlite3_mutex_leave(mem0.mutex);
                   18147:   if( n<0 ) return priorLimit;
                   18148:   if( n>0 ){
                   18149:     sqlite3MemoryAlarm(softHeapLimitEnforcer, 0, n);
                   18150:   }else{
                   18151:     sqlite3MemoryAlarm(0, 0, 0);
                   18152:   }
                   18153:   excess = sqlite3_memory_used() - n;
                   18154:   if( excess>0 ) sqlite3_release_memory((int)(excess & 0x7fffffff));
                   18155:   return priorLimit;
                   18156: }
                   18157: SQLITE_API void sqlite3_soft_heap_limit(int n){
                   18158:   if( n<0 ) n = 0;
                   18159:   sqlite3_soft_heap_limit64(n);
                   18160: }
                   18161: 
                   18162: /*
                   18163: ** Initialize the memory allocation subsystem.
                   18164: */
                   18165: SQLITE_PRIVATE int sqlite3MallocInit(void){
                   18166:   if( sqlite3GlobalConfig.m.xMalloc==0 ){
                   18167:     sqlite3MemSetDefault();
                   18168:   }
                   18169:   memset(&mem0, 0, sizeof(mem0));
                   18170:   if( sqlite3GlobalConfig.bCoreMutex ){
                   18171:     mem0.mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MEM);
                   18172:   }
                   18173:   if( sqlite3GlobalConfig.pScratch && sqlite3GlobalConfig.szScratch>=100
                   18174:       && sqlite3GlobalConfig.nScratch>0 ){
                   18175:     int i, n, sz;
                   18176:     ScratchFreeslot *pSlot;
                   18177:     sz = ROUNDDOWN8(sqlite3GlobalConfig.szScratch);
                   18178:     sqlite3GlobalConfig.szScratch = sz;
                   18179:     pSlot = (ScratchFreeslot*)sqlite3GlobalConfig.pScratch;
                   18180:     n = sqlite3GlobalConfig.nScratch;
                   18181:     mem0.pScratchFree = pSlot;
                   18182:     mem0.nScratchFree = n;
                   18183:     for(i=0; i<n-1; i++){
                   18184:       pSlot->pNext = (ScratchFreeslot*)(sz+(char*)pSlot);
                   18185:       pSlot = pSlot->pNext;
                   18186:     }
                   18187:     pSlot->pNext = 0;
                   18188:     mem0.pScratchEnd = (void*)&pSlot[1];
                   18189:   }else{
                   18190:     mem0.pScratchEnd = 0;
                   18191:     sqlite3GlobalConfig.pScratch = 0;
                   18192:     sqlite3GlobalConfig.szScratch = 0;
                   18193:     sqlite3GlobalConfig.nScratch = 0;
                   18194:   }
                   18195:   if( sqlite3GlobalConfig.pPage==0 || sqlite3GlobalConfig.szPage<512
                   18196:       || sqlite3GlobalConfig.nPage<1 ){
                   18197:     sqlite3GlobalConfig.pPage = 0;
                   18198:     sqlite3GlobalConfig.szPage = 0;
                   18199:     sqlite3GlobalConfig.nPage = 0;
                   18200:   }
                   18201:   return sqlite3GlobalConfig.m.xInit(sqlite3GlobalConfig.m.pAppData);
                   18202: }
                   18203: 
                   18204: /*
                   18205: ** Return true if the heap is currently under memory pressure - in other
                   18206: ** words if the amount of heap used is close to the limit set by
                   18207: ** sqlite3_soft_heap_limit().
                   18208: */
                   18209: SQLITE_PRIVATE int sqlite3HeapNearlyFull(void){
                   18210:   return mem0.nearlyFull;
                   18211: }
                   18212: 
                   18213: /*
                   18214: ** Deinitialize the memory allocation subsystem.
                   18215: */
                   18216: SQLITE_PRIVATE void sqlite3MallocEnd(void){
                   18217:   if( sqlite3GlobalConfig.m.xShutdown ){
                   18218:     sqlite3GlobalConfig.m.xShutdown(sqlite3GlobalConfig.m.pAppData);
                   18219:   }
                   18220:   memset(&mem0, 0, sizeof(mem0));
                   18221: }
                   18222: 
                   18223: /*
                   18224: ** Return the amount of memory currently checked out.
                   18225: */
                   18226: SQLITE_API sqlite3_int64 sqlite3_memory_used(void){
                   18227:   int n, mx;
                   18228:   sqlite3_int64 res;
                   18229:   sqlite3_status(SQLITE_STATUS_MEMORY_USED, &n, &mx, 0);
                   18230:   res = (sqlite3_int64)n;  /* Work around bug in Borland C. Ticket #3216 */
                   18231:   return res;
                   18232: }
                   18233: 
                   18234: /*
                   18235: ** Return the maximum amount of memory that has ever been
                   18236: ** checked out since either the beginning of this process
                   18237: ** or since the most recent reset.
                   18238: */
                   18239: SQLITE_API sqlite3_int64 sqlite3_memory_highwater(int resetFlag){
                   18240:   int n, mx;
                   18241:   sqlite3_int64 res;
                   18242:   sqlite3_status(SQLITE_STATUS_MEMORY_USED, &n, &mx, resetFlag);
                   18243:   res = (sqlite3_int64)mx;  /* Work around bug in Borland C. Ticket #3216 */
                   18244:   return res;
                   18245: }
                   18246: 
                   18247: /*
                   18248: ** Trigger the alarm 
                   18249: */
                   18250: static void sqlite3MallocAlarm(int nByte){
                   18251:   void (*xCallback)(void*,sqlite3_int64,int);
                   18252:   sqlite3_int64 nowUsed;
                   18253:   void *pArg;
                   18254:   if( mem0.alarmCallback==0 ) return;
                   18255:   xCallback = mem0.alarmCallback;
                   18256:   nowUsed = sqlite3StatusValue(SQLITE_STATUS_MEMORY_USED);
                   18257:   pArg = mem0.alarmArg;
                   18258:   mem0.alarmCallback = 0;
                   18259:   sqlite3_mutex_leave(mem0.mutex);
                   18260:   xCallback(pArg, nowUsed, nByte);
                   18261:   sqlite3_mutex_enter(mem0.mutex);
                   18262:   mem0.alarmCallback = xCallback;
                   18263:   mem0.alarmArg = pArg;
                   18264: }
                   18265: 
                   18266: /*
                   18267: ** Do a memory allocation with statistics and alarms.  Assume the
                   18268: ** lock is already held.
                   18269: */
                   18270: static int mallocWithAlarm(int n, void **pp){
                   18271:   int nFull;
                   18272:   void *p;
                   18273:   assert( sqlite3_mutex_held(mem0.mutex) );
                   18274:   nFull = sqlite3GlobalConfig.m.xRoundup(n);
                   18275:   sqlite3StatusSet(SQLITE_STATUS_MALLOC_SIZE, n);
                   18276:   if( mem0.alarmCallback!=0 ){
                   18277:     int nUsed = sqlite3StatusValue(SQLITE_STATUS_MEMORY_USED);
                   18278:     if( nUsed >= mem0.alarmThreshold - nFull ){
                   18279:       mem0.nearlyFull = 1;
                   18280:       sqlite3MallocAlarm(nFull);
                   18281:     }else{
                   18282:       mem0.nearlyFull = 0;
                   18283:     }
                   18284:   }
                   18285:   p = sqlite3GlobalConfig.m.xMalloc(nFull);
                   18286: #ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT
                   18287:   if( p==0 && mem0.alarmCallback ){
                   18288:     sqlite3MallocAlarm(nFull);
                   18289:     p = sqlite3GlobalConfig.m.xMalloc(nFull);
                   18290:   }
                   18291: #endif
                   18292:   if( p ){
                   18293:     nFull = sqlite3MallocSize(p);
                   18294:     sqlite3StatusAdd(SQLITE_STATUS_MEMORY_USED, nFull);
                   18295:     sqlite3StatusAdd(SQLITE_STATUS_MALLOC_COUNT, 1);
                   18296:   }
                   18297:   *pp = p;
                   18298:   return nFull;
                   18299: }
                   18300: 
                   18301: /*
                   18302: ** Allocate memory.  This routine is like sqlite3_malloc() except that it
                   18303: ** assumes the memory subsystem has already been initialized.
                   18304: */
                   18305: SQLITE_PRIVATE void *sqlite3Malloc(int n){
                   18306:   void *p;
                   18307:   if( n<=0               /* IMP: R-65312-04917 */ 
                   18308:    || n>=0x7fffff00
                   18309:   ){
                   18310:     /* A memory allocation of a number of bytes which is near the maximum
                   18311:     ** signed integer value might cause an integer overflow inside of the
                   18312:     ** xMalloc().  Hence we limit the maximum size to 0x7fffff00, giving
                   18313:     ** 255 bytes of overhead.  SQLite itself will never use anything near
                   18314:     ** this amount.  The only way to reach the limit is with sqlite3_malloc() */
                   18315:     p = 0;
                   18316:   }else if( sqlite3GlobalConfig.bMemstat ){
                   18317:     sqlite3_mutex_enter(mem0.mutex);
                   18318:     mallocWithAlarm(n, &p);
                   18319:     sqlite3_mutex_leave(mem0.mutex);
                   18320:   }else{
                   18321:     p = sqlite3GlobalConfig.m.xMalloc(n);
                   18322:   }
                   18323:   assert( EIGHT_BYTE_ALIGNMENT(p) );  /* IMP: R-04675-44850 */
                   18324:   return p;
                   18325: }
                   18326: 
                   18327: /*
                   18328: ** This version of the memory allocation is for use by the application.
                   18329: ** First make sure the memory subsystem is initialized, then do the
                   18330: ** allocation.
                   18331: */
                   18332: SQLITE_API void *sqlite3_malloc(int n){
                   18333: #ifndef SQLITE_OMIT_AUTOINIT
                   18334:   if( sqlite3_initialize() ) return 0;
                   18335: #endif
                   18336:   return sqlite3Malloc(n);
                   18337: }
                   18338: 
                   18339: /*
                   18340: ** Each thread may only have a single outstanding allocation from
                   18341: ** xScratchMalloc().  We verify this constraint in the single-threaded
                   18342: ** case by setting scratchAllocOut to 1 when an allocation
                   18343: ** is outstanding clearing it when the allocation is freed.
                   18344: */
                   18345: #if SQLITE_THREADSAFE==0 && !defined(NDEBUG)
                   18346: static int scratchAllocOut = 0;
                   18347: #endif
                   18348: 
                   18349: 
                   18350: /*
                   18351: ** Allocate memory that is to be used and released right away.
                   18352: ** This routine is similar to alloca() in that it is not intended
                   18353: ** for situations where the memory might be held long-term.  This
                   18354: ** routine is intended to get memory to old large transient data
                   18355: ** structures that would not normally fit on the stack of an
                   18356: ** embedded processor.
                   18357: */
                   18358: SQLITE_PRIVATE void *sqlite3ScratchMalloc(int n){
                   18359:   void *p;
                   18360:   assert( n>0 );
                   18361: 
                   18362:   sqlite3_mutex_enter(mem0.mutex);
                   18363:   if( mem0.nScratchFree && sqlite3GlobalConfig.szScratch>=n ){
                   18364:     p = mem0.pScratchFree;
                   18365:     mem0.pScratchFree = mem0.pScratchFree->pNext;
                   18366:     mem0.nScratchFree--;
                   18367:     sqlite3StatusAdd(SQLITE_STATUS_SCRATCH_USED, 1);
                   18368:     sqlite3StatusSet(SQLITE_STATUS_SCRATCH_SIZE, n);
                   18369:     sqlite3_mutex_leave(mem0.mutex);
                   18370:   }else{
                   18371:     if( sqlite3GlobalConfig.bMemstat ){
                   18372:       sqlite3StatusSet(SQLITE_STATUS_SCRATCH_SIZE, n);
                   18373:       n = mallocWithAlarm(n, &p);
                   18374:       if( p ) sqlite3StatusAdd(SQLITE_STATUS_SCRATCH_OVERFLOW, n);
                   18375:       sqlite3_mutex_leave(mem0.mutex);
                   18376:     }else{
                   18377:       sqlite3_mutex_leave(mem0.mutex);
                   18378:       p = sqlite3GlobalConfig.m.xMalloc(n);
                   18379:     }
                   18380:     sqlite3MemdebugSetType(p, MEMTYPE_SCRATCH);
                   18381:   }
                   18382:   assert( sqlite3_mutex_notheld(mem0.mutex) );
                   18383: 
                   18384: 
                   18385: #if SQLITE_THREADSAFE==0 && !defined(NDEBUG)
                   18386:   /* Verify that no more than two scratch allocations per thread
                   18387:   ** are outstanding at one time.  (This is only checked in the
                   18388:   ** single-threaded case since checking in the multi-threaded case
                   18389:   ** would be much more complicated.) */
                   18390:   assert( scratchAllocOut<=1 );
                   18391:   if( p ) scratchAllocOut++;
                   18392: #endif
                   18393: 
                   18394:   return p;
                   18395: }
                   18396: SQLITE_PRIVATE void sqlite3ScratchFree(void *p){
                   18397:   if( p ){
                   18398: 
                   18399: #if SQLITE_THREADSAFE==0 && !defined(NDEBUG)
                   18400:     /* Verify that no more than two scratch allocation per thread
                   18401:     ** is outstanding at one time.  (This is only checked in the
                   18402:     ** single-threaded case since checking in the multi-threaded case
                   18403:     ** would be much more complicated.) */
                   18404:     assert( scratchAllocOut>=1 && scratchAllocOut<=2 );
                   18405:     scratchAllocOut--;
                   18406: #endif
                   18407: 
                   18408:     if( p>=sqlite3GlobalConfig.pScratch && p<mem0.pScratchEnd ){
                   18409:       /* Release memory from the SQLITE_CONFIG_SCRATCH allocation */
                   18410:       ScratchFreeslot *pSlot;
                   18411:       pSlot = (ScratchFreeslot*)p;
                   18412:       sqlite3_mutex_enter(mem0.mutex);
                   18413:       pSlot->pNext = mem0.pScratchFree;
                   18414:       mem0.pScratchFree = pSlot;
                   18415:       mem0.nScratchFree++;
                   18416:       assert( mem0.nScratchFree <= (u32)sqlite3GlobalConfig.nScratch );
                   18417:       sqlite3StatusAdd(SQLITE_STATUS_SCRATCH_USED, -1);
                   18418:       sqlite3_mutex_leave(mem0.mutex);
                   18419:     }else{
                   18420:       /* Release memory back to the heap */
                   18421:       assert( sqlite3MemdebugHasType(p, MEMTYPE_SCRATCH) );
                   18422:       assert( sqlite3MemdebugNoType(p, ~MEMTYPE_SCRATCH) );
                   18423:       sqlite3MemdebugSetType(p, MEMTYPE_HEAP);
                   18424:       if( sqlite3GlobalConfig.bMemstat ){
                   18425:         int iSize = sqlite3MallocSize(p);
                   18426:         sqlite3_mutex_enter(mem0.mutex);
                   18427:         sqlite3StatusAdd(SQLITE_STATUS_SCRATCH_OVERFLOW, -iSize);
                   18428:         sqlite3StatusAdd(SQLITE_STATUS_MEMORY_USED, -iSize);
                   18429:         sqlite3StatusAdd(SQLITE_STATUS_MALLOC_COUNT, -1);
                   18430:         sqlite3GlobalConfig.m.xFree(p);
                   18431:         sqlite3_mutex_leave(mem0.mutex);
                   18432:       }else{
                   18433:         sqlite3GlobalConfig.m.xFree(p);
                   18434:       }
                   18435:     }
                   18436:   }
                   18437: }
                   18438: 
                   18439: /*
                   18440: ** TRUE if p is a lookaside memory allocation from db
                   18441: */
                   18442: #ifndef SQLITE_OMIT_LOOKASIDE
                   18443: static int isLookaside(sqlite3 *db, void *p){
                   18444:   return p && p>=db->lookaside.pStart && p<db->lookaside.pEnd;
                   18445: }
                   18446: #else
                   18447: #define isLookaside(A,B) 0
                   18448: #endif
                   18449: 
                   18450: /*
                   18451: ** Return the size of a memory allocation previously obtained from
                   18452: ** sqlite3Malloc() or sqlite3_malloc().
                   18453: */
                   18454: SQLITE_PRIVATE int sqlite3MallocSize(void *p){
                   18455:   assert( sqlite3MemdebugHasType(p, MEMTYPE_HEAP) );
                   18456:   assert( sqlite3MemdebugNoType(p, MEMTYPE_DB) );
                   18457:   return sqlite3GlobalConfig.m.xSize(p);
                   18458: }
                   18459: SQLITE_PRIVATE int sqlite3DbMallocSize(sqlite3 *db, void *p){
                   18460:   assert( db==0 || sqlite3_mutex_held(db->mutex) );
                   18461:   if( db && isLookaside(db, p) ){
                   18462:     return db->lookaside.sz;
                   18463:   }else{
                   18464:     assert( sqlite3MemdebugHasType(p, MEMTYPE_DB) );
                   18465:     assert( sqlite3MemdebugHasType(p, MEMTYPE_LOOKASIDE|MEMTYPE_HEAP) );
                   18466:     assert( db!=0 || sqlite3MemdebugNoType(p, MEMTYPE_LOOKASIDE) );
                   18467:     return sqlite3GlobalConfig.m.xSize(p);
                   18468:   }
                   18469: }
                   18470: 
                   18471: /*
                   18472: ** Free memory previously obtained from sqlite3Malloc().
                   18473: */
                   18474: SQLITE_API void sqlite3_free(void *p){
                   18475:   if( p==0 ) return;  /* IMP: R-49053-54554 */
                   18476:   assert( sqlite3MemdebugNoType(p, MEMTYPE_DB) );
                   18477:   assert( sqlite3MemdebugHasType(p, MEMTYPE_HEAP) );
                   18478:   if( sqlite3GlobalConfig.bMemstat ){
                   18479:     sqlite3_mutex_enter(mem0.mutex);
                   18480:     sqlite3StatusAdd(SQLITE_STATUS_MEMORY_USED, -sqlite3MallocSize(p));
                   18481:     sqlite3StatusAdd(SQLITE_STATUS_MALLOC_COUNT, -1);
                   18482:     sqlite3GlobalConfig.m.xFree(p);
                   18483:     sqlite3_mutex_leave(mem0.mutex);
                   18484:   }else{
                   18485:     sqlite3GlobalConfig.m.xFree(p);
                   18486:   }
                   18487: }
                   18488: 
                   18489: /*
                   18490: ** Free memory that might be associated with a particular database
                   18491: ** connection.
                   18492: */
                   18493: SQLITE_PRIVATE void sqlite3DbFree(sqlite3 *db, void *p){
                   18494:   assert( db==0 || sqlite3_mutex_held(db->mutex) );
                   18495:   if( db ){
                   18496:     if( db->pnBytesFreed ){
                   18497:       *db->pnBytesFreed += sqlite3DbMallocSize(db, p);
                   18498:       return;
                   18499:     }
                   18500:     if( isLookaside(db, p) ){
                   18501:       LookasideSlot *pBuf = (LookasideSlot*)p;
                   18502:       pBuf->pNext = db->lookaside.pFree;
                   18503:       db->lookaside.pFree = pBuf;
                   18504:       db->lookaside.nOut--;
                   18505:       return;
                   18506:     }
                   18507:   }
                   18508:   assert( sqlite3MemdebugHasType(p, MEMTYPE_DB) );
                   18509:   assert( sqlite3MemdebugHasType(p, MEMTYPE_LOOKASIDE|MEMTYPE_HEAP) );
                   18510:   assert( db!=0 || sqlite3MemdebugNoType(p, MEMTYPE_LOOKASIDE) );
                   18511:   sqlite3MemdebugSetType(p, MEMTYPE_HEAP);
                   18512:   sqlite3_free(p);
                   18513: }
                   18514: 
                   18515: /*
                   18516: ** Change the size of an existing memory allocation
                   18517: */
                   18518: SQLITE_PRIVATE void *sqlite3Realloc(void *pOld, int nBytes){
                   18519:   int nOld, nNew, nDiff;
                   18520:   void *pNew;
                   18521:   if( pOld==0 ){
                   18522:     return sqlite3Malloc(nBytes); /* IMP: R-28354-25769 */
                   18523:   }
                   18524:   if( nBytes<=0 ){
                   18525:     sqlite3_free(pOld); /* IMP: R-31593-10574 */
                   18526:     return 0;
                   18527:   }
                   18528:   if( nBytes>=0x7fffff00 ){
                   18529:     /* The 0x7ffff00 limit term is explained in comments on sqlite3Malloc() */
                   18530:     return 0;
                   18531:   }
                   18532:   nOld = sqlite3MallocSize(pOld);
                   18533:   /* IMPLEMENTATION-OF: R-46199-30249 SQLite guarantees that the second
                   18534:   ** argument to xRealloc is always a value returned by a prior call to
                   18535:   ** xRoundup. */
                   18536:   nNew = sqlite3GlobalConfig.m.xRoundup(nBytes);
                   18537:   if( nOld==nNew ){
                   18538:     pNew = pOld;
                   18539:   }else if( sqlite3GlobalConfig.bMemstat ){
                   18540:     sqlite3_mutex_enter(mem0.mutex);
                   18541:     sqlite3StatusSet(SQLITE_STATUS_MALLOC_SIZE, nBytes);
                   18542:     nDiff = nNew - nOld;
                   18543:     if( sqlite3StatusValue(SQLITE_STATUS_MEMORY_USED) >= 
                   18544:           mem0.alarmThreshold-nDiff ){
                   18545:       sqlite3MallocAlarm(nDiff);
                   18546:     }
                   18547:     assert( sqlite3MemdebugHasType(pOld, MEMTYPE_HEAP) );
                   18548:     assert( sqlite3MemdebugNoType(pOld, ~MEMTYPE_HEAP) );
                   18549:     pNew = sqlite3GlobalConfig.m.xRealloc(pOld, nNew);
                   18550:     if( pNew==0 && mem0.alarmCallback ){
                   18551:       sqlite3MallocAlarm(nBytes);
                   18552:       pNew = sqlite3GlobalConfig.m.xRealloc(pOld, nNew);
                   18553:     }
                   18554:     if( pNew ){
                   18555:       nNew = sqlite3MallocSize(pNew);
                   18556:       sqlite3StatusAdd(SQLITE_STATUS_MEMORY_USED, nNew-nOld);
                   18557:     }
                   18558:     sqlite3_mutex_leave(mem0.mutex);
                   18559:   }else{
                   18560:     pNew = sqlite3GlobalConfig.m.xRealloc(pOld, nNew);
                   18561:   }
                   18562:   assert( EIGHT_BYTE_ALIGNMENT(pNew) ); /* IMP: R-04675-44850 */
                   18563:   return pNew;
                   18564: }
                   18565: 
                   18566: /*
                   18567: ** The public interface to sqlite3Realloc.  Make sure that the memory
                   18568: ** subsystem is initialized prior to invoking sqliteRealloc.
                   18569: */
                   18570: SQLITE_API void *sqlite3_realloc(void *pOld, int n){
                   18571: #ifndef SQLITE_OMIT_AUTOINIT
                   18572:   if( sqlite3_initialize() ) return 0;
                   18573: #endif
                   18574:   return sqlite3Realloc(pOld, n);
                   18575: }
                   18576: 
                   18577: 
                   18578: /*
                   18579: ** Allocate and zero memory.
                   18580: */ 
                   18581: SQLITE_PRIVATE void *sqlite3MallocZero(int n){
                   18582:   void *p = sqlite3Malloc(n);
                   18583:   if( p ){
                   18584:     memset(p, 0, n);
                   18585:   }
                   18586:   return p;
                   18587: }
                   18588: 
                   18589: /*
                   18590: ** Allocate and zero memory.  If the allocation fails, make
                   18591: ** the mallocFailed flag in the connection pointer.
                   18592: */
                   18593: SQLITE_PRIVATE void *sqlite3DbMallocZero(sqlite3 *db, int n){
                   18594:   void *p = sqlite3DbMallocRaw(db, n);
                   18595:   if( p ){
                   18596:     memset(p, 0, n);
                   18597:   }
                   18598:   return p;
                   18599: }
                   18600: 
                   18601: /*
                   18602: ** Allocate and zero memory.  If the allocation fails, make
                   18603: ** the mallocFailed flag in the connection pointer.
                   18604: **
                   18605: ** If db!=0 and db->mallocFailed is true (indicating a prior malloc
                   18606: ** failure on the same database connection) then always return 0.
                   18607: ** Hence for a particular database connection, once malloc starts
                   18608: ** failing, it fails consistently until mallocFailed is reset.
                   18609: ** This is an important assumption.  There are many places in the
                   18610: ** code that do things like this:
                   18611: **
                   18612: **         int *a = (int*)sqlite3DbMallocRaw(db, 100);
                   18613: **         int *b = (int*)sqlite3DbMallocRaw(db, 200);
                   18614: **         if( b ) a[10] = 9;
                   18615: **
                   18616: ** In other words, if a subsequent malloc (ex: "b") worked, it is assumed
                   18617: ** that all prior mallocs (ex: "a") worked too.
                   18618: */
                   18619: SQLITE_PRIVATE void *sqlite3DbMallocRaw(sqlite3 *db, int n){
                   18620:   void *p;
                   18621:   assert( db==0 || sqlite3_mutex_held(db->mutex) );
                   18622:   assert( db==0 || db->pnBytesFreed==0 );
                   18623: #ifndef SQLITE_OMIT_LOOKASIDE
                   18624:   if( db ){
                   18625:     LookasideSlot *pBuf;
                   18626:     if( db->mallocFailed ){
                   18627:       return 0;
                   18628:     }
                   18629:     if( db->lookaside.bEnabled ){
                   18630:       if( n>db->lookaside.sz ){
                   18631:         db->lookaside.anStat[1]++;
                   18632:       }else if( (pBuf = db->lookaside.pFree)==0 ){
                   18633:         db->lookaside.anStat[2]++;
                   18634:       }else{
                   18635:         db->lookaside.pFree = pBuf->pNext;
                   18636:         db->lookaside.nOut++;
                   18637:         db->lookaside.anStat[0]++;
                   18638:         if( db->lookaside.nOut>db->lookaside.mxOut ){
                   18639:           db->lookaside.mxOut = db->lookaside.nOut;
                   18640:         }
                   18641:         return (void*)pBuf;
                   18642:       }
                   18643:     }
                   18644:   }
                   18645: #else
                   18646:   if( db && db->mallocFailed ){
                   18647:     return 0;
                   18648:   }
                   18649: #endif
                   18650:   p = sqlite3Malloc(n);
                   18651:   if( !p && db ){
                   18652:     db->mallocFailed = 1;
                   18653:   }
                   18654:   sqlite3MemdebugSetType(p, MEMTYPE_DB |
                   18655:          ((db && db->lookaside.bEnabled) ? MEMTYPE_LOOKASIDE : MEMTYPE_HEAP));
                   18656:   return p;
                   18657: }
                   18658: 
                   18659: /*
                   18660: ** Resize the block of memory pointed to by p to n bytes. If the
                   18661: ** resize fails, set the mallocFailed flag in the connection object.
                   18662: */
                   18663: SQLITE_PRIVATE void *sqlite3DbRealloc(sqlite3 *db, void *p, int n){
                   18664:   void *pNew = 0;
                   18665:   assert( db!=0 );
                   18666:   assert( sqlite3_mutex_held(db->mutex) );
                   18667:   if( db->mallocFailed==0 ){
                   18668:     if( p==0 ){
                   18669:       return sqlite3DbMallocRaw(db, n);
                   18670:     }
                   18671:     if( isLookaside(db, p) ){
                   18672:       if( n<=db->lookaside.sz ){
                   18673:         return p;
                   18674:       }
                   18675:       pNew = sqlite3DbMallocRaw(db, n);
                   18676:       if( pNew ){
                   18677:         memcpy(pNew, p, db->lookaside.sz);
                   18678:         sqlite3DbFree(db, p);
                   18679:       }
                   18680:     }else{
                   18681:       assert( sqlite3MemdebugHasType(p, MEMTYPE_DB) );
                   18682:       assert( sqlite3MemdebugHasType(p, MEMTYPE_LOOKASIDE|MEMTYPE_HEAP) );
                   18683:       sqlite3MemdebugSetType(p, MEMTYPE_HEAP);
                   18684:       pNew = sqlite3_realloc(p, n);
                   18685:       if( !pNew ){
                   18686:         sqlite3MemdebugSetType(p, MEMTYPE_DB|MEMTYPE_HEAP);
                   18687:         db->mallocFailed = 1;
                   18688:       }
                   18689:       sqlite3MemdebugSetType(pNew, MEMTYPE_DB | 
                   18690:             (db->lookaside.bEnabled ? MEMTYPE_LOOKASIDE : MEMTYPE_HEAP));
                   18691:     }
                   18692:   }
                   18693:   return pNew;
                   18694: }
                   18695: 
                   18696: /*
                   18697: ** Attempt to reallocate p.  If the reallocation fails, then free p
                   18698: ** and set the mallocFailed flag in the database connection.
                   18699: */
                   18700: SQLITE_PRIVATE void *sqlite3DbReallocOrFree(sqlite3 *db, void *p, int n){
                   18701:   void *pNew;
                   18702:   pNew = sqlite3DbRealloc(db, p, n);
                   18703:   if( !pNew ){
                   18704:     sqlite3DbFree(db, p);
                   18705:   }
                   18706:   return pNew;
                   18707: }
                   18708: 
                   18709: /*
                   18710: ** Make a copy of a string in memory obtained from sqliteMalloc(). These 
                   18711: ** functions call sqlite3MallocRaw() directly instead of sqliteMalloc(). This
                   18712: ** is because when memory debugging is turned on, these two functions are 
                   18713: ** called via macros that record the current file and line number in the
                   18714: ** ThreadData structure.
                   18715: */
                   18716: SQLITE_PRIVATE char *sqlite3DbStrDup(sqlite3 *db, const char *z){
                   18717:   char *zNew;
                   18718:   size_t n;
                   18719:   if( z==0 ){
                   18720:     return 0;
                   18721:   }
                   18722:   n = sqlite3Strlen30(z) + 1;
                   18723:   assert( (n&0x7fffffff)==n );
                   18724:   zNew = sqlite3DbMallocRaw(db, (int)n);
                   18725:   if( zNew ){
                   18726:     memcpy(zNew, z, n);
                   18727:   }
                   18728:   return zNew;
                   18729: }
                   18730: SQLITE_PRIVATE char *sqlite3DbStrNDup(sqlite3 *db, const char *z, int n){
                   18731:   char *zNew;
                   18732:   if( z==0 ){
                   18733:     return 0;
                   18734:   }
                   18735:   assert( (n&0x7fffffff)==n );
                   18736:   zNew = sqlite3DbMallocRaw(db, n+1);
                   18737:   if( zNew ){
                   18738:     memcpy(zNew, z, n);
                   18739:     zNew[n] = 0;
                   18740:   }
                   18741:   return zNew;
                   18742: }
                   18743: 
                   18744: /*
                   18745: ** Create a string from the zFromat argument and the va_list that follows.
                   18746: ** Store the string in memory obtained from sqliteMalloc() and make *pz
                   18747: ** point to that string.
                   18748: */
                   18749: SQLITE_PRIVATE void sqlite3SetString(char **pz, sqlite3 *db, const char *zFormat, ...){
                   18750:   va_list ap;
                   18751:   char *z;
                   18752: 
                   18753:   va_start(ap, zFormat);
                   18754:   z = sqlite3VMPrintf(db, zFormat, ap);
                   18755:   va_end(ap);
                   18756:   sqlite3DbFree(db, *pz);
                   18757:   *pz = z;
                   18758: }
                   18759: 
                   18760: 
                   18761: /*
                   18762: ** This function must be called before exiting any API function (i.e. 
                   18763: ** returning control to the user) that has called sqlite3_malloc or
                   18764: ** sqlite3_realloc.
                   18765: **
                   18766: ** The returned value is normally a copy of the second argument to this
                   18767: ** function. However, if a malloc() failure has occurred since the previous
                   18768: ** invocation SQLITE_NOMEM is returned instead. 
                   18769: **
                   18770: ** If the first argument, db, is not NULL and a malloc() error has occurred,
                   18771: ** then the connection error-code (the value returned by sqlite3_errcode())
                   18772: ** is set to SQLITE_NOMEM.
                   18773: */
                   18774: SQLITE_PRIVATE int sqlite3ApiExit(sqlite3* db, int rc){
                   18775:   /* If the db handle is not NULL, then we must hold the connection handle
                   18776:   ** mutex here. Otherwise the read (and possible write) of db->mallocFailed 
                   18777:   ** is unsafe, as is the call to sqlite3Error().
                   18778:   */
                   18779:   assert( !db || sqlite3_mutex_held(db->mutex) );
                   18780:   if( db && (db->mallocFailed || rc==SQLITE_IOERR_NOMEM) ){
                   18781:     sqlite3Error(db, SQLITE_NOMEM, 0);
                   18782:     db->mallocFailed = 0;
                   18783:     rc = SQLITE_NOMEM;
                   18784:   }
                   18785:   return rc & (db ? db->errMask : 0xff);
                   18786: }
                   18787: 
                   18788: /************** End of malloc.c **********************************************/
                   18789: /************** Begin file printf.c ******************************************/
                   18790: /*
                   18791: ** The "printf" code that follows dates from the 1980's.  It is in
                   18792: ** the public domain.  The original comments are included here for
                   18793: ** completeness.  They are very out-of-date but might be useful as
                   18794: ** an historical reference.  Most of the "enhancements" have been backed
                   18795: ** out so that the functionality is now the same as standard printf().
                   18796: **
                   18797: **************************************************************************
                   18798: **
                   18799: ** The following modules is an enhanced replacement for the "printf" subroutines
                   18800: ** found in the standard C library.  The following enhancements are
                   18801: ** supported:
                   18802: **
                   18803: **      +  Additional functions.  The standard set of "printf" functions
                   18804: **         includes printf, fprintf, sprintf, vprintf, vfprintf, and
                   18805: **         vsprintf.  This module adds the following:
                   18806: **
                   18807: **           *  snprintf -- Works like sprintf, but has an extra argument
                   18808: **                          which is the size of the buffer written to.
                   18809: **
                   18810: **           *  mprintf --  Similar to sprintf.  Writes output to memory
                   18811: **                          obtained from malloc.
                   18812: **
                   18813: **           *  xprintf --  Calls a function to dispose of output.
                   18814: **
                   18815: **           *  nprintf --  No output, but returns the number of characters
                   18816: **                          that would have been output by printf.
                   18817: **
                   18818: **           *  A v- version (ex: vsnprintf) of every function is also
                   18819: **              supplied.
                   18820: **
                   18821: **      +  A few extensions to the formatting notation are supported:
                   18822: **
                   18823: **           *  The "=" flag (similar to "-") causes the output to be
                   18824: **              be centered in the appropriately sized field.
                   18825: **
                   18826: **           *  The %b field outputs an integer in binary notation.
                   18827: **
                   18828: **           *  The %c field now accepts a precision.  The character output
                   18829: **              is repeated by the number of times the precision specifies.
                   18830: **
                   18831: **           *  The %' field works like %c, but takes as its character the
                   18832: **              next character of the format string, instead of the next
                   18833: **              argument.  For example,  printf("%.78'-")  prints 78 minus
                   18834: **              signs, the same as  printf("%.78c",'-').
                   18835: **
                   18836: **      +  When compiled using GCC on a SPARC, this version of printf is
                   18837: **         faster than the library printf for SUN OS 4.1.
                   18838: **
                   18839: **      +  All functions are fully reentrant.
                   18840: **
                   18841: */
                   18842: 
                   18843: /*
                   18844: ** Conversion types fall into various categories as defined by the
                   18845: ** following enumeration.
                   18846: */
                   18847: #define etRADIX       1 /* Integer types.  %d, %x, %o, and so forth */
                   18848: #define etFLOAT       2 /* Floating point.  %f */
                   18849: #define etEXP         3 /* Exponentional notation. %e and %E */
                   18850: #define etGENERIC     4 /* Floating or exponential, depending on exponent. %g */
                   18851: #define etSIZE        5 /* Return number of characters processed so far. %n */
                   18852: #define etSTRING      6 /* Strings. %s */
                   18853: #define etDYNSTRING   7 /* Dynamically allocated strings. %z */
                   18854: #define etPERCENT     8 /* Percent symbol. %% */
                   18855: #define etCHARX       9 /* Characters. %c */
                   18856: /* The rest are extensions, not normally found in printf() */
                   18857: #define etSQLESCAPE  10 /* Strings with '\'' doubled.  %q */
                   18858: #define etSQLESCAPE2 11 /* Strings with '\'' doubled and enclosed in '',
                   18859:                           NULL pointers replaced by SQL NULL.  %Q */
                   18860: #define etTOKEN      12 /* a pointer to a Token structure */
                   18861: #define etSRCLIST    13 /* a pointer to a SrcList */
                   18862: #define etPOINTER    14 /* The %p conversion */
                   18863: #define etSQLESCAPE3 15 /* %w -> Strings with '\"' doubled */
                   18864: #define etORDINAL    16 /* %r -> 1st, 2nd, 3rd, 4th, etc.  English only */
                   18865: 
                   18866: #define etINVALID     0 /* Any unrecognized conversion type */
                   18867: 
                   18868: 
                   18869: /*
                   18870: ** An "etByte" is an 8-bit unsigned value.
                   18871: */
                   18872: typedef unsigned char etByte;
                   18873: 
                   18874: /*
                   18875: ** Each builtin conversion character (ex: the 'd' in "%d") is described
                   18876: ** by an instance of the following structure
                   18877: */
                   18878: typedef struct et_info {   /* Information about each format field */
                   18879:   char fmttype;            /* The format field code letter */
                   18880:   etByte base;             /* The base for radix conversion */
                   18881:   etByte flags;            /* One or more of FLAG_ constants below */
                   18882:   etByte type;             /* Conversion paradigm */
                   18883:   etByte charset;          /* Offset into aDigits[] of the digits string */
                   18884:   etByte prefix;           /* Offset into aPrefix[] of the prefix string */
                   18885: } et_info;
                   18886: 
                   18887: /*
                   18888: ** Allowed values for et_info.flags
                   18889: */
                   18890: #define FLAG_SIGNED  1     /* True if the value to convert is signed */
                   18891: #define FLAG_INTERN  2     /* True if for internal use only */
                   18892: #define FLAG_STRING  4     /* Allow infinity precision */
                   18893: 
                   18894: 
                   18895: /*
                   18896: ** The following table is searched linearly, so it is good to put the
                   18897: ** most frequently used conversion types first.
                   18898: */
                   18899: static const char aDigits[] = "0123456789ABCDEF0123456789abcdef";
                   18900: static const char aPrefix[] = "-x0\000X0";
                   18901: static const et_info fmtinfo[] = {
                   18902:   {  'd', 10, 1, etRADIX,      0,  0 },
                   18903:   {  's',  0, 4, etSTRING,     0,  0 },
                   18904:   {  'g',  0, 1, etGENERIC,    30, 0 },
                   18905:   {  'z',  0, 4, etDYNSTRING,  0,  0 },
                   18906:   {  'q',  0, 4, etSQLESCAPE,  0,  0 },
                   18907:   {  'Q',  0, 4, etSQLESCAPE2, 0,  0 },
                   18908:   {  'w',  0, 4, etSQLESCAPE3, 0,  0 },
                   18909:   {  'c',  0, 0, etCHARX,      0,  0 },
                   18910:   {  'o',  8, 0, etRADIX,      0,  2 },
                   18911:   {  'u', 10, 0, etRADIX,      0,  0 },
                   18912:   {  'x', 16, 0, etRADIX,      16, 1 },
                   18913:   {  'X', 16, 0, etRADIX,      0,  4 },
                   18914: #ifndef SQLITE_OMIT_FLOATING_POINT
                   18915:   {  'f',  0, 1, etFLOAT,      0,  0 },
                   18916:   {  'e',  0, 1, etEXP,        30, 0 },
                   18917:   {  'E',  0, 1, etEXP,        14, 0 },
                   18918:   {  'G',  0, 1, etGENERIC,    14, 0 },
                   18919: #endif
                   18920:   {  'i', 10, 1, etRADIX,      0,  0 },
                   18921:   {  'n',  0, 0, etSIZE,       0,  0 },
                   18922:   {  '%',  0, 0, etPERCENT,    0,  0 },
                   18923:   {  'p', 16, 0, etPOINTER,    0,  1 },
                   18924: 
                   18925: /* All the rest have the FLAG_INTERN bit set and are thus for internal
                   18926: ** use only */
                   18927:   {  'T',  0, 2, etTOKEN,      0,  0 },
                   18928:   {  'S',  0, 2, etSRCLIST,    0,  0 },
                   18929:   {  'r', 10, 3, etORDINAL,    0,  0 },
                   18930: };
                   18931: 
                   18932: /*
                   18933: ** If SQLITE_OMIT_FLOATING_POINT is defined, then none of the floating point
                   18934: ** conversions will work.
                   18935: */
                   18936: #ifndef SQLITE_OMIT_FLOATING_POINT
                   18937: /*
                   18938: ** "*val" is a double such that 0.1 <= *val < 10.0
                   18939: ** Return the ascii code for the leading digit of *val, then
                   18940: ** multiply "*val" by 10.0 to renormalize.
                   18941: **
                   18942: ** Example:
                   18943: **     input:     *val = 3.14159
                   18944: **     output:    *val = 1.4159    function return = '3'
                   18945: **
                   18946: ** The counter *cnt is incremented each time.  After counter exceeds
                   18947: ** 16 (the number of significant digits in a 64-bit float) '0' is
                   18948: ** always returned.
                   18949: */
                   18950: static char et_getdigit(LONGDOUBLE_TYPE *val, int *cnt){
                   18951:   int digit;
                   18952:   LONGDOUBLE_TYPE d;
                   18953:   if( (*cnt)++ >= 16 ) return '0';
                   18954:   digit = (int)*val;
                   18955:   d = digit;
                   18956:   digit += '0';
                   18957:   *val = (*val - d)*10.0;
                   18958:   return (char)digit;
                   18959: }
                   18960: #endif /* SQLITE_OMIT_FLOATING_POINT */
                   18961: 
                   18962: /*
                   18963: ** Append N space characters to the given string buffer.
                   18964: */
                   18965: static void appendSpace(StrAccum *pAccum, int N){
                   18966:   static const char zSpaces[] = "                             ";
                   18967:   while( N>=(int)sizeof(zSpaces)-1 ){
                   18968:     sqlite3StrAccumAppend(pAccum, zSpaces, sizeof(zSpaces)-1);
                   18969:     N -= sizeof(zSpaces)-1;
                   18970:   }
                   18971:   if( N>0 ){
                   18972:     sqlite3StrAccumAppend(pAccum, zSpaces, N);
                   18973:   }
                   18974: }
                   18975: 
                   18976: /*
                   18977: ** On machines with a small stack size, you can redefine the
                   18978: ** SQLITE_PRINT_BUF_SIZE to be less than 350.
                   18979: */
                   18980: #ifndef SQLITE_PRINT_BUF_SIZE
                   18981: # if defined(SQLITE_SMALL_STACK)
                   18982: #   define SQLITE_PRINT_BUF_SIZE 50
                   18983: # else
                   18984: #   define SQLITE_PRINT_BUF_SIZE 350
                   18985: # endif
                   18986: #endif
                   18987: #define etBUFSIZE SQLITE_PRINT_BUF_SIZE  /* Size of the output buffer */
                   18988: 
                   18989: /*
                   18990: ** The root program.  All variations call this core.
                   18991: **
                   18992: ** INPUTS:
                   18993: **   func   This is a pointer to a function taking three arguments
                   18994: **            1. A pointer to anything.  Same as the "arg" parameter.
                   18995: **            2. A pointer to the list of characters to be output
                   18996: **               (Note, this list is NOT null terminated.)
                   18997: **            3. An integer number of characters to be output.
                   18998: **               (Note: This number might be zero.)
                   18999: **
                   19000: **   arg    This is the pointer to anything which will be passed as the
                   19001: **          first argument to "func".  Use it for whatever you like.
                   19002: **
                   19003: **   fmt    This is the format string, as in the usual print.
                   19004: **
                   19005: **   ap     This is a pointer to a list of arguments.  Same as in
                   19006: **          vfprint.
                   19007: **
                   19008: ** OUTPUTS:
                   19009: **          The return value is the total number of characters sent to
                   19010: **          the function "func".  Returns -1 on a error.
                   19011: **
                   19012: ** Note that the order in which automatic variables are declared below
                   19013: ** seems to make a big difference in determining how fast this beast
                   19014: ** will run.
                   19015: */
                   19016: SQLITE_PRIVATE void sqlite3VXPrintf(
                   19017:   StrAccum *pAccum,                  /* Accumulate results here */
                   19018:   int useExtended,                   /* Allow extended %-conversions */
                   19019:   const char *fmt,                   /* Format string */
                   19020:   va_list ap                         /* arguments */
                   19021: ){
                   19022:   int c;                     /* Next character in the format string */
                   19023:   char *bufpt;               /* Pointer to the conversion buffer */
                   19024:   int precision;             /* Precision of the current field */
                   19025:   int length;                /* Length of the field */
                   19026:   int idx;                   /* A general purpose loop counter */
                   19027:   int width;                 /* Width of the current field */
                   19028:   etByte flag_leftjustify;   /* True if "-" flag is present */
                   19029:   etByte flag_plussign;      /* True if "+" flag is present */
                   19030:   etByte flag_blanksign;     /* True if " " flag is present */
                   19031:   etByte flag_alternateform; /* True if "#" flag is present */
                   19032:   etByte flag_altform2;      /* True if "!" flag is present */
                   19033:   etByte flag_zeropad;       /* True if field width constant starts with zero */
                   19034:   etByte flag_long;          /* True if "l" flag is present */
                   19035:   etByte flag_longlong;      /* True if the "ll" flag is present */
                   19036:   etByte done;               /* Loop termination flag */
                   19037:   sqlite_uint64 longvalue;   /* Value for integer types */
                   19038:   LONGDOUBLE_TYPE realvalue; /* Value for real types */
                   19039:   const et_info *infop;      /* Pointer to the appropriate info structure */
                   19040:   char buf[etBUFSIZE];       /* Conversion buffer */
                   19041:   char prefix;               /* Prefix character.  "+" or "-" or " " or '\0'. */
                   19042:   etByte xtype = 0;          /* Conversion paradigm */
                   19043:   char *zExtra;              /* Extra memory used for etTCLESCAPE conversions */
                   19044: #ifndef SQLITE_OMIT_FLOATING_POINT
                   19045:   int  exp, e2;              /* exponent of real numbers */
                   19046:   double rounder;            /* Used for rounding floating point values */
                   19047:   etByte flag_dp;            /* True if decimal point should be shown */
                   19048:   etByte flag_rtz;           /* True if trailing zeros should be removed */
                   19049:   etByte flag_exp;           /* True to force display of the exponent */
                   19050:   int nsd;                   /* Number of significant digits returned */
                   19051: #endif
                   19052: 
                   19053:   length = 0;
                   19054:   bufpt = 0;
                   19055:   for(; (c=(*fmt))!=0; ++fmt){
                   19056:     if( c!='%' ){
                   19057:       int amt;
                   19058:       bufpt = (char *)fmt;
                   19059:       amt = 1;
                   19060:       while( (c=(*++fmt))!='%' && c!=0 ) amt++;
                   19061:       sqlite3StrAccumAppend(pAccum, bufpt, amt);
                   19062:       if( c==0 ) break;
                   19063:     }
                   19064:     if( (c=(*++fmt))==0 ){
                   19065:       sqlite3StrAccumAppend(pAccum, "%", 1);
                   19066:       break;
                   19067:     }
                   19068:     /* Find out what flags are present */
                   19069:     flag_leftjustify = flag_plussign = flag_blanksign = 
                   19070:      flag_alternateform = flag_altform2 = flag_zeropad = 0;
                   19071:     done = 0;
                   19072:     do{
                   19073:       switch( c ){
                   19074:         case '-':   flag_leftjustify = 1;     break;
                   19075:         case '+':   flag_plussign = 1;        break;
                   19076:         case ' ':   flag_blanksign = 1;       break;
                   19077:         case '#':   flag_alternateform = 1;   break;
                   19078:         case '!':   flag_altform2 = 1;        break;
                   19079:         case '0':   flag_zeropad = 1;         break;
                   19080:         default:    done = 1;                 break;
                   19081:       }
                   19082:     }while( !done && (c=(*++fmt))!=0 );
                   19083:     /* Get the field width */
                   19084:     width = 0;
                   19085:     if( c=='*' ){
                   19086:       width = va_arg(ap,int);
                   19087:       if( width<0 ){
                   19088:         flag_leftjustify = 1;
                   19089:         width = -width;
                   19090:       }
                   19091:       c = *++fmt;
                   19092:     }else{
                   19093:       while( c>='0' && c<='9' ){
                   19094:         width = width*10 + c - '0';
                   19095:         c = *++fmt;
                   19096:       }
                   19097:     }
                   19098:     if( width > etBUFSIZE-10 ){
                   19099:       width = etBUFSIZE-10;
                   19100:     }
                   19101:     /* Get the precision */
                   19102:     if( c=='.' ){
                   19103:       precision = 0;
                   19104:       c = *++fmt;
                   19105:       if( c=='*' ){
                   19106:         precision = va_arg(ap,int);
                   19107:         if( precision<0 ) precision = -precision;
                   19108:         c = *++fmt;
                   19109:       }else{
                   19110:         while( c>='0' && c<='9' ){
                   19111:           precision = precision*10 + c - '0';
                   19112:           c = *++fmt;
                   19113:         }
                   19114:       }
                   19115:     }else{
                   19116:       precision = -1;
                   19117:     }
                   19118:     /* Get the conversion type modifier */
                   19119:     if( c=='l' ){
                   19120:       flag_long = 1;
                   19121:       c = *++fmt;
                   19122:       if( c=='l' ){
                   19123:         flag_longlong = 1;
                   19124:         c = *++fmt;
                   19125:       }else{
                   19126:         flag_longlong = 0;
                   19127:       }
                   19128:     }else{
                   19129:       flag_long = flag_longlong = 0;
                   19130:     }
                   19131:     /* Fetch the info entry for the field */
                   19132:     infop = &fmtinfo[0];
                   19133:     xtype = etINVALID;
                   19134:     for(idx=0; idx<ArraySize(fmtinfo); idx++){
                   19135:       if( c==fmtinfo[idx].fmttype ){
                   19136:         infop = &fmtinfo[idx];
                   19137:         if( useExtended || (infop->flags & FLAG_INTERN)==0 ){
                   19138:           xtype = infop->type;
                   19139:         }else{
                   19140:           return;
                   19141:         }
                   19142:         break;
                   19143:       }
                   19144:     }
                   19145:     zExtra = 0;
                   19146: 
                   19147: 
                   19148:     /* Limit the precision to prevent overflowing buf[] during conversion */
                   19149:     if( precision>etBUFSIZE-40 && (infop->flags & FLAG_STRING)==0 ){
                   19150:       precision = etBUFSIZE-40;
                   19151:     }
                   19152: 
                   19153:     /*
                   19154:     ** At this point, variables are initialized as follows:
                   19155:     **
                   19156:     **   flag_alternateform          TRUE if a '#' is present.
                   19157:     **   flag_altform2               TRUE if a '!' is present.
                   19158:     **   flag_plussign               TRUE if a '+' is present.
                   19159:     **   flag_leftjustify            TRUE if a '-' is present or if the
                   19160:     **                               field width was negative.
                   19161:     **   flag_zeropad                TRUE if the width began with 0.
                   19162:     **   flag_long                   TRUE if the letter 'l' (ell) prefixed
                   19163:     **                               the conversion character.
                   19164:     **   flag_longlong               TRUE if the letter 'll' (ell ell) prefixed
                   19165:     **                               the conversion character.
                   19166:     **   flag_blanksign              TRUE if a ' ' is present.
                   19167:     **   width                       The specified field width.  This is
                   19168:     **                               always non-negative.  Zero is the default.
                   19169:     **   precision                   The specified precision.  The default
                   19170:     **                               is -1.
                   19171:     **   xtype                       The class of the conversion.
                   19172:     **   infop                       Pointer to the appropriate info struct.
                   19173:     */
                   19174:     switch( xtype ){
                   19175:       case etPOINTER:
                   19176:         flag_longlong = sizeof(char*)==sizeof(i64);
                   19177:         flag_long = sizeof(char*)==sizeof(long int);
                   19178:         /* Fall through into the next case */
                   19179:       case etORDINAL:
                   19180:       case etRADIX:
                   19181:         if( infop->flags & FLAG_SIGNED ){
                   19182:           i64 v;
                   19183:           if( flag_longlong ){
                   19184:             v = va_arg(ap,i64);
                   19185:           }else if( flag_long ){
                   19186:             v = va_arg(ap,long int);
                   19187:           }else{
                   19188:             v = va_arg(ap,int);
                   19189:           }
                   19190:           if( v<0 ){
                   19191:             if( v==SMALLEST_INT64 ){
                   19192:               longvalue = ((u64)1)<<63;
                   19193:             }else{
                   19194:               longvalue = -v;
                   19195:             }
                   19196:             prefix = '-';
                   19197:           }else{
                   19198:             longvalue = v;
                   19199:             if( flag_plussign )        prefix = '+';
                   19200:             else if( flag_blanksign )  prefix = ' ';
                   19201:             else                       prefix = 0;
                   19202:           }
                   19203:         }else{
                   19204:           if( flag_longlong ){
                   19205:             longvalue = va_arg(ap,u64);
                   19206:           }else if( flag_long ){
                   19207:             longvalue = va_arg(ap,unsigned long int);
                   19208:           }else{
                   19209:             longvalue = va_arg(ap,unsigned int);
                   19210:           }
                   19211:           prefix = 0;
                   19212:         }
                   19213:         if( longvalue==0 ) flag_alternateform = 0;
                   19214:         if( flag_zeropad && precision<width-(prefix!=0) ){
                   19215:           precision = width-(prefix!=0);
                   19216:         }
                   19217:         bufpt = &buf[etBUFSIZE-1];
                   19218:         if( xtype==etORDINAL ){
                   19219:           static const char zOrd[] = "thstndrd";
                   19220:           int x = (int)(longvalue % 10);
                   19221:           if( x>=4 || (longvalue/10)%10==1 ){
                   19222:             x = 0;
                   19223:           }
                   19224:           buf[etBUFSIZE-3] = zOrd[x*2];
                   19225:           buf[etBUFSIZE-2] = zOrd[x*2+1];
                   19226:           bufpt -= 2;
                   19227:         }
                   19228:         {
                   19229:           register const char *cset;      /* Use registers for speed */
                   19230:           register int base;
                   19231:           cset = &aDigits[infop->charset];
                   19232:           base = infop->base;
                   19233:           do{                                           /* Convert to ascii */
                   19234:             *(--bufpt) = cset[longvalue%base];
                   19235:             longvalue = longvalue/base;
                   19236:           }while( longvalue>0 );
                   19237:         }
                   19238:         length = (int)(&buf[etBUFSIZE-1]-bufpt);
                   19239:         for(idx=precision-length; idx>0; idx--){
                   19240:           *(--bufpt) = '0';                             /* Zero pad */
                   19241:         }
                   19242:         if( prefix ) *(--bufpt) = prefix;               /* Add sign */
                   19243:         if( flag_alternateform && infop->prefix ){      /* Add "0" or "0x" */
                   19244:           const char *pre;
                   19245:           char x;
                   19246:           pre = &aPrefix[infop->prefix];
                   19247:           for(; (x=(*pre))!=0; pre++) *(--bufpt) = x;
                   19248:         }
                   19249:         length = (int)(&buf[etBUFSIZE-1]-bufpt);
                   19250:         break;
                   19251:       case etFLOAT:
                   19252:       case etEXP:
                   19253:       case etGENERIC:
                   19254:         realvalue = va_arg(ap,double);
                   19255: #ifdef SQLITE_OMIT_FLOATING_POINT
                   19256:         length = 0;
                   19257: #else
                   19258:         if( precision<0 ) precision = 6;         /* Set default precision */
                   19259:         if( precision>etBUFSIZE/2-10 ) precision = etBUFSIZE/2-10;
                   19260:         if( realvalue<0.0 ){
                   19261:           realvalue = -realvalue;
                   19262:           prefix = '-';
                   19263:         }else{
                   19264:           if( flag_plussign )          prefix = '+';
                   19265:           else if( flag_blanksign )    prefix = ' ';
                   19266:           else                         prefix = 0;
                   19267:         }
                   19268:         if( xtype==etGENERIC && precision>0 ) precision--;
                   19269: #if 0
1.1.1.3 ! misho    19270:         /* Rounding works like BSD when the constant 0.4999 is used.  Weird! */
1.1       misho    19271:         for(idx=precision, rounder=0.4999; idx>0; idx--, rounder*=0.1);
                   19272: #else
                   19273:         /* It makes more sense to use 0.5 */
                   19274:         for(idx=precision, rounder=0.5; idx>0; idx--, rounder*=0.1){}
                   19275: #endif
                   19276:         if( xtype==etFLOAT ) realvalue += rounder;
                   19277:         /* Normalize realvalue to within 10.0 > realvalue >= 1.0 */
                   19278:         exp = 0;
                   19279:         if( sqlite3IsNaN((double)realvalue) ){
                   19280:           bufpt = "NaN";
                   19281:           length = 3;
                   19282:           break;
                   19283:         }
                   19284:         if( realvalue>0.0 ){
                   19285:           while( realvalue>=1e32 && exp<=350 ){ realvalue *= 1e-32; exp+=32; }
                   19286:           while( realvalue>=1e8 && exp<=350 ){ realvalue *= 1e-8; exp+=8; }
                   19287:           while( realvalue>=10.0 && exp<=350 ){ realvalue *= 0.1; exp++; }
                   19288:           while( realvalue<1e-8 ){ realvalue *= 1e8; exp-=8; }
                   19289:           while( realvalue<1.0 ){ realvalue *= 10.0; exp--; }
                   19290:           if( exp>350 ){
                   19291:             if( prefix=='-' ){
                   19292:               bufpt = "-Inf";
                   19293:             }else if( prefix=='+' ){
                   19294:               bufpt = "+Inf";
                   19295:             }else{
                   19296:               bufpt = "Inf";
                   19297:             }
                   19298:             length = sqlite3Strlen30(bufpt);
                   19299:             break;
                   19300:           }
                   19301:         }
                   19302:         bufpt = buf;
                   19303:         /*
                   19304:         ** If the field type is etGENERIC, then convert to either etEXP
                   19305:         ** or etFLOAT, as appropriate.
                   19306:         */
                   19307:         flag_exp = xtype==etEXP;
                   19308:         if( xtype!=etFLOAT ){
                   19309:           realvalue += rounder;
                   19310:           if( realvalue>=10.0 ){ realvalue *= 0.1; exp++; }
                   19311:         }
                   19312:         if( xtype==etGENERIC ){
                   19313:           flag_rtz = !flag_alternateform;
                   19314:           if( exp<-4 || exp>precision ){
                   19315:             xtype = etEXP;
                   19316:           }else{
                   19317:             precision = precision - exp;
                   19318:             xtype = etFLOAT;
                   19319:           }
                   19320:         }else{
                   19321:           flag_rtz = 0;
                   19322:         }
                   19323:         if( xtype==etEXP ){
                   19324:           e2 = 0;
                   19325:         }else{
                   19326:           e2 = exp;
                   19327:         }
                   19328:         nsd = 0;
                   19329:         flag_dp = (precision>0 ?1:0) | flag_alternateform | flag_altform2;
                   19330:         /* The sign in front of the number */
                   19331:         if( prefix ){
                   19332:           *(bufpt++) = prefix;
                   19333:         }
                   19334:         /* Digits prior to the decimal point */
                   19335:         if( e2<0 ){
                   19336:           *(bufpt++) = '0';
                   19337:         }else{
                   19338:           for(; e2>=0; e2--){
                   19339:             *(bufpt++) = et_getdigit(&realvalue,&nsd);
                   19340:           }
                   19341:         }
                   19342:         /* The decimal point */
                   19343:         if( flag_dp ){
                   19344:           *(bufpt++) = '.';
                   19345:         }
                   19346:         /* "0" digits after the decimal point but before the first
                   19347:         ** significant digit of the number */
                   19348:         for(e2++; e2<0; precision--, e2++){
                   19349:           assert( precision>0 );
                   19350:           *(bufpt++) = '0';
                   19351:         }
                   19352:         /* Significant digits after the decimal point */
                   19353:         while( (precision--)>0 ){
                   19354:           *(bufpt++) = et_getdigit(&realvalue,&nsd);
                   19355:         }
                   19356:         /* Remove trailing zeros and the "." if no digits follow the "." */
                   19357:         if( flag_rtz && flag_dp ){
                   19358:           while( bufpt[-1]=='0' ) *(--bufpt) = 0;
                   19359:           assert( bufpt>buf );
                   19360:           if( bufpt[-1]=='.' ){
                   19361:             if( flag_altform2 ){
                   19362:               *(bufpt++) = '0';
                   19363:             }else{
                   19364:               *(--bufpt) = 0;
                   19365:             }
                   19366:           }
                   19367:         }
                   19368:         /* Add the "eNNN" suffix */
                   19369:         if( flag_exp || xtype==etEXP ){
                   19370:           *(bufpt++) = aDigits[infop->charset];
                   19371:           if( exp<0 ){
                   19372:             *(bufpt++) = '-'; exp = -exp;
                   19373:           }else{
                   19374:             *(bufpt++) = '+';
                   19375:           }
                   19376:           if( exp>=100 ){
                   19377:             *(bufpt++) = (char)((exp/100)+'0');        /* 100's digit */
                   19378:             exp %= 100;
                   19379:           }
                   19380:           *(bufpt++) = (char)(exp/10+'0');             /* 10's digit */
                   19381:           *(bufpt++) = (char)(exp%10+'0');             /* 1's digit */
                   19382:         }
                   19383:         *bufpt = 0;
                   19384: 
                   19385:         /* The converted number is in buf[] and zero terminated. Output it.
                   19386:         ** Note that the number is in the usual order, not reversed as with
                   19387:         ** integer conversions. */
                   19388:         length = (int)(bufpt-buf);
                   19389:         bufpt = buf;
                   19390: 
                   19391:         /* Special case:  Add leading zeros if the flag_zeropad flag is
                   19392:         ** set and we are not left justified */
                   19393:         if( flag_zeropad && !flag_leftjustify && length < width){
                   19394:           int i;
                   19395:           int nPad = width - length;
                   19396:           for(i=width; i>=nPad; i--){
                   19397:             bufpt[i] = bufpt[i-nPad];
                   19398:           }
                   19399:           i = prefix!=0;
                   19400:           while( nPad-- ) bufpt[i++] = '0';
                   19401:           length = width;
                   19402:         }
                   19403: #endif /* !defined(SQLITE_OMIT_FLOATING_POINT) */
                   19404:         break;
                   19405:       case etSIZE:
                   19406:         *(va_arg(ap,int*)) = pAccum->nChar;
                   19407:         length = width = 0;
                   19408:         break;
                   19409:       case etPERCENT:
                   19410:         buf[0] = '%';
                   19411:         bufpt = buf;
                   19412:         length = 1;
                   19413:         break;
                   19414:       case etCHARX:
                   19415:         c = va_arg(ap,int);
                   19416:         buf[0] = (char)c;
                   19417:         if( precision>=0 ){
                   19418:           for(idx=1; idx<precision; idx++) buf[idx] = (char)c;
                   19419:           length = precision;
                   19420:         }else{
                   19421:           length =1;
                   19422:         }
                   19423:         bufpt = buf;
                   19424:         break;
                   19425:       case etSTRING:
                   19426:       case etDYNSTRING:
                   19427:         bufpt = va_arg(ap,char*);
                   19428:         if( bufpt==0 ){
                   19429:           bufpt = "";
                   19430:         }else if( xtype==etDYNSTRING ){
                   19431:           zExtra = bufpt;
                   19432:         }
                   19433:         if( precision>=0 ){
                   19434:           for(length=0; length<precision && bufpt[length]; length++){}
                   19435:         }else{
                   19436:           length = sqlite3Strlen30(bufpt);
                   19437:         }
                   19438:         break;
                   19439:       case etSQLESCAPE:
                   19440:       case etSQLESCAPE2:
                   19441:       case etSQLESCAPE3: {
                   19442:         int i, j, k, n, isnull;
                   19443:         int needQuote;
                   19444:         char ch;
                   19445:         char q = ((xtype==etSQLESCAPE3)?'"':'\'');   /* Quote character */
                   19446:         char *escarg = va_arg(ap,char*);
                   19447:         isnull = escarg==0;
                   19448:         if( isnull ) escarg = (xtype==etSQLESCAPE2 ? "NULL" : "(NULL)");
                   19449:         k = precision;
                   19450:         for(i=n=0; k!=0 && (ch=escarg[i])!=0; i++, k--){
                   19451:           if( ch==q )  n++;
                   19452:         }
                   19453:         needQuote = !isnull && xtype==etSQLESCAPE2;
                   19454:         n += i + 1 + needQuote*2;
                   19455:         if( n>etBUFSIZE ){
                   19456:           bufpt = zExtra = sqlite3Malloc( n );
                   19457:           if( bufpt==0 ){
                   19458:             pAccum->mallocFailed = 1;
                   19459:             return;
                   19460:           }
                   19461:         }else{
                   19462:           bufpt = buf;
                   19463:         }
                   19464:         j = 0;
                   19465:         if( needQuote ) bufpt[j++] = q;
                   19466:         k = i;
                   19467:         for(i=0; i<k; i++){
                   19468:           bufpt[j++] = ch = escarg[i];
                   19469:           if( ch==q ) bufpt[j++] = ch;
                   19470:         }
                   19471:         if( needQuote ) bufpt[j++] = q;
                   19472:         bufpt[j] = 0;
                   19473:         length = j;
                   19474:         /* The precision in %q and %Q means how many input characters to
                   19475:         ** consume, not the length of the output...
                   19476:         ** if( precision>=0 && precision<length ) length = precision; */
                   19477:         break;
                   19478:       }
                   19479:       case etTOKEN: {
                   19480:         Token *pToken = va_arg(ap, Token*);
                   19481:         if( pToken ){
                   19482:           sqlite3StrAccumAppend(pAccum, (const char*)pToken->z, pToken->n);
                   19483:         }
                   19484:         length = width = 0;
                   19485:         break;
                   19486:       }
                   19487:       case etSRCLIST: {
                   19488:         SrcList *pSrc = va_arg(ap, SrcList*);
                   19489:         int k = va_arg(ap, int);
                   19490:         struct SrcList_item *pItem = &pSrc->a[k];
                   19491:         assert( k>=0 && k<pSrc->nSrc );
                   19492:         if( pItem->zDatabase ){
                   19493:           sqlite3StrAccumAppend(pAccum, pItem->zDatabase, -1);
                   19494:           sqlite3StrAccumAppend(pAccum, ".", 1);
                   19495:         }
                   19496:         sqlite3StrAccumAppend(pAccum, pItem->zName, -1);
                   19497:         length = width = 0;
                   19498:         break;
                   19499:       }
                   19500:       default: {
                   19501:         assert( xtype==etINVALID );
                   19502:         return;
                   19503:       }
                   19504:     }/* End switch over the format type */
                   19505:     /*
                   19506:     ** The text of the conversion is pointed to by "bufpt" and is
                   19507:     ** "length" characters long.  The field width is "width".  Do
                   19508:     ** the output.
                   19509:     */
                   19510:     if( !flag_leftjustify ){
                   19511:       register int nspace;
                   19512:       nspace = width-length;
                   19513:       if( nspace>0 ){
                   19514:         appendSpace(pAccum, nspace);
                   19515:       }
                   19516:     }
                   19517:     if( length>0 ){
                   19518:       sqlite3StrAccumAppend(pAccum, bufpt, length);
                   19519:     }
                   19520:     if( flag_leftjustify ){
                   19521:       register int nspace;
                   19522:       nspace = width-length;
                   19523:       if( nspace>0 ){
                   19524:         appendSpace(pAccum, nspace);
                   19525:       }
                   19526:     }
                   19527:     if( zExtra ){
                   19528:       sqlite3_free(zExtra);
                   19529:     }
                   19530:   }/* End for loop over the format string */
                   19531: } /* End of function */
                   19532: 
                   19533: /*
                   19534: ** Append N bytes of text from z to the StrAccum object.
                   19535: */
                   19536: SQLITE_PRIVATE void sqlite3StrAccumAppend(StrAccum *p, const char *z, int N){
                   19537:   assert( z!=0 || N==0 );
                   19538:   if( p->tooBig | p->mallocFailed ){
                   19539:     testcase(p->tooBig);
                   19540:     testcase(p->mallocFailed);
                   19541:     return;
                   19542:   }
                   19543:   if( N<0 ){
                   19544:     N = sqlite3Strlen30(z);
                   19545:   }
                   19546:   if( N==0 || NEVER(z==0) ){
                   19547:     return;
                   19548:   }
                   19549:   if( p->nChar+N >= p->nAlloc ){
                   19550:     char *zNew;
                   19551:     if( !p->useMalloc ){
                   19552:       p->tooBig = 1;
                   19553:       N = p->nAlloc - p->nChar - 1;
                   19554:       if( N<=0 ){
                   19555:         return;
                   19556:       }
                   19557:     }else{
                   19558:       char *zOld = (p->zText==p->zBase ? 0 : p->zText);
                   19559:       i64 szNew = p->nChar;
                   19560:       szNew += N + 1;
                   19561:       if( szNew > p->mxAlloc ){
                   19562:         sqlite3StrAccumReset(p);
                   19563:         p->tooBig = 1;
                   19564:         return;
                   19565:       }else{
                   19566:         p->nAlloc = (int)szNew;
                   19567:       }
                   19568:       if( p->useMalloc==1 ){
                   19569:         zNew = sqlite3DbRealloc(p->db, zOld, p->nAlloc);
                   19570:       }else{
                   19571:         zNew = sqlite3_realloc(zOld, p->nAlloc);
                   19572:       }
                   19573:       if( zNew ){
                   19574:         if( zOld==0 ) memcpy(zNew, p->zText, p->nChar);
                   19575:         p->zText = zNew;
                   19576:       }else{
                   19577:         p->mallocFailed = 1;
                   19578:         sqlite3StrAccumReset(p);
                   19579:         return;
                   19580:       }
                   19581:     }
                   19582:   }
                   19583:   memcpy(&p->zText[p->nChar], z, N);
                   19584:   p->nChar += N;
                   19585: }
                   19586: 
                   19587: /*
                   19588: ** Finish off a string by making sure it is zero-terminated.
                   19589: ** Return a pointer to the resulting string.  Return a NULL
                   19590: ** pointer if any kind of error was encountered.
                   19591: */
                   19592: SQLITE_PRIVATE char *sqlite3StrAccumFinish(StrAccum *p){
                   19593:   if( p->zText ){
                   19594:     p->zText[p->nChar] = 0;
                   19595:     if( p->useMalloc && p->zText==p->zBase ){
                   19596:       if( p->useMalloc==1 ){
                   19597:         p->zText = sqlite3DbMallocRaw(p->db, p->nChar+1 );
                   19598:       }else{
                   19599:         p->zText = sqlite3_malloc(p->nChar+1);
                   19600:       }
                   19601:       if( p->zText ){
                   19602:         memcpy(p->zText, p->zBase, p->nChar+1);
                   19603:       }else{
                   19604:         p->mallocFailed = 1;
                   19605:       }
                   19606:     }
                   19607:   }
                   19608:   return p->zText;
                   19609: }
                   19610: 
                   19611: /*
                   19612: ** Reset an StrAccum string.  Reclaim all malloced memory.
                   19613: */
                   19614: SQLITE_PRIVATE void sqlite3StrAccumReset(StrAccum *p){
                   19615:   if( p->zText!=p->zBase ){
                   19616:     if( p->useMalloc==1 ){
                   19617:       sqlite3DbFree(p->db, p->zText);
                   19618:     }else{
                   19619:       sqlite3_free(p->zText);
                   19620:     }
                   19621:   }
                   19622:   p->zText = 0;
                   19623: }
                   19624: 
                   19625: /*
                   19626: ** Initialize a string accumulator
                   19627: */
                   19628: SQLITE_PRIVATE void sqlite3StrAccumInit(StrAccum *p, char *zBase, int n, int mx){
                   19629:   p->zText = p->zBase = zBase;
                   19630:   p->db = 0;
                   19631:   p->nChar = 0;
                   19632:   p->nAlloc = n;
                   19633:   p->mxAlloc = mx;
                   19634:   p->useMalloc = 1;
                   19635:   p->tooBig = 0;
                   19636:   p->mallocFailed = 0;
                   19637: }
                   19638: 
                   19639: /*
                   19640: ** Print into memory obtained from sqliteMalloc().  Use the internal
                   19641: ** %-conversion extensions.
                   19642: */
                   19643: SQLITE_PRIVATE char *sqlite3VMPrintf(sqlite3 *db, const char *zFormat, va_list ap){
                   19644:   char *z;
                   19645:   char zBase[SQLITE_PRINT_BUF_SIZE];
                   19646:   StrAccum acc;
                   19647:   assert( db!=0 );
                   19648:   sqlite3StrAccumInit(&acc, zBase, sizeof(zBase),
                   19649:                       db->aLimit[SQLITE_LIMIT_LENGTH]);
                   19650:   acc.db = db;
                   19651:   sqlite3VXPrintf(&acc, 1, zFormat, ap);
                   19652:   z = sqlite3StrAccumFinish(&acc);
                   19653:   if( acc.mallocFailed ){
                   19654:     db->mallocFailed = 1;
                   19655:   }
                   19656:   return z;
                   19657: }
                   19658: 
                   19659: /*
                   19660: ** Print into memory obtained from sqliteMalloc().  Use the internal
                   19661: ** %-conversion extensions.
                   19662: */
                   19663: SQLITE_PRIVATE char *sqlite3MPrintf(sqlite3 *db, const char *zFormat, ...){
                   19664:   va_list ap;
                   19665:   char *z;
                   19666:   va_start(ap, zFormat);
                   19667:   z = sqlite3VMPrintf(db, zFormat, ap);
                   19668:   va_end(ap);
                   19669:   return z;
                   19670: }
                   19671: 
                   19672: /*
                   19673: ** Like sqlite3MPrintf(), but call sqlite3DbFree() on zStr after formatting
                   19674: ** the string and before returnning.  This routine is intended to be used
                   19675: ** to modify an existing string.  For example:
                   19676: **
                   19677: **       x = sqlite3MPrintf(db, x, "prefix %s suffix", x);
                   19678: **
                   19679: */
                   19680: SQLITE_PRIVATE char *sqlite3MAppendf(sqlite3 *db, char *zStr, const char *zFormat, ...){
                   19681:   va_list ap;
                   19682:   char *z;
                   19683:   va_start(ap, zFormat);
                   19684:   z = sqlite3VMPrintf(db, zFormat, ap);
                   19685:   va_end(ap);
                   19686:   sqlite3DbFree(db, zStr);
                   19687:   return z;
                   19688: }
                   19689: 
                   19690: /*
                   19691: ** Print into memory obtained from sqlite3_malloc().  Omit the internal
                   19692: ** %-conversion extensions.
                   19693: */
                   19694: SQLITE_API char *sqlite3_vmprintf(const char *zFormat, va_list ap){
                   19695:   char *z;
                   19696:   char zBase[SQLITE_PRINT_BUF_SIZE];
                   19697:   StrAccum acc;
                   19698: #ifndef SQLITE_OMIT_AUTOINIT
                   19699:   if( sqlite3_initialize() ) return 0;
                   19700: #endif
                   19701:   sqlite3StrAccumInit(&acc, zBase, sizeof(zBase), SQLITE_MAX_LENGTH);
                   19702:   acc.useMalloc = 2;
                   19703:   sqlite3VXPrintf(&acc, 0, zFormat, ap);
                   19704:   z = sqlite3StrAccumFinish(&acc);
                   19705:   return z;
                   19706: }
                   19707: 
                   19708: /*
                   19709: ** Print into memory obtained from sqlite3_malloc()().  Omit the internal
                   19710: ** %-conversion extensions.
                   19711: */
                   19712: SQLITE_API char *sqlite3_mprintf(const char *zFormat, ...){
                   19713:   va_list ap;
                   19714:   char *z;
                   19715: #ifndef SQLITE_OMIT_AUTOINIT
                   19716:   if( sqlite3_initialize() ) return 0;
                   19717: #endif
                   19718:   va_start(ap, zFormat);
                   19719:   z = sqlite3_vmprintf(zFormat, ap);
                   19720:   va_end(ap);
                   19721:   return z;
                   19722: }
                   19723: 
                   19724: /*
                   19725: ** sqlite3_snprintf() works like snprintf() except that it ignores the
                   19726: ** current locale settings.  This is important for SQLite because we
                   19727: ** are not able to use a "," as the decimal point in place of "." as
                   19728: ** specified by some locales.
                   19729: **
                   19730: ** Oops:  The first two arguments of sqlite3_snprintf() are backwards
                   19731: ** from the snprintf() standard.  Unfortunately, it is too late to change
                   19732: ** this without breaking compatibility, so we just have to live with the
                   19733: ** mistake.
                   19734: **
                   19735: ** sqlite3_vsnprintf() is the varargs version.
                   19736: */
                   19737: SQLITE_API char *sqlite3_vsnprintf(int n, char *zBuf, const char *zFormat, va_list ap){
                   19738:   StrAccum acc;
                   19739:   if( n<=0 ) return zBuf;
                   19740:   sqlite3StrAccumInit(&acc, zBuf, n, 0);
                   19741:   acc.useMalloc = 0;
                   19742:   sqlite3VXPrintf(&acc, 0, zFormat, ap);
                   19743:   return sqlite3StrAccumFinish(&acc);
                   19744: }
                   19745: SQLITE_API char *sqlite3_snprintf(int n, char *zBuf, const char *zFormat, ...){
                   19746:   char *z;
                   19747:   va_list ap;
                   19748:   va_start(ap,zFormat);
                   19749:   z = sqlite3_vsnprintf(n, zBuf, zFormat, ap);
                   19750:   va_end(ap);
                   19751:   return z;
                   19752: }
                   19753: 
                   19754: /*
                   19755: ** This is the routine that actually formats the sqlite3_log() message.
                   19756: ** We house it in a separate routine from sqlite3_log() to avoid using
                   19757: ** stack space on small-stack systems when logging is disabled.
                   19758: **
                   19759: ** sqlite3_log() must render into a static buffer.  It cannot dynamically
                   19760: ** allocate memory because it might be called while the memory allocator
                   19761: ** mutex is held.
                   19762: */
                   19763: static void renderLogMsg(int iErrCode, const char *zFormat, va_list ap){
                   19764:   StrAccum acc;                          /* String accumulator */
                   19765:   char zMsg[SQLITE_PRINT_BUF_SIZE*3];    /* Complete log message */
                   19766: 
                   19767:   sqlite3StrAccumInit(&acc, zMsg, sizeof(zMsg), 0);
                   19768:   acc.useMalloc = 0;
                   19769:   sqlite3VXPrintf(&acc, 0, zFormat, ap);
                   19770:   sqlite3GlobalConfig.xLog(sqlite3GlobalConfig.pLogArg, iErrCode,
                   19771:                            sqlite3StrAccumFinish(&acc));
                   19772: }
                   19773: 
                   19774: /*
                   19775: ** Format and write a message to the log if logging is enabled.
                   19776: */
                   19777: SQLITE_API void sqlite3_log(int iErrCode, const char *zFormat, ...){
                   19778:   va_list ap;                             /* Vararg list */
                   19779:   if( sqlite3GlobalConfig.xLog ){
                   19780:     va_start(ap, zFormat);
                   19781:     renderLogMsg(iErrCode, zFormat, ap);
                   19782:     va_end(ap);
                   19783:   }
                   19784: }
                   19785: 
                   19786: #if defined(SQLITE_DEBUG)
                   19787: /*
                   19788: ** A version of printf() that understands %lld.  Used for debugging.
                   19789: ** The printf() built into some versions of windows does not understand %lld
                   19790: ** and segfaults if you give it a long long int.
                   19791: */
                   19792: SQLITE_PRIVATE void sqlite3DebugPrintf(const char *zFormat, ...){
                   19793:   va_list ap;
                   19794:   StrAccum acc;
                   19795:   char zBuf[500];
                   19796:   sqlite3StrAccumInit(&acc, zBuf, sizeof(zBuf), 0);
                   19797:   acc.useMalloc = 0;
                   19798:   va_start(ap,zFormat);
                   19799:   sqlite3VXPrintf(&acc, 0, zFormat, ap);
                   19800:   va_end(ap);
                   19801:   sqlite3StrAccumFinish(&acc);
                   19802:   fprintf(stdout,"%s", zBuf);
                   19803:   fflush(stdout);
                   19804: }
                   19805: #endif
                   19806: 
                   19807: #ifndef SQLITE_OMIT_TRACE
                   19808: /*
                   19809: ** variable-argument wrapper around sqlite3VXPrintf().
                   19810: */
                   19811: SQLITE_PRIVATE void sqlite3XPrintf(StrAccum *p, const char *zFormat, ...){
                   19812:   va_list ap;
                   19813:   va_start(ap,zFormat);
                   19814:   sqlite3VXPrintf(p, 1, zFormat, ap);
                   19815:   va_end(ap);
                   19816: }
                   19817: #endif
                   19818: 
                   19819: /************** End of printf.c **********************************************/
                   19820: /************** Begin file random.c ******************************************/
                   19821: /*
                   19822: ** 2001 September 15
                   19823: **
                   19824: ** The author disclaims copyright to this source code.  In place of
                   19825: ** a legal notice, here is a blessing:
                   19826: **
                   19827: **    May you do good and not evil.
                   19828: **    May you find forgiveness for yourself and forgive others.
                   19829: **    May you share freely, never taking more than you give.
                   19830: **
                   19831: *************************************************************************
                   19832: ** This file contains code to implement a pseudo-random number
                   19833: ** generator (PRNG) for SQLite.
                   19834: **
                   19835: ** Random numbers are used by some of the database backends in order
                   19836: ** to generate random integer keys for tables or random filenames.
                   19837: */
                   19838: 
                   19839: 
                   19840: /* All threads share a single random number generator.
                   19841: ** This structure is the current state of the generator.
                   19842: */
                   19843: static SQLITE_WSD struct sqlite3PrngType {
                   19844:   unsigned char isInit;          /* True if initialized */
                   19845:   unsigned char i, j;            /* State variables */
                   19846:   unsigned char s[256];          /* State variables */
                   19847: } sqlite3Prng;
                   19848: 
                   19849: /*
                   19850: ** Get a single 8-bit random value from the RC4 PRNG.  The Mutex
                   19851: ** must be held while executing this routine.
                   19852: **
                   19853: ** Why not just use a library random generator like lrand48() for this?
                   19854: ** Because the OP_NewRowid opcode in the VDBE depends on having a very
                   19855: ** good source of random numbers.  The lrand48() library function may
                   19856: ** well be good enough.  But maybe not.  Or maybe lrand48() has some
                   19857: ** subtle problems on some systems that could cause problems.  It is hard
                   19858: ** to know.  To minimize the risk of problems due to bad lrand48()
                   19859: ** implementations, SQLite uses this random number generator based
                   19860: ** on RC4, which we know works very well.
                   19861: **
                   19862: ** (Later):  Actually, OP_NewRowid does not depend on a good source of
                   19863: ** randomness any more.  But we will leave this code in all the same.
                   19864: */
                   19865: static u8 randomByte(void){
                   19866:   unsigned char t;
                   19867: 
                   19868: 
                   19869:   /* The "wsdPrng" macro will resolve to the pseudo-random number generator
                   19870:   ** state vector.  If writable static data is unsupported on the target,
                   19871:   ** we have to locate the state vector at run-time.  In the more common
                   19872:   ** case where writable static data is supported, wsdPrng can refer directly
                   19873:   ** to the "sqlite3Prng" state vector declared above.
                   19874:   */
                   19875: #ifdef SQLITE_OMIT_WSD
                   19876:   struct sqlite3PrngType *p = &GLOBAL(struct sqlite3PrngType, sqlite3Prng);
                   19877: # define wsdPrng p[0]
                   19878: #else
                   19879: # define wsdPrng sqlite3Prng
                   19880: #endif
                   19881: 
                   19882: 
                   19883:   /* Initialize the state of the random number generator once,
                   19884:   ** the first time this routine is called.  The seed value does
                   19885:   ** not need to contain a lot of randomness since we are not
                   19886:   ** trying to do secure encryption or anything like that...
                   19887:   **
                   19888:   ** Nothing in this file or anywhere else in SQLite does any kind of
                   19889:   ** encryption.  The RC4 algorithm is being used as a PRNG (pseudo-random
                   19890:   ** number generator) not as an encryption device.
                   19891:   */
                   19892:   if( !wsdPrng.isInit ){
                   19893:     int i;
                   19894:     char k[256];
                   19895:     wsdPrng.j = 0;
                   19896:     wsdPrng.i = 0;
                   19897:     sqlite3OsRandomness(sqlite3_vfs_find(0), 256, k);
                   19898:     for(i=0; i<256; i++){
                   19899:       wsdPrng.s[i] = (u8)i;
                   19900:     }
                   19901:     for(i=0; i<256; i++){
                   19902:       wsdPrng.j += wsdPrng.s[i] + k[i];
                   19903:       t = wsdPrng.s[wsdPrng.j];
                   19904:       wsdPrng.s[wsdPrng.j] = wsdPrng.s[i];
                   19905:       wsdPrng.s[i] = t;
                   19906:     }
                   19907:     wsdPrng.isInit = 1;
                   19908:   }
                   19909: 
                   19910:   /* Generate and return single random byte
                   19911:   */
                   19912:   wsdPrng.i++;
                   19913:   t = wsdPrng.s[wsdPrng.i];
                   19914:   wsdPrng.j += t;
                   19915:   wsdPrng.s[wsdPrng.i] = wsdPrng.s[wsdPrng.j];
                   19916:   wsdPrng.s[wsdPrng.j] = t;
                   19917:   t += wsdPrng.s[wsdPrng.i];
                   19918:   return wsdPrng.s[t];
                   19919: }
                   19920: 
                   19921: /*
                   19922: ** Return N random bytes.
                   19923: */
                   19924: SQLITE_API void sqlite3_randomness(int N, void *pBuf){
                   19925:   unsigned char *zBuf = pBuf;
                   19926: #if SQLITE_THREADSAFE
                   19927:   sqlite3_mutex *mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_PRNG);
                   19928: #endif
                   19929:   sqlite3_mutex_enter(mutex);
                   19930:   while( N-- ){
                   19931:     *(zBuf++) = randomByte();
                   19932:   }
                   19933:   sqlite3_mutex_leave(mutex);
                   19934: }
                   19935: 
                   19936: #ifndef SQLITE_OMIT_BUILTIN_TEST
                   19937: /*
                   19938: ** For testing purposes, we sometimes want to preserve the state of
                   19939: ** PRNG and restore the PRNG to its saved state at a later time, or
                   19940: ** to reset the PRNG to its initial state.  These routines accomplish
                   19941: ** those tasks.
                   19942: **
                   19943: ** The sqlite3_test_control() interface calls these routines to
                   19944: ** control the PRNG.
                   19945: */
                   19946: static SQLITE_WSD struct sqlite3PrngType sqlite3SavedPrng;
                   19947: SQLITE_PRIVATE void sqlite3PrngSaveState(void){
                   19948:   memcpy(
                   19949:     &GLOBAL(struct sqlite3PrngType, sqlite3SavedPrng),
                   19950:     &GLOBAL(struct sqlite3PrngType, sqlite3Prng),
                   19951:     sizeof(sqlite3Prng)
                   19952:   );
                   19953: }
                   19954: SQLITE_PRIVATE void sqlite3PrngRestoreState(void){
                   19955:   memcpy(
                   19956:     &GLOBAL(struct sqlite3PrngType, sqlite3Prng),
                   19957:     &GLOBAL(struct sqlite3PrngType, sqlite3SavedPrng),
                   19958:     sizeof(sqlite3Prng)
                   19959:   );
                   19960: }
                   19961: SQLITE_PRIVATE void sqlite3PrngResetState(void){
                   19962:   GLOBAL(struct sqlite3PrngType, sqlite3Prng).isInit = 0;
                   19963: }
                   19964: #endif /* SQLITE_OMIT_BUILTIN_TEST */
                   19965: 
                   19966: /************** End of random.c **********************************************/
                   19967: /************** Begin file utf.c *********************************************/
                   19968: /*
                   19969: ** 2004 April 13
                   19970: **
                   19971: ** The author disclaims copyright to this source code.  In place of
                   19972: ** a legal notice, here is a blessing:
                   19973: **
                   19974: **    May you do good and not evil.
                   19975: **    May you find forgiveness for yourself and forgive others.
                   19976: **    May you share freely, never taking more than you give.
                   19977: **
                   19978: *************************************************************************
                   19979: ** This file contains routines used to translate between UTF-8, 
                   19980: ** UTF-16, UTF-16BE, and UTF-16LE.
                   19981: **
                   19982: ** Notes on UTF-8:
                   19983: **
                   19984: **   Byte-0    Byte-1    Byte-2    Byte-3    Value
                   19985: **  0xxxxxxx                                 00000000 00000000 0xxxxxxx
                   19986: **  110yyyyy  10xxxxxx                       00000000 00000yyy yyxxxxxx
                   19987: **  1110zzzz  10yyyyyy  10xxxxxx             00000000 zzzzyyyy yyxxxxxx
                   19988: **  11110uuu  10uuzzzz  10yyyyyy  10xxxxxx   000uuuuu zzzzyyyy yyxxxxxx
                   19989: **
                   19990: **
                   19991: ** Notes on UTF-16:  (with wwww+1==uuuuu)
                   19992: **
                   19993: **      Word-0               Word-1          Value
                   19994: **  110110ww wwzzzzyy   110111yy yyxxxxxx    000uuuuu zzzzyyyy yyxxxxxx
                   19995: **  zzzzyyyy yyxxxxxx                        00000000 zzzzyyyy yyxxxxxx
                   19996: **
                   19997: **
                   19998: ** BOM or Byte Order Mark:
                   19999: **     0xff 0xfe   little-endian utf-16 follows
                   20000: **     0xfe 0xff   big-endian utf-16 follows
                   20001: **
                   20002: */
                   20003: 
                   20004: #ifndef SQLITE_AMALGAMATION
                   20005: /*
                   20006: ** The following constant value is used by the SQLITE_BIGENDIAN and
                   20007: ** SQLITE_LITTLEENDIAN macros.
                   20008: */
                   20009: SQLITE_PRIVATE const int sqlite3one = 1;
                   20010: #endif /* SQLITE_AMALGAMATION */
                   20011: 
                   20012: /*
                   20013: ** This lookup table is used to help decode the first byte of
                   20014: ** a multi-byte UTF8 character.
                   20015: */
                   20016: static const unsigned char sqlite3Utf8Trans1[] = {
                   20017:   0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
                   20018:   0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
                   20019:   0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
                   20020:   0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
                   20021:   0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
                   20022:   0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
                   20023:   0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
                   20024:   0x00, 0x01, 0x02, 0x03, 0x00, 0x01, 0x00, 0x00,
                   20025: };
                   20026: 
                   20027: 
                   20028: #define WRITE_UTF8(zOut, c) {                          \
                   20029:   if( c<0x00080 ){                                     \
                   20030:     *zOut++ = (u8)(c&0xFF);                            \
                   20031:   }                                                    \
                   20032:   else if( c<0x00800 ){                                \
                   20033:     *zOut++ = 0xC0 + (u8)((c>>6)&0x1F);                \
                   20034:     *zOut++ = 0x80 + (u8)(c & 0x3F);                   \
                   20035:   }                                                    \
                   20036:   else if( c<0x10000 ){                                \
                   20037:     *zOut++ = 0xE0 + (u8)((c>>12)&0x0F);               \
                   20038:     *zOut++ = 0x80 + (u8)((c>>6) & 0x3F);              \
                   20039:     *zOut++ = 0x80 + (u8)(c & 0x3F);                   \
                   20040:   }else{                                               \
                   20041:     *zOut++ = 0xF0 + (u8)((c>>18) & 0x07);             \
                   20042:     *zOut++ = 0x80 + (u8)((c>>12) & 0x3F);             \
                   20043:     *zOut++ = 0x80 + (u8)((c>>6) & 0x3F);              \
                   20044:     *zOut++ = 0x80 + (u8)(c & 0x3F);                   \
                   20045:   }                                                    \
                   20046: }
                   20047: 
                   20048: #define WRITE_UTF16LE(zOut, c) {                                    \
                   20049:   if( c<=0xFFFF ){                                                  \
                   20050:     *zOut++ = (u8)(c&0x00FF);                                       \
                   20051:     *zOut++ = (u8)((c>>8)&0x00FF);                                  \
                   20052:   }else{                                                            \
                   20053:     *zOut++ = (u8)(((c>>10)&0x003F) + (((c-0x10000)>>10)&0x00C0));  \
                   20054:     *zOut++ = (u8)(0x00D8 + (((c-0x10000)>>18)&0x03));              \
                   20055:     *zOut++ = (u8)(c&0x00FF);                                       \
                   20056:     *zOut++ = (u8)(0x00DC + ((c>>8)&0x03));                         \
                   20057:   }                                                                 \
                   20058: }
                   20059: 
                   20060: #define WRITE_UTF16BE(zOut, c) {                                    \
                   20061:   if( c<=0xFFFF ){                                                  \
                   20062:     *zOut++ = (u8)((c>>8)&0x00FF);                                  \
                   20063:     *zOut++ = (u8)(c&0x00FF);                                       \
                   20064:   }else{                                                            \
                   20065:     *zOut++ = (u8)(0x00D8 + (((c-0x10000)>>18)&0x03));              \
                   20066:     *zOut++ = (u8)(((c>>10)&0x003F) + (((c-0x10000)>>10)&0x00C0));  \
                   20067:     *zOut++ = (u8)(0x00DC + ((c>>8)&0x03));                         \
                   20068:     *zOut++ = (u8)(c&0x00FF);                                       \
                   20069:   }                                                                 \
                   20070: }
                   20071: 
                   20072: #define READ_UTF16LE(zIn, TERM, c){                                   \
                   20073:   c = (*zIn++);                                                       \
                   20074:   c += ((*zIn++)<<8);                                                 \
                   20075:   if( c>=0xD800 && c<0xE000 && TERM ){                                \
                   20076:     int c2 = (*zIn++);                                                \
                   20077:     c2 += ((*zIn++)<<8);                                              \
                   20078:     c = (c2&0x03FF) + ((c&0x003F)<<10) + (((c&0x03C0)+0x0040)<<10);   \
                   20079:   }                                                                   \
                   20080: }
                   20081: 
                   20082: #define READ_UTF16BE(zIn, TERM, c){                                   \
                   20083:   c = ((*zIn++)<<8);                                                  \
                   20084:   c += (*zIn++);                                                      \
                   20085:   if( c>=0xD800 && c<0xE000 && TERM ){                                \
                   20086:     int c2 = ((*zIn++)<<8);                                           \
                   20087:     c2 += (*zIn++);                                                   \
                   20088:     c = (c2&0x03FF) + ((c&0x003F)<<10) + (((c&0x03C0)+0x0040)<<10);   \
                   20089:   }                                                                   \
                   20090: }
                   20091: 
                   20092: /*
                   20093: ** Translate a single UTF-8 character.  Return the unicode value.
                   20094: **
                   20095: ** During translation, assume that the byte that zTerm points
                   20096: ** is a 0x00.
                   20097: **
                   20098: ** Write a pointer to the next unread byte back into *pzNext.
                   20099: **
                   20100: ** Notes On Invalid UTF-8:
                   20101: **
                   20102: **  *  This routine never allows a 7-bit character (0x00 through 0x7f) to
                   20103: **     be encoded as a multi-byte character.  Any multi-byte character that
                   20104: **     attempts to encode a value between 0x00 and 0x7f is rendered as 0xfffd.
                   20105: **
                   20106: **  *  This routine never allows a UTF16 surrogate value to be encoded.
                   20107: **     If a multi-byte character attempts to encode a value between
                   20108: **     0xd800 and 0xe000 then it is rendered as 0xfffd.
                   20109: **
                   20110: **  *  Bytes in the range of 0x80 through 0xbf which occur as the first
                   20111: **     byte of a character are interpreted as single-byte characters
                   20112: **     and rendered as themselves even though they are technically
                   20113: **     invalid characters.
                   20114: **
                   20115: **  *  This routine accepts an infinite number of different UTF8 encodings
                   20116: **     for unicode values 0x80 and greater.  It do not change over-length
                   20117: **     encodings to 0xfffd as some systems recommend.
                   20118: */
                   20119: #define READ_UTF8(zIn, zTerm, c)                           \
                   20120:   c = *(zIn++);                                            \
                   20121:   if( c>=0xc0 ){                                           \
                   20122:     c = sqlite3Utf8Trans1[c-0xc0];                         \
                   20123:     while( zIn!=zTerm && (*zIn & 0xc0)==0x80 ){            \
                   20124:       c = (c<<6) + (0x3f & *(zIn++));                      \
                   20125:     }                                                      \
                   20126:     if( c<0x80                                             \
                   20127:         || (c&0xFFFFF800)==0xD800                          \
                   20128:         || (c&0xFFFFFFFE)==0xFFFE ){  c = 0xFFFD; }        \
                   20129:   }
                   20130: SQLITE_PRIVATE u32 sqlite3Utf8Read(
                   20131:   const unsigned char *zIn,       /* First byte of UTF-8 character */
                   20132:   const unsigned char **pzNext    /* Write first byte past UTF-8 char here */
                   20133: ){
                   20134:   unsigned int c;
                   20135: 
                   20136:   /* Same as READ_UTF8() above but without the zTerm parameter.
                   20137:   ** For this routine, we assume the UTF8 string is always zero-terminated.
                   20138:   */
                   20139:   c = *(zIn++);
                   20140:   if( c>=0xc0 ){
                   20141:     c = sqlite3Utf8Trans1[c-0xc0];
                   20142:     while( (*zIn & 0xc0)==0x80 ){
                   20143:       c = (c<<6) + (0x3f & *(zIn++));
                   20144:     }
                   20145:     if( c<0x80
                   20146:         || (c&0xFFFFF800)==0xD800
                   20147:         || (c&0xFFFFFFFE)==0xFFFE ){  c = 0xFFFD; }
                   20148:   }
                   20149:   *pzNext = zIn;
                   20150:   return c;
                   20151: }
                   20152: 
                   20153: 
                   20154: 
                   20155: 
                   20156: /*
                   20157: ** If the TRANSLATE_TRACE macro is defined, the value of each Mem is
                   20158: ** printed on stderr on the way into and out of sqlite3VdbeMemTranslate().
                   20159: */ 
                   20160: /* #define TRANSLATE_TRACE 1 */
                   20161: 
                   20162: #ifndef SQLITE_OMIT_UTF16
                   20163: /*
                   20164: ** This routine transforms the internal text encoding used by pMem to
                   20165: ** desiredEnc. It is an error if the string is already of the desired
                   20166: ** encoding, or if *pMem does not contain a string value.
                   20167: */
                   20168: SQLITE_PRIVATE int sqlite3VdbeMemTranslate(Mem *pMem, u8 desiredEnc){
                   20169:   int len;                    /* Maximum length of output string in bytes */
                   20170:   unsigned char *zOut;                  /* Output buffer */
                   20171:   unsigned char *zIn;                   /* Input iterator */
                   20172:   unsigned char *zTerm;                 /* End of input */
                   20173:   unsigned char *z;                     /* Output iterator */
                   20174:   unsigned int c;
                   20175: 
                   20176:   assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
                   20177:   assert( pMem->flags&MEM_Str );
                   20178:   assert( pMem->enc!=desiredEnc );
                   20179:   assert( pMem->enc!=0 );
                   20180:   assert( pMem->n>=0 );
                   20181: 
                   20182: #if defined(TRANSLATE_TRACE) && defined(SQLITE_DEBUG)
                   20183:   {
                   20184:     char zBuf[100];
                   20185:     sqlite3VdbeMemPrettyPrint(pMem, zBuf);
                   20186:     fprintf(stderr, "INPUT:  %s\n", zBuf);
                   20187:   }
                   20188: #endif
                   20189: 
                   20190:   /* If the translation is between UTF-16 little and big endian, then 
                   20191:   ** all that is required is to swap the byte order. This case is handled
                   20192:   ** differently from the others.
                   20193:   */
                   20194:   if( pMem->enc!=SQLITE_UTF8 && desiredEnc!=SQLITE_UTF8 ){
                   20195:     u8 temp;
                   20196:     int rc;
                   20197:     rc = sqlite3VdbeMemMakeWriteable(pMem);
                   20198:     if( rc!=SQLITE_OK ){
                   20199:       assert( rc==SQLITE_NOMEM );
                   20200:       return SQLITE_NOMEM;
                   20201:     }
                   20202:     zIn = (u8*)pMem->z;
                   20203:     zTerm = &zIn[pMem->n&~1];
                   20204:     while( zIn<zTerm ){
                   20205:       temp = *zIn;
                   20206:       *zIn = *(zIn+1);
                   20207:       zIn++;
                   20208:       *zIn++ = temp;
                   20209:     }
                   20210:     pMem->enc = desiredEnc;
                   20211:     goto translate_out;
                   20212:   }
                   20213: 
                   20214:   /* Set len to the maximum number of bytes required in the output buffer. */
                   20215:   if( desiredEnc==SQLITE_UTF8 ){
                   20216:     /* When converting from UTF-16, the maximum growth results from
                   20217:     ** translating a 2-byte character to a 4-byte UTF-8 character.
                   20218:     ** A single byte is required for the output string
                   20219:     ** nul-terminator.
                   20220:     */
                   20221:     pMem->n &= ~1;
                   20222:     len = pMem->n * 2 + 1;
                   20223:   }else{
                   20224:     /* When converting from UTF-8 to UTF-16 the maximum growth is caused
                   20225:     ** when a 1-byte UTF-8 character is translated into a 2-byte UTF-16
                   20226:     ** character. Two bytes are required in the output buffer for the
                   20227:     ** nul-terminator.
                   20228:     */
                   20229:     len = pMem->n * 2 + 2;
                   20230:   }
                   20231: 
                   20232:   /* Set zIn to point at the start of the input buffer and zTerm to point 1
                   20233:   ** byte past the end.
                   20234:   **
                   20235:   ** Variable zOut is set to point at the output buffer, space obtained
                   20236:   ** from sqlite3_malloc().
                   20237:   */
                   20238:   zIn = (u8*)pMem->z;
                   20239:   zTerm = &zIn[pMem->n];
                   20240:   zOut = sqlite3DbMallocRaw(pMem->db, len);
                   20241:   if( !zOut ){
                   20242:     return SQLITE_NOMEM;
                   20243:   }
                   20244:   z = zOut;
                   20245: 
                   20246:   if( pMem->enc==SQLITE_UTF8 ){
                   20247:     if( desiredEnc==SQLITE_UTF16LE ){
                   20248:       /* UTF-8 -> UTF-16 Little-endian */
                   20249:       while( zIn<zTerm ){
                   20250:         /* c = sqlite3Utf8Read(zIn, zTerm, (const u8**)&zIn); */
                   20251:         READ_UTF8(zIn, zTerm, c);
                   20252:         WRITE_UTF16LE(z, c);
                   20253:       }
                   20254:     }else{
                   20255:       assert( desiredEnc==SQLITE_UTF16BE );
                   20256:       /* UTF-8 -> UTF-16 Big-endian */
                   20257:       while( zIn<zTerm ){
                   20258:         /* c = sqlite3Utf8Read(zIn, zTerm, (const u8**)&zIn); */
                   20259:         READ_UTF8(zIn, zTerm, c);
                   20260:         WRITE_UTF16BE(z, c);
                   20261:       }
                   20262:     }
                   20263:     pMem->n = (int)(z - zOut);
                   20264:     *z++ = 0;
                   20265:   }else{
                   20266:     assert( desiredEnc==SQLITE_UTF8 );
                   20267:     if( pMem->enc==SQLITE_UTF16LE ){
                   20268:       /* UTF-16 Little-endian -> UTF-8 */
                   20269:       while( zIn<zTerm ){
                   20270:         READ_UTF16LE(zIn, zIn<zTerm, c); 
                   20271:         WRITE_UTF8(z, c);
                   20272:       }
                   20273:     }else{
                   20274:       /* UTF-16 Big-endian -> UTF-8 */
                   20275:       while( zIn<zTerm ){
                   20276:         READ_UTF16BE(zIn, zIn<zTerm, c); 
                   20277:         WRITE_UTF8(z, c);
                   20278:       }
                   20279:     }
                   20280:     pMem->n = (int)(z - zOut);
                   20281:   }
                   20282:   *z = 0;
                   20283:   assert( (pMem->n+(desiredEnc==SQLITE_UTF8?1:2))<=len );
                   20284: 
                   20285:   sqlite3VdbeMemRelease(pMem);
                   20286:   pMem->flags &= ~(MEM_Static|MEM_Dyn|MEM_Ephem);
                   20287:   pMem->enc = desiredEnc;
                   20288:   pMem->flags |= (MEM_Term|MEM_Dyn);
                   20289:   pMem->z = (char*)zOut;
                   20290:   pMem->zMalloc = pMem->z;
                   20291: 
                   20292: translate_out:
                   20293: #if defined(TRANSLATE_TRACE) && defined(SQLITE_DEBUG)
                   20294:   {
                   20295:     char zBuf[100];
                   20296:     sqlite3VdbeMemPrettyPrint(pMem, zBuf);
                   20297:     fprintf(stderr, "OUTPUT: %s\n", zBuf);
                   20298:   }
                   20299: #endif
                   20300:   return SQLITE_OK;
                   20301: }
                   20302: 
                   20303: /*
                   20304: ** This routine checks for a byte-order mark at the beginning of the 
                   20305: ** UTF-16 string stored in *pMem. If one is present, it is removed and
                   20306: ** the encoding of the Mem adjusted. This routine does not do any
                   20307: ** byte-swapping, it just sets Mem.enc appropriately.
                   20308: **
                   20309: ** The allocation (static, dynamic etc.) and encoding of the Mem may be
                   20310: ** changed by this function.
                   20311: */
                   20312: SQLITE_PRIVATE int sqlite3VdbeMemHandleBom(Mem *pMem){
                   20313:   int rc = SQLITE_OK;
                   20314:   u8 bom = 0;
                   20315: 
                   20316:   assert( pMem->n>=0 );
                   20317:   if( pMem->n>1 ){
                   20318:     u8 b1 = *(u8 *)pMem->z;
                   20319:     u8 b2 = *(((u8 *)pMem->z) + 1);
                   20320:     if( b1==0xFE && b2==0xFF ){
                   20321:       bom = SQLITE_UTF16BE;
                   20322:     }
                   20323:     if( b1==0xFF && b2==0xFE ){
                   20324:       bom = SQLITE_UTF16LE;
                   20325:     }
                   20326:   }
                   20327:   
                   20328:   if( bom ){
                   20329:     rc = sqlite3VdbeMemMakeWriteable(pMem);
                   20330:     if( rc==SQLITE_OK ){
                   20331:       pMem->n -= 2;
                   20332:       memmove(pMem->z, &pMem->z[2], pMem->n);
                   20333:       pMem->z[pMem->n] = '\0';
                   20334:       pMem->z[pMem->n+1] = '\0';
                   20335:       pMem->flags |= MEM_Term;
                   20336:       pMem->enc = bom;
                   20337:     }
                   20338:   }
                   20339:   return rc;
                   20340: }
                   20341: #endif /* SQLITE_OMIT_UTF16 */
                   20342: 
                   20343: /*
                   20344: ** pZ is a UTF-8 encoded unicode string. If nByte is less than zero,
                   20345: ** return the number of unicode characters in pZ up to (but not including)
                   20346: ** the first 0x00 byte. If nByte is not less than zero, return the
                   20347: ** number of unicode characters in the first nByte of pZ (or up to 
                   20348: ** the first 0x00, whichever comes first).
                   20349: */
                   20350: SQLITE_PRIVATE int sqlite3Utf8CharLen(const char *zIn, int nByte){
                   20351:   int r = 0;
                   20352:   const u8 *z = (const u8*)zIn;
                   20353:   const u8 *zTerm;
                   20354:   if( nByte>=0 ){
                   20355:     zTerm = &z[nByte];
                   20356:   }else{
                   20357:     zTerm = (const u8*)(-1);
                   20358:   }
                   20359:   assert( z<=zTerm );
                   20360:   while( *z!=0 && z<zTerm ){
                   20361:     SQLITE_SKIP_UTF8(z);
                   20362:     r++;
                   20363:   }
                   20364:   return r;
                   20365: }
                   20366: 
                   20367: /* This test function is not currently used by the automated test-suite. 
                   20368: ** Hence it is only available in debug builds.
                   20369: */
                   20370: #if defined(SQLITE_TEST) && defined(SQLITE_DEBUG)
                   20371: /*
                   20372: ** Translate UTF-8 to UTF-8.
                   20373: **
                   20374: ** This has the effect of making sure that the string is well-formed
                   20375: ** UTF-8.  Miscoded characters are removed.
                   20376: **
                   20377: ** The translation is done in-place and aborted if the output
                   20378: ** overruns the input.
                   20379: */
                   20380: SQLITE_PRIVATE int sqlite3Utf8To8(unsigned char *zIn){
                   20381:   unsigned char *zOut = zIn;
                   20382:   unsigned char *zStart = zIn;
                   20383:   u32 c;
                   20384: 
                   20385:   while( zIn[0] && zOut<=zIn ){
                   20386:     c = sqlite3Utf8Read(zIn, (const u8**)&zIn);
                   20387:     if( c!=0xfffd ){
                   20388:       WRITE_UTF8(zOut, c);
                   20389:     }
                   20390:   }
                   20391:   *zOut = 0;
                   20392:   return (int)(zOut - zStart);
                   20393: }
                   20394: #endif
                   20395: 
                   20396: #ifndef SQLITE_OMIT_UTF16
                   20397: /*
                   20398: ** Convert a UTF-16 string in the native encoding into a UTF-8 string.
                   20399: ** Memory to hold the UTF-8 string is obtained from sqlite3_malloc and must
                   20400: ** be freed by the calling function.
                   20401: **
                   20402: ** NULL is returned if there is an allocation error.
                   20403: */
                   20404: SQLITE_PRIVATE char *sqlite3Utf16to8(sqlite3 *db, const void *z, int nByte, u8 enc){
                   20405:   Mem m;
                   20406:   memset(&m, 0, sizeof(m));
                   20407:   m.db = db;
                   20408:   sqlite3VdbeMemSetStr(&m, z, nByte, enc, SQLITE_STATIC);
                   20409:   sqlite3VdbeChangeEncoding(&m, SQLITE_UTF8);
                   20410:   if( db->mallocFailed ){
                   20411:     sqlite3VdbeMemRelease(&m);
                   20412:     m.z = 0;
                   20413:   }
                   20414:   assert( (m.flags & MEM_Term)!=0 || db->mallocFailed );
                   20415:   assert( (m.flags & MEM_Str)!=0 || db->mallocFailed );
                   20416:   assert( (m.flags & MEM_Dyn)!=0 || db->mallocFailed );
                   20417:   assert( m.z || db->mallocFailed );
                   20418:   return m.z;
                   20419: }
                   20420: 
                   20421: /*
                   20422: ** Convert a UTF-8 string to the UTF-16 encoding specified by parameter
                   20423: ** enc. A pointer to the new string is returned, and the value of *pnOut
                   20424: ** is set to the length of the returned string in bytes. The call should
                   20425: ** arrange to call sqlite3DbFree() on the returned pointer when it is
                   20426: ** no longer required.
                   20427: ** 
                   20428: ** If a malloc failure occurs, NULL is returned and the db.mallocFailed
                   20429: ** flag set.
                   20430: */
                   20431: #ifdef SQLITE_ENABLE_STAT2
                   20432: SQLITE_PRIVATE char *sqlite3Utf8to16(sqlite3 *db, u8 enc, char *z, int n, int *pnOut){
                   20433:   Mem m;
                   20434:   memset(&m, 0, sizeof(m));
                   20435:   m.db = db;
                   20436:   sqlite3VdbeMemSetStr(&m, z, n, SQLITE_UTF8, SQLITE_STATIC);
                   20437:   if( sqlite3VdbeMemTranslate(&m, enc) ){
                   20438:     assert( db->mallocFailed );
                   20439:     return 0;
                   20440:   }
                   20441:   assert( m.z==m.zMalloc );
                   20442:   *pnOut = m.n;
                   20443:   return m.z;
                   20444: }
                   20445: #endif
                   20446: 
                   20447: /*
                   20448: ** zIn is a UTF-16 encoded unicode string at least nChar characters long.
                   20449: ** Return the number of bytes in the first nChar unicode characters
                   20450: ** in pZ.  nChar must be non-negative.
                   20451: */
                   20452: SQLITE_PRIVATE int sqlite3Utf16ByteLen(const void *zIn, int nChar){
                   20453:   int c;
                   20454:   unsigned char const *z = zIn;
                   20455:   int n = 0;
                   20456:   
                   20457:   if( SQLITE_UTF16NATIVE==SQLITE_UTF16BE ){
                   20458:     while( n<nChar ){
                   20459:       READ_UTF16BE(z, 1, c);
                   20460:       n++;
                   20461:     }
                   20462:   }else{
                   20463:     while( n<nChar ){
                   20464:       READ_UTF16LE(z, 1, c);
                   20465:       n++;
                   20466:     }
                   20467:   }
                   20468:   return (int)(z-(unsigned char const *)zIn);
                   20469: }
                   20470: 
                   20471: #if defined(SQLITE_TEST)
                   20472: /*
                   20473: ** This routine is called from the TCL test function "translate_selftest".
                   20474: ** It checks that the primitives for serializing and deserializing
                   20475: ** characters in each encoding are inverses of each other.
                   20476: */
                   20477: SQLITE_PRIVATE void sqlite3UtfSelfTest(void){
                   20478:   unsigned int i, t;
                   20479:   unsigned char zBuf[20];
                   20480:   unsigned char *z;
                   20481:   int n;
                   20482:   unsigned int c;
                   20483: 
                   20484:   for(i=0; i<0x00110000; i++){
                   20485:     z = zBuf;
                   20486:     WRITE_UTF8(z, i);
                   20487:     n = (int)(z-zBuf);
                   20488:     assert( n>0 && n<=4 );
                   20489:     z[0] = 0;
                   20490:     z = zBuf;
                   20491:     c = sqlite3Utf8Read(z, (const u8**)&z);
                   20492:     t = i;
                   20493:     if( i>=0xD800 && i<=0xDFFF ) t = 0xFFFD;
                   20494:     if( (i&0xFFFFFFFE)==0xFFFE ) t = 0xFFFD;
                   20495:     assert( c==t );
                   20496:     assert( (z-zBuf)==n );
                   20497:   }
                   20498:   for(i=0; i<0x00110000; i++){
                   20499:     if( i>=0xD800 && i<0xE000 ) continue;
                   20500:     z = zBuf;
                   20501:     WRITE_UTF16LE(z, i);
                   20502:     n = (int)(z-zBuf);
                   20503:     assert( n>0 && n<=4 );
                   20504:     z[0] = 0;
                   20505:     z = zBuf;
                   20506:     READ_UTF16LE(z, 1, c);
                   20507:     assert( c==i );
                   20508:     assert( (z-zBuf)==n );
                   20509:   }
                   20510:   for(i=0; i<0x00110000; i++){
                   20511:     if( i>=0xD800 && i<0xE000 ) continue;
                   20512:     z = zBuf;
                   20513:     WRITE_UTF16BE(z, i);
                   20514:     n = (int)(z-zBuf);
                   20515:     assert( n>0 && n<=4 );
                   20516:     z[0] = 0;
                   20517:     z = zBuf;
                   20518:     READ_UTF16BE(z, 1, c);
                   20519:     assert( c==i );
                   20520:     assert( (z-zBuf)==n );
                   20521:   }
                   20522: }
                   20523: #endif /* SQLITE_TEST */
                   20524: #endif /* SQLITE_OMIT_UTF16 */
                   20525: 
                   20526: /************** End of utf.c *************************************************/
                   20527: /************** Begin file util.c ********************************************/
                   20528: /*
                   20529: ** 2001 September 15
                   20530: **
                   20531: ** The author disclaims copyright to this source code.  In place of
                   20532: ** a legal notice, here is a blessing:
                   20533: **
                   20534: **    May you do good and not evil.
                   20535: **    May you find forgiveness for yourself and forgive others.
                   20536: **    May you share freely, never taking more than you give.
                   20537: **
                   20538: *************************************************************************
                   20539: ** Utility functions used throughout sqlite.
                   20540: **
                   20541: ** This file contains functions for allocating memory, comparing
                   20542: ** strings, and stuff like that.
                   20543: **
                   20544: */
                   20545: #ifdef SQLITE_HAVE_ISNAN
                   20546: # include <math.h>
                   20547: #endif
                   20548: 
                   20549: /*
                   20550: ** Routine needed to support the testcase() macro.
                   20551: */
                   20552: #ifdef SQLITE_COVERAGE_TEST
                   20553: SQLITE_PRIVATE void sqlite3Coverage(int x){
                   20554:   static unsigned dummy = 0;
                   20555:   dummy += (unsigned)x;
                   20556: }
                   20557: #endif
                   20558: 
                   20559: #ifndef SQLITE_OMIT_FLOATING_POINT
                   20560: /*
                   20561: ** Return true if the floating point value is Not a Number (NaN).
                   20562: **
                   20563: ** Use the math library isnan() function if compiled with SQLITE_HAVE_ISNAN.
                   20564: ** Otherwise, we have our own implementation that works on most systems.
                   20565: */
                   20566: SQLITE_PRIVATE int sqlite3IsNaN(double x){
                   20567:   int rc;   /* The value return */
                   20568: #if !defined(SQLITE_HAVE_ISNAN)
                   20569:   /*
                   20570:   ** Systems that support the isnan() library function should probably
                   20571:   ** make use of it by compiling with -DSQLITE_HAVE_ISNAN.  But we have
                   20572:   ** found that many systems do not have a working isnan() function so
                   20573:   ** this implementation is provided as an alternative.
                   20574:   **
                   20575:   ** This NaN test sometimes fails if compiled on GCC with -ffast-math.
                   20576:   ** On the other hand, the use of -ffast-math comes with the following
                   20577:   ** warning:
                   20578:   **
                   20579:   **      This option [-ffast-math] should never be turned on by any
                   20580:   **      -O option since it can result in incorrect output for programs
                   20581:   **      which depend on an exact implementation of IEEE or ISO 
                   20582:   **      rules/specifications for math functions.
                   20583:   **
                   20584:   ** Under MSVC, this NaN test may fail if compiled with a floating-
                   20585:   ** point precision mode other than /fp:precise.  From the MSDN 
                   20586:   ** documentation:
                   20587:   **
                   20588:   **      The compiler [with /fp:precise] will properly handle comparisons 
                   20589:   **      involving NaN. For example, x != x evaluates to true if x is NaN 
                   20590:   **      ...
                   20591:   */
                   20592: #ifdef __FAST_MATH__
                   20593: # error SQLite will not work correctly with the -ffast-math option of GCC.
                   20594: #endif
                   20595:   volatile double y = x;
                   20596:   volatile double z = y;
                   20597:   rc = (y!=z);
                   20598: #else  /* if defined(SQLITE_HAVE_ISNAN) */
                   20599:   rc = isnan(x);
                   20600: #endif /* SQLITE_HAVE_ISNAN */
                   20601:   testcase( rc );
                   20602:   return rc;
                   20603: }
                   20604: #endif /* SQLITE_OMIT_FLOATING_POINT */
                   20605: 
                   20606: /*
                   20607: ** Compute a string length that is limited to what can be stored in
                   20608: ** lower 30 bits of a 32-bit signed integer.
                   20609: **
                   20610: ** The value returned will never be negative.  Nor will it ever be greater
                   20611: ** than the actual length of the string.  For very long strings (greater
                   20612: ** than 1GiB) the value returned might be less than the true string length.
                   20613: */
                   20614: SQLITE_PRIVATE int sqlite3Strlen30(const char *z){
                   20615:   const char *z2 = z;
                   20616:   if( z==0 ) return 0;
                   20617:   while( *z2 ){ z2++; }
                   20618:   return 0x3fffffff & (int)(z2 - z);
                   20619: }
                   20620: 
                   20621: /*
                   20622: ** Set the most recent error code and error string for the sqlite
                   20623: ** handle "db". The error code is set to "err_code".
                   20624: **
                   20625: ** If it is not NULL, string zFormat specifies the format of the
                   20626: ** error string in the style of the printf functions: The following
                   20627: ** format characters are allowed:
                   20628: **
                   20629: **      %s      Insert a string
                   20630: **      %z      A string that should be freed after use
                   20631: **      %d      Insert an integer
                   20632: **      %T      Insert a token
                   20633: **      %S      Insert the first element of a SrcList
                   20634: **
                   20635: ** zFormat and any string tokens that follow it are assumed to be
                   20636: ** encoded in UTF-8.
                   20637: **
                   20638: ** To clear the most recent error for sqlite handle "db", sqlite3Error
                   20639: ** should be called with err_code set to SQLITE_OK and zFormat set
                   20640: ** to NULL.
                   20641: */
                   20642: SQLITE_PRIVATE void sqlite3Error(sqlite3 *db, int err_code, const char *zFormat, ...){
                   20643:   if( db && (db->pErr || (db->pErr = sqlite3ValueNew(db))!=0) ){
                   20644:     db->errCode = err_code;
                   20645:     if( zFormat ){
                   20646:       char *z;
                   20647:       va_list ap;
                   20648:       va_start(ap, zFormat);
                   20649:       z = sqlite3VMPrintf(db, zFormat, ap);
                   20650:       va_end(ap);
                   20651:       sqlite3ValueSetStr(db->pErr, -1, z, SQLITE_UTF8, SQLITE_DYNAMIC);
                   20652:     }else{
                   20653:       sqlite3ValueSetStr(db->pErr, 0, 0, SQLITE_UTF8, SQLITE_STATIC);
                   20654:     }
                   20655:   }
                   20656: }
                   20657: 
                   20658: /*
                   20659: ** Add an error message to pParse->zErrMsg and increment pParse->nErr.
                   20660: ** The following formatting characters are allowed:
                   20661: **
                   20662: **      %s      Insert a string
                   20663: **      %z      A string that should be freed after use
                   20664: **      %d      Insert an integer
                   20665: **      %T      Insert a token
                   20666: **      %S      Insert the first element of a SrcList
                   20667: **
                   20668: ** This function should be used to report any error that occurs whilst
                   20669: ** compiling an SQL statement (i.e. within sqlite3_prepare()). The
                   20670: ** last thing the sqlite3_prepare() function does is copy the error
                   20671: ** stored by this function into the database handle using sqlite3Error().
                   20672: ** Function sqlite3Error() should be used during statement execution
                   20673: ** (sqlite3_step() etc.).
                   20674: */
                   20675: SQLITE_PRIVATE void sqlite3ErrorMsg(Parse *pParse, const char *zFormat, ...){
                   20676:   char *zMsg;
                   20677:   va_list ap;
                   20678:   sqlite3 *db = pParse->db;
                   20679:   va_start(ap, zFormat);
                   20680:   zMsg = sqlite3VMPrintf(db, zFormat, ap);
                   20681:   va_end(ap);
                   20682:   if( db->suppressErr ){
                   20683:     sqlite3DbFree(db, zMsg);
                   20684:   }else{
                   20685:     pParse->nErr++;
                   20686:     sqlite3DbFree(db, pParse->zErrMsg);
                   20687:     pParse->zErrMsg = zMsg;
                   20688:     pParse->rc = SQLITE_ERROR;
                   20689:   }
                   20690: }
                   20691: 
                   20692: /*
                   20693: ** Convert an SQL-style quoted string into a normal string by removing
                   20694: ** the quote characters.  The conversion is done in-place.  If the
                   20695: ** input does not begin with a quote character, then this routine
                   20696: ** is a no-op.
                   20697: **
                   20698: ** The input string must be zero-terminated.  A new zero-terminator
                   20699: ** is added to the dequoted string.
                   20700: **
                   20701: ** The return value is -1 if no dequoting occurs or the length of the
                   20702: ** dequoted string, exclusive of the zero terminator, if dequoting does
                   20703: ** occur.
                   20704: **
                   20705: ** 2002-Feb-14: This routine is extended to remove MS-Access style
                   20706: ** brackets from around identifers.  For example:  "[a-b-c]" becomes
                   20707: ** "a-b-c".
                   20708: */
                   20709: SQLITE_PRIVATE int sqlite3Dequote(char *z){
                   20710:   char quote;
                   20711:   int i, j;
                   20712:   if( z==0 ) return -1;
                   20713:   quote = z[0];
                   20714:   switch( quote ){
                   20715:     case '\'':  break;
                   20716:     case '"':   break;
                   20717:     case '`':   break;                /* For MySQL compatibility */
                   20718:     case '[':   quote = ']';  break;  /* For MS SqlServer compatibility */
                   20719:     default:    return -1;
                   20720:   }
                   20721:   for(i=1, j=0; ALWAYS(z[i]); i++){
                   20722:     if( z[i]==quote ){
                   20723:       if( z[i+1]==quote ){
                   20724:         z[j++] = quote;
                   20725:         i++;
                   20726:       }else{
                   20727:         break;
                   20728:       }
                   20729:     }else{
                   20730:       z[j++] = z[i];
                   20731:     }
                   20732:   }
                   20733:   z[j] = 0;
                   20734:   return j;
                   20735: }
                   20736: 
                   20737: /* Convenient short-hand */
                   20738: #define UpperToLower sqlite3UpperToLower
                   20739: 
                   20740: /*
                   20741: ** Some systems have stricmp().  Others have strcasecmp().  Because
                   20742: ** there is no consistency, we will define our own.
                   20743: **
                   20744: ** IMPLEMENTATION-OF: R-20522-24639 The sqlite3_strnicmp() API allows
                   20745: ** applications and extensions to compare the contents of two buffers
                   20746: ** containing UTF-8 strings in a case-independent fashion, using the same
                   20747: ** definition of case independence that SQLite uses internally when
                   20748: ** comparing identifiers.
                   20749: */
                   20750: SQLITE_PRIVATE int sqlite3StrICmp(const char *zLeft, const char *zRight){
                   20751:   register unsigned char *a, *b;
                   20752:   a = (unsigned char *)zLeft;
                   20753:   b = (unsigned char *)zRight;
                   20754:   while( *a!=0 && UpperToLower[*a]==UpperToLower[*b]){ a++; b++; }
                   20755:   return UpperToLower[*a] - UpperToLower[*b];
                   20756: }
                   20757: SQLITE_API int sqlite3_strnicmp(const char *zLeft, const char *zRight, int N){
                   20758:   register unsigned char *a, *b;
                   20759:   a = (unsigned char *)zLeft;
                   20760:   b = (unsigned char *)zRight;
                   20761:   while( N-- > 0 && *a!=0 && UpperToLower[*a]==UpperToLower[*b]){ a++; b++; }
                   20762:   return N<0 ? 0 : UpperToLower[*a] - UpperToLower[*b];
                   20763: }
                   20764: 
                   20765: /*
                   20766: ** The string z[] is an text representation of a real number.
                   20767: ** Convert this string to a double and write it into *pResult.
                   20768: **
                   20769: ** The string z[] is length bytes in length (bytes, not characters) and
                   20770: ** uses the encoding enc.  The string is not necessarily zero-terminated.
                   20771: **
                   20772: ** Return TRUE if the result is a valid real number (or integer) and FALSE
                   20773: ** if the string is empty or contains extraneous text.  Valid numbers
                   20774: ** are in one of these formats:
                   20775: **
                   20776: **    [+-]digits[E[+-]digits]
                   20777: **    [+-]digits.[digits][E[+-]digits]
                   20778: **    [+-].digits[E[+-]digits]
                   20779: **
                   20780: ** Leading and trailing whitespace is ignored for the purpose of determining
                   20781: ** validity.
                   20782: **
                   20783: ** If some prefix of the input string is a valid number, this routine
                   20784: ** returns FALSE but it still converts the prefix and writes the result
                   20785: ** into *pResult.
                   20786: */
                   20787: SQLITE_PRIVATE int sqlite3AtoF(const char *z, double *pResult, int length, u8 enc){
                   20788: #ifndef SQLITE_OMIT_FLOATING_POINT
                   20789:   int incr = (enc==SQLITE_UTF8?1:2);
                   20790:   const char *zEnd = z + length;
                   20791:   /* sign * significand * (10 ^ (esign * exponent)) */
                   20792:   int sign = 1;    /* sign of significand */
                   20793:   i64 s = 0;       /* significand */
                   20794:   int d = 0;       /* adjust exponent for shifting decimal point */
                   20795:   int esign = 1;   /* sign of exponent */
                   20796:   int e = 0;       /* exponent */
                   20797:   int eValid = 1;  /* True exponent is either not used or is well-formed */
                   20798:   double result;
                   20799:   int nDigits = 0;
                   20800: 
                   20801:   *pResult = 0.0;   /* Default return value, in case of an error */
                   20802: 
                   20803:   if( enc==SQLITE_UTF16BE ) z++;
                   20804: 
                   20805:   /* skip leading spaces */
                   20806:   while( z<zEnd && sqlite3Isspace(*z) ) z+=incr;
                   20807:   if( z>=zEnd ) return 0;
                   20808: 
                   20809:   /* get sign of significand */
                   20810:   if( *z=='-' ){
                   20811:     sign = -1;
                   20812:     z+=incr;
                   20813:   }else if( *z=='+' ){
                   20814:     z+=incr;
                   20815:   }
                   20816: 
                   20817:   /* skip leading zeroes */
                   20818:   while( z<zEnd && z[0]=='0' ) z+=incr, nDigits++;
                   20819: 
                   20820:   /* copy max significant digits to significand */
                   20821:   while( z<zEnd && sqlite3Isdigit(*z) && s<((LARGEST_INT64-9)/10) ){
                   20822:     s = s*10 + (*z - '0');
                   20823:     z+=incr, nDigits++;
                   20824:   }
                   20825: 
                   20826:   /* skip non-significant significand digits
                   20827:   ** (increase exponent by d to shift decimal left) */
                   20828:   while( z<zEnd && sqlite3Isdigit(*z) ) z+=incr, nDigits++, d++;
                   20829:   if( z>=zEnd ) goto do_atof_calc;
                   20830: 
                   20831:   /* if decimal point is present */
                   20832:   if( *z=='.' ){
                   20833:     z+=incr;
                   20834:     /* copy digits from after decimal to significand
                   20835:     ** (decrease exponent by d to shift decimal right) */
                   20836:     while( z<zEnd && sqlite3Isdigit(*z) && s<((LARGEST_INT64-9)/10) ){
                   20837:       s = s*10 + (*z - '0');
                   20838:       z+=incr, nDigits++, d--;
                   20839:     }
                   20840:     /* skip non-significant digits */
                   20841:     while( z<zEnd && sqlite3Isdigit(*z) ) z+=incr, nDigits++;
                   20842:   }
                   20843:   if( z>=zEnd ) goto do_atof_calc;
                   20844: 
                   20845:   /* if exponent is present */
                   20846:   if( *z=='e' || *z=='E' ){
                   20847:     z+=incr;
                   20848:     eValid = 0;
                   20849:     if( z>=zEnd ) goto do_atof_calc;
                   20850:     /* get sign of exponent */
                   20851:     if( *z=='-' ){
                   20852:       esign = -1;
                   20853:       z+=incr;
                   20854:     }else if( *z=='+' ){
                   20855:       z+=incr;
                   20856:     }
                   20857:     /* copy digits to exponent */
                   20858:     while( z<zEnd && sqlite3Isdigit(*z) ){
                   20859:       e = e*10 + (*z - '0');
                   20860:       z+=incr;
                   20861:       eValid = 1;
                   20862:     }
                   20863:   }
                   20864: 
                   20865:   /* skip trailing spaces */
                   20866:   if( nDigits && eValid ){
                   20867:     while( z<zEnd && sqlite3Isspace(*z) ) z+=incr;
                   20868:   }
                   20869: 
                   20870: do_atof_calc:
                   20871:   /* adjust exponent by d, and update sign */
                   20872:   e = (e*esign) + d;
                   20873:   if( e<0 ) {
                   20874:     esign = -1;
                   20875:     e *= -1;
                   20876:   } else {
                   20877:     esign = 1;
                   20878:   }
                   20879: 
                   20880:   /* if 0 significand */
                   20881:   if( !s ) {
                   20882:     /* In the IEEE 754 standard, zero is signed.
                   20883:     ** Add the sign if we've seen at least one digit */
                   20884:     result = (sign<0 && nDigits) ? -(double)0 : (double)0;
                   20885:   } else {
                   20886:     /* attempt to reduce exponent */
                   20887:     if( esign>0 ){
                   20888:       while( s<(LARGEST_INT64/10) && e>0 ) e--,s*=10;
                   20889:     }else{
                   20890:       while( !(s%10) && e>0 ) e--,s/=10;
                   20891:     }
                   20892: 
                   20893:     /* adjust the sign of significand */
                   20894:     s = sign<0 ? -s : s;
                   20895: 
                   20896:     /* if exponent, scale significand as appropriate
                   20897:     ** and store in result. */
                   20898:     if( e ){
                   20899:       double scale = 1.0;
                   20900:       /* attempt to handle extremely small/large numbers better */
                   20901:       if( e>307 && e<342 ){
                   20902:         while( e%308 ) { scale *= 1.0e+1; e -= 1; }
                   20903:         if( esign<0 ){
                   20904:           result = s / scale;
                   20905:           result /= 1.0e+308;
                   20906:         }else{
                   20907:           result = s * scale;
                   20908:           result *= 1.0e+308;
                   20909:         }
                   20910:       }else{
                   20911:         /* 1.0e+22 is the largest power of 10 than can be 
                   20912:         ** represented exactly. */
                   20913:         while( e%22 ) { scale *= 1.0e+1; e -= 1; }
                   20914:         while( e>0 ) { scale *= 1.0e+22; e -= 22; }
                   20915:         if( esign<0 ){
                   20916:           result = s / scale;
                   20917:         }else{
                   20918:           result = s * scale;
                   20919:         }
                   20920:       }
                   20921:     } else {
                   20922:       result = (double)s;
                   20923:     }
                   20924:   }
                   20925: 
                   20926:   /* store the result */
                   20927:   *pResult = result;
                   20928: 
                   20929:   /* return true if number and no extra non-whitespace chracters after */
                   20930:   return z>=zEnd && nDigits>0 && eValid;
                   20931: #else
                   20932:   return !sqlite3Atoi64(z, pResult, length, enc);
                   20933: #endif /* SQLITE_OMIT_FLOATING_POINT */
                   20934: }
                   20935: 
                   20936: /*
                   20937: ** Compare the 19-character string zNum against the text representation
                   20938: ** value 2^63:  9223372036854775808.  Return negative, zero, or positive
                   20939: ** if zNum is less than, equal to, or greater than the string.
                   20940: ** Note that zNum must contain exactly 19 characters.
                   20941: **
                   20942: ** Unlike memcmp() this routine is guaranteed to return the difference
                   20943: ** in the values of the last digit if the only difference is in the
                   20944: ** last digit.  So, for example,
                   20945: **
                   20946: **      compare2pow63("9223372036854775800", 1)
                   20947: **
                   20948: ** will return -8.
                   20949: */
                   20950: static int compare2pow63(const char *zNum, int incr){
                   20951:   int c = 0;
                   20952:   int i;
                   20953:                     /* 012345678901234567 */
                   20954:   const char *pow63 = "922337203685477580";
                   20955:   for(i=0; c==0 && i<18; i++){
                   20956:     c = (zNum[i*incr]-pow63[i])*10;
                   20957:   }
                   20958:   if( c==0 ){
                   20959:     c = zNum[18*incr] - '8';
                   20960:     testcase( c==(-1) );
                   20961:     testcase( c==0 );
                   20962:     testcase( c==(+1) );
                   20963:   }
                   20964:   return c;
                   20965: }
                   20966: 
                   20967: 
                   20968: /*
                   20969: ** Convert zNum to a 64-bit signed integer.
                   20970: **
                   20971: ** If the zNum value is representable as a 64-bit twos-complement 
                   20972: ** integer, then write that value into *pNum and return 0.
                   20973: **
                   20974: ** If zNum is exactly 9223372036854665808, return 2.  This special
                   20975: ** case is broken out because while 9223372036854665808 cannot be a 
                   20976: ** signed 64-bit integer, its negative -9223372036854665808 can be.
                   20977: **
                   20978: ** If zNum is too big for a 64-bit integer and is not
                   20979: ** 9223372036854665808 then return 1.
                   20980: **
                   20981: ** length is the number of bytes in the string (bytes, not characters).
                   20982: ** The string is not necessarily zero-terminated.  The encoding is
                   20983: ** given by enc.
                   20984: */
                   20985: SQLITE_PRIVATE int sqlite3Atoi64(const char *zNum, i64 *pNum, int length, u8 enc){
                   20986:   int incr = (enc==SQLITE_UTF8?1:2);
                   20987:   u64 u = 0;
                   20988:   int neg = 0; /* assume positive */
                   20989:   int i;
                   20990:   int c = 0;
                   20991:   const char *zStart;
                   20992:   const char *zEnd = zNum + length;
                   20993:   if( enc==SQLITE_UTF16BE ) zNum++;
                   20994:   while( zNum<zEnd && sqlite3Isspace(*zNum) ) zNum+=incr;
                   20995:   if( zNum<zEnd ){
                   20996:     if( *zNum=='-' ){
                   20997:       neg = 1;
                   20998:       zNum+=incr;
                   20999:     }else if( *zNum=='+' ){
                   21000:       zNum+=incr;
                   21001:     }
                   21002:   }
                   21003:   zStart = zNum;
                   21004:   while( zNum<zEnd && zNum[0]=='0' ){ zNum+=incr; } /* Skip leading zeros. */
                   21005:   for(i=0; &zNum[i]<zEnd && (c=zNum[i])>='0' && c<='9'; i+=incr){
                   21006:     u = u*10 + c - '0';
                   21007:   }
                   21008:   if( u>LARGEST_INT64 ){
                   21009:     *pNum = SMALLEST_INT64;
                   21010:   }else if( neg ){
                   21011:     *pNum = -(i64)u;
                   21012:   }else{
                   21013:     *pNum = (i64)u;
                   21014:   }
                   21015:   testcase( i==18 );
                   21016:   testcase( i==19 );
                   21017:   testcase( i==20 );
                   21018:   if( (c!=0 && &zNum[i]<zEnd) || (i==0 && zStart==zNum) || i>19*incr ){
                   21019:     /* zNum is empty or contains non-numeric text or is longer
                   21020:     ** than 19 digits (thus guaranteeing that it is too large) */
                   21021:     return 1;
                   21022:   }else if( i<19*incr ){
                   21023:     /* Less than 19 digits, so we know that it fits in 64 bits */
                   21024:     assert( u<=LARGEST_INT64 );
                   21025:     return 0;
                   21026:   }else{
                   21027:     /* zNum is a 19-digit numbers.  Compare it against 9223372036854775808. */
                   21028:     c = compare2pow63(zNum, incr);
                   21029:     if( c<0 ){
                   21030:       /* zNum is less than 9223372036854775808 so it fits */
                   21031:       assert( u<=LARGEST_INT64 );
                   21032:       return 0;
                   21033:     }else if( c>0 ){
                   21034:       /* zNum is greater than 9223372036854775808 so it overflows */
                   21035:       return 1;
                   21036:     }else{
                   21037:       /* zNum is exactly 9223372036854775808.  Fits if negative.  The
                   21038:       ** special case 2 overflow if positive */
                   21039:       assert( u-1==LARGEST_INT64 );
                   21040:       assert( (*pNum)==SMALLEST_INT64 );
                   21041:       return neg ? 0 : 2;
                   21042:     }
                   21043:   }
                   21044: }
                   21045: 
                   21046: /*
                   21047: ** If zNum represents an integer that will fit in 32-bits, then set
                   21048: ** *pValue to that integer and return true.  Otherwise return false.
                   21049: **
                   21050: ** Any non-numeric characters that following zNum are ignored.
                   21051: ** This is different from sqlite3Atoi64() which requires the
                   21052: ** input number to be zero-terminated.
                   21053: */
                   21054: SQLITE_PRIVATE int sqlite3GetInt32(const char *zNum, int *pValue){
                   21055:   sqlite_int64 v = 0;
                   21056:   int i, c;
                   21057:   int neg = 0;
                   21058:   if( zNum[0]=='-' ){
                   21059:     neg = 1;
                   21060:     zNum++;
                   21061:   }else if( zNum[0]=='+' ){
                   21062:     zNum++;
                   21063:   }
                   21064:   while( zNum[0]=='0' ) zNum++;
                   21065:   for(i=0; i<11 && (c = zNum[i] - '0')>=0 && c<=9; i++){
                   21066:     v = v*10 + c;
                   21067:   }
                   21068: 
                   21069:   /* The longest decimal representation of a 32 bit integer is 10 digits:
                   21070:   **
                   21071:   **             1234567890
                   21072:   **     2^31 -> 2147483648
                   21073:   */
                   21074:   testcase( i==10 );
                   21075:   if( i>10 ){
                   21076:     return 0;
                   21077:   }
                   21078:   testcase( v-neg==2147483647 );
                   21079:   if( v-neg>2147483647 ){
                   21080:     return 0;
                   21081:   }
                   21082:   if( neg ){
                   21083:     v = -v;
                   21084:   }
                   21085:   *pValue = (int)v;
                   21086:   return 1;
                   21087: }
                   21088: 
                   21089: /*
                   21090: ** Return a 32-bit integer value extracted from a string.  If the
                   21091: ** string is not an integer, just return 0.
                   21092: */
                   21093: SQLITE_PRIVATE int sqlite3Atoi(const char *z){
                   21094:   int x = 0;
                   21095:   if( z ) sqlite3GetInt32(z, &x);
                   21096:   return x;
                   21097: }
                   21098: 
                   21099: /*
                   21100: ** The variable-length integer encoding is as follows:
                   21101: **
                   21102: ** KEY:
                   21103: **         A = 0xxxxxxx    7 bits of data and one flag bit
                   21104: **         B = 1xxxxxxx    7 bits of data and one flag bit
                   21105: **         C = xxxxxxxx    8 bits of data
                   21106: **
                   21107: **  7 bits - A
                   21108: ** 14 bits - BA
                   21109: ** 21 bits - BBA
                   21110: ** 28 bits - BBBA
                   21111: ** 35 bits - BBBBA
                   21112: ** 42 bits - BBBBBA
                   21113: ** 49 bits - BBBBBBA
                   21114: ** 56 bits - BBBBBBBA
                   21115: ** 64 bits - BBBBBBBBC
                   21116: */
                   21117: 
                   21118: /*
                   21119: ** Write a 64-bit variable-length integer to memory starting at p[0].
                   21120: ** The length of data write will be between 1 and 9 bytes.  The number
                   21121: ** of bytes written is returned.
                   21122: **
                   21123: ** A variable-length integer consists of the lower 7 bits of each byte
                   21124: ** for all bytes that have the 8th bit set and one byte with the 8th
                   21125: ** bit clear.  Except, if we get to the 9th byte, it stores the full
                   21126: ** 8 bits and is the last byte.
                   21127: */
                   21128: SQLITE_PRIVATE int sqlite3PutVarint(unsigned char *p, u64 v){
                   21129:   int i, j, n;
                   21130:   u8 buf[10];
                   21131:   if( v & (((u64)0xff000000)<<32) ){
                   21132:     p[8] = (u8)v;
                   21133:     v >>= 8;
                   21134:     for(i=7; i>=0; i--){
                   21135:       p[i] = (u8)((v & 0x7f) | 0x80);
                   21136:       v >>= 7;
                   21137:     }
                   21138:     return 9;
                   21139:   }    
                   21140:   n = 0;
                   21141:   do{
                   21142:     buf[n++] = (u8)((v & 0x7f) | 0x80);
                   21143:     v >>= 7;
                   21144:   }while( v!=0 );
                   21145:   buf[0] &= 0x7f;
                   21146:   assert( n<=9 );
                   21147:   for(i=0, j=n-1; j>=0; j--, i++){
                   21148:     p[i] = buf[j];
                   21149:   }
                   21150:   return n;
                   21151: }
                   21152: 
                   21153: /*
                   21154: ** This routine is a faster version of sqlite3PutVarint() that only
                   21155: ** works for 32-bit positive integers and which is optimized for
                   21156: ** the common case of small integers.  A MACRO version, putVarint32,
                   21157: ** is provided which inlines the single-byte case.  All code should use
                   21158: ** the MACRO version as this function assumes the single-byte case has
                   21159: ** already been handled.
                   21160: */
                   21161: SQLITE_PRIVATE int sqlite3PutVarint32(unsigned char *p, u32 v){
                   21162: #ifndef putVarint32
                   21163:   if( (v & ~0x7f)==0 ){
                   21164:     p[0] = v;
                   21165:     return 1;
                   21166:   }
                   21167: #endif
                   21168:   if( (v & ~0x3fff)==0 ){
                   21169:     p[0] = (u8)((v>>7) | 0x80);
                   21170:     p[1] = (u8)(v & 0x7f);
                   21171:     return 2;
                   21172:   }
                   21173:   return sqlite3PutVarint(p, v);
                   21174: }
                   21175: 
                   21176: /*
                   21177: ** Bitmasks used by sqlite3GetVarint().  These precomputed constants
                   21178: ** are defined here rather than simply putting the constant expressions
                   21179: ** inline in order to work around bugs in the RVT compiler.
                   21180: **
                   21181: ** SLOT_2_0     A mask for  (0x7f<<14) | 0x7f
                   21182: **
                   21183: ** SLOT_4_2_0   A mask for  (0x7f<<28) | SLOT_2_0
                   21184: */
                   21185: #define SLOT_2_0     0x001fc07f
                   21186: #define SLOT_4_2_0   0xf01fc07f
                   21187: 
                   21188: 
                   21189: /*
                   21190: ** Read a 64-bit variable-length integer from memory starting at p[0].
                   21191: ** Return the number of bytes read.  The value is stored in *v.
                   21192: */
                   21193: SQLITE_PRIVATE u8 sqlite3GetVarint(const unsigned char *p, u64 *v){
                   21194:   u32 a,b,s;
                   21195: 
                   21196:   a = *p;
                   21197:   /* a: p0 (unmasked) */
                   21198:   if (!(a&0x80))
                   21199:   {
                   21200:     *v = a;
                   21201:     return 1;
                   21202:   }
                   21203: 
                   21204:   p++;
                   21205:   b = *p;
                   21206:   /* b: p1 (unmasked) */
                   21207:   if (!(b&0x80))
                   21208:   {
                   21209:     a &= 0x7f;
                   21210:     a = a<<7;
                   21211:     a |= b;
                   21212:     *v = a;
                   21213:     return 2;
                   21214:   }
                   21215: 
                   21216:   /* Verify that constants are precomputed correctly */
                   21217:   assert( SLOT_2_0 == ((0x7f<<14) | (0x7f)) );
                   21218:   assert( SLOT_4_2_0 == ((0xfU<<28) | (0x7f<<14) | (0x7f)) );
                   21219: 
                   21220:   p++;
                   21221:   a = a<<14;
                   21222:   a |= *p;
                   21223:   /* a: p0<<14 | p2 (unmasked) */
                   21224:   if (!(a&0x80))
                   21225:   {
                   21226:     a &= SLOT_2_0;
                   21227:     b &= 0x7f;
                   21228:     b = b<<7;
                   21229:     a |= b;
                   21230:     *v = a;
                   21231:     return 3;
                   21232:   }
                   21233: 
                   21234:   /* CSE1 from below */
                   21235:   a &= SLOT_2_0;
                   21236:   p++;
                   21237:   b = b<<14;
                   21238:   b |= *p;
                   21239:   /* b: p1<<14 | p3 (unmasked) */
                   21240:   if (!(b&0x80))
                   21241:   {
                   21242:     b &= SLOT_2_0;
                   21243:     /* moved CSE1 up */
                   21244:     /* a &= (0x7f<<14)|(0x7f); */
                   21245:     a = a<<7;
                   21246:     a |= b;
                   21247:     *v = a;
                   21248:     return 4;
                   21249:   }
                   21250: 
                   21251:   /* a: p0<<14 | p2 (masked) */
                   21252:   /* b: p1<<14 | p3 (unmasked) */
                   21253:   /* 1:save off p0<<21 | p1<<14 | p2<<7 | p3 (masked) */
                   21254:   /* moved CSE1 up */
                   21255:   /* a &= (0x7f<<14)|(0x7f); */
                   21256:   b &= SLOT_2_0;
                   21257:   s = a;
                   21258:   /* s: p0<<14 | p2 (masked) */
                   21259: 
                   21260:   p++;
                   21261:   a = a<<14;
                   21262:   a |= *p;
                   21263:   /* a: p0<<28 | p2<<14 | p4 (unmasked) */
                   21264:   if (!(a&0x80))
                   21265:   {
                   21266:     /* we can skip these cause they were (effectively) done above in calc'ing s */
                   21267:     /* a &= (0x7f<<28)|(0x7f<<14)|(0x7f); */
                   21268:     /* b &= (0x7f<<14)|(0x7f); */
                   21269:     b = b<<7;
                   21270:     a |= b;
                   21271:     s = s>>18;
                   21272:     *v = ((u64)s)<<32 | a;
                   21273:     return 5;
                   21274:   }
                   21275: 
                   21276:   /* 2:save off p0<<21 | p1<<14 | p2<<7 | p3 (masked) */
                   21277:   s = s<<7;
                   21278:   s |= b;
                   21279:   /* s: p0<<21 | p1<<14 | p2<<7 | p3 (masked) */
                   21280: 
                   21281:   p++;
                   21282:   b = b<<14;
                   21283:   b |= *p;
                   21284:   /* b: p1<<28 | p3<<14 | p5 (unmasked) */
                   21285:   if (!(b&0x80))
                   21286:   {
                   21287:     /* we can skip this cause it was (effectively) done above in calc'ing s */
                   21288:     /* b &= (0x7f<<28)|(0x7f<<14)|(0x7f); */
                   21289:     a &= SLOT_2_0;
                   21290:     a = a<<7;
                   21291:     a |= b;
                   21292:     s = s>>18;
                   21293:     *v = ((u64)s)<<32 | a;
                   21294:     return 6;
                   21295:   }
                   21296: 
                   21297:   p++;
                   21298:   a = a<<14;
                   21299:   a |= *p;
                   21300:   /* a: p2<<28 | p4<<14 | p6 (unmasked) */
                   21301:   if (!(a&0x80))
                   21302:   {
                   21303:     a &= SLOT_4_2_0;
                   21304:     b &= SLOT_2_0;
                   21305:     b = b<<7;
                   21306:     a |= b;
                   21307:     s = s>>11;
                   21308:     *v = ((u64)s)<<32 | a;
                   21309:     return 7;
                   21310:   }
                   21311: 
                   21312:   /* CSE2 from below */
                   21313:   a &= SLOT_2_0;
                   21314:   p++;
                   21315:   b = b<<14;
                   21316:   b |= *p;
                   21317:   /* b: p3<<28 | p5<<14 | p7 (unmasked) */
                   21318:   if (!(b&0x80))
                   21319:   {
                   21320:     b &= SLOT_4_2_0;
                   21321:     /* moved CSE2 up */
                   21322:     /* a &= (0x7f<<14)|(0x7f); */
                   21323:     a = a<<7;
                   21324:     a |= b;
                   21325:     s = s>>4;
                   21326:     *v = ((u64)s)<<32 | a;
                   21327:     return 8;
                   21328:   }
                   21329: 
                   21330:   p++;
                   21331:   a = a<<15;
                   21332:   a |= *p;
                   21333:   /* a: p4<<29 | p6<<15 | p8 (unmasked) */
                   21334: 
                   21335:   /* moved CSE2 up */
                   21336:   /* a &= (0x7f<<29)|(0x7f<<15)|(0xff); */
                   21337:   b &= SLOT_2_0;
                   21338:   b = b<<8;
                   21339:   a |= b;
                   21340: 
                   21341:   s = s<<4;
                   21342:   b = p[-4];
                   21343:   b &= 0x7f;
                   21344:   b = b>>3;
                   21345:   s |= b;
                   21346: 
                   21347:   *v = ((u64)s)<<32 | a;
                   21348: 
                   21349:   return 9;
                   21350: }
                   21351: 
                   21352: /*
                   21353: ** Read a 32-bit variable-length integer from memory starting at p[0].
                   21354: ** Return the number of bytes read.  The value is stored in *v.
                   21355: **
                   21356: ** If the varint stored in p[0] is larger than can fit in a 32-bit unsigned
                   21357: ** integer, then set *v to 0xffffffff.
                   21358: **
                   21359: ** A MACRO version, getVarint32, is provided which inlines the 
                   21360: ** single-byte case.  All code should use the MACRO version as 
                   21361: ** this function assumes the single-byte case has already been handled.
                   21362: */
                   21363: SQLITE_PRIVATE u8 sqlite3GetVarint32(const unsigned char *p, u32 *v){
                   21364:   u32 a,b;
                   21365: 
                   21366:   /* The 1-byte case.  Overwhelmingly the most common.  Handled inline
                   21367:   ** by the getVarin32() macro */
                   21368:   a = *p;
                   21369:   /* a: p0 (unmasked) */
                   21370: #ifndef getVarint32
                   21371:   if (!(a&0x80))
                   21372:   {
                   21373:     /* Values between 0 and 127 */
                   21374:     *v = a;
                   21375:     return 1;
                   21376:   }
                   21377: #endif
                   21378: 
                   21379:   /* The 2-byte case */
                   21380:   p++;
                   21381:   b = *p;
                   21382:   /* b: p1 (unmasked) */
                   21383:   if (!(b&0x80))
                   21384:   {
                   21385:     /* Values between 128 and 16383 */
                   21386:     a &= 0x7f;
                   21387:     a = a<<7;
                   21388:     *v = a | b;
                   21389:     return 2;
                   21390:   }
                   21391: 
                   21392:   /* The 3-byte case */
                   21393:   p++;
                   21394:   a = a<<14;
                   21395:   a |= *p;
                   21396:   /* a: p0<<14 | p2 (unmasked) */
                   21397:   if (!(a&0x80))
                   21398:   {
                   21399:     /* Values between 16384 and 2097151 */
                   21400:     a &= (0x7f<<14)|(0x7f);
                   21401:     b &= 0x7f;
                   21402:     b = b<<7;
                   21403:     *v = a | b;
                   21404:     return 3;
                   21405:   }
                   21406: 
                   21407:   /* A 32-bit varint is used to store size information in btrees.
                   21408:   ** Objects are rarely larger than 2MiB limit of a 3-byte varint.
                   21409:   ** A 3-byte varint is sufficient, for example, to record the size
                   21410:   ** of a 1048569-byte BLOB or string.
                   21411:   **
                   21412:   ** We only unroll the first 1-, 2-, and 3- byte cases.  The very
                   21413:   ** rare larger cases can be handled by the slower 64-bit varint
                   21414:   ** routine.
                   21415:   */
                   21416: #if 1
                   21417:   {
                   21418:     u64 v64;
                   21419:     u8 n;
                   21420: 
                   21421:     p -= 2;
                   21422:     n = sqlite3GetVarint(p, &v64);
                   21423:     assert( n>3 && n<=9 );
                   21424:     if( (v64 & SQLITE_MAX_U32)!=v64 ){
                   21425:       *v = 0xffffffff;
                   21426:     }else{
                   21427:       *v = (u32)v64;
                   21428:     }
                   21429:     return n;
                   21430:   }
                   21431: 
                   21432: #else
                   21433:   /* For following code (kept for historical record only) shows an
                   21434:   ** unrolling for the 3- and 4-byte varint cases.  This code is
                   21435:   ** slightly faster, but it is also larger and much harder to test.
                   21436:   */
                   21437:   p++;
                   21438:   b = b<<14;
                   21439:   b |= *p;
                   21440:   /* b: p1<<14 | p3 (unmasked) */
                   21441:   if (!(b&0x80))
                   21442:   {
                   21443:     /* Values between 2097152 and 268435455 */
                   21444:     b &= (0x7f<<14)|(0x7f);
                   21445:     a &= (0x7f<<14)|(0x7f);
                   21446:     a = a<<7;
                   21447:     *v = a | b;
                   21448:     return 4;
                   21449:   }
                   21450: 
                   21451:   p++;
                   21452:   a = a<<14;
                   21453:   a |= *p;
                   21454:   /* a: p0<<28 | p2<<14 | p4 (unmasked) */
                   21455:   if (!(a&0x80))
                   21456:   {
                   21457:     /* Values  between 268435456 and 34359738367 */
                   21458:     a &= SLOT_4_2_0;
                   21459:     b &= SLOT_4_2_0;
                   21460:     b = b<<7;
                   21461:     *v = a | b;
                   21462:     return 5;
                   21463:   }
                   21464: 
                   21465:   /* We can only reach this point when reading a corrupt database
                   21466:   ** file.  In that case we are not in any hurry.  Use the (relatively
                   21467:   ** slow) general-purpose sqlite3GetVarint() routine to extract the
                   21468:   ** value. */
                   21469:   {
                   21470:     u64 v64;
                   21471:     u8 n;
                   21472: 
                   21473:     p -= 4;
                   21474:     n = sqlite3GetVarint(p, &v64);
                   21475:     assert( n>5 && n<=9 );
                   21476:     *v = (u32)v64;
                   21477:     return n;
                   21478:   }
                   21479: #endif
                   21480: }
                   21481: 
                   21482: /*
                   21483: ** Return the number of bytes that will be needed to store the given
                   21484: ** 64-bit integer.
                   21485: */
                   21486: SQLITE_PRIVATE int sqlite3VarintLen(u64 v){
                   21487:   int i = 0;
                   21488:   do{
                   21489:     i++;
                   21490:     v >>= 7;
                   21491:   }while( v!=0 && ALWAYS(i<9) );
                   21492:   return i;
                   21493: }
                   21494: 
                   21495: 
                   21496: /*
                   21497: ** Read or write a four-byte big-endian integer value.
                   21498: */
                   21499: SQLITE_PRIVATE u32 sqlite3Get4byte(const u8 *p){
                   21500:   return (p[0]<<24) | (p[1]<<16) | (p[2]<<8) | p[3];
                   21501: }
                   21502: SQLITE_PRIVATE void sqlite3Put4byte(unsigned char *p, u32 v){
                   21503:   p[0] = (u8)(v>>24);
                   21504:   p[1] = (u8)(v>>16);
                   21505:   p[2] = (u8)(v>>8);
                   21506:   p[3] = (u8)v;
                   21507: }
                   21508: 
                   21509: 
                   21510: 
                   21511: /*
                   21512: ** Translate a single byte of Hex into an integer.
                   21513: ** This routine only works if h really is a valid hexadecimal
                   21514: ** character:  0..9a..fA..F
                   21515: */
                   21516: SQLITE_PRIVATE u8 sqlite3HexToInt(int h){
                   21517:   assert( (h>='0' && h<='9') ||  (h>='a' && h<='f') ||  (h>='A' && h<='F') );
                   21518: #ifdef SQLITE_ASCII
                   21519:   h += 9*(1&(h>>6));
                   21520: #endif
                   21521: #ifdef SQLITE_EBCDIC
                   21522:   h += 9*(1&~(h>>4));
                   21523: #endif
                   21524:   return (u8)(h & 0xf);
                   21525: }
                   21526: 
                   21527: #if !defined(SQLITE_OMIT_BLOB_LITERAL) || defined(SQLITE_HAS_CODEC)
                   21528: /*
                   21529: ** Convert a BLOB literal of the form "x'hhhhhh'" into its binary
                   21530: ** value.  Return a pointer to its binary value.  Space to hold the
                   21531: ** binary value has been obtained from malloc and must be freed by
                   21532: ** the calling routine.
                   21533: */
                   21534: SQLITE_PRIVATE void *sqlite3HexToBlob(sqlite3 *db, const char *z, int n){
                   21535:   char *zBlob;
                   21536:   int i;
                   21537: 
                   21538:   zBlob = (char *)sqlite3DbMallocRaw(db, n/2 + 1);
                   21539:   n--;
                   21540:   if( zBlob ){
                   21541:     for(i=0; i<n; i+=2){
                   21542:       zBlob[i/2] = (sqlite3HexToInt(z[i])<<4) | sqlite3HexToInt(z[i+1]);
                   21543:     }
                   21544:     zBlob[i/2] = 0;
                   21545:   }
                   21546:   return zBlob;
                   21547: }
                   21548: #endif /* !SQLITE_OMIT_BLOB_LITERAL || SQLITE_HAS_CODEC */
                   21549: 
                   21550: /*
                   21551: ** Log an error that is an API call on a connection pointer that should
                   21552: ** not have been used.  The "type" of connection pointer is given as the
                   21553: ** argument.  The zType is a word like "NULL" or "closed" or "invalid".
                   21554: */
                   21555: static void logBadConnection(const char *zType){
                   21556:   sqlite3_log(SQLITE_MISUSE, 
                   21557:      "API call with %s database connection pointer",
                   21558:      zType
                   21559:   );
                   21560: }
                   21561: 
                   21562: /*
                   21563: ** Check to make sure we have a valid db pointer.  This test is not
                   21564: ** foolproof but it does provide some measure of protection against
                   21565: ** misuse of the interface such as passing in db pointers that are
                   21566: ** NULL or which have been previously closed.  If this routine returns
                   21567: ** 1 it means that the db pointer is valid and 0 if it should not be
                   21568: ** dereferenced for any reason.  The calling function should invoke
                   21569: ** SQLITE_MISUSE immediately.
                   21570: **
                   21571: ** sqlite3SafetyCheckOk() requires that the db pointer be valid for
                   21572: ** use.  sqlite3SafetyCheckSickOrOk() allows a db pointer that failed to
                   21573: ** open properly and is not fit for general use but which can be
                   21574: ** used as an argument to sqlite3_errmsg() or sqlite3_close().
                   21575: */
                   21576: SQLITE_PRIVATE int sqlite3SafetyCheckOk(sqlite3 *db){
                   21577:   u32 magic;
                   21578:   if( db==0 ){
                   21579:     logBadConnection("NULL");
                   21580:     return 0;
                   21581:   }
                   21582:   magic = db->magic;
                   21583:   if( magic!=SQLITE_MAGIC_OPEN ){
                   21584:     if( sqlite3SafetyCheckSickOrOk(db) ){
                   21585:       testcase( sqlite3GlobalConfig.xLog!=0 );
                   21586:       logBadConnection("unopened");
                   21587:     }
                   21588:     return 0;
                   21589:   }else{
                   21590:     return 1;
                   21591:   }
                   21592: }
                   21593: SQLITE_PRIVATE int sqlite3SafetyCheckSickOrOk(sqlite3 *db){
                   21594:   u32 magic;
                   21595:   magic = db->magic;
                   21596:   if( magic!=SQLITE_MAGIC_SICK &&
                   21597:       magic!=SQLITE_MAGIC_OPEN &&
                   21598:       magic!=SQLITE_MAGIC_BUSY ){
                   21599:     testcase( sqlite3GlobalConfig.xLog!=0 );
                   21600:     logBadConnection("invalid");
                   21601:     return 0;
                   21602:   }else{
                   21603:     return 1;
                   21604:   }
                   21605: }
                   21606: 
                   21607: /*
                   21608: ** Attempt to add, substract, or multiply the 64-bit signed value iB against
                   21609: ** the other 64-bit signed integer at *pA and store the result in *pA.
                   21610: ** Return 0 on success.  Or if the operation would have resulted in an
                   21611: ** overflow, leave *pA unchanged and return 1.
                   21612: */
                   21613: SQLITE_PRIVATE int sqlite3AddInt64(i64 *pA, i64 iB){
                   21614:   i64 iA = *pA;
                   21615:   testcase( iA==0 ); testcase( iA==1 );
                   21616:   testcase( iB==-1 ); testcase( iB==0 );
                   21617:   if( iB>=0 ){
                   21618:     testcase( iA>0 && LARGEST_INT64 - iA == iB );
                   21619:     testcase( iA>0 && LARGEST_INT64 - iA == iB - 1 );
                   21620:     if( iA>0 && LARGEST_INT64 - iA < iB ) return 1;
                   21621:     *pA += iB;
                   21622:   }else{
                   21623:     testcase( iA<0 && -(iA + LARGEST_INT64) == iB + 1 );
                   21624:     testcase( iA<0 && -(iA + LARGEST_INT64) == iB + 2 );
                   21625:     if( iA<0 && -(iA + LARGEST_INT64) > iB + 1 ) return 1;
                   21626:     *pA += iB;
                   21627:   }
                   21628:   return 0; 
                   21629: }
                   21630: SQLITE_PRIVATE int sqlite3SubInt64(i64 *pA, i64 iB){
                   21631:   testcase( iB==SMALLEST_INT64+1 );
                   21632:   if( iB==SMALLEST_INT64 ){
                   21633:     testcase( (*pA)==(-1) ); testcase( (*pA)==0 );
                   21634:     if( (*pA)>=0 ) return 1;
                   21635:     *pA -= iB;
                   21636:     return 0;
                   21637:   }else{
                   21638:     return sqlite3AddInt64(pA, -iB);
                   21639:   }
                   21640: }
                   21641: #define TWOPOWER32 (((i64)1)<<32)
                   21642: #define TWOPOWER31 (((i64)1)<<31)
                   21643: SQLITE_PRIVATE int sqlite3MulInt64(i64 *pA, i64 iB){
                   21644:   i64 iA = *pA;
                   21645:   i64 iA1, iA0, iB1, iB0, r;
                   21646: 
                   21647:   iA1 = iA/TWOPOWER32;
                   21648:   iA0 = iA % TWOPOWER32;
                   21649:   iB1 = iB/TWOPOWER32;
                   21650:   iB0 = iB % TWOPOWER32;
                   21651:   if( iA1*iB1 != 0 ) return 1;
                   21652:   assert( iA1*iB0==0 || iA0*iB1==0 );
                   21653:   r = iA1*iB0 + iA0*iB1;
                   21654:   testcase( r==(-TWOPOWER31)-1 );
                   21655:   testcase( r==(-TWOPOWER31) );
                   21656:   testcase( r==TWOPOWER31 );
                   21657:   testcase( r==TWOPOWER31-1 );
                   21658:   if( r<(-TWOPOWER31) || r>=TWOPOWER31 ) return 1;
                   21659:   r *= TWOPOWER32;
                   21660:   if( sqlite3AddInt64(&r, iA0*iB0) ) return 1;
                   21661:   *pA = r;
                   21662:   return 0;
                   21663: }
                   21664: 
                   21665: /*
                   21666: ** Compute the absolute value of a 32-bit signed integer, of possible.  Or 
                   21667: ** if the integer has a value of -2147483648, return +2147483647
                   21668: */
                   21669: SQLITE_PRIVATE int sqlite3AbsInt32(int x){
                   21670:   if( x>=0 ) return x;
                   21671:   if( x==(int)0x80000000 ) return 0x7fffffff;
                   21672:   return -x;
                   21673: }
                   21674: 
                   21675: #ifdef SQLITE_ENABLE_8_3_NAMES
                   21676: /*
                   21677: ** If SQLITE_ENABLE_8_3_NAME is set at compile-time and if the database
                   21678: ** filename in zBaseFilename is a URI with the "8_3_names=1" parameter and
                   21679: ** if filename in z[] has a suffix (a.k.a. "extension") that is longer than
                   21680: ** three characters, then shorten the suffix on z[] to be the last three
                   21681: ** characters of the original suffix.
                   21682: **
                   21683: ** Examples:
                   21684: **
                   21685: **     test.db-journal    =>   test.nal
                   21686: **     test.db-wal        =>   test.wal
                   21687: **     test.db-shm        =>   test.shm
                   21688: */
                   21689: SQLITE_PRIVATE void sqlite3FileSuffix3(const char *zBaseFilename, char *z){
                   21690:   const char *zOk;
                   21691:   zOk = sqlite3_uri_parameter(zBaseFilename, "8_3_names");
                   21692:   if( zOk && sqlite3GetBoolean(zOk) ){
                   21693:     int i, sz;
                   21694:     sz = sqlite3Strlen30(z);
                   21695:     for(i=sz-1; i>0 && z[i]!='/' && z[i]!='.'; i--){}
                   21696:     if( z[i]=='.' && ALWAYS(sz>i+4) ) memcpy(&z[i+1], &z[sz-3], 4);
                   21697:   }
                   21698: }
                   21699: #endif
                   21700: 
                   21701: /************** End of util.c ************************************************/
                   21702: /************** Begin file hash.c ********************************************/
                   21703: /*
                   21704: ** 2001 September 22
                   21705: **
                   21706: ** The author disclaims copyright to this source code.  In place of
                   21707: ** a legal notice, here is a blessing:
                   21708: **
                   21709: **    May you do good and not evil.
                   21710: **    May you find forgiveness for yourself and forgive others.
                   21711: **    May you share freely, never taking more than you give.
                   21712: **
                   21713: *************************************************************************
                   21714: ** This is the implementation of generic hash-tables
                   21715: ** used in SQLite.
                   21716: */
                   21717: 
                   21718: /* Turn bulk memory into a hash table object by initializing the
                   21719: ** fields of the Hash structure.
                   21720: **
                   21721: ** "pNew" is a pointer to the hash table that is to be initialized.
                   21722: */
                   21723: SQLITE_PRIVATE void sqlite3HashInit(Hash *pNew){
                   21724:   assert( pNew!=0 );
                   21725:   pNew->first = 0;
                   21726:   pNew->count = 0;
                   21727:   pNew->htsize = 0;
                   21728:   pNew->ht = 0;
                   21729: }
                   21730: 
                   21731: /* Remove all entries from a hash table.  Reclaim all memory.
                   21732: ** Call this routine to delete a hash table or to reset a hash table
                   21733: ** to the empty state.
                   21734: */
                   21735: SQLITE_PRIVATE void sqlite3HashClear(Hash *pH){
                   21736:   HashElem *elem;         /* For looping over all elements of the table */
                   21737: 
                   21738:   assert( pH!=0 );
                   21739:   elem = pH->first;
                   21740:   pH->first = 0;
                   21741:   sqlite3_free(pH->ht);
                   21742:   pH->ht = 0;
                   21743:   pH->htsize = 0;
                   21744:   while( elem ){
                   21745:     HashElem *next_elem = elem->next;
                   21746:     sqlite3_free(elem);
                   21747:     elem = next_elem;
                   21748:   }
                   21749:   pH->count = 0;
                   21750: }
                   21751: 
                   21752: /*
                   21753: ** The hashing function.
                   21754: */
                   21755: static unsigned int strHash(const char *z, int nKey){
                   21756:   int h = 0;
                   21757:   assert( nKey>=0 );
                   21758:   while( nKey > 0  ){
                   21759:     h = (h<<3) ^ h ^ sqlite3UpperToLower[(unsigned char)*z++];
                   21760:     nKey--;
                   21761:   }
                   21762:   return h;
                   21763: }
                   21764: 
                   21765: 
                   21766: /* Link pNew element into the hash table pH.  If pEntry!=0 then also
                   21767: ** insert pNew into the pEntry hash bucket.
                   21768: */
                   21769: static void insertElement(
                   21770:   Hash *pH,              /* The complete hash table */
                   21771:   struct _ht *pEntry,    /* The entry into which pNew is inserted */
                   21772:   HashElem *pNew         /* The element to be inserted */
                   21773: ){
                   21774:   HashElem *pHead;       /* First element already in pEntry */
                   21775:   if( pEntry ){
                   21776:     pHead = pEntry->count ? pEntry->chain : 0;
                   21777:     pEntry->count++;
                   21778:     pEntry->chain = pNew;
                   21779:   }else{
                   21780:     pHead = 0;
                   21781:   }
                   21782:   if( pHead ){
                   21783:     pNew->next = pHead;
                   21784:     pNew->prev = pHead->prev;
                   21785:     if( pHead->prev ){ pHead->prev->next = pNew; }
                   21786:     else             { pH->first = pNew; }
                   21787:     pHead->prev = pNew;
                   21788:   }else{
                   21789:     pNew->next = pH->first;
                   21790:     if( pH->first ){ pH->first->prev = pNew; }
                   21791:     pNew->prev = 0;
                   21792:     pH->first = pNew;
                   21793:   }
                   21794: }
                   21795: 
                   21796: 
                   21797: /* Resize the hash table so that it cantains "new_size" buckets.
                   21798: **
                   21799: ** The hash table might fail to resize if sqlite3_malloc() fails or
                   21800: ** if the new size is the same as the prior size.
                   21801: ** Return TRUE if the resize occurs and false if not.
                   21802: */
                   21803: static int rehash(Hash *pH, unsigned int new_size){
                   21804:   struct _ht *new_ht;            /* The new hash table */
                   21805:   HashElem *elem, *next_elem;    /* For looping over existing elements */
                   21806: 
                   21807: #if SQLITE_MALLOC_SOFT_LIMIT>0
                   21808:   if( new_size*sizeof(struct _ht)>SQLITE_MALLOC_SOFT_LIMIT ){
                   21809:     new_size = SQLITE_MALLOC_SOFT_LIMIT/sizeof(struct _ht);
                   21810:   }
                   21811:   if( new_size==pH->htsize ) return 0;
                   21812: #endif
                   21813: 
                   21814:   /* The inability to allocates space for a larger hash table is
                   21815:   ** a performance hit but it is not a fatal error.  So mark the
                   21816:   ** allocation as a benign.
                   21817:   */
                   21818:   sqlite3BeginBenignMalloc();
                   21819:   new_ht = (struct _ht *)sqlite3Malloc( new_size*sizeof(struct _ht) );
                   21820:   sqlite3EndBenignMalloc();
                   21821: 
                   21822:   if( new_ht==0 ) return 0;
                   21823:   sqlite3_free(pH->ht);
                   21824:   pH->ht = new_ht;
                   21825:   pH->htsize = new_size = sqlite3MallocSize(new_ht)/sizeof(struct _ht);
                   21826:   memset(new_ht, 0, new_size*sizeof(struct _ht));
                   21827:   for(elem=pH->first, pH->first=0; elem; elem = next_elem){
                   21828:     unsigned int h = strHash(elem->pKey, elem->nKey) % new_size;
                   21829:     next_elem = elem->next;
                   21830:     insertElement(pH, &new_ht[h], elem);
                   21831:   }
                   21832:   return 1;
                   21833: }
                   21834: 
                   21835: /* This function (for internal use only) locates an element in an
                   21836: ** hash table that matches the given key.  The hash for this key has
                   21837: ** already been computed and is passed as the 4th parameter.
                   21838: */
                   21839: static HashElem *findElementGivenHash(
                   21840:   const Hash *pH,     /* The pH to be searched */
                   21841:   const char *pKey,   /* The key we are searching for */
                   21842:   int nKey,           /* Bytes in key (not counting zero terminator) */
                   21843:   unsigned int h      /* The hash for this key. */
                   21844: ){
                   21845:   HashElem *elem;                /* Used to loop thru the element list */
                   21846:   int count;                     /* Number of elements left to test */
                   21847: 
                   21848:   if( pH->ht ){
                   21849:     struct _ht *pEntry = &pH->ht[h];
                   21850:     elem = pEntry->chain;
                   21851:     count = pEntry->count;
                   21852:   }else{
                   21853:     elem = pH->first;
                   21854:     count = pH->count;
                   21855:   }
                   21856:   while( count-- && ALWAYS(elem) ){
                   21857:     if( elem->nKey==nKey && sqlite3StrNICmp(elem->pKey,pKey,nKey)==0 ){ 
                   21858:       return elem;
                   21859:     }
                   21860:     elem = elem->next;
                   21861:   }
                   21862:   return 0;
                   21863: }
                   21864: 
                   21865: /* Remove a single entry from the hash table given a pointer to that
                   21866: ** element and a hash on the element's key.
                   21867: */
                   21868: static void removeElementGivenHash(
                   21869:   Hash *pH,         /* The pH containing "elem" */
                   21870:   HashElem* elem,   /* The element to be removed from the pH */
                   21871:   unsigned int h    /* Hash value for the element */
                   21872: ){
                   21873:   struct _ht *pEntry;
                   21874:   if( elem->prev ){
                   21875:     elem->prev->next = elem->next; 
                   21876:   }else{
                   21877:     pH->first = elem->next;
                   21878:   }
                   21879:   if( elem->next ){
                   21880:     elem->next->prev = elem->prev;
                   21881:   }
                   21882:   if( pH->ht ){
                   21883:     pEntry = &pH->ht[h];
                   21884:     if( pEntry->chain==elem ){
                   21885:       pEntry->chain = elem->next;
                   21886:     }
                   21887:     pEntry->count--;
                   21888:     assert( pEntry->count>=0 );
                   21889:   }
                   21890:   sqlite3_free( elem );
                   21891:   pH->count--;
                   21892:   if( pH->count<=0 ){
                   21893:     assert( pH->first==0 );
                   21894:     assert( pH->count==0 );
                   21895:     sqlite3HashClear(pH);
                   21896:   }
                   21897: }
                   21898: 
                   21899: /* Attempt to locate an element of the hash table pH with a key
                   21900: ** that matches pKey,nKey.  Return the data for this element if it is
                   21901: ** found, or NULL if there is no match.
                   21902: */
                   21903: SQLITE_PRIVATE void *sqlite3HashFind(const Hash *pH, const char *pKey, int nKey){
                   21904:   HashElem *elem;    /* The element that matches key */
                   21905:   unsigned int h;    /* A hash on key */
                   21906: 
                   21907:   assert( pH!=0 );
                   21908:   assert( pKey!=0 );
                   21909:   assert( nKey>=0 );
                   21910:   if( pH->ht ){
                   21911:     h = strHash(pKey, nKey) % pH->htsize;
                   21912:   }else{
                   21913:     h = 0;
                   21914:   }
                   21915:   elem = findElementGivenHash(pH, pKey, nKey, h);
                   21916:   return elem ? elem->data : 0;
                   21917: }
                   21918: 
                   21919: /* Insert an element into the hash table pH.  The key is pKey,nKey
                   21920: ** and the data is "data".
                   21921: **
                   21922: ** If no element exists with a matching key, then a new
                   21923: ** element is created and NULL is returned.
                   21924: **
                   21925: ** If another element already exists with the same key, then the
                   21926: ** new data replaces the old data and the old data is returned.
                   21927: ** The key is not copied in this instance.  If a malloc fails, then
                   21928: ** the new data is returned and the hash table is unchanged.
                   21929: **
                   21930: ** If the "data" parameter to this function is NULL, then the
                   21931: ** element corresponding to "key" is removed from the hash table.
                   21932: */
                   21933: SQLITE_PRIVATE void *sqlite3HashInsert(Hash *pH, const char *pKey, int nKey, void *data){
                   21934:   unsigned int h;       /* the hash of the key modulo hash table size */
                   21935:   HashElem *elem;       /* Used to loop thru the element list */
                   21936:   HashElem *new_elem;   /* New element added to the pH */
                   21937: 
                   21938:   assert( pH!=0 );
                   21939:   assert( pKey!=0 );
                   21940:   assert( nKey>=0 );
                   21941:   if( pH->htsize ){
                   21942:     h = strHash(pKey, nKey) % pH->htsize;
                   21943:   }else{
                   21944:     h = 0;
                   21945:   }
                   21946:   elem = findElementGivenHash(pH,pKey,nKey,h);
                   21947:   if( elem ){
                   21948:     void *old_data = elem->data;
                   21949:     if( data==0 ){
                   21950:       removeElementGivenHash(pH,elem,h);
                   21951:     }else{
                   21952:       elem->data = data;
                   21953:       elem->pKey = pKey;
                   21954:       assert(nKey==elem->nKey);
                   21955:     }
                   21956:     return old_data;
                   21957:   }
                   21958:   if( data==0 ) return 0;
                   21959:   new_elem = (HashElem*)sqlite3Malloc( sizeof(HashElem) );
                   21960:   if( new_elem==0 ) return data;
                   21961:   new_elem->pKey = pKey;
                   21962:   new_elem->nKey = nKey;
                   21963:   new_elem->data = data;
                   21964:   pH->count++;
                   21965:   if( pH->count>=10 && pH->count > 2*pH->htsize ){
                   21966:     if( rehash(pH, pH->count*2) ){
                   21967:       assert( pH->htsize>0 );
                   21968:       h = strHash(pKey, nKey) % pH->htsize;
                   21969:     }
                   21970:   }
                   21971:   if( pH->ht ){
                   21972:     insertElement(pH, &pH->ht[h], new_elem);
                   21973:   }else{
                   21974:     insertElement(pH, 0, new_elem);
                   21975:   }
                   21976:   return 0;
                   21977: }
                   21978: 
                   21979: /************** End of hash.c ************************************************/
                   21980: /************** Begin file opcodes.c *****************************************/
                   21981: /* Automatically generated.  Do not edit */
                   21982: /* See the mkopcodec.awk script for details. */
                   21983: #if !defined(SQLITE_OMIT_EXPLAIN) || !defined(NDEBUG) || defined(VDBE_PROFILE) || defined(SQLITE_DEBUG)
                   21984: SQLITE_PRIVATE const char *sqlite3OpcodeName(int i){
                   21985:  static const char *const azName[] = { "?",
                   21986:      /*   1 */ "Goto",
                   21987:      /*   2 */ "Gosub",
                   21988:      /*   3 */ "Return",
                   21989:      /*   4 */ "Yield",
                   21990:      /*   5 */ "HaltIfNull",
                   21991:      /*   6 */ "Halt",
                   21992:      /*   7 */ "Integer",
                   21993:      /*   8 */ "Int64",
                   21994:      /*   9 */ "String",
                   21995:      /*  10 */ "Null",
                   21996:      /*  11 */ "Blob",
                   21997:      /*  12 */ "Variable",
                   21998:      /*  13 */ "Move",
                   21999:      /*  14 */ "Copy",
                   22000:      /*  15 */ "SCopy",
                   22001:      /*  16 */ "ResultRow",
                   22002:      /*  17 */ "CollSeq",
                   22003:      /*  18 */ "Function",
                   22004:      /*  19 */ "Not",
                   22005:      /*  20 */ "AddImm",
                   22006:      /*  21 */ "MustBeInt",
                   22007:      /*  22 */ "RealAffinity",
                   22008:      /*  23 */ "Permutation",
                   22009:      /*  24 */ "Compare",
                   22010:      /*  25 */ "Jump",
                   22011:      /*  26 */ "If",
                   22012:      /*  27 */ "IfNot",
                   22013:      /*  28 */ "Column",
                   22014:      /*  29 */ "Affinity",
                   22015:      /*  30 */ "MakeRecord",
                   22016:      /*  31 */ "Count",
                   22017:      /*  32 */ "Savepoint",
                   22018:      /*  33 */ "AutoCommit",
                   22019:      /*  34 */ "Transaction",
                   22020:      /*  35 */ "ReadCookie",
                   22021:      /*  36 */ "SetCookie",
                   22022:      /*  37 */ "VerifyCookie",
                   22023:      /*  38 */ "OpenRead",
                   22024:      /*  39 */ "OpenWrite",
                   22025:      /*  40 */ "OpenAutoindex",
                   22026:      /*  41 */ "OpenEphemeral",
                   22027:      /*  42 */ "OpenPseudo",
                   22028:      /*  43 */ "Close",
                   22029:      /*  44 */ "SeekLt",
                   22030:      /*  45 */ "SeekLe",
                   22031:      /*  46 */ "SeekGe",
                   22032:      /*  47 */ "SeekGt",
                   22033:      /*  48 */ "Seek",
                   22034:      /*  49 */ "NotFound",
                   22035:      /*  50 */ "Found",
                   22036:      /*  51 */ "IsUnique",
                   22037:      /*  52 */ "NotExists",
                   22038:      /*  53 */ "Sequence",
                   22039:      /*  54 */ "NewRowid",
                   22040:      /*  55 */ "Insert",
                   22041:      /*  56 */ "InsertInt",
                   22042:      /*  57 */ "Delete",
                   22043:      /*  58 */ "ResetCount",
                   22044:      /*  59 */ "RowKey",
                   22045:      /*  60 */ "RowData",
                   22046:      /*  61 */ "Rowid",
                   22047:      /*  62 */ "NullRow",
                   22048:      /*  63 */ "Last",
                   22049:      /*  64 */ "Sort",
                   22050:      /*  65 */ "Rewind",
                   22051:      /*  66 */ "Prev",
                   22052:      /*  67 */ "Next",
                   22053:      /*  68 */ "Or",
                   22054:      /*  69 */ "And",
                   22055:      /*  70 */ "IdxInsert",
                   22056:      /*  71 */ "IdxDelete",
                   22057:      /*  72 */ "IdxRowid",
                   22058:      /*  73 */ "IsNull",
                   22059:      /*  74 */ "NotNull",
                   22060:      /*  75 */ "Ne",
                   22061:      /*  76 */ "Eq",
                   22062:      /*  77 */ "Gt",
                   22063:      /*  78 */ "Le",
                   22064:      /*  79 */ "Lt",
                   22065:      /*  80 */ "Ge",
                   22066:      /*  81 */ "IdxLT",
                   22067:      /*  82 */ "BitAnd",
                   22068:      /*  83 */ "BitOr",
                   22069:      /*  84 */ "ShiftLeft",
                   22070:      /*  85 */ "ShiftRight",
                   22071:      /*  86 */ "Add",
                   22072:      /*  87 */ "Subtract",
                   22073:      /*  88 */ "Multiply",
                   22074:      /*  89 */ "Divide",
                   22075:      /*  90 */ "Remainder",
                   22076:      /*  91 */ "Concat",
                   22077:      /*  92 */ "IdxGE",
                   22078:      /*  93 */ "BitNot",
                   22079:      /*  94 */ "String8",
                   22080:      /*  95 */ "Destroy",
                   22081:      /*  96 */ "Clear",
                   22082:      /*  97 */ "CreateIndex",
                   22083:      /*  98 */ "CreateTable",
                   22084:      /*  99 */ "ParseSchema",
                   22085:      /* 100 */ "LoadAnalysis",
                   22086:      /* 101 */ "DropTable",
                   22087:      /* 102 */ "DropIndex",
                   22088:      /* 103 */ "DropTrigger",
                   22089:      /* 104 */ "IntegrityCk",
                   22090:      /* 105 */ "RowSetAdd",
                   22091:      /* 106 */ "RowSetRead",
                   22092:      /* 107 */ "RowSetTest",
                   22093:      /* 108 */ "Program",
                   22094:      /* 109 */ "Param",
                   22095:      /* 110 */ "FkCounter",
                   22096:      /* 111 */ "FkIfZero",
                   22097:      /* 112 */ "MemMax",
                   22098:      /* 113 */ "IfPos",
                   22099:      /* 114 */ "IfNeg",
                   22100:      /* 115 */ "IfZero",
                   22101:      /* 116 */ "AggStep",
                   22102:      /* 117 */ "AggFinal",
                   22103:      /* 118 */ "Checkpoint",
                   22104:      /* 119 */ "JournalMode",
                   22105:      /* 120 */ "Vacuum",
                   22106:      /* 121 */ "IncrVacuum",
                   22107:      /* 122 */ "Expire",
                   22108:      /* 123 */ "TableLock",
                   22109:      /* 124 */ "VBegin",
                   22110:      /* 125 */ "VCreate",
                   22111:      /* 126 */ "VDestroy",
                   22112:      /* 127 */ "VOpen",
                   22113:      /* 128 */ "VFilter",
                   22114:      /* 129 */ "VColumn",
                   22115:      /* 130 */ "Real",
                   22116:      /* 131 */ "VNext",
                   22117:      /* 132 */ "VRename",
                   22118:      /* 133 */ "VUpdate",
                   22119:      /* 134 */ "Pagecount",
                   22120:      /* 135 */ "MaxPgcnt",
                   22121:      /* 136 */ "Trace",
                   22122:      /* 137 */ "Noop",
                   22123:      /* 138 */ "Explain",
                   22124:      /* 139 */ "NotUsed_139",
                   22125:      /* 140 */ "NotUsed_140",
                   22126:      /* 141 */ "ToText",
                   22127:      /* 142 */ "ToBlob",
                   22128:      /* 143 */ "ToNumeric",
                   22129:      /* 144 */ "ToInt",
                   22130:      /* 145 */ "ToReal",
                   22131:   };
                   22132:   return azName[i];
                   22133: }
                   22134: #endif
                   22135: 
                   22136: /************** End of opcodes.c *********************************************/
                   22137: /************** Begin file os_os2.c ******************************************/
                   22138: /*
                   22139: ** 2006 Feb 14
                   22140: **
                   22141: ** The author disclaims copyright to this source code.  In place of
                   22142: ** a legal notice, here is a blessing:
                   22143: **
                   22144: **    May you do good and not evil.
                   22145: **    May you find forgiveness for yourself and forgive others.
                   22146: **    May you share freely, never taking more than you give.
                   22147: **
                   22148: ******************************************************************************
                   22149: **
                   22150: ** This file contains code that is specific to OS/2.
                   22151: */
                   22152: 
                   22153: 
                   22154: #if SQLITE_OS_OS2
                   22155: 
                   22156: /*
                   22157: ** A Note About Memory Allocation:
                   22158: **
                   22159: ** This driver uses malloc()/free() directly rather than going through
                   22160: ** the SQLite-wrappers sqlite3_malloc()/sqlite3_free().  Those wrappers
                   22161: ** are designed for use on embedded systems where memory is scarce and
                   22162: ** malloc failures happen frequently.  OS/2 does not typically run on
                   22163: ** embedded systems, and when it does the developers normally have bigger
                   22164: ** problems to worry about than running out of memory.  So there is not
                   22165: ** a compelling need to use the wrappers.
                   22166: **
                   22167: ** But there is a good reason to not use the wrappers.  If we use the
                   22168: ** wrappers then we will get simulated malloc() failures within this
                   22169: ** driver.  And that causes all kinds of problems for our tests.  We
                   22170: ** could enhance SQLite to deal with simulated malloc failures within
                   22171: ** the OS driver, but the code to deal with those failure would not
                   22172: ** be exercised on Linux (which does not need to malloc() in the driver)
                   22173: ** and so we would have difficulty writing coverage tests for that
                   22174: ** code.  Better to leave the code out, we think.
                   22175: **
                   22176: ** The point of this discussion is as follows:  When creating a new
                   22177: ** OS layer for an embedded system, if you use this file as an example,
                   22178: ** avoid the use of malloc()/free().  Those routines work ok on OS/2
                   22179: ** desktops but not so well in embedded systems.
                   22180: */
                   22181: 
                   22182: /*
                   22183: ** Macros used to determine whether or not to use threads.
                   22184: */
                   22185: #if defined(SQLITE_THREADSAFE) && SQLITE_THREADSAFE
                   22186: # define SQLITE_OS2_THREADS 1
                   22187: #endif
                   22188: 
                   22189: /*
                   22190: ** Include code that is common to all os_*.c files
                   22191: */
                   22192: /************** Include os_common.h in the middle of os_os2.c ****************/
                   22193: /************** Begin file os_common.h ***************************************/
                   22194: /*
                   22195: ** 2004 May 22
                   22196: **
                   22197: ** The author disclaims copyright to this source code.  In place of
                   22198: ** a legal notice, here is a blessing:
                   22199: **
                   22200: **    May you do good and not evil.
                   22201: **    May you find forgiveness for yourself and forgive others.
                   22202: **    May you share freely, never taking more than you give.
                   22203: **
                   22204: ******************************************************************************
                   22205: **
                   22206: ** This file contains macros and a little bit of code that is common to
                   22207: ** all of the platform-specific files (os_*.c) and is #included into those
                   22208: ** files.
                   22209: **
                   22210: ** This file should be #included by the os_*.c files only.  It is not a
                   22211: ** general purpose header file.
                   22212: */
                   22213: #ifndef _OS_COMMON_H_
                   22214: #define _OS_COMMON_H_
                   22215: 
                   22216: /*
                   22217: ** At least two bugs have slipped in because we changed the MEMORY_DEBUG
                   22218: ** macro to SQLITE_DEBUG and some older makefiles have not yet made the
                   22219: ** switch.  The following code should catch this problem at compile-time.
                   22220: */
                   22221: #ifdef MEMORY_DEBUG
                   22222: # error "The MEMORY_DEBUG macro is obsolete.  Use SQLITE_DEBUG instead."
                   22223: #endif
                   22224: 
                   22225: #ifdef SQLITE_DEBUG
                   22226: SQLITE_PRIVATE int sqlite3OSTrace = 0;
                   22227: #define OSTRACE(X)          if( sqlite3OSTrace ) sqlite3DebugPrintf X
                   22228: #else
                   22229: #define OSTRACE(X)
                   22230: #endif
                   22231: 
                   22232: /*
                   22233: ** Macros for performance tracing.  Normally turned off.  Only works
                   22234: ** on i486 hardware.
                   22235: */
                   22236: #ifdef SQLITE_PERFORMANCE_TRACE
                   22237: 
                   22238: /* 
                   22239: ** hwtime.h contains inline assembler code for implementing 
                   22240: ** high-performance timing routines.
                   22241: */
                   22242: /************** Include hwtime.h in the middle of os_common.h ****************/
                   22243: /************** Begin file hwtime.h ******************************************/
                   22244: /*
                   22245: ** 2008 May 27
                   22246: **
                   22247: ** The author disclaims copyright to this source code.  In place of
                   22248: ** a legal notice, here is a blessing:
                   22249: **
                   22250: **    May you do good and not evil.
                   22251: **    May you find forgiveness for yourself and forgive others.
                   22252: **    May you share freely, never taking more than you give.
                   22253: **
                   22254: ******************************************************************************
                   22255: **
                   22256: ** This file contains inline asm code for retrieving "high-performance"
                   22257: ** counters for x86 class CPUs.
                   22258: */
                   22259: #ifndef _HWTIME_H_
                   22260: #define _HWTIME_H_
                   22261: 
                   22262: /*
                   22263: ** The following routine only works on pentium-class (or newer) processors.
                   22264: ** It uses the RDTSC opcode to read the cycle count value out of the
                   22265: ** processor and returns that value.  This can be used for high-res
                   22266: ** profiling.
                   22267: */
                   22268: #if (defined(__GNUC__) || defined(_MSC_VER)) && \
                   22269:       (defined(i386) || defined(__i386__) || defined(_M_IX86))
                   22270: 
                   22271:   #if defined(__GNUC__)
                   22272: 
                   22273:   __inline__ sqlite_uint64 sqlite3Hwtime(void){
                   22274:      unsigned int lo, hi;
                   22275:      __asm__ __volatile__ ("rdtsc" : "=a" (lo), "=d" (hi));
                   22276:      return (sqlite_uint64)hi << 32 | lo;
                   22277:   }
                   22278: 
                   22279:   #elif defined(_MSC_VER)
                   22280: 
                   22281:   __declspec(naked) __inline sqlite_uint64 __cdecl sqlite3Hwtime(void){
                   22282:      __asm {
                   22283:         rdtsc
                   22284:         ret       ; return value at EDX:EAX
                   22285:      }
                   22286:   }
                   22287: 
                   22288:   #endif
                   22289: 
                   22290: #elif (defined(__GNUC__) && defined(__x86_64__))
                   22291: 
                   22292:   __inline__ sqlite_uint64 sqlite3Hwtime(void){
                   22293:       unsigned long val;
                   22294:       __asm__ __volatile__ ("rdtsc" : "=A" (val));
                   22295:       return val;
                   22296:   }
                   22297:  
                   22298: #elif (defined(__GNUC__) && defined(__ppc__))
                   22299: 
                   22300:   __inline__ sqlite_uint64 sqlite3Hwtime(void){
                   22301:       unsigned long long retval;
                   22302:       unsigned long junk;
                   22303:       __asm__ __volatile__ ("\n\
                   22304:           1:      mftbu   %1\n\
                   22305:                   mftb    %L0\n\
                   22306:                   mftbu   %0\n\
                   22307:                   cmpw    %0,%1\n\
                   22308:                   bne     1b"
                   22309:                   : "=r" (retval), "=r" (junk));
                   22310:       return retval;
                   22311:   }
                   22312: 
                   22313: #else
                   22314: 
                   22315:   #error Need implementation of sqlite3Hwtime() for your platform.
                   22316: 
                   22317:   /*
                   22318:   ** To compile without implementing sqlite3Hwtime() for your platform,
                   22319:   ** you can remove the above #error and use the following
                   22320:   ** stub function.  You will lose timing support for many
                   22321:   ** of the debugging and testing utilities, but it should at
                   22322:   ** least compile and run.
                   22323:   */
                   22324: SQLITE_PRIVATE   sqlite_uint64 sqlite3Hwtime(void){ return ((sqlite_uint64)0); }
                   22325: 
                   22326: #endif
                   22327: 
                   22328: #endif /* !defined(_HWTIME_H_) */
                   22329: 
                   22330: /************** End of hwtime.h **********************************************/
                   22331: /************** Continuing where we left off in os_common.h ******************/
                   22332: 
                   22333: static sqlite_uint64 g_start;
                   22334: static sqlite_uint64 g_elapsed;
                   22335: #define TIMER_START       g_start=sqlite3Hwtime()
                   22336: #define TIMER_END         g_elapsed=sqlite3Hwtime()-g_start
                   22337: #define TIMER_ELAPSED     g_elapsed
                   22338: #else
                   22339: #define TIMER_START
                   22340: #define TIMER_END
                   22341: #define TIMER_ELAPSED     ((sqlite_uint64)0)
                   22342: #endif
                   22343: 
                   22344: /*
                   22345: ** If we compile with the SQLITE_TEST macro set, then the following block
                   22346: ** of code will give us the ability to simulate a disk I/O error.  This
                   22347: ** is used for testing the I/O recovery logic.
                   22348: */
                   22349: #ifdef SQLITE_TEST
                   22350: SQLITE_API int sqlite3_io_error_hit = 0;            /* Total number of I/O Errors */
                   22351: SQLITE_API int sqlite3_io_error_hardhit = 0;        /* Number of non-benign errors */
                   22352: SQLITE_API int sqlite3_io_error_pending = 0;        /* Count down to first I/O error */
                   22353: SQLITE_API int sqlite3_io_error_persist = 0;        /* True if I/O errors persist */
                   22354: SQLITE_API int sqlite3_io_error_benign = 0;         /* True if errors are benign */
                   22355: SQLITE_API int sqlite3_diskfull_pending = 0;
                   22356: SQLITE_API int sqlite3_diskfull = 0;
                   22357: #define SimulateIOErrorBenign(X) sqlite3_io_error_benign=(X)
                   22358: #define SimulateIOError(CODE)  \
                   22359:   if( (sqlite3_io_error_persist && sqlite3_io_error_hit) \
                   22360:        || sqlite3_io_error_pending-- == 1 )  \
                   22361:               { local_ioerr(); CODE; }
                   22362: static void local_ioerr(){
                   22363:   IOTRACE(("IOERR\n"));
                   22364:   sqlite3_io_error_hit++;
                   22365:   if( !sqlite3_io_error_benign ) sqlite3_io_error_hardhit++;
                   22366: }
                   22367: #define SimulateDiskfullError(CODE) \
                   22368:    if( sqlite3_diskfull_pending ){ \
                   22369:      if( sqlite3_diskfull_pending == 1 ){ \
                   22370:        local_ioerr(); \
                   22371:        sqlite3_diskfull = 1; \
                   22372:        sqlite3_io_error_hit = 1; \
                   22373:        CODE; \
                   22374:      }else{ \
                   22375:        sqlite3_diskfull_pending--; \
                   22376:      } \
                   22377:    }
                   22378: #else
                   22379: #define SimulateIOErrorBenign(X)
                   22380: #define SimulateIOError(A)
                   22381: #define SimulateDiskfullError(A)
                   22382: #endif
                   22383: 
                   22384: /*
                   22385: ** When testing, keep a count of the number of open files.
                   22386: */
                   22387: #ifdef SQLITE_TEST
                   22388: SQLITE_API int sqlite3_open_file_count = 0;
                   22389: #define OpenCounter(X)  sqlite3_open_file_count+=(X)
                   22390: #else
                   22391: #define OpenCounter(X)
                   22392: #endif
                   22393: 
                   22394: #endif /* !defined(_OS_COMMON_H_) */
                   22395: 
                   22396: /************** End of os_common.h *******************************************/
                   22397: /************** Continuing where we left off in os_os2.c *********************/
                   22398: 
                   22399: /* Forward references */
                   22400: typedef struct os2File os2File;         /* The file structure */
                   22401: typedef struct os2ShmNode os2ShmNode;   /* A shared descritive memory node */
                   22402: typedef struct os2ShmLink os2ShmLink;   /* A connection to shared-memory */
                   22403: 
                   22404: /*
                   22405: ** The os2File structure is subclass of sqlite3_file specific for the OS/2
                   22406: ** protability layer.
                   22407: */
                   22408: struct os2File {
                   22409:   const sqlite3_io_methods *pMethod;  /* Always the first entry */
                   22410:   HFILE h;                  /* Handle for accessing the file */
                   22411:   int flags;                /* Flags provided to os2Open() */
                   22412:   int locktype;             /* Type of lock currently held on this file */
                   22413:   int szChunk;              /* Chunk size configured by FCNTL_CHUNK_SIZE */
                   22414:   char *zFullPathCp;        /* Full path name of this file */
                   22415:   os2ShmLink *pShmLink;     /* Instance of shared memory on this file */
                   22416: };
                   22417: 
                   22418: #define LOCK_TIMEOUT 10L /* the default locking timeout */
                   22419: 
                   22420: /*
                   22421: ** Missing from some versions of the OS/2 toolkit -
                   22422: ** used to allocate from high memory if possible
                   22423: */
                   22424: #ifndef OBJ_ANY
                   22425: # define OBJ_ANY 0x00000400
                   22426: #endif
                   22427: 
                   22428: /*****************************************************************************
                   22429: ** The next group of routines implement the I/O methods specified
                   22430: ** by the sqlite3_io_methods object.
                   22431: ******************************************************************************/
                   22432: 
                   22433: /*
                   22434: ** Close a file.
                   22435: */
                   22436: static int os2Close( sqlite3_file *id ){
                   22437:   APIRET rc;
                   22438:   os2File *pFile = (os2File*)id;
                   22439: 
                   22440:   assert( id!=0 );
                   22441:   OSTRACE(( "CLOSE %d (%s)\n", pFile->h, pFile->zFullPathCp ));
                   22442: 
                   22443:   rc = DosClose( pFile->h );
                   22444: 
                   22445:   if( pFile->flags & SQLITE_OPEN_DELETEONCLOSE )
                   22446:     DosForceDelete( (PSZ)pFile->zFullPathCp );
                   22447: 
                   22448:   free( pFile->zFullPathCp );
                   22449:   pFile->zFullPathCp = NULL;
                   22450:   pFile->locktype = NO_LOCK;
                   22451:   pFile->h = (HFILE)-1;
                   22452:   pFile->flags = 0;
                   22453: 
                   22454:   OpenCounter( -1 );
                   22455:   return rc == NO_ERROR ? SQLITE_OK : SQLITE_IOERR;
                   22456: }
                   22457: 
                   22458: /*
                   22459: ** Read data from a file into a buffer.  Return SQLITE_OK if all
                   22460: ** bytes were read successfully and SQLITE_IOERR if anything goes
                   22461: ** wrong.
                   22462: */
                   22463: static int os2Read(
                   22464:   sqlite3_file *id,               /* File to read from */
                   22465:   void *pBuf,                     /* Write content into this buffer */
                   22466:   int amt,                        /* Number of bytes to read */
                   22467:   sqlite3_int64 offset            /* Begin reading at this offset */
                   22468: ){
                   22469:   ULONG fileLocation = 0L;
                   22470:   ULONG got;
                   22471:   os2File *pFile = (os2File*)id;
                   22472:   assert( id!=0 );
                   22473:   SimulateIOError( return SQLITE_IOERR_READ );
                   22474:   OSTRACE(( "READ %d lock=%d\n", pFile->h, pFile->locktype ));
                   22475:   if( DosSetFilePtr(pFile->h, offset, FILE_BEGIN, &fileLocation) != NO_ERROR ){
                   22476:     return SQLITE_IOERR;
                   22477:   }
                   22478:   if( DosRead( pFile->h, pBuf, amt, &got ) != NO_ERROR ){
                   22479:     return SQLITE_IOERR_READ;
                   22480:   }
                   22481:   if( got == (ULONG)amt )
                   22482:     return SQLITE_OK;
                   22483:   else {
                   22484:     /* Unread portions of the input buffer must be zero-filled */
                   22485:     memset(&((char*)pBuf)[got], 0, amt-got);
                   22486:     return SQLITE_IOERR_SHORT_READ;
                   22487:   }
                   22488: }
                   22489: 
                   22490: /*
                   22491: ** Write data from a buffer into a file.  Return SQLITE_OK on success
                   22492: ** or some other error code on failure.
                   22493: */
                   22494: static int os2Write(
                   22495:   sqlite3_file *id,               /* File to write into */
                   22496:   const void *pBuf,               /* The bytes to be written */
                   22497:   int amt,                        /* Number of bytes to write */
                   22498:   sqlite3_int64 offset            /* Offset into the file to begin writing at */
                   22499: ){
                   22500:   ULONG fileLocation = 0L;
                   22501:   APIRET rc = NO_ERROR;
                   22502:   ULONG wrote;
                   22503:   os2File *pFile = (os2File*)id;
                   22504:   assert( id!=0 );
                   22505:   SimulateIOError( return SQLITE_IOERR_WRITE );
                   22506:   SimulateDiskfullError( return SQLITE_FULL );
                   22507:   OSTRACE(( "WRITE %d lock=%d\n", pFile->h, pFile->locktype ));
                   22508:   if( DosSetFilePtr(pFile->h, offset, FILE_BEGIN, &fileLocation) != NO_ERROR ){
                   22509:     return SQLITE_IOERR;
                   22510:   }
                   22511:   assert( amt>0 );
                   22512:   while( amt > 0 &&
                   22513:          ( rc = DosWrite( pFile->h, (PVOID)pBuf, amt, &wrote ) ) == NO_ERROR &&
                   22514:          wrote > 0
                   22515:   ){
                   22516:     amt -= wrote;
                   22517:     pBuf = &((char*)pBuf)[wrote];
                   22518:   }
                   22519: 
                   22520:   return ( rc != NO_ERROR || amt > (int)wrote ) ? SQLITE_FULL : SQLITE_OK;
                   22521: }
                   22522: 
                   22523: /*
                   22524: ** Truncate an open file to a specified size
                   22525: */
                   22526: static int os2Truncate( sqlite3_file *id, i64 nByte ){
                   22527:   APIRET rc;
                   22528:   os2File *pFile = (os2File*)id;
                   22529:   assert( id!=0 );
                   22530:   OSTRACE(( "TRUNCATE %d %lld\n", pFile->h, nByte ));
                   22531:   SimulateIOError( return SQLITE_IOERR_TRUNCATE );
                   22532: 
                   22533:   /* If the user has configured a chunk-size for this file, truncate the
                   22534:   ** file so that it consists of an integer number of chunks (i.e. the
                   22535:   ** actual file size after the operation may be larger than the requested
                   22536:   ** size).
                   22537:   */
                   22538:   if( pFile->szChunk ){
                   22539:     nByte = ((nByte + pFile->szChunk - 1)/pFile->szChunk) * pFile->szChunk;
                   22540:   }
                   22541:   
                   22542:   rc = DosSetFileSize( pFile->h, nByte );
                   22543:   return rc == NO_ERROR ? SQLITE_OK : SQLITE_IOERR_TRUNCATE;
                   22544: }
                   22545: 
                   22546: #ifdef SQLITE_TEST
                   22547: /*
                   22548: ** Count the number of fullsyncs and normal syncs.  This is used to test
                   22549: ** that syncs and fullsyncs are occuring at the right times.
                   22550: */
                   22551: SQLITE_API int sqlite3_sync_count = 0;
                   22552: SQLITE_API int sqlite3_fullsync_count = 0;
                   22553: #endif
                   22554: 
                   22555: /*
                   22556: ** Make sure all writes to a particular file are committed to disk.
                   22557: */
                   22558: static int os2Sync( sqlite3_file *id, int flags ){
                   22559:   os2File *pFile = (os2File*)id;
                   22560:   OSTRACE(( "SYNC %d lock=%d\n", pFile->h, pFile->locktype ));
                   22561: #ifdef SQLITE_TEST
                   22562:   if( flags & SQLITE_SYNC_FULL){
                   22563:     sqlite3_fullsync_count++;
                   22564:   }
                   22565:   sqlite3_sync_count++;
                   22566: #endif
                   22567:   /* If we compiled with the SQLITE_NO_SYNC flag, then syncing is a
                   22568:   ** no-op
                   22569:   */
                   22570: #ifdef SQLITE_NO_SYNC
                   22571:   UNUSED_PARAMETER(pFile);
                   22572:   return SQLITE_OK;
                   22573: #else
                   22574:   return DosResetBuffer( pFile->h ) == NO_ERROR ? SQLITE_OK : SQLITE_IOERR;
                   22575: #endif
                   22576: }
                   22577: 
                   22578: /*
                   22579: ** Determine the current size of a file in bytes
                   22580: */
                   22581: static int os2FileSize( sqlite3_file *id, sqlite3_int64 *pSize ){
                   22582:   APIRET rc = NO_ERROR;
                   22583:   FILESTATUS3 fsts3FileInfo;
                   22584:   memset(&fsts3FileInfo, 0, sizeof(fsts3FileInfo));
                   22585:   assert( id!=0 );
                   22586:   SimulateIOError( return SQLITE_IOERR_FSTAT );
                   22587:   rc = DosQueryFileInfo( ((os2File*)id)->h, FIL_STANDARD, &fsts3FileInfo, sizeof(FILESTATUS3) );
                   22588:   if( rc == NO_ERROR ){
                   22589:     *pSize = fsts3FileInfo.cbFile;
                   22590:     return SQLITE_OK;
                   22591:   }else{
                   22592:     return SQLITE_IOERR_FSTAT;
                   22593:   }
                   22594: }
                   22595: 
                   22596: /*
                   22597: ** Acquire a reader lock.
                   22598: */
                   22599: static int getReadLock( os2File *pFile ){
                   22600:   FILELOCK  LockArea,
                   22601:             UnlockArea;
                   22602:   APIRET res;
                   22603:   memset(&LockArea, 0, sizeof(LockArea));
                   22604:   memset(&UnlockArea, 0, sizeof(UnlockArea));
                   22605:   LockArea.lOffset = SHARED_FIRST;
                   22606:   LockArea.lRange = SHARED_SIZE;
                   22607:   UnlockArea.lOffset = 0L;
                   22608:   UnlockArea.lRange = 0L;
                   22609:   res = DosSetFileLocks( pFile->h, &UnlockArea, &LockArea, LOCK_TIMEOUT, 1L );
                   22610:   OSTRACE(( "GETREADLOCK %d res=%d\n", pFile->h, res ));
                   22611:   return res;
                   22612: }
                   22613: 
                   22614: /*
                   22615: ** Undo a readlock
                   22616: */
                   22617: static int unlockReadLock( os2File *id ){
                   22618:   FILELOCK  LockArea,
                   22619:             UnlockArea;
                   22620:   APIRET res;
                   22621:   memset(&LockArea, 0, sizeof(LockArea));
                   22622:   memset(&UnlockArea, 0, sizeof(UnlockArea));
                   22623:   LockArea.lOffset = 0L;
                   22624:   LockArea.lRange = 0L;
                   22625:   UnlockArea.lOffset = SHARED_FIRST;
                   22626:   UnlockArea.lRange = SHARED_SIZE;
                   22627:   res = DosSetFileLocks( id->h, &UnlockArea, &LockArea, LOCK_TIMEOUT, 1L );
                   22628:   OSTRACE(( "UNLOCK-READLOCK file handle=%d res=%d?\n", id->h, res ));
                   22629:   return res;
                   22630: }
                   22631: 
                   22632: /*
                   22633: ** Lock the file with the lock specified by parameter locktype - one
                   22634: ** of the following:
                   22635: **
                   22636: **     (1) SHARED_LOCK
                   22637: **     (2) RESERVED_LOCK
                   22638: **     (3) PENDING_LOCK
                   22639: **     (4) EXCLUSIVE_LOCK
                   22640: **
                   22641: ** Sometimes when requesting one lock state, additional lock states
                   22642: ** are inserted in between.  The locking might fail on one of the later
                   22643: ** transitions leaving the lock state different from what it started but
                   22644: ** still short of its goal.  The following chart shows the allowed
                   22645: ** transitions and the inserted intermediate states:
                   22646: **
                   22647: **    UNLOCKED -> SHARED
                   22648: **    SHARED -> RESERVED
                   22649: **    SHARED -> (PENDING) -> EXCLUSIVE
                   22650: **    RESERVED -> (PENDING) -> EXCLUSIVE
                   22651: **    PENDING -> EXCLUSIVE
                   22652: **
                   22653: ** This routine will only increase a lock.  The os2Unlock() routine
                   22654: ** erases all locks at once and returns us immediately to locking level 0.
                   22655: ** It is not possible to lower the locking level one step at a time.  You
                   22656: ** must go straight to locking level 0.
                   22657: */
                   22658: static int os2Lock( sqlite3_file *id, int locktype ){
                   22659:   int rc = SQLITE_OK;       /* Return code from subroutines */
                   22660:   APIRET res = NO_ERROR;    /* Result of an OS/2 lock call */
                   22661:   int newLocktype;       /* Set pFile->locktype to this value before exiting */
                   22662:   int gotPendingLock = 0;/* True if we acquired a PENDING lock this time */
                   22663:   FILELOCK  LockArea,
                   22664:             UnlockArea;
                   22665:   os2File *pFile = (os2File*)id;
                   22666:   memset(&LockArea, 0, sizeof(LockArea));
                   22667:   memset(&UnlockArea, 0, sizeof(UnlockArea));
                   22668:   assert( pFile!=0 );
                   22669:   OSTRACE(( "LOCK %d %d was %d\n", pFile->h, locktype, pFile->locktype ));
                   22670: 
                   22671:   /* If there is already a lock of this type or more restrictive on the
                   22672:   ** os2File, do nothing. Don't use the end_lock: exit path, as
                   22673:   ** sqlite3_mutex_enter() hasn't been called yet.
                   22674:   */
                   22675:   if( pFile->locktype>=locktype ){
                   22676:     OSTRACE(( "LOCK %d %d ok (already held)\n", pFile->h, locktype ));
                   22677:     return SQLITE_OK;
                   22678:   }
                   22679: 
                   22680:   /* Make sure the locking sequence is correct
                   22681:   */
                   22682:   assert( pFile->locktype!=NO_LOCK || locktype==SHARED_LOCK );
                   22683:   assert( locktype!=PENDING_LOCK );
                   22684:   assert( locktype!=RESERVED_LOCK || pFile->locktype==SHARED_LOCK );
                   22685: 
                   22686:   /* Lock the PENDING_LOCK byte if we need to acquire a PENDING lock or
                   22687:   ** a SHARED lock.  If we are acquiring a SHARED lock, the acquisition of
                   22688:   ** the PENDING_LOCK byte is temporary.
                   22689:   */
                   22690:   newLocktype = pFile->locktype;
                   22691:   if( pFile->locktype==NO_LOCK
                   22692:       || (locktype==EXCLUSIVE_LOCK && pFile->locktype==RESERVED_LOCK)
                   22693:   ){
                   22694:     LockArea.lOffset = PENDING_BYTE;
                   22695:     LockArea.lRange = 1L;
                   22696:     UnlockArea.lOffset = 0L;
                   22697:     UnlockArea.lRange = 0L;
                   22698: 
                   22699:     /* wait longer than LOCK_TIMEOUT here not to have to try multiple times */
                   22700:     res = DosSetFileLocks( pFile->h, &UnlockArea, &LockArea, 100L, 0L );
                   22701:     if( res == NO_ERROR ){
                   22702:       gotPendingLock = 1;
                   22703:       OSTRACE(( "LOCK %d pending lock boolean set.  res=%d\n", pFile->h, res ));
                   22704:     }
                   22705:   }
                   22706: 
                   22707:   /* Acquire a shared lock
                   22708:   */
                   22709:   if( locktype==SHARED_LOCK && res == NO_ERROR ){
                   22710:     assert( pFile->locktype==NO_LOCK );
                   22711:     res = getReadLock(pFile);
                   22712:     if( res == NO_ERROR ){
                   22713:       newLocktype = SHARED_LOCK;
                   22714:     }
                   22715:     OSTRACE(( "LOCK %d acquire shared lock. res=%d\n", pFile->h, res ));
                   22716:   }
                   22717: 
                   22718:   /* Acquire a RESERVED lock
                   22719:   */
                   22720:   if( locktype==RESERVED_LOCK && res == NO_ERROR ){
                   22721:     assert( pFile->locktype==SHARED_LOCK );
                   22722:     LockArea.lOffset = RESERVED_BYTE;
                   22723:     LockArea.lRange = 1L;
                   22724:     UnlockArea.lOffset = 0L;
                   22725:     UnlockArea.lRange = 0L;
                   22726:     res = DosSetFileLocks( pFile->h, &UnlockArea, &LockArea, LOCK_TIMEOUT, 0L );
                   22727:     if( res == NO_ERROR ){
                   22728:       newLocktype = RESERVED_LOCK;
                   22729:     }
                   22730:     OSTRACE(( "LOCK %d acquire reserved lock. res=%d\n", pFile->h, res ));
                   22731:   }
                   22732: 
                   22733:   /* Acquire a PENDING lock
                   22734:   */
                   22735:   if( locktype==EXCLUSIVE_LOCK && res == NO_ERROR ){
                   22736:     newLocktype = PENDING_LOCK;
                   22737:     gotPendingLock = 0;
                   22738:     OSTRACE(( "LOCK %d acquire pending lock. pending lock boolean unset.\n",
                   22739:                pFile->h ));
                   22740:   }
                   22741: 
                   22742:   /* Acquire an EXCLUSIVE lock
                   22743:   */
                   22744:   if( locktype==EXCLUSIVE_LOCK && res == NO_ERROR ){
                   22745:     assert( pFile->locktype>=SHARED_LOCK );
                   22746:     res = unlockReadLock(pFile);
                   22747:     OSTRACE(( "unreadlock = %d\n", res ));
                   22748:     LockArea.lOffset = SHARED_FIRST;
                   22749:     LockArea.lRange = SHARED_SIZE;
                   22750:     UnlockArea.lOffset = 0L;
                   22751:     UnlockArea.lRange = 0L;
                   22752:     res = DosSetFileLocks( pFile->h, &UnlockArea, &LockArea, LOCK_TIMEOUT, 0L );
                   22753:     if( res == NO_ERROR ){
                   22754:       newLocktype = EXCLUSIVE_LOCK;
                   22755:     }else{
                   22756:       OSTRACE(( "OS/2 error-code = %d\n", res ));
                   22757:       getReadLock(pFile);
                   22758:     }
                   22759:     OSTRACE(( "LOCK %d acquire exclusive lock.  res=%d\n", pFile->h, res ));
                   22760:   }
                   22761: 
                   22762:   /* If we are holding a PENDING lock that ought to be released, then
                   22763:   ** release it now.
                   22764:   */
                   22765:   if( gotPendingLock && locktype==SHARED_LOCK ){
                   22766:     int r;
                   22767:     LockArea.lOffset = 0L;
                   22768:     LockArea.lRange = 0L;
                   22769:     UnlockArea.lOffset = PENDING_BYTE;
                   22770:     UnlockArea.lRange = 1L;
                   22771:     r = DosSetFileLocks( pFile->h, &UnlockArea, &LockArea, LOCK_TIMEOUT, 0L );
                   22772:     OSTRACE(( "LOCK %d unlocking pending/is shared. r=%d\n", pFile->h, r ));
                   22773:   }
                   22774: 
                   22775:   /* Update the state of the lock has held in the file descriptor then
                   22776:   ** return the appropriate result code.
                   22777:   */
                   22778:   if( res == NO_ERROR ){
                   22779:     rc = SQLITE_OK;
                   22780:   }else{
                   22781:     OSTRACE(( "LOCK FAILED %d trying for %d but got %d\n", pFile->h,
                   22782:               locktype, newLocktype ));
                   22783:     rc = SQLITE_BUSY;
                   22784:   }
                   22785:   pFile->locktype = newLocktype;
                   22786:   OSTRACE(( "LOCK %d now %d\n", pFile->h, pFile->locktype ));
                   22787:   return rc;
                   22788: }
                   22789: 
                   22790: /*
                   22791: ** This routine checks if there is a RESERVED lock held on the specified
                   22792: ** file by this or any other process. If such a lock is held, return
                   22793: ** non-zero, otherwise zero.
                   22794: */
                   22795: static int os2CheckReservedLock( sqlite3_file *id, int *pOut ){
                   22796:   int r = 0;
                   22797:   os2File *pFile = (os2File*)id;
                   22798:   assert( pFile!=0 );
                   22799:   if( pFile->locktype>=RESERVED_LOCK ){
                   22800:     r = 1;
                   22801:     OSTRACE(( "TEST WR-LOCK %d %d (local)\n", pFile->h, r ));
                   22802:   }else{
                   22803:     FILELOCK  LockArea,
                   22804:               UnlockArea;
                   22805:     APIRET rc = NO_ERROR;
                   22806:     memset(&LockArea, 0, sizeof(LockArea));
                   22807:     memset(&UnlockArea, 0, sizeof(UnlockArea));
                   22808:     LockArea.lOffset = RESERVED_BYTE;
                   22809:     LockArea.lRange = 1L;
                   22810:     UnlockArea.lOffset = 0L;
                   22811:     UnlockArea.lRange = 0L;
                   22812:     rc = DosSetFileLocks( pFile->h, &UnlockArea, &LockArea, LOCK_TIMEOUT, 0L );
                   22813:     OSTRACE(( "TEST WR-LOCK %d lock reserved byte rc=%d\n", pFile->h, rc ));
                   22814:     if( rc == NO_ERROR ){
                   22815:       APIRET rcu = NO_ERROR; /* return code for unlocking */
                   22816:       LockArea.lOffset = 0L;
                   22817:       LockArea.lRange = 0L;
                   22818:       UnlockArea.lOffset = RESERVED_BYTE;
                   22819:       UnlockArea.lRange = 1L;
                   22820:       rcu = DosSetFileLocks( pFile->h, &UnlockArea, &LockArea, LOCK_TIMEOUT, 0L );
                   22821:       OSTRACE(( "TEST WR-LOCK %d unlock reserved byte r=%d\n", pFile->h, rcu ));
                   22822:     }
                   22823:     r = !(rc == NO_ERROR);
                   22824:     OSTRACE(( "TEST WR-LOCK %d %d (remote)\n", pFile->h, r ));
                   22825:   }
                   22826:   *pOut = r;
                   22827:   return SQLITE_OK;
                   22828: }
                   22829: 
                   22830: /*
                   22831: ** Lower the locking level on file descriptor id to locktype.  locktype
                   22832: ** must be either NO_LOCK or SHARED_LOCK.
                   22833: **
                   22834: ** If the locking level of the file descriptor is already at or below
                   22835: ** the requested locking level, this routine is a no-op.
                   22836: **
                   22837: ** It is not possible for this routine to fail if the second argument
                   22838: ** is NO_LOCK.  If the second argument is SHARED_LOCK then this routine
                   22839: ** might return SQLITE_IOERR;
                   22840: */
                   22841: static int os2Unlock( sqlite3_file *id, int locktype ){
                   22842:   int type;
                   22843:   os2File *pFile = (os2File*)id;
                   22844:   APIRET rc = SQLITE_OK;
                   22845:   APIRET res = NO_ERROR;
                   22846:   FILELOCK  LockArea,
                   22847:             UnlockArea;
                   22848:   memset(&LockArea, 0, sizeof(LockArea));
                   22849:   memset(&UnlockArea, 0, sizeof(UnlockArea));
                   22850:   assert( pFile!=0 );
                   22851:   assert( locktype<=SHARED_LOCK );
                   22852:   OSTRACE(( "UNLOCK %d to %d was %d\n", pFile->h, locktype, pFile->locktype ));
                   22853:   type = pFile->locktype;
                   22854:   if( type>=EXCLUSIVE_LOCK ){
                   22855:     LockArea.lOffset = 0L;
                   22856:     LockArea.lRange = 0L;
                   22857:     UnlockArea.lOffset = SHARED_FIRST;
                   22858:     UnlockArea.lRange = SHARED_SIZE;
                   22859:     res = DosSetFileLocks( pFile->h, &UnlockArea, &LockArea, LOCK_TIMEOUT, 0L );
                   22860:     OSTRACE(( "UNLOCK %d exclusive lock res=%d\n", pFile->h, res ));
                   22861:     if( locktype==SHARED_LOCK && getReadLock(pFile) != NO_ERROR ){
                   22862:       /* This should never happen.  We should always be able to
                   22863:       ** reacquire the read lock */
                   22864:       OSTRACE(( "UNLOCK %d to %d getReadLock() failed\n", pFile->h, locktype ));
                   22865:       rc = SQLITE_IOERR_UNLOCK;
                   22866:     }
                   22867:   }
                   22868:   if( type>=RESERVED_LOCK ){
                   22869:     LockArea.lOffset = 0L;
                   22870:     LockArea.lRange = 0L;
                   22871:     UnlockArea.lOffset = RESERVED_BYTE;
                   22872:     UnlockArea.lRange = 1L;
                   22873:     res = DosSetFileLocks( pFile->h, &UnlockArea, &LockArea, LOCK_TIMEOUT, 0L );
                   22874:     OSTRACE(( "UNLOCK %d reserved res=%d\n", pFile->h, res ));
                   22875:   }
                   22876:   if( locktype==NO_LOCK && type>=SHARED_LOCK ){
                   22877:     res = unlockReadLock(pFile);
                   22878:     OSTRACE(( "UNLOCK %d is %d want %d res=%d\n",
                   22879:               pFile->h, type, locktype, res ));
                   22880:   }
                   22881:   if( type>=PENDING_LOCK ){
                   22882:     LockArea.lOffset = 0L;
                   22883:     LockArea.lRange = 0L;
                   22884:     UnlockArea.lOffset = PENDING_BYTE;
                   22885:     UnlockArea.lRange = 1L;
                   22886:     res = DosSetFileLocks( pFile->h, &UnlockArea, &LockArea, LOCK_TIMEOUT, 0L );
                   22887:     OSTRACE(( "UNLOCK %d pending res=%d\n", pFile->h, res ));
                   22888:   }
                   22889:   pFile->locktype = locktype;
                   22890:   OSTRACE(( "UNLOCK %d now %d\n", pFile->h, pFile->locktype ));
                   22891:   return rc;
                   22892: }
                   22893: 
                   22894: /*
                   22895: ** Control and query of the open file handle.
                   22896: */
                   22897: static int os2FileControl(sqlite3_file *id, int op, void *pArg){
                   22898:   switch( op ){
                   22899:     case SQLITE_FCNTL_LOCKSTATE: {
                   22900:       *(int*)pArg = ((os2File*)id)->locktype;
                   22901:       OSTRACE(( "FCNTL_LOCKSTATE %d lock=%d\n",
                   22902:                 ((os2File*)id)->h, ((os2File*)id)->locktype ));
                   22903:       return SQLITE_OK;
                   22904:     }
                   22905:     case SQLITE_FCNTL_CHUNK_SIZE: {
                   22906:       ((os2File*)id)->szChunk = *(int*)pArg;
                   22907:       return SQLITE_OK;
                   22908:     }
                   22909:     case SQLITE_FCNTL_SIZE_HINT: {
                   22910:       sqlite3_int64 sz = *(sqlite3_int64*)pArg;
                   22911:       SimulateIOErrorBenign(1);
                   22912:       os2Truncate(id, sz);
                   22913:       SimulateIOErrorBenign(0);
                   22914:       return SQLITE_OK;
                   22915:     }
                   22916:     case SQLITE_FCNTL_SYNC_OMITTED: {
                   22917:       return SQLITE_OK;
                   22918:     }
                   22919:   }
                   22920:   return SQLITE_NOTFOUND;
                   22921: }
                   22922: 
                   22923: /*
                   22924: ** Return the sector size in bytes of the underlying block device for
                   22925: ** the specified file. This is almost always 512 bytes, but may be
                   22926: ** larger for some devices.
                   22927: **
                   22928: ** SQLite code assumes this function cannot fail. It also assumes that
                   22929: ** if two files are created in the same file-system directory (i.e.
                   22930: ** a database and its journal file) that the sector size will be the
                   22931: ** same for both.
                   22932: */
                   22933: static int os2SectorSize(sqlite3_file *id){
                   22934:   UNUSED_PARAMETER(id);
                   22935:   return SQLITE_DEFAULT_SECTOR_SIZE;
                   22936: }
                   22937: 
                   22938: /*
                   22939: ** Return a vector of device characteristics.
                   22940: */
                   22941: static int os2DeviceCharacteristics(sqlite3_file *id){
                   22942:   UNUSED_PARAMETER(id);
                   22943:   return SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN;
                   22944: }
                   22945: 
                   22946: 
                   22947: /*
                   22948: ** Character set conversion objects used by conversion routines.
                   22949: */
                   22950: static UconvObject ucUtf8 = NULL; /* convert between UTF-8 and UCS-2 */
                   22951: static UconvObject uclCp = NULL;  /* convert between local codepage and UCS-2 */
                   22952: 
                   22953: /*
                   22954: ** Helper function to initialize the conversion objects from and to UTF-8.
                   22955: */
                   22956: static void initUconvObjects( void ){
                   22957:   if( UniCreateUconvObject( UTF_8, &ucUtf8 ) != ULS_SUCCESS )
                   22958:     ucUtf8 = NULL;
                   22959:   if ( UniCreateUconvObject( (UniChar *)L"@path=yes", &uclCp ) != ULS_SUCCESS )
                   22960:     uclCp = NULL;
                   22961: }
                   22962: 
                   22963: /*
                   22964: ** Helper function to free the conversion objects from and to UTF-8.
                   22965: */
                   22966: static void freeUconvObjects( void ){
                   22967:   if ( ucUtf8 )
                   22968:     UniFreeUconvObject( ucUtf8 );
                   22969:   if ( uclCp )
                   22970:     UniFreeUconvObject( uclCp );
                   22971:   ucUtf8 = NULL;
                   22972:   uclCp = NULL;
                   22973: }
                   22974: 
                   22975: /*
                   22976: ** Helper function to convert UTF-8 filenames to local OS/2 codepage.
                   22977: ** The two-step process: first convert the incoming UTF-8 string
                   22978: ** into UCS-2 and then from UCS-2 to the current codepage.
                   22979: ** The returned char pointer has to be freed.
                   22980: */
                   22981: static char *convertUtf8PathToCp( const char *in ){
                   22982:   UniChar tempPath[CCHMAXPATH];
                   22983:   char *out = (char *)calloc( CCHMAXPATH, 1 );
                   22984: 
                   22985:   if( !out )
                   22986:     return NULL;
                   22987: 
                   22988:   if( !ucUtf8 || !uclCp )
                   22989:     initUconvObjects();
                   22990: 
                   22991:   /* determine string for the conversion of UTF-8 which is CP1208 */
                   22992:   if( UniStrToUcs( ucUtf8, tempPath, (char *)in, CCHMAXPATH ) != ULS_SUCCESS )
                   22993:     return out; /* if conversion fails, return the empty string */
                   22994: 
                   22995:   /* conversion for current codepage which can be used for paths */
                   22996:   UniStrFromUcs( uclCp, out, tempPath, CCHMAXPATH );
                   22997: 
                   22998:   return out;
                   22999: }
                   23000: 
                   23001: /*
                   23002: ** Helper function to convert filenames from local codepage to UTF-8.
                   23003: ** The two-step process: first convert the incoming codepage-specific
                   23004: ** string into UCS-2 and then from UCS-2 to the codepage of UTF-8.
                   23005: ** The returned char pointer has to be freed.
                   23006: **
                   23007: ** This function is non-static to be able to use this in shell.c and
                   23008: ** similar applications that take command line arguments.
                   23009: */
                   23010: char *convertCpPathToUtf8( const char *in ){
                   23011:   UniChar tempPath[CCHMAXPATH];
                   23012:   char *out = (char *)calloc( CCHMAXPATH, 1 );
                   23013: 
                   23014:   if( !out )
                   23015:     return NULL;
                   23016: 
                   23017:   if( !ucUtf8 || !uclCp )
                   23018:     initUconvObjects();
                   23019: 
                   23020:   /* conversion for current codepage which can be used for paths */
                   23021:   if( UniStrToUcs( uclCp, tempPath, (char *)in, CCHMAXPATH ) != ULS_SUCCESS )
                   23022:     return out; /* if conversion fails, return the empty string */
                   23023: 
                   23024:   /* determine string for the conversion of UTF-8 which is CP1208 */
                   23025:   UniStrFromUcs( ucUtf8, out, tempPath, CCHMAXPATH );
                   23026: 
                   23027:   return out;
                   23028: }
                   23029: 
                   23030: 
                   23031: #ifndef SQLITE_OMIT_WAL
                   23032: 
                   23033: /*
                   23034: ** Use main database file for interprocess locking. If un-defined
                   23035: ** a separate file is created for this purpose. The file will be
                   23036: ** used only to set file locks. There will be no data written to it.
                   23037: */
                   23038: #define SQLITE_OS2_NO_WAL_LOCK_FILE     
                   23039: 
                   23040: #if 0
                   23041: static void _ERR_TRACE( const char *fmt, ... ) {
                   23042:   va_list  ap;
                   23043:   va_start(ap, fmt);
                   23044:   vfprintf(stderr, fmt, ap);
                   23045:   fflush(stderr);
                   23046: }
                   23047: #define ERR_TRACE(rc, msg)        \
                   23048:         if( (rc) != SQLITE_OK ) _ERR_TRACE msg;
                   23049: #else
                   23050: #define ERR_TRACE(rc, msg)
                   23051: #endif
                   23052: 
                   23053: /*
                   23054: ** Helper functions to obtain and relinquish the global mutex. The
                   23055: ** global mutex is used to protect os2ShmNodeList.
                   23056: **
                   23057: ** Function os2ShmMutexHeld() is used to assert() that the global mutex 
                   23058: ** is held when required. This function is only used as part of assert() 
                   23059: ** statements. e.g.
                   23060: **
                   23061: **   os2ShmEnterMutex()
                   23062: **     assert( os2ShmMutexHeld() );
                   23063: **   os2ShmLeaveMutex()
                   23064: */
                   23065: static void os2ShmEnterMutex(void){
                   23066:   sqlite3_mutex_enter(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER));
                   23067: }
                   23068: static void os2ShmLeaveMutex(void){
                   23069:   sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER));
                   23070: }
                   23071: #ifdef SQLITE_DEBUG
                   23072: static int os2ShmMutexHeld(void) {
                   23073:   return sqlite3_mutex_held(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER));
                   23074: }
                   23075: int GetCurrentProcessId(void) {
                   23076:   PPIB pib;
                   23077:   DosGetInfoBlocks(NULL, &pib);
                   23078:   return (int)pib->pib_ulpid;
                   23079: }
                   23080: #endif
                   23081: 
                   23082: /*
                   23083: ** Object used to represent a the shared memory area for a single log file.
                   23084: ** When multiple threads all reference the same log-summary, each thread has
                   23085: ** its own os2File object, but they all point to a single instance of this 
                   23086: ** object.  In other words, each log-summary is opened only once per process.
                   23087: **
                   23088: ** os2ShmMutexHeld() must be true when creating or destroying
                   23089: ** this object or while reading or writing the following fields:
                   23090: **
                   23091: **      nRef
                   23092: **      pNext 
                   23093: **
                   23094: ** The following fields are read-only after the object is created:
                   23095: ** 
                   23096: **      szRegion
                   23097: **      hLockFile
                   23098: **      shmBaseName
                   23099: **
                   23100: ** Either os2ShmNode.mutex must be held or os2ShmNode.nRef==0 and
                   23101: ** os2ShmMutexHeld() is true when reading or writing any other field
                   23102: ** in this structure.
                   23103: **
                   23104: */
                   23105: struct os2ShmNode {
                   23106:   sqlite3_mutex *mutex;      /* Mutex to access this object */
                   23107:   os2ShmNode *pNext;         /* Next in list of all os2ShmNode objects */
                   23108: 
                   23109:   int szRegion;              /* Size of shared-memory regions */
                   23110: 
                   23111:   int nRegion;               /* Size of array apRegion */
                   23112:   void **apRegion;           /* Array of pointers to shared-memory regions */
                   23113: 
                   23114:   int nRef;                  /* Number of os2ShmLink objects pointing to this */
                   23115:   os2ShmLink *pFirst;        /* First os2ShmLink object pointing to this */
                   23116: 
                   23117:   HFILE hLockFile;           /* File used for inter-process memory locking */
                   23118:   char shmBaseName[1];       /* Name of the memory object !!! must last !!! */
                   23119: };
                   23120: 
                   23121: 
                   23122: /*
                   23123: ** Structure used internally by this VFS to record the state of an
                   23124: ** open shared memory connection.
                   23125: **
                   23126: ** The following fields are initialized when this object is created and
                   23127: ** are read-only thereafter:
                   23128: **
                   23129: **    os2Shm.pShmNode
                   23130: **    os2Shm.id
                   23131: **
                   23132: ** All other fields are read/write.  The os2Shm.pShmNode->mutex must be held
                   23133: ** while accessing any read/write fields.
                   23134: */
                   23135: struct os2ShmLink {
                   23136:   os2ShmNode *pShmNode;      /* The underlying os2ShmNode object */
                   23137:   os2ShmLink *pNext;         /* Next os2Shm with the same os2ShmNode */
                   23138:   u32 sharedMask;            /* Mask of shared locks held */
                   23139:   u32 exclMask;              /* Mask of exclusive locks held */
                   23140: #ifdef SQLITE_DEBUG
                   23141:   u8 id;                     /* Id of this connection with its os2ShmNode */
                   23142: #endif
                   23143: };
                   23144: 
                   23145: 
                   23146: /*
                   23147: ** A global list of all os2ShmNode objects.
                   23148: **
                   23149: ** The os2ShmMutexHeld() must be true while reading or writing this list.
                   23150: */
                   23151: static os2ShmNode *os2ShmNodeList = NULL;
                   23152: 
                   23153: /*
                   23154: ** Constants used for locking
                   23155: */
                   23156: #ifdef  SQLITE_OS2_NO_WAL_LOCK_FILE
                   23157: #define OS2_SHM_BASE   (PENDING_BYTE + 0x10000)         /* first lock byte */
                   23158: #else
                   23159: #define OS2_SHM_BASE   ((22+SQLITE_SHM_NLOCK)*4)        /* first lock byte */
                   23160: #endif
                   23161: 
                   23162: #define OS2_SHM_DMS    (OS2_SHM_BASE+SQLITE_SHM_NLOCK)  /* deadman switch */
                   23163: 
                   23164: /*
                   23165: ** Apply advisory locks for all n bytes beginning at ofst.
                   23166: */
                   23167: #define _SHM_UNLCK  1   /* no lock */
                   23168: #define _SHM_RDLCK  2   /* shared lock, no wait */
                   23169: #define _SHM_WRLCK  3   /* exlusive lock, no wait */
                   23170: #define _SHM_WRLCK_WAIT 4 /* exclusive lock, wait */
                   23171: static int os2ShmSystemLock(
                   23172:   os2ShmNode *pNode,    /* Apply locks to this open shared-memory segment */
                   23173:   int lockType,         /* _SHM_UNLCK, _SHM_RDLCK, _SHM_WRLCK or _SHM_WRLCK_WAIT */
                   23174:   int ofst,             /* Offset to first byte to be locked/unlocked */
                   23175:   int nByte             /* Number of bytes to lock or unlock */
                   23176: ){
                   23177:   APIRET rc;
                   23178:   FILELOCK area;
                   23179:   ULONG mode, timeout;
                   23180: 
                   23181:   /* Access to the os2ShmNode object is serialized by the caller */
                   23182:   assert( sqlite3_mutex_held(pNode->mutex) || pNode->nRef==0 );
                   23183: 
                   23184:   mode = 1;     /* shared lock */
                   23185:   timeout = 0;  /* no wait */
                   23186:   area.lOffset = ofst;
                   23187:   area.lRange = nByte;
                   23188: 
                   23189:   switch( lockType ) {
                   23190:     case _SHM_WRLCK_WAIT:
                   23191:       timeout = (ULONG)-1;      /* wait forever */
                   23192:     case _SHM_WRLCK:
                   23193:       mode = 0;                 /* exclusive lock */
                   23194:     case _SHM_RDLCK:
                   23195:       rc = DosSetFileLocks(pNode->hLockFile, 
                   23196:                            NULL, &area, timeout, mode);
                   23197:       break;
                   23198:     /* case _SHM_UNLCK: */
                   23199:     default:
                   23200:       rc = DosSetFileLocks(pNode->hLockFile, 
                   23201:                            &area, NULL, 0, 0);
                   23202:       break;
                   23203:   }
                   23204:                           
                   23205:   OSTRACE(("SHM-LOCK %d %s %s 0x%08lx\n", 
                   23206:            pNode->hLockFile,
                   23207:            rc==SQLITE_OK ? "ok" : "failed",
                   23208:            lockType==_SHM_UNLCK ? "Unlock" : "Lock",
                   23209:            rc));
                   23210: 
                   23211:   ERR_TRACE(rc, ("os2ShmSystemLock: %d %s\n", rc, pNode->shmBaseName))
                   23212: 
                   23213:   return ( rc == 0 ) ?  SQLITE_OK : SQLITE_BUSY;
                   23214: }
                   23215: 
                   23216: /*
                   23217: ** Find an os2ShmNode in global list or allocate a new one, if not found.
                   23218: **
                   23219: ** This is not a VFS shared-memory method; it is a utility function called
                   23220: ** by VFS shared-memory methods.
                   23221: */
                   23222: static int os2OpenSharedMemory( os2File *fd, int szRegion ) {
                   23223:   os2ShmLink *pLink;
                   23224:   os2ShmNode *pNode;
                   23225:   int cbShmName, rc = SQLITE_OK;
                   23226:   char shmName[CCHMAXPATH + 30];
                   23227: #ifndef SQLITE_OS2_NO_WAL_LOCK_FILE
                   23228:   ULONG action;
                   23229: #endif
                   23230:   
                   23231:   /* We need some additional space at the end to append the region number */
                   23232:   cbShmName = sprintf(shmName, "\\SHAREMEM\\%s", fd->zFullPathCp );
                   23233:   if( cbShmName >= CCHMAXPATH-8 )
                   23234:     return SQLITE_IOERR_SHMOPEN; 
                   23235: 
                   23236:   /* Replace colon in file name to form a valid shared memory name */
                   23237:   shmName[10+1] = '!';
                   23238: 
                   23239:   /* Allocate link object (we free it later in case of failure) */
                   23240:   pLink = sqlite3_malloc( sizeof(*pLink) );
                   23241:   if( !pLink )
                   23242:     return SQLITE_NOMEM;
                   23243: 
                   23244:   /* Access node list */
                   23245:   os2ShmEnterMutex();
                   23246: 
                   23247:   /* Find node by it's shared memory base name */
                   23248:   for( pNode = os2ShmNodeList; 
                   23249:        pNode && stricmp(shmName, pNode->shmBaseName) != 0; 
                   23250:        pNode = pNode->pNext )   ;
                   23251: 
                   23252:   /* Not found: allocate a new node */
                   23253:   if( !pNode ) {
                   23254:     pNode = sqlite3_malloc( sizeof(*pNode) + cbShmName );
                   23255:     if( pNode ) {
                   23256:       memset(pNode, 0, sizeof(*pNode) );
                   23257:       pNode->szRegion = szRegion;
                   23258:       pNode->hLockFile = (HFILE)-1;      
                   23259:       strcpy(pNode->shmBaseName, shmName);
                   23260: 
                   23261: #ifdef SQLITE_OS2_NO_WAL_LOCK_FILE
                   23262:       if( DosDupHandle(fd->h, &pNode->hLockFile) != 0 ) {
                   23263: #else
                   23264:       sprintf(shmName, "%s-lck", fd->zFullPathCp);
                   23265:       if( DosOpen((PSZ)shmName, &pNode->hLockFile, &action, 0, FILE_NORMAL, 
                   23266:                   OPEN_ACTION_OPEN_IF_EXISTS | OPEN_ACTION_CREATE_IF_NEW,
                   23267:                   OPEN_ACCESS_READWRITE | OPEN_SHARE_DENYNONE | 
                   23268:                   OPEN_FLAGS_NOINHERIT | OPEN_FLAGS_FAIL_ON_ERROR,
                   23269:                   NULL) != 0 ) {
                   23270: #endif
                   23271:         sqlite3_free(pNode);  
                   23272:         rc = SQLITE_IOERR;
                   23273:       } else {
                   23274:         pNode->mutex = sqlite3_mutex_alloc(SQLITE_MUTEX_FAST);
                   23275:         if( !pNode->mutex ) {
                   23276:           sqlite3_free(pNode);  
                   23277:           rc = SQLITE_NOMEM;
                   23278:         }
                   23279:       }   
                   23280:     } else {
                   23281:       rc = SQLITE_NOMEM;
                   23282:     }
                   23283:     
                   23284:     if( rc == SQLITE_OK ) {
                   23285:       pNode->pNext = os2ShmNodeList;
                   23286:       os2ShmNodeList = pNode;
                   23287:     } else {
                   23288:       pNode = NULL;
                   23289:     }
                   23290:   } else if( pNode->szRegion != szRegion ) {
                   23291:     rc = SQLITE_IOERR_SHMSIZE;
                   23292:     pNode = NULL;
                   23293:   }
                   23294: 
                   23295:   if( pNode ) {
                   23296:     sqlite3_mutex_enter(pNode->mutex);
                   23297: 
                   23298:     memset(pLink, 0, sizeof(*pLink));
                   23299: 
                   23300:     pLink->pShmNode = pNode;
                   23301:     pLink->pNext = pNode->pFirst;
                   23302:     pNode->pFirst = pLink;
                   23303:     pNode->nRef++;
                   23304: 
                   23305:     fd->pShmLink = pLink;
                   23306: 
                   23307:     sqlite3_mutex_leave(pNode->mutex);
                   23308:     
                   23309:   } else {
1.1.1.3 ! misho    23310:     /* Error occurred. Free our link object. */
1.1       misho    23311:     sqlite3_free(pLink);  
                   23312:   }
                   23313: 
                   23314:   os2ShmLeaveMutex();
                   23315: 
                   23316:   ERR_TRACE(rc, ("os2OpenSharedMemory: %d  %s\n", rc, fd->zFullPathCp))  
                   23317:   
                   23318:   return rc;
                   23319: }
                   23320: 
                   23321: /*
                   23322: ** Purge the os2ShmNodeList list of all entries with nRef==0.
                   23323: **
                   23324: ** This is not a VFS shared-memory method; it is a utility function called
                   23325: ** by VFS shared-memory methods.
                   23326: */
                   23327: static void os2PurgeShmNodes( int deleteFlag ) {
                   23328:   os2ShmNode *pNode;
                   23329:   os2ShmNode **ppNode;
                   23330: 
                   23331:   os2ShmEnterMutex();
                   23332:   
                   23333:   ppNode = &os2ShmNodeList;
                   23334: 
                   23335:   while( *ppNode ) {
                   23336:     pNode = *ppNode;
                   23337: 
                   23338:     if( pNode->nRef == 0 ) {
                   23339:       *ppNode = pNode->pNext;   
                   23340:      
                   23341:       if( pNode->apRegion ) {
                   23342:         /* Prevent other processes from resizing the shared memory */
                   23343:         os2ShmSystemLock(pNode, _SHM_WRLCK_WAIT, OS2_SHM_DMS, 1);
                   23344: 
                   23345:         while( pNode->nRegion-- ) {
                   23346: #ifdef SQLITE_DEBUG
                   23347:           int rc = 
                   23348: #endif          
                   23349:           DosFreeMem(pNode->apRegion[pNode->nRegion]);
                   23350: 
                   23351:           OSTRACE(("SHM-PURGE pid-%d unmap region=%d %s\n",
                   23352:                   (int)GetCurrentProcessId(), pNode->nRegion,
                   23353:                   rc == 0 ? "ok" : "failed"));
                   23354:         }
                   23355: 
                   23356:         /* Allow other processes to resize the shared memory */
                   23357:         os2ShmSystemLock(pNode, _SHM_UNLCK, OS2_SHM_DMS, 1);
                   23358: 
                   23359:         sqlite3_free(pNode->apRegion);
                   23360:       }  
                   23361: 
                   23362:       DosClose(pNode->hLockFile);
                   23363:       
                   23364: #ifndef SQLITE_OS2_NO_WAL_LOCK_FILE
                   23365:       if( deleteFlag ) {
                   23366:          char fileName[CCHMAXPATH];
                   23367:          /* Skip "\\SHAREMEM\\" */
                   23368:          sprintf(fileName, "%s-lck", pNode->shmBaseName + 10);
                   23369:          /* restore colon */
                   23370:          fileName[1] = ':';
                   23371:          
                   23372:          DosForceDelete(fileName); 
                   23373:       }
                   23374: #endif
                   23375: 
                   23376:       sqlite3_mutex_free(pNode->mutex);
                   23377: 
                   23378:       sqlite3_free(pNode);
                   23379:       
                   23380:     } else {
                   23381:       ppNode = &pNode->pNext;
                   23382:     }
                   23383:   } 
                   23384: 
                   23385:   os2ShmLeaveMutex();
                   23386: }
                   23387: 
                   23388: /*
                   23389: ** This function is called to obtain a pointer to region iRegion of the
                   23390: ** shared-memory associated with the database file id. Shared-memory regions
                   23391: ** are numbered starting from zero. Each shared-memory region is szRegion
                   23392: ** bytes in size.
                   23393: **
                   23394: ** If an error occurs, an error code is returned and *pp is set to NULL.
                   23395: **
                   23396: ** Otherwise, if the bExtend parameter is 0 and the requested shared-memory
                   23397: ** region has not been allocated (by any client, including one running in a
                   23398: ** separate process), then *pp is set to NULL and SQLITE_OK returned. If
                   23399: ** bExtend is non-zero and the requested shared-memory region has not yet
                   23400: ** been allocated, it is allocated by this function.
                   23401: **
                   23402: ** If the shared-memory region has already been allocated or is allocated by
                   23403: ** this call as described above, then it is mapped into this processes
                   23404: ** address space (if it is not already), *pp is set to point to the mapped
                   23405: ** memory and SQLITE_OK returned.
                   23406: */
                   23407: static int os2ShmMap(
                   23408:   sqlite3_file *id,               /* Handle open on database file */
                   23409:   int iRegion,                    /* Region to retrieve */
                   23410:   int szRegion,                   /* Size of regions */
                   23411:   int bExtend,                    /* True to extend block if necessary */
                   23412:   void volatile **pp              /* OUT: Mapped memory */
                   23413: ){
                   23414:   PVOID pvTemp;
                   23415:   void **apRegion;
                   23416:   os2ShmNode *pNode;
                   23417:   int n, rc = SQLITE_OK;
                   23418:   char shmName[CCHMAXPATH];
                   23419:   os2File *pFile = (os2File*)id;
                   23420:   
                   23421:   *pp = NULL;
                   23422: 
                   23423:   if( !pFile->pShmLink )
                   23424:     rc = os2OpenSharedMemory( pFile, szRegion );
                   23425:   
                   23426:   if( rc == SQLITE_OK ) {
                   23427:     pNode = pFile->pShmLink->pShmNode ;
                   23428:     
                   23429:     sqlite3_mutex_enter(pNode->mutex);
                   23430:     
                   23431:     assert( szRegion==pNode->szRegion );
                   23432: 
                   23433:     /* Unmapped region ? */
                   23434:     if( iRegion >= pNode->nRegion ) {
                   23435:       /* Prevent other processes from resizing the shared memory */
                   23436:       os2ShmSystemLock(pNode, _SHM_WRLCK_WAIT, OS2_SHM_DMS, 1);
                   23437: 
                   23438:       apRegion = sqlite3_realloc(
                   23439:         pNode->apRegion, (iRegion + 1) * sizeof(apRegion[0]));
                   23440: 
                   23441:       if( apRegion ) {
                   23442:         pNode->apRegion = apRegion;
                   23443: 
                   23444:         while( pNode->nRegion <= iRegion ) {
                   23445:           sprintf(shmName, "%s-%u", 
                   23446:                   pNode->shmBaseName, pNode->nRegion);
                   23447: 
                   23448:           if( DosGetNamedSharedMem(&pvTemp, (PSZ)shmName, 
                   23449:                 PAG_READ | PAG_WRITE) != NO_ERROR ) {
                   23450:             if( !bExtend )
                   23451:               break;
                   23452: 
                   23453:             if( DosAllocSharedMem(&pvTemp, (PSZ)shmName, szRegion,
                   23454:                   PAG_READ | PAG_WRITE | PAG_COMMIT | OBJ_ANY) != NO_ERROR && 
                   23455:                 DosAllocSharedMem(&pvTemp, (PSZ)shmName, szRegion,
                   23456:                   PAG_READ | PAG_WRITE | PAG_COMMIT) != NO_ERROR ) { 
                   23457:               rc = SQLITE_NOMEM;
                   23458:               break;
                   23459:             }
                   23460:           }
                   23461: 
                   23462:           apRegion[pNode->nRegion++] = pvTemp;
                   23463:         }
                   23464: 
                   23465:         /* zero out remaining entries */ 
                   23466:         for( n = pNode->nRegion; n <= iRegion; n++ )
                   23467:           pNode->apRegion[n] = NULL;
                   23468: 
                   23469:         /* Return this region (maybe zero) */
                   23470:         *pp = pNode->apRegion[iRegion];
                   23471:       } else {
                   23472:         rc = SQLITE_NOMEM;
                   23473:       }
                   23474: 
                   23475:       /* Allow other processes to resize the shared memory */
                   23476:       os2ShmSystemLock(pNode, _SHM_UNLCK, OS2_SHM_DMS, 1);
                   23477:       
                   23478:     } else {
                   23479:       /* Region has been mapped previously */
                   23480:       *pp = pNode->apRegion[iRegion];
                   23481:     }
                   23482: 
                   23483:     sqlite3_mutex_leave(pNode->mutex);
                   23484:   } 
                   23485: 
                   23486:   ERR_TRACE(rc, ("os2ShmMap: %s iRgn = %d, szRgn = %d, bExt = %d : %d\n", 
                   23487:                  pFile->zFullPathCp, iRegion, szRegion, bExtend, rc))
                   23488:           
                   23489:   return rc;
                   23490: }
                   23491: 
                   23492: /*
                   23493: ** Close a connection to shared-memory.  Delete the underlying
                   23494: ** storage if deleteFlag is true.
                   23495: **
                   23496: ** If there is no shared memory associated with the connection then this
                   23497: ** routine is a harmless no-op.
                   23498: */
                   23499: static int os2ShmUnmap(
                   23500:   sqlite3_file *id,               /* The underlying database file */
                   23501:   int deleteFlag                  /* Delete shared-memory if true */
                   23502: ){
                   23503:   os2File *pFile = (os2File*)id;
                   23504:   os2ShmLink *pLink = pFile->pShmLink;
                   23505:   
                   23506:   if( pLink ) {
                   23507:     int nRef = -1;
                   23508:     os2ShmLink **ppLink;
                   23509:     os2ShmNode *pNode = pLink->pShmNode;
                   23510: 
                   23511:     sqlite3_mutex_enter(pNode->mutex);
                   23512:     
                   23513:     for( ppLink = &pNode->pFirst;
                   23514:          *ppLink && *ppLink != pLink;
                   23515:          ppLink = &(*ppLink)->pNext )   ;
                   23516:          
                   23517:     assert(*ppLink);
                   23518: 
                   23519:     if( *ppLink ) {
                   23520:       *ppLink = pLink->pNext;
                   23521:       nRef = --pNode->nRef;
                   23522:     } else {
                   23523:       ERR_TRACE(1, ("os2ShmUnmap: link not found ! %s\n", 
                   23524:                     pNode->shmBaseName))
                   23525:     }
                   23526:     
                   23527:     pFile->pShmLink = NULL;
                   23528:     sqlite3_free(pLink);
                   23529: 
                   23530:     sqlite3_mutex_leave(pNode->mutex);
                   23531:     
                   23532:     if( nRef == 0 )
                   23533:       os2PurgeShmNodes( deleteFlag );
                   23534:   }
                   23535: 
                   23536:   return SQLITE_OK;
                   23537: }
                   23538: 
                   23539: /*
                   23540: ** Change the lock state for a shared-memory segment.
                   23541: **
                   23542: ** Note that the relationship between SHAREd and EXCLUSIVE locks is a little
                   23543: ** different here than in posix.  In xShmLock(), one can go from unlocked
                   23544: ** to shared and back or from unlocked to exclusive and back.  But one may
                   23545: ** not go from shared to exclusive or from exclusive to shared.
                   23546: */
                   23547: static int os2ShmLock(
                   23548:   sqlite3_file *id,          /* Database file holding the shared memory */
                   23549:   int ofst,                  /* First lock to acquire or release */
                   23550:   int n,                     /* Number of locks to acquire or release */
                   23551:   int flags                  /* What to do with the lock */
                   23552: ){
                   23553:   u32 mask;                             /* Mask of locks to take or release */
                   23554:   int rc = SQLITE_OK;                   /* Result code */
                   23555:   os2File *pFile = (os2File*)id;
                   23556:   os2ShmLink *p = pFile->pShmLink;      /* The shared memory being locked */
                   23557:   os2ShmLink *pX;                       /* For looping over all siblings */
                   23558:   os2ShmNode *pShmNode = p->pShmNode;   /* Our node */
                   23559:   
                   23560:   assert( ofst>=0 && ofst+n<=SQLITE_SHM_NLOCK );
                   23561:   assert( n>=1 );
                   23562:   assert( flags==(SQLITE_SHM_LOCK | SQLITE_SHM_SHARED)
                   23563:        || flags==(SQLITE_SHM_LOCK | SQLITE_SHM_EXCLUSIVE)
                   23564:        || flags==(SQLITE_SHM_UNLOCK | SQLITE_SHM_SHARED)
                   23565:        || flags==(SQLITE_SHM_UNLOCK | SQLITE_SHM_EXCLUSIVE) );
                   23566:   assert( n==1 || (flags & SQLITE_SHM_EXCLUSIVE)!=0 );
                   23567: 
                   23568:   mask = (u32)((1U<<(ofst+n)) - (1U<<ofst));
                   23569:   assert( n>1 || mask==(1<<ofst) );
                   23570: 
                   23571: 
                   23572:   sqlite3_mutex_enter(pShmNode->mutex);
                   23573: 
                   23574:   if( flags & SQLITE_SHM_UNLOCK ){
                   23575:     u32 allMask = 0; /* Mask of locks held by siblings */
                   23576: 
                   23577:     /* See if any siblings hold this same lock */
                   23578:     for(pX=pShmNode->pFirst; pX; pX=pX->pNext){
                   23579:       if( pX==p ) continue;
                   23580:       assert( (pX->exclMask & (p->exclMask|p->sharedMask))==0 );
                   23581:       allMask |= pX->sharedMask;
                   23582:     }
                   23583: 
                   23584:     /* Unlock the system-level locks */
                   23585:     if( (mask & allMask)==0 ){
                   23586:       rc = os2ShmSystemLock(pShmNode, _SHM_UNLCK, ofst+OS2_SHM_BASE, n);
                   23587:     }else{
                   23588:       rc = SQLITE_OK;
                   23589:     }
                   23590: 
                   23591:     /* Undo the local locks */
                   23592:     if( rc==SQLITE_OK ){
                   23593:       p->exclMask &= ~mask;
                   23594:       p->sharedMask &= ~mask;
                   23595:     } 
                   23596:   }else if( flags & SQLITE_SHM_SHARED ){
                   23597:     u32 allShared = 0;  /* Union of locks held by connections other than "p" */
                   23598: 
                   23599:     /* Find out which shared locks are already held by sibling connections.
                   23600:     ** If any sibling already holds an exclusive lock, go ahead and return
                   23601:     ** SQLITE_BUSY.
                   23602:     */
                   23603:     for(pX=pShmNode->pFirst; pX; pX=pX->pNext){
                   23604:       if( (pX->exclMask & mask)!=0 ){
                   23605:         rc = SQLITE_BUSY;
                   23606:         break;
                   23607:       }
                   23608:       allShared |= pX->sharedMask;
                   23609:     }
                   23610: 
                   23611:     /* Get shared locks at the system level, if necessary */
                   23612:     if( rc==SQLITE_OK ){
                   23613:       if( (allShared & mask)==0 ){
                   23614:         rc = os2ShmSystemLock(pShmNode, _SHM_RDLCK, ofst+OS2_SHM_BASE, n);
                   23615:       }else{
                   23616:         rc = SQLITE_OK;
                   23617:       }
                   23618:     }
                   23619: 
                   23620:     /* Get the local shared locks */
                   23621:     if( rc==SQLITE_OK ){
                   23622:       p->sharedMask |= mask;
                   23623:     }
                   23624:   }else{
                   23625:     /* Make sure no sibling connections hold locks that will block this
                   23626:     ** lock.  If any do, return SQLITE_BUSY right away.
                   23627:     */
                   23628:     for(pX=pShmNode->pFirst; pX; pX=pX->pNext){
                   23629:       if( (pX->exclMask & mask)!=0 || (pX->sharedMask & mask)!=0 ){
                   23630:         rc = SQLITE_BUSY;
                   23631:         break;
                   23632:       }
                   23633:     }
                   23634:   
                   23635:     /* Get the exclusive locks at the system level.  Then if successful
                   23636:     ** also mark the local connection as being locked.
                   23637:     */
                   23638:     if( rc==SQLITE_OK ){
                   23639:       rc = os2ShmSystemLock(pShmNode, _SHM_WRLCK, ofst+OS2_SHM_BASE, n);
                   23640:       if( rc==SQLITE_OK ){
                   23641:         assert( (p->sharedMask & mask)==0 );
                   23642:         p->exclMask |= mask;
                   23643:       }
                   23644:     }
                   23645:   }
                   23646: 
                   23647:   sqlite3_mutex_leave(pShmNode->mutex);
                   23648:   
                   23649:   OSTRACE(("SHM-LOCK shmid-%d, pid-%d got %03x,%03x %s\n",
                   23650:            p->id, (int)GetCurrentProcessId(), p->sharedMask, p->exclMask,
                   23651:            rc ? "failed" : "ok"));
                   23652: 
                   23653:   ERR_TRACE(rc, ("os2ShmLock: ofst = %d, n = %d, flags = 0x%x -> %d \n", 
                   23654:                  ofst, n, flags, rc))
                   23655:                   
                   23656:   return rc; 
                   23657: }
                   23658: 
                   23659: /*
                   23660: ** Implement a memory barrier or memory fence on shared memory.
                   23661: **
                   23662: ** All loads and stores begun before the barrier must complete before
                   23663: ** any load or store begun after the barrier.
                   23664: */
                   23665: static void os2ShmBarrier(
                   23666:   sqlite3_file *id                /* Database file holding the shared memory */
                   23667: ){
                   23668:   UNUSED_PARAMETER(id);
                   23669:   os2ShmEnterMutex();
                   23670:   os2ShmLeaveMutex();
                   23671: }
                   23672: 
                   23673: #else
                   23674: # define os2ShmMap     0
                   23675: # define os2ShmLock    0
                   23676: # define os2ShmBarrier 0
                   23677: # define os2ShmUnmap   0
                   23678: #endif /* #ifndef SQLITE_OMIT_WAL */
                   23679: 
                   23680: 
                   23681: /*
                   23682: ** This vector defines all the methods that can operate on an
                   23683: ** sqlite3_file for os2.
                   23684: */
                   23685: static const sqlite3_io_methods os2IoMethod = {
                   23686:   2,                              /* iVersion */
                   23687:   os2Close,                       /* xClose */
                   23688:   os2Read,                        /* xRead */
                   23689:   os2Write,                       /* xWrite */
                   23690:   os2Truncate,                    /* xTruncate */
                   23691:   os2Sync,                        /* xSync */
                   23692:   os2FileSize,                    /* xFileSize */
                   23693:   os2Lock,                        /* xLock */
                   23694:   os2Unlock,                      /* xUnlock */
                   23695:   os2CheckReservedLock,           /* xCheckReservedLock */
                   23696:   os2FileControl,                 /* xFileControl */
                   23697:   os2SectorSize,                  /* xSectorSize */
                   23698:   os2DeviceCharacteristics,       /* xDeviceCharacteristics */
                   23699:   os2ShmMap,                      /* xShmMap */
                   23700:   os2ShmLock,                     /* xShmLock */
                   23701:   os2ShmBarrier,                  /* xShmBarrier */
                   23702:   os2ShmUnmap                     /* xShmUnmap */
                   23703: };
                   23704: 
                   23705: 
                   23706: /***************************************************************************
                   23707: ** Here ends the I/O methods that form the sqlite3_io_methods object.
                   23708: **
                   23709: ** The next block of code implements the VFS methods.
                   23710: ****************************************************************************/
                   23711: 
                   23712: /*
                   23713: ** Create a temporary file name in zBuf.  zBuf must be big enough to
                   23714: ** hold at pVfs->mxPathname characters.
                   23715: */
                   23716: static int getTempname(int nBuf, char *zBuf ){
                   23717:   static const char zChars[] =
                   23718:     "abcdefghijklmnopqrstuvwxyz"
                   23719:     "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
                   23720:     "0123456789";
                   23721:   int i, j;
                   23722:   PSZ zTempPathCp;      
                   23723:   char zTempPath[CCHMAXPATH];
                   23724:   ULONG ulDriveNum, ulDriveMap;
                   23725:   
                   23726:   /* It's odd to simulate an io-error here, but really this is just
                   23727:   ** using the io-error infrastructure to test that SQLite handles this
                   23728:   ** function failing. 
                   23729:   */
                   23730:   SimulateIOError( return SQLITE_IOERR );
                   23731: 
                   23732:   if( sqlite3_temp_directory ) {
                   23733:     sqlite3_snprintf(CCHMAXPATH-30, zTempPath, "%s", sqlite3_temp_directory);
                   23734:   } else if( DosScanEnv( (PSZ)"TEMP",   &zTempPathCp ) == NO_ERROR ||
                   23735:              DosScanEnv( (PSZ)"TMP",    &zTempPathCp ) == NO_ERROR ||
                   23736:              DosScanEnv( (PSZ)"TMPDIR", &zTempPathCp ) == NO_ERROR ) {
                   23737:     char *zTempPathUTF = convertCpPathToUtf8( (char *)zTempPathCp );
                   23738:     sqlite3_snprintf(CCHMAXPATH-30, zTempPath, "%s", zTempPathUTF);
                   23739:     free( zTempPathUTF );
                   23740:   } else if( DosQueryCurrentDisk( &ulDriveNum, &ulDriveMap ) == NO_ERROR ) {
                   23741:     zTempPath[0] = (char)('A' + ulDriveNum - 1);
                   23742:     zTempPath[1] = ':'; 
                   23743:     zTempPath[2] = '\0'; 
                   23744:   } else {
                   23745:     zTempPath[0] = '\0'; 
                   23746:   }
                   23747:   
                   23748:   /* Strip off a trailing slashes or backslashes, otherwise we would get *
                   23749:    * multiple (back)slashes which causes DosOpen() to fail.              *
                   23750:    * Trailing spaces are not allowed, either.                            */
                   23751:   j = sqlite3Strlen30(zTempPath);
                   23752:   while( j > 0 && ( zTempPath[j-1] == '\\' || zTempPath[j-1] == '/' || 
                   23753:                     zTempPath[j-1] == ' ' ) ){
                   23754:     j--;
                   23755:   }
                   23756:   zTempPath[j] = '\0';
                   23757:   
                   23758:   /* We use 20 bytes to randomize the name */
                   23759:   sqlite3_snprintf(nBuf-22, zBuf,
                   23760:                    "%s\\"SQLITE_TEMP_FILE_PREFIX, zTempPath);
                   23761:   j = sqlite3Strlen30(zBuf);
                   23762:   sqlite3_randomness( 20, &zBuf[j] );
                   23763:   for( i = 0; i < 20; i++, j++ ){
                   23764:     zBuf[j] = zChars[ ((unsigned char)zBuf[j])%(sizeof(zChars)-1) ];
                   23765:   }
                   23766:   zBuf[j] = 0;
                   23767: 
                   23768:   OSTRACE(( "TEMP FILENAME: %s\n", zBuf ));
                   23769:   return SQLITE_OK;
                   23770: }
                   23771: 
                   23772: 
                   23773: /*
                   23774: ** Turn a relative pathname into a full pathname.  Write the full
                   23775: ** pathname into zFull[].  zFull[] will be at least pVfs->mxPathname
                   23776: ** bytes in size.
                   23777: */
                   23778: static int os2FullPathname(
                   23779:   sqlite3_vfs *pVfs,          /* Pointer to vfs object */
                   23780:   const char *zRelative,      /* Possibly relative input path */
                   23781:   int nFull,                  /* Size of output buffer in bytes */
                   23782:   char *zFull                 /* Output buffer */
                   23783: ){
                   23784:   char *zRelativeCp = convertUtf8PathToCp( zRelative );
                   23785:   char zFullCp[CCHMAXPATH] = "\0";
                   23786:   char *zFullUTF;
                   23787:   APIRET rc = DosQueryPathInfo( (PSZ)zRelativeCp, FIL_QUERYFULLNAME, 
                   23788:                                 zFullCp, CCHMAXPATH );
                   23789:   free( zRelativeCp );
                   23790:   zFullUTF = convertCpPathToUtf8( zFullCp );
                   23791:   sqlite3_snprintf( nFull, zFull, zFullUTF );
                   23792:   free( zFullUTF );
                   23793:   return rc == NO_ERROR ? SQLITE_OK : SQLITE_IOERR;
                   23794: }
                   23795: 
                   23796: 
                   23797: /*
                   23798: ** Open a file.
                   23799: */
                   23800: static int os2Open(
                   23801:   sqlite3_vfs *pVfs,            /* Not used */
                   23802:   const char *zName,            /* Name of the file (UTF-8) */
                   23803:   sqlite3_file *id,             /* Write the SQLite file handle here */
                   23804:   int flags,                    /* Open mode flags */
                   23805:   int *pOutFlags                /* Status return flags */
                   23806: ){
                   23807:   HFILE h;
                   23808:   ULONG ulOpenFlags = 0;
                   23809:   ULONG ulOpenMode = 0;
                   23810:   ULONG ulAction = 0;
                   23811:   ULONG rc;
                   23812:   os2File *pFile = (os2File*)id;
                   23813:   const char *zUtf8Name = zName;
                   23814:   char *zNameCp;
                   23815:   char  zTmpname[CCHMAXPATH];
                   23816: 
                   23817:   int isExclusive  = (flags & SQLITE_OPEN_EXCLUSIVE);
                   23818:   int isCreate     = (flags & SQLITE_OPEN_CREATE);
                   23819:   int isReadWrite  = (flags & SQLITE_OPEN_READWRITE);
                   23820: #ifndef NDEBUG
                   23821:   int isDelete     = (flags & SQLITE_OPEN_DELETEONCLOSE);
                   23822:   int isReadonly   = (flags & SQLITE_OPEN_READONLY);
                   23823:   int eType        = (flags & 0xFFFFFF00);
                   23824:   int isOpenJournal = (isCreate && (
                   23825:         eType==SQLITE_OPEN_MASTER_JOURNAL 
                   23826:      || eType==SQLITE_OPEN_MAIN_JOURNAL 
                   23827:      || eType==SQLITE_OPEN_WAL
                   23828:   ));
                   23829: #endif
                   23830: 
                   23831:   UNUSED_PARAMETER(pVfs);
                   23832:   assert( id!=0 );
                   23833: 
                   23834:   /* Check the following statements are true: 
                   23835:   **
                   23836:   **   (a) Exactly one of the READWRITE and READONLY flags must be set, and 
                   23837:   **   (b) if CREATE is set, then READWRITE must also be set, and
                   23838:   **   (c) if EXCLUSIVE is set, then CREATE must also be set.
                   23839:   **   (d) if DELETEONCLOSE is set, then CREATE must also be set.
                   23840:   */
                   23841:   assert((isReadonly==0 || isReadWrite==0) && (isReadWrite || isReadonly));
                   23842:   assert(isCreate==0 || isReadWrite);
                   23843:   assert(isExclusive==0 || isCreate);
                   23844:   assert(isDelete==0 || isCreate);
                   23845: 
                   23846:   /* The main DB, main journal, WAL file and master journal are never 
                   23847:   ** automatically deleted. Nor are they ever temporary files.  */
                   23848:   assert( (!isDelete && zName) || eType!=SQLITE_OPEN_MAIN_DB );
                   23849:   assert( (!isDelete && zName) || eType!=SQLITE_OPEN_MAIN_JOURNAL );
                   23850:   assert( (!isDelete && zName) || eType!=SQLITE_OPEN_MASTER_JOURNAL );
                   23851:   assert( (!isDelete && zName) || eType!=SQLITE_OPEN_WAL );
                   23852: 
                   23853:   /* Assert that the upper layer has set one of the "file-type" flags. */
                   23854:   assert( eType==SQLITE_OPEN_MAIN_DB      || eType==SQLITE_OPEN_TEMP_DB 
                   23855:        || eType==SQLITE_OPEN_MAIN_JOURNAL || eType==SQLITE_OPEN_TEMP_JOURNAL 
                   23856:        || eType==SQLITE_OPEN_SUBJOURNAL   || eType==SQLITE_OPEN_MASTER_JOURNAL 
                   23857:        || eType==SQLITE_OPEN_TRANSIENT_DB || eType==SQLITE_OPEN_WAL
                   23858:   );
                   23859: 
                   23860:   memset( pFile, 0, sizeof(*pFile) );
                   23861:   pFile->h = (HFILE)-1;
                   23862: 
                   23863:   /* If the second argument to this function is NULL, generate a 
                   23864:   ** temporary file name to use 
                   23865:   */
                   23866:   if( !zUtf8Name ){
                   23867:     assert(isDelete && !isOpenJournal);
                   23868:     rc = getTempname(CCHMAXPATH, zTmpname);
                   23869:     if( rc!=SQLITE_OK ){
                   23870:       return rc;
                   23871:     }
                   23872:     zUtf8Name = zTmpname;
                   23873:   }
                   23874: 
                   23875:   if( isReadWrite ){
                   23876:     ulOpenMode |= OPEN_ACCESS_READWRITE;
                   23877:   }else{
                   23878:     ulOpenMode |= OPEN_ACCESS_READONLY;
                   23879:   }
                   23880: 
                   23881:   /* Open in random access mode for possibly better speed.  Allow full
                   23882:   ** sharing because file locks will provide exclusive access when needed.
                   23883:   ** The handle should not be inherited by child processes and we don't 
                   23884:   ** want popups from the critical error handler.
                   23885:   */
                   23886:   ulOpenMode |= OPEN_FLAGS_RANDOM | OPEN_SHARE_DENYNONE | 
                   23887:                 OPEN_FLAGS_NOINHERIT | OPEN_FLAGS_FAIL_ON_ERROR;
                   23888: 
                   23889:   /* SQLITE_OPEN_EXCLUSIVE is used to make sure that a new file is 
                   23890:   ** created. SQLite doesn't use it to indicate "exclusive access" 
                   23891:   ** as it is usually understood.
                   23892:   */
                   23893:   if( isExclusive ){
                   23894:     /* Creates a new file, only if it does not already exist. */
                   23895:     /* If the file exists, it fails. */
                   23896:     ulOpenFlags |= OPEN_ACTION_CREATE_IF_NEW | OPEN_ACTION_FAIL_IF_EXISTS;
                   23897:   }else if( isCreate ){
                   23898:     /* Open existing file, or create if it doesn't exist */
                   23899:     ulOpenFlags |= OPEN_ACTION_CREATE_IF_NEW | OPEN_ACTION_OPEN_IF_EXISTS;
                   23900:   }else{
                   23901:     /* Opens a file, only if it exists. */
                   23902:     ulOpenFlags |= OPEN_ACTION_FAIL_IF_NEW | OPEN_ACTION_OPEN_IF_EXISTS;
                   23903:   }
                   23904: 
                   23905:   zNameCp = convertUtf8PathToCp( zUtf8Name );
                   23906:   rc = DosOpen( (PSZ)zNameCp,
                   23907:                 &h,
                   23908:                 &ulAction,
                   23909:                 0L,
                   23910:                 FILE_NORMAL,
                   23911:                 ulOpenFlags,
                   23912:                 ulOpenMode,
                   23913:                 (PEAOP2)NULL );
                   23914:   free( zNameCp );
                   23915: 
                   23916:   if( rc != NO_ERROR ){
                   23917:     OSTRACE(( "OPEN Invalid handle rc=%d: zName=%s, ulAction=%#lx, ulFlags=%#lx, ulMode=%#lx\n",
                   23918:               rc, zUtf8Name, ulAction, ulOpenFlags, ulOpenMode ));
                   23919: 
                   23920:     if( isReadWrite ){
                   23921:       return os2Open( pVfs, zName, id,
                   23922:                       ((flags|SQLITE_OPEN_READONLY)&~(SQLITE_OPEN_CREATE|SQLITE_OPEN_READWRITE)),
                   23923:                       pOutFlags );
                   23924:     }else{
                   23925:       return SQLITE_CANTOPEN;
                   23926:     }
                   23927:   }
                   23928: 
                   23929:   if( pOutFlags ){
                   23930:     *pOutFlags = isReadWrite ? SQLITE_OPEN_READWRITE : SQLITE_OPEN_READONLY;
                   23931:   }
                   23932: 
                   23933:   os2FullPathname( pVfs, zUtf8Name, sizeof( zTmpname ), zTmpname );
                   23934:   pFile->zFullPathCp = convertUtf8PathToCp( zTmpname );
                   23935:   pFile->pMethod = &os2IoMethod;
                   23936:   pFile->flags = flags;
                   23937:   pFile->h = h;
                   23938: 
                   23939:   OpenCounter(+1);
                   23940:   OSTRACE(( "OPEN %d pOutFlags=%d\n", pFile->h, pOutFlags ));
                   23941:   return SQLITE_OK;
                   23942: }
                   23943: 
                   23944: /*
                   23945: ** Delete the named file.
                   23946: */
                   23947: static int os2Delete(
                   23948:   sqlite3_vfs *pVfs,                     /* Not used on os2 */
                   23949:   const char *zFilename,                 /* Name of file to delete */
                   23950:   int syncDir                            /* Not used on os2 */
                   23951: ){
                   23952:   APIRET rc;
                   23953:   char *zFilenameCp;
                   23954:   SimulateIOError( return SQLITE_IOERR_DELETE );
                   23955:   zFilenameCp = convertUtf8PathToCp( zFilename );
                   23956:   rc = DosDelete( (PSZ)zFilenameCp );
                   23957:   free( zFilenameCp );
                   23958:   OSTRACE(( "DELETE \"%s\"\n", zFilename ));
                   23959:   return (rc == NO_ERROR ||
                   23960:           rc == ERROR_FILE_NOT_FOUND ||
                   23961:           rc == ERROR_PATH_NOT_FOUND ) ? SQLITE_OK : SQLITE_IOERR_DELETE;
                   23962: }
                   23963: 
                   23964: /*
1.1.1.3 ! misho    23965: ** Check the existence and status of a file.
1.1       misho    23966: */
                   23967: static int os2Access(
                   23968:   sqlite3_vfs *pVfs,        /* Not used on os2 */
                   23969:   const char *zFilename,    /* Name of file to check */
                   23970:   int flags,                /* Type of test to make on this file */
                   23971:   int *pOut                 /* Write results here */
                   23972: ){
                   23973:   APIRET rc;
                   23974:   FILESTATUS3 fsts3ConfigInfo;
                   23975:   char *zFilenameCp;
                   23976: 
                   23977:   UNUSED_PARAMETER(pVfs);
                   23978:   SimulateIOError( return SQLITE_IOERR_ACCESS; );
                   23979:   
                   23980:   zFilenameCp = convertUtf8PathToCp( zFilename );
                   23981:   rc = DosQueryPathInfo( (PSZ)zFilenameCp, FIL_STANDARD,
                   23982:                          &fsts3ConfigInfo, sizeof(FILESTATUS3) );
                   23983:   free( zFilenameCp );
                   23984:   OSTRACE(( "ACCESS fsts3ConfigInfo.attrFile=%d flags=%d rc=%d\n",
                   23985:             fsts3ConfigInfo.attrFile, flags, rc ));
                   23986: 
                   23987:   switch( flags ){
                   23988:     case SQLITE_ACCESS_EXISTS:
                   23989:       /* For an SQLITE_ACCESS_EXISTS query, treat a zero-length file
                   23990:       ** as if it does not exist.
                   23991:       */
                   23992:       if( fsts3ConfigInfo.cbFile == 0 ) 
                   23993:         rc = ERROR_FILE_NOT_FOUND;
                   23994:       break;
                   23995:     case SQLITE_ACCESS_READ:
                   23996:       break;
                   23997:     case SQLITE_ACCESS_READWRITE:
                   23998:       if( fsts3ConfigInfo.attrFile & FILE_READONLY )
                   23999:         rc = ERROR_ACCESS_DENIED;
                   24000:       break;
                   24001:     default:
                   24002:       rc = ERROR_FILE_NOT_FOUND;
                   24003:       assert( !"Invalid flags argument" );
                   24004:   }
                   24005: 
                   24006:   *pOut = (rc == NO_ERROR);
                   24007:   OSTRACE(( "ACCESS %s flags %d: rc=%d\n", zFilename, flags, *pOut ));
                   24008: 
                   24009:   return SQLITE_OK;
                   24010: }
                   24011: 
                   24012: 
                   24013: #ifndef SQLITE_OMIT_LOAD_EXTENSION
                   24014: /*
                   24015: ** Interfaces for opening a shared library, finding entry points
                   24016: ** within the shared library, and closing the shared library.
                   24017: */
                   24018: /*
                   24019: ** Interfaces for opening a shared library, finding entry points
                   24020: ** within the shared library, and closing the shared library.
                   24021: */
                   24022: static void *os2DlOpen(sqlite3_vfs *pVfs, const char *zFilename){
                   24023:   HMODULE hmod;
                   24024:   APIRET rc;
                   24025:   char *zFilenameCp = convertUtf8PathToCp(zFilename);
                   24026:   rc = DosLoadModule(NULL, 0, (PSZ)zFilenameCp, &hmod);
                   24027:   free(zFilenameCp);
                   24028:   return rc != NO_ERROR ? 0 : (void*)hmod;
                   24029: }
                   24030: /*
                   24031: ** A no-op since the error code is returned on the DosLoadModule call.
                   24032: ** os2Dlopen returns zero if DosLoadModule is not successful.
                   24033: */
                   24034: static void os2DlError(sqlite3_vfs *pVfs, int nBuf, char *zBufOut){
                   24035: /* no-op */
                   24036: }
                   24037: static void (*os2DlSym(sqlite3_vfs *pVfs, void *pHandle, const char *zSymbol))(void){
                   24038:   PFN pfn;
                   24039:   APIRET rc;
                   24040:   rc = DosQueryProcAddr((HMODULE)pHandle, 0L, (PSZ)zSymbol, &pfn);
                   24041:   if( rc != NO_ERROR ){
                   24042:     /* if the symbol itself was not found, search again for the same
                   24043:      * symbol with an extra underscore, that might be needed depending
                   24044:      * on the calling convention */
                   24045:     char _zSymbol[256] = "_";
                   24046:     strncat(_zSymbol, zSymbol, 254);
                   24047:     rc = DosQueryProcAddr((HMODULE)pHandle, 0L, (PSZ)_zSymbol, &pfn);
                   24048:   }
                   24049:   return rc != NO_ERROR ? 0 : (void(*)(void))pfn;
                   24050: }
                   24051: static void os2DlClose(sqlite3_vfs *pVfs, void *pHandle){
                   24052:   DosFreeModule((HMODULE)pHandle);
                   24053: }
                   24054: #else /* if SQLITE_OMIT_LOAD_EXTENSION is defined: */
                   24055:   #define os2DlOpen 0
                   24056:   #define os2DlError 0
                   24057:   #define os2DlSym 0
                   24058:   #define os2DlClose 0
                   24059: #endif
                   24060: 
                   24061: 
                   24062: /*
                   24063: ** Write up to nBuf bytes of randomness into zBuf.
                   24064: */
                   24065: static int os2Randomness(sqlite3_vfs *pVfs, int nBuf, char *zBuf ){
                   24066:   int n = 0;
                   24067: #if defined(SQLITE_TEST)
                   24068:   n = nBuf;
                   24069:   memset(zBuf, 0, nBuf);
                   24070: #else
                   24071:   int i;                           
                   24072:   PPIB ppib;
                   24073:   PTIB ptib;
                   24074:   DATETIME dt; 
                   24075:   static unsigned c = 0;
                   24076:   /* Ordered by variation probability */
                   24077:   static ULONG svIdx[6] = { QSV_MS_COUNT, QSV_TIME_LOW,
                   24078:                             QSV_MAXPRMEM, QSV_MAXSHMEM,
                   24079:                             QSV_TOTAVAILMEM, QSV_TOTRESMEM };
                   24080: 
                   24081:   /* 8 bytes; timezone and weekday don't increase the randomness much */
                   24082:   if( (int)sizeof(dt)-3 <= nBuf - n ){
                   24083:     c += 0x0100;
                   24084:     DosGetDateTime(&dt);
                   24085:     dt.year = (USHORT)((dt.year - 1900) | c);
                   24086:     memcpy(&zBuf[n], &dt, sizeof(dt)-3);
                   24087:     n += sizeof(dt)-3;
                   24088:   }
                   24089: 
                   24090:   /* 4 bytes; PIDs and TIDs are 16 bit internally, so combine them */
                   24091:   if( (int)sizeof(ULONG) <= nBuf - n ){
                   24092:     DosGetInfoBlocks(&ptib, &ppib);
                   24093:     *(PULONG)&zBuf[n] = MAKELONG(ppib->pib_ulpid,
                   24094:                                  ptib->tib_ptib2->tib2_ultid);
                   24095:     n += sizeof(ULONG);
                   24096:   }
                   24097: 
                   24098:   /* Up to 6 * 4 bytes; variables depend on the system state */
                   24099:   for( i = 0; i < 6 && (int)sizeof(ULONG) <= nBuf - n; i++ ){
                   24100:     DosQuerySysInfo(svIdx[i], svIdx[i], 
                   24101:                     (PULONG)&zBuf[n], sizeof(ULONG));
                   24102:     n += sizeof(ULONG);
                   24103:   } 
                   24104: #endif
                   24105: 
                   24106:   return n;
                   24107: }
                   24108: 
                   24109: /*
                   24110: ** Sleep for a little while.  Return the amount of time slept.
                   24111: ** The argument is the number of microseconds we want to sleep.
                   24112: ** The return value is the number of microseconds of sleep actually
                   24113: ** requested from the underlying operating system, a number which
                   24114: ** might be greater than or equal to the argument, but not less
                   24115: ** than the argument.
                   24116: */
                   24117: static int os2Sleep( sqlite3_vfs *pVfs, int microsec ){
                   24118:   DosSleep( (microsec/1000) );
                   24119:   return microsec;
                   24120: }
                   24121: 
                   24122: /*
                   24123: ** The following variable, if set to a non-zero value, becomes the result
                   24124: ** returned from sqlite3OsCurrentTime().  This is used for testing.
                   24125: */
                   24126: #ifdef SQLITE_TEST
                   24127: SQLITE_API int sqlite3_current_time = 0;
                   24128: #endif
                   24129: 
                   24130: /*
                   24131: ** Find the current time (in Universal Coordinated Time).  Write into *piNow
                   24132: ** the current time and date as a Julian Day number times 86_400_000.  In
                   24133: ** other words, write into *piNow the number of milliseconds since the Julian
                   24134: ** epoch of noon in Greenwich on November 24, 4714 B.C according to the
                   24135: ** proleptic Gregorian calendar.
                   24136: **
                   24137: ** On success, return 0.  Return 1 if the time and date cannot be found.
                   24138: */
                   24139: static int os2CurrentTimeInt64(sqlite3_vfs *pVfs, sqlite3_int64 *piNow){
                   24140: #ifdef SQLITE_TEST
                   24141:   static const sqlite3_int64 unixEpoch = 24405875*(sqlite3_int64)8640000;
                   24142: #endif
                   24143:   int year, month, datepart, timepart;
                   24144:  
                   24145:   DATETIME dt;
                   24146:   DosGetDateTime( &dt );
                   24147: 
                   24148:   year = dt.year;
                   24149:   month = dt.month;
                   24150: 
                   24151:   /* Calculations from http://www.astro.keele.ac.uk/~rno/Astronomy/hjd.html
                   24152:   ** http://www.astro.keele.ac.uk/~rno/Astronomy/hjd-0.1.c
                   24153:   ** Calculate the Julian days
                   24154:   */
                   24155:   datepart = (int)dt.day - 32076 +
                   24156:     1461*(year + 4800 + (month - 14)/12)/4 +
                   24157:     367*(month - 2 - (month - 14)/12*12)/12 -
                   24158:     3*((year + 4900 + (month - 14)/12)/100)/4;
                   24159: 
                   24160:   /* Time in milliseconds, hours to noon added */
                   24161:   timepart = 12*3600*1000 + dt.hundredths*10 + dt.seconds*1000 +
                   24162:     ((int)dt.minutes + dt.timezone)*60*1000 + dt.hours*3600*1000;
                   24163: 
                   24164:   *piNow = (sqlite3_int64)datepart*86400*1000 + timepart;
                   24165:    
                   24166: #ifdef SQLITE_TEST
                   24167:   if( sqlite3_current_time ){
                   24168:     *piNow = 1000*(sqlite3_int64)sqlite3_current_time + unixEpoch;
                   24169:   }
                   24170: #endif
                   24171: 
                   24172:   UNUSED_PARAMETER(pVfs);
                   24173:   return 0;
                   24174: }
                   24175: 
                   24176: /*
                   24177: ** Find the current time (in Universal Coordinated Time).  Write the
                   24178: ** current time and date as a Julian Day number into *prNow and
                   24179: ** return 0.  Return 1 if the time and date cannot be found.
                   24180: */
                   24181: static int os2CurrentTime( sqlite3_vfs *pVfs, double *prNow ){
                   24182:   int rc;
                   24183:   sqlite3_int64 i;
                   24184:   rc = os2CurrentTimeInt64(pVfs, &i);
                   24185:   if( !rc ){
                   24186:     *prNow = i/86400000.0;
                   24187:   }
                   24188:   return rc;
                   24189: }
                   24190: 
                   24191: /*
                   24192: ** The idea is that this function works like a combination of
                   24193: ** GetLastError() and FormatMessage() on windows (or errno and
                   24194: ** strerror_r() on unix). After an error is returned by an OS
                   24195: ** function, SQLite calls this function with zBuf pointing to
                   24196: ** a buffer of nBuf bytes. The OS layer should populate the
                   24197: ** buffer with a nul-terminated UTF-8 encoded error message
                   24198: ** describing the last IO error to have occurred within the calling
                   24199: ** thread.
                   24200: **
                   24201: ** If the error message is too large for the supplied buffer,
                   24202: ** it should be truncated. The return value of xGetLastError
                   24203: ** is zero if the error message fits in the buffer, or non-zero
                   24204: ** otherwise (if the message was truncated). If non-zero is returned,
                   24205: ** then it is not necessary to include the nul-terminator character
                   24206: ** in the output buffer.
                   24207: **
                   24208: ** Not supplying an error message will have no adverse effect
                   24209: ** on SQLite. It is fine to have an implementation that never
                   24210: ** returns an error message:
                   24211: **
                   24212: **   int xGetLastError(sqlite3_vfs *pVfs, int nBuf, char *zBuf){
                   24213: **     assert(zBuf[0]=='\0');
                   24214: **     return 0;
                   24215: **   }
                   24216: **
                   24217: ** However if an error message is supplied, it will be incorporated
                   24218: ** by sqlite into the error message available to the user using
                   24219: ** sqlite3_errmsg(), possibly making IO errors easier to debug.
                   24220: */
                   24221: static int os2GetLastError(sqlite3_vfs *pVfs, int nBuf, char *zBuf){
                   24222:   assert(zBuf[0]=='\0');
                   24223:   return 0;
                   24224: }
                   24225: 
                   24226: /*
                   24227: ** Initialize and deinitialize the operating system interface.
                   24228: */
                   24229: SQLITE_API int sqlite3_os_init(void){
                   24230:   static sqlite3_vfs os2Vfs = {
                   24231:     3,                 /* iVersion */
                   24232:     sizeof(os2File),   /* szOsFile */
                   24233:     CCHMAXPATH,        /* mxPathname */
                   24234:     0,                 /* pNext */
                   24235:     "os2",             /* zName */
                   24236:     0,                 /* pAppData */
                   24237: 
                   24238:     os2Open,           /* xOpen */
                   24239:     os2Delete,         /* xDelete */
                   24240:     os2Access,         /* xAccess */
                   24241:     os2FullPathname,   /* xFullPathname */
                   24242:     os2DlOpen,         /* xDlOpen */
                   24243:     os2DlError,        /* xDlError */
                   24244:     os2DlSym,          /* xDlSym */
                   24245:     os2DlClose,        /* xDlClose */
                   24246:     os2Randomness,     /* xRandomness */
                   24247:     os2Sleep,          /* xSleep */
                   24248:     os2CurrentTime,    /* xCurrentTime */
                   24249:     os2GetLastError,   /* xGetLastError */
                   24250:     os2CurrentTimeInt64, /* xCurrentTimeInt64 */
                   24251:     0,                 /* xSetSystemCall */
                   24252:     0,                 /* xGetSystemCall */
                   24253:     0                  /* xNextSystemCall */
                   24254:   };
                   24255:   sqlite3_vfs_register(&os2Vfs, 1);
                   24256:   initUconvObjects();
                   24257: /*  sqlite3OSTrace = 1; */
                   24258:   return SQLITE_OK;
                   24259: }
                   24260: SQLITE_API int sqlite3_os_end(void){
                   24261:   freeUconvObjects();
                   24262:   return SQLITE_OK;
                   24263: }
                   24264: 
                   24265: #endif /* SQLITE_OS_OS2 */
                   24266: 
                   24267: /************** End of os_os2.c **********************************************/
                   24268: /************** Begin file os_unix.c *****************************************/
                   24269: /*
                   24270: ** 2004 May 22
                   24271: **
                   24272: ** The author disclaims copyright to this source code.  In place of
                   24273: ** a legal notice, here is a blessing:
                   24274: **
                   24275: **    May you do good and not evil.
                   24276: **    May you find forgiveness for yourself and forgive others.
                   24277: **    May you share freely, never taking more than you give.
                   24278: **
                   24279: ******************************************************************************
                   24280: **
                   24281: ** This file contains the VFS implementation for unix-like operating systems
                   24282: ** include Linux, MacOSX, *BSD, QNX, VxWorks, AIX, HPUX, and others.
                   24283: **
                   24284: ** There are actually several different VFS implementations in this file.
                   24285: ** The differences are in the way that file locking is done.  The default
                   24286: ** implementation uses Posix Advisory Locks.  Alternative implementations
                   24287: ** use flock(), dot-files, various proprietary locking schemas, or simply
                   24288: ** skip locking all together.
                   24289: **
                   24290: ** This source file is organized into divisions where the logic for various
                   24291: ** subfunctions is contained within the appropriate division.  PLEASE
                   24292: ** KEEP THE STRUCTURE OF THIS FILE INTACT.  New code should be placed
                   24293: ** in the correct division and should be clearly labeled.
                   24294: **
                   24295: ** The layout of divisions is as follows:
                   24296: **
                   24297: **   *  General-purpose declarations and utility functions.
                   24298: **   *  Unique file ID logic used by VxWorks.
                   24299: **   *  Various locking primitive implementations (all except proxy locking):
                   24300: **      + for Posix Advisory Locks
                   24301: **      + for no-op locks
                   24302: **      + for dot-file locks
                   24303: **      + for flock() locking
                   24304: **      + for named semaphore locks (VxWorks only)
                   24305: **      + for AFP filesystem locks (MacOSX only)
                   24306: **   *  sqlite3_file methods not associated with locking.
                   24307: **   *  Definitions of sqlite3_io_methods objects for all locking
                   24308: **      methods plus "finder" functions for each locking method.
                   24309: **   *  sqlite3_vfs method implementations.
                   24310: **   *  Locking primitives for the proxy uber-locking-method. (MacOSX only)
                   24311: **   *  Definitions of sqlite3_vfs objects for all locking methods
                   24312: **      plus implementations of sqlite3_os_init() and sqlite3_os_end().
                   24313: */
                   24314: #if SQLITE_OS_UNIX              /* This file is used on unix only */
                   24315: 
                   24316: /*
                   24317: ** There are various methods for file locking used for concurrency
                   24318: ** control:
                   24319: **
                   24320: **   1. POSIX locking (the default),
                   24321: **   2. No locking,
                   24322: **   3. Dot-file locking,
                   24323: **   4. flock() locking,
                   24324: **   5. AFP locking (OSX only),
                   24325: **   6. Named POSIX semaphores (VXWorks only),
                   24326: **   7. proxy locking. (OSX only)
                   24327: **
                   24328: ** Styles 4, 5, and 7 are only available of SQLITE_ENABLE_LOCKING_STYLE
                   24329: ** is defined to 1.  The SQLITE_ENABLE_LOCKING_STYLE also enables automatic
                   24330: ** selection of the appropriate locking style based on the filesystem
                   24331: ** where the database is located.  
                   24332: */
                   24333: #if !defined(SQLITE_ENABLE_LOCKING_STYLE)
                   24334: #  if defined(__APPLE__)
                   24335: #    define SQLITE_ENABLE_LOCKING_STYLE 1
                   24336: #  else
                   24337: #    define SQLITE_ENABLE_LOCKING_STYLE 0
                   24338: #  endif
                   24339: #endif
                   24340: 
                   24341: /*
                   24342: ** Define the OS_VXWORKS pre-processor macro to 1 if building on 
                   24343: ** vxworks, or 0 otherwise.
                   24344: */
                   24345: #ifndef OS_VXWORKS
                   24346: #  if defined(__RTP__) || defined(_WRS_KERNEL)
                   24347: #    define OS_VXWORKS 1
                   24348: #  else
                   24349: #    define OS_VXWORKS 0
                   24350: #  endif
                   24351: #endif
                   24352: 
                   24353: /*
                   24354: ** These #defines should enable >2GB file support on Posix if the
                   24355: ** underlying operating system supports it.  If the OS lacks
                   24356: ** large file support, these should be no-ops.
                   24357: **
                   24358: ** Large file support can be disabled using the -DSQLITE_DISABLE_LFS switch
                   24359: ** on the compiler command line.  This is necessary if you are compiling
                   24360: ** on a recent machine (ex: RedHat 7.2) but you want your code to work
                   24361: ** on an older machine (ex: RedHat 6.0).  If you compile on RedHat 7.2
                   24362: ** without this option, LFS is enable.  But LFS does not exist in the kernel
                   24363: ** in RedHat 6.0, so the code won't work.  Hence, for maximum binary
                   24364: ** portability you should omit LFS.
                   24365: **
                   24366: ** The previous paragraph was written in 2005.  (This paragraph is written
                   24367: ** on 2008-11-28.) These days, all Linux kernels support large files, so
                   24368: ** you should probably leave LFS enabled.  But some embedded platforms might
                   24369: ** lack LFS in which case the SQLITE_DISABLE_LFS macro might still be useful.
                   24370: */
                   24371: #ifndef SQLITE_DISABLE_LFS
                   24372: # define _LARGE_FILE       1
                   24373: # ifndef _FILE_OFFSET_BITS
                   24374: #   define _FILE_OFFSET_BITS 64
                   24375: # endif
                   24376: # define _LARGEFILE_SOURCE 1
                   24377: #endif
                   24378: 
                   24379: /*
                   24380: ** standard include files.
                   24381: */
                   24382: #include <sys/types.h>
                   24383: #include <sys/stat.h>
                   24384: #include <fcntl.h>
                   24385: #include <unistd.h>
                   24386: #include <sys/time.h>
                   24387: #include <errno.h>
                   24388: #ifndef SQLITE_OMIT_WAL
                   24389: #include <sys/mman.h>
                   24390: #endif
                   24391: 
                   24392: #if SQLITE_ENABLE_LOCKING_STYLE
                   24393: # include <sys/ioctl.h>
                   24394: # if OS_VXWORKS
                   24395: #  include <semaphore.h>
                   24396: #  include <limits.h>
                   24397: # else
                   24398: #  include <sys/file.h>
                   24399: #  include <sys/param.h>
                   24400: # endif
                   24401: #endif /* SQLITE_ENABLE_LOCKING_STYLE */
                   24402: 
                   24403: #if defined(__APPLE__) || (SQLITE_ENABLE_LOCKING_STYLE && !OS_VXWORKS)
                   24404: # include <sys/mount.h>
                   24405: #endif
                   24406: 
                   24407: #ifdef HAVE_UTIME
                   24408: # include <utime.h>
                   24409: #endif
                   24410: 
                   24411: /*
                   24412: ** Allowed values of unixFile.fsFlags
                   24413: */
                   24414: #define SQLITE_FSFLAGS_IS_MSDOS     0x1
                   24415: 
                   24416: /*
                   24417: ** If we are to be thread-safe, include the pthreads header and define
                   24418: ** the SQLITE_UNIX_THREADS macro.
                   24419: */
                   24420: #if SQLITE_THREADSAFE
                   24421: # define SQLITE_UNIX_THREADS 1
                   24422: #endif
                   24423: 
                   24424: /*
                   24425: ** Default permissions when creating a new file
                   24426: */
                   24427: #ifndef SQLITE_DEFAULT_FILE_PERMISSIONS
                   24428: # define SQLITE_DEFAULT_FILE_PERMISSIONS 0644
                   24429: #endif
                   24430: 
                   24431: /*
                   24432:  ** Default permissions when creating auto proxy dir
                   24433:  */
                   24434: #ifndef SQLITE_DEFAULT_PROXYDIR_PERMISSIONS
                   24435: # define SQLITE_DEFAULT_PROXYDIR_PERMISSIONS 0755
                   24436: #endif
                   24437: 
                   24438: /*
                   24439: ** Maximum supported path-length.
                   24440: */
                   24441: #define MAX_PATHNAME 512
                   24442: 
                   24443: /*
                   24444: ** Only set the lastErrno if the error code is a real error and not 
                   24445: ** a normal expected return code of SQLITE_BUSY or SQLITE_OK
                   24446: */
                   24447: #define IS_LOCK_ERROR(x)  ((x != SQLITE_OK) && (x != SQLITE_BUSY))
                   24448: 
                   24449: /* Forward references */
                   24450: typedef struct unixShm unixShm;               /* Connection shared memory */
                   24451: typedef struct unixShmNode unixShmNode;       /* Shared memory instance */
                   24452: typedef struct unixInodeInfo unixInodeInfo;   /* An i-node */
                   24453: typedef struct UnixUnusedFd UnixUnusedFd;     /* An unused file descriptor */
                   24454: 
                   24455: /*
                   24456: ** Sometimes, after a file handle is closed by SQLite, the file descriptor
                   24457: ** cannot be closed immediately. In these cases, instances of the following
                   24458: ** structure are used to store the file descriptor while waiting for an
                   24459: ** opportunity to either close or reuse it.
                   24460: */
                   24461: struct UnixUnusedFd {
                   24462:   int fd;                   /* File descriptor to close */
                   24463:   int flags;                /* Flags this file descriptor was opened with */
                   24464:   UnixUnusedFd *pNext;      /* Next unused file descriptor on same file */
                   24465: };
                   24466: 
                   24467: /*
                   24468: ** The unixFile structure is subclass of sqlite3_file specific to the unix
                   24469: ** VFS implementations.
                   24470: */
                   24471: typedef struct unixFile unixFile;
                   24472: struct unixFile {
                   24473:   sqlite3_io_methods const *pMethod;  /* Always the first entry */
                   24474:   unixInodeInfo *pInode;              /* Info about locks on this inode */
                   24475:   int h;                              /* The file descriptor */
                   24476:   int dirfd;                          /* File descriptor for the directory */
                   24477:   unsigned char eFileLock;            /* The type of lock held on this fd */
                   24478:   unsigned char ctrlFlags;            /* Behavioral bits.  UNIXFILE_* flags */
                   24479:   int lastErrno;                      /* The unix errno from last I/O error */
                   24480:   void *lockingContext;               /* Locking style specific state */
                   24481:   UnixUnusedFd *pUnused;              /* Pre-allocated UnixUnusedFd */
                   24482:   const char *zPath;                  /* Name of the file */
                   24483:   unixShm *pShm;                      /* Shared memory segment information */
                   24484:   int szChunk;                        /* Configured by FCNTL_CHUNK_SIZE */
                   24485: #if SQLITE_ENABLE_LOCKING_STYLE
                   24486:   int openFlags;                      /* The flags specified at open() */
                   24487: #endif
                   24488: #if SQLITE_ENABLE_LOCKING_STYLE || defined(__APPLE__)
                   24489:   unsigned fsFlags;                   /* cached details from statfs() */
                   24490: #endif
                   24491: #if OS_VXWORKS
                   24492:   int isDelete;                       /* Delete on close if true */
                   24493:   struct vxworksFileId *pId;          /* Unique file ID */
                   24494: #endif
                   24495: #ifndef NDEBUG
                   24496:   /* The next group of variables are used to track whether or not the
                   24497:   ** transaction counter in bytes 24-27 of database files are updated
                   24498:   ** whenever any part of the database changes.  An assertion fault will
                   24499:   ** occur if a file is updated without also updating the transaction
                   24500:   ** counter.  This test is made to avoid new problems similar to the
                   24501:   ** one described by ticket #3584. 
                   24502:   */
                   24503:   unsigned char transCntrChng;   /* True if the transaction counter changed */
                   24504:   unsigned char dbUpdate;        /* True if any part of database file changed */
                   24505:   unsigned char inNormalWrite;   /* True if in a normal write operation */
                   24506: #endif
                   24507: #ifdef SQLITE_TEST
                   24508:   /* In test mode, increase the size of this structure a bit so that 
                   24509:   ** it is larger than the struct CrashFile defined in test6.c.
                   24510:   */
                   24511:   char aPadding[32];
                   24512: #endif
                   24513: };
                   24514: 
                   24515: /*
                   24516: ** Allowed values for the unixFile.ctrlFlags bitmask:
                   24517: */
                   24518: #define UNIXFILE_EXCL   0x01     /* Connections from one process only */
                   24519: #define UNIXFILE_RDONLY 0x02     /* Connection is read only */
                   24520: 
                   24521: /*
                   24522: ** Include code that is common to all os_*.c files
                   24523: */
                   24524: /************** Include os_common.h in the middle of os_unix.c ***************/
                   24525: /************** Begin file os_common.h ***************************************/
                   24526: /*
                   24527: ** 2004 May 22
                   24528: **
                   24529: ** The author disclaims copyright to this source code.  In place of
                   24530: ** a legal notice, here is a blessing:
                   24531: **
                   24532: **    May you do good and not evil.
                   24533: **    May you find forgiveness for yourself and forgive others.
                   24534: **    May you share freely, never taking more than you give.
                   24535: **
                   24536: ******************************************************************************
                   24537: **
                   24538: ** This file contains macros and a little bit of code that is common to
                   24539: ** all of the platform-specific files (os_*.c) and is #included into those
                   24540: ** files.
                   24541: **
                   24542: ** This file should be #included by the os_*.c files only.  It is not a
                   24543: ** general purpose header file.
                   24544: */
                   24545: #ifndef _OS_COMMON_H_
                   24546: #define _OS_COMMON_H_
                   24547: 
                   24548: /*
                   24549: ** At least two bugs have slipped in because we changed the MEMORY_DEBUG
                   24550: ** macro to SQLITE_DEBUG and some older makefiles have not yet made the
                   24551: ** switch.  The following code should catch this problem at compile-time.
                   24552: */
                   24553: #ifdef MEMORY_DEBUG
                   24554: # error "The MEMORY_DEBUG macro is obsolete.  Use SQLITE_DEBUG instead."
                   24555: #endif
                   24556: 
                   24557: #ifdef SQLITE_DEBUG
                   24558: SQLITE_PRIVATE int sqlite3OSTrace = 0;
                   24559: #define OSTRACE(X)          if( sqlite3OSTrace ) sqlite3DebugPrintf X
                   24560: #else
                   24561: #define OSTRACE(X)
                   24562: #endif
                   24563: 
                   24564: /*
                   24565: ** Macros for performance tracing.  Normally turned off.  Only works
                   24566: ** on i486 hardware.
                   24567: */
                   24568: #ifdef SQLITE_PERFORMANCE_TRACE
                   24569: 
                   24570: /* 
                   24571: ** hwtime.h contains inline assembler code for implementing 
                   24572: ** high-performance timing routines.
                   24573: */
                   24574: /************** Include hwtime.h in the middle of os_common.h ****************/
                   24575: /************** Begin file hwtime.h ******************************************/
                   24576: /*
                   24577: ** 2008 May 27
                   24578: **
                   24579: ** The author disclaims copyright to this source code.  In place of
                   24580: ** a legal notice, here is a blessing:
                   24581: **
                   24582: **    May you do good and not evil.
                   24583: **    May you find forgiveness for yourself and forgive others.
                   24584: **    May you share freely, never taking more than you give.
                   24585: **
                   24586: ******************************************************************************
                   24587: **
                   24588: ** This file contains inline asm code for retrieving "high-performance"
                   24589: ** counters for x86 class CPUs.
                   24590: */
                   24591: #ifndef _HWTIME_H_
                   24592: #define _HWTIME_H_
                   24593: 
                   24594: /*
                   24595: ** The following routine only works on pentium-class (or newer) processors.
                   24596: ** It uses the RDTSC opcode to read the cycle count value out of the
                   24597: ** processor and returns that value.  This can be used for high-res
                   24598: ** profiling.
                   24599: */
                   24600: #if (defined(__GNUC__) || defined(_MSC_VER)) && \
                   24601:       (defined(i386) || defined(__i386__) || defined(_M_IX86))
                   24602: 
                   24603:   #if defined(__GNUC__)
                   24604: 
                   24605:   __inline__ sqlite_uint64 sqlite3Hwtime(void){
                   24606:      unsigned int lo, hi;
                   24607:      __asm__ __volatile__ ("rdtsc" : "=a" (lo), "=d" (hi));
                   24608:      return (sqlite_uint64)hi << 32 | lo;
                   24609:   }
                   24610: 
                   24611:   #elif defined(_MSC_VER)
                   24612: 
                   24613:   __declspec(naked) __inline sqlite_uint64 __cdecl sqlite3Hwtime(void){
                   24614:      __asm {
                   24615:         rdtsc
                   24616:         ret       ; return value at EDX:EAX
                   24617:      }
                   24618:   }
                   24619: 
                   24620:   #endif
                   24621: 
                   24622: #elif (defined(__GNUC__) && defined(__x86_64__))
                   24623: 
                   24624:   __inline__ sqlite_uint64 sqlite3Hwtime(void){
                   24625:       unsigned long val;
                   24626:       __asm__ __volatile__ ("rdtsc" : "=A" (val));
                   24627:       return val;
                   24628:   }
                   24629:  
                   24630: #elif (defined(__GNUC__) && defined(__ppc__))
                   24631: 
                   24632:   __inline__ sqlite_uint64 sqlite3Hwtime(void){
                   24633:       unsigned long long retval;
                   24634:       unsigned long junk;
                   24635:       __asm__ __volatile__ ("\n\
                   24636:           1:      mftbu   %1\n\
                   24637:                   mftb    %L0\n\
                   24638:                   mftbu   %0\n\
                   24639:                   cmpw    %0,%1\n\
                   24640:                   bne     1b"
                   24641:                   : "=r" (retval), "=r" (junk));
                   24642:       return retval;
                   24643:   }
                   24644: 
                   24645: #else
                   24646: 
                   24647:   #error Need implementation of sqlite3Hwtime() for your platform.
                   24648: 
                   24649:   /*
                   24650:   ** To compile without implementing sqlite3Hwtime() for your platform,
                   24651:   ** you can remove the above #error and use the following
                   24652:   ** stub function.  You will lose timing support for many
                   24653:   ** of the debugging and testing utilities, but it should at
                   24654:   ** least compile and run.
                   24655:   */
                   24656: SQLITE_PRIVATE   sqlite_uint64 sqlite3Hwtime(void){ return ((sqlite_uint64)0); }
                   24657: 
                   24658: #endif
                   24659: 
                   24660: #endif /* !defined(_HWTIME_H_) */
                   24661: 
                   24662: /************** End of hwtime.h **********************************************/
                   24663: /************** Continuing where we left off in os_common.h ******************/
                   24664: 
                   24665: static sqlite_uint64 g_start;
                   24666: static sqlite_uint64 g_elapsed;
                   24667: #define TIMER_START       g_start=sqlite3Hwtime()
                   24668: #define TIMER_END         g_elapsed=sqlite3Hwtime()-g_start
                   24669: #define TIMER_ELAPSED     g_elapsed
                   24670: #else
                   24671: #define TIMER_START
                   24672: #define TIMER_END
                   24673: #define TIMER_ELAPSED     ((sqlite_uint64)0)
                   24674: #endif
                   24675: 
                   24676: /*
                   24677: ** If we compile with the SQLITE_TEST macro set, then the following block
                   24678: ** of code will give us the ability to simulate a disk I/O error.  This
                   24679: ** is used for testing the I/O recovery logic.
                   24680: */
                   24681: #ifdef SQLITE_TEST
                   24682: SQLITE_API int sqlite3_io_error_hit = 0;            /* Total number of I/O Errors */
                   24683: SQLITE_API int sqlite3_io_error_hardhit = 0;        /* Number of non-benign errors */
                   24684: SQLITE_API int sqlite3_io_error_pending = 0;        /* Count down to first I/O error */
                   24685: SQLITE_API int sqlite3_io_error_persist = 0;        /* True if I/O errors persist */
                   24686: SQLITE_API int sqlite3_io_error_benign = 0;         /* True if errors are benign */
                   24687: SQLITE_API int sqlite3_diskfull_pending = 0;
                   24688: SQLITE_API int sqlite3_diskfull = 0;
                   24689: #define SimulateIOErrorBenign(X) sqlite3_io_error_benign=(X)
                   24690: #define SimulateIOError(CODE)  \
                   24691:   if( (sqlite3_io_error_persist && sqlite3_io_error_hit) \
                   24692:        || sqlite3_io_error_pending-- == 1 )  \
                   24693:               { local_ioerr(); CODE; }
                   24694: static void local_ioerr(){
                   24695:   IOTRACE(("IOERR\n"));
                   24696:   sqlite3_io_error_hit++;
                   24697:   if( !sqlite3_io_error_benign ) sqlite3_io_error_hardhit++;
                   24698: }
                   24699: #define SimulateDiskfullError(CODE) \
                   24700:    if( sqlite3_diskfull_pending ){ \
                   24701:      if( sqlite3_diskfull_pending == 1 ){ \
                   24702:        local_ioerr(); \
                   24703:        sqlite3_diskfull = 1; \
                   24704:        sqlite3_io_error_hit = 1; \
                   24705:        CODE; \
                   24706:      }else{ \
                   24707:        sqlite3_diskfull_pending--; \
                   24708:      } \
                   24709:    }
                   24710: #else
                   24711: #define SimulateIOErrorBenign(X)
                   24712: #define SimulateIOError(A)
                   24713: #define SimulateDiskfullError(A)
                   24714: #endif
                   24715: 
                   24716: /*
                   24717: ** When testing, keep a count of the number of open files.
                   24718: */
                   24719: #ifdef SQLITE_TEST
                   24720: SQLITE_API int sqlite3_open_file_count = 0;
                   24721: #define OpenCounter(X)  sqlite3_open_file_count+=(X)
                   24722: #else
                   24723: #define OpenCounter(X)
                   24724: #endif
                   24725: 
                   24726: #endif /* !defined(_OS_COMMON_H_) */
                   24727: 
                   24728: /************** End of os_common.h *******************************************/
                   24729: /************** Continuing where we left off in os_unix.c ********************/
                   24730: 
                   24731: /*
                   24732: ** Define various macros that are missing from some systems.
                   24733: */
                   24734: #ifndef O_LARGEFILE
                   24735: # define O_LARGEFILE 0
                   24736: #endif
                   24737: #ifdef SQLITE_DISABLE_LFS
                   24738: # undef O_LARGEFILE
                   24739: # define O_LARGEFILE 0
                   24740: #endif
                   24741: #ifndef O_NOFOLLOW
                   24742: # define O_NOFOLLOW 0
                   24743: #endif
                   24744: #ifndef O_BINARY
                   24745: # define O_BINARY 0
                   24746: #endif
                   24747: 
                   24748: /*
                   24749: ** The threadid macro resolves to the thread-id or to 0.  Used for
                   24750: ** testing and debugging only.
                   24751: */
                   24752: #if SQLITE_THREADSAFE
                   24753: #define threadid pthread_self()
                   24754: #else
                   24755: #define threadid 0
                   24756: #endif
                   24757: 
                   24758: /*
                   24759: ** Different Unix systems declare open() in different ways.  Same use
                   24760: ** open(const char*,int,mode_t).  Others use open(const char*,int,...).
                   24761: ** The difference is important when using a pointer to the function.
                   24762: **
                   24763: ** The safest way to deal with the problem is to always use this wrapper
                   24764: ** which always has the same well-defined interface.
                   24765: */
                   24766: static int posixOpen(const char *zFile, int flags, int mode){
                   24767:   return open(zFile, flags, mode);
                   24768: }
                   24769: 
                   24770: /*
                   24771: ** Many system calls are accessed through pointer-to-functions so that
                   24772: ** they may be overridden at runtime to facilitate fault injection during
                   24773: ** testing and sandboxing.  The following array holds the names and pointers
                   24774: ** to all overrideable system calls.
                   24775: */
                   24776: static struct unix_syscall {
                   24777:   const char *zName;            /* Name of the sytem call */
                   24778:   sqlite3_syscall_ptr pCurrent; /* Current value of the system call */
                   24779:   sqlite3_syscall_ptr pDefault; /* Default value */
                   24780: } aSyscall[] = {
                   24781:   { "open",         (sqlite3_syscall_ptr)posixOpen,  0  },
                   24782: #define osOpen      ((int(*)(const char*,int,int))aSyscall[0].pCurrent)
                   24783: 
                   24784:   { "close",        (sqlite3_syscall_ptr)close,      0  },
                   24785: #define osClose     ((int(*)(int))aSyscall[1].pCurrent)
                   24786: 
                   24787:   { "access",       (sqlite3_syscall_ptr)access,     0  },
                   24788: #define osAccess    ((int(*)(const char*,int))aSyscall[2].pCurrent)
                   24789: 
                   24790:   { "getcwd",       (sqlite3_syscall_ptr)getcwd,     0  },
                   24791: #define osGetcwd    ((char*(*)(char*,size_t))aSyscall[3].pCurrent)
                   24792: 
                   24793:   { "stat",         (sqlite3_syscall_ptr)stat,       0  },
                   24794: #define osStat      ((int(*)(const char*,struct stat*))aSyscall[4].pCurrent)
                   24795: 
                   24796: /*
                   24797: ** The DJGPP compiler environment looks mostly like Unix, but it
                   24798: ** lacks the fcntl() system call.  So redefine fcntl() to be something
                   24799: ** that always succeeds.  This means that locking does not occur under
                   24800: ** DJGPP.  But it is DOS - what did you expect?
                   24801: */
                   24802: #ifdef __DJGPP__
                   24803:   { "fstat",        0,                 0  },
                   24804: #define osFstat(a,b,c)    0
                   24805: #else     
                   24806:   { "fstat",        (sqlite3_syscall_ptr)fstat,      0  },
                   24807: #define osFstat     ((int(*)(int,struct stat*))aSyscall[5].pCurrent)
                   24808: #endif
                   24809: 
                   24810:   { "ftruncate",    (sqlite3_syscall_ptr)ftruncate,  0  },
                   24811: #define osFtruncate ((int(*)(int,off_t))aSyscall[6].pCurrent)
                   24812: 
                   24813:   { "fcntl",        (sqlite3_syscall_ptr)fcntl,      0  },
                   24814: #define osFcntl     ((int(*)(int,int,...))aSyscall[7].pCurrent)
                   24815: 
                   24816:   { "read",         (sqlite3_syscall_ptr)read,       0  },
                   24817: #define osRead      ((ssize_t(*)(int,void*,size_t))aSyscall[8].pCurrent)
                   24818: 
                   24819: #if defined(USE_PREAD) || SQLITE_ENABLE_LOCKING_STYLE
                   24820:   { "pread",        (sqlite3_syscall_ptr)pread,      0  },
                   24821: #else
                   24822:   { "pread",        (sqlite3_syscall_ptr)0,          0  },
                   24823: #endif
                   24824: #define osPread     ((ssize_t(*)(int,void*,size_t,off_t))aSyscall[9].pCurrent)
                   24825: 
                   24826: #if defined(USE_PREAD64)
                   24827:   { "pread64",      (sqlite3_syscall_ptr)pread64,    0  },
                   24828: #else
                   24829:   { "pread64",      (sqlite3_syscall_ptr)0,          0  },
                   24830: #endif
                   24831: #define osPread64   ((ssize_t(*)(int,void*,size_t,off_t))aSyscall[10].pCurrent)
                   24832: 
                   24833:   { "write",        (sqlite3_syscall_ptr)write,      0  },
                   24834: #define osWrite     ((ssize_t(*)(int,const void*,size_t))aSyscall[11].pCurrent)
                   24835: 
                   24836: #if defined(USE_PREAD) || SQLITE_ENABLE_LOCKING_STYLE
                   24837:   { "pwrite",       (sqlite3_syscall_ptr)pwrite,     0  },
                   24838: #else
                   24839:   { "pwrite",       (sqlite3_syscall_ptr)0,          0  },
                   24840: #endif
                   24841: #define osPwrite    ((ssize_t(*)(int,const void*,size_t,off_t))\
                   24842:                     aSyscall[12].pCurrent)
                   24843: 
                   24844: #if defined(USE_PREAD64)
                   24845:   { "pwrite64",     (sqlite3_syscall_ptr)pwrite64,   0  },
                   24846: #else
                   24847:   { "pwrite64",     (sqlite3_syscall_ptr)0,          0  },
                   24848: #endif
                   24849: #define osPwrite64  ((ssize_t(*)(int,const void*,size_t,off_t))\
                   24850:                     aSyscall[13].pCurrent)
                   24851: 
                   24852: #if SQLITE_ENABLE_LOCKING_STYLE
                   24853:   { "fchmod",       (sqlite3_syscall_ptr)fchmod,     0  },
                   24854: #else
                   24855:   { "fchmod",       (sqlite3_syscall_ptr)0,          0  },
                   24856: #endif
                   24857: #define osFchmod    ((int(*)(int,mode_t))aSyscall[14].pCurrent)
                   24858: 
                   24859: #if defined(HAVE_POSIX_FALLOCATE) && HAVE_POSIX_FALLOCATE
                   24860:   { "fallocate",    (sqlite3_syscall_ptr)posix_fallocate,  0 },
                   24861: #else
                   24862:   { "fallocate",    (sqlite3_syscall_ptr)0,                0 },
                   24863: #endif
                   24864: #define osFallocate ((int(*)(int,off_t,off_t))aSyscall[15].pCurrent)
                   24865: 
                   24866: }; /* End of the overrideable system calls */
                   24867: 
                   24868: /*
                   24869: ** This is the xSetSystemCall() method of sqlite3_vfs for all of the
                   24870: ** "unix" VFSes.  Return SQLITE_OK opon successfully updating the
                   24871: ** system call pointer, or SQLITE_NOTFOUND if there is no configurable
                   24872: ** system call named zName.
                   24873: */
                   24874: static int unixSetSystemCall(
                   24875:   sqlite3_vfs *pNotUsed,        /* The VFS pointer.  Not used */
                   24876:   const char *zName,            /* Name of system call to override */
                   24877:   sqlite3_syscall_ptr pNewFunc  /* Pointer to new system call value */
                   24878: ){
                   24879:   unsigned int i;
                   24880:   int rc = SQLITE_NOTFOUND;
                   24881: 
                   24882:   UNUSED_PARAMETER(pNotUsed);
                   24883:   if( zName==0 ){
                   24884:     /* If no zName is given, restore all system calls to their default
                   24885:     ** settings and return NULL
                   24886:     */
                   24887:     rc = SQLITE_OK;
                   24888:     for(i=0; i<sizeof(aSyscall)/sizeof(aSyscall[0]); i++){
                   24889:       if( aSyscall[i].pDefault ){
                   24890:         aSyscall[i].pCurrent = aSyscall[i].pDefault;
                   24891:       }
                   24892:     }
                   24893:   }else{
                   24894:     /* If zName is specified, operate on only the one system call
                   24895:     ** specified.
                   24896:     */
                   24897:     for(i=0; i<sizeof(aSyscall)/sizeof(aSyscall[0]); i++){
                   24898:       if( strcmp(zName, aSyscall[i].zName)==0 ){
                   24899:         if( aSyscall[i].pDefault==0 ){
                   24900:           aSyscall[i].pDefault = aSyscall[i].pCurrent;
                   24901:         }
                   24902:         rc = SQLITE_OK;
                   24903:         if( pNewFunc==0 ) pNewFunc = aSyscall[i].pDefault;
                   24904:         aSyscall[i].pCurrent = pNewFunc;
                   24905:         break;
                   24906:       }
                   24907:     }
                   24908:   }
                   24909:   return rc;
                   24910: }
                   24911: 
                   24912: /*
                   24913: ** Return the value of a system call.  Return NULL if zName is not a
                   24914: ** recognized system call name.  NULL is also returned if the system call
                   24915: ** is currently undefined.
                   24916: */
                   24917: static sqlite3_syscall_ptr unixGetSystemCall(
                   24918:   sqlite3_vfs *pNotUsed,
                   24919:   const char *zName
                   24920: ){
                   24921:   unsigned int i;
                   24922: 
                   24923:   UNUSED_PARAMETER(pNotUsed);
                   24924:   for(i=0; i<sizeof(aSyscall)/sizeof(aSyscall[0]); i++){
                   24925:     if( strcmp(zName, aSyscall[i].zName)==0 ) return aSyscall[i].pCurrent;
                   24926:   }
                   24927:   return 0;
                   24928: }
                   24929: 
                   24930: /*
                   24931: ** Return the name of the first system call after zName.  If zName==NULL
                   24932: ** then return the name of the first system call.  Return NULL if zName
                   24933: ** is the last system call or if zName is not the name of a valid
                   24934: ** system call.
                   24935: */
                   24936: static const char *unixNextSystemCall(sqlite3_vfs *p, const char *zName){
                   24937:   int i = -1;
                   24938: 
                   24939:   UNUSED_PARAMETER(p);
                   24940:   if( zName ){
                   24941:     for(i=0; i<ArraySize(aSyscall)-1; i++){
                   24942:       if( strcmp(zName, aSyscall[i].zName)==0 ) break;
                   24943:     }
                   24944:   }
                   24945:   for(i++; i<ArraySize(aSyscall); i++){
                   24946:     if( aSyscall[i].pCurrent!=0 ) return aSyscall[i].zName;
                   24947:   }
                   24948:   return 0;
                   24949: }
                   24950: 
                   24951: /*
                   24952: ** Retry open() calls that fail due to EINTR
                   24953: */
                   24954: static int robust_open(const char *z, int f, int m){
                   24955:   int rc;
                   24956:   do{ rc = osOpen(z,f,m); }while( rc<0 && errno==EINTR );
                   24957:   return rc;
                   24958: }
                   24959: 
                   24960: /*
                   24961: ** Helper functions to obtain and relinquish the global mutex. The
                   24962: ** global mutex is used to protect the unixInodeInfo and
                   24963: ** vxworksFileId objects used by this file, all of which may be 
                   24964: ** shared by multiple threads.
                   24965: **
                   24966: ** Function unixMutexHeld() is used to assert() that the global mutex 
                   24967: ** is held when required. This function is only used as part of assert() 
                   24968: ** statements. e.g.
                   24969: **
                   24970: **   unixEnterMutex()
                   24971: **     assert( unixMutexHeld() );
                   24972: **   unixEnterLeave()
                   24973: */
                   24974: static void unixEnterMutex(void){
                   24975:   sqlite3_mutex_enter(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER));
                   24976: }
                   24977: static void unixLeaveMutex(void){
                   24978:   sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER));
                   24979: }
                   24980: #ifdef SQLITE_DEBUG
                   24981: static int unixMutexHeld(void) {
                   24982:   return sqlite3_mutex_held(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER));
                   24983: }
                   24984: #endif
                   24985: 
                   24986: 
                   24987: #ifdef SQLITE_DEBUG
                   24988: /*
                   24989: ** Helper function for printing out trace information from debugging
                   24990: ** binaries. This returns the string represetation of the supplied
                   24991: ** integer lock-type.
                   24992: */
                   24993: static const char *azFileLock(int eFileLock){
                   24994:   switch( eFileLock ){
                   24995:     case NO_LOCK: return "NONE";
                   24996:     case SHARED_LOCK: return "SHARED";
                   24997:     case RESERVED_LOCK: return "RESERVED";
                   24998:     case PENDING_LOCK: return "PENDING";
                   24999:     case EXCLUSIVE_LOCK: return "EXCLUSIVE";
                   25000:   }
                   25001:   return "ERROR";
                   25002: }
                   25003: #endif
                   25004: 
                   25005: #ifdef SQLITE_LOCK_TRACE
                   25006: /*
                   25007: ** Print out information about all locking operations.
                   25008: **
                   25009: ** This routine is used for troubleshooting locks on multithreaded
                   25010: ** platforms.  Enable by compiling with the -DSQLITE_LOCK_TRACE
                   25011: ** command-line option on the compiler.  This code is normally
                   25012: ** turned off.
                   25013: */
                   25014: static int lockTrace(int fd, int op, struct flock *p){
                   25015:   char *zOpName, *zType;
                   25016:   int s;
                   25017:   int savedErrno;
                   25018:   if( op==F_GETLK ){
                   25019:     zOpName = "GETLK";
                   25020:   }else if( op==F_SETLK ){
                   25021:     zOpName = "SETLK";
                   25022:   }else{
                   25023:     s = osFcntl(fd, op, p);
                   25024:     sqlite3DebugPrintf("fcntl unknown %d %d %d\n", fd, op, s);
                   25025:     return s;
                   25026:   }
                   25027:   if( p->l_type==F_RDLCK ){
                   25028:     zType = "RDLCK";
                   25029:   }else if( p->l_type==F_WRLCK ){
                   25030:     zType = "WRLCK";
                   25031:   }else if( p->l_type==F_UNLCK ){
                   25032:     zType = "UNLCK";
                   25033:   }else{
                   25034:     assert( 0 );
                   25035:   }
                   25036:   assert( p->l_whence==SEEK_SET );
                   25037:   s = osFcntl(fd, op, p);
                   25038:   savedErrno = errno;
                   25039:   sqlite3DebugPrintf("fcntl %d %d %s %s %d %d %d %d\n",
                   25040:      threadid, fd, zOpName, zType, (int)p->l_start, (int)p->l_len,
                   25041:      (int)p->l_pid, s);
                   25042:   if( s==(-1) && op==F_SETLK && (p->l_type==F_RDLCK || p->l_type==F_WRLCK) ){
                   25043:     struct flock l2;
                   25044:     l2 = *p;
                   25045:     osFcntl(fd, F_GETLK, &l2);
                   25046:     if( l2.l_type==F_RDLCK ){
                   25047:       zType = "RDLCK";
                   25048:     }else if( l2.l_type==F_WRLCK ){
                   25049:       zType = "WRLCK";
                   25050:     }else if( l2.l_type==F_UNLCK ){
                   25051:       zType = "UNLCK";
                   25052:     }else{
                   25053:       assert( 0 );
                   25054:     }
                   25055:     sqlite3DebugPrintf("fcntl-failure-reason: %s %d %d %d\n",
                   25056:        zType, (int)l2.l_start, (int)l2.l_len, (int)l2.l_pid);
                   25057:   }
                   25058:   errno = savedErrno;
                   25059:   return s;
                   25060: }
                   25061: #undef osFcntl
                   25062: #define osFcntl lockTrace
                   25063: #endif /* SQLITE_LOCK_TRACE */
                   25064: 
                   25065: /*
                   25066: ** Retry ftruncate() calls that fail due to EINTR
                   25067: */
                   25068: static int robust_ftruncate(int h, sqlite3_int64 sz){
                   25069:   int rc;
                   25070:   do{ rc = osFtruncate(h,sz); }while( rc<0 && errno==EINTR );
                   25071:   return rc;
                   25072: }
                   25073: 
                   25074: /*
                   25075: ** This routine translates a standard POSIX errno code into something
                   25076: ** useful to the clients of the sqlite3 functions.  Specifically, it is
                   25077: ** intended to translate a variety of "try again" errors into SQLITE_BUSY
                   25078: ** and a variety of "please close the file descriptor NOW" errors into 
                   25079: ** SQLITE_IOERR
                   25080: ** 
                   25081: ** Errors during initialization of locks, or file system support for locks,
                   25082: ** should handle ENOLCK, ENOTSUP, EOPNOTSUPP separately.
                   25083: */
                   25084: static int sqliteErrorFromPosixError(int posixError, int sqliteIOErr) {
                   25085:   switch (posixError) {
                   25086: #if 0
                   25087:   /* At one point this code was not commented out. In theory, this branch
                   25088:   ** should never be hit, as this function should only be called after
                   25089:   ** a locking-related function (i.e. fcntl()) has returned non-zero with
                   25090:   ** the value of errno as the first argument. Since a system call has failed,
                   25091:   ** errno should be non-zero.
                   25092:   **
                   25093:   ** Despite this, if errno really is zero, we still don't want to return
                   25094:   ** SQLITE_OK. The system call failed, and *some* SQLite error should be
                   25095:   ** propagated back to the caller. Commenting this branch out means errno==0
                   25096:   ** will be handled by the "default:" case below.
                   25097:   */
                   25098:   case 0: 
                   25099:     return SQLITE_OK;
                   25100: #endif
                   25101: 
                   25102:   case EAGAIN:
                   25103:   case ETIMEDOUT:
                   25104:   case EBUSY:
                   25105:   case EINTR:
                   25106:   case ENOLCK:  
                   25107:     /* random NFS retry error, unless during file system support 
                   25108:      * introspection, in which it actually means what it says */
                   25109:     return SQLITE_BUSY;
                   25110:     
                   25111:   case EACCES: 
                   25112:     /* EACCES is like EAGAIN during locking operations, but not any other time*/
                   25113:     if( (sqliteIOErr == SQLITE_IOERR_LOCK) || 
                   25114:        (sqliteIOErr == SQLITE_IOERR_UNLOCK) || 
                   25115:        (sqliteIOErr == SQLITE_IOERR_RDLOCK) ||
                   25116:        (sqliteIOErr == SQLITE_IOERR_CHECKRESERVEDLOCK) ){
                   25117:       return SQLITE_BUSY;
                   25118:     }
                   25119:     /* else fall through */
                   25120:   case EPERM: 
                   25121:     return SQLITE_PERM;
                   25122:     
                   25123:   /* EDEADLK is only possible if a call to fcntl(F_SETLKW) is made. And
                   25124:   ** this module never makes such a call. And the code in SQLite itself 
                   25125:   ** asserts that SQLITE_IOERR_BLOCKED is never returned. For these reasons
                   25126:   ** this case is also commented out. If the system does set errno to EDEADLK,
                   25127:   ** the default SQLITE_IOERR_XXX code will be returned. */
                   25128: #if 0
                   25129:   case EDEADLK:
                   25130:     return SQLITE_IOERR_BLOCKED;
                   25131: #endif
                   25132:     
                   25133: #if EOPNOTSUPP!=ENOTSUP
                   25134:   case EOPNOTSUPP: 
                   25135:     /* something went terribly awry, unless during file system support 
                   25136:      * introspection, in which it actually means what it says */
                   25137: #endif
                   25138: #ifdef ENOTSUP
                   25139:   case ENOTSUP: 
                   25140:     /* invalid fd, unless during file system support introspection, in which 
                   25141:      * it actually means what it says */
                   25142: #endif
                   25143:   case EIO:
                   25144:   case EBADF:
                   25145:   case EINVAL:
                   25146:   case ENOTCONN:
                   25147:   case ENODEV:
                   25148:   case ENXIO:
                   25149:   case ENOENT:
                   25150:   case ESTALE:
                   25151:   case ENOSYS:
                   25152:     /* these should force the client to close the file and reconnect */
                   25153:     
                   25154:   default: 
                   25155:     return sqliteIOErr;
                   25156:   }
                   25157: }
                   25158: 
                   25159: 
                   25160: 
                   25161: /******************************************************************************
                   25162: ****************** Begin Unique File ID Utility Used By VxWorks ***************
                   25163: **
                   25164: ** On most versions of unix, we can get a unique ID for a file by concatenating
                   25165: ** the device number and the inode number.  But this does not work on VxWorks.
                   25166: ** On VxWorks, a unique file id must be based on the canonical filename.
                   25167: **
                   25168: ** A pointer to an instance of the following structure can be used as a
                   25169: ** unique file ID in VxWorks.  Each instance of this structure contains
                   25170: ** a copy of the canonical filename.  There is also a reference count.  
                   25171: ** The structure is reclaimed when the number of pointers to it drops to
                   25172: ** zero.
                   25173: **
                   25174: ** There are never very many files open at one time and lookups are not
                   25175: ** a performance-critical path, so it is sufficient to put these
                   25176: ** structures on a linked list.
                   25177: */
                   25178: struct vxworksFileId {
                   25179:   struct vxworksFileId *pNext;  /* Next in a list of them all */
                   25180:   int nRef;                     /* Number of references to this one */
                   25181:   int nName;                    /* Length of the zCanonicalName[] string */
                   25182:   char *zCanonicalName;         /* Canonical filename */
                   25183: };
                   25184: 
                   25185: #if OS_VXWORKS
                   25186: /* 
                   25187: ** All unique filenames are held on a linked list headed by this
                   25188: ** variable:
                   25189: */
                   25190: static struct vxworksFileId *vxworksFileList = 0;
                   25191: 
                   25192: /*
                   25193: ** Simplify a filename into its canonical form
                   25194: ** by making the following changes:
                   25195: **
                   25196: **  * removing any trailing and duplicate /
                   25197: **  * convert /./ into just /
                   25198: **  * convert /A/../ where A is any simple name into just /
                   25199: **
                   25200: ** Changes are made in-place.  Return the new name length.
                   25201: **
                   25202: ** The original filename is in z[0..n-1].  Return the number of
                   25203: ** characters in the simplified name.
                   25204: */
                   25205: static int vxworksSimplifyName(char *z, int n){
                   25206:   int i, j;
                   25207:   while( n>1 && z[n-1]=='/' ){ n--; }
                   25208:   for(i=j=0; i<n; i++){
                   25209:     if( z[i]=='/' ){
                   25210:       if( z[i+1]=='/' ) continue;
                   25211:       if( z[i+1]=='.' && i+2<n && z[i+2]=='/' ){
                   25212:         i += 1;
                   25213:         continue;
                   25214:       }
                   25215:       if( z[i+1]=='.' && i+3<n && z[i+2]=='.' && z[i+3]=='/' ){
                   25216:         while( j>0 && z[j-1]!='/' ){ j--; }
                   25217:         if( j>0 ){ j--; }
                   25218:         i += 2;
                   25219:         continue;
                   25220:       }
                   25221:     }
                   25222:     z[j++] = z[i];
                   25223:   }
                   25224:   z[j] = 0;
                   25225:   return j;
                   25226: }
                   25227: 
                   25228: /*
                   25229: ** Find a unique file ID for the given absolute pathname.  Return
                   25230: ** a pointer to the vxworksFileId object.  This pointer is the unique
                   25231: ** file ID.
                   25232: **
                   25233: ** The nRef field of the vxworksFileId object is incremented before
                   25234: ** the object is returned.  A new vxworksFileId object is created
                   25235: ** and added to the global list if necessary.
                   25236: **
                   25237: ** If a memory allocation error occurs, return NULL.
                   25238: */
                   25239: static struct vxworksFileId *vxworksFindFileId(const char *zAbsoluteName){
                   25240:   struct vxworksFileId *pNew;         /* search key and new file ID */
                   25241:   struct vxworksFileId *pCandidate;   /* For looping over existing file IDs */
                   25242:   int n;                              /* Length of zAbsoluteName string */
                   25243: 
                   25244:   assert( zAbsoluteName[0]=='/' );
                   25245:   n = (int)strlen(zAbsoluteName);
                   25246:   pNew = sqlite3_malloc( sizeof(*pNew) + (n+1) );
                   25247:   if( pNew==0 ) return 0;
                   25248:   pNew->zCanonicalName = (char*)&pNew[1];
                   25249:   memcpy(pNew->zCanonicalName, zAbsoluteName, n+1);
                   25250:   n = vxworksSimplifyName(pNew->zCanonicalName, n);
                   25251: 
                   25252:   /* Search for an existing entry that matching the canonical name.
                   25253:   ** If found, increment the reference count and return a pointer to
                   25254:   ** the existing file ID.
                   25255:   */
                   25256:   unixEnterMutex();
                   25257:   for(pCandidate=vxworksFileList; pCandidate; pCandidate=pCandidate->pNext){
                   25258:     if( pCandidate->nName==n 
                   25259:      && memcmp(pCandidate->zCanonicalName, pNew->zCanonicalName, n)==0
                   25260:     ){
                   25261:        sqlite3_free(pNew);
                   25262:        pCandidate->nRef++;
                   25263:        unixLeaveMutex();
                   25264:        return pCandidate;
                   25265:     }
                   25266:   }
                   25267: 
                   25268:   /* No match was found.  We will make a new file ID */
                   25269:   pNew->nRef = 1;
                   25270:   pNew->nName = n;
                   25271:   pNew->pNext = vxworksFileList;
                   25272:   vxworksFileList = pNew;
                   25273:   unixLeaveMutex();
                   25274:   return pNew;
                   25275: }
                   25276: 
                   25277: /*
                   25278: ** Decrement the reference count on a vxworksFileId object.  Free
                   25279: ** the object when the reference count reaches zero.
                   25280: */
                   25281: static void vxworksReleaseFileId(struct vxworksFileId *pId){
                   25282:   unixEnterMutex();
                   25283:   assert( pId->nRef>0 );
                   25284:   pId->nRef--;
                   25285:   if( pId->nRef==0 ){
                   25286:     struct vxworksFileId **pp;
                   25287:     for(pp=&vxworksFileList; *pp && *pp!=pId; pp = &((*pp)->pNext)){}
                   25288:     assert( *pp==pId );
                   25289:     *pp = pId->pNext;
                   25290:     sqlite3_free(pId);
                   25291:   }
                   25292:   unixLeaveMutex();
                   25293: }
                   25294: #endif /* OS_VXWORKS */
                   25295: /*************** End of Unique File ID Utility Used By VxWorks ****************
                   25296: ******************************************************************************/
                   25297: 
                   25298: 
                   25299: /******************************************************************************
                   25300: *************************** Posix Advisory Locking ****************************
                   25301: **
                   25302: ** POSIX advisory locks are broken by design.  ANSI STD 1003.1 (1996)
                   25303: ** section 6.5.2.2 lines 483 through 490 specify that when a process
                   25304: ** sets or clears a lock, that operation overrides any prior locks set
                   25305: ** by the same process.  It does not explicitly say so, but this implies
                   25306: ** that it overrides locks set by the same process using a different
                   25307: ** file descriptor.  Consider this test case:
                   25308: **
                   25309: **       int fd1 = open("./file1", O_RDWR|O_CREAT, 0644);
                   25310: **       int fd2 = open("./file2", O_RDWR|O_CREAT, 0644);
                   25311: **
                   25312: ** Suppose ./file1 and ./file2 are really the same file (because
                   25313: ** one is a hard or symbolic link to the other) then if you set
                   25314: ** an exclusive lock on fd1, then try to get an exclusive lock
                   25315: ** on fd2, it works.  I would have expected the second lock to
                   25316: ** fail since there was already a lock on the file due to fd1.
                   25317: ** But not so.  Since both locks came from the same process, the
                   25318: ** second overrides the first, even though they were on different
                   25319: ** file descriptors opened on different file names.
                   25320: **
                   25321: ** This means that we cannot use POSIX locks to synchronize file access
                   25322: ** among competing threads of the same process.  POSIX locks will work fine
                   25323: ** to synchronize access for threads in separate processes, but not
                   25324: ** threads within the same process.
                   25325: **
                   25326: ** To work around the problem, SQLite has to manage file locks internally
                   25327: ** on its own.  Whenever a new database is opened, we have to find the
                   25328: ** specific inode of the database file (the inode is determined by the
                   25329: ** st_dev and st_ino fields of the stat structure that fstat() fills in)
                   25330: ** and check for locks already existing on that inode.  When locks are
                   25331: ** created or removed, we have to look at our own internal record of the
                   25332: ** locks to see if another thread has previously set a lock on that same
                   25333: ** inode.
                   25334: **
                   25335: ** (Aside: The use of inode numbers as unique IDs does not work on VxWorks.
                   25336: ** For VxWorks, we have to use the alternative unique ID system based on
                   25337: ** canonical filename and implemented in the previous division.)
                   25338: **
                   25339: ** The sqlite3_file structure for POSIX is no longer just an integer file
                   25340: ** descriptor.  It is now a structure that holds the integer file
                   25341: ** descriptor and a pointer to a structure that describes the internal
                   25342: ** locks on the corresponding inode.  There is one locking structure
                   25343: ** per inode, so if the same inode is opened twice, both unixFile structures
                   25344: ** point to the same locking structure.  The locking structure keeps
                   25345: ** a reference count (so we will know when to delete it) and a "cnt"
                   25346: ** field that tells us its internal lock status.  cnt==0 means the
                   25347: ** file is unlocked.  cnt==-1 means the file has an exclusive lock.
                   25348: ** cnt>0 means there are cnt shared locks on the file.
                   25349: **
                   25350: ** Any attempt to lock or unlock a file first checks the locking
                   25351: ** structure.  The fcntl() system call is only invoked to set a 
                   25352: ** POSIX lock if the internal lock structure transitions between
                   25353: ** a locked and an unlocked state.
                   25354: **
                   25355: ** But wait:  there are yet more problems with POSIX advisory locks.
                   25356: **
                   25357: ** If you close a file descriptor that points to a file that has locks,
                   25358: ** all locks on that file that are owned by the current process are
                   25359: ** released.  To work around this problem, each unixInodeInfo object
                   25360: ** maintains a count of the number of pending locks on tha inode.
                   25361: ** When an attempt is made to close an unixFile, if there are
                   25362: ** other unixFile open on the same inode that are holding locks, the call
                   25363: ** to close() the file descriptor is deferred until all of the locks clear.
                   25364: ** The unixInodeInfo structure keeps a list of file descriptors that need to
                   25365: ** be closed and that list is walked (and cleared) when the last lock
                   25366: ** clears.
                   25367: **
                   25368: ** Yet another problem:  LinuxThreads do not play well with posix locks.
                   25369: **
                   25370: ** Many older versions of linux use the LinuxThreads library which is
                   25371: ** not posix compliant.  Under LinuxThreads, a lock created by thread
                   25372: ** A cannot be modified or overridden by a different thread B.
                   25373: ** Only thread A can modify the lock.  Locking behavior is correct
                   25374: ** if the appliation uses the newer Native Posix Thread Library (NPTL)
                   25375: ** on linux - with NPTL a lock created by thread A can override locks
                   25376: ** in thread B.  But there is no way to know at compile-time which
                   25377: ** threading library is being used.  So there is no way to know at
                   25378: ** compile-time whether or not thread A can override locks on thread B.
                   25379: ** One has to do a run-time check to discover the behavior of the
                   25380: ** current process.
                   25381: **
                   25382: ** SQLite used to support LinuxThreads.  But support for LinuxThreads
                   25383: ** was dropped beginning with version 3.7.0.  SQLite will still work with
                   25384: ** LinuxThreads provided that (1) there is no more than one connection 
                   25385: ** per database file in the same process and (2) database connections
                   25386: ** do not move across threads.
                   25387: */
                   25388: 
                   25389: /*
                   25390: ** An instance of the following structure serves as the key used
                   25391: ** to locate a particular unixInodeInfo object.
                   25392: */
                   25393: struct unixFileId {
                   25394:   dev_t dev;                  /* Device number */
                   25395: #if OS_VXWORKS
                   25396:   struct vxworksFileId *pId;  /* Unique file ID for vxworks. */
                   25397: #else
                   25398:   ino_t ino;                  /* Inode number */
                   25399: #endif
                   25400: };
                   25401: 
                   25402: /*
                   25403: ** An instance of the following structure is allocated for each open
                   25404: ** inode.  Or, on LinuxThreads, there is one of these structures for
                   25405: ** each inode opened by each thread.
                   25406: **
                   25407: ** A single inode can have multiple file descriptors, so each unixFile
                   25408: ** structure contains a pointer to an instance of this object and this
                   25409: ** object keeps a count of the number of unixFile pointing to it.
                   25410: */
                   25411: struct unixInodeInfo {
                   25412:   struct unixFileId fileId;       /* The lookup key */
                   25413:   int nShared;                    /* Number of SHARED locks held */
                   25414:   unsigned char eFileLock;        /* One of SHARED_LOCK, RESERVED_LOCK etc. */
                   25415:   unsigned char bProcessLock;     /* An exclusive process lock is held */
                   25416:   int nRef;                       /* Number of pointers to this structure */
                   25417:   unixShmNode *pShmNode;          /* Shared memory associated with this inode */
                   25418:   int nLock;                      /* Number of outstanding file locks */
                   25419:   UnixUnusedFd *pUnused;          /* Unused file descriptors to close */
                   25420:   unixInodeInfo *pNext;           /* List of all unixInodeInfo objects */
                   25421:   unixInodeInfo *pPrev;           /*    .... doubly linked */
                   25422: #if SQLITE_ENABLE_LOCKING_STYLE
                   25423:   unsigned long long sharedByte;  /* for AFP simulated shared lock */
                   25424: #endif
                   25425: #if OS_VXWORKS
                   25426:   sem_t *pSem;                    /* Named POSIX semaphore */
                   25427:   char aSemName[MAX_PATHNAME+2];  /* Name of that semaphore */
                   25428: #endif
                   25429: };
                   25430: 
                   25431: /*
                   25432: ** A lists of all unixInodeInfo objects.
                   25433: */
                   25434: static unixInodeInfo *inodeList = 0;
                   25435: 
                   25436: /*
                   25437: **
                   25438: ** This function - unixLogError_x(), is only ever called via the macro
                   25439: ** unixLogError().
                   25440: **
                   25441: ** It is invoked after an error occurs in an OS function and errno has been
                   25442: ** set. It logs a message using sqlite3_log() containing the current value of
                   25443: ** errno and, if possible, the human-readable equivalent from strerror() or
                   25444: ** strerror_r().
                   25445: **
                   25446: ** The first argument passed to the macro should be the error code that
                   25447: ** will be returned to SQLite (e.g. SQLITE_IOERR_DELETE, SQLITE_CANTOPEN). 
                   25448: ** The two subsequent arguments should be the name of the OS function that
                   25449: ** failed (e.g. "unlink", "open") and the the associated file-system path,
                   25450: ** if any.
                   25451: */
                   25452: #define unixLogError(a,b,c)     unixLogErrorAtLine(a,b,c,__LINE__)
                   25453: static int unixLogErrorAtLine(
                   25454:   int errcode,                    /* SQLite error code */
                   25455:   const char *zFunc,              /* Name of OS function that failed */
                   25456:   const char *zPath,              /* File path associated with error */
                   25457:   int iLine                       /* Source line number where error occurred */
                   25458: ){
                   25459:   char *zErr;                     /* Message from strerror() or equivalent */
                   25460:   int iErrno = errno;             /* Saved syscall error number */
                   25461: 
                   25462:   /* If this is not a threadsafe build (SQLITE_THREADSAFE==0), then use
                   25463:   ** the strerror() function to obtain the human-readable error message
                   25464:   ** equivalent to errno. Otherwise, use strerror_r().
                   25465:   */ 
                   25466: #if SQLITE_THREADSAFE && defined(HAVE_STRERROR_R)
                   25467:   char aErr[80];
                   25468:   memset(aErr, 0, sizeof(aErr));
                   25469:   zErr = aErr;
                   25470: 
                   25471:   /* If STRERROR_R_CHAR_P (set by autoconf scripts) or __USE_GNU is defined,
                   25472:   ** assume that the system provides the the GNU version of strerror_r() that 
                   25473:   ** returns a pointer to a buffer containing the error message. That pointer 
                   25474:   ** may point to aErr[], or it may point to some static storage somewhere. 
                   25475:   ** Otherwise, assume that the system provides the POSIX version of 
                   25476:   ** strerror_r(), which always writes an error message into aErr[].
                   25477:   **
                   25478:   ** If the code incorrectly assumes that it is the POSIX version that is
                   25479:   ** available, the error message will often be an empty string. Not a
                   25480:   ** huge problem. Incorrectly concluding that the GNU version is available 
                   25481:   ** could lead to a segfault though.
                   25482:   */
                   25483: #if defined(STRERROR_R_CHAR_P) || defined(__USE_GNU)
                   25484:   zErr = 
                   25485: # endif
                   25486:   strerror_r(iErrno, aErr, sizeof(aErr)-1);
                   25487: 
                   25488: #elif SQLITE_THREADSAFE
                   25489:   /* This is a threadsafe build, but strerror_r() is not available. */
                   25490:   zErr = "";
                   25491: #else
                   25492:   /* Non-threadsafe build, use strerror(). */
                   25493:   zErr = strerror(iErrno);
                   25494: #endif
                   25495: 
                   25496:   assert( errcode!=SQLITE_OK );
                   25497:   if( zPath==0 ) zPath = "";
                   25498:   sqlite3_log(errcode,
                   25499:       "os_unix.c:%d: (%d) %s(%s) - %s",
                   25500:       iLine, iErrno, zFunc, zPath, zErr
                   25501:   );
                   25502: 
                   25503:   return errcode;
                   25504: }
                   25505: 
                   25506: /*
                   25507: ** Close a file descriptor.
                   25508: **
                   25509: ** We assume that close() almost always works, since it is only in a
                   25510: ** very sick application or on a very sick platform that it might fail.
                   25511: ** If it does fail, simply leak the file descriptor, but do log the
                   25512: ** error.
                   25513: **
                   25514: ** Note that it is not safe to retry close() after EINTR since the
                   25515: ** file descriptor might have already been reused by another thread.
                   25516: ** So we don't even try to recover from an EINTR.  Just log the error
                   25517: ** and move on.
                   25518: */
                   25519: static void robust_close(unixFile *pFile, int h, int lineno){
                   25520:   if( osClose(h) ){
                   25521:     unixLogErrorAtLine(SQLITE_IOERR_CLOSE, "close",
                   25522:                        pFile ? pFile->zPath : 0, lineno);
                   25523:   }
                   25524: }
                   25525: 
                   25526: /*
                   25527: ** Close all file descriptors accumuated in the unixInodeInfo->pUnused list.
                   25528: */ 
                   25529: static void closePendingFds(unixFile *pFile){
                   25530:   unixInodeInfo *pInode = pFile->pInode;
                   25531:   UnixUnusedFd *p;
                   25532:   UnixUnusedFd *pNext;
                   25533:   for(p=pInode->pUnused; p; p=pNext){
                   25534:     pNext = p->pNext;
                   25535:     robust_close(pFile, p->fd, __LINE__);
                   25536:     sqlite3_free(p);
                   25537:   }
                   25538:   pInode->pUnused = 0;
                   25539: }
                   25540: 
                   25541: /*
                   25542: ** Release a unixInodeInfo structure previously allocated by findInodeInfo().
                   25543: **
                   25544: ** The mutex entered using the unixEnterMutex() function must be held
                   25545: ** when this function is called.
                   25546: */
                   25547: static void releaseInodeInfo(unixFile *pFile){
                   25548:   unixInodeInfo *pInode = pFile->pInode;
                   25549:   assert( unixMutexHeld() );
                   25550:   if( ALWAYS(pInode) ){
                   25551:     pInode->nRef--;
                   25552:     if( pInode->nRef==0 ){
                   25553:       assert( pInode->pShmNode==0 );
                   25554:       closePendingFds(pFile);
                   25555:       if( pInode->pPrev ){
                   25556:         assert( pInode->pPrev->pNext==pInode );
                   25557:         pInode->pPrev->pNext = pInode->pNext;
                   25558:       }else{
                   25559:         assert( inodeList==pInode );
                   25560:         inodeList = pInode->pNext;
                   25561:       }
                   25562:       if( pInode->pNext ){
                   25563:         assert( pInode->pNext->pPrev==pInode );
                   25564:         pInode->pNext->pPrev = pInode->pPrev;
                   25565:       }
                   25566:       sqlite3_free(pInode);
                   25567:     }
                   25568:   }
                   25569: }
                   25570: 
                   25571: /*
                   25572: ** Given a file descriptor, locate the unixInodeInfo object that
                   25573: ** describes that file descriptor.  Create a new one if necessary.  The
                   25574: ** return value might be uninitialized if an error occurs.
                   25575: **
                   25576: ** The mutex entered using the unixEnterMutex() function must be held
                   25577: ** when this function is called.
                   25578: **
                   25579: ** Return an appropriate error code.
                   25580: */
                   25581: static int findInodeInfo(
                   25582:   unixFile *pFile,               /* Unix file with file desc used in the key */
                   25583:   unixInodeInfo **ppInode        /* Return the unixInodeInfo object here */
                   25584: ){
                   25585:   int rc;                        /* System call return code */
                   25586:   int fd;                        /* The file descriptor for pFile */
                   25587:   struct unixFileId fileId;      /* Lookup key for the unixInodeInfo */
                   25588:   struct stat statbuf;           /* Low-level file information */
                   25589:   unixInodeInfo *pInode = 0;     /* Candidate unixInodeInfo object */
                   25590: 
                   25591:   assert( unixMutexHeld() );
                   25592: 
                   25593:   /* Get low-level information about the file that we can used to
                   25594:   ** create a unique name for the file.
                   25595:   */
                   25596:   fd = pFile->h;
                   25597:   rc = osFstat(fd, &statbuf);
                   25598:   if( rc!=0 ){
                   25599:     pFile->lastErrno = errno;
                   25600: #ifdef EOVERFLOW
                   25601:     if( pFile->lastErrno==EOVERFLOW ) return SQLITE_NOLFS;
                   25602: #endif
                   25603:     return SQLITE_IOERR;
                   25604:   }
                   25605: 
                   25606: #ifdef __APPLE__
                   25607:   /* On OS X on an msdos filesystem, the inode number is reported
                   25608:   ** incorrectly for zero-size files.  See ticket #3260.  To work
                   25609:   ** around this problem (we consider it a bug in OS X, not SQLite)
                   25610:   ** we always increase the file size to 1 by writing a single byte
                   25611:   ** prior to accessing the inode number.  The one byte written is
                   25612:   ** an ASCII 'S' character which also happens to be the first byte
                   25613:   ** in the header of every SQLite database.  In this way, if there
                   25614:   ** is a race condition such that another thread has already populated
                   25615:   ** the first page of the database, no damage is done.
                   25616:   */
                   25617:   if( statbuf.st_size==0 && (pFile->fsFlags & SQLITE_FSFLAGS_IS_MSDOS)!=0 ){
                   25618:     do{ rc = osWrite(fd, "S", 1); }while( rc<0 && errno==EINTR );
                   25619:     if( rc!=1 ){
                   25620:       pFile->lastErrno = errno;
                   25621:       return SQLITE_IOERR;
                   25622:     }
                   25623:     rc = osFstat(fd, &statbuf);
                   25624:     if( rc!=0 ){
                   25625:       pFile->lastErrno = errno;
                   25626:       return SQLITE_IOERR;
                   25627:     }
                   25628:   }
                   25629: #endif
                   25630: 
                   25631:   memset(&fileId, 0, sizeof(fileId));
                   25632:   fileId.dev = statbuf.st_dev;
                   25633: #if OS_VXWORKS
                   25634:   fileId.pId = pFile->pId;
                   25635: #else
                   25636:   fileId.ino = statbuf.st_ino;
                   25637: #endif
                   25638:   pInode = inodeList;
                   25639:   while( pInode && memcmp(&fileId, &pInode->fileId, sizeof(fileId)) ){
                   25640:     pInode = pInode->pNext;
                   25641:   }
                   25642:   if( pInode==0 ){
                   25643:     pInode = sqlite3_malloc( sizeof(*pInode) );
                   25644:     if( pInode==0 ){
                   25645:       return SQLITE_NOMEM;
                   25646:     }
                   25647:     memset(pInode, 0, sizeof(*pInode));
                   25648:     memcpy(&pInode->fileId, &fileId, sizeof(fileId));
                   25649:     pInode->nRef = 1;
                   25650:     pInode->pNext = inodeList;
                   25651:     pInode->pPrev = 0;
                   25652:     if( inodeList ) inodeList->pPrev = pInode;
                   25653:     inodeList = pInode;
                   25654:   }else{
                   25655:     pInode->nRef++;
                   25656:   }
                   25657:   *ppInode = pInode;
                   25658:   return SQLITE_OK;
                   25659: }
                   25660: 
                   25661: 
                   25662: /*
                   25663: ** This routine checks if there is a RESERVED lock held on the specified
                   25664: ** file by this or any other process. If such a lock is held, set *pResOut
                   25665: ** to a non-zero value otherwise *pResOut is set to zero.  The return value
                   25666: ** is set to SQLITE_OK unless an I/O error occurs during lock checking.
                   25667: */
                   25668: static int unixCheckReservedLock(sqlite3_file *id, int *pResOut){
                   25669:   int rc = SQLITE_OK;
                   25670:   int reserved = 0;
                   25671:   unixFile *pFile = (unixFile*)id;
                   25672: 
                   25673:   SimulateIOError( return SQLITE_IOERR_CHECKRESERVEDLOCK; );
                   25674: 
                   25675:   assert( pFile );
                   25676:   unixEnterMutex(); /* Because pFile->pInode is shared across threads */
                   25677: 
                   25678:   /* Check if a thread in this process holds such a lock */
                   25679:   if( pFile->pInode->eFileLock>SHARED_LOCK ){
                   25680:     reserved = 1;
                   25681:   }
                   25682: 
                   25683:   /* Otherwise see if some other process holds it.
                   25684:   */
                   25685: #ifndef __DJGPP__
                   25686:   if( !reserved && !pFile->pInode->bProcessLock ){
                   25687:     struct flock lock;
                   25688:     lock.l_whence = SEEK_SET;
                   25689:     lock.l_start = RESERVED_BYTE;
                   25690:     lock.l_len = 1;
                   25691:     lock.l_type = F_WRLCK;
                   25692:     if( osFcntl(pFile->h, F_GETLK, &lock) ){
                   25693:       rc = SQLITE_IOERR_CHECKRESERVEDLOCK;
                   25694:       pFile->lastErrno = errno;
                   25695:     } else if( lock.l_type!=F_UNLCK ){
                   25696:       reserved = 1;
                   25697:     }
                   25698:   }
                   25699: #endif
                   25700:   
                   25701:   unixLeaveMutex();
                   25702:   OSTRACE(("TEST WR-LOCK %d %d %d (unix)\n", pFile->h, rc, reserved));
                   25703: 
                   25704:   *pResOut = reserved;
                   25705:   return rc;
                   25706: }
                   25707: 
                   25708: /*
                   25709: ** Attempt to set a system-lock on the file pFile.  The lock is 
                   25710: ** described by pLock.
                   25711: **
                   25712: ** If the pFile was opened read/write from unix-excl, then the only lock
                   25713: ** ever obtained is an exclusive lock, and it is obtained exactly once
                   25714: ** the first time any lock is attempted.  All subsequent system locking
                   25715: ** operations become no-ops.  Locking operations still happen internally,
                   25716: ** in order to coordinate access between separate database connections
                   25717: ** within this process, but all of that is handled in memory and the
                   25718: ** operating system does not participate.
                   25719: **
                   25720: ** This function is a pass-through to fcntl(F_SETLK) if pFile is using
                   25721: ** any VFS other than "unix-excl" or if pFile is opened on "unix-excl"
                   25722: ** and is read-only.
                   25723: **
                   25724: ** Zero is returned if the call completes successfully, or -1 if a call
                   25725: ** to fcntl() fails. In this case, errno is set appropriately (by fcntl()).
                   25726: */
                   25727: static int unixFileLock(unixFile *pFile, struct flock *pLock){
                   25728:   int rc;
                   25729:   unixInodeInfo *pInode = pFile->pInode;
                   25730:   assert( unixMutexHeld() );
                   25731:   assert( pInode!=0 );
                   25732:   if( ((pFile->ctrlFlags & UNIXFILE_EXCL)!=0 || pInode->bProcessLock)
                   25733:    && ((pFile->ctrlFlags & UNIXFILE_RDONLY)==0)
                   25734:   ){
                   25735:     if( pInode->bProcessLock==0 ){
                   25736:       struct flock lock;
                   25737:       assert( pInode->nLock==0 );
                   25738:       lock.l_whence = SEEK_SET;
                   25739:       lock.l_start = SHARED_FIRST;
                   25740:       lock.l_len = SHARED_SIZE;
                   25741:       lock.l_type = F_WRLCK;
                   25742:       rc = osFcntl(pFile->h, F_SETLK, &lock);
                   25743:       if( rc<0 ) return rc;
                   25744:       pInode->bProcessLock = 1;
                   25745:       pInode->nLock++;
                   25746:     }else{
                   25747:       rc = 0;
                   25748:     }
                   25749:   }else{
                   25750:     rc = osFcntl(pFile->h, F_SETLK, pLock);
                   25751:   }
                   25752:   return rc;
                   25753: }
                   25754: 
                   25755: /*
                   25756: ** Lock the file with the lock specified by parameter eFileLock - one
                   25757: ** of the following:
                   25758: **
                   25759: **     (1) SHARED_LOCK
                   25760: **     (2) RESERVED_LOCK
                   25761: **     (3) PENDING_LOCK
                   25762: **     (4) EXCLUSIVE_LOCK
                   25763: **
                   25764: ** Sometimes when requesting one lock state, additional lock states
                   25765: ** are inserted in between.  The locking might fail on one of the later
                   25766: ** transitions leaving the lock state different from what it started but
                   25767: ** still short of its goal.  The following chart shows the allowed
                   25768: ** transitions and the inserted intermediate states:
                   25769: **
                   25770: **    UNLOCKED -> SHARED
                   25771: **    SHARED -> RESERVED
                   25772: **    SHARED -> (PENDING) -> EXCLUSIVE
                   25773: **    RESERVED -> (PENDING) -> EXCLUSIVE
                   25774: **    PENDING -> EXCLUSIVE
                   25775: **
                   25776: ** This routine will only increase a lock.  Use the sqlite3OsUnlock()
                   25777: ** routine to lower a locking level.
                   25778: */
                   25779: static int unixLock(sqlite3_file *id, int eFileLock){
                   25780:   /* The following describes the implementation of the various locks and
                   25781:   ** lock transitions in terms of the POSIX advisory shared and exclusive
                   25782:   ** lock primitives (called read-locks and write-locks below, to avoid
                   25783:   ** confusion with SQLite lock names). The algorithms are complicated
                   25784:   ** slightly in order to be compatible with windows systems simultaneously
                   25785:   ** accessing the same database file, in case that is ever required.
                   25786:   **
                   25787:   ** Symbols defined in os.h indentify the 'pending byte' and the 'reserved
                   25788:   ** byte', each single bytes at well known offsets, and the 'shared byte
                   25789:   ** range', a range of 510 bytes at a well known offset.
                   25790:   **
                   25791:   ** To obtain a SHARED lock, a read-lock is obtained on the 'pending
                   25792:   ** byte'.  If this is successful, a random byte from the 'shared byte
                   25793:   ** range' is read-locked and the lock on the 'pending byte' released.
                   25794:   **
                   25795:   ** A process may only obtain a RESERVED lock after it has a SHARED lock.
                   25796:   ** A RESERVED lock is implemented by grabbing a write-lock on the
                   25797:   ** 'reserved byte'. 
                   25798:   **
                   25799:   ** A process may only obtain a PENDING lock after it has obtained a
                   25800:   ** SHARED lock. A PENDING lock is implemented by obtaining a write-lock
                   25801:   ** on the 'pending byte'. This ensures that no new SHARED locks can be
                   25802:   ** obtained, but existing SHARED locks are allowed to persist. A process
                   25803:   ** does not have to obtain a RESERVED lock on the way to a PENDING lock.
                   25804:   ** This property is used by the algorithm for rolling back a journal file
                   25805:   ** after a crash.
                   25806:   **
                   25807:   ** An EXCLUSIVE lock, obtained after a PENDING lock is held, is
                   25808:   ** implemented by obtaining a write-lock on the entire 'shared byte
                   25809:   ** range'. Since all other locks require a read-lock on one of the bytes
                   25810:   ** within this range, this ensures that no other locks are held on the
                   25811:   ** database. 
                   25812:   **
                   25813:   ** The reason a single byte cannot be used instead of the 'shared byte
                   25814:   ** range' is that some versions of windows do not support read-locks. By
                   25815:   ** locking a random byte from a range, concurrent SHARED locks may exist
                   25816:   ** even if the locking primitive used is always a write-lock.
                   25817:   */
                   25818:   int rc = SQLITE_OK;
                   25819:   unixFile *pFile = (unixFile*)id;
                   25820:   unixInodeInfo *pInode = pFile->pInode;
                   25821:   struct flock lock;
                   25822:   int tErrno = 0;
                   25823: 
                   25824:   assert( pFile );
                   25825:   OSTRACE(("LOCK    %d %s was %s(%s,%d) pid=%d (unix)\n", pFile->h,
                   25826:       azFileLock(eFileLock), azFileLock(pFile->eFileLock),
                   25827:       azFileLock(pInode->eFileLock), pInode->nShared , getpid()));
                   25828: 
                   25829:   /* If there is already a lock of this type or more restrictive on the
                   25830:   ** unixFile, do nothing. Don't use the end_lock: exit path, as
                   25831:   ** unixEnterMutex() hasn't been called yet.
                   25832:   */
                   25833:   if( pFile->eFileLock>=eFileLock ){
                   25834:     OSTRACE(("LOCK    %d %s ok (already held) (unix)\n", pFile->h,
                   25835:             azFileLock(eFileLock)));
                   25836:     return SQLITE_OK;
                   25837:   }
                   25838: 
                   25839:   /* Make sure the locking sequence is correct.
                   25840:   **  (1) We never move from unlocked to anything higher than shared lock.
                   25841:   **  (2) SQLite never explicitly requests a pendig lock.
                   25842:   **  (3) A shared lock is always held when a reserve lock is requested.
                   25843:   */
                   25844:   assert( pFile->eFileLock!=NO_LOCK || eFileLock==SHARED_LOCK );
                   25845:   assert( eFileLock!=PENDING_LOCK );
                   25846:   assert( eFileLock!=RESERVED_LOCK || pFile->eFileLock==SHARED_LOCK );
                   25847: 
                   25848:   /* This mutex is needed because pFile->pInode is shared across threads
                   25849:   */
                   25850:   unixEnterMutex();
                   25851:   pInode = pFile->pInode;
                   25852: 
                   25853:   /* If some thread using this PID has a lock via a different unixFile*
                   25854:   ** handle that precludes the requested lock, return BUSY.
                   25855:   */
                   25856:   if( (pFile->eFileLock!=pInode->eFileLock && 
                   25857:           (pInode->eFileLock>=PENDING_LOCK || eFileLock>SHARED_LOCK))
                   25858:   ){
                   25859:     rc = SQLITE_BUSY;
                   25860:     goto end_lock;
                   25861:   }
                   25862: 
                   25863:   /* If a SHARED lock is requested, and some thread using this PID already
                   25864:   ** has a SHARED or RESERVED lock, then increment reference counts and
                   25865:   ** return SQLITE_OK.
                   25866:   */
                   25867:   if( eFileLock==SHARED_LOCK && 
                   25868:       (pInode->eFileLock==SHARED_LOCK || pInode->eFileLock==RESERVED_LOCK) ){
                   25869:     assert( eFileLock==SHARED_LOCK );
                   25870:     assert( pFile->eFileLock==0 );
                   25871:     assert( pInode->nShared>0 );
                   25872:     pFile->eFileLock = SHARED_LOCK;
                   25873:     pInode->nShared++;
                   25874:     pInode->nLock++;
                   25875:     goto end_lock;
                   25876:   }
                   25877: 
                   25878: 
                   25879:   /* A PENDING lock is needed before acquiring a SHARED lock and before
                   25880:   ** acquiring an EXCLUSIVE lock.  For the SHARED lock, the PENDING will
                   25881:   ** be released.
                   25882:   */
                   25883:   lock.l_len = 1L;
                   25884:   lock.l_whence = SEEK_SET;
                   25885:   if( eFileLock==SHARED_LOCK 
                   25886:       || (eFileLock==EXCLUSIVE_LOCK && pFile->eFileLock<PENDING_LOCK)
                   25887:   ){
                   25888:     lock.l_type = (eFileLock==SHARED_LOCK?F_RDLCK:F_WRLCK);
                   25889:     lock.l_start = PENDING_BYTE;
                   25890:     if( unixFileLock(pFile, &lock) ){
                   25891:       tErrno = errno;
                   25892:       rc = sqliteErrorFromPosixError(tErrno, SQLITE_IOERR_LOCK);
                   25893:       if( rc!=SQLITE_BUSY ){
                   25894:         pFile->lastErrno = tErrno;
                   25895:       }
                   25896:       goto end_lock;
                   25897:     }
                   25898:   }
                   25899: 
                   25900: 
                   25901:   /* If control gets to this point, then actually go ahead and make
                   25902:   ** operating system calls for the specified lock.
                   25903:   */
                   25904:   if( eFileLock==SHARED_LOCK ){
                   25905:     assert( pInode->nShared==0 );
                   25906:     assert( pInode->eFileLock==0 );
                   25907:     assert( rc==SQLITE_OK );
                   25908: 
                   25909:     /* Now get the read-lock */
                   25910:     lock.l_start = SHARED_FIRST;
                   25911:     lock.l_len = SHARED_SIZE;
                   25912:     if( unixFileLock(pFile, &lock) ){
                   25913:       tErrno = errno;
                   25914:       rc = sqliteErrorFromPosixError(tErrno, SQLITE_IOERR_LOCK);
                   25915:     }
                   25916: 
                   25917:     /* Drop the temporary PENDING lock */
                   25918:     lock.l_start = PENDING_BYTE;
                   25919:     lock.l_len = 1L;
                   25920:     lock.l_type = F_UNLCK;
                   25921:     if( unixFileLock(pFile, &lock) && rc==SQLITE_OK ){
                   25922:       /* This could happen with a network mount */
                   25923:       tErrno = errno;
                   25924:       rc = SQLITE_IOERR_UNLOCK; 
                   25925:     }
                   25926: 
                   25927:     if( rc ){
                   25928:       if( rc!=SQLITE_BUSY ){
                   25929:         pFile->lastErrno = tErrno;
                   25930:       }
                   25931:       goto end_lock;
                   25932:     }else{
                   25933:       pFile->eFileLock = SHARED_LOCK;
                   25934:       pInode->nLock++;
                   25935:       pInode->nShared = 1;
                   25936:     }
                   25937:   }else if( eFileLock==EXCLUSIVE_LOCK && pInode->nShared>1 ){
                   25938:     /* We are trying for an exclusive lock but another thread in this
                   25939:     ** same process is still holding a shared lock. */
                   25940:     rc = SQLITE_BUSY;
                   25941:   }else{
                   25942:     /* The request was for a RESERVED or EXCLUSIVE lock.  It is
                   25943:     ** assumed that there is a SHARED or greater lock on the file
                   25944:     ** already.
                   25945:     */
                   25946:     assert( 0!=pFile->eFileLock );
                   25947:     lock.l_type = F_WRLCK;
                   25948: 
                   25949:     assert( eFileLock==RESERVED_LOCK || eFileLock==EXCLUSIVE_LOCK );
                   25950:     if( eFileLock==RESERVED_LOCK ){
                   25951:       lock.l_start = RESERVED_BYTE;
                   25952:       lock.l_len = 1L;
                   25953:     }else{
                   25954:       lock.l_start = SHARED_FIRST;
                   25955:       lock.l_len = SHARED_SIZE;
                   25956:     }
                   25957: 
                   25958:     if( unixFileLock(pFile, &lock) ){
                   25959:       tErrno = errno;
                   25960:       rc = sqliteErrorFromPosixError(tErrno, SQLITE_IOERR_LOCK);
                   25961:       if( rc!=SQLITE_BUSY ){
                   25962:         pFile->lastErrno = tErrno;
                   25963:       }
                   25964:     }
                   25965:   }
                   25966:   
                   25967: 
                   25968: #ifndef NDEBUG
                   25969:   /* Set up the transaction-counter change checking flags when
                   25970:   ** transitioning from a SHARED to a RESERVED lock.  The change
                   25971:   ** from SHARED to RESERVED marks the beginning of a normal
                   25972:   ** write operation (not a hot journal rollback).
                   25973:   */
                   25974:   if( rc==SQLITE_OK
                   25975:    && pFile->eFileLock<=SHARED_LOCK
                   25976:    && eFileLock==RESERVED_LOCK
                   25977:   ){
                   25978:     pFile->transCntrChng = 0;
                   25979:     pFile->dbUpdate = 0;
                   25980:     pFile->inNormalWrite = 1;
                   25981:   }
                   25982: #endif
                   25983: 
                   25984: 
                   25985:   if( rc==SQLITE_OK ){
                   25986:     pFile->eFileLock = eFileLock;
                   25987:     pInode->eFileLock = eFileLock;
                   25988:   }else if( eFileLock==EXCLUSIVE_LOCK ){
                   25989:     pFile->eFileLock = PENDING_LOCK;
                   25990:     pInode->eFileLock = PENDING_LOCK;
                   25991:   }
                   25992: 
                   25993: end_lock:
                   25994:   unixLeaveMutex();
                   25995:   OSTRACE(("LOCK    %d %s %s (unix)\n", pFile->h, azFileLock(eFileLock), 
                   25996:       rc==SQLITE_OK ? "ok" : "failed"));
                   25997:   return rc;
                   25998: }
                   25999: 
                   26000: /*
                   26001: ** Add the file descriptor used by file handle pFile to the corresponding
                   26002: ** pUnused list.
                   26003: */
                   26004: static void setPendingFd(unixFile *pFile){
                   26005:   unixInodeInfo *pInode = pFile->pInode;
                   26006:   UnixUnusedFd *p = pFile->pUnused;
                   26007:   p->pNext = pInode->pUnused;
                   26008:   pInode->pUnused = p;
                   26009:   pFile->h = -1;
                   26010:   pFile->pUnused = 0;
                   26011: }
                   26012: 
                   26013: /*
                   26014: ** Lower the locking level on file descriptor pFile to eFileLock.  eFileLock
                   26015: ** must be either NO_LOCK or SHARED_LOCK.
                   26016: **
                   26017: ** If the locking level of the file descriptor is already at or below
                   26018: ** the requested locking level, this routine is a no-op.
                   26019: ** 
                   26020: ** If handleNFSUnlock is true, then on downgrading an EXCLUSIVE_LOCK to SHARED
                   26021: ** the byte range is divided into 2 parts and the first part is unlocked then
                   26022: ** set to a read lock, then the other part is simply unlocked.  This works 
                   26023: ** around a bug in BSD NFS lockd (also seen on MacOSX 10.3+) that fails to 
                   26024: ** remove the write lock on a region when a read lock is set.
                   26025: */
                   26026: static int posixUnlock(sqlite3_file *id, int eFileLock, int handleNFSUnlock){
                   26027:   unixFile *pFile = (unixFile*)id;
                   26028:   unixInodeInfo *pInode;
                   26029:   struct flock lock;
                   26030:   int rc = SQLITE_OK;
                   26031:   int h;
                   26032: 
                   26033:   assert( pFile );
                   26034:   OSTRACE(("UNLOCK  %d %d was %d(%d,%d) pid=%d (unix)\n", pFile->h, eFileLock,
                   26035:       pFile->eFileLock, pFile->pInode->eFileLock, pFile->pInode->nShared,
                   26036:       getpid()));
                   26037: 
                   26038:   assert( eFileLock<=SHARED_LOCK );
                   26039:   if( pFile->eFileLock<=eFileLock ){
                   26040:     return SQLITE_OK;
                   26041:   }
                   26042:   unixEnterMutex();
                   26043:   h = pFile->h;
                   26044:   pInode = pFile->pInode;
                   26045:   assert( pInode->nShared!=0 );
                   26046:   if( pFile->eFileLock>SHARED_LOCK ){
                   26047:     assert( pInode->eFileLock==pFile->eFileLock );
                   26048:     SimulateIOErrorBenign(1);
                   26049:     SimulateIOError( h=(-1) )
                   26050:     SimulateIOErrorBenign(0);
                   26051: 
                   26052: #ifndef NDEBUG
                   26053:     /* When reducing a lock such that other processes can start
                   26054:     ** reading the database file again, make sure that the
                   26055:     ** transaction counter was updated if any part of the database
                   26056:     ** file changed.  If the transaction counter is not updated,
                   26057:     ** other connections to the same file might not realize that
                   26058:     ** the file has changed and hence might not know to flush their
                   26059:     ** cache.  The use of a stale cache can lead to database corruption.
                   26060:     */
                   26061: #if 0
                   26062:     assert( pFile->inNormalWrite==0
                   26063:          || pFile->dbUpdate==0
                   26064:          || pFile->transCntrChng==1 );
                   26065: #endif
                   26066:     pFile->inNormalWrite = 0;
                   26067: #endif
                   26068: 
                   26069:     /* downgrading to a shared lock on NFS involves clearing the write lock
                   26070:     ** before establishing the readlock - to avoid a race condition we downgrade
                   26071:     ** the lock in 2 blocks, so that part of the range will be covered by a 
                   26072:     ** write lock until the rest is covered by a read lock:
                   26073:     **  1:   [WWWWW]
                   26074:     **  2:   [....W]
                   26075:     **  3:   [RRRRW]
                   26076:     **  4:   [RRRR.]
                   26077:     */
                   26078:     if( eFileLock==SHARED_LOCK ){
                   26079: 
                   26080: #if !defined(__APPLE__) || !SQLITE_ENABLE_LOCKING_STYLE
                   26081:       (void)handleNFSUnlock;
                   26082:       assert( handleNFSUnlock==0 );
                   26083: #endif
                   26084: #if defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE
                   26085:       if( handleNFSUnlock ){
                   26086:         int tErrno;               /* Error code from system call errors */
                   26087:         off_t divSize = SHARED_SIZE - 1;
                   26088:         
                   26089:         lock.l_type = F_UNLCK;
                   26090:         lock.l_whence = SEEK_SET;
                   26091:         lock.l_start = SHARED_FIRST;
                   26092:         lock.l_len = divSize;
                   26093:         if( unixFileLock(pFile, &lock)==(-1) ){
                   26094:           tErrno = errno;
                   26095:           rc = SQLITE_IOERR_UNLOCK;
                   26096:           if( IS_LOCK_ERROR(rc) ){
                   26097:             pFile->lastErrno = tErrno;
                   26098:           }
                   26099:           goto end_unlock;
                   26100:         }
                   26101:         lock.l_type = F_RDLCK;
                   26102:         lock.l_whence = SEEK_SET;
                   26103:         lock.l_start = SHARED_FIRST;
                   26104:         lock.l_len = divSize;
                   26105:         if( unixFileLock(pFile, &lock)==(-1) ){
                   26106:           tErrno = errno;
                   26107:           rc = sqliteErrorFromPosixError(tErrno, SQLITE_IOERR_RDLOCK);
                   26108:           if( IS_LOCK_ERROR(rc) ){
                   26109:             pFile->lastErrno = tErrno;
                   26110:           }
                   26111:           goto end_unlock;
                   26112:         }
                   26113:         lock.l_type = F_UNLCK;
                   26114:         lock.l_whence = SEEK_SET;
                   26115:         lock.l_start = SHARED_FIRST+divSize;
                   26116:         lock.l_len = SHARED_SIZE-divSize;
                   26117:         if( unixFileLock(pFile, &lock)==(-1) ){
                   26118:           tErrno = errno;
                   26119:           rc = SQLITE_IOERR_UNLOCK;
                   26120:           if( IS_LOCK_ERROR(rc) ){
                   26121:             pFile->lastErrno = tErrno;
                   26122:           }
                   26123:           goto end_unlock;
                   26124:         }
                   26125:       }else
                   26126: #endif /* defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE */
                   26127:       {
                   26128:         lock.l_type = F_RDLCK;
                   26129:         lock.l_whence = SEEK_SET;
                   26130:         lock.l_start = SHARED_FIRST;
                   26131:         lock.l_len = SHARED_SIZE;
                   26132:         if( unixFileLock(pFile, &lock) ){
                   26133:           /* In theory, the call to unixFileLock() cannot fail because another
                   26134:           ** process is holding an incompatible lock. If it does, this 
                   26135:           ** indicates that the other process is not following the locking
                   26136:           ** protocol. If this happens, return SQLITE_IOERR_RDLOCK. Returning
                   26137:           ** SQLITE_BUSY would confuse the upper layer (in practice it causes 
                   26138:           ** an assert to fail). */ 
                   26139:           rc = SQLITE_IOERR_RDLOCK;
                   26140:           pFile->lastErrno = errno;
                   26141:           goto end_unlock;
                   26142:         }
                   26143:       }
                   26144:     }
                   26145:     lock.l_type = F_UNLCK;
                   26146:     lock.l_whence = SEEK_SET;
                   26147:     lock.l_start = PENDING_BYTE;
                   26148:     lock.l_len = 2L;  assert( PENDING_BYTE+1==RESERVED_BYTE );
                   26149:     if( unixFileLock(pFile, &lock)==0 ){
                   26150:       pInode->eFileLock = SHARED_LOCK;
                   26151:     }else{
                   26152:       rc = SQLITE_IOERR_UNLOCK;
                   26153:       pFile->lastErrno = errno;
                   26154:       goto end_unlock;
                   26155:     }
                   26156:   }
                   26157:   if( eFileLock==NO_LOCK ){
                   26158:     /* Decrement the shared lock counter.  Release the lock using an
                   26159:     ** OS call only when all threads in this same process have released
                   26160:     ** the lock.
                   26161:     */
                   26162:     pInode->nShared--;
                   26163:     if( pInode->nShared==0 ){
                   26164:       lock.l_type = F_UNLCK;
                   26165:       lock.l_whence = SEEK_SET;
                   26166:       lock.l_start = lock.l_len = 0L;
                   26167:       SimulateIOErrorBenign(1);
                   26168:       SimulateIOError( h=(-1) )
                   26169:       SimulateIOErrorBenign(0);
                   26170:       if( unixFileLock(pFile, &lock)==0 ){
                   26171:         pInode->eFileLock = NO_LOCK;
                   26172:       }else{
                   26173:         rc = SQLITE_IOERR_UNLOCK;
                   26174:        pFile->lastErrno = errno;
                   26175:         pInode->eFileLock = NO_LOCK;
                   26176:         pFile->eFileLock = NO_LOCK;
                   26177:       }
                   26178:     }
                   26179: 
                   26180:     /* Decrement the count of locks against this same file.  When the
                   26181:     ** count reaches zero, close any other file descriptors whose close
                   26182:     ** was deferred because of outstanding locks.
                   26183:     */
                   26184:     pInode->nLock--;
                   26185:     assert( pInode->nLock>=0 );
                   26186:     if( pInode->nLock==0 ){
                   26187:       closePendingFds(pFile);
                   26188:     }
                   26189:   }
                   26190:        
                   26191: end_unlock:
                   26192:   unixLeaveMutex();
                   26193:   if( rc==SQLITE_OK ) pFile->eFileLock = eFileLock;
                   26194:   return rc;
                   26195: }
                   26196: 
                   26197: /*
                   26198: ** Lower the locking level on file descriptor pFile to eFileLock.  eFileLock
                   26199: ** must be either NO_LOCK or SHARED_LOCK.
                   26200: **
                   26201: ** If the locking level of the file descriptor is already at or below
                   26202: ** the requested locking level, this routine is a no-op.
                   26203: */
                   26204: static int unixUnlock(sqlite3_file *id, int eFileLock){
                   26205:   return posixUnlock(id, eFileLock, 0);
                   26206: }
                   26207: 
                   26208: /*
                   26209: ** This function performs the parts of the "close file" operation 
                   26210: ** common to all locking schemes. It closes the directory and file
                   26211: ** handles, if they are valid, and sets all fields of the unixFile
                   26212: ** structure to 0.
                   26213: **
                   26214: ** It is *not* necessary to hold the mutex when this routine is called,
                   26215: ** even on VxWorks.  A mutex will be acquired on VxWorks by the
                   26216: ** vxworksReleaseFileId() routine.
                   26217: */
                   26218: static int closeUnixFile(sqlite3_file *id){
                   26219:   unixFile *pFile = (unixFile*)id;
                   26220:   if( pFile->dirfd>=0 ){
                   26221:     robust_close(pFile, pFile->dirfd, __LINE__);
                   26222:     pFile->dirfd=-1;
                   26223:   }
                   26224:   if( pFile->h>=0 ){
                   26225:     robust_close(pFile, pFile->h, __LINE__);
                   26226:     pFile->h = -1;
                   26227:   }
                   26228: #if OS_VXWORKS
                   26229:   if( pFile->pId ){
                   26230:     if( pFile->isDelete ){
                   26231:       unlink(pFile->pId->zCanonicalName);
                   26232:     }
                   26233:     vxworksReleaseFileId(pFile->pId);
                   26234:     pFile->pId = 0;
                   26235:   }
                   26236: #endif
                   26237:   OSTRACE(("CLOSE   %-3d\n", pFile->h));
                   26238:   OpenCounter(-1);
                   26239:   sqlite3_free(pFile->pUnused);
                   26240:   memset(pFile, 0, sizeof(unixFile));
                   26241:   return SQLITE_OK;
                   26242: }
                   26243: 
                   26244: /*
                   26245: ** Close a file.
                   26246: */
                   26247: static int unixClose(sqlite3_file *id){
                   26248:   int rc = SQLITE_OK;
                   26249:   unixFile *pFile = (unixFile *)id;
                   26250:   unixUnlock(id, NO_LOCK);
                   26251:   unixEnterMutex();
                   26252: 
                   26253:   /* unixFile.pInode is always valid here. Otherwise, a different close
                   26254:   ** routine (e.g. nolockClose()) would be called instead.
                   26255:   */
                   26256:   assert( pFile->pInode->nLock>0 || pFile->pInode->bProcessLock==0 );
                   26257:   if( ALWAYS(pFile->pInode) && pFile->pInode->nLock ){
                   26258:     /* If there are outstanding locks, do not actually close the file just
                   26259:     ** yet because that would clear those locks.  Instead, add the file
                   26260:     ** descriptor to pInode->pUnused list.  It will be automatically closed 
                   26261:     ** when the last lock is cleared.
                   26262:     */
                   26263:     setPendingFd(pFile);
                   26264:   }
                   26265:   releaseInodeInfo(pFile);
                   26266:   rc = closeUnixFile(id);
                   26267:   unixLeaveMutex();
                   26268:   return rc;
                   26269: }
                   26270: 
                   26271: /************** End of the posix advisory lock implementation *****************
                   26272: ******************************************************************************/
                   26273: 
                   26274: /******************************************************************************
                   26275: ****************************** No-op Locking **********************************
                   26276: **
                   26277: ** Of the various locking implementations available, this is by far the
                   26278: ** simplest:  locking is ignored.  No attempt is made to lock the database
                   26279: ** file for reading or writing.
                   26280: **
                   26281: ** This locking mode is appropriate for use on read-only databases
                   26282: ** (ex: databases that are burned into CD-ROM, for example.)  It can
                   26283: ** also be used if the application employs some external mechanism to
                   26284: ** prevent simultaneous access of the same database by two or more
                   26285: ** database connections.  But there is a serious risk of database
                   26286: ** corruption if this locking mode is used in situations where multiple
                   26287: ** database connections are accessing the same database file at the same
                   26288: ** time and one or more of those connections are writing.
                   26289: */
                   26290: 
                   26291: static int nolockCheckReservedLock(sqlite3_file *NotUsed, int *pResOut){
                   26292:   UNUSED_PARAMETER(NotUsed);
                   26293:   *pResOut = 0;
                   26294:   return SQLITE_OK;
                   26295: }
                   26296: static int nolockLock(sqlite3_file *NotUsed, int NotUsed2){
                   26297:   UNUSED_PARAMETER2(NotUsed, NotUsed2);
                   26298:   return SQLITE_OK;
                   26299: }
                   26300: static int nolockUnlock(sqlite3_file *NotUsed, int NotUsed2){
                   26301:   UNUSED_PARAMETER2(NotUsed, NotUsed2);
                   26302:   return SQLITE_OK;
                   26303: }
                   26304: 
                   26305: /*
                   26306: ** Close the file.
                   26307: */
                   26308: static int nolockClose(sqlite3_file *id) {
                   26309:   return closeUnixFile(id);
                   26310: }
                   26311: 
                   26312: /******************* End of the no-op lock implementation *********************
                   26313: ******************************************************************************/
                   26314: 
                   26315: /******************************************************************************
                   26316: ************************* Begin dot-file Locking ******************************
                   26317: **
1.1.1.3 ! misho    26318: ** The dotfile locking implementation uses the existence of separate lock
1.1       misho    26319: ** files in order to control access to the database.  This works on just
                   26320: ** about every filesystem imaginable.  But there are serious downsides:
                   26321: **
                   26322: **    (1)  There is zero concurrency.  A single reader blocks all other
                   26323: **         connections from reading or writing the database.
                   26324: **
                   26325: **    (2)  An application crash or power loss can leave stale lock files
                   26326: **         sitting around that need to be cleared manually.
                   26327: **
                   26328: ** Nevertheless, a dotlock is an appropriate locking mode for use if no
                   26329: ** other locking strategy is available.
                   26330: **
                   26331: ** Dotfile locking works by creating a file in the same directory as the
                   26332: ** database and with the same name but with a ".lock" extension added.
1.1.1.3 ! misho    26333: ** The existence of a lock file implies an EXCLUSIVE lock.  All other lock
1.1       misho    26334: ** types (SHARED, RESERVED, PENDING) are mapped into EXCLUSIVE.
                   26335: */
                   26336: 
                   26337: /*
                   26338: ** The file suffix added to the data base filename in order to create the
                   26339: ** lock file.
                   26340: */
                   26341: #define DOTLOCK_SUFFIX ".lock"
                   26342: 
                   26343: /*
                   26344: ** This routine checks if there is a RESERVED lock held on the specified
                   26345: ** file by this or any other process. If such a lock is held, set *pResOut
                   26346: ** to a non-zero value otherwise *pResOut is set to zero.  The return value
                   26347: ** is set to SQLITE_OK unless an I/O error occurs during lock checking.
                   26348: **
                   26349: ** In dotfile locking, either a lock exists or it does not.  So in this
                   26350: ** variation of CheckReservedLock(), *pResOut is set to true if any lock
                   26351: ** is held on the file and false if the file is unlocked.
                   26352: */
                   26353: static int dotlockCheckReservedLock(sqlite3_file *id, int *pResOut) {
                   26354:   int rc = SQLITE_OK;
                   26355:   int reserved = 0;
                   26356:   unixFile *pFile = (unixFile*)id;
                   26357: 
                   26358:   SimulateIOError( return SQLITE_IOERR_CHECKRESERVEDLOCK; );
                   26359:   
                   26360:   assert( pFile );
                   26361: 
                   26362:   /* Check if a thread in this process holds such a lock */
                   26363:   if( pFile->eFileLock>SHARED_LOCK ){
                   26364:     /* Either this connection or some other connection in the same process
                   26365:     ** holds a lock on the file.  No need to check further. */
                   26366:     reserved = 1;
                   26367:   }else{
                   26368:     /* The lock is held if and only if the lockfile exists */
                   26369:     const char *zLockFile = (const char*)pFile->lockingContext;
                   26370:     reserved = osAccess(zLockFile, 0)==0;
                   26371:   }
                   26372:   OSTRACE(("TEST WR-LOCK %d %d %d (dotlock)\n", pFile->h, rc, reserved));
                   26373:   *pResOut = reserved;
                   26374:   return rc;
                   26375: }
                   26376: 
                   26377: /*
                   26378: ** Lock the file with the lock specified by parameter eFileLock - one
                   26379: ** of the following:
                   26380: **
                   26381: **     (1) SHARED_LOCK
                   26382: **     (2) RESERVED_LOCK
                   26383: **     (3) PENDING_LOCK
                   26384: **     (4) EXCLUSIVE_LOCK
                   26385: **
                   26386: ** Sometimes when requesting one lock state, additional lock states
                   26387: ** are inserted in between.  The locking might fail on one of the later
                   26388: ** transitions leaving the lock state different from what it started but
                   26389: ** still short of its goal.  The following chart shows the allowed
                   26390: ** transitions and the inserted intermediate states:
                   26391: **
                   26392: **    UNLOCKED -> SHARED
                   26393: **    SHARED -> RESERVED
                   26394: **    SHARED -> (PENDING) -> EXCLUSIVE
                   26395: **    RESERVED -> (PENDING) -> EXCLUSIVE
                   26396: **    PENDING -> EXCLUSIVE
                   26397: **
                   26398: ** This routine will only increase a lock.  Use the sqlite3OsUnlock()
                   26399: ** routine to lower a locking level.
                   26400: **
                   26401: ** With dotfile locking, we really only support state (4): EXCLUSIVE.
                   26402: ** But we track the other locking levels internally.
                   26403: */
                   26404: static int dotlockLock(sqlite3_file *id, int eFileLock) {
                   26405:   unixFile *pFile = (unixFile*)id;
                   26406:   int fd;
                   26407:   char *zLockFile = (char *)pFile->lockingContext;
                   26408:   int rc = SQLITE_OK;
                   26409: 
                   26410: 
                   26411:   /* If we have any lock, then the lock file already exists.  All we have
                   26412:   ** to do is adjust our internal record of the lock level.
                   26413:   */
                   26414:   if( pFile->eFileLock > NO_LOCK ){
                   26415:     pFile->eFileLock = eFileLock;
                   26416:     /* Always update the timestamp on the old file */
                   26417: #ifdef HAVE_UTIME
                   26418:     utime(zLockFile, NULL);
                   26419: #else
                   26420:     utimes(zLockFile, NULL);
                   26421: #endif
                   26422:     return SQLITE_OK;
                   26423:   }
                   26424:   
                   26425:   /* grab an exclusive lock */
                   26426:   fd = robust_open(zLockFile,O_RDONLY|O_CREAT|O_EXCL,0600);
                   26427:   if( fd<0 ){
                   26428:     /* failed to open/create the file, someone else may have stolen the lock */
                   26429:     int tErrno = errno;
                   26430:     if( EEXIST == tErrno ){
                   26431:       rc = SQLITE_BUSY;
                   26432:     } else {
                   26433:       rc = sqliteErrorFromPosixError(tErrno, SQLITE_IOERR_LOCK);
                   26434:       if( IS_LOCK_ERROR(rc) ){
                   26435:         pFile->lastErrno = tErrno;
                   26436:       }
                   26437:     }
                   26438:     return rc;
                   26439:   } 
                   26440:   robust_close(pFile, fd, __LINE__);
                   26441:   
                   26442:   /* got it, set the type and return ok */
                   26443:   pFile->eFileLock = eFileLock;
                   26444:   return rc;
                   26445: }
                   26446: 
                   26447: /*
                   26448: ** Lower the locking level on file descriptor pFile to eFileLock.  eFileLock
                   26449: ** must be either NO_LOCK or SHARED_LOCK.
                   26450: **
                   26451: ** If the locking level of the file descriptor is already at or below
                   26452: ** the requested locking level, this routine is a no-op.
                   26453: **
                   26454: ** When the locking level reaches NO_LOCK, delete the lock file.
                   26455: */
                   26456: static int dotlockUnlock(sqlite3_file *id, int eFileLock) {
                   26457:   unixFile *pFile = (unixFile*)id;
                   26458:   char *zLockFile = (char *)pFile->lockingContext;
                   26459: 
                   26460:   assert( pFile );
                   26461:   OSTRACE(("UNLOCK  %d %d was %d pid=%d (dotlock)\n", pFile->h, eFileLock,
                   26462:           pFile->eFileLock, getpid()));
                   26463:   assert( eFileLock<=SHARED_LOCK );
                   26464:   
                   26465:   /* no-op if possible */
                   26466:   if( pFile->eFileLock==eFileLock ){
                   26467:     return SQLITE_OK;
                   26468:   }
                   26469: 
                   26470:   /* To downgrade to shared, simply update our internal notion of the
                   26471:   ** lock state.  No need to mess with the file on disk.
                   26472:   */
                   26473:   if( eFileLock==SHARED_LOCK ){
                   26474:     pFile->eFileLock = SHARED_LOCK;
                   26475:     return SQLITE_OK;
                   26476:   }
                   26477:   
                   26478:   /* To fully unlock the database, delete the lock file */
                   26479:   assert( eFileLock==NO_LOCK );
                   26480:   if( unlink(zLockFile) ){
                   26481:     int rc = 0;
                   26482:     int tErrno = errno;
                   26483:     if( ENOENT != tErrno ){
                   26484:       rc = SQLITE_IOERR_UNLOCK;
                   26485:     }
                   26486:     if( IS_LOCK_ERROR(rc) ){
                   26487:       pFile->lastErrno = tErrno;
                   26488:     }
                   26489:     return rc; 
                   26490:   }
                   26491:   pFile->eFileLock = NO_LOCK;
                   26492:   return SQLITE_OK;
                   26493: }
                   26494: 
                   26495: /*
                   26496: ** Close a file.  Make sure the lock has been released before closing.
                   26497: */
                   26498: static int dotlockClose(sqlite3_file *id) {
                   26499:   int rc;
                   26500:   if( id ){
                   26501:     unixFile *pFile = (unixFile*)id;
                   26502:     dotlockUnlock(id, NO_LOCK);
                   26503:     sqlite3_free(pFile->lockingContext);
                   26504:   }
                   26505:   rc = closeUnixFile(id);
                   26506:   return rc;
                   26507: }
                   26508: /****************** End of the dot-file lock implementation *******************
                   26509: ******************************************************************************/
                   26510: 
                   26511: /******************************************************************************
                   26512: ************************** Begin flock Locking ********************************
                   26513: **
                   26514: ** Use the flock() system call to do file locking.
                   26515: **
                   26516: ** flock() locking is like dot-file locking in that the various
                   26517: ** fine-grain locking levels supported by SQLite are collapsed into
                   26518: ** a single exclusive lock.  In other words, SHARED, RESERVED, and
                   26519: ** PENDING locks are the same thing as an EXCLUSIVE lock.  SQLite
                   26520: ** still works when you do this, but concurrency is reduced since
                   26521: ** only a single process can be reading the database at a time.
                   26522: **
                   26523: ** Omit this section if SQLITE_ENABLE_LOCKING_STYLE is turned off or if
                   26524: ** compiling for VXWORKS.
                   26525: */
                   26526: #if SQLITE_ENABLE_LOCKING_STYLE && !OS_VXWORKS
                   26527: 
                   26528: /*
                   26529: ** Retry flock() calls that fail with EINTR
                   26530: */
                   26531: #ifdef EINTR
                   26532: static int robust_flock(int fd, int op){
                   26533:   int rc;
                   26534:   do{ rc = flock(fd,op); }while( rc<0 && errno==EINTR );
                   26535:   return rc;
                   26536: }
                   26537: #else
                   26538: # define robust_flock(a,b) flock(a,b)
                   26539: #endif
                   26540:      
                   26541: 
                   26542: /*
                   26543: ** This routine checks if there is a RESERVED lock held on the specified
                   26544: ** file by this or any other process. If such a lock is held, set *pResOut
                   26545: ** to a non-zero value otherwise *pResOut is set to zero.  The return value
                   26546: ** is set to SQLITE_OK unless an I/O error occurs during lock checking.
                   26547: */
                   26548: static int flockCheckReservedLock(sqlite3_file *id, int *pResOut){
                   26549:   int rc = SQLITE_OK;
                   26550:   int reserved = 0;
                   26551:   unixFile *pFile = (unixFile*)id;
                   26552:   
                   26553:   SimulateIOError( return SQLITE_IOERR_CHECKRESERVEDLOCK; );
                   26554:   
                   26555:   assert( pFile );
                   26556:   
                   26557:   /* Check if a thread in this process holds such a lock */
                   26558:   if( pFile->eFileLock>SHARED_LOCK ){
                   26559:     reserved = 1;
                   26560:   }
                   26561:   
                   26562:   /* Otherwise see if some other process holds it. */
                   26563:   if( !reserved ){
                   26564:     /* attempt to get the lock */
                   26565:     int lrc = robust_flock(pFile->h, LOCK_EX | LOCK_NB);
                   26566:     if( !lrc ){
                   26567:       /* got the lock, unlock it */
                   26568:       lrc = robust_flock(pFile->h, LOCK_UN);
                   26569:       if ( lrc ) {
                   26570:         int tErrno = errno;
                   26571:         /* unlock failed with an error */
                   26572:         lrc = SQLITE_IOERR_UNLOCK; 
                   26573:         if( IS_LOCK_ERROR(lrc) ){
                   26574:           pFile->lastErrno = tErrno;
                   26575:           rc = lrc;
                   26576:         }
                   26577:       }
                   26578:     } else {
                   26579:       int tErrno = errno;
                   26580:       reserved = 1;
                   26581:       /* someone else might have it reserved */
                   26582:       lrc = sqliteErrorFromPosixError(tErrno, SQLITE_IOERR_LOCK); 
                   26583:       if( IS_LOCK_ERROR(lrc) ){
                   26584:         pFile->lastErrno = tErrno;
                   26585:         rc = lrc;
                   26586:       }
                   26587:     }
                   26588:   }
                   26589:   OSTRACE(("TEST WR-LOCK %d %d %d (flock)\n", pFile->h, rc, reserved));
                   26590: 
                   26591: #ifdef SQLITE_IGNORE_FLOCK_LOCK_ERRORS
                   26592:   if( (rc & SQLITE_IOERR) == SQLITE_IOERR ){
                   26593:     rc = SQLITE_OK;
                   26594:     reserved=1;
                   26595:   }
                   26596: #endif /* SQLITE_IGNORE_FLOCK_LOCK_ERRORS */
                   26597:   *pResOut = reserved;
                   26598:   return rc;
                   26599: }
                   26600: 
                   26601: /*
                   26602: ** Lock the file with the lock specified by parameter eFileLock - one
                   26603: ** of the following:
                   26604: **
                   26605: **     (1) SHARED_LOCK
                   26606: **     (2) RESERVED_LOCK
                   26607: **     (3) PENDING_LOCK
                   26608: **     (4) EXCLUSIVE_LOCK
                   26609: **
                   26610: ** Sometimes when requesting one lock state, additional lock states
                   26611: ** are inserted in between.  The locking might fail on one of the later
                   26612: ** transitions leaving the lock state different from what it started but
                   26613: ** still short of its goal.  The following chart shows the allowed
                   26614: ** transitions and the inserted intermediate states:
                   26615: **
                   26616: **    UNLOCKED -> SHARED
                   26617: **    SHARED -> RESERVED
                   26618: **    SHARED -> (PENDING) -> EXCLUSIVE
                   26619: **    RESERVED -> (PENDING) -> EXCLUSIVE
                   26620: **    PENDING -> EXCLUSIVE
                   26621: **
                   26622: ** flock() only really support EXCLUSIVE locks.  We track intermediate
                   26623: ** lock states in the sqlite3_file structure, but all locks SHARED or
                   26624: ** above are really EXCLUSIVE locks and exclude all other processes from
                   26625: ** access the file.
                   26626: **
                   26627: ** This routine will only increase a lock.  Use the sqlite3OsUnlock()
                   26628: ** routine to lower a locking level.
                   26629: */
                   26630: static int flockLock(sqlite3_file *id, int eFileLock) {
                   26631:   int rc = SQLITE_OK;
                   26632:   unixFile *pFile = (unixFile*)id;
                   26633: 
                   26634:   assert( pFile );
                   26635: 
                   26636:   /* if we already have a lock, it is exclusive.  
                   26637:   ** Just adjust level and punt on outta here. */
                   26638:   if (pFile->eFileLock > NO_LOCK) {
                   26639:     pFile->eFileLock = eFileLock;
                   26640:     return SQLITE_OK;
                   26641:   }
                   26642:   
                   26643:   /* grab an exclusive lock */
                   26644:   
                   26645:   if (robust_flock(pFile->h, LOCK_EX | LOCK_NB)) {
                   26646:     int tErrno = errno;
                   26647:     /* didn't get, must be busy */
                   26648:     rc = sqliteErrorFromPosixError(tErrno, SQLITE_IOERR_LOCK);
                   26649:     if( IS_LOCK_ERROR(rc) ){
                   26650:       pFile->lastErrno = tErrno;
                   26651:     }
                   26652:   } else {
                   26653:     /* got it, set the type and return ok */
                   26654:     pFile->eFileLock = eFileLock;
                   26655:   }
                   26656:   OSTRACE(("LOCK    %d %s %s (flock)\n", pFile->h, azFileLock(eFileLock), 
                   26657:            rc==SQLITE_OK ? "ok" : "failed"));
                   26658: #ifdef SQLITE_IGNORE_FLOCK_LOCK_ERRORS
                   26659:   if( (rc & SQLITE_IOERR) == SQLITE_IOERR ){
                   26660:     rc = SQLITE_BUSY;
                   26661:   }
                   26662: #endif /* SQLITE_IGNORE_FLOCK_LOCK_ERRORS */
                   26663:   return rc;
                   26664: }
                   26665: 
                   26666: 
                   26667: /*
                   26668: ** Lower the locking level on file descriptor pFile to eFileLock.  eFileLock
                   26669: ** must be either NO_LOCK or SHARED_LOCK.
                   26670: **
                   26671: ** If the locking level of the file descriptor is already at or below
                   26672: ** the requested locking level, this routine is a no-op.
                   26673: */
                   26674: static int flockUnlock(sqlite3_file *id, int eFileLock) {
                   26675:   unixFile *pFile = (unixFile*)id;
                   26676:   
                   26677:   assert( pFile );
                   26678:   OSTRACE(("UNLOCK  %d %d was %d pid=%d (flock)\n", pFile->h, eFileLock,
                   26679:            pFile->eFileLock, getpid()));
                   26680:   assert( eFileLock<=SHARED_LOCK );
                   26681:   
                   26682:   /* no-op if possible */
                   26683:   if( pFile->eFileLock==eFileLock ){
                   26684:     return SQLITE_OK;
                   26685:   }
                   26686:   
                   26687:   /* shared can just be set because we always have an exclusive */
                   26688:   if (eFileLock==SHARED_LOCK) {
                   26689:     pFile->eFileLock = eFileLock;
                   26690:     return SQLITE_OK;
                   26691:   }
                   26692:   
                   26693:   /* no, really, unlock. */
                   26694:   if( robust_flock(pFile->h, LOCK_UN) ){
                   26695: #ifdef SQLITE_IGNORE_FLOCK_LOCK_ERRORS
                   26696:     return SQLITE_OK;
                   26697: #endif /* SQLITE_IGNORE_FLOCK_LOCK_ERRORS */
                   26698:     return SQLITE_IOERR_UNLOCK;
                   26699:   }else{
                   26700:     pFile->eFileLock = NO_LOCK;
                   26701:     return SQLITE_OK;
                   26702:   }
                   26703: }
                   26704: 
                   26705: /*
                   26706: ** Close a file.
                   26707: */
                   26708: static int flockClose(sqlite3_file *id) {
                   26709:   if( id ){
                   26710:     flockUnlock(id, NO_LOCK);
                   26711:   }
                   26712:   return closeUnixFile(id);
                   26713: }
                   26714: 
                   26715: #endif /* SQLITE_ENABLE_LOCKING_STYLE && !OS_VXWORK */
                   26716: 
                   26717: /******************* End of the flock lock implementation *********************
                   26718: ******************************************************************************/
                   26719: 
                   26720: /******************************************************************************
                   26721: ************************ Begin Named Semaphore Locking ************************
                   26722: **
                   26723: ** Named semaphore locking is only supported on VxWorks.
                   26724: **
                   26725: ** Semaphore locking is like dot-lock and flock in that it really only
                   26726: ** supports EXCLUSIVE locking.  Only a single process can read or write
                   26727: ** the database file at a time.  This reduces potential concurrency, but
                   26728: ** makes the lock implementation much easier.
                   26729: */
                   26730: #if OS_VXWORKS
                   26731: 
                   26732: /*
                   26733: ** This routine checks if there is a RESERVED lock held on the specified
                   26734: ** file by this or any other process. If such a lock is held, set *pResOut
                   26735: ** to a non-zero value otherwise *pResOut is set to zero.  The return value
                   26736: ** is set to SQLITE_OK unless an I/O error occurs during lock checking.
                   26737: */
                   26738: static int semCheckReservedLock(sqlite3_file *id, int *pResOut) {
                   26739:   int rc = SQLITE_OK;
                   26740:   int reserved = 0;
                   26741:   unixFile *pFile = (unixFile*)id;
                   26742: 
                   26743:   SimulateIOError( return SQLITE_IOERR_CHECKRESERVEDLOCK; );
                   26744:   
                   26745:   assert( pFile );
                   26746: 
                   26747:   /* Check if a thread in this process holds such a lock */
                   26748:   if( pFile->eFileLock>SHARED_LOCK ){
                   26749:     reserved = 1;
                   26750:   }
                   26751:   
                   26752:   /* Otherwise see if some other process holds it. */
                   26753:   if( !reserved ){
                   26754:     sem_t *pSem = pFile->pInode->pSem;
                   26755:     struct stat statBuf;
                   26756: 
                   26757:     if( sem_trywait(pSem)==-1 ){
                   26758:       int tErrno = errno;
                   26759:       if( EAGAIN != tErrno ){
                   26760:         rc = sqliteErrorFromPosixError(tErrno, SQLITE_IOERR_CHECKRESERVEDLOCK);
                   26761:         pFile->lastErrno = tErrno;
                   26762:       } else {
                   26763:         /* someone else has the lock when we are in NO_LOCK */
                   26764:         reserved = (pFile->eFileLock < SHARED_LOCK);
                   26765:       }
                   26766:     }else{
                   26767:       /* we could have it if we want it */
                   26768:       sem_post(pSem);
                   26769:     }
                   26770:   }
                   26771:   OSTRACE(("TEST WR-LOCK %d %d %d (sem)\n", pFile->h, rc, reserved));
                   26772: 
                   26773:   *pResOut = reserved;
                   26774:   return rc;
                   26775: }
                   26776: 
                   26777: /*
                   26778: ** Lock the file with the lock specified by parameter eFileLock - one
                   26779: ** of the following:
                   26780: **
                   26781: **     (1) SHARED_LOCK
                   26782: **     (2) RESERVED_LOCK
                   26783: **     (3) PENDING_LOCK
                   26784: **     (4) EXCLUSIVE_LOCK
                   26785: **
                   26786: ** Sometimes when requesting one lock state, additional lock states
                   26787: ** are inserted in between.  The locking might fail on one of the later
                   26788: ** transitions leaving the lock state different from what it started but
                   26789: ** still short of its goal.  The following chart shows the allowed
                   26790: ** transitions and the inserted intermediate states:
                   26791: **
                   26792: **    UNLOCKED -> SHARED
                   26793: **    SHARED -> RESERVED
                   26794: **    SHARED -> (PENDING) -> EXCLUSIVE
                   26795: **    RESERVED -> (PENDING) -> EXCLUSIVE
                   26796: **    PENDING -> EXCLUSIVE
                   26797: **
                   26798: ** Semaphore locks only really support EXCLUSIVE locks.  We track intermediate
                   26799: ** lock states in the sqlite3_file structure, but all locks SHARED or
                   26800: ** above are really EXCLUSIVE locks and exclude all other processes from
                   26801: ** access the file.
                   26802: **
                   26803: ** This routine will only increase a lock.  Use the sqlite3OsUnlock()
                   26804: ** routine to lower a locking level.
                   26805: */
                   26806: static int semLock(sqlite3_file *id, int eFileLock) {
                   26807:   unixFile *pFile = (unixFile*)id;
                   26808:   int fd;
                   26809:   sem_t *pSem = pFile->pInode->pSem;
                   26810:   int rc = SQLITE_OK;
                   26811: 
                   26812:   /* if we already have a lock, it is exclusive.  
                   26813:   ** Just adjust level and punt on outta here. */
                   26814:   if (pFile->eFileLock > NO_LOCK) {
                   26815:     pFile->eFileLock = eFileLock;
                   26816:     rc = SQLITE_OK;
                   26817:     goto sem_end_lock;
                   26818:   }
                   26819:   
                   26820:   /* lock semaphore now but bail out when already locked. */
                   26821:   if( sem_trywait(pSem)==-1 ){
                   26822:     rc = SQLITE_BUSY;
                   26823:     goto sem_end_lock;
                   26824:   }
                   26825: 
                   26826:   /* got it, set the type and return ok */
                   26827:   pFile->eFileLock = eFileLock;
                   26828: 
                   26829:  sem_end_lock:
                   26830:   return rc;
                   26831: }
                   26832: 
                   26833: /*
                   26834: ** Lower the locking level on file descriptor pFile to eFileLock.  eFileLock
                   26835: ** must be either NO_LOCK or SHARED_LOCK.
                   26836: **
                   26837: ** If the locking level of the file descriptor is already at or below
                   26838: ** the requested locking level, this routine is a no-op.
                   26839: */
                   26840: static int semUnlock(sqlite3_file *id, int eFileLock) {
                   26841:   unixFile *pFile = (unixFile*)id;
                   26842:   sem_t *pSem = pFile->pInode->pSem;
                   26843: 
                   26844:   assert( pFile );
                   26845:   assert( pSem );
                   26846:   OSTRACE(("UNLOCK  %d %d was %d pid=%d (sem)\n", pFile->h, eFileLock,
                   26847:           pFile->eFileLock, getpid()));
                   26848:   assert( eFileLock<=SHARED_LOCK );
                   26849:   
                   26850:   /* no-op if possible */
                   26851:   if( pFile->eFileLock==eFileLock ){
                   26852:     return SQLITE_OK;
                   26853:   }
                   26854:   
                   26855:   /* shared can just be set because we always have an exclusive */
                   26856:   if (eFileLock==SHARED_LOCK) {
                   26857:     pFile->eFileLock = eFileLock;
                   26858:     return SQLITE_OK;
                   26859:   }
                   26860:   
                   26861:   /* no, really unlock. */
                   26862:   if ( sem_post(pSem)==-1 ) {
                   26863:     int rc, tErrno = errno;
                   26864:     rc = sqliteErrorFromPosixError(tErrno, SQLITE_IOERR_UNLOCK);
                   26865:     if( IS_LOCK_ERROR(rc) ){
                   26866:       pFile->lastErrno = tErrno;
                   26867:     }
                   26868:     return rc; 
                   26869:   }
                   26870:   pFile->eFileLock = NO_LOCK;
                   26871:   return SQLITE_OK;
                   26872: }
                   26873: 
                   26874: /*
                   26875:  ** Close a file.
                   26876:  */
                   26877: static int semClose(sqlite3_file *id) {
                   26878:   if( id ){
                   26879:     unixFile *pFile = (unixFile*)id;
                   26880:     semUnlock(id, NO_LOCK);
                   26881:     assert( pFile );
                   26882:     unixEnterMutex();
                   26883:     releaseInodeInfo(pFile);
                   26884:     unixLeaveMutex();
                   26885:     closeUnixFile(id);
                   26886:   }
                   26887:   return SQLITE_OK;
                   26888: }
                   26889: 
                   26890: #endif /* OS_VXWORKS */
                   26891: /*
                   26892: ** Named semaphore locking is only available on VxWorks.
                   26893: **
                   26894: *************** End of the named semaphore lock implementation ****************
                   26895: ******************************************************************************/
                   26896: 
                   26897: 
                   26898: /******************************************************************************
                   26899: *************************** Begin AFP Locking *********************************
                   26900: **
                   26901: ** AFP is the Apple Filing Protocol.  AFP is a network filesystem found
                   26902: ** on Apple Macintosh computers - both OS9 and OSX.
                   26903: **
                   26904: ** Third-party implementations of AFP are available.  But this code here
                   26905: ** only works on OSX.
                   26906: */
                   26907: 
                   26908: #if defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE
                   26909: /*
                   26910: ** The afpLockingContext structure contains all afp lock specific state
                   26911: */
                   26912: typedef struct afpLockingContext afpLockingContext;
                   26913: struct afpLockingContext {
                   26914:   int reserved;
                   26915:   const char *dbPath;             /* Name of the open file */
                   26916: };
                   26917: 
                   26918: struct ByteRangeLockPB2
                   26919: {
                   26920:   unsigned long long offset;        /* offset to first byte to lock */
                   26921:   unsigned long long length;        /* nbr of bytes to lock */
                   26922:   unsigned long long retRangeStart; /* nbr of 1st byte locked if successful */
                   26923:   unsigned char unLockFlag;         /* 1 = unlock, 0 = lock */
                   26924:   unsigned char startEndFlag;       /* 1=rel to end of fork, 0=rel to start */
                   26925:   int fd;                           /* file desc to assoc this lock with */
                   26926: };
                   26927: 
                   26928: #define afpfsByteRangeLock2FSCTL        _IOWR('z', 23, struct ByteRangeLockPB2)
                   26929: 
                   26930: /*
                   26931: ** This is a utility for setting or clearing a bit-range lock on an
                   26932: ** AFP filesystem.
                   26933: ** 
                   26934: ** Return SQLITE_OK on success, SQLITE_BUSY on failure.
                   26935: */
                   26936: static int afpSetLock(
                   26937:   const char *path,              /* Name of the file to be locked or unlocked */
                   26938:   unixFile *pFile,               /* Open file descriptor on path */
                   26939:   unsigned long long offset,     /* First byte to be locked */
                   26940:   unsigned long long length,     /* Number of bytes to lock */
                   26941:   int setLockFlag                /* True to set lock.  False to clear lock */
                   26942: ){
                   26943:   struct ByteRangeLockPB2 pb;
                   26944:   int err;
                   26945:   
                   26946:   pb.unLockFlag = setLockFlag ? 0 : 1;
                   26947:   pb.startEndFlag = 0;
                   26948:   pb.offset = offset;
                   26949:   pb.length = length; 
                   26950:   pb.fd = pFile->h;
                   26951:   
                   26952:   OSTRACE(("AFPSETLOCK [%s] for %d%s in range %llx:%llx\n", 
                   26953:     (setLockFlag?"ON":"OFF"), pFile->h, (pb.fd==-1?"[testval-1]":""),
                   26954:     offset, length));
                   26955:   err = fsctl(path, afpfsByteRangeLock2FSCTL, &pb, 0);
                   26956:   if ( err==-1 ) {
                   26957:     int rc;
                   26958:     int tErrno = errno;
                   26959:     OSTRACE(("AFPSETLOCK failed to fsctl() '%s' %d %s\n",
                   26960:              path, tErrno, strerror(tErrno)));
                   26961: #ifdef SQLITE_IGNORE_AFP_LOCK_ERRORS
                   26962:     rc = SQLITE_BUSY;
                   26963: #else
                   26964:     rc = sqliteErrorFromPosixError(tErrno,
                   26965:                     setLockFlag ? SQLITE_IOERR_LOCK : SQLITE_IOERR_UNLOCK);
                   26966: #endif /* SQLITE_IGNORE_AFP_LOCK_ERRORS */
                   26967:     if( IS_LOCK_ERROR(rc) ){
                   26968:       pFile->lastErrno = tErrno;
                   26969:     }
                   26970:     return rc;
                   26971:   } else {
                   26972:     return SQLITE_OK;
                   26973:   }
                   26974: }
                   26975: 
                   26976: /*
                   26977: ** This routine checks if there is a RESERVED lock held on the specified
                   26978: ** file by this or any other process. If such a lock is held, set *pResOut
                   26979: ** to a non-zero value otherwise *pResOut is set to zero.  The return value
                   26980: ** is set to SQLITE_OK unless an I/O error occurs during lock checking.
                   26981: */
                   26982: static int afpCheckReservedLock(sqlite3_file *id, int *pResOut){
                   26983:   int rc = SQLITE_OK;
                   26984:   int reserved = 0;
                   26985:   unixFile *pFile = (unixFile*)id;
                   26986:   
                   26987:   SimulateIOError( return SQLITE_IOERR_CHECKRESERVEDLOCK; );
                   26988:   
                   26989:   assert( pFile );
                   26990:   afpLockingContext *context = (afpLockingContext *) pFile->lockingContext;
                   26991:   if( context->reserved ){
                   26992:     *pResOut = 1;
                   26993:     return SQLITE_OK;
                   26994:   }
                   26995:   unixEnterMutex(); /* Because pFile->pInode is shared across threads */
                   26996:   
                   26997:   /* Check if a thread in this process holds such a lock */
                   26998:   if( pFile->pInode->eFileLock>SHARED_LOCK ){
                   26999:     reserved = 1;
                   27000:   }
                   27001:   
                   27002:   /* Otherwise see if some other process holds it.
                   27003:    */
                   27004:   if( !reserved ){
                   27005:     /* lock the RESERVED byte */
                   27006:     int lrc = afpSetLock(context->dbPath, pFile, RESERVED_BYTE, 1,1);  
                   27007:     if( SQLITE_OK==lrc ){
                   27008:       /* if we succeeded in taking the reserved lock, unlock it to restore
                   27009:       ** the original state */
                   27010:       lrc = afpSetLock(context->dbPath, pFile, RESERVED_BYTE, 1, 0);
                   27011:     } else {
                   27012:       /* if we failed to get the lock then someone else must have it */
                   27013:       reserved = 1;
                   27014:     }
                   27015:     if( IS_LOCK_ERROR(lrc) ){
                   27016:       rc=lrc;
                   27017:     }
                   27018:   }
                   27019:   
                   27020:   unixLeaveMutex();
                   27021:   OSTRACE(("TEST WR-LOCK %d %d %d (afp)\n", pFile->h, rc, reserved));
                   27022:   
                   27023:   *pResOut = reserved;
                   27024:   return rc;
                   27025: }
                   27026: 
                   27027: /*
                   27028: ** Lock the file with the lock specified by parameter eFileLock - one
                   27029: ** of the following:
                   27030: **
                   27031: **     (1) SHARED_LOCK
                   27032: **     (2) RESERVED_LOCK
                   27033: **     (3) PENDING_LOCK
                   27034: **     (4) EXCLUSIVE_LOCK
                   27035: **
                   27036: ** Sometimes when requesting one lock state, additional lock states
                   27037: ** are inserted in between.  The locking might fail on one of the later
                   27038: ** transitions leaving the lock state different from what it started but
                   27039: ** still short of its goal.  The following chart shows the allowed
                   27040: ** transitions and the inserted intermediate states:
                   27041: **
                   27042: **    UNLOCKED -> SHARED
                   27043: **    SHARED -> RESERVED
                   27044: **    SHARED -> (PENDING) -> EXCLUSIVE
                   27045: **    RESERVED -> (PENDING) -> EXCLUSIVE
                   27046: **    PENDING -> EXCLUSIVE
                   27047: **
                   27048: ** This routine will only increase a lock.  Use the sqlite3OsUnlock()
                   27049: ** routine to lower a locking level.
                   27050: */
                   27051: static int afpLock(sqlite3_file *id, int eFileLock){
                   27052:   int rc = SQLITE_OK;
                   27053:   unixFile *pFile = (unixFile*)id;
                   27054:   unixInodeInfo *pInode = pFile->pInode;
                   27055:   afpLockingContext *context = (afpLockingContext *) pFile->lockingContext;
                   27056:   
                   27057:   assert( pFile );
                   27058:   OSTRACE(("LOCK    %d %s was %s(%s,%d) pid=%d (afp)\n", pFile->h,
                   27059:            azFileLock(eFileLock), azFileLock(pFile->eFileLock),
                   27060:            azFileLock(pInode->eFileLock), pInode->nShared , getpid()));
                   27061: 
                   27062:   /* If there is already a lock of this type or more restrictive on the
                   27063:   ** unixFile, do nothing. Don't use the afp_end_lock: exit path, as
                   27064:   ** unixEnterMutex() hasn't been called yet.
                   27065:   */
                   27066:   if( pFile->eFileLock>=eFileLock ){
                   27067:     OSTRACE(("LOCK    %d %s ok (already held) (afp)\n", pFile->h,
                   27068:            azFileLock(eFileLock)));
                   27069:     return SQLITE_OK;
                   27070:   }
                   27071: 
                   27072:   /* Make sure the locking sequence is correct
                   27073:   **  (1) We never move from unlocked to anything higher than shared lock.
                   27074:   **  (2) SQLite never explicitly requests a pendig lock.
                   27075:   **  (3) A shared lock is always held when a reserve lock is requested.
                   27076:   */
                   27077:   assert( pFile->eFileLock!=NO_LOCK || eFileLock==SHARED_LOCK );
                   27078:   assert( eFileLock!=PENDING_LOCK );
                   27079:   assert( eFileLock!=RESERVED_LOCK || pFile->eFileLock==SHARED_LOCK );
                   27080:   
                   27081:   /* This mutex is needed because pFile->pInode is shared across threads
                   27082:   */
                   27083:   unixEnterMutex();
                   27084:   pInode = pFile->pInode;
                   27085: 
                   27086:   /* If some thread using this PID has a lock via a different unixFile*
                   27087:   ** handle that precludes the requested lock, return BUSY.
                   27088:   */
                   27089:   if( (pFile->eFileLock!=pInode->eFileLock && 
                   27090:        (pInode->eFileLock>=PENDING_LOCK || eFileLock>SHARED_LOCK))
                   27091:      ){
                   27092:     rc = SQLITE_BUSY;
                   27093:     goto afp_end_lock;
                   27094:   }
                   27095:   
                   27096:   /* If a SHARED lock is requested, and some thread using this PID already
                   27097:   ** has a SHARED or RESERVED lock, then increment reference counts and
                   27098:   ** return SQLITE_OK.
                   27099:   */
                   27100:   if( eFileLock==SHARED_LOCK && 
                   27101:      (pInode->eFileLock==SHARED_LOCK || pInode->eFileLock==RESERVED_LOCK) ){
                   27102:     assert( eFileLock==SHARED_LOCK );
                   27103:     assert( pFile->eFileLock==0 );
                   27104:     assert( pInode->nShared>0 );
                   27105:     pFile->eFileLock = SHARED_LOCK;
                   27106:     pInode->nShared++;
                   27107:     pInode->nLock++;
                   27108:     goto afp_end_lock;
                   27109:   }
                   27110:     
                   27111:   /* A PENDING lock is needed before acquiring a SHARED lock and before
                   27112:   ** acquiring an EXCLUSIVE lock.  For the SHARED lock, the PENDING will
                   27113:   ** be released.
                   27114:   */
                   27115:   if( eFileLock==SHARED_LOCK 
                   27116:       || (eFileLock==EXCLUSIVE_LOCK && pFile->eFileLock<PENDING_LOCK)
                   27117:   ){
                   27118:     int failed;
                   27119:     failed = afpSetLock(context->dbPath, pFile, PENDING_BYTE, 1, 1);
                   27120:     if (failed) {
                   27121:       rc = failed;
                   27122:       goto afp_end_lock;
                   27123:     }
                   27124:   }
                   27125:   
                   27126:   /* If control gets to this point, then actually go ahead and make
                   27127:   ** operating system calls for the specified lock.
                   27128:   */
                   27129:   if( eFileLock==SHARED_LOCK ){
                   27130:     int lrc1, lrc2, lrc1Errno;
                   27131:     long lk, mask;
                   27132:     
                   27133:     assert( pInode->nShared==0 );
                   27134:     assert( pInode->eFileLock==0 );
                   27135:         
                   27136:     mask = (sizeof(long)==8) ? LARGEST_INT64 : 0x7fffffff;
                   27137:     /* Now get the read-lock SHARED_LOCK */
                   27138:     /* note that the quality of the randomness doesn't matter that much */
                   27139:     lk = random(); 
                   27140:     pInode->sharedByte = (lk & mask)%(SHARED_SIZE - 1);
                   27141:     lrc1 = afpSetLock(context->dbPath, pFile, 
                   27142:           SHARED_FIRST+pInode->sharedByte, 1, 1);
                   27143:     if( IS_LOCK_ERROR(lrc1) ){
                   27144:       lrc1Errno = pFile->lastErrno;
                   27145:     }
                   27146:     /* Drop the temporary PENDING lock */
                   27147:     lrc2 = afpSetLock(context->dbPath, pFile, PENDING_BYTE, 1, 0);
                   27148:     
                   27149:     if( IS_LOCK_ERROR(lrc1) ) {
                   27150:       pFile->lastErrno = lrc1Errno;
                   27151:       rc = lrc1;
                   27152:       goto afp_end_lock;
                   27153:     } else if( IS_LOCK_ERROR(lrc2) ){
                   27154:       rc = lrc2;
                   27155:       goto afp_end_lock;
                   27156:     } else if( lrc1 != SQLITE_OK ) {
                   27157:       rc = lrc1;
                   27158:     } else {
                   27159:       pFile->eFileLock = SHARED_LOCK;
                   27160:       pInode->nLock++;
                   27161:       pInode->nShared = 1;
                   27162:     }
                   27163:   }else if( eFileLock==EXCLUSIVE_LOCK && pInode->nShared>1 ){
                   27164:     /* We are trying for an exclusive lock but another thread in this
                   27165:      ** same process is still holding a shared lock. */
                   27166:     rc = SQLITE_BUSY;
                   27167:   }else{
                   27168:     /* The request was for a RESERVED or EXCLUSIVE lock.  It is
                   27169:     ** assumed that there is a SHARED or greater lock on the file
                   27170:     ** already.
                   27171:     */
                   27172:     int failed = 0;
                   27173:     assert( 0!=pFile->eFileLock );
                   27174:     if (eFileLock >= RESERVED_LOCK && pFile->eFileLock < RESERVED_LOCK) {
                   27175:         /* Acquire a RESERVED lock */
                   27176:         failed = afpSetLock(context->dbPath, pFile, RESERVED_BYTE, 1,1);
                   27177:       if( !failed ){
                   27178:         context->reserved = 1;
                   27179:       }
                   27180:     }
                   27181:     if (!failed && eFileLock == EXCLUSIVE_LOCK) {
                   27182:       /* Acquire an EXCLUSIVE lock */
                   27183:         
                   27184:       /* Remove the shared lock before trying the range.  we'll need to 
                   27185:       ** reestablish the shared lock if we can't get the  afpUnlock
                   27186:       */
                   27187:       if( !(failed = afpSetLock(context->dbPath, pFile, SHARED_FIRST +
                   27188:                          pInode->sharedByte, 1, 0)) ){
                   27189:         int failed2 = SQLITE_OK;
                   27190:         /* now attemmpt to get the exclusive lock range */
                   27191:         failed = afpSetLock(context->dbPath, pFile, SHARED_FIRST, 
                   27192:                                SHARED_SIZE, 1);
                   27193:         if( failed && (failed2 = afpSetLock(context->dbPath, pFile, 
                   27194:                        SHARED_FIRST + pInode->sharedByte, 1, 1)) ){
                   27195:           /* Can't reestablish the shared lock.  Sqlite can't deal, this is
                   27196:           ** a critical I/O error
                   27197:           */
                   27198:           rc = ((failed & SQLITE_IOERR) == SQLITE_IOERR) ? failed2 : 
                   27199:                SQLITE_IOERR_LOCK;
                   27200:           goto afp_end_lock;
                   27201:         } 
                   27202:       }else{
                   27203:         rc = failed; 
                   27204:       }
                   27205:     }
                   27206:     if( failed ){
                   27207:       rc = failed;
                   27208:     }
                   27209:   }
                   27210:   
                   27211:   if( rc==SQLITE_OK ){
                   27212:     pFile->eFileLock = eFileLock;
                   27213:     pInode->eFileLock = eFileLock;
                   27214:   }else if( eFileLock==EXCLUSIVE_LOCK ){
                   27215:     pFile->eFileLock = PENDING_LOCK;
                   27216:     pInode->eFileLock = PENDING_LOCK;
                   27217:   }
                   27218:   
                   27219: afp_end_lock:
                   27220:   unixLeaveMutex();
                   27221:   OSTRACE(("LOCK    %d %s %s (afp)\n", pFile->h, azFileLock(eFileLock), 
                   27222:          rc==SQLITE_OK ? "ok" : "failed"));
                   27223:   return rc;
                   27224: }
                   27225: 
                   27226: /*
                   27227: ** Lower the locking level on file descriptor pFile to eFileLock.  eFileLock
                   27228: ** must be either NO_LOCK or SHARED_LOCK.
                   27229: **
                   27230: ** If the locking level of the file descriptor is already at or below
                   27231: ** the requested locking level, this routine is a no-op.
                   27232: */
                   27233: static int afpUnlock(sqlite3_file *id, int eFileLock) {
                   27234:   int rc = SQLITE_OK;
                   27235:   unixFile *pFile = (unixFile*)id;
                   27236:   unixInodeInfo *pInode;
                   27237:   afpLockingContext *context = (afpLockingContext *) pFile->lockingContext;
                   27238:   int skipShared = 0;
                   27239: #ifdef SQLITE_TEST
                   27240:   int h = pFile->h;
                   27241: #endif
                   27242: 
                   27243:   assert( pFile );
                   27244:   OSTRACE(("UNLOCK  %d %d was %d(%d,%d) pid=%d (afp)\n", pFile->h, eFileLock,
                   27245:            pFile->eFileLock, pFile->pInode->eFileLock, pFile->pInode->nShared,
                   27246:            getpid()));
                   27247: 
                   27248:   assert( eFileLock<=SHARED_LOCK );
                   27249:   if( pFile->eFileLock<=eFileLock ){
                   27250:     return SQLITE_OK;
                   27251:   }
                   27252:   unixEnterMutex();
                   27253:   pInode = pFile->pInode;
                   27254:   assert( pInode->nShared!=0 );
                   27255:   if( pFile->eFileLock>SHARED_LOCK ){
                   27256:     assert( pInode->eFileLock==pFile->eFileLock );
                   27257:     SimulateIOErrorBenign(1);
                   27258:     SimulateIOError( h=(-1) )
                   27259:     SimulateIOErrorBenign(0);
                   27260:     
                   27261: #ifndef NDEBUG
                   27262:     /* When reducing a lock such that other processes can start
                   27263:     ** reading the database file again, make sure that the
                   27264:     ** transaction counter was updated if any part of the database
                   27265:     ** file changed.  If the transaction counter is not updated,
                   27266:     ** other connections to the same file might not realize that
                   27267:     ** the file has changed and hence might not know to flush their
                   27268:     ** cache.  The use of a stale cache can lead to database corruption.
                   27269:     */
                   27270:     assert( pFile->inNormalWrite==0
                   27271:            || pFile->dbUpdate==0
                   27272:            || pFile->transCntrChng==1 );
                   27273:     pFile->inNormalWrite = 0;
                   27274: #endif
                   27275:     
                   27276:     if( pFile->eFileLock==EXCLUSIVE_LOCK ){
                   27277:       rc = afpSetLock(context->dbPath, pFile, SHARED_FIRST, SHARED_SIZE, 0);
                   27278:       if( rc==SQLITE_OK && (eFileLock==SHARED_LOCK || pInode->nShared>1) ){
                   27279:         /* only re-establish the shared lock if necessary */
                   27280:         int sharedLockByte = SHARED_FIRST+pInode->sharedByte;
                   27281:         rc = afpSetLock(context->dbPath, pFile, sharedLockByte, 1, 1);
                   27282:       } else {
                   27283:         skipShared = 1;
                   27284:       }
                   27285:     }
                   27286:     if( rc==SQLITE_OK && pFile->eFileLock>=PENDING_LOCK ){
                   27287:       rc = afpSetLock(context->dbPath, pFile, PENDING_BYTE, 1, 0);
                   27288:     } 
                   27289:     if( rc==SQLITE_OK && pFile->eFileLock>=RESERVED_LOCK && context->reserved ){
                   27290:       rc = afpSetLock(context->dbPath, pFile, RESERVED_BYTE, 1, 0);
                   27291:       if( !rc ){ 
                   27292:         context->reserved = 0; 
                   27293:       }
                   27294:     }
                   27295:     if( rc==SQLITE_OK && (eFileLock==SHARED_LOCK || pInode->nShared>1)){
                   27296:       pInode->eFileLock = SHARED_LOCK;
                   27297:     }
                   27298:   }
                   27299:   if( rc==SQLITE_OK && eFileLock==NO_LOCK ){
                   27300: 
                   27301:     /* Decrement the shared lock counter.  Release the lock using an
                   27302:     ** OS call only when all threads in this same process have released
                   27303:     ** the lock.
                   27304:     */
                   27305:     unsigned long long sharedLockByte = SHARED_FIRST+pInode->sharedByte;
                   27306:     pInode->nShared--;
                   27307:     if( pInode->nShared==0 ){
                   27308:       SimulateIOErrorBenign(1);
                   27309:       SimulateIOError( h=(-1) )
                   27310:       SimulateIOErrorBenign(0);
                   27311:       if( !skipShared ){
                   27312:         rc = afpSetLock(context->dbPath, pFile, sharedLockByte, 1, 0);
                   27313:       }
                   27314:       if( !rc ){
                   27315:         pInode->eFileLock = NO_LOCK;
                   27316:         pFile->eFileLock = NO_LOCK;
                   27317:       }
                   27318:     }
                   27319:     if( rc==SQLITE_OK ){
                   27320:       pInode->nLock--;
                   27321:       assert( pInode->nLock>=0 );
                   27322:       if( pInode->nLock==0 ){
                   27323:         closePendingFds(pFile);
                   27324:       }
                   27325:     }
                   27326:   }
                   27327:   
                   27328:   unixLeaveMutex();
                   27329:   if( rc==SQLITE_OK ) pFile->eFileLock = eFileLock;
                   27330:   return rc;
                   27331: }
                   27332: 
                   27333: /*
                   27334: ** Close a file & cleanup AFP specific locking context 
                   27335: */
                   27336: static int afpClose(sqlite3_file *id) {
                   27337:   int rc = SQLITE_OK;
                   27338:   if( id ){
                   27339:     unixFile *pFile = (unixFile*)id;
                   27340:     afpUnlock(id, NO_LOCK);
                   27341:     unixEnterMutex();
                   27342:     if( pFile->pInode && pFile->pInode->nLock ){
                   27343:       /* If there are outstanding locks, do not actually close the file just
                   27344:       ** yet because that would clear those locks.  Instead, add the file
                   27345:       ** descriptor to pInode->aPending.  It will be automatically closed when
                   27346:       ** the last lock is cleared.
                   27347:       */
                   27348:       setPendingFd(pFile);
                   27349:     }
                   27350:     releaseInodeInfo(pFile);
                   27351:     sqlite3_free(pFile->lockingContext);
                   27352:     rc = closeUnixFile(id);
                   27353:     unixLeaveMutex();
                   27354:   }
                   27355:   return rc;
                   27356: }
                   27357: 
                   27358: #endif /* defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE */
                   27359: /*
                   27360: ** The code above is the AFP lock implementation.  The code is specific
                   27361: ** to MacOSX and does not work on other unix platforms.  No alternative
                   27362: ** is available.  If you don't compile for a mac, then the "unix-afp"
                   27363: ** VFS is not available.
                   27364: **
                   27365: ********************* End of the AFP lock implementation **********************
                   27366: ******************************************************************************/
                   27367: 
                   27368: /******************************************************************************
                   27369: *************************** Begin NFS Locking ********************************/
                   27370: 
                   27371: #if defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE
                   27372: /*
                   27373:  ** Lower the locking level on file descriptor pFile to eFileLock.  eFileLock
                   27374:  ** must be either NO_LOCK or SHARED_LOCK.
                   27375:  **
                   27376:  ** If the locking level of the file descriptor is already at or below
                   27377:  ** the requested locking level, this routine is a no-op.
                   27378:  */
                   27379: static int nfsUnlock(sqlite3_file *id, int eFileLock){
                   27380:   return posixUnlock(id, eFileLock, 1);
                   27381: }
                   27382: 
                   27383: #endif /* defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE */
                   27384: /*
                   27385: ** The code above is the NFS lock implementation.  The code is specific
                   27386: ** to MacOSX and does not work on other unix platforms.  No alternative
                   27387: ** is available.  
                   27388: **
                   27389: ********************* End of the NFS lock implementation **********************
                   27390: ******************************************************************************/
                   27391: 
                   27392: /******************************************************************************
                   27393: **************** Non-locking sqlite3_file methods *****************************
                   27394: **
                   27395: ** The next division contains implementations for all methods of the 
                   27396: ** sqlite3_file object other than the locking methods.  The locking
                   27397: ** methods were defined in divisions above (one locking method per
                   27398: ** division).  Those methods that are common to all locking modes
                   27399: ** are gather together into this division.
                   27400: */
                   27401: 
                   27402: /*
                   27403: ** Seek to the offset passed as the second argument, then read cnt 
                   27404: ** bytes into pBuf. Return the number of bytes actually read.
                   27405: **
                   27406: ** NB:  If you define USE_PREAD or USE_PREAD64, then it might also
                   27407: ** be necessary to define _XOPEN_SOURCE to be 500.  This varies from
                   27408: ** one system to another.  Since SQLite does not define USE_PREAD
                   27409: ** any any form by default, we will not attempt to define _XOPEN_SOURCE.
                   27410: ** See tickets #2741 and #2681.
                   27411: **
                   27412: ** To avoid stomping the errno value on a failed read the lastErrno value
                   27413: ** is set before returning.
                   27414: */
                   27415: static int seekAndRead(unixFile *id, sqlite3_int64 offset, void *pBuf, int cnt){
                   27416:   int got;
                   27417: #if (!defined(USE_PREAD) && !defined(USE_PREAD64))
                   27418:   i64 newOffset;
                   27419: #endif
                   27420:   TIMER_START;
                   27421: #if defined(USE_PREAD)
                   27422:   do{ got = osPread(id->h, pBuf, cnt, offset); }while( got<0 && errno==EINTR );
                   27423:   SimulateIOError( got = -1 );
                   27424: #elif defined(USE_PREAD64)
                   27425:   do{ got = osPread64(id->h, pBuf, cnt, offset); }while( got<0 && errno==EINTR);
                   27426:   SimulateIOError( got = -1 );
                   27427: #else
                   27428:   newOffset = lseek(id->h, offset, SEEK_SET);
                   27429:   SimulateIOError( newOffset-- );
                   27430:   if( newOffset!=offset ){
                   27431:     if( newOffset == -1 ){
                   27432:       ((unixFile*)id)->lastErrno = errno;
                   27433:     }else{
                   27434:       ((unixFile*)id)->lastErrno = 0;                  
                   27435:     }
                   27436:     return -1;
                   27437:   }
                   27438:   do{ got = osRead(id->h, pBuf, cnt); }while( got<0 && errno==EINTR );
                   27439: #endif
                   27440:   TIMER_END;
                   27441:   if( got<0 ){
                   27442:     ((unixFile*)id)->lastErrno = errno;
                   27443:   }
                   27444:   OSTRACE(("READ    %-3d %5d %7lld %llu\n", id->h, got, offset, TIMER_ELAPSED));
                   27445:   return got;
                   27446: }
                   27447: 
                   27448: /*
                   27449: ** Read data from a file into a buffer.  Return SQLITE_OK if all
                   27450: ** bytes were read successfully and SQLITE_IOERR if anything goes
                   27451: ** wrong.
                   27452: */
                   27453: static int unixRead(
                   27454:   sqlite3_file *id, 
                   27455:   void *pBuf, 
                   27456:   int amt,
                   27457:   sqlite3_int64 offset
                   27458: ){
                   27459:   unixFile *pFile = (unixFile *)id;
                   27460:   int got;
                   27461:   assert( id );
                   27462: 
                   27463:   /* If this is a database file (not a journal, master-journal or temp
                   27464:   ** file), the bytes in the locking range should never be read or written. */
                   27465: #if 0
                   27466:   assert( pFile->pUnused==0
                   27467:        || offset>=PENDING_BYTE+512
                   27468:        || offset+amt<=PENDING_BYTE 
                   27469:   );
                   27470: #endif
                   27471: 
                   27472:   got = seekAndRead(pFile, offset, pBuf, amt);
                   27473:   if( got==amt ){
                   27474:     return SQLITE_OK;
                   27475:   }else if( got<0 ){
                   27476:     /* lastErrno set by seekAndRead */
                   27477:     return SQLITE_IOERR_READ;
                   27478:   }else{
                   27479:     pFile->lastErrno = 0; /* not a system error */
                   27480:     /* Unread parts of the buffer must be zero-filled */
                   27481:     memset(&((char*)pBuf)[got], 0, amt-got);
                   27482:     return SQLITE_IOERR_SHORT_READ;
                   27483:   }
                   27484: }
                   27485: 
                   27486: /*
                   27487: ** Seek to the offset in id->offset then read cnt bytes into pBuf.
                   27488: ** Return the number of bytes actually read.  Update the offset.
                   27489: **
                   27490: ** To avoid stomping the errno value on a failed write the lastErrno value
                   27491: ** is set before returning.
                   27492: */
                   27493: static int seekAndWrite(unixFile *id, i64 offset, const void *pBuf, int cnt){
                   27494:   int got;
                   27495: #if (!defined(USE_PREAD) && !defined(USE_PREAD64))
                   27496:   i64 newOffset;
                   27497: #endif
                   27498:   TIMER_START;
                   27499: #if defined(USE_PREAD)
                   27500:   do{ got = osPwrite(id->h, pBuf, cnt, offset); }while( got<0 && errno==EINTR );
                   27501: #elif defined(USE_PREAD64)
                   27502:   do{ got = osPwrite64(id->h, pBuf, cnt, offset);}while( got<0 && errno==EINTR);
                   27503: #else
                   27504:   newOffset = lseek(id->h, offset, SEEK_SET);
                   27505:   SimulateIOError( newOffset-- );
                   27506:   if( newOffset!=offset ){
                   27507:     if( newOffset == -1 ){
                   27508:       ((unixFile*)id)->lastErrno = errno;
                   27509:     }else{
                   27510:       ((unixFile*)id)->lastErrno = 0;                  
                   27511:     }
                   27512:     return -1;
                   27513:   }
                   27514:   do{ got = osWrite(id->h, pBuf, cnt); }while( got<0 && errno==EINTR );
                   27515: #endif
                   27516:   TIMER_END;
                   27517:   if( got<0 ){
                   27518:     ((unixFile*)id)->lastErrno = errno;
                   27519:   }
                   27520: 
                   27521:   OSTRACE(("WRITE   %-3d %5d %7lld %llu\n", id->h, got, offset, TIMER_ELAPSED));
                   27522:   return got;
                   27523: }
                   27524: 
                   27525: 
                   27526: /*
                   27527: ** Write data from a buffer into a file.  Return SQLITE_OK on success
                   27528: ** or some other error code on failure.
                   27529: */
                   27530: static int unixWrite(
                   27531:   sqlite3_file *id, 
                   27532:   const void *pBuf, 
                   27533:   int amt,
                   27534:   sqlite3_int64 offset 
                   27535: ){
                   27536:   unixFile *pFile = (unixFile*)id;
                   27537:   int wrote = 0;
                   27538:   assert( id );
                   27539:   assert( amt>0 );
                   27540: 
                   27541:   /* If this is a database file (not a journal, master-journal or temp
                   27542:   ** file), the bytes in the locking range should never be read or written. */
                   27543: #if 0
                   27544:   assert( pFile->pUnused==0
                   27545:        || offset>=PENDING_BYTE+512
                   27546:        || offset+amt<=PENDING_BYTE 
                   27547:   );
                   27548: #endif
                   27549: 
                   27550: #ifndef NDEBUG
                   27551:   /* If we are doing a normal write to a database file (as opposed to
                   27552:   ** doing a hot-journal rollback or a write to some file other than a
                   27553:   ** normal database file) then record the fact that the database
                   27554:   ** has changed.  If the transaction counter is modified, record that
                   27555:   ** fact too.
                   27556:   */
                   27557:   if( pFile->inNormalWrite ){
                   27558:     pFile->dbUpdate = 1;  /* The database has been modified */
                   27559:     if( offset<=24 && offset+amt>=27 ){
                   27560:       int rc;
                   27561:       char oldCntr[4];
                   27562:       SimulateIOErrorBenign(1);
                   27563:       rc = seekAndRead(pFile, 24, oldCntr, 4);
                   27564:       SimulateIOErrorBenign(0);
                   27565:       if( rc!=4 || memcmp(oldCntr, &((char*)pBuf)[24-offset], 4)!=0 ){
                   27566:         pFile->transCntrChng = 1;  /* The transaction counter has changed */
                   27567:       }
                   27568:     }
                   27569:   }
                   27570: #endif
                   27571: 
                   27572:   while( amt>0 && (wrote = seekAndWrite(pFile, offset, pBuf, amt))>0 ){
                   27573:     amt -= wrote;
                   27574:     offset += wrote;
                   27575:     pBuf = &((char*)pBuf)[wrote];
                   27576:   }
                   27577:   SimulateIOError(( wrote=(-1), amt=1 ));
                   27578:   SimulateDiskfullError(( wrote=0, amt=1 ));
                   27579: 
                   27580:   if( amt>0 ){
                   27581:     if( wrote<0 && pFile->lastErrno!=ENOSPC ){
                   27582:       /* lastErrno set by seekAndWrite */
                   27583:       return SQLITE_IOERR_WRITE;
                   27584:     }else{
                   27585:       pFile->lastErrno = 0; /* not a system error */
                   27586:       return SQLITE_FULL;
                   27587:     }
                   27588:   }
                   27589: 
                   27590:   return SQLITE_OK;
                   27591: }
                   27592: 
                   27593: #ifdef SQLITE_TEST
                   27594: /*
                   27595: ** Count the number of fullsyncs and normal syncs.  This is used to test
                   27596: ** that syncs and fullsyncs are occurring at the right times.
                   27597: */
                   27598: SQLITE_API int sqlite3_sync_count = 0;
                   27599: SQLITE_API int sqlite3_fullsync_count = 0;
                   27600: #endif
                   27601: 
                   27602: /*
                   27603: ** We do not trust systems to provide a working fdatasync().  Some do.
                   27604: ** Others do no.  To be safe, we will stick with the (slower) fsync().
                   27605: ** If you know that your system does support fdatasync() correctly,
                   27606: ** then simply compile with -Dfdatasync=fdatasync
                   27607: */
                   27608: #if !defined(fdatasync) && !defined(__linux__)
                   27609: # define fdatasync fsync
                   27610: #endif
                   27611: 
                   27612: /*
                   27613: ** Define HAVE_FULLFSYNC to 0 or 1 depending on whether or not
                   27614: ** the F_FULLFSYNC macro is defined.  F_FULLFSYNC is currently
                   27615: ** only available on Mac OS X.  But that could change.
                   27616: */
                   27617: #ifdef F_FULLFSYNC
                   27618: # define HAVE_FULLFSYNC 1
                   27619: #else
                   27620: # define HAVE_FULLFSYNC 0
                   27621: #endif
                   27622: 
                   27623: 
                   27624: /*
                   27625: ** The fsync() system call does not work as advertised on many
                   27626: ** unix systems.  The following procedure is an attempt to make
                   27627: ** it work better.
                   27628: **
                   27629: ** The SQLITE_NO_SYNC macro disables all fsync()s.  This is useful
                   27630: ** for testing when we want to run through the test suite quickly.
                   27631: ** You are strongly advised *not* to deploy with SQLITE_NO_SYNC
                   27632: ** enabled, however, since with SQLITE_NO_SYNC enabled, an OS crash
                   27633: ** or power failure will likely corrupt the database file.
                   27634: **
                   27635: ** SQLite sets the dataOnly flag if the size of the file is unchanged.
                   27636: ** The idea behind dataOnly is that it should only write the file content
                   27637: ** to disk, not the inode.  We only set dataOnly if the file size is 
                   27638: ** unchanged since the file size is part of the inode.  However, 
                   27639: ** Ted Ts'o tells us that fdatasync() will also write the inode if the
                   27640: ** file size has changed.  The only real difference between fdatasync()
                   27641: ** and fsync(), Ted tells us, is that fdatasync() will not flush the
                   27642: ** inode if the mtime or owner or other inode attributes have changed.
                   27643: ** We only care about the file size, not the other file attributes, so
                   27644: ** as far as SQLite is concerned, an fdatasync() is always adequate.
                   27645: ** So, we always use fdatasync() if it is available, regardless of
                   27646: ** the value of the dataOnly flag.
                   27647: */
                   27648: static int full_fsync(int fd, int fullSync, int dataOnly){
                   27649:   int rc;
                   27650: 
                   27651:   /* The following "ifdef/elif/else/" block has the same structure as
                   27652:   ** the one below. It is replicated here solely to avoid cluttering 
                   27653:   ** up the real code with the UNUSED_PARAMETER() macros.
                   27654:   */
                   27655: #ifdef SQLITE_NO_SYNC
                   27656:   UNUSED_PARAMETER(fd);
                   27657:   UNUSED_PARAMETER(fullSync);
                   27658:   UNUSED_PARAMETER(dataOnly);
                   27659: #elif HAVE_FULLFSYNC
                   27660:   UNUSED_PARAMETER(dataOnly);
                   27661: #else
                   27662:   UNUSED_PARAMETER(fullSync);
                   27663:   UNUSED_PARAMETER(dataOnly);
                   27664: #endif
                   27665: 
                   27666:   /* Record the number of times that we do a normal fsync() and 
                   27667:   ** FULLSYNC.  This is used during testing to verify that this procedure
                   27668:   ** gets called with the correct arguments.
                   27669:   */
                   27670: #ifdef SQLITE_TEST
                   27671:   if( fullSync ) sqlite3_fullsync_count++;
                   27672:   sqlite3_sync_count++;
                   27673: #endif
                   27674: 
                   27675:   /* If we compiled with the SQLITE_NO_SYNC flag, then syncing is a
                   27676:   ** no-op
                   27677:   */
                   27678: #ifdef SQLITE_NO_SYNC
                   27679:   rc = SQLITE_OK;
                   27680: #elif HAVE_FULLFSYNC
                   27681:   if( fullSync ){
                   27682:     rc = osFcntl(fd, F_FULLFSYNC, 0);
                   27683:   }else{
                   27684:     rc = 1;
                   27685:   }
                   27686:   /* If the FULLFSYNC failed, fall back to attempting an fsync().
                   27687:   ** It shouldn't be possible for fullfsync to fail on the local 
                   27688:   ** file system (on OSX), so failure indicates that FULLFSYNC
                   27689:   ** isn't supported for this file system. So, attempt an fsync 
                   27690:   ** and (for now) ignore the overhead of a superfluous fcntl call.  
                   27691:   ** It'd be better to detect fullfsync support once and avoid 
                   27692:   ** the fcntl call every time sync is called.
                   27693:   */
                   27694:   if( rc ) rc = fsync(fd);
                   27695: 
                   27696: #elif defined(__APPLE__)
                   27697:   /* fdatasync() on HFS+ doesn't yet flush the file size if it changed correctly
                   27698:   ** so currently we default to the macro that redefines fdatasync to fsync
                   27699:   */
                   27700:   rc = fsync(fd);
                   27701: #else 
                   27702:   rc = fdatasync(fd);
                   27703: #if OS_VXWORKS
                   27704:   if( rc==-1 && errno==ENOTSUP ){
                   27705:     rc = fsync(fd);
                   27706:   }
                   27707: #endif /* OS_VXWORKS */
                   27708: #endif /* ifdef SQLITE_NO_SYNC elif HAVE_FULLFSYNC */
                   27709: 
                   27710:   if( OS_VXWORKS && rc!= -1 ){
                   27711:     rc = 0;
                   27712:   }
                   27713:   return rc;
                   27714: }
                   27715: 
                   27716: /*
                   27717: ** Make sure all writes to a particular file are committed to disk.
                   27718: **
                   27719: ** If dataOnly==0 then both the file itself and its metadata (file
                   27720: ** size, access time, etc) are synced.  If dataOnly!=0 then only the
                   27721: ** file data is synced.
                   27722: **
                   27723: ** Under Unix, also make sure that the directory entry for the file
                   27724: ** has been created by fsync-ing the directory that contains the file.
                   27725: ** If we do not do this and we encounter a power failure, the directory
                   27726: ** entry for the journal might not exist after we reboot.  The next
                   27727: ** SQLite to access the file will not know that the journal exists (because
                   27728: ** the directory entry for the journal was never created) and the transaction
                   27729: ** will not roll back - possibly leading to database corruption.
                   27730: */
                   27731: static int unixSync(sqlite3_file *id, int flags){
                   27732:   int rc;
                   27733:   unixFile *pFile = (unixFile*)id;
                   27734: 
                   27735:   int isDataOnly = (flags&SQLITE_SYNC_DATAONLY);
                   27736:   int isFullsync = (flags&0x0F)==SQLITE_SYNC_FULL;
                   27737: 
                   27738:   /* Check that one of SQLITE_SYNC_NORMAL or FULL was passed */
                   27739:   assert((flags&0x0F)==SQLITE_SYNC_NORMAL
                   27740:       || (flags&0x0F)==SQLITE_SYNC_FULL
                   27741:   );
                   27742: 
                   27743:   /* Unix cannot, but some systems may return SQLITE_FULL from here. This
                   27744:   ** line is to test that doing so does not cause any problems.
                   27745:   */
                   27746:   SimulateDiskfullError( return SQLITE_FULL );
                   27747: 
                   27748:   assert( pFile );
                   27749:   OSTRACE(("SYNC    %-3d\n", pFile->h));
                   27750:   rc = full_fsync(pFile->h, isFullsync, isDataOnly);
                   27751:   SimulateIOError( rc=1 );
                   27752:   if( rc ){
                   27753:     pFile->lastErrno = errno;
                   27754:     return unixLogError(SQLITE_IOERR_FSYNC, "full_fsync", pFile->zPath);
                   27755:   }
                   27756:   if( pFile->dirfd>=0 ){
                   27757:     OSTRACE(("DIRSYNC %-3d (have_fullfsync=%d fullsync=%d)\n", pFile->dirfd,
                   27758:             HAVE_FULLFSYNC, isFullsync));
                   27759: #ifndef SQLITE_DISABLE_DIRSYNC
                   27760:     /* The directory sync is only attempted if full_fsync is
                   27761:     ** turned off or unavailable.  If a full_fsync occurred above,
                   27762:     ** then the directory sync is superfluous.
                   27763:     */
                   27764:     if( (!HAVE_FULLFSYNC || !isFullsync) && full_fsync(pFile->dirfd,0,0) ){
                   27765:        /*
                   27766:        ** We have received multiple reports of fsync() returning
                   27767:        ** errors when applied to directories on certain file systems.
                   27768:        ** A failed directory sync is not a big deal.  So it seems
                   27769:        ** better to ignore the error.  Ticket #1657
                   27770:        */
                   27771:        /* pFile->lastErrno = errno; */
                   27772:        /* return SQLITE_IOERR; */
                   27773:     }
                   27774: #endif
                   27775:     /* Only need to sync once, so close the  directory when we are done */
                   27776:     robust_close(pFile, pFile->dirfd, __LINE__);
                   27777:     pFile->dirfd = -1;
                   27778:   }
                   27779:   return rc;
                   27780: }
                   27781: 
                   27782: /*
                   27783: ** Truncate an open file to a specified size
                   27784: */
                   27785: static int unixTruncate(sqlite3_file *id, i64 nByte){
                   27786:   unixFile *pFile = (unixFile *)id;
                   27787:   int rc;
                   27788:   assert( pFile );
                   27789:   SimulateIOError( return SQLITE_IOERR_TRUNCATE );
                   27790: 
                   27791:   /* If the user has configured a chunk-size for this file, truncate the
                   27792:   ** file so that it consists of an integer number of chunks (i.e. the
                   27793:   ** actual file size after the operation may be larger than the requested
                   27794:   ** size).
                   27795:   */
                   27796:   if( pFile->szChunk ){
                   27797:     nByte = ((nByte + pFile->szChunk - 1)/pFile->szChunk) * pFile->szChunk;
                   27798:   }
                   27799: 
                   27800:   rc = robust_ftruncate(pFile->h, (off_t)nByte);
                   27801:   if( rc ){
                   27802:     pFile->lastErrno = errno;
                   27803:     return unixLogError(SQLITE_IOERR_TRUNCATE, "ftruncate", pFile->zPath);
                   27804:   }else{
                   27805: #ifndef NDEBUG
                   27806:     /* If we are doing a normal write to a database file (as opposed to
                   27807:     ** doing a hot-journal rollback or a write to some file other than a
                   27808:     ** normal database file) and we truncate the file to zero length,
                   27809:     ** that effectively updates the change counter.  This might happen
                   27810:     ** when restoring a database using the backup API from a zero-length
                   27811:     ** source.
                   27812:     */
                   27813:     if( pFile->inNormalWrite && nByte==0 ){
                   27814:       pFile->transCntrChng = 1;
                   27815:     }
                   27816: #endif
                   27817: 
                   27818:     return SQLITE_OK;
                   27819:   }
                   27820: }
                   27821: 
                   27822: /*
                   27823: ** Determine the current size of a file in bytes
                   27824: */
                   27825: static int unixFileSize(sqlite3_file *id, i64 *pSize){
                   27826:   int rc;
                   27827:   struct stat buf;
                   27828:   assert( id );
                   27829:   rc = osFstat(((unixFile*)id)->h, &buf);
                   27830:   SimulateIOError( rc=1 );
                   27831:   if( rc!=0 ){
                   27832:     ((unixFile*)id)->lastErrno = errno;
                   27833:     return SQLITE_IOERR_FSTAT;
                   27834:   }
                   27835:   *pSize = buf.st_size;
                   27836: 
                   27837:   /* When opening a zero-size database, the findInodeInfo() procedure
                   27838:   ** writes a single byte into that file in order to work around a bug
                   27839:   ** in the OS-X msdos filesystem.  In order to avoid problems with upper
                   27840:   ** layers, we need to report this file size as zero even though it is
                   27841:   ** really 1.   Ticket #3260.
                   27842:   */
                   27843:   if( *pSize==1 ) *pSize = 0;
                   27844: 
                   27845: 
                   27846:   return SQLITE_OK;
                   27847: }
                   27848: 
                   27849: #if SQLITE_ENABLE_LOCKING_STYLE && defined(__APPLE__)
                   27850: /*
                   27851: ** Handler for proxy-locking file-control verbs.  Defined below in the
                   27852: ** proxying locking division.
                   27853: */
                   27854: static int proxyFileControl(sqlite3_file*,int,void*);
                   27855: #endif
                   27856: 
                   27857: /* 
                   27858: ** This function is called to handle the SQLITE_FCNTL_SIZE_HINT 
                   27859: ** file-control operation.
                   27860: **
                   27861: ** If the user has configured a chunk-size for this file, it could be
                   27862: ** that the file needs to be extended at this point. Otherwise, the
                   27863: ** SQLITE_FCNTL_SIZE_HINT operation is a no-op for Unix.
                   27864: */
                   27865: static int fcntlSizeHint(unixFile *pFile, i64 nByte){
                   27866:   if( pFile->szChunk ){
                   27867:     i64 nSize;                    /* Required file size */
                   27868:     struct stat buf;              /* Used to hold return values of fstat() */
                   27869:    
                   27870:     if( osFstat(pFile->h, &buf) ) return SQLITE_IOERR_FSTAT;
                   27871: 
                   27872:     nSize = ((nByte+pFile->szChunk-1) / pFile->szChunk) * pFile->szChunk;
                   27873:     if( nSize>(i64)buf.st_size ){
                   27874: 
                   27875: #if defined(HAVE_POSIX_FALLOCATE) && HAVE_POSIX_FALLOCATE
                   27876:       /* The code below is handling the return value of osFallocate() 
                   27877:       ** correctly. posix_fallocate() is defined to "returns zero on success, 
                   27878:       ** or an error number on  failure". See the manpage for details. */
                   27879:       int err;
                   27880:       do{
                   27881:         err = osFallocate(pFile->h, buf.st_size, nSize-buf.st_size);
                   27882:       }while( err==EINTR );
                   27883:       if( err ) return SQLITE_IOERR_WRITE;
                   27884: #else
                   27885:       /* If the OS does not have posix_fallocate(), fake it. First use
                   27886:       ** ftruncate() to set the file size, then write a single byte to
                   27887:       ** the last byte in each block within the extended region. This
                   27888:       ** is the same technique used by glibc to implement posix_fallocate()
                   27889:       ** on systems that do not have a real fallocate() system call.
                   27890:       */
                   27891:       int nBlk = buf.st_blksize;  /* File-system block size */
                   27892:       i64 iWrite;                 /* Next offset to write to */
                   27893: 
                   27894:       if( robust_ftruncate(pFile->h, nSize) ){
                   27895:         pFile->lastErrno = errno;
                   27896:         return unixLogError(SQLITE_IOERR_TRUNCATE, "ftruncate", pFile->zPath);
                   27897:       }
                   27898:       iWrite = ((buf.st_size + 2*nBlk - 1)/nBlk)*nBlk-1;
                   27899:       while( iWrite<nSize ){
                   27900:         int nWrite = seekAndWrite(pFile, iWrite, "", 1);
                   27901:         if( nWrite!=1 ) return SQLITE_IOERR_WRITE;
                   27902:         iWrite += nBlk;
                   27903:       }
                   27904: #endif
                   27905:     }
                   27906:   }
                   27907: 
                   27908:   return SQLITE_OK;
                   27909: }
                   27910: 
                   27911: /*
                   27912: ** Information and control of an open file handle.
                   27913: */
                   27914: static int unixFileControl(sqlite3_file *id, int op, void *pArg){
                   27915:   switch( op ){
                   27916:     case SQLITE_FCNTL_LOCKSTATE: {
                   27917:       *(int*)pArg = ((unixFile*)id)->eFileLock;
                   27918:       return SQLITE_OK;
                   27919:     }
                   27920:     case SQLITE_LAST_ERRNO: {
                   27921:       *(int*)pArg = ((unixFile*)id)->lastErrno;
                   27922:       return SQLITE_OK;
                   27923:     }
                   27924:     case SQLITE_FCNTL_CHUNK_SIZE: {
                   27925:       ((unixFile*)id)->szChunk = *(int *)pArg;
                   27926:       return SQLITE_OK;
                   27927:     }
                   27928:     case SQLITE_FCNTL_SIZE_HINT: {
                   27929:       return fcntlSizeHint((unixFile *)id, *(i64 *)pArg);
                   27930:     }
                   27931: #ifndef NDEBUG
                   27932:     /* The pager calls this method to signal that it has done
                   27933:     ** a rollback and that the database is therefore unchanged and
                   27934:     ** it hence it is OK for the transaction change counter to be
                   27935:     ** unchanged.
                   27936:     */
                   27937:     case SQLITE_FCNTL_DB_UNCHANGED: {
                   27938:       ((unixFile*)id)->dbUpdate = 0;
                   27939:       return SQLITE_OK;
                   27940:     }
                   27941: #endif
                   27942: #if SQLITE_ENABLE_LOCKING_STYLE && defined(__APPLE__)
                   27943:     case SQLITE_SET_LOCKPROXYFILE:
                   27944:     case SQLITE_GET_LOCKPROXYFILE: {
                   27945:       return proxyFileControl(id,op,pArg);
                   27946:     }
                   27947: #endif /* SQLITE_ENABLE_LOCKING_STYLE && defined(__APPLE__) */
                   27948:     case SQLITE_FCNTL_SYNC_OMITTED: {
                   27949:       return SQLITE_OK;  /* A no-op */
                   27950:     }
                   27951:   }
                   27952:   return SQLITE_NOTFOUND;
                   27953: }
                   27954: 
                   27955: /*
                   27956: ** Return the sector size in bytes of the underlying block device for
                   27957: ** the specified file. This is almost always 512 bytes, but may be
                   27958: ** larger for some devices.
                   27959: **
                   27960: ** SQLite code assumes this function cannot fail. It also assumes that
                   27961: ** if two files are created in the same file-system directory (i.e.
                   27962: ** a database and its journal file) that the sector size will be the
                   27963: ** same for both.
                   27964: */
                   27965: static int unixSectorSize(sqlite3_file *NotUsed){
                   27966:   UNUSED_PARAMETER(NotUsed);
                   27967:   return SQLITE_DEFAULT_SECTOR_SIZE;
                   27968: }
                   27969: 
                   27970: /*
                   27971: ** Return the device characteristics for the file. This is always 0 for unix.
                   27972: */
                   27973: static int unixDeviceCharacteristics(sqlite3_file *NotUsed){
                   27974:   UNUSED_PARAMETER(NotUsed);
                   27975:   return 0;
                   27976: }
                   27977: 
                   27978: #ifndef SQLITE_OMIT_WAL
                   27979: 
                   27980: 
                   27981: /*
                   27982: ** Object used to represent an shared memory buffer.  
                   27983: **
                   27984: ** When multiple threads all reference the same wal-index, each thread
                   27985: ** has its own unixShm object, but they all point to a single instance
                   27986: ** of this unixShmNode object.  In other words, each wal-index is opened
                   27987: ** only once per process.
                   27988: **
                   27989: ** Each unixShmNode object is connected to a single unixInodeInfo object.
                   27990: ** We could coalesce this object into unixInodeInfo, but that would mean
                   27991: ** every open file that does not use shared memory (in other words, most
                   27992: ** open files) would have to carry around this extra information.  So
                   27993: ** the unixInodeInfo object contains a pointer to this unixShmNode object
                   27994: ** and the unixShmNode object is created only when needed.
                   27995: **
                   27996: ** unixMutexHeld() must be true when creating or destroying
                   27997: ** this object or while reading or writing the following fields:
                   27998: **
                   27999: **      nRef
                   28000: **
                   28001: ** The following fields are read-only after the object is created:
                   28002: ** 
                   28003: **      fid
                   28004: **      zFilename
                   28005: **
                   28006: ** Either unixShmNode.mutex must be held or unixShmNode.nRef==0 and
                   28007: ** unixMutexHeld() is true when reading or writing any other field
                   28008: ** in this structure.
                   28009: */
                   28010: struct unixShmNode {
                   28011:   unixInodeInfo *pInode;     /* unixInodeInfo that owns this SHM node */
                   28012:   sqlite3_mutex *mutex;      /* Mutex to access this object */
                   28013:   char *zFilename;           /* Name of the mmapped file */
                   28014:   int h;                     /* Open file descriptor */
                   28015:   int szRegion;              /* Size of shared-memory regions */
                   28016:   u16 nRegion;               /* Size of array apRegion */
                   28017:   u8 isReadonly;             /* True if read-only */
                   28018:   char **apRegion;           /* Array of mapped shared-memory regions */
                   28019:   int nRef;                  /* Number of unixShm objects pointing to this */
                   28020:   unixShm *pFirst;           /* All unixShm objects pointing to this */
                   28021: #ifdef SQLITE_DEBUG
                   28022:   u8 exclMask;               /* Mask of exclusive locks held */
                   28023:   u8 sharedMask;             /* Mask of shared locks held */
                   28024:   u8 nextShmId;              /* Next available unixShm.id value */
                   28025: #endif
                   28026: };
                   28027: 
                   28028: /*
                   28029: ** Structure used internally by this VFS to record the state of an
                   28030: ** open shared memory connection.
                   28031: **
                   28032: ** The following fields are initialized when this object is created and
                   28033: ** are read-only thereafter:
                   28034: **
                   28035: **    unixShm.pFile
                   28036: **    unixShm.id
                   28037: **
                   28038: ** All other fields are read/write.  The unixShm.pFile->mutex must be held
                   28039: ** while accessing any read/write fields.
                   28040: */
                   28041: struct unixShm {
                   28042:   unixShmNode *pShmNode;     /* The underlying unixShmNode object */
                   28043:   unixShm *pNext;            /* Next unixShm with the same unixShmNode */
                   28044:   u8 hasMutex;               /* True if holding the unixShmNode mutex */
                   28045:   u16 sharedMask;            /* Mask of shared locks held */
                   28046:   u16 exclMask;              /* Mask of exclusive locks held */
                   28047: #ifdef SQLITE_DEBUG
                   28048:   u8 id;                     /* Id of this connection within its unixShmNode */
                   28049: #endif
                   28050: };
                   28051: 
                   28052: /*
                   28053: ** Constants used for locking
                   28054: */
                   28055: #define UNIX_SHM_BASE   ((22+SQLITE_SHM_NLOCK)*4)         /* first lock byte */
                   28056: #define UNIX_SHM_DMS    (UNIX_SHM_BASE+SQLITE_SHM_NLOCK)  /* deadman switch */
                   28057: 
                   28058: /*
                   28059: ** Apply posix advisory locks for all bytes from ofst through ofst+n-1.
                   28060: **
                   28061: ** Locks block if the mask is exactly UNIX_SHM_C and are non-blocking
                   28062: ** otherwise.
                   28063: */
                   28064: static int unixShmSystemLock(
                   28065:   unixShmNode *pShmNode, /* Apply locks to this open shared-memory segment */
                   28066:   int lockType,          /* F_UNLCK, F_RDLCK, or F_WRLCK */
                   28067:   int ofst,              /* First byte of the locking range */
                   28068:   int n                  /* Number of bytes to lock */
                   28069: ){
                   28070:   struct flock f;       /* The posix advisory locking structure */
                   28071:   int rc = SQLITE_OK;   /* Result code form fcntl() */
                   28072: 
                   28073:   /* Access to the unixShmNode object is serialized by the caller */
                   28074:   assert( sqlite3_mutex_held(pShmNode->mutex) || pShmNode->nRef==0 );
                   28075: 
                   28076:   /* Shared locks never span more than one byte */
                   28077:   assert( n==1 || lockType!=F_RDLCK );
                   28078: 
                   28079:   /* Locks are within range */
                   28080:   assert( n>=1 && n<SQLITE_SHM_NLOCK );
                   28081: 
                   28082:   if( pShmNode->h>=0 ){
                   28083:     /* Initialize the locking parameters */
                   28084:     memset(&f, 0, sizeof(f));
                   28085:     f.l_type = lockType;
                   28086:     f.l_whence = SEEK_SET;
                   28087:     f.l_start = ofst;
                   28088:     f.l_len = n;
                   28089: 
                   28090:     rc = osFcntl(pShmNode->h, F_SETLK, &f);
                   28091:     rc = (rc!=(-1)) ? SQLITE_OK : SQLITE_BUSY;
                   28092:   }
                   28093: 
                   28094:   /* Update the global lock state and do debug tracing */
                   28095: #ifdef SQLITE_DEBUG
                   28096:   { u16 mask;
                   28097:   OSTRACE(("SHM-LOCK "));
                   28098:   mask = (1<<(ofst+n)) - (1<<ofst);
                   28099:   if( rc==SQLITE_OK ){
                   28100:     if( lockType==F_UNLCK ){
                   28101:       OSTRACE(("unlock %d ok", ofst));
                   28102:       pShmNode->exclMask &= ~mask;
                   28103:       pShmNode->sharedMask &= ~mask;
                   28104:     }else if( lockType==F_RDLCK ){
                   28105:       OSTRACE(("read-lock %d ok", ofst));
                   28106:       pShmNode->exclMask &= ~mask;
                   28107:       pShmNode->sharedMask |= mask;
                   28108:     }else{
                   28109:       assert( lockType==F_WRLCK );
                   28110:       OSTRACE(("write-lock %d ok", ofst));
                   28111:       pShmNode->exclMask |= mask;
                   28112:       pShmNode->sharedMask &= ~mask;
                   28113:     }
                   28114:   }else{
                   28115:     if( lockType==F_UNLCK ){
                   28116:       OSTRACE(("unlock %d failed", ofst));
                   28117:     }else if( lockType==F_RDLCK ){
                   28118:       OSTRACE(("read-lock failed"));
                   28119:     }else{
                   28120:       assert( lockType==F_WRLCK );
                   28121:       OSTRACE(("write-lock %d failed", ofst));
                   28122:     }
                   28123:   }
                   28124:   OSTRACE((" - afterwards %03x,%03x\n",
                   28125:            pShmNode->sharedMask, pShmNode->exclMask));
                   28126:   }
                   28127: #endif
                   28128: 
                   28129:   return rc;        
                   28130: }
                   28131: 
                   28132: 
                   28133: /*
                   28134: ** Purge the unixShmNodeList list of all entries with unixShmNode.nRef==0.
                   28135: **
                   28136: ** This is not a VFS shared-memory method; it is a utility function called
                   28137: ** by VFS shared-memory methods.
                   28138: */
                   28139: static void unixShmPurge(unixFile *pFd){
                   28140:   unixShmNode *p = pFd->pInode->pShmNode;
                   28141:   assert( unixMutexHeld() );
                   28142:   if( p && p->nRef==0 ){
                   28143:     int i;
                   28144:     assert( p->pInode==pFd->pInode );
                   28145:     if( p->mutex ) sqlite3_mutex_free(p->mutex);
                   28146:     for(i=0; i<p->nRegion; i++){
                   28147:       if( p->h>=0 ){
                   28148:         munmap(p->apRegion[i], p->szRegion);
                   28149:       }else{
                   28150:         sqlite3_free(p->apRegion[i]);
                   28151:       }
                   28152:     }
                   28153:     sqlite3_free(p->apRegion);
                   28154:     if( p->h>=0 ){
                   28155:       robust_close(pFd, p->h, __LINE__);
                   28156:       p->h = -1;
                   28157:     }
                   28158:     p->pInode->pShmNode = 0;
                   28159:     sqlite3_free(p);
                   28160:   }
                   28161: }
                   28162: 
                   28163: /*
                   28164: ** Open a shared-memory area associated with open database file pDbFd.  
                   28165: ** This particular implementation uses mmapped files.
                   28166: **
                   28167: ** The file used to implement shared-memory is in the same directory
                   28168: ** as the open database file and has the same name as the open database
                   28169: ** file with the "-shm" suffix added.  For example, if the database file
                   28170: ** is "/home/user1/config.db" then the file that is created and mmapped
                   28171: ** for shared memory will be called "/home/user1/config.db-shm".  
                   28172: **
                   28173: ** Another approach to is to use files in /dev/shm or /dev/tmp or an
                   28174: ** some other tmpfs mount. But if a file in a different directory
                   28175: ** from the database file is used, then differing access permissions
                   28176: ** or a chroot() might cause two different processes on the same
                   28177: ** database to end up using different files for shared memory - 
                   28178: ** meaning that their memory would not really be shared - resulting
                   28179: ** in database corruption.  Nevertheless, this tmpfs file usage
                   28180: ** can be enabled at compile-time using -DSQLITE_SHM_DIRECTORY="/dev/shm"
                   28181: ** or the equivalent.  The use of the SQLITE_SHM_DIRECTORY compile-time
                   28182: ** option results in an incompatible build of SQLite;  builds of SQLite
                   28183: ** that with differing SQLITE_SHM_DIRECTORY settings attempt to use the
                   28184: ** same database file at the same time, database corruption will likely
                   28185: ** result. The SQLITE_SHM_DIRECTORY compile-time option is considered
                   28186: ** "unsupported" and may go away in a future SQLite release.
                   28187: **
                   28188: ** When opening a new shared-memory file, if no other instances of that
                   28189: ** file are currently open, in this process or in other processes, then
                   28190: ** the file must be truncated to zero length or have its header cleared.
                   28191: **
                   28192: ** If the original database file (pDbFd) is using the "unix-excl" VFS
                   28193: ** that means that an exclusive lock is held on the database file and
                   28194: ** that no other processes are able to read or write the database.  In
                   28195: ** that case, we do not really need shared memory.  No shared memory
                   28196: ** file is created.  The shared memory will be simulated with heap memory.
                   28197: */
                   28198: static int unixOpenSharedMemory(unixFile *pDbFd){
                   28199:   struct unixShm *p = 0;          /* The connection to be opened */
                   28200:   struct unixShmNode *pShmNode;   /* The underlying mmapped file */
                   28201:   int rc;                         /* Result code */
                   28202:   unixInodeInfo *pInode;          /* The inode of fd */
                   28203:   char *zShmFilename;             /* Name of the file used for SHM */
                   28204:   int nShmFilename;               /* Size of the SHM filename in bytes */
                   28205: 
                   28206:   /* Allocate space for the new unixShm object. */
                   28207:   p = sqlite3_malloc( sizeof(*p) );
                   28208:   if( p==0 ) return SQLITE_NOMEM;
                   28209:   memset(p, 0, sizeof(*p));
                   28210:   assert( pDbFd->pShm==0 );
                   28211: 
                   28212:   /* Check to see if a unixShmNode object already exists. Reuse an existing
                   28213:   ** one if present. Create a new one if necessary.
                   28214:   */
                   28215:   unixEnterMutex();
                   28216:   pInode = pDbFd->pInode;
                   28217:   pShmNode = pInode->pShmNode;
                   28218:   if( pShmNode==0 ){
                   28219:     struct stat sStat;                 /* fstat() info for database file */
                   28220: 
                   28221:     /* Call fstat() to figure out the permissions on the database file. If
                   28222:     ** a new *-shm file is created, an attempt will be made to create it
                   28223:     ** with the same permissions. The actual permissions the file is created
                   28224:     ** with are subject to the current umask setting.
                   28225:     */
                   28226:     if( osFstat(pDbFd->h, &sStat) && pInode->bProcessLock==0 ){
                   28227:       rc = SQLITE_IOERR_FSTAT;
                   28228:       goto shm_open_err;
                   28229:     }
                   28230: 
                   28231: #ifdef SQLITE_SHM_DIRECTORY
                   28232:     nShmFilename = sizeof(SQLITE_SHM_DIRECTORY) + 30;
                   28233: #else
                   28234:     nShmFilename = 5 + (int)strlen(pDbFd->zPath);
                   28235: #endif
                   28236:     pShmNode = sqlite3_malloc( sizeof(*pShmNode) + nShmFilename );
                   28237:     if( pShmNode==0 ){
                   28238:       rc = SQLITE_NOMEM;
                   28239:       goto shm_open_err;
                   28240:     }
                   28241:     memset(pShmNode, 0, sizeof(*pShmNode));
                   28242:     zShmFilename = pShmNode->zFilename = (char*)&pShmNode[1];
                   28243: #ifdef SQLITE_SHM_DIRECTORY
                   28244:     sqlite3_snprintf(nShmFilename, zShmFilename, 
                   28245:                      SQLITE_SHM_DIRECTORY "/sqlite-shm-%x-%x",
                   28246:                      (u32)sStat.st_ino, (u32)sStat.st_dev);
                   28247: #else
                   28248:     sqlite3_snprintf(nShmFilename, zShmFilename, "%s-shm", pDbFd->zPath);
                   28249:     sqlite3FileSuffix3(pDbFd->zPath, zShmFilename);
                   28250: #endif
                   28251:     pShmNode->h = -1;
                   28252:     pDbFd->pInode->pShmNode = pShmNode;
                   28253:     pShmNode->pInode = pDbFd->pInode;
                   28254:     pShmNode->mutex = sqlite3_mutex_alloc(SQLITE_MUTEX_FAST);
                   28255:     if( pShmNode->mutex==0 ){
                   28256:       rc = SQLITE_NOMEM;
                   28257:       goto shm_open_err;
                   28258:     }
                   28259: 
                   28260:     if( pInode->bProcessLock==0 ){
                   28261:       pShmNode->h = robust_open(zShmFilename, O_RDWR|O_CREAT,
                   28262:                                (sStat.st_mode & 0777));
                   28263:       if( pShmNode->h<0 ){
                   28264:         const char *zRO;
                   28265:         zRO = sqlite3_uri_parameter(pDbFd->zPath, "readonly_shm");
                   28266:         if( zRO && sqlite3GetBoolean(zRO) ){
                   28267:           pShmNode->h = robust_open(zShmFilename, O_RDONLY,
                   28268:                                     (sStat.st_mode & 0777));
                   28269:           pShmNode->isReadonly = 1;
                   28270:         }
                   28271:         if( pShmNode->h<0 ){
                   28272:           rc = unixLogError(SQLITE_CANTOPEN_BKPT, "open", zShmFilename);
                   28273:           goto shm_open_err;
                   28274:         }
                   28275:       }
                   28276:   
                   28277:       /* Check to see if another process is holding the dead-man switch.
                   28278:       ** If not, truncate the file to zero length. 
                   28279:       */
                   28280:       rc = SQLITE_OK;
                   28281:       if( unixShmSystemLock(pShmNode, F_WRLCK, UNIX_SHM_DMS, 1)==SQLITE_OK ){
                   28282:         if( robust_ftruncate(pShmNode->h, 0) ){
                   28283:           rc = unixLogError(SQLITE_IOERR_SHMOPEN, "ftruncate", zShmFilename);
                   28284:         }
                   28285:       }
                   28286:       if( rc==SQLITE_OK ){
                   28287:         rc = unixShmSystemLock(pShmNode, F_RDLCK, UNIX_SHM_DMS, 1);
                   28288:       }
                   28289:       if( rc ) goto shm_open_err;
                   28290:     }
                   28291:   }
                   28292: 
                   28293:   /* Make the new connection a child of the unixShmNode */
                   28294:   p->pShmNode = pShmNode;
                   28295: #ifdef SQLITE_DEBUG
                   28296:   p->id = pShmNode->nextShmId++;
                   28297: #endif
                   28298:   pShmNode->nRef++;
                   28299:   pDbFd->pShm = p;
                   28300:   unixLeaveMutex();
                   28301: 
                   28302:   /* The reference count on pShmNode has already been incremented under
                   28303:   ** the cover of the unixEnterMutex() mutex and the pointer from the
                   28304:   ** new (struct unixShm) object to the pShmNode has been set. All that is
                   28305:   ** left to do is to link the new object into the linked list starting
                   28306:   ** at pShmNode->pFirst. This must be done while holding the pShmNode->mutex 
                   28307:   ** mutex.
                   28308:   */
                   28309:   sqlite3_mutex_enter(pShmNode->mutex);
                   28310:   p->pNext = pShmNode->pFirst;
                   28311:   pShmNode->pFirst = p;
                   28312:   sqlite3_mutex_leave(pShmNode->mutex);
                   28313:   return SQLITE_OK;
                   28314: 
                   28315:   /* Jump here on any error */
                   28316: shm_open_err:
                   28317:   unixShmPurge(pDbFd);       /* This call frees pShmNode if required */
                   28318:   sqlite3_free(p);
                   28319:   unixLeaveMutex();
                   28320:   return rc;
                   28321: }
                   28322: 
                   28323: /*
                   28324: ** This function is called to obtain a pointer to region iRegion of the 
                   28325: ** shared-memory associated with the database file fd. Shared-memory regions 
                   28326: ** are numbered starting from zero. Each shared-memory region is szRegion 
                   28327: ** bytes in size.
                   28328: **
                   28329: ** If an error occurs, an error code is returned and *pp is set to NULL.
                   28330: **
                   28331: ** Otherwise, if the bExtend parameter is 0 and the requested shared-memory
                   28332: ** region has not been allocated (by any client, including one running in a
                   28333: ** separate process), then *pp is set to NULL and SQLITE_OK returned. If 
                   28334: ** bExtend is non-zero and the requested shared-memory region has not yet 
                   28335: ** been allocated, it is allocated by this function.
                   28336: **
                   28337: ** If the shared-memory region has already been allocated or is allocated by
                   28338: ** this call as described above, then it is mapped into this processes 
                   28339: ** address space (if it is not already), *pp is set to point to the mapped 
                   28340: ** memory and SQLITE_OK returned.
                   28341: */
                   28342: static int unixShmMap(
                   28343:   sqlite3_file *fd,               /* Handle open on database file */
                   28344:   int iRegion,                    /* Region to retrieve */
                   28345:   int szRegion,                   /* Size of regions */
                   28346:   int bExtend,                    /* True to extend file if necessary */
                   28347:   void volatile **pp              /* OUT: Mapped memory */
                   28348: ){
                   28349:   unixFile *pDbFd = (unixFile*)fd;
                   28350:   unixShm *p;
                   28351:   unixShmNode *pShmNode;
                   28352:   int rc = SQLITE_OK;
                   28353: 
                   28354:   /* If the shared-memory file has not yet been opened, open it now. */
                   28355:   if( pDbFd->pShm==0 ){
                   28356:     rc = unixOpenSharedMemory(pDbFd);
                   28357:     if( rc!=SQLITE_OK ) return rc;
                   28358:   }
                   28359: 
                   28360:   p = pDbFd->pShm;
                   28361:   pShmNode = p->pShmNode;
                   28362:   sqlite3_mutex_enter(pShmNode->mutex);
                   28363:   assert( szRegion==pShmNode->szRegion || pShmNode->nRegion==0 );
                   28364:   assert( pShmNode->pInode==pDbFd->pInode );
                   28365:   assert( pShmNode->h>=0 || pDbFd->pInode->bProcessLock==1 );
                   28366:   assert( pShmNode->h<0 || pDbFd->pInode->bProcessLock==0 );
                   28367: 
                   28368:   if( pShmNode->nRegion<=iRegion ){
                   28369:     char **apNew;                      /* New apRegion[] array */
                   28370:     int nByte = (iRegion+1)*szRegion;  /* Minimum required file size */
                   28371:     struct stat sStat;                 /* Used by fstat() */
                   28372: 
                   28373:     pShmNode->szRegion = szRegion;
                   28374: 
                   28375:     if( pShmNode->h>=0 ){
                   28376:       /* The requested region is not mapped into this processes address space.
                   28377:       ** Check to see if it has been allocated (i.e. if the wal-index file is
                   28378:       ** large enough to contain the requested region).
                   28379:       */
                   28380:       if( osFstat(pShmNode->h, &sStat) ){
                   28381:         rc = SQLITE_IOERR_SHMSIZE;
                   28382:         goto shmpage_out;
                   28383:       }
                   28384:   
                   28385:       if( sStat.st_size<nByte ){
                   28386:         /* The requested memory region does not exist. If bExtend is set to
                   28387:         ** false, exit early. *pp will be set to NULL and SQLITE_OK returned.
                   28388:         **
                   28389:         ** Alternatively, if bExtend is true, use ftruncate() to allocate
                   28390:         ** the requested memory region.
                   28391:         */
                   28392:         if( !bExtend ) goto shmpage_out;
                   28393:         if( robust_ftruncate(pShmNode->h, nByte) ){
                   28394:           rc = unixLogError(SQLITE_IOERR_SHMSIZE, "ftruncate",
                   28395:                             pShmNode->zFilename);
                   28396:           goto shmpage_out;
                   28397:         }
                   28398:       }
                   28399:     }
                   28400: 
                   28401:     /* Map the requested memory region into this processes address space. */
                   28402:     apNew = (char **)sqlite3_realloc(
                   28403:         pShmNode->apRegion, (iRegion+1)*sizeof(char *)
                   28404:     );
                   28405:     if( !apNew ){
                   28406:       rc = SQLITE_IOERR_NOMEM;
                   28407:       goto shmpage_out;
                   28408:     }
                   28409:     pShmNode->apRegion = apNew;
                   28410:     while(pShmNode->nRegion<=iRegion){
                   28411:       void *pMem;
                   28412:       if( pShmNode->h>=0 ){
                   28413:         pMem = mmap(0, szRegion,
                   28414:             pShmNode->isReadonly ? PROT_READ : PROT_READ|PROT_WRITE, 
                   28415:             MAP_SHARED, pShmNode->h, pShmNode->nRegion*szRegion
                   28416:         );
                   28417:         if( pMem==MAP_FAILED ){
                   28418:           rc = unixLogError(SQLITE_IOERR_SHMMAP, "mmap", pShmNode->zFilename);
                   28419:           goto shmpage_out;
                   28420:         }
                   28421:       }else{
                   28422:         pMem = sqlite3_malloc(szRegion);
                   28423:         if( pMem==0 ){
                   28424:           rc = SQLITE_NOMEM;
                   28425:           goto shmpage_out;
                   28426:         }
                   28427:         memset(pMem, 0, szRegion);
                   28428:       }
                   28429:       pShmNode->apRegion[pShmNode->nRegion] = pMem;
                   28430:       pShmNode->nRegion++;
                   28431:     }
                   28432:   }
                   28433: 
                   28434: shmpage_out:
                   28435:   if( pShmNode->nRegion>iRegion ){
                   28436:     *pp = pShmNode->apRegion[iRegion];
                   28437:   }else{
                   28438:     *pp = 0;
                   28439:   }
                   28440:   if( pShmNode->isReadonly && rc==SQLITE_OK ) rc = SQLITE_READONLY;
                   28441:   sqlite3_mutex_leave(pShmNode->mutex);
                   28442:   return rc;
                   28443: }
                   28444: 
                   28445: /*
                   28446: ** Change the lock state for a shared-memory segment.
                   28447: **
                   28448: ** Note that the relationship between SHAREd and EXCLUSIVE locks is a little
                   28449: ** different here than in posix.  In xShmLock(), one can go from unlocked
                   28450: ** to shared and back or from unlocked to exclusive and back.  But one may
                   28451: ** not go from shared to exclusive or from exclusive to shared.
                   28452: */
                   28453: static int unixShmLock(
                   28454:   sqlite3_file *fd,          /* Database file holding the shared memory */
                   28455:   int ofst,                  /* First lock to acquire or release */
                   28456:   int n,                     /* Number of locks to acquire or release */
                   28457:   int flags                  /* What to do with the lock */
                   28458: ){
                   28459:   unixFile *pDbFd = (unixFile*)fd;      /* Connection holding shared memory */
                   28460:   unixShm *p = pDbFd->pShm;             /* The shared memory being locked */
                   28461:   unixShm *pX;                          /* For looping over all siblings */
                   28462:   unixShmNode *pShmNode = p->pShmNode;  /* The underlying file iNode */
                   28463:   int rc = SQLITE_OK;                   /* Result code */
                   28464:   u16 mask;                             /* Mask of locks to take or release */
                   28465: 
                   28466:   assert( pShmNode==pDbFd->pInode->pShmNode );
                   28467:   assert( pShmNode->pInode==pDbFd->pInode );
                   28468:   assert( ofst>=0 && ofst+n<=SQLITE_SHM_NLOCK );
                   28469:   assert( n>=1 );
                   28470:   assert( flags==(SQLITE_SHM_LOCK | SQLITE_SHM_SHARED)
                   28471:        || flags==(SQLITE_SHM_LOCK | SQLITE_SHM_EXCLUSIVE)
                   28472:        || flags==(SQLITE_SHM_UNLOCK | SQLITE_SHM_SHARED)
                   28473:        || flags==(SQLITE_SHM_UNLOCK | SQLITE_SHM_EXCLUSIVE) );
                   28474:   assert( n==1 || (flags & SQLITE_SHM_EXCLUSIVE)!=0 );
                   28475:   assert( pShmNode->h>=0 || pDbFd->pInode->bProcessLock==1 );
                   28476:   assert( pShmNode->h<0 || pDbFd->pInode->bProcessLock==0 );
                   28477: 
                   28478:   mask = (1<<(ofst+n)) - (1<<ofst);
                   28479:   assert( n>1 || mask==(1<<ofst) );
                   28480:   sqlite3_mutex_enter(pShmNode->mutex);
                   28481:   if( flags & SQLITE_SHM_UNLOCK ){
                   28482:     u16 allMask = 0; /* Mask of locks held by siblings */
                   28483: 
                   28484:     /* See if any siblings hold this same lock */
                   28485:     for(pX=pShmNode->pFirst; pX; pX=pX->pNext){
                   28486:       if( pX==p ) continue;
                   28487:       assert( (pX->exclMask & (p->exclMask|p->sharedMask))==0 );
                   28488:       allMask |= pX->sharedMask;
                   28489:     }
                   28490: 
                   28491:     /* Unlock the system-level locks */
                   28492:     if( (mask & allMask)==0 ){
                   28493:       rc = unixShmSystemLock(pShmNode, F_UNLCK, ofst+UNIX_SHM_BASE, n);
                   28494:     }else{
                   28495:       rc = SQLITE_OK;
                   28496:     }
                   28497: 
                   28498:     /* Undo the local locks */
                   28499:     if( rc==SQLITE_OK ){
                   28500:       p->exclMask &= ~mask;
                   28501:       p->sharedMask &= ~mask;
                   28502:     } 
                   28503:   }else if( flags & SQLITE_SHM_SHARED ){
                   28504:     u16 allShared = 0;  /* Union of locks held by connections other than "p" */
                   28505: 
                   28506:     /* Find out which shared locks are already held by sibling connections.
                   28507:     ** If any sibling already holds an exclusive lock, go ahead and return
                   28508:     ** SQLITE_BUSY.
                   28509:     */
                   28510:     for(pX=pShmNode->pFirst; pX; pX=pX->pNext){
                   28511:       if( (pX->exclMask & mask)!=0 ){
                   28512:         rc = SQLITE_BUSY;
                   28513:         break;
                   28514:       }
                   28515:       allShared |= pX->sharedMask;
                   28516:     }
                   28517: 
                   28518:     /* Get shared locks at the system level, if necessary */
                   28519:     if( rc==SQLITE_OK ){
                   28520:       if( (allShared & mask)==0 ){
                   28521:         rc = unixShmSystemLock(pShmNode, F_RDLCK, ofst+UNIX_SHM_BASE, n);
                   28522:       }else{
                   28523:         rc = SQLITE_OK;
                   28524:       }
                   28525:     }
                   28526: 
                   28527:     /* Get the local shared locks */
                   28528:     if( rc==SQLITE_OK ){
                   28529:       p->sharedMask |= mask;
                   28530:     }
                   28531:   }else{
                   28532:     /* Make sure no sibling connections hold locks that will block this
                   28533:     ** lock.  If any do, return SQLITE_BUSY right away.
                   28534:     */
                   28535:     for(pX=pShmNode->pFirst; pX; pX=pX->pNext){
                   28536:       if( (pX->exclMask & mask)!=0 || (pX->sharedMask & mask)!=0 ){
                   28537:         rc = SQLITE_BUSY;
                   28538:         break;
                   28539:       }
                   28540:     }
                   28541:   
                   28542:     /* Get the exclusive locks at the system level.  Then if successful
                   28543:     ** also mark the local connection as being locked.
                   28544:     */
                   28545:     if( rc==SQLITE_OK ){
                   28546:       rc = unixShmSystemLock(pShmNode, F_WRLCK, ofst+UNIX_SHM_BASE, n);
                   28547:       if( rc==SQLITE_OK ){
                   28548:         assert( (p->sharedMask & mask)==0 );
                   28549:         p->exclMask |= mask;
                   28550:       }
                   28551:     }
                   28552:   }
                   28553:   sqlite3_mutex_leave(pShmNode->mutex);
                   28554:   OSTRACE(("SHM-LOCK shmid-%d, pid-%d got %03x,%03x\n",
                   28555:            p->id, getpid(), p->sharedMask, p->exclMask));
                   28556:   return rc;
                   28557: }
                   28558: 
                   28559: /*
                   28560: ** Implement a memory barrier or memory fence on shared memory.  
                   28561: **
                   28562: ** All loads and stores begun before the barrier must complete before
                   28563: ** any load or store begun after the barrier.
                   28564: */
                   28565: static void unixShmBarrier(
                   28566:   sqlite3_file *fd                /* Database file holding the shared memory */
                   28567: ){
                   28568:   UNUSED_PARAMETER(fd);
                   28569:   unixEnterMutex();
                   28570:   unixLeaveMutex();
                   28571: }
                   28572: 
                   28573: /*
                   28574: ** Close a connection to shared-memory.  Delete the underlying 
                   28575: ** storage if deleteFlag is true.
                   28576: **
                   28577: ** If there is no shared memory associated with the connection then this
                   28578: ** routine is a harmless no-op.
                   28579: */
                   28580: static int unixShmUnmap(
                   28581:   sqlite3_file *fd,               /* The underlying database file */
                   28582:   int deleteFlag                  /* Delete shared-memory if true */
                   28583: ){
                   28584:   unixShm *p;                     /* The connection to be closed */
                   28585:   unixShmNode *pShmNode;          /* The underlying shared-memory file */
                   28586:   unixShm **pp;                   /* For looping over sibling connections */
                   28587:   unixFile *pDbFd;                /* The underlying database file */
                   28588: 
                   28589:   pDbFd = (unixFile*)fd;
                   28590:   p = pDbFd->pShm;
                   28591:   if( p==0 ) return SQLITE_OK;
                   28592:   pShmNode = p->pShmNode;
                   28593: 
                   28594:   assert( pShmNode==pDbFd->pInode->pShmNode );
                   28595:   assert( pShmNode->pInode==pDbFd->pInode );
                   28596: 
                   28597:   /* Remove connection p from the set of connections associated
                   28598:   ** with pShmNode */
                   28599:   sqlite3_mutex_enter(pShmNode->mutex);
                   28600:   for(pp=&pShmNode->pFirst; (*pp)!=p; pp = &(*pp)->pNext){}
                   28601:   *pp = p->pNext;
                   28602: 
                   28603:   /* Free the connection p */
                   28604:   sqlite3_free(p);
                   28605:   pDbFd->pShm = 0;
                   28606:   sqlite3_mutex_leave(pShmNode->mutex);
                   28607: 
                   28608:   /* If pShmNode->nRef has reached 0, then close the underlying
                   28609:   ** shared-memory file, too */
                   28610:   unixEnterMutex();
                   28611:   assert( pShmNode->nRef>0 );
                   28612:   pShmNode->nRef--;
                   28613:   if( pShmNode->nRef==0 ){
                   28614:     if( deleteFlag && pShmNode->h>=0 ) unlink(pShmNode->zFilename);
                   28615:     unixShmPurge(pDbFd);
                   28616:   }
                   28617:   unixLeaveMutex();
                   28618: 
                   28619:   return SQLITE_OK;
                   28620: }
                   28621: 
                   28622: 
                   28623: #else
                   28624: # define unixShmMap     0
                   28625: # define unixShmLock    0
                   28626: # define unixShmBarrier 0
                   28627: # define unixShmUnmap   0
                   28628: #endif /* #ifndef SQLITE_OMIT_WAL */
                   28629: 
                   28630: /*
                   28631: ** Here ends the implementation of all sqlite3_file methods.
                   28632: **
                   28633: ********************** End sqlite3_file Methods *******************************
                   28634: ******************************************************************************/
                   28635: 
                   28636: /*
                   28637: ** This division contains definitions of sqlite3_io_methods objects that
                   28638: ** implement various file locking strategies.  It also contains definitions
                   28639: ** of "finder" functions.  A finder-function is used to locate the appropriate
                   28640: ** sqlite3_io_methods object for a particular database file.  The pAppData
                   28641: ** field of the sqlite3_vfs VFS objects are initialized to be pointers to
                   28642: ** the correct finder-function for that VFS.
                   28643: **
                   28644: ** Most finder functions return a pointer to a fixed sqlite3_io_methods
                   28645: ** object.  The only interesting finder-function is autolockIoFinder, which
                   28646: ** looks at the filesystem type and tries to guess the best locking
                   28647: ** strategy from that.
                   28648: **
                   28649: ** For finder-funtion F, two objects are created:
                   28650: **
                   28651: **    (1) The real finder-function named "FImpt()".
                   28652: **
                   28653: **    (2) A constant pointer to this function named just "F".
                   28654: **
                   28655: **
                   28656: ** A pointer to the F pointer is used as the pAppData value for VFS
                   28657: ** objects.  We have to do this instead of letting pAppData point
                   28658: ** directly at the finder-function since C90 rules prevent a void*
                   28659: ** from be cast into a function pointer.
                   28660: **
                   28661: **
                   28662: ** Each instance of this macro generates two objects:
                   28663: **
                   28664: **   *  A constant sqlite3_io_methods object call METHOD that has locking
                   28665: **      methods CLOSE, LOCK, UNLOCK, CKRESLOCK.
                   28666: **
                   28667: **   *  An I/O method finder function called FINDER that returns a pointer
                   28668: **      to the METHOD object in the previous bullet.
                   28669: */
                   28670: #define IOMETHODS(FINDER, METHOD, VERSION, CLOSE, LOCK, UNLOCK, CKLOCK)      \
                   28671: static const sqlite3_io_methods METHOD = {                                   \
                   28672:    VERSION,                    /* iVersion */                                \
                   28673:    CLOSE,                      /* xClose */                                  \
                   28674:    unixRead,                   /* xRead */                                   \
                   28675:    unixWrite,                  /* xWrite */                                  \
                   28676:    unixTruncate,               /* xTruncate */                               \
                   28677:    unixSync,                   /* xSync */                                   \
                   28678:    unixFileSize,               /* xFileSize */                               \
                   28679:    LOCK,                       /* xLock */                                   \
                   28680:    UNLOCK,                     /* xUnlock */                                 \
                   28681:    CKLOCK,                     /* xCheckReservedLock */                      \
                   28682:    unixFileControl,            /* xFileControl */                            \
                   28683:    unixSectorSize,             /* xSectorSize */                             \
                   28684:    unixDeviceCharacteristics,  /* xDeviceCapabilities */                     \
                   28685:    unixShmMap,                 /* xShmMap */                                 \
                   28686:    unixShmLock,                /* xShmLock */                                \
                   28687:    unixShmBarrier,             /* xShmBarrier */                             \
                   28688:    unixShmUnmap                /* xShmUnmap */                               \
                   28689: };                                                                           \
                   28690: static const sqlite3_io_methods *FINDER##Impl(const char *z, unixFile *p){   \
                   28691:   UNUSED_PARAMETER(z); UNUSED_PARAMETER(p);                                  \
                   28692:   return &METHOD;                                                            \
                   28693: }                                                                            \
                   28694: static const sqlite3_io_methods *(*const FINDER)(const char*,unixFile *p)    \
                   28695:     = FINDER##Impl;
                   28696: 
                   28697: /*
                   28698: ** Here are all of the sqlite3_io_methods objects for each of the
                   28699: ** locking strategies.  Functions that return pointers to these methods
                   28700: ** are also created.
                   28701: */
                   28702: IOMETHODS(
                   28703:   posixIoFinder,            /* Finder function name */
                   28704:   posixIoMethods,           /* sqlite3_io_methods object name */
                   28705:   2,                        /* shared memory is enabled */
                   28706:   unixClose,                /* xClose method */
                   28707:   unixLock,                 /* xLock method */
                   28708:   unixUnlock,               /* xUnlock method */
                   28709:   unixCheckReservedLock     /* xCheckReservedLock method */
                   28710: )
                   28711: IOMETHODS(
                   28712:   nolockIoFinder,           /* Finder function name */
                   28713:   nolockIoMethods,          /* sqlite3_io_methods object name */
                   28714:   1,                        /* shared memory is disabled */
                   28715:   nolockClose,              /* xClose method */
                   28716:   nolockLock,               /* xLock method */
                   28717:   nolockUnlock,             /* xUnlock method */
                   28718:   nolockCheckReservedLock   /* xCheckReservedLock method */
                   28719: )
                   28720: IOMETHODS(
                   28721:   dotlockIoFinder,          /* Finder function name */
                   28722:   dotlockIoMethods,         /* sqlite3_io_methods object name */
                   28723:   1,                        /* shared memory is disabled */
                   28724:   dotlockClose,             /* xClose method */
                   28725:   dotlockLock,              /* xLock method */
                   28726:   dotlockUnlock,            /* xUnlock method */
                   28727:   dotlockCheckReservedLock  /* xCheckReservedLock method */
                   28728: )
                   28729: 
                   28730: #if SQLITE_ENABLE_LOCKING_STYLE && !OS_VXWORKS
                   28731: IOMETHODS(
                   28732:   flockIoFinder,            /* Finder function name */
                   28733:   flockIoMethods,           /* sqlite3_io_methods object name */
                   28734:   1,                        /* shared memory is disabled */
                   28735:   flockClose,               /* xClose method */
                   28736:   flockLock,                /* xLock method */
                   28737:   flockUnlock,              /* xUnlock method */
                   28738:   flockCheckReservedLock    /* xCheckReservedLock method */
                   28739: )
                   28740: #endif
                   28741: 
                   28742: #if OS_VXWORKS
                   28743: IOMETHODS(
                   28744:   semIoFinder,              /* Finder function name */
                   28745:   semIoMethods,             /* sqlite3_io_methods object name */
                   28746:   1,                        /* shared memory is disabled */
                   28747:   semClose,                 /* xClose method */
                   28748:   semLock,                  /* xLock method */
                   28749:   semUnlock,                /* xUnlock method */
                   28750:   semCheckReservedLock      /* xCheckReservedLock method */
                   28751: )
                   28752: #endif
                   28753: 
                   28754: #if defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE
                   28755: IOMETHODS(
                   28756:   afpIoFinder,              /* Finder function name */
                   28757:   afpIoMethods,             /* sqlite3_io_methods object name */
                   28758:   1,                        /* shared memory is disabled */
                   28759:   afpClose,                 /* xClose method */
                   28760:   afpLock,                  /* xLock method */
                   28761:   afpUnlock,                /* xUnlock method */
                   28762:   afpCheckReservedLock      /* xCheckReservedLock method */
                   28763: )
                   28764: #endif
                   28765: 
                   28766: /*
                   28767: ** The proxy locking method is a "super-method" in the sense that it
                   28768: ** opens secondary file descriptors for the conch and lock files and
                   28769: ** it uses proxy, dot-file, AFP, and flock() locking methods on those
                   28770: ** secondary files.  For this reason, the division that implements
                   28771: ** proxy locking is located much further down in the file.  But we need
                   28772: ** to go ahead and define the sqlite3_io_methods and finder function
                   28773: ** for proxy locking here.  So we forward declare the I/O methods.
                   28774: */
                   28775: #if defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE
                   28776: static int proxyClose(sqlite3_file*);
                   28777: static int proxyLock(sqlite3_file*, int);
                   28778: static int proxyUnlock(sqlite3_file*, int);
                   28779: static int proxyCheckReservedLock(sqlite3_file*, int*);
                   28780: IOMETHODS(
                   28781:   proxyIoFinder,            /* Finder function name */
                   28782:   proxyIoMethods,           /* sqlite3_io_methods object name */
                   28783:   1,                        /* shared memory is disabled */
                   28784:   proxyClose,               /* xClose method */
                   28785:   proxyLock,                /* xLock method */
                   28786:   proxyUnlock,              /* xUnlock method */
                   28787:   proxyCheckReservedLock    /* xCheckReservedLock method */
                   28788: )
                   28789: #endif
                   28790: 
                   28791: /* nfs lockd on OSX 10.3+ doesn't clear write locks when a read lock is set */
                   28792: #if defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE
                   28793: IOMETHODS(
                   28794:   nfsIoFinder,               /* Finder function name */
                   28795:   nfsIoMethods,              /* sqlite3_io_methods object name */
                   28796:   1,                         /* shared memory is disabled */
                   28797:   unixClose,                 /* xClose method */
                   28798:   unixLock,                  /* xLock method */
                   28799:   nfsUnlock,                 /* xUnlock method */
                   28800:   unixCheckReservedLock      /* xCheckReservedLock method */
                   28801: )
                   28802: #endif
                   28803: 
                   28804: #if defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE
                   28805: /* 
                   28806: ** This "finder" function attempts to determine the best locking strategy 
                   28807: ** for the database file "filePath".  It then returns the sqlite3_io_methods
                   28808: ** object that implements that strategy.
                   28809: **
                   28810: ** This is for MacOSX only.
                   28811: */
                   28812: static const sqlite3_io_methods *autolockIoFinderImpl(
                   28813:   const char *filePath,    /* name of the database file */
                   28814:   unixFile *pNew           /* open file object for the database file */
                   28815: ){
                   28816:   static const struct Mapping {
                   28817:     const char *zFilesystem;              /* Filesystem type name */
                   28818:     const sqlite3_io_methods *pMethods;   /* Appropriate locking method */
                   28819:   } aMap[] = {
                   28820:     { "hfs",    &posixIoMethods },
                   28821:     { "ufs",    &posixIoMethods },
                   28822:     { "afpfs",  &afpIoMethods },
                   28823:     { "smbfs",  &afpIoMethods },
                   28824:     { "webdav", &nolockIoMethods },
                   28825:     { 0, 0 }
                   28826:   };
                   28827:   int i;
                   28828:   struct statfs fsInfo;
                   28829:   struct flock lockInfo;
                   28830: 
                   28831:   if( !filePath ){
                   28832:     /* If filePath==NULL that means we are dealing with a transient file
                   28833:     ** that does not need to be locked. */
                   28834:     return &nolockIoMethods;
                   28835:   }
                   28836:   if( statfs(filePath, &fsInfo) != -1 ){
                   28837:     if( fsInfo.f_flags & MNT_RDONLY ){
                   28838:       return &nolockIoMethods;
                   28839:     }
                   28840:     for(i=0; aMap[i].zFilesystem; i++){
                   28841:       if( strcmp(fsInfo.f_fstypename, aMap[i].zFilesystem)==0 ){
                   28842:         return aMap[i].pMethods;
                   28843:       }
                   28844:     }
                   28845:   }
                   28846: 
                   28847:   /* Default case. Handles, amongst others, "nfs".
                   28848:   ** Test byte-range lock using fcntl(). If the call succeeds, 
                   28849:   ** assume that the file-system supports POSIX style locks. 
                   28850:   */
                   28851:   lockInfo.l_len = 1;
                   28852:   lockInfo.l_start = 0;
                   28853:   lockInfo.l_whence = SEEK_SET;
                   28854:   lockInfo.l_type = F_RDLCK;
                   28855:   if( osFcntl(pNew->h, F_GETLK, &lockInfo)!=-1 ) {
                   28856:     if( strcmp(fsInfo.f_fstypename, "nfs")==0 ){
                   28857:       return &nfsIoMethods;
                   28858:     } else {
                   28859:       return &posixIoMethods;
                   28860:     }
                   28861:   }else{
                   28862:     return &dotlockIoMethods;
                   28863:   }
                   28864: }
                   28865: static const sqlite3_io_methods 
                   28866:   *(*const autolockIoFinder)(const char*,unixFile*) = autolockIoFinderImpl;
                   28867: 
                   28868: #endif /* defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE */
                   28869: 
                   28870: #if OS_VXWORKS && SQLITE_ENABLE_LOCKING_STYLE
                   28871: /* 
                   28872: ** This "finder" function attempts to determine the best locking strategy 
                   28873: ** for the database file "filePath".  It then returns the sqlite3_io_methods
                   28874: ** object that implements that strategy.
                   28875: **
                   28876: ** This is for VXWorks only.
                   28877: */
                   28878: static const sqlite3_io_methods *autolockIoFinderImpl(
                   28879:   const char *filePath,    /* name of the database file */
                   28880:   unixFile *pNew           /* the open file object */
                   28881: ){
                   28882:   struct flock lockInfo;
                   28883: 
                   28884:   if( !filePath ){
                   28885:     /* If filePath==NULL that means we are dealing with a transient file
                   28886:     ** that does not need to be locked. */
                   28887:     return &nolockIoMethods;
                   28888:   }
                   28889: 
                   28890:   /* Test if fcntl() is supported and use POSIX style locks.
                   28891:   ** Otherwise fall back to the named semaphore method.
                   28892:   */
                   28893:   lockInfo.l_len = 1;
                   28894:   lockInfo.l_start = 0;
                   28895:   lockInfo.l_whence = SEEK_SET;
                   28896:   lockInfo.l_type = F_RDLCK;
                   28897:   if( osFcntl(pNew->h, F_GETLK, &lockInfo)!=-1 ) {
                   28898:     return &posixIoMethods;
                   28899:   }else{
                   28900:     return &semIoMethods;
                   28901:   }
                   28902: }
                   28903: static const sqlite3_io_methods 
                   28904:   *(*const autolockIoFinder)(const char*,unixFile*) = autolockIoFinderImpl;
                   28905: 
                   28906: #endif /* OS_VXWORKS && SQLITE_ENABLE_LOCKING_STYLE */
                   28907: 
                   28908: /*
                   28909: ** An abstract type for a pointer to a IO method finder function:
                   28910: */
                   28911: typedef const sqlite3_io_methods *(*finder_type)(const char*,unixFile*);
                   28912: 
                   28913: 
                   28914: /****************************************************************************
                   28915: **************************** sqlite3_vfs methods ****************************
                   28916: **
                   28917: ** This division contains the implementation of methods on the
                   28918: ** sqlite3_vfs object.
                   28919: */
                   28920: 
                   28921: /*
                   28922: ** Initialize the contents of the unixFile structure pointed to by pId.
                   28923: */
                   28924: static int fillInUnixFile(
                   28925:   sqlite3_vfs *pVfs,      /* Pointer to vfs object */
                   28926:   int h,                  /* Open file descriptor of file being opened */
                   28927:   int dirfd,              /* Directory file descriptor */
                   28928:   sqlite3_file *pId,      /* Write to the unixFile structure here */
                   28929:   const char *zFilename,  /* Name of the file being opened */
                   28930:   int noLock,             /* Omit locking if true */
                   28931:   int isDelete,           /* Delete on close if true */
                   28932:   int isReadOnly          /* True if the file is opened read-only */
                   28933: ){
                   28934:   const sqlite3_io_methods *pLockingStyle;
                   28935:   unixFile *pNew = (unixFile *)pId;
                   28936:   int rc = SQLITE_OK;
                   28937: 
                   28938:   assert( pNew->pInode==NULL );
                   28939: 
                   28940:   /* Parameter isDelete is only used on vxworks. Express this explicitly 
                   28941:   ** here to prevent compiler warnings about unused parameters.
                   28942:   */
                   28943:   UNUSED_PARAMETER(isDelete);
                   28944: 
                   28945:   /* Usually the path zFilename should not be a relative pathname. The
                   28946:   ** exception is when opening the proxy "conch" file in builds that
                   28947:   ** include the special Apple locking styles.
                   28948:   */
                   28949: #if defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE
                   28950:   assert( zFilename==0 || zFilename[0]=='/' 
                   28951:     || pVfs->pAppData==(void*)&autolockIoFinder );
                   28952: #else
                   28953:   assert( zFilename==0 || zFilename[0]=='/' );
                   28954: #endif
                   28955: 
                   28956:   OSTRACE(("OPEN    %-3d %s\n", h, zFilename));
                   28957:   pNew->h = h;
                   28958:   pNew->dirfd = dirfd;
                   28959:   pNew->zPath = zFilename;
                   28960:   if( memcmp(pVfs->zName,"unix-excl",10)==0 ){
                   28961:     pNew->ctrlFlags = UNIXFILE_EXCL;
                   28962:   }else{
                   28963:     pNew->ctrlFlags = 0;
                   28964:   }
                   28965:   if( isReadOnly ){
                   28966:     pNew->ctrlFlags |= UNIXFILE_RDONLY;
                   28967:   }
                   28968: 
                   28969: #if OS_VXWORKS
                   28970:   pNew->pId = vxworksFindFileId(zFilename);
                   28971:   if( pNew->pId==0 ){
                   28972:     noLock = 1;
                   28973:     rc = SQLITE_NOMEM;
                   28974:   }
                   28975: #endif
                   28976: 
                   28977:   if( noLock ){
                   28978:     pLockingStyle = &nolockIoMethods;
                   28979:   }else{
                   28980:     pLockingStyle = (**(finder_type*)pVfs->pAppData)(zFilename, pNew);
                   28981: #if SQLITE_ENABLE_LOCKING_STYLE
                   28982:     /* Cache zFilename in the locking context (AFP and dotlock override) for
                   28983:     ** proxyLock activation is possible (remote proxy is based on db name)
                   28984:     ** zFilename remains valid until file is closed, to support */
                   28985:     pNew->lockingContext = (void*)zFilename;
                   28986: #endif
                   28987:   }
                   28988: 
                   28989:   if( pLockingStyle == &posixIoMethods
                   28990: #if defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE
                   28991:     || pLockingStyle == &nfsIoMethods
                   28992: #endif
                   28993:   ){
                   28994:     unixEnterMutex();
                   28995:     rc = findInodeInfo(pNew, &pNew->pInode);
                   28996:     if( rc!=SQLITE_OK ){
1.1.1.3 ! misho    28997:       /* If an error occurred in findInodeInfo(), close the file descriptor
1.1       misho    28998:       ** immediately, before releasing the mutex. findInodeInfo() may fail
                   28999:       ** in two scenarios:
                   29000:       **
                   29001:       **   (a) A call to fstat() failed.
                   29002:       **   (b) A malloc failed.
                   29003:       **
                   29004:       ** Scenario (b) may only occur if the process is holding no other
                   29005:       ** file descriptors open on the same file. If there were other file
                   29006:       ** descriptors on this file, then no malloc would be required by
                   29007:       ** findInodeInfo(). If this is the case, it is quite safe to close
                   29008:       ** handle h - as it is guaranteed that no posix locks will be released
                   29009:       ** by doing so.
                   29010:       **
                   29011:       ** If scenario (a) caused the error then things are not so safe. The
                   29012:       ** implicit assumption here is that if fstat() fails, things are in
                   29013:       ** such bad shape that dropping a lock or two doesn't matter much.
                   29014:       */
                   29015:       robust_close(pNew, h, __LINE__);
                   29016:       h = -1;
                   29017:     }
                   29018:     unixLeaveMutex();
                   29019:   }
                   29020: 
                   29021: #if SQLITE_ENABLE_LOCKING_STYLE && defined(__APPLE__)
                   29022:   else if( pLockingStyle == &afpIoMethods ){
                   29023:     /* AFP locking uses the file path so it needs to be included in
                   29024:     ** the afpLockingContext.
                   29025:     */
                   29026:     afpLockingContext *pCtx;
                   29027:     pNew->lockingContext = pCtx = sqlite3_malloc( sizeof(*pCtx) );
                   29028:     if( pCtx==0 ){
                   29029:       rc = SQLITE_NOMEM;
                   29030:     }else{
                   29031:       /* NB: zFilename exists and remains valid until the file is closed
                   29032:       ** according to requirement F11141.  So we do not need to make a
                   29033:       ** copy of the filename. */
                   29034:       pCtx->dbPath = zFilename;
                   29035:       pCtx->reserved = 0;
                   29036:       srandomdev();
                   29037:       unixEnterMutex();
                   29038:       rc = findInodeInfo(pNew, &pNew->pInode);
                   29039:       if( rc!=SQLITE_OK ){
                   29040:         sqlite3_free(pNew->lockingContext);
                   29041:         robust_close(pNew, h, __LINE__);
                   29042:         h = -1;
                   29043:       }
                   29044:       unixLeaveMutex();        
                   29045:     }
                   29046:   }
                   29047: #endif
                   29048: 
                   29049:   else if( pLockingStyle == &dotlockIoMethods ){
                   29050:     /* Dotfile locking uses the file path so it needs to be included in
                   29051:     ** the dotlockLockingContext 
                   29052:     */
                   29053:     char *zLockFile;
                   29054:     int nFilename;
                   29055:     nFilename = (int)strlen(zFilename) + 6;
                   29056:     zLockFile = (char *)sqlite3_malloc(nFilename);
                   29057:     if( zLockFile==0 ){
                   29058:       rc = SQLITE_NOMEM;
                   29059:     }else{
                   29060:       sqlite3_snprintf(nFilename, zLockFile, "%s" DOTLOCK_SUFFIX, zFilename);
                   29061:     }
                   29062:     pNew->lockingContext = zLockFile;
                   29063:   }
                   29064: 
                   29065: #if OS_VXWORKS
                   29066:   else if( pLockingStyle == &semIoMethods ){
                   29067:     /* Named semaphore locking uses the file path so it needs to be
                   29068:     ** included in the semLockingContext
                   29069:     */
                   29070:     unixEnterMutex();
                   29071:     rc = findInodeInfo(pNew, &pNew->pInode);
                   29072:     if( (rc==SQLITE_OK) && (pNew->pInode->pSem==NULL) ){
                   29073:       char *zSemName = pNew->pInode->aSemName;
                   29074:       int n;
                   29075:       sqlite3_snprintf(MAX_PATHNAME, zSemName, "/%s.sem",
                   29076:                        pNew->pId->zCanonicalName);
                   29077:       for( n=1; zSemName[n]; n++ )
                   29078:         if( zSemName[n]=='/' ) zSemName[n] = '_';
                   29079:       pNew->pInode->pSem = sem_open(zSemName, O_CREAT, 0666, 1);
                   29080:       if( pNew->pInode->pSem == SEM_FAILED ){
                   29081:         rc = SQLITE_NOMEM;
                   29082:         pNew->pInode->aSemName[0] = '\0';
                   29083:       }
                   29084:     }
                   29085:     unixLeaveMutex();
                   29086:   }
                   29087: #endif
                   29088:   
                   29089:   pNew->lastErrno = 0;
                   29090: #if OS_VXWORKS
                   29091:   if( rc!=SQLITE_OK ){
                   29092:     if( h>=0 ) robust_close(pNew, h, __LINE__);
                   29093:     h = -1;
                   29094:     unlink(zFilename);
                   29095:     isDelete = 0;
                   29096:   }
                   29097:   pNew->isDelete = isDelete;
                   29098: #endif
                   29099:   if( rc!=SQLITE_OK ){
                   29100:     if( dirfd>=0 ) robust_close(pNew, dirfd, __LINE__);
                   29101:     if( h>=0 ) robust_close(pNew, h, __LINE__);
                   29102:   }else{
                   29103:     pNew->pMethod = pLockingStyle;
                   29104:     OpenCounter(+1);
                   29105:   }
                   29106:   return rc;
                   29107: }
                   29108: 
                   29109: /*
                   29110: ** Open a file descriptor to the directory containing file zFilename.
                   29111: ** If successful, *pFd is set to the opened file descriptor and
                   29112: ** SQLITE_OK is returned. If an error occurs, either SQLITE_NOMEM
                   29113: ** or SQLITE_CANTOPEN is returned and *pFd is set to an undefined
                   29114: ** value.
                   29115: **
                   29116: ** If SQLITE_OK is returned, the caller is responsible for closing
                   29117: ** the file descriptor *pFd using close().
                   29118: */
                   29119: static int openDirectory(const char *zFilename, int *pFd){
                   29120:   int ii;
                   29121:   int fd = -1;
                   29122:   char zDirname[MAX_PATHNAME+1];
                   29123: 
                   29124:   sqlite3_snprintf(MAX_PATHNAME, zDirname, "%s", zFilename);
                   29125:   for(ii=(int)strlen(zDirname); ii>1 && zDirname[ii]!='/'; ii--);
                   29126:   if( ii>0 ){
                   29127:     zDirname[ii] = '\0';
                   29128:     fd = robust_open(zDirname, O_RDONLY|O_BINARY, 0);
                   29129:     if( fd>=0 ){
                   29130: #ifdef FD_CLOEXEC
                   29131:       osFcntl(fd, F_SETFD, osFcntl(fd, F_GETFD, 0) | FD_CLOEXEC);
                   29132: #endif
                   29133:       OSTRACE(("OPENDIR %-3d %s\n", fd, zDirname));
                   29134:     }
                   29135:   }
                   29136:   *pFd = fd;
                   29137:   return (fd>=0?SQLITE_OK:unixLogError(SQLITE_CANTOPEN_BKPT, "open", zDirname));
                   29138: }
                   29139: 
                   29140: /*
                   29141: ** Return the name of a directory in which to put temporary files.
                   29142: ** If no suitable temporary file directory can be found, return NULL.
                   29143: */
                   29144: static const char *unixTempFileDir(void){
                   29145:   static const char *azDirs[] = {
                   29146:      0,
                   29147:      0,
                   29148:      "/var/tmp",
                   29149:      "/usr/tmp",
                   29150:      "/tmp",
                   29151:      0        /* List terminator */
                   29152:   };
                   29153:   unsigned int i;
                   29154:   struct stat buf;
                   29155:   const char *zDir = 0;
                   29156: 
                   29157:   azDirs[0] = sqlite3_temp_directory;
                   29158:   if( !azDirs[1] ) azDirs[1] = getenv("TMPDIR");
                   29159:   for(i=0; i<sizeof(azDirs)/sizeof(azDirs[0]); zDir=azDirs[i++]){
                   29160:     if( zDir==0 ) continue;
                   29161:     if( osStat(zDir, &buf) ) continue;
                   29162:     if( !S_ISDIR(buf.st_mode) ) continue;
                   29163:     if( osAccess(zDir, 07) ) continue;
                   29164:     break;
                   29165:   }
                   29166:   return zDir;
                   29167: }
                   29168: 
                   29169: /*
                   29170: ** Create a temporary file name in zBuf.  zBuf must be allocated
                   29171: ** by the calling process and must be big enough to hold at least
                   29172: ** pVfs->mxPathname bytes.
                   29173: */
                   29174: static int unixGetTempname(int nBuf, char *zBuf){
                   29175:   static const unsigned char zChars[] =
                   29176:     "abcdefghijklmnopqrstuvwxyz"
                   29177:     "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
                   29178:     "0123456789";
                   29179:   unsigned int i, j;
                   29180:   const char *zDir;
                   29181: 
                   29182:   /* It's odd to simulate an io-error here, but really this is just
                   29183:   ** using the io-error infrastructure to test that SQLite handles this
                   29184:   ** function failing. 
                   29185:   */
                   29186:   SimulateIOError( return SQLITE_IOERR );
                   29187: 
                   29188:   zDir = unixTempFileDir();
                   29189:   if( zDir==0 ) zDir = ".";
                   29190: 
                   29191:   /* Check that the output buffer is large enough for the temporary file 
                   29192:   ** name. If it is not, return SQLITE_ERROR.
                   29193:   */
                   29194:   if( (strlen(zDir) + strlen(SQLITE_TEMP_FILE_PREFIX) + 17) >= (size_t)nBuf ){
                   29195:     return SQLITE_ERROR;
                   29196:   }
                   29197: 
                   29198:   do{
                   29199:     sqlite3_snprintf(nBuf-17, zBuf, "%s/"SQLITE_TEMP_FILE_PREFIX, zDir);
                   29200:     j = (int)strlen(zBuf);
                   29201:     sqlite3_randomness(15, &zBuf[j]);
                   29202:     for(i=0; i<15; i++, j++){
                   29203:       zBuf[j] = (char)zChars[ ((unsigned char)zBuf[j])%(sizeof(zChars)-1) ];
                   29204:     }
                   29205:     zBuf[j] = 0;
                   29206:   }while( osAccess(zBuf,0)==0 );
                   29207:   return SQLITE_OK;
                   29208: }
                   29209: 
                   29210: #if SQLITE_ENABLE_LOCKING_STYLE && defined(__APPLE__)
                   29211: /*
                   29212: ** Routine to transform a unixFile into a proxy-locking unixFile.
                   29213: ** Implementation in the proxy-lock division, but used by unixOpen()
                   29214: ** if SQLITE_PREFER_PROXY_LOCKING is defined.
                   29215: */
                   29216: static int proxyTransformUnixFile(unixFile*, const char*);
                   29217: #endif
                   29218: 
                   29219: /*
                   29220: ** Search for an unused file descriptor that was opened on the database 
                   29221: ** file (not a journal or master-journal file) identified by pathname
                   29222: ** zPath with SQLITE_OPEN_XXX flags matching those passed as the second
                   29223: ** argument to this function.
                   29224: **
                   29225: ** Such a file descriptor may exist if a database connection was closed
                   29226: ** but the associated file descriptor could not be closed because some
                   29227: ** other file descriptor open on the same file is holding a file-lock.
                   29228: ** Refer to comments in the unixClose() function and the lengthy comment
                   29229: ** describing "Posix Advisory Locking" at the start of this file for 
                   29230: ** further details. Also, ticket #4018.
                   29231: **
                   29232: ** If a suitable file descriptor is found, then it is returned. If no
                   29233: ** such file descriptor is located, -1 is returned.
                   29234: */
                   29235: static UnixUnusedFd *findReusableFd(const char *zPath, int flags){
                   29236:   UnixUnusedFd *pUnused = 0;
                   29237: 
                   29238:   /* Do not search for an unused file descriptor on vxworks. Not because
                   29239:   ** vxworks would not benefit from the change (it might, we're not sure),
                   29240:   ** but because no way to test it is currently available. It is better 
                   29241:   ** not to risk breaking vxworks support for the sake of such an obscure 
                   29242:   ** feature.  */
                   29243: #if !OS_VXWORKS
                   29244:   struct stat sStat;                   /* Results of stat() call */
                   29245: 
                   29246:   /* A stat() call may fail for various reasons. If this happens, it is
                   29247:   ** almost certain that an open() call on the same path will also fail.
                   29248:   ** For this reason, if an error occurs in the stat() call here, it is
                   29249:   ** ignored and -1 is returned. The caller will try to open a new file
                   29250:   ** descriptor on the same path, fail, and return an error to SQLite.
                   29251:   **
                   29252:   ** Even if a subsequent open() call does succeed, the consequences of
                   29253:   ** not searching for a resusable file descriptor are not dire.  */
                   29254:   if( 0==stat(zPath, &sStat) ){
                   29255:     unixInodeInfo *pInode;
                   29256: 
                   29257:     unixEnterMutex();
                   29258:     pInode = inodeList;
                   29259:     while( pInode && (pInode->fileId.dev!=sStat.st_dev
                   29260:                      || pInode->fileId.ino!=sStat.st_ino) ){
                   29261:        pInode = pInode->pNext;
                   29262:     }
                   29263:     if( pInode ){
                   29264:       UnixUnusedFd **pp;
                   29265:       for(pp=&pInode->pUnused; *pp && (*pp)->flags!=flags; pp=&((*pp)->pNext));
                   29266:       pUnused = *pp;
                   29267:       if( pUnused ){
                   29268:         *pp = pUnused->pNext;
                   29269:       }
                   29270:     }
                   29271:     unixLeaveMutex();
                   29272:   }
                   29273: #endif    /* if !OS_VXWORKS */
                   29274:   return pUnused;
                   29275: }
                   29276: 
                   29277: /*
                   29278: ** This function is called by unixOpen() to determine the unix permissions
                   29279: ** to create new files with. If no error occurs, then SQLITE_OK is returned
                   29280: ** and a value suitable for passing as the third argument to open(2) is
                   29281: ** written to *pMode. If an IO error occurs, an SQLite error code is 
                   29282: ** returned and the value of *pMode is not modified.
                   29283: **
                   29284: ** If the file being opened is a temporary file, it is always created with
                   29285: ** the octal permissions 0600 (read/writable by owner only). If the file
                   29286: ** is a database or master journal file, it is created with the permissions 
                   29287: ** mask SQLITE_DEFAULT_FILE_PERMISSIONS.
                   29288: **
                   29289: ** Finally, if the file being opened is a WAL or regular journal file, then 
                   29290: ** this function queries the file-system for the permissions on the 
                   29291: ** corresponding database file and sets *pMode to this value. Whenever 
                   29292: ** possible, WAL and journal files are created using the same permissions 
                   29293: ** as the associated database file.
                   29294: **
                   29295: ** If the SQLITE_ENABLE_8_3_NAMES option is enabled, then the
                   29296: ** original filename is unavailable.  But 8_3_NAMES is only used for
                   29297: ** FAT filesystems and permissions do not matter there, so just use
                   29298: ** the default permissions.
                   29299: */
                   29300: static int findCreateFileMode(
                   29301:   const char *zPath,              /* Path of file (possibly) being created */
                   29302:   int flags,                      /* Flags passed as 4th argument to xOpen() */
                   29303:   mode_t *pMode                   /* OUT: Permissions to open file with */
                   29304: ){
                   29305:   int rc = SQLITE_OK;             /* Return Code */
                   29306:   *pMode = SQLITE_DEFAULT_FILE_PERMISSIONS;
                   29307:   if( flags & (SQLITE_OPEN_WAL|SQLITE_OPEN_MAIN_JOURNAL) ){
                   29308:     char zDb[MAX_PATHNAME+1];     /* Database file path */
                   29309:     int nDb;                      /* Number of valid bytes in zDb */
                   29310:     struct stat sStat;            /* Output of stat() on database file */
                   29311: 
                   29312:     /* zPath is a path to a WAL or journal file. The following block derives
                   29313:     ** the path to the associated database file from zPath. This block handles
                   29314:     ** the following naming conventions:
                   29315:     **
                   29316:     **   "<path to db>-journal"
                   29317:     **   "<path to db>-wal"
                   29318:     **   "<path to db>-journalNN"
                   29319:     **   "<path to db>-walNN"
                   29320:     **
                   29321:     ** where NN is a 4 digit decimal number. The NN naming schemes are 
                   29322:     ** used by the test_multiplex.c module.
                   29323:     */
                   29324:     nDb = sqlite3Strlen30(zPath) - 1; 
                   29325:     while( nDb>0 && zPath[nDb]!='-' ) nDb--;
                   29326:     if( nDb==0 ) return SQLITE_OK;
                   29327:     memcpy(zDb, zPath, nDb);
                   29328:     zDb[nDb] = '\0';
                   29329: 
                   29330:     if( 0==stat(zDb, &sStat) ){
                   29331:       *pMode = sStat.st_mode & 0777;
                   29332:     }else{
                   29333:       rc = SQLITE_IOERR_FSTAT;
                   29334:     }
                   29335:   }else if( flags & SQLITE_OPEN_DELETEONCLOSE ){
                   29336:     *pMode = 0600;
                   29337:   }
                   29338:   return rc;
                   29339: }
                   29340: 
                   29341: /*
                   29342: ** Open the file zPath.
                   29343: ** 
                   29344: ** Previously, the SQLite OS layer used three functions in place of this
                   29345: ** one:
                   29346: **
                   29347: **     sqlite3OsOpenReadWrite();
                   29348: **     sqlite3OsOpenReadOnly();
                   29349: **     sqlite3OsOpenExclusive();
                   29350: **
                   29351: ** These calls correspond to the following combinations of flags:
                   29352: **
                   29353: **     ReadWrite() ->     (READWRITE | CREATE)
                   29354: **     ReadOnly()  ->     (READONLY) 
                   29355: **     OpenExclusive() -> (READWRITE | CREATE | EXCLUSIVE)
                   29356: **
                   29357: ** The old OpenExclusive() accepted a boolean argument - "delFlag". If
                   29358: ** true, the file was configured to be automatically deleted when the
                   29359: ** file handle closed. To achieve the same effect using this new 
                   29360: ** interface, add the DELETEONCLOSE flag to those specified above for 
                   29361: ** OpenExclusive().
                   29362: */
                   29363: static int unixOpen(
                   29364:   sqlite3_vfs *pVfs,           /* The VFS for which this is the xOpen method */
                   29365:   const char *zPath,           /* Pathname of file to be opened */
                   29366:   sqlite3_file *pFile,         /* The file descriptor to be filled in */
                   29367:   int flags,                   /* Input flags to control the opening */
                   29368:   int *pOutFlags               /* Output flags returned to SQLite core */
                   29369: ){
                   29370:   unixFile *p = (unixFile *)pFile;
                   29371:   int fd = -1;                   /* File descriptor returned by open() */
                   29372:   int dirfd = -1;                /* Directory file descriptor */
                   29373:   int openFlags = 0;             /* Flags to pass to open() */
                   29374:   int eType = flags&0xFFFFFF00;  /* Type of file to open */
                   29375:   int noLock;                    /* True to omit locking primitives */
                   29376:   int rc = SQLITE_OK;            /* Function Return Code */
                   29377: 
                   29378:   int isExclusive  = (flags & SQLITE_OPEN_EXCLUSIVE);
                   29379:   int isDelete     = (flags & SQLITE_OPEN_DELETEONCLOSE);
                   29380:   int isCreate     = (flags & SQLITE_OPEN_CREATE);
                   29381:   int isReadonly   = (flags & SQLITE_OPEN_READONLY);
                   29382:   int isReadWrite  = (flags & SQLITE_OPEN_READWRITE);
                   29383: #if SQLITE_ENABLE_LOCKING_STYLE
                   29384:   int isAutoProxy  = (flags & SQLITE_OPEN_AUTOPROXY);
                   29385: #endif
                   29386: 
                   29387:   /* If creating a master or main-file journal, this function will open
                   29388:   ** a file-descriptor on the directory too. The first time unixSync()
                   29389:   ** is called the directory file descriptor will be fsync()ed and close()d.
                   29390:   */
                   29391:   int isOpenDirectory = (isCreate && (
                   29392:         eType==SQLITE_OPEN_MASTER_JOURNAL 
                   29393:      || eType==SQLITE_OPEN_MAIN_JOURNAL 
                   29394:      || eType==SQLITE_OPEN_WAL
                   29395:   ));
                   29396: 
                   29397:   /* If argument zPath is a NULL pointer, this function is required to open
                   29398:   ** a temporary file. Use this buffer to store the file name in.
                   29399:   */
                   29400:   char zTmpname[MAX_PATHNAME+1];
                   29401:   const char *zName = zPath;
                   29402: 
                   29403:   /* Check the following statements are true: 
                   29404:   **
                   29405:   **   (a) Exactly one of the READWRITE and READONLY flags must be set, and 
                   29406:   **   (b) if CREATE is set, then READWRITE must also be set, and
                   29407:   **   (c) if EXCLUSIVE is set, then CREATE must also be set.
                   29408:   **   (d) if DELETEONCLOSE is set, then CREATE must also be set.
                   29409:   */
                   29410:   assert((isReadonly==0 || isReadWrite==0) && (isReadWrite || isReadonly));
                   29411:   assert(isCreate==0 || isReadWrite);
                   29412:   assert(isExclusive==0 || isCreate);
                   29413:   assert(isDelete==0 || isCreate);
                   29414: 
                   29415:   /* The main DB, main journal, WAL file and master journal are never 
                   29416:   ** automatically deleted. Nor are they ever temporary files.  */
                   29417:   assert( (!isDelete && zName) || eType!=SQLITE_OPEN_MAIN_DB );
                   29418:   assert( (!isDelete && zName) || eType!=SQLITE_OPEN_MAIN_JOURNAL );
                   29419:   assert( (!isDelete && zName) || eType!=SQLITE_OPEN_MASTER_JOURNAL );
                   29420:   assert( (!isDelete && zName) || eType!=SQLITE_OPEN_WAL );
                   29421: 
                   29422:   /* Assert that the upper layer has set one of the "file-type" flags. */
                   29423:   assert( eType==SQLITE_OPEN_MAIN_DB      || eType==SQLITE_OPEN_TEMP_DB 
                   29424:        || eType==SQLITE_OPEN_MAIN_JOURNAL || eType==SQLITE_OPEN_TEMP_JOURNAL 
                   29425:        || eType==SQLITE_OPEN_SUBJOURNAL   || eType==SQLITE_OPEN_MASTER_JOURNAL 
                   29426:        || eType==SQLITE_OPEN_TRANSIENT_DB || eType==SQLITE_OPEN_WAL
                   29427:   );
                   29428: 
                   29429:   memset(p, 0, sizeof(unixFile));
                   29430: 
                   29431:   if( eType==SQLITE_OPEN_MAIN_DB ){
                   29432:     UnixUnusedFd *pUnused;
                   29433:     pUnused = findReusableFd(zName, flags);
                   29434:     if( pUnused ){
                   29435:       fd = pUnused->fd;
                   29436:     }else{
                   29437:       pUnused = sqlite3_malloc(sizeof(*pUnused));
                   29438:       if( !pUnused ){
                   29439:         return SQLITE_NOMEM;
                   29440:       }
                   29441:     }
                   29442:     p->pUnused = pUnused;
                   29443:   }else if( !zName ){
                   29444:     /* If zName is NULL, the upper layer is requesting a temp file. */
                   29445:     assert(isDelete && !isOpenDirectory);
                   29446:     rc = unixGetTempname(MAX_PATHNAME+1, zTmpname);
                   29447:     if( rc!=SQLITE_OK ){
                   29448:       return rc;
                   29449:     }
                   29450:     zName = zTmpname;
                   29451:   }
                   29452: 
                   29453:   /* Determine the value of the flags parameter passed to POSIX function
                   29454:   ** open(). These must be calculated even if open() is not called, as
                   29455:   ** they may be stored as part of the file handle and used by the 
                   29456:   ** 'conch file' locking functions later on.  */
                   29457:   if( isReadonly )  openFlags |= O_RDONLY;
                   29458:   if( isReadWrite ) openFlags |= O_RDWR;
                   29459:   if( isCreate )    openFlags |= O_CREAT;
                   29460:   if( isExclusive ) openFlags |= (O_EXCL|O_NOFOLLOW);
                   29461:   openFlags |= (O_LARGEFILE|O_BINARY);
                   29462: 
                   29463:   if( fd<0 ){
                   29464:     mode_t openMode;              /* Permissions to create file with */
                   29465:     rc = findCreateFileMode(zName, flags, &openMode);
                   29466:     if( rc!=SQLITE_OK ){
                   29467:       assert( !p->pUnused );
                   29468:       assert( eType==SQLITE_OPEN_WAL || eType==SQLITE_OPEN_MAIN_JOURNAL );
                   29469:       return rc;
                   29470:     }
                   29471:     fd = robust_open(zName, openFlags, openMode);
                   29472:     OSTRACE(("OPENX   %-3d %s 0%o\n", fd, zName, openFlags));
                   29473:     if( fd<0 && errno!=EISDIR && isReadWrite && !isExclusive ){
                   29474:       /* Failed to open the file for read/write access. Try read-only. */
                   29475:       flags &= ~(SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE);
                   29476:       openFlags &= ~(O_RDWR|O_CREAT);
                   29477:       flags |= SQLITE_OPEN_READONLY;
                   29478:       openFlags |= O_RDONLY;
                   29479:       isReadonly = 1;
                   29480:       fd = robust_open(zName, openFlags, openMode);
                   29481:     }
                   29482:     if( fd<0 ){
                   29483:       rc = unixLogError(SQLITE_CANTOPEN_BKPT, "open", zName);
                   29484:       goto open_finished;
                   29485:     }
                   29486:   }
                   29487:   assert( fd>=0 );
                   29488:   if( pOutFlags ){
                   29489:     *pOutFlags = flags;
                   29490:   }
                   29491: 
                   29492:   if( p->pUnused ){
                   29493:     p->pUnused->fd = fd;
                   29494:     p->pUnused->flags = flags;
                   29495:   }
                   29496: 
                   29497:   if( isDelete ){
                   29498: #if OS_VXWORKS
                   29499:     zPath = zName;
                   29500: #else
                   29501:     unlink(zName);
                   29502: #endif
                   29503:   }
                   29504: #if SQLITE_ENABLE_LOCKING_STYLE
                   29505:   else{
                   29506:     p->openFlags = openFlags;
                   29507:   }
                   29508: #endif
                   29509: 
                   29510:   if( isOpenDirectory ){
                   29511:     rc = openDirectory(zPath, &dirfd);
                   29512:     if( rc!=SQLITE_OK ){
                   29513:       /* It is safe to close fd at this point, because it is guaranteed not
                   29514:       ** to be open on a database file. If it were open on a database file,
                   29515:       ** it would not be safe to close as this would release any locks held
                   29516:       ** on the file by this process.  */
                   29517:       assert( eType!=SQLITE_OPEN_MAIN_DB );
                   29518:       robust_close(p, fd, __LINE__);
                   29519:       goto open_finished;
                   29520:     }
                   29521:   }
                   29522: 
                   29523: #ifdef FD_CLOEXEC
                   29524:   osFcntl(fd, F_SETFD, osFcntl(fd, F_GETFD, 0) | FD_CLOEXEC);
                   29525: #endif
                   29526: 
                   29527:   noLock = eType!=SQLITE_OPEN_MAIN_DB;
                   29528: 
                   29529:   
                   29530: #if defined(__APPLE__) || SQLITE_ENABLE_LOCKING_STYLE
                   29531:   struct statfs fsInfo;
                   29532:   if( fstatfs(fd, &fsInfo) == -1 ){
                   29533:     ((unixFile*)pFile)->lastErrno = errno;
                   29534:     if( dirfd>=0 ) robust_close(p, dirfd, __LINE__);
                   29535:     robust_close(p, fd, __LINE__);
                   29536:     return SQLITE_IOERR_ACCESS;
                   29537:   }
                   29538:   if (0 == strncmp("msdos", fsInfo.f_fstypename, 5)) {
                   29539:     ((unixFile*)pFile)->fsFlags |= SQLITE_FSFLAGS_IS_MSDOS;
                   29540:   }
                   29541: #endif
                   29542:   
                   29543: #if SQLITE_ENABLE_LOCKING_STYLE
                   29544: #if SQLITE_PREFER_PROXY_LOCKING
                   29545:   isAutoProxy = 1;
                   29546: #endif
                   29547:   if( isAutoProxy && (zPath!=NULL) && (!noLock) && pVfs->xOpen ){
                   29548:     char *envforce = getenv("SQLITE_FORCE_PROXY_LOCKING");
                   29549:     int useProxy = 0;
                   29550: 
                   29551:     /* SQLITE_FORCE_PROXY_LOCKING==1 means force always use proxy, 0 means 
                   29552:     ** never use proxy, NULL means use proxy for non-local files only.  */
                   29553:     if( envforce!=NULL ){
                   29554:       useProxy = atoi(envforce)>0;
                   29555:     }else{
                   29556:       struct statfs fsInfo;
                   29557:       if( statfs(zPath, &fsInfo) == -1 ){
                   29558:         /* In theory, the close(fd) call is sub-optimal. If the file opened
                   29559:         ** with fd is a database file, and there are other connections open
                   29560:         ** on that file that are currently holding advisory locks on it,
                   29561:         ** then the call to close() will cancel those locks. In practice,
                   29562:         ** we're assuming that statfs() doesn't fail very often. At least
                   29563:         ** not while other file descriptors opened by the same process on
                   29564:         ** the same file are working.  */
                   29565:         p->lastErrno = errno;
                   29566:         if( dirfd>=0 ){
                   29567:           robust_close(p, dirfd, __LINE__);
                   29568:         }
                   29569:         robust_close(p, fd, __LINE__);
                   29570:         rc = SQLITE_IOERR_ACCESS;
                   29571:         goto open_finished;
                   29572:       }
                   29573:       useProxy = !(fsInfo.f_flags&MNT_LOCAL);
                   29574:     }
                   29575:     if( useProxy ){
                   29576:       rc = fillInUnixFile(pVfs, fd, dirfd, pFile, zPath, noLock,
                   29577:                           isDelete, isReadonly);
                   29578:       if( rc==SQLITE_OK ){
                   29579:         rc = proxyTransformUnixFile((unixFile*)pFile, ":auto:");
                   29580:         if( rc!=SQLITE_OK ){
                   29581:           /* Use unixClose to clean up the resources added in fillInUnixFile 
                   29582:           ** and clear all the structure's references.  Specifically, 
                   29583:           ** pFile->pMethods will be NULL so sqlite3OsClose will be a no-op 
                   29584:           */
                   29585:           unixClose(pFile);
                   29586:           return rc;
                   29587:         }
                   29588:       }
                   29589:       goto open_finished;
                   29590:     }
                   29591:   }
                   29592: #endif
                   29593:   
                   29594:   rc = fillInUnixFile(pVfs, fd, dirfd, pFile, zPath, noLock,
                   29595:                       isDelete, isReadonly);
                   29596: open_finished:
                   29597:   if( rc!=SQLITE_OK ){
                   29598:     sqlite3_free(p->pUnused);
                   29599:   }
                   29600:   return rc;
                   29601: }
                   29602: 
                   29603: 
                   29604: /*
                   29605: ** Delete the file at zPath. If the dirSync argument is true, fsync()
                   29606: ** the directory after deleting the file.
                   29607: */
                   29608: static int unixDelete(
                   29609:   sqlite3_vfs *NotUsed,     /* VFS containing this as the xDelete method */
                   29610:   const char *zPath,        /* Name of file to be deleted */
                   29611:   int dirSync               /* If true, fsync() directory after deleting file */
                   29612: ){
                   29613:   int rc = SQLITE_OK;
                   29614:   UNUSED_PARAMETER(NotUsed);
                   29615:   SimulateIOError(return SQLITE_IOERR_DELETE);
                   29616:   if( unlink(zPath)==(-1) && errno!=ENOENT ){
                   29617:     return unixLogError(SQLITE_IOERR_DELETE, "unlink", zPath);
                   29618:   }
                   29619: #ifndef SQLITE_DISABLE_DIRSYNC
                   29620:   if( dirSync ){
                   29621:     int fd;
                   29622:     rc = openDirectory(zPath, &fd);
                   29623:     if( rc==SQLITE_OK ){
                   29624: #if OS_VXWORKS
                   29625:       if( fsync(fd)==-1 )
                   29626: #else
                   29627:       if( fsync(fd) )
                   29628: #endif
                   29629:       {
                   29630:         rc = unixLogError(SQLITE_IOERR_DIR_FSYNC, "fsync", zPath);
                   29631:       }
                   29632:       robust_close(0, fd, __LINE__);
                   29633:     }
                   29634:   }
                   29635: #endif
                   29636:   return rc;
                   29637: }
                   29638: 
                   29639: /*
1.1.1.3 ! misho    29640: ** Test the existence of or access permissions of file zPath. The
1.1       misho    29641: ** test performed depends on the value of flags:
                   29642: **
                   29643: **     SQLITE_ACCESS_EXISTS: Return 1 if the file exists
                   29644: **     SQLITE_ACCESS_READWRITE: Return 1 if the file is read and writable.
                   29645: **     SQLITE_ACCESS_READONLY: Return 1 if the file is readable.
                   29646: **
                   29647: ** Otherwise return 0.
                   29648: */
                   29649: static int unixAccess(
                   29650:   sqlite3_vfs *NotUsed,   /* The VFS containing this xAccess method */
                   29651:   const char *zPath,      /* Path of the file to examine */
                   29652:   int flags,              /* What do we want to learn about the zPath file? */
                   29653:   int *pResOut            /* Write result boolean here */
                   29654: ){
                   29655:   int amode = 0;
                   29656:   UNUSED_PARAMETER(NotUsed);
                   29657:   SimulateIOError( return SQLITE_IOERR_ACCESS; );
                   29658:   switch( flags ){
                   29659:     case SQLITE_ACCESS_EXISTS:
                   29660:       amode = F_OK;
                   29661:       break;
                   29662:     case SQLITE_ACCESS_READWRITE:
                   29663:       amode = W_OK|R_OK;
                   29664:       break;
                   29665:     case SQLITE_ACCESS_READ:
                   29666:       amode = R_OK;
                   29667:       break;
                   29668: 
                   29669:     default:
                   29670:       assert(!"Invalid flags argument");
                   29671:   }
                   29672:   *pResOut = (osAccess(zPath, amode)==0);
                   29673:   if( flags==SQLITE_ACCESS_EXISTS && *pResOut ){
                   29674:     struct stat buf;
                   29675:     if( 0==stat(zPath, &buf) && buf.st_size==0 ){
                   29676:       *pResOut = 0;
                   29677:     }
                   29678:   }
                   29679:   return SQLITE_OK;
                   29680: }
                   29681: 
                   29682: 
                   29683: /*
                   29684: ** Turn a relative pathname into a full pathname. The relative path
                   29685: ** is stored as a nul-terminated string in the buffer pointed to by
                   29686: ** zPath. 
                   29687: **
                   29688: ** zOut points to a buffer of at least sqlite3_vfs.mxPathname bytes 
                   29689: ** (in this case, MAX_PATHNAME bytes). The full-path is written to
                   29690: ** this buffer before returning.
                   29691: */
                   29692: static int unixFullPathname(
                   29693:   sqlite3_vfs *pVfs,            /* Pointer to vfs object */
                   29694:   const char *zPath,            /* Possibly relative input path */
                   29695:   int nOut,                     /* Size of output buffer in bytes */
                   29696:   char *zOut                    /* Output buffer */
                   29697: ){
                   29698: 
                   29699:   /* It's odd to simulate an io-error here, but really this is just
                   29700:   ** using the io-error infrastructure to test that SQLite handles this
                   29701:   ** function failing. This function could fail if, for example, the
                   29702:   ** current working directory has been unlinked.
                   29703:   */
                   29704:   SimulateIOError( return SQLITE_ERROR );
                   29705: 
                   29706:   assert( pVfs->mxPathname==MAX_PATHNAME );
                   29707:   UNUSED_PARAMETER(pVfs);
                   29708: 
                   29709:   zOut[nOut-1] = '\0';
                   29710:   if( zPath[0]=='/' ){
                   29711:     sqlite3_snprintf(nOut, zOut, "%s", zPath);
                   29712:   }else{
                   29713:     int nCwd;
                   29714:     if( osGetcwd(zOut, nOut-1)==0 ){
                   29715:       return unixLogError(SQLITE_CANTOPEN_BKPT, "getcwd", zPath);
                   29716:     }
                   29717:     nCwd = (int)strlen(zOut);
                   29718:     sqlite3_snprintf(nOut-nCwd, &zOut[nCwd], "/%s", zPath);
                   29719:   }
                   29720:   return SQLITE_OK;
                   29721: }
                   29722: 
                   29723: 
                   29724: #ifndef SQLITE_OMIT_LOAD_EXTENSION
                   29725: /*
                   29726: ** Interfaces for opening a shared library, finding entry points
                   29727: ** within the shared library, and closing the shared library.
                   29728: */
                   29729: #include <dlfcn.h>
                   29730: static void *unixDlOpen(sqlite3_vfs *NotUsed, const char *zFilename){
                   29731:   UNUSED_PARAMETER(NotUsed);
                   29732:   return dlopen(zFilename, RTLD_NOW | RTLD_GLOBAL);
                   29733: }
                   29734: 
                   29735: /*
                   29736: ** SQLite calls this function immediately after a call to unixDlSym() or
                   29737: ** unixDlOpen() fails (returns a null pointer). If a more detailed error
                   29738: ** message is available, it is written to zBufOut. If no error message
                   29739: ** is available, zBufOut is left unmodified and SQLite uses a default
                   29740: ** error message.
                   29741: */
                   29742: static void unixDlError(sqlite3_vfs *NotUsed, int nBuf, char *zBufOut){
                   29743:   const char *zErr;
                   29744:   UNUSED_PARAMETER(NotUsed);
                   29745:   unixEnterMutex();
                   29746:   zErr = dlerror();
                   29747:   if( zErr ){
                   29748:     sqlite3_snprintf(nBuf, zBufOut, "%s", zErr);
                   29749:   }
                   29750:   unixLeaveMutex();
                   29751: }
                   29752: static void (*unixDlSym(sqlite3_vfs *NotUsed, void *p, const char*zSym))(void){
                   29753:   /* 
                   29754:   ** GCC with -pedantic-errors says that C90 does not allow a void* to be
                   29755:   ** cast into a pointer to a function.  And yet the library dlsym() routine
                   29756:   ** returns a void* which is really a pointer to a function.  So how do we
                   29757:   ** use dlsym() with -pedantic-errors?
                   29758:   **
                   29759:   ** Variable x below is defined to be a pointer to a function taking
                   29760:   ** parameters void* and const char* and returning a pointer to a function.
                   29761:   ** We initialize x by assigning it a pointer to the dlsym() function.
                   29762:   ** (That assignment requires a cast.)  Then we call the function that
                   29763:   ** x points to.  
                   29764:   **
                   29765:   ** This work-around is unlikely to work correctly on any system where
                   29766:   ** you really cannot cast a function pointer into void*.  But then, on the
                   29767:   ** other hand, dlsym() will not work on such a system either, so we have
                   29768:   ** not really lost anything.
                   29769:   */
                   29770:   void (*(*x)(void*,const char*))(void);
                   29771:   UNUSED_PARAMETER(NotUsed);
                   29772:   x = (void(*(*)(void*,const char*))(void))dlsym;
                   29773:   return (*x)(p, zSym);
                   29774: }
                   29775: static void unixDlClose(sqlite3_vfs *NotUsed, void *pHandle){
                   29776:   UNUSED_PARAMETER(NotUsed);
                   29777:   dlclose(pHandle);
                   29778: }
                   29779: #else /* if SQLITE_OMIT_LOAD_EXTENSION is defined: */
                   29780:   #define unixDlOpen  0
                   29781:   #define unixDlError 0
                   29782:   #define unixDlSym   0
                   29783:   #define unixDlClose 0
                   29784: #endif
                   29785: 
                   29786: /*
                   29787: ** Write nBuf bytes of random data to the supplied buffer zBuf.
                   29788: */
                   29789: static int unixRandomness(sqlite3_vfs *NotUsed, int nBuf, char *zBuf){
                   29790:   UNUSED_PARAMETER(NotUsed);
                   29791:   assert((size_t)nBuf>=(sizeof(time_t)+sizeof(int)));
                   29792: 
                   29793:   /* We have to initialize zBuf to prevent valgrind from reporting
                   29794:   ** errors.  The reports issued by valgrind are incorrect - we would
                   29795:   ** prefer that the randomness be increased by making use of the
                   29796:   ** uninitialized space in zBuf - but valgrind errors tend to worry
                   29797:   ** some users.  Rather than argue, it seems easier just to initialize
                   29798:   ** the whole array and silence valgrind, even if that means less randomness
                   29799:   ** in the random seed.
                   29800:   **
                   29801:   ** When testing, initializing zBuf[] to zero is all we do.  That means
                   29802:   ** that we always use the same random number sequence.  This makes the
                   29803:   ** tests repeatable.
                   29804:   */
                   29805:   memset(zBuf, 0, nBuf);
                   29806: #if !defined(SQLITE_TEST)
                   29807:   {
                   29808:     int pid, fd;
                   29809:     fd = robust_open("/dev/urandom", O_RDONLY, 0);
                   29810:     if( fd<0 ){
                   29811:       time_t t;
                   29812:       time(&t);
                   29813:       memcpy(zBuf, &t, sizeof(t));
                   29814:       pid = getpid();
                   29815:       memcpy(&zBuf[sizeof(t)], &pid, sizeof(pid));
                   29816:       assert( sizeof(t)+sizeof(pid)<=(size_t)nBuf );
                   29817:       nBuf = sizeof(t) + sizeof(pid);
                   29818:     }else{
                   29819:       do{ nBuf = osRead(fd, zBuf, nBuf); }while( nBuf<0 && errno==EINTR );
                   29820:       robust_close(0, fd, __LINE__);
                   29821:     }
                   29822:   }
                   29823: #endif
                   29824:   return nBuf;
                   29825: }
                   29826: 
                   29827: 
                   29828: /*
                   29829: ** Sleep for a little while.  Return the amount of time slept.
                   29830: ** The argument is the number of microseconds we want to sleep.
                   29831: ** The return value is the number of microseconds of sleep actually
                   29832: ** requested from the underlying operating system, a number which
                   29833: ** might be greater than or equal to the argument, but not less
                   29834: ** than the argument.
                   29835: */
                   29836: static int unixSleep(sqlite3_vfs *NotUsed, int microseconds){
                   29837: #if OS_VXWORKS
                   29838:   struct timespec sp;
                   29839: 
                   29840:   sp.tv_sec = microseconds / 1000000;
                   29841:   sp.tv_nsec = (microseconds % 1000000) * 1000;
                   29842:   nanosleep(&sp, NULL);
                   29843:   UNUSED_PARAMETER(NotUsed);
                   29844:   return microseconds;
                   29845: #elif defined(HAVE_USLEEP) && HAVE_USLEEP
                   29846:   usleep(microseconds);
                   29847:   UNUSED_PARAMETER(NotUsed);
                   29848:   return microseconds;
                   29849: #else
                   29850:   int seconds = (microseconds+999999)/1000000;
                   29851:   sleep(seconds);
                   29852:   UNUSED_PARAMETER(NotUsed);
                   29853:   return seconds*1000000;
                   29854: #endif
                   29855: }
                   29856: 
                   29857: /*
                   29858: ** The following variable, if set to a non-zero value, is interpreted as
                   29859: ** the number of seconds since 1970 and is used to set the result of
                   29860: ** sqlite3OsCurrentTime() during testing.
                   29861: */
                   29862: #ifdef SQLITE_TEST
                   29863: SQLITE_API int sqlite3_current_time = 0;  /* Fake system time in seconds since 1970. */
                   29864: #endif
                   29865: 
                   29866: /*
                   29867: ** Find the current time (in Universal Coordinated Time).  Write into *piNow
                   29868: ** the current time and date as a Julian Day number times 86_400_000.  In
                   29869: ** other words, write into *piNow the number of milliseconds since the Julian
                   29870: ** epoch of noon in Greenwich on November 24, 4714 B.C according to the
                   29871: ** proleptic Gregorian calendar.
                   29872: **
                   29873: ** On success, return 0.  Return 1 if the time and date cannot be found.
                   29874: */
                   29875: static int unixCurrentTimeInt64(sqlite3_vfs *NotUsed, sqlite3_int64 *piNow){
                   29876:   static const sqlite3_int64 unixEpoch = 24405875*(sqlite3_int64)8640000;
                   29877: #if defined(NO_GETTOD)
                   29878:   time_t t;
                   29879:   time(&t);
                   29880:   *piNow = ((sqlite3_int64)t)*1000 + unixEpoch;
                   29881: #elif OS_VXWORKS
                   29882:   struct timespec sNow;
                   29883:   clock_gettime(CLOCK_REALTIME, &sNow);
                   29884:   *piNow = unixEpoch + 1000*(sqlite3_int64)sNow.tv_sec + sNow.tv_nsec/1000000;
                   29885: #else
                   29886:   struct timeval sNow;
                   29887:   gettimeofday(&sNow, 0);
                   29888:   *piNow = unixEpoch + 1000*(sqlite3_int64)sNow.tv_sec + sNow.tv_usec/1000;
                   29889: #endif
                   29890: 
                   29891: #ifdef SQLITE_TEST
                   29892:   if( sqlite3_current_time ){
                   29893:     *piNow = 1000*(sqlite3_int64)sqlite3_current_time + unixEpoch;
                   29894:   }
                   29895: #endif
                   29896:   UNUSED_PARAMETER(NotUsed);
                   29897:   return 0;
                   29898: }
                   29899: 
                   29900: /*
                   29901: ** Find the current time (in Universal Coordinated Time).  Write the
                   29902: ** current time and date as a Julian Day number into *prNow and
                   29903: ** return 0.  Return 1 if the time and date cannot be found.
                   29904: */
                   29905: static int unixCurrentTime(sqlite3_vfs *NotUsed, double *prNow){
                   29906:   sqlite3_int64 i;
                   29907:   UNUSED_PARAMETER(NotUsed);
                   29908:   unixCurrentTimeInt64(0, &i);
                   29909:   *prNow = i/86400000.0;
                   29910:   return 0;
                   29911: }
                   29912: 
                   29913: /*
                   29914: ** We added the xGetLastError() method with the intention of providing
                   29915: ** better low-level error messages when operating-system problems come up
                   29916: ** during SQLite operation.  But so far, none of that has been implemented
                   29917: ** in the core.  So this routine is never called.  For now, it is merely
                   29918: ** a place-holder.
                   29919: */
                   29920: static int unixGetLastError(sqlite3_vfs *NotUsed, int NotUsed2, char *NotUsed3){
                   29921:   UNUSED_PARAMETER(NotUsed);
                   29922:   UNUSED_PARAMETER(NotUsed2);
                   29923:   UNUSED_PARAMETER(NotUsed3);
                   29924:   return 0;
                   29925: }
                   29926: 
                   29927: 
                   29928: /*
                   29929: ************************ End of sqlite3_vfs methods ***************************
                   29930: ******************************************************************************/
                   29931: 
                   29932: /******************************************************************************
                   29933: ************************** Begin Proxy Locking ********************************
                   29934: **
                   29935: ** Proxy locking is a "uber-locking-method" in this sense:  It uses the
                   29936: ** other locking methods on secondary lock files.  Proxy locking is a
                   29937: ** meta-layer over top of the primitive locking implemented above.  For
                   29938: ** this reason, the division that implements of proxy locking is deferred
                   29939: ** until late in the file (here) after all of the other I/O methods have
                   29940: ** been defined - so that the primitive locking methods are available
                   29941: ** as services to help with the implementation of proxy locking.
                   29942: **
                   29943: ****
                   29944: **
                   29945: ** The default locking schemes in SQLite use byte-range locks on the
                   29946: ** database file to coordinate safe, concurrent access by multiple readers
                   29947: ** and writers [http://sqlite.org/lockingv3.html].  The five file locking
                   29948: ** states (UNLOCKED, PENDING, SHARED, RESERVED, EXCLUSIVE) are implemented
                   29949: ** as POSIX read & write locks over fixed set of locations (via fsctl),
                   29950: ** on AFP and SMB only exclusive byte-range locks are available via fsctl
                   29951: ** with _IOWR('z', 23, struct ByteRangeLockPB2) to track the same 5 states.
                   29952: ** To simulate a F_RDLCK on the shared range, on AFP a randomly selected
                   29953: ** address in the shared range is taken for a SHARED lock, the entire
                   29954: ** shared range is taken for an EXCLUSIVE lock):
                   29955: **
                   29956: **      PENDING_BYTE        0x40000000                 
                   29957: **      RESERVED_BYTE       0x40000001
                   29958: **      SHARED_RANGE        0x40000002 -> 0x40000200
                   29959: **
                   29960: ** This works well on the local file system, but shows a nearly 100x
                   29961: ** slowdown in read performance on AFP because the AFP client disables
                   29962: ** the read cache when byte-range locks are present.  Enabling the read
                   29963: ** cache exposes a cache coherency problem that is present on all OS X
                   29964: ** supported network file systems.  NFS and AFP both observe the
                   29965: ** close-to-open semantics for ensuring cache coherency
                   29966: ** [http://nfs.sourceforge.net/#faq_a8], which does not effectively
                   29967: ** address the requirements for concurrent database access by multiple
                   29968: ** readers and writers
                   29969: ** [http://www.nabble.com/SQLite-on-NFS-cache-coherency-td15655701.html].
                   29970: **
                   29971: ** To address the performance and cache coherency issues, proxy file locking
                   29972: ** changes the way database access is controlled by limiting access to a
                   29973: ** single host at a time and moving file locks off of the database file
                   29974: ** and onto a proxy file on the local file system.  
                   29975: **
                   29976: **
                   29977: ** Using proxy locks
                   29978: ** -----------------
                   29979: **
                   29980: ** C APIs
                   29981: **
                   29982: **  sqlite3_file_control(db, dbname, SQLITE_SET_LOCKPROXYFILE,
                   29983: **                       <proxy_path> | ":auto:");
                   29984: **  sqlite3_file_control(db, dbname, SQLITE_GET_LOCKPROXYFILE, &<proxy_path>);
                   29985: **
                   29986: **
                   29987: ** SQL pragmas
                   29988: **
                   29989: **  PRAGMA [database.]lock_proxy_file=<proxy_path> | :auto:
                   29990: **  PRAGMA [database.]lock_proxy_file
                   29991: **
                   29992: ** Specifying ":auto:" means that if there is a conch file with a matching
                   29993: ** host ID in it, the proxy path in the conch file will be used, otherwise
                   29994: ** a proxy path based on the user's temp dir
                   29995: ** (via confstr(_CS_DARWIN_USER_TEMP_DIR,...)) will be used and the
                   29996: ** actual proxy file name is generated from the name and path of the
                   29997: ** database file.  For example:
                   29998: **
                   29999: **       For database path "/Users/me/foo.db" 
                   30000: **       The lock path will be "<tmpdir>/sqliteplocks/_Users_me_foo.db:auto:")
                   30001: **
                   30002: ** Once a lock proxy is configured for a database connection, it can not
                   30003: ** be removed, however it may be switched to a different proxy path via
                   30004: ** the above APIs (assuming the conch file is not being held by another
                   30005: ** connection or process). 
                   30006: **
                   30007: **
                   30008: ** How proxy locking works
                   30009: ** -----------------------
                   30010: **
                   30011: ** Proxy file locking relies primarily on two new supporting files: 
                   30012: **
                   30013: **   *  conch file to limit access to the database file to a single host
                   30014: **      at a time
                   30015: **
                   30016: **   *  proxy file to act as a proxy for the advisory locks normally
                   30017: **      taken on the database
                   30018: **
                   30019: ** The conch file - to use a proxy file, sqlite must first "hold the conch"
                   30020: ** by taking an sqlite-style shared lock on the conch file, reading the
                   30021: ** contents and comparing the host's unique host ID (see below) and lock
                   30022: ** proxy path against the values stored in the conch.  The conch file is
                   30023: ** stored in the same directory as the database file and the file name
                   30024: ** is patterned after the database file name as ".<databasename>-conch".
                   30025: ** If the conch file does not exist, or it's contents do not match the
                   30026: ** host ID and/or proxy path, then the lock is escalated to an exclusive
                   30027: ** lock and the conch file contents is updated with the host ID and proxy
                   30028: ** path and the lock is downgraded to a shared lock again.  If the conch
                   30029: ** is held by another process (with a shared lock), the exclusive lock
                   30030: ** will fail and SQLITE_BUSY is returned.
                   30031: **
                   30032: ** The proxy file - a single-byte file used for all advisory file locks
                   30033: ** normally taken on the database file.   This allows for safe sharing
                   30034: ** of the database file for multiple readers and writers on the same
                   30035: ** host (the conch ensures that they all use the same local lock file).
                   30036: **
                   30037: ** Requesting the lock proxy does not immediately take the conch, it is
                   30038: ** only taken when the first request to lock database file is made.  
                   30039: ** This matches the semantics of the traditional locking behavior, where
                   30040: ** opening a connection to a database file does not take a lock on it.
                   30041: ** The shared lock and an open file descriptor are maintained until 
                   30042: ** the connection to the database is closed. 
                   30043: **
                   30044: ** The proxy file and the lock file are never deleted so they only need
                   30045: ** to be created the first time they are used.
                   30046: **
                   30047: ** Configuration options
                   30048: ** ---------------------
                   30049: **
                   30050: **  SQLITE_PREFER_PROXY_LOCKING
                   30051: **
                   30052: **       Database files accessed on non-local file systems are
                   30053: **       automatically configured for proxy locking, lock files are
                   30054: **       named automatically using the same logic as
                   30055: **       PRAGMA lock_proxy_file=":auto:"
                   30056: **    
                   30057: **  SQLITE_PROXY_DEBUG
                   30058: **
                   30059: **       Enables the logging of error messages during host id file
                   30060: **       retrieval and creation
                   30061: **
                   30062: **  LOCKPROXYDIR
                   30063: **
                   30064: **       Overrides the default directory used for lock proxy files that
                   30065: **       are named automatically via the ":auto:" setting
                   30066: **
                   30067: **  SQLITE_DEFAULT_PROXYDIR_PERMISSIONS
                   30068: **
                   30069: **       Permissions to use when creating a directory for storing the
                   30070: **       lock proxy files, only used when LOCKPROXYDIR is not set.
                   30071: **    
                   30072: **    
                   30073: ** As mentioned above, when compiled with SQLITE_PREFER_PROXY_LOCKING,
                   30074: ** setting the environment variable SQLITE_FORCE_PROXY_LOCKING to 1 will
                   30075: ** force proxy locking to be used for every database file opened, and 0
                   30076: ** will force automatic proxy locking to be disabled for all database
                   30077: ** files (explicity calling the SQLITE_SET_LOCKPROXYFILE pragma or
                   30078: ** sqlite_file_control API is not affected by SQLITE_FORCE_PROXY_LOCKING).
                   30079: */
                   30080: 
                   30081: /*
                   30082: ** Proxy locking is only available on MacOSX 
                   30083: */
                   30084: #if defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE
                   30085: 
                   30086: /*
                   30087: ** The proxyLockingContext has the path and file structures for the remote 
                   30088: ** and local proxy files in it
                   30089: */
                   30090: typedef struct proxyLockingContext proxyLockingContext;
                   30091: struct proxyLockingContext {
                   30092:   unixFile *conchFile;         /* Open conch file */
                   30093:   char *conchFilePath;         /* Name of the conch file */
                   30094:   unixFile *lockProxy;         /* Open proxy lock file */
                   30095:   char *lockProxyPath;         /* Name of the proxy lock file */
                   30096:   char *dbPath;                /* Name of the open file */
                   30097:   int conchHeld;               /* 1 if the conch is held, -1 if lockless */
                   30098:   void *oldLockingContext;     /* Original lockingcontext to restore on close */
                   30099:   sqlite3_io_methods const *pOldMethod;     /* Original I/O methods for close */
                   30100: };
                   30101: 
                   30102: /* 
                   30103: ** The proxy lock file path for the database at dbPath is written into lPath, 
                   30104: ** which must point to valid, writable memory large enough for a maxLen length
                   30105: ** file path. 
                   30106: */
                   30107: static int proxyGetLockPath(const char *dbPath, char *lPath, size_t maxLen){
                   30108:   int len;
                   30109:   int dbLen;
                   30110:   int i;
                   30111: 
                   30112: #ifdef LOCKPROXYDIR
                   30113:   len = strlcpy(lPath, LOCKPROXYDIR, maxLen);
                   30114: #else
                   30115: # ifdef _CS_DARWIN_USER_TEMP_DIR
                   30116:   {
                   30117:     if( !confstr(_CS_DARWIN_USER_TEMP_DIR, lPath, maxLen) ){
                   30118:       OSTRACE(("GETLOCKPATH  failed %s errno=%d pid=%d\n",
                   30119:                lPath, errno, getpid()));
                   30120:       return SQLITE_IOERR_LOCK;
                   30121:     }
                   30122:     len = strlcat(lPath, "sqliteplocks", maxLen);    
                   30123:   }
                   30124: # else
                   30125:   len = strlcpy(lPath, "/tmp/", maxLen);
                   30126: # endif
                   30127: #endif
                   30128: 
                   30129:   if( lPath[len-1]!='/' ){
                   30130:     len = strlcat(lPath, "/", maxLen);
                   30131:   }
                   30132:   
                   30133:   /* transform the db path to a unique cache name */
                   30134:   dbLen = (int)strlen(dbPath);
                   30135:   for( i=0; i<dbLen && (i+len+7)<(int)maxLen; i++){
                   30136:     char c = dbPath[i];
                   30137:     lPath[i+len] = (c=='/')?'_':c;
                   30138:   }
                   30139:   lPath[i+len]='\0';
                   30140:   strlcat(lPath, ":auto:", maxLen);
                   30141:   OSTRACE(("GETLOCKPATH  proxy lock path=%s pid=%d\n", lPath, getpid()));
                   30142:   return SQLITE_OK;
                   30143: }
                   30144: 
                   30145: /* 
                   30146:  ** Creates the lock file and any missing directories in lockPath
                   30147:  */
                   30148: static int proxyCreateLockPath(const char *lockPath){
                   30149:   int i, len;
                   30150:   char buf[MAXPATHLEN];
                   30151:   int start = 0;
                   30152:   
                   30153:   assert(lockPath!=NULL);
                   30154:   /* try to create all the intermediate directories */
                   30155:   len = (int)strlen(lockPath);
                   30156:   buf[0] = lockPath[0];
                   30157:   for( i=1; i<len; i++ ){
                   30158:     if( lockPath[i] == '/' && (i - start > 0) ){
                   30159:       /* only mkdir if leaf dir != "." or "/" or ".." */
                   30160:       if( i-start>2 || (i-start==1 && buf[start] != '.' && buf[start] != '/') 
                   30161:          || (i-start==2 && buf[start] != '.' && buf[start+1] != '.') ){
                   30162:         buf[i]='\0';
                   30163:         if( mkdir(buf, SQLITE_DEFAULT_PROXYDIR_PERMISSIONS) ){
                   30164:           int err=errno;
                   30165:           if( err!=EEXIST ) {
                   30166:             OSTRACE(("CREATELOCKPATH  FAILED creating %s, "
                   30167:                      "'%s' proxy lock path=%s pid=%d\n",
                   30168:                      buf, strerror(err), lockPath, getpid()));
                   30169:             return err;
                   30170:           }
                   30171:         }
                   30172:       }
                   30173:       start=i+1;
                   30174:     }
                   30175:     buf[i] = lockPath[i];
                   30176:   }
                   30177:   OSTRACE(("CREATELOCKPATH  proxy lock path=%s pid=%d\n", lockPath, getpid()));
                   30178:   return 0;
                   30179: }
                   30180: 
                   30181: /*
                   30182: ** Create a new VFS file descriptor (stored in memory obtained from
                   30183: ** sqlite3_malloc) and open the file named "path" in the file descriptor.
                   30184: **
                   30185: ** The caller is responsible not only for closing the file descriptor
                   30186: ** but also for freeing the memory associated with the file descriptor.
                   30187: */
                   30188: static int proxyCreateUnixFile(
                   30189:     const char *path,        /* path for the new unixFile */
                   30190:     unixFile **ppFile,       /* unixFile created and returned by ref */
                   30191:     int islockfile           /* if non zero missing dirs will be created */
                   30192: ) {
                   30193:   int fd = -1;
                   30194:   int dirfd = -1;
                   30195:   unixFile *pNew;
                   30196:   int rc = SQLITE_OK;
                   30197:   int openFlags = O_RDWR | O_CREAT;
                   30198:   sqlite3_vfs dummyVfs;
                   30199:   int terrno = 0;
                   30200:   UnixUnusedFd *pUnused = NULL;
                   30201: 
                   30202:   /* 1. first try to open/create the file
                   30203:   ** 2. if that fails, and this is a lock file (not-conch), try creating
                   30204:   ** the parent directories and then try again.
                   30205:   ** 3. if that fails, try to open the file read-only
                   30206:   ** otherwise return BUSY (if lock file) or CANTOPEN for the conch file
                   30207:   */
                   30208:   pUnused = findReusableFd(path, openFlags);
                   30209:   if( pUnused ){
                   30210:     fd = pUnused->fd;
                   30211:   }else{
                   30212:     pUnused = sqlite3_malloc(sizeof(*pUnused));
                   30213:     if( !pUnused ){
                   30214:       return SQLITE_NOMEM;
                   30215:     }
                   30216:   }
                   30217:   if( fd<0 ){
                   30218:     fd = robust_open(path, openFlags, SQLITE_DEFAULT_FILE_PERMISSIONS);
                   30219:     terrno = errno;
                   30220:     if( fd<0 && errno==ENOENT && islockfile ){
                   30221:       if( proxyCreateLockPath(path) == SQLITE_OK ){
                   30222:         fd = robust_open(path, openFlags, SQLITE_DEFAULT_FILE_PERMISSIONS);
                   30223:       }
                   30224:     }
                   30225:   }
                   30226:   if( fd<0 ){
                   30227:     openFlags = O_RDONLY;
                   30228:     fd = robust_open(path, openFlags, SQLITE_DEFAULT_FILE_PERMISSIONS);
                   30229:     terrno = errno;
                   30230:   }
                   30231:   if( fd<0 ){
                   30232:     if( islockfile ){
                   30233:       return SQLITE_BUSY;
                   30234:     }
                   30235:     switch (terrno) {
                   30236:       case EACCES:
                   30237:         return SQLITE_PERM;
                   30238:       case EIO: 
                   30239:         return SQLITE_IOERR_LOCK; /* even though it is the conch */
                   30240:       default:
                   30241:         return SQLITE_CANTOPEN_BKPT;
                   30242:     }
                   30243:   }
                   30244:   
                   30245:   pNew = (unixFile *)sqlite3_malloc(sizeof(*pNew));
                   30246:   if( pNew==NULL ){
                   30247:     rc = SQLITE_NOMEM;
                   30248:     goto end_create_proxy;
                   30249:   }
                   30250:   memset(pNew, 0, sizeof(unixFile));
                   30251:   pNew->openFlags = openFlags;
                   30252:   memset(&dummyVfs, 0, sizeof(dummyVfs));
                   30253:   dummyVfs.pAppData = (void*)&autolockIoFinder;
                   30254:   dummyVfs.zName = "dummy";
                   30255:   pUnused->fd = fd;
                   30256:   pUnused->flags = openFlags;
                   30257:   pNew->pUnused = pUnused;
                   30258:   
                   30259:   rc = fillInUnixFile(&dummyVfs, fd, dirfd, (sqlite3_file*)pNew, path, 0, 0, 0);
                   30260:   if( rc==SQLITE_OK ){
                   30261:     *ppFile = pNew;
                   30262:     return SQLITE_OK;
                   30263:   }
                   30264: end_create_proxy:    
                   30265:   robust_close(pNew, fd, __LINE__);
                   30266:   sqlite3_free(pNew);
                   30267:   sqlite3_free(pUnused);
                   30268:   return rc;
                   30269: }
                   30270: 
                   30271: #ifdef SQLITE_TEST
                   30272: /* simulate multiple hosts by creating unique hostid file paths */
                   30273: SQLITE_API int sqlite3_hostid_num = 0;
                   30274: #endif
                   30275: 
                   30276: #define PROXY_HOSTIDLEN    16  /* conch file host id length */
                   30277: 
                   30278: /* Not always defined in the headers as it ought to be */
                   30279: extern int gethostuuid(uuid_t id, const struct timespec *wait);
                   30280: 
                   30281: /* get the host ID via gethostuuid(), pHostID must point to PROXY_HOSTIDLEN 
                   30282: ** bytes of writable memory.
                   30283: */
                   30284: static int proxyGetHostID(unsigned char *pHostID, int *pError){
                   30285:   assert(PROXY_HOSTIDLEN == sizeof(uuid_t));
                   30286:   memset(pHostID, 0, PROXY_HOSTIDLEN);
                   30287: #if defined(__MAX_OS_X_VERSION_MIN_REQUIRED)\
                   30288:                && __MAC_OS_X_VERSION_MIN_REQUIRED<1050
                   30289:   {
                   30290:     static const struct timespec timeout = {1, 0}; /* 1 sec timeout */
                   30291:     if( gethostuuid(pHostID, &timeout) ){
                   30292:       int err = errno;
                   30293:       if( pError ){
                   30294:         *pError = err;
                   30295:       }
                   30296:       return SQLITE_IOERR;
                   30297:     }
                   30298:   }
                   30299: #endif
                   30300: #ifdef SQLITE_TEST
                   30301:   /* simulate multiple hosts by creating unique hostid file paths */
                   30302:   if( sqlite3_hostid_num != 0){
                   30303:     pHostID[0] = (char)(pHostID[0] + (char)(sqlite3_hostid_num & 0xFF));
                   30304:   }
                   30305: #endif
                   30306:   
                   30307:   return SQLITE_OK;
                   30308: }
                   30309: 
                   30310: /* The conch file contains the header, host id and lock file path
                   30311:  */
                   30312: #define PROXY_CONCHVERSION 2   /* 1-byte header, 16-byte host id, path */
                   30313: #define PROXY_HEADERLEN    1   /* conch file header length */
                   30314: #define PROXY_PATHINDEX    (PROXY_HEADERLEN+PROXY_HOSTIDLEN)
                   30315: #define PROXY_MAXCONCHLEN  (PROXY_HEADERLEN+PROXY_HOSTIDLEN+MAXPATHLEN)
                   30316: 
                   30317: /* 
                   30318: ** Takes an open conch file, copies the contents to a new path and then moves 
                   30319: ** it back.  The newly created file's file descriptor is assigned to the
                   30320: ** conch file structure and finally the original conch file descriptor is 
                   30321: ** closed.  Returns zero if successful.
                   30322: */
                   30323: static int proxyBreakConchLock(unixFile *pFile, uuid_t myHostID){
                   30324:   proxyLockingContext *pCtx = (proxyLockingContext *)pFile->lockingContext; 
                   30325:   unixFile *conchFile = pCtx->conchFile;
                   30326:   char tPath[MAXPATHLEN];
                   30327:   char buf[PROXY_MAXCONCHLEN];
                   30328:   char *cPath = pCtx->conchFilePath;
                   30329:   size_t readLen = 0;
                   30330:   size_t pathLen = 0;
                   30331:   char errmsg[64] = "";
                   30332:   int fd = -1;
                   30333:   int rc = -1;
                   30334:   UNUSED_PARAMETER(myHostID);
                   30335: 
                   30336:   /* create a new path by replace the trailing '-conch' with '-break' */
                   30337:   pathLen = strlcpy(tPath, cPath, MAXPATHLEN);
                   30338:   if( pathLen>MAXPATHLEN || pathLen<6 || 
                   30339:      (strlcpy(&tPath[pathLen-5], "break", 6) != 5) ){
                   30340:     sqlite3_snprintf(sizeof(errmsg),errmsg,"path error (len %d)",(int)pathLen);
                   30341:     goto end_breaklock;
                   30342:   }
                   30343:   /* read the conch content */
                   30344:   readLen = osPread(conchFile->h, buf, PROXY_MAXCONCHLEN, 0);
                   30345:   if( readLen<PROXY_PATHINDEX ){
                   30346:     sqlite3_snprintf(sizeof(errmsg),errmsg,"read error (len %d)",(int)readLen);
                   30347:     goto end_breaklock;
                   30348:   }
                   30349:   /* write it out to the temporary break file */
                   30350:   fd = robust_open(tPath, (O_RDWR|O_CREAT|O_EXCL),
                   30351:                    SQLITE_DEFAULT_FILE_PERMISSIONS);
                   30352:   if( fd<0 ){
                   30353:     sqlite3_snprintf(sizeof(errmsg), errmsg, "create failed (%d)", errno);
                   30354:     goto end_breaklock;
                   30355:   }
                   30356:   if( osPwrite(fd, buf, readLen, 0) != (ssize_t)readLen ){
                   30357:     sqlite3_snprintf(sizeof(errmsg), errmsg, "write failed (%d)", errno);
                   30358:     goto end_breaklock;
                   30359:   }
                   30360:   if( rename(tPath, cPath) ){
                   30361:     sqlite3_snprintf(sizeof(errmsg), errmsg, "rename failed (%d)", errno);
                   30362:     goto end_breaklock;
                   30363:   }
                   30364:   rc = 0;
                   30365:   fprintf(stderr, "broke stale lock on %s\n", cPath);
                   30366:   robust_close(pFile, conchFile->h, __LINE__);
                   30367:   conchFile->h = fd;
                   30368:   conchFile->openFlags = O_RDWR | O_CREAT;
                   30369: 
                   30370: end_breaklock:
                   30371:   if( rc ){
                   30372:     if( fd>=0 ){
                   30373:       unlink(tPath);
                   30374:       robust_close(pFile, fd, __LINE__);
                   30375:     }
                   30376:     fprintf(stderr, "failed to break stale lock on %s, %s\n", cPath, errmsg);
                   30377:   }
                   30378:   return rc;
                   30379: }
                   30380: 
                   30381: /* Take the requested lock on the conch file and break a stale lock if the 
                   30382: ** host id matches.
                   30383: */
                   30384: static int proxyConchLock(unixFile *pFile, uuid_t myHostID, int lockType){
                   30385:   proxyLockingContext *pCtx = (proxyLockingContext *)pFile->lockingContext; 
                   30386:   unixFile *conchFile = pCtx->conchFile;
                   30387:   int rc = SQLITE_OK;
                   30388:   int nTries = 0;
                   30389:   struct timespec conchModTime;
                   30390:   
                   30391:   do {
                   30392:     rc = conchFile->pMethod->xLock((sqlite3_file*)conchFile, lockType);
                   30393:     nTries ++;
                   30394:     if( rc==SQLITE_BUSY ){
                   30395:       /* If the lock failed (busy):
                   30396:        * 1st try: get the mod time of the conch, wait 0.5s and try again. 
                   30397:        * 2nd try: fail if the mod time changed or host id is different, wait 
                   30398:        *           10 sec and try again
                   30399:        * 3rd try: break the lock unless the mod time has changed.
                   30400:        */
                   30401:       struct stat buf;
                   30402:       if( osFstat(conchFile->h, &buf) ){
                   30403:         pFile->lastErrno = errno;
                   30404:         return SQLITE_IOERR_LOCK;
                   30405:       }
                   30406:       
                   30407:       if( nTries==1 ){
                   30408:         conchModTime = buf.st_mtimespec;
                   30409:         usleep(500000); /* wait 0.5 sec and try the lock again*/
                   30410:         continue;  
                   30411:       }
                   30412: 
                   30413:       assert( nTries>1 );
                   30414:       if( conchModTime.tv_sec != buf.st_mtimespec.tv_sec || 
                   30415:          conchModTime.tv_nsec != buf.st_mtimespec.tv_nsec ){
                   30416:         return SQLITE_BUSY;
                   30417:       }
                   30418:       
                   30419:       if( nTries==2 ){  
                   30420:         char tBuf[PROXY_MAXCONCHLEN];
                   30421:         int len = osPread(conchFile->h, tBuf, PROXY_MAXCONCHLEN, 0);
                   30422:         if( len<0 ){
                   30423:           pFile->lastErrno = errno;
                   30424:           return SQLITE_IOERR_LOCK;
                   30425:         }
                   30426:         if( len>PROXY_PATHINDEX && tBuf[0]==(char)PROXY_CONCHVERSION){
                   30427:           /* don't break the lock if the host id doesn't match */
                   30428:           if( 0!=memcmp(&tBuf[PROXY_HEADERLEN], myHostID, PROXY_HOSTIDLEN) ){
                   30429:             return SQLITE_BUSY;
                   30430:           }
                   30431:         }else{
                   30432:           /* don't break the lock on short read or a version mismatch */
                   30433:           return SQLITE_BUSY;
                   30434:         }
                   30435:         usleep(10000000); /* wait 10 sec and try the lock again */
                   30436:         continue; 
                   30437:       }
                   30438:       
                   30439:       assert( nTries==3 );
                   30440:       if( 0==proxyBreakConchLock(pFile, myHostID) ){
                   30441:         rc = SQLITE_OK;
                   30442:         if( lockType==EXCLUSIVE_LOCK ){
                   30443:           rc = conchFile->pMethod->xLock((sqlite3_file*)conchFile, SHARED_LOCK);          
                   30444:         }
                   30445:         if( !rc ){
                   30446:           rc = conchFile->pMethod->xLock((sqlite3_file*)conchFile, lockType);
                   30447:         }
                   30448:       }
                   30449:     }
                   30450:   } while( rc==SQLITE_BUSY && nTries<3 );
                   30451:   
                   30452:   return rc;
                   30453: }
                   30454: 
                   30455: /* Takes the conch by taking a shared lock and read the contents conch, if 
                   30456: ** lockPath is non-NULL, the host ID and lock file path must match.  A NULL 
                   30457: ** lockPath means that the lockPath in the conch file will be used if the 
                   30458: ** host IDs match, or a new lock path will be generated automatically 
                   30459: ** and written to the conch file.
                   30460: */
                   30461: static int proxyTakeConch(unixFile *pFile){
                   30462:   proxyLockingContext *pCtx = (proxyLockingContext *)pFile->lockingContext; 
                   30463:   
                   30464:   if( pCtx->conchHeld!=0 ){
                   30465:     return SQLITE_OK;
                   30466:   }else{
                   30467:     unixFile *conchFile = pCtx->conchFile;
                   30468:     uuid_t myHostID;
                   30469:     int pError = 0;
                   30470:     char readBuf[PROXY_MAXCONCHLEN];
                   30471:     char lockPath[MAXPATHLEN];
                   30472:     char *tempLockPath = NULL;
                   30473:     int rc = SQLITE_OK;
                   30474:     int createConch = 0;
                   30475:     int hostIdMatch = 0;
                   30476:     int readLen = 0;
                   30477:     int tryOldLockPath = 0;
                   30478:     int forceNewLockPath = 0;
                   30479:     
                   30480:     OSTRACE(("TAKECONCH  %d for %s pid=%d\n", conchFile->h,
                   30481:              (pCtx->lockProxyPath ? pCtx->lockProxyPath : ":auto:"), getpid()));
                   30482: 
                   30483:     rc = proxyGetHostID(myHostID, &pError);
                   30484:     if( (rc&0xff)==SQLITE_IOERR ){
                   30485:       pFile->lastErrno = pError;
                   30486:       goto end_takeconch;
                   30487:     }
                   30488:     rc = proxyConchLock(pFile, myHostID, SHARED_LOCK);
                   30489:     if( rc!=SQLITE_OK ){
                   30490:       goto end_takeconch;
                   30491:     }
                   30492:     /* read the existing conch file */
                   30493:     readLen = seekAndRead((unixFile*)conchFile, 0, readBuf, PROXY_MAXCONCHLEN);
                   30494:     if( readLen<0 ){
                   30495:       /* I/O error: lastErrno set by seekAndRead */
                   30496:       pFile->lastErrno = conchFile->lastErrno;
                   30497:       rc = SQLITE_IOERR_READ;
                   30498:       goto end_takeconch;
                   30499:     }else if( readLen<=(PROXY_HEADERLEN+PROXY_HOSTIDLEN) || 
                   30500:              readBuf[0]!=(char)PROXY_CONCHVERSION ){
                   30501:       /* a short read or version format mismatch means we need to create a new 
                   30502:       ** conch file. 
                   30503:       */
                   30504:       createConch = 1;
                   30505:     }
                   30506:     /* if the host id matches and the lock path already exists in the conch
                   30507:     ** we'll try to use the path there, if we can't open that path, we'll 
                   30508:     ** retry with a new auto-generated path 
                   30509:     */
                   30510:     do { /* in case we need to try again for an :auto: named lock file */
                   30511: 
                   30512:       if( !createConch && !forceNewLockPath ){
                   30513:         hostIdMatch = !memcmp(&readBuf[PROXY_HEADERLEN], myHostID, 
                   30514:                                   PROXY_HOSTIDLEN);
                   30515:         /* if the conch has data compare the contents */
                   30516:         if( !pCtx->lockProxyPath ){
                   30517:           /* for auto-named local lock file, just check the host ID and we'll
                   30518:            ** use the local lock file path that's already in there
                   30519:            */
                   30520:           if( hostIdMatch ){
                   30521:             size_t pathLen = (readLen - PROXY_PATHINDEX);
                   30522:             
                   30523:             if( pathLen>=MAXPATHLEN ){
                   30524:               pathLen=MAXPATHLEN-1;
                   30525:             }
                   30526:             memcpy(lockPath, &readBuf[PROXY_PATHINDEX], pathLen);
                   30527:             lockPath[pathLen] = 0;
                   30528:             tempLockPath = lockPath;
                   30529:             tryOldLockPath = 1;
                   30530:             /* create a copy of the lock path if the conch is taken */
                   30531:             goto end_takeconch;
                   30532:           }
                   30533:         }else if( hostIdMatch
                   30534:                && !strncmp(pCtx->lockProxyPath, &readBuf[PROXY_PATHINDEX],
                   30535:                            readLen-PROXY_PATHINDEX)
                   30536:         ){
                   30537:           /* conch host and lock path match */
                   30538:           goto end_takeconch; 
                   30539:         }
                   30540:       }
                   30541:       
                   30542:       /* if the conch isn't writable and doesn't match, we can't take it */
                   30543:       if( (conchFile->openFlags&O_RDWR) == 0 ){
                   30544:         rc = SQLITE_BUSY;
                   30545:         goto end_takeconch;
                   30546:       }
                   30547:       
                   30548:       /* either the conch didn't match or we need to create a new one */
                   30549:       if( !pCtx->lockProxyPath ){
                   30550:         proxyGetLockPath(pCtx->dbPath, lockPath, MAXPATHLEN);
                   30551:         tempLockPath = lockPath;
                   30552:         /* create a copy of the lock path _only_ if the conch is taken */
                   30553:       }
                   30554:       
                   30555:       /* update conch with host and path (this will fail if other process
                   30556:       ** has a shared lock already), if the host id matches, use the big
                   30557:       ** stick.
                   30558:       */
                   30559:       futimes(conchFile->h, NULL);
                   30560:       if( hostIdMatch && !createConch ){
                   30561:         if( conchFile->pInode && conchFile->pInode->nShared>1 ){
                   30562:           /* We are trying for an exclusive lock but another thread in this
                   30563:            ** same process is still holding a shared lock. */
                   30564:           rc = SQLITE_BUSY;
                   30565:         } else {          
                   30566:           rc = proxyConchLock(pFile, myHostID, EXCLUSIVE_LOCK);
                   30567:         }
                   30568:       }else{
                   30569:         rc = conchFile->pMethod->xLock((sqlite3_file*)conchFile, EXCLUSIVE_LOCK);
                   30570:       }
                   30571:       if( rc==SQLITE_OK ){
                   30572:         char writeBuffer[PROXY_MAXCONCHLEN];
                   30573:         int writeSize = 0;
                   30574:         
                   30575:         writeBuffer[0] = (char)PROXY_CONCHVERSION;
                   30576:         memcpy(&writeBuffer[PROXY_HEADERLEN], myHostID, PROXY_HOSTIDLEN);
                   30577:         if( pCtx->lockProxyPath!=NULL ){
                   30578:           strlcpy(&writeBuffer[PROXY_PATHINDEX], pCtx->lockProxyPath, MAXPATHLEN);
                   30579:         }else{
                   30580:           strlcpy(&writeBuffer[PROXY_PATHINDEX], tempLockPath, MAXPATHLEN);
                   30581:         }
                   30582:         writeSize = PROXY_PATHINDEX + strlen(&writeBuffer[PROXY_PATHINDEX]);
                   30583:         robust_ftruncate(conchFile->h, writeSize);
                   30584:         rc = unixWrite((sqlite3_file *)conchFile, writeBuffer, writeSize, 0);
                   30585:         fsync(conchFile->h);
                   30586:         /* If we created a new conch file (not just updated the contents of a 
                   30587:          ** valid conch file), try to match the permissions of the database 
                   30588:          */
                   30589:         if( rc==SQLITE_OK && createConch ){
                   30590:           struct stat buf;
                   30591:           int err = osFstat(pFile->h, &buf);
                   30592:           if( err==0 ){
                   30593:             mode_t cmode = buf.st_mode&(S_IRUSR|S_IWUSR | S_IRGRP|S_IWGRP |
                   30594:                                         S_IROTH|S_IWOTH);
                   30595:             /* try to match the database file R/W permissions, ignore failure */
                   30596: #ifndef SQLITE_PROXY_DEBUG
                   30597:             osFchmod(conchFile->h, cmode);
                   30598: #else
                   30599:             do{
                   30600:               rc = osFchmod(conchFile->h, cmode);
                   30601:             }while( rc==(-1) && errno==EINTR );
                   30602:             if( rc!=0 ){
                   30603:               int code = errno;
                   30604:               fprintf(stderr, "fchmod %o FAILED with %d %s\n",
                   30605:                       cmode, code, strerror(code));
                   30606:             } else {
                   30607:               fprintf(stderr, "fchmod %o SUCCEDED\n",cmode);
                   30608:             }
                   30609:           }else{
                   30610:             int code = errno;
                   30611:             fprintf(stderr, "STAT FAILED[%d] with %d %s\n", 
                   30612:                     err, code, strerror(code));
                   30613: #endif
                   30614:           }
                   30615:         }
                   30616:       }
                   30617:       conchFile->pMethod->xUnlock((sqlite3_file*)conchFile, SHARED_LOCK);
                   30618:       
                   30619:     end_takeconch:
                   30620:       OSTRACE(("TRANSPROXY: CLOSE  %d\n", pFile->h));
                   30621:       if( rc==SQLITE_OK && pFile->openFlags ){
                   30622:         if( pFile->h>=0 ){
                   30623:           robust_close(pFile, pFile->h, __LINE__);
                   30624:         }
                   30625:         pFile->h = -1;
                   30626:         int fd = robust_open(pCtx->dbPath, pFile->openFlags,
                   30627:                       SQLITE_DEFAULT_FILE_PERMISSIONS);
                   30628:         OSTRACE(("TRANSPROXY: OPEN  %d\n", fd));
                   30629:         if( fd>=0 ){
                   30630:           pFile->h = fd;
                   30631:         }else{
                   30632:           rc=SQLITE_CANTOPEN_BKPT; /* SQLITE_BUSY? proxyTakeConch called
                   30633:            during locking */
                   30634:         }
                   30635:       }
                   30636:       if( rc==SQLITE_OK && !pCtx->lockProxy ){
                   30637:         char *path = tempLockPath ? tempLockPath : pCtx->lockProxyPath;
                   30638:         rc = proxyCreateUnixFile(path, &pCtx->lockProxy, 1);
                   30639:         if( rc!=SQLITE_OK && rc!=SQLITE_NOMEM && tryOldLockPath ){
                   30640:           /* we couldn't create the proxy lock file with the old lock file path
                   30641:            ** so try again via auto-naming 
                   30642:            */
                   30643:           forceNewLockPath = 1;
                   30644:           tryOldLockPath = 0;
                   30645:           continue; /* go back to the do {} while start point, try again */
                   30646:         }
                   30647:       }
                   30648:       if( rc==SQLITE_OK ){
                   30649:         /* Need to make a copy of path if we extracted the value
                   30650:          ** from the conch file or the path was allocated on the stack
                   30651:          */
                   30652:         if( tempLockPath ){
                   30653:           pCtx->lockProxyPath = sqlite3DbStrDup(0, tempLockPath);
                   30654:           if( !pCtx->lockProxyPath ){
                   30655:             rc = SQLITE_NOMEM;
                   30656:           }
                   30657:         }
                   30658:       }
                   30659:       if( rc==SQLITE_OK ){
                   30660:         pCtx->conchHeld = 1;
                   30661:         
                   30662:         if( pCtx->lockProxy->pMethod == &afpIoMethods ){
                   30663:           afpLockingContext *afpCtx;
                   30664:           afpCtx = (afpLockingContext *)pCtx->lockProxy->lockingContext;
                   30665:           afpCtx->dbPath = pCtx->lockProxyPath;
                   30666:         }
                   30667:       } else {
                   30668:         conchFile->pMethod->xUnlock((sqlite3_file*)conchFile, NO_LOCK);
                   30669:       }
                   30670:       OSTRACE(("TAKECONCH  %d %s\n", conchFile->h,
                   30671:                rc==SQLITE_OK?"ok":"failed"));
                   30672:       return rc;
                   30673:     } while (1); /* in case we need to retry the :auto: lock file - 
                   30674:                  ** we should never get here except via the 'continue' call. */
                   30675:   }
                   30676: }
                   30677: 
                   30678: /*
                   30679: ** If pFile holds a lock on a conch file, then release that lock.
                   30680: */
                   30681: static int proxyReleaseConch(unixFile *pFile){
                   30682:   int rc = SQLITE_OK;         /* Subroutine return code */
                   30683:   proxyLockingContext *pCtx;  /* The locking context for the proxy lock */
                   30684:   unixFile *conchFile;        /* Name of the conch file */
                   30685: 
                   30686:   pCtx = (proxyLockingContext *)pFile->lockingContext;
                   30687:   conchFile = pCtx->conchFile;
                   30688:   OSTRACE(("RELEASECONCH  %d for %s pid=%d\n", conchFile->h,
                   30689:            (pCtx->lockProxyPath ? pCtx->lockProxyPath : ":auto:"), 
                   30690:            getpid()));
                   30691:   if( pCtx->conchHeld>0 ){
                   30692:     rc = conchFile->pMethod->xUnlock((sqlite3_file*)conchFile, NO_LOCK);
                   30693:   }
                   30694:   pCtx->conchHeld = 0;
                   30695:   OSTRACE(("RELEASECONCH  %d %s\n", conchFile->h,
                   30696:            (rc==SQLITE_OK ? "ok" : "failed")));
                   30697:   return rc;
                   30698: }
                   30699: 
                   30700: /*
                   30701: ** Given the name of a database file, compute the name of its conch file.
                   30702: ** Store the conch filename in memory obtained from sqlite3_malloc().
                   30703: ** Make *pConchPath point to the new name.  Return SQLITE_OK on success
                   30704: ** or SQLITE_NOMEM if unable to obtain memory.
                   30705: **
                   30706: ** The caller is responsible for ensuring that the allocated memory
                   30707: ** space is eventually freed.
                   30708: **
                   30709: ** *pConchPath is set to NULL if a memory allocation error occurs.
                   30710: */
                   30711: static int proxyCreateConchPathname(char *dbPath, char **pConchPath){
                   30712:   int i;                        /* Loop counter */
                   30713:   int len = (int)strlen(dbPath); /* Length of database filename - dbPath */
                   30714:   char *conchPath;              /* buffer in which to construct conch name */
                   30715: 
                   30716:   /* Allocate space for the conch filename and initialize the name to
                   30717:   ** the name of the original database file. */  
                   30718:   *pConchPath = conchPath = (char *)sqlite3_malloc(len + 8);
                   30719:   if( conchPath==0 ){
                   30720:     return SQLITE_NOMEM;
                   30721:   }
                   30722:   memcpy(conchPath, dbPath, len+1);
                   30723:   
                   30724:   /* now insert a "." before the last / character */
                   30725:   for( i=(len-1); i>=0; i-- ){
                   30726:     if( conchPath[i]=='/' ){
                   30727:       i++;
                   30728:       break;
                   30729:     }
                   30730:   }
                   30731:   conchPath[i]='.';
                   30732:   while ( i<len ){
                   30733:     conchPath[i+1]=dbPath[i];
                   30734:     i++;
                   30735:   }
                   30736: 
                   30737:   /* append the "-conch" suffix to the file */
                   30738:   memcpy(&conchPath[i+1], "-conch", 7);
                   30739:   assert( (int)strlen(conchPath) == len+7 );
                   30740: 
                   30741:   return SQLITE_OK;
                   30742: }
                   30743: 
                   30744: 
                   30745: /* Takes a fully configured proxy locking-style unix file and switches
                   30746: ** the local lock file path 
                   30747: */
                   30748: static int switchLockProxyPath(unixFile *pFile, const char *path) {
                   30749:   proxyLockingContext *pCtx = (proxyLockingContext*)pFile->lockingContext;
                   30750:   char *oldPath = pCtx->lockProxyPath;
                   30751:   int rc = SQLITE_OK;
                   30752: 
                   30753:   if( pFile->eFileLock!=NO_LOCK ){
                   30754:     return SQLITE_BUSY;
                   30755:   }  
                   30756: 
                   30757:   /* nothing to do if the path is NULL, :auto: or matches the existing path */
                   30758:   if( !path || path[0]=='\0' || !strcmp(path, ":auto:") ||
                   30759:     (oldPath && !strncmp(oldPath, path, MAXPATHLEN)) ){
                   30760:     return SQLITE_OK;
                   30761:   }else{
                   30762:     unixFile *lockProxy = pCtx->lockProxy;
                   30763:     pCtx->lockProxy=NULL;
                   30764:     pCtx->conchHeld = 0;
                   30765:     if( lockProxy!=NULL ){
                   30766:       rc=lockProxy->pMethod->xClose((sqlite3_file *)lockProxy);
                   30767:       if( rc ) return rc;
                   30768:       sqlite3_free(lockProxy);
                   30769:     }
                   30770:     sqlite3_free(oldPath);
                   30771:     pCtx->lockProxyPath = sqlite3DbStrDup(0, path);
                   30772:   }
                   30773:   
                   30774:   return rc;
                   30775: }
                   30776: 
                   30777: /*
                   30778: ** pFile is a file that has been opened by a prior xOpen call.  dbPath
                   30779: ** is a string buffer at least MAXPATHLEN+1 characters in size.
                   30780: **
                   30781: ** This routine find the filename associated with pFile and writes it
                   30782: ** int dbPath.
                   30783: */
                   30784: static int proxyGetDbPathForUnixFile(unixFile *pFile, char *dbPath){
                   30785: #if defined(__APPLE__)
                   30786:   if( pFile->pMethod == &afpIoMethods ){
                   30787:     /* afp style keeps a reference to the db path in the filePath field 
                   30788:     ** of the struct */
                   30789:     assert( (int)strlen((char*)pFile->lockingContext)<=MAXPATHLEN );
                   30790:     strlcpy(dbPath, ((afpLockingContext *)pFile->lockingContext)->dbPath, MAXPATHLEN);
                   30791:   } else
                   30792: #endif
                   30793:   if( pFile->pMethod == &dotlockIoMethods ){
                   30794:     /* dot lock style uses the locking context to store the dot lock
                   30795:     ** file path */
                   30796:     int len = strlen((char *)pFile->lockingContext) - strlen(DOTLOCK_SUFFIX);
                   30797:     memcpy(dbPath, (char *)pFile->lockingContext, len + 1);
                   30798:   }else{
                   30799:     /* all other styles use the locking context to store the db file path */
                   30800:     assert( strlen((char*)pFile->lockingContext)<=MAXPATHLEN );
                   30801:     strlcpy(dbPath, (char *)pFile->lockingContext, MAXPATHLEN);
                   30802:   }
                   30803:   return SQLITE_OK;
                   30804: }
                   30805: 
                   30806: /*
                   30807: ** Takes an already filled in unix file and alters it so all file locking 
                   30808: ** will be performed on the local proxy lock file.  The following fields
                   30809: ** are preserved in the locking context so that they can be restored and 
                   30810: ** the unix structure properly cleaned up at close time:
                   30811: **  ->lockingContext
                   30812: **  ->pMethod
                   30813: */
                   30814: static int proxyTransformUnixFile(unixFile *pFile, const char *path) {
                   30815:   proxyLockingContext *pCtx;
                   30816:   char dbPath[MAXPATHLEN+1];       /* Name of the database file */
                   30817:   char *lockPath=NULL;
                   30818:   int rc = SQLITE_OK;
                   30819:   
                   30820:   if( pFile->eFileLock!=NO_LOCK ){
                   30821:     return SQLITE_BUSY;
                   30822:   }
                   30823:   proxyGetDbPathForUnixFile(pFile, dbPath);
                   30824:   if( !path || path[0]=='\0' || !strcmp(path, ":auto:") ){
                   30825:     lockPath=NULL;
                   30826:   }else{
                   30827:     lockPath=(char *)path;
                   30828:   }
                   30829:   
                   30830:   OSTRACE(("TRANSPROXY  %d for %s pid=%d\n", pFile->h,
                   30831:            (lockPath ? lockPath : ":auto:"), getpid()));
                   30832: 
                   30833:   pCtx = sqlite3_malloc( sizeof(*pCtx) );
                   30834:   if( pCtx==0 ){
                   30835:     return SQLITE_NOMEM;
                   30836:   }
                   30837:   memset(pCtx, 0, sizeof(*pCtx));
                   30838: 
                   30839:   rc = proxyCreateConchPathname(dbPath, &pCtx->conchFilePath);
                   30840:   if( rc==SQLITE_OK ){
                   30841:     rc = proxyCreateUnixFile(pCtx->conchFilePath, &pCtx->conchFile, 0);
                   30842:     if( rc==SQLITE_CANTOPEN && ((pFile->openFlags&O_RDWR) == 0) ){
                   30843:       /* if (a) the open flags are not O_RDWR, (b) the conch isn't there, and
                   30844:       ** (c) the file system is read-only, then enable no-locking access.
                   30845:       ** Ugh, since O_RDONLY==0x0000 we test for !O_RDWR since unixOpen asserts
                   30846:       ** that openFlags will have only one of O_RDONLY or O_RDWR.
                   30847:       */
                   30848:       struct statfs fsInfo;
                   30849:       struct stat conchInfo;
                   30850:       int goLockless = 0;
                   30851: 
                   30852:       if( osStat(pCtx->conchFilePath, &conchInfo) == -1 ) {
                   30853:         int err = errno;
                   30854:         if( (err==ENOENT) && (statfs(dbPath, &fsInfo) != -1) ){
                   30855:           goLockless = (fsInfo.f_flags&MNT_RDONLY) == MNT_RDONLY;
                   30856:         }
                   30857:       }
                   30858:       if( goLockless ){
                   30859:         pCtx->conchHeld = -1; /* read only FS/ lockless */
                   30860:         rc = SQLITE_OK;
                   30861:       }
                   30862:     }
                   30863:   }  
                   30864:   if( rc==SQLITE_OK && lockPath ){
                   30865:     pCtx->lockProxyPath = sqlite3DbStrDup(0, lockPath);
                   30866:   }
                   30867: 
                   30868:   if( rc==SQLITE_OK ){
                   30869:     pCtx->dbPath = sqlite3DbStrDup(0, dbPath);
                   30870:     if( pCtx->dbPath==NULL ){
                   30871:       rc = SQLITE_NOMEM;
                   30872:     }
                   30873:   }
                   30874:   if( rc==SQLITE_OK ){
                   30875:     /* all memory is allocated, proxys are created and assigned, 
                   30876:     ** switch the locking context and pMethod then return.
                   30877:     */
                   30878:     pCtx->oldLockingContext = pFile->lockingContext;
                   30879:     pFile->lockingContext = pCtx;
                   30880:     pCtx->pOldMethod = pFile->pMethod;
                   30881:     pFile->pMethod = &proxyIoMethods;
                   30882:   }else{
                   30883:     if( pCtx->conchFile ){ 
                   30884:       pCtx->conchFile->pMethod->xClose((sqlite3_file *)pCtx->conchFile);
                   30885:       sqlite3_free(pCtx->conchFile);
                   30886:     }
                   30887:     sqlite3DbFree(0, pCtx->lockProxyPath);
                   30888:     sqlite3_free(pCtx->conchFilePath); 
                   30889:     sqlite3_free(pCtx);
                   30890:   }
                   30891:   OSTRACE(("TRANSPROXY  %d %s\n", pFile->h,
                   30892:            (rc==SQLITE_OK ? "ok" : "failed")));
                   30893:   return rc;
                   30894: }
                   30895: 
                   30896: 
                   30897: /*
                   30898: ** This routine handles sqlite3_file_control() calls that are specific
                   30899: ** to proxy locking.
                   30900: */
                   30901: static int proxyFileControl(sqlite3_file *id, int op, void *pArg){
                   30902:   switch( op ){
                   30903:     case SQLITE_GET_LOCKPROXYFILE: {
                   30904:       unixFile *pFile = (unixFile*)id;
                   30905:       if( pFile->pMethod == &proxyIoMethods ){
                   30906:         proxyLockingContext *pCtx = (proxyLockingContext*)pFile->lockingContext;
                   30907:         proxyTakeConch(pFile);
                   30908:         if( pCtx->lockProxyPath ){
                   30909:           *(const char **)pArg = pCtx->lockProxyPath;
                   30910:         }else{
                   30911:           *(const char **)pArg = ":auto: (not held)";
                   30912:         }
                   30913:       } else {
                   30914:         *(const char **)pArg = NULL;
                   30915:       }
                   30916:       return SQLITE_OK;
                   30917:     }
                   30918:     case SQLITE_SET_LOCKPROXYFILE: {
                   30919:       unixFile *pFile = (unixFile*)id;
                   30920:       int rc = SQLITE_OK;
                   30921:       int isProxyStyle = (pFile->pMethod == &proxyIoMethods);
                   30922:       if( pArg==NULL || (const char *)pArg==0 ){
                   30923:         if( isProxyStyle ){
                   30924:           /* turn off proxy locking - not supported */
                   30925:           rc = SQLITE_ERROR /*SQLITE_PROTOCOL? SQLITE_MISUSE?*/;
                   30926:         }else{
                   30927:           /* turn off proxy locking - already off - NOOP */
                   30928:           rc = SQLITE_OK;
                   30929:         }
                   30930:       }else{
                   30931:         const char *proxyPath = (const char *)pArg;
                   30932:         if( isProxyStyle ){
                   30933:           proxyLockingContext *pCtx = 
                   30934:             (proxyLockingContext*)pFile->lockingContext;
                   30935:           if( !strcmp(pArg, ":auto:") 
                   30936:            || (pCtx->lockProxyPath &&
                   30937:                !strncmp(pCtx->lockProxyPath, proxyPath, MAXPATHLEN))
                   30938:           ){
                   30939:             rc = SQLITE_OK;
                   30940:           }else{
                   30941:             rc = switchLockProxyPath(pFile, proxyPath);
                   30942:           }
                   30943:         }else{
                   30944:           /* turn on proxy file locking */
                   30945:           rc = proxyTransformUnixFile(pFile, proxyPath);
                   30946:         }
                   30947:       }
                   30948:       return rc;
                   30949:     }
                   30950:     default: {
                   30951:       assert( 0 );  /* The call assures that only valid opcodes are sent */
                   30952:     }
                   30953:   }
                   30954:   /*NOTREACHED*/
                   30955:   return SQLITE_ERROR;
                   30956: }
                   30957: 
                   30958: /*
                   30959: ** Within this division (the proxying locking implementation) the procedures
                   30960: ** above this point are all utilities.  The lock-related methods of the
                   30961: ** proxy-locking sqlite3_io_method object follow.
                   30962: */
                   30963: 
                   30964: 
                   30965: /*
                   30966: ** This routine checks if there is a RESERVED lock held on the specified
                   30967: ** file by this or any other process. If such a lock is held, set *pResOut
                   30968: ** to a non-zero value otherwise *pResOut is set to zero.  The return value
                   30969: ** is set to SQLITE_OK unless an I/O error occurs during lock checking.
                   30970: */
                   30971: static int proxyCheckReservedLock(sqlite3_file *id, int *pResOut) {
                   30972:   unixFile *pFile = (unixFile*)id;
                   30973:   int rc = proxyTakeConch(pFile);
                   30974:   if( rc==SQLITE_OK ){
                   30975:     proxyLockingContext *pCtx = (proxyLockingContext *)pFile->lockingContext;
                   30976:     if( pCtx->conchHeld>0 ){
                   30977:       unixFile *proxy = pCtx->lockProxy;
                   30978:       return proxy->pMethod->xCheckReservedLock((sqlite3_file*)proxy, pResOut);
                   30979:     }else{ /* conchHeld < 0 is lockless */
                   30980:       pResOut=0;
                   30981:     }
                   30982:   }
                   30983:   return rc;
                   30984: }
                   30985: 
                   30986: /*
                   30987: ** Lock the file with the lock specified by parameter eFileLock - one
                   30988: ** of the following:
                   30989: **
                   30990: **     (1) SHARED_LOCK
                   30991: **     (2) RESERVED_LOCK
                   30992: **     (3) PENDING_LOCK
                   30993: **     (4) EXCLUSIVE_LOCK
                   30994: **
                   30995: ** Sometimes when requesting one lock state, additional lock states
                   30996: ** are inserted in between.  The locking might fail on one of the later
                   30997: ** transitions leaving the lock state different from what it started but
                   30998: ** still short of its goal.  The following chart shows the allowed
                   30999: ** transitions and the inserted intermediate states:
                   31000: **
                   31001: **    UNLOCKED -> SHARED
                   31002: **    SHARED -> RESERVED
                   31003: **    SHARED -> (PENDING) -> EXCLUSIVE
                   31004: **    RESERVED -> (PENDING) -> EXCLUSIVE
                   31005: **    PENDING -> EXCLUSIVE
                   31006: **
                   31007: ** This routine will only increase a lock.  Use the sqlite3OsUnlock()
                   31008: ** routine to lower a locking level.
                   31009: */
                   31010: static int proxyLock(sqlite3_file *id, int eFileLock) {
                   31011:   unixFile *pFile = (unixFile*)id;
                   31012:   int rc = proxyTakeConch(pFile);
                   31013:   if( rc==SQLITE_OK ){
                   31014:     proxyLockingContext *pCtx = (proxyLockingContext *)pFile->lockingContext;
                   31015:     if( pCtx->conchHeld>0 ){
                   31016:       unixFile *proxy = pCtx->lockProxy;
                   31017:       rc = proxy->pMethod->xLock((sqlite3_file*)proxy, eFileLock);
                   31018:       pFile->eFileLock = proxy->eFileLock;
                   31019:     }else{
                   31020:       /* conchHeld < 0 is lockless */
                   31021:     }
                   31022:   }
                   31023:   return rc;
                   31024: }
                   31025: 
                   31026: 
                   31027: /*
                   31028: ** Lower the locking level on file descriptor pFile to eFileLock.  eFileLock
                   31029: ** must be either NO_LOCK or SHARED_LOCK.
                   31030: **
                   31031: ** If the locking level of the file descriptor is already at or below
                   31032: ** the requested locking level, this routine is a no-op.
                   31033: */
                   31034: static int proxyUnlock(sqlite3_file *id, int eFileLock) {
                   31035:   unixFile *pFile = (unixFile*)id;
                   31036:   int rc = proxyTakeConch(pFile);
                   31037:   if( rc==SQLITE_OK ){
                   31038:     proxyLockingContext *pCtx = (proxyLockingContext *)pFile->lockingContext;
                   31039:     if( pCtx->conchHeld>0 ){
                   31040:       unixFile *proxy = pCtx->lockProxy;
                   31041:       rc = proxy->pMethod->xUnlock((sqlite3_file*)proxy, eFileLock);
                   31042:       pFile->eFileLock = proxy->eFileLock;
                   31043:     }else{
                   31044:       /* conchHeld < 0 is lockless */
                   31045:     }
                   31046:   }
                   31047:   return rc;
                   31048: }
                   31049: 
                   31050: /*
                   31051: ** Close a file that uses proxy locks.
                   31052: */
                   31053: static int proxyClose(sqlite3_file *id) {
                   31054:   if( id ){
                   31055:     unixFile *pFile = (unixFile*)id;
                   31056:     proxyLockingContext *pCtx = (proxyLockingContext *)pFile->lockingContext;
                   31057:     unixFile *lockProxy = pCtx->lockProxy;
                   31058:     unixFile *conchFile = pCtx->conchFile;
                   31059:     int rc = SQLITE_OK;
                   31060:     
                   31061:     if( lockProxy ){
                   31062:       rc = lockProxy->pMethod->xUnlock((sqlite3_file*)lockProxy, NO_LOCK);
                   31063:       if( rc ) return rc;
                   31064:       rc = lockProxy->pMethod->xClose((sqlite3_file*)lockProxy);
                   31065:       if( rc ) return rc;
                   31066:       sqlite3_free(lockProxy);
                   31067:       pCtx->lockProxy = 0;
                   31068:     }
                   31069:     if( conchFile ){
                   31070:       if( pCtx->conchHeld ){
                   31071:         rc = proxyReleaseConch(pFile);
                   31072:         if( rc ) return rc;
                   31073:       }
                   31074:       rc = conchFile->pMethod->xClose((sqlite3_file*)conchFile);
                   31075:       if( rc ) return rc;
                   31076:       sqlite3_free(conchFile);
                   31077:     }
                   31078:     sqlite3DbFree(0, pCtx->lockProxyPath);
                   31079:     sqlite3_free(pCtx->conchFilePath);
                   31080:     sqlite3DbFree(0, pCtx->dbPath);
                   31081:     /* restore the original locking context and pMethod then close it */
                   31082:     pFile->lockingContext = pCtx->oldLockingContext;
                   31083:     pFile->pMethod = pCtx->pOldMethod;
                   31084:     sqlite3_free(pCtx);
                   31085:     return pFile->pMethod->xClose(id);
                   31086:   }
                   31087:   return SQLITE_OK;
                   31088: }
                   31089: 
                   31090: 
                   31091: 
                   31092: #endif /* defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE */
                   31093: /*
                   31094: ** The proxy locking style is intended for use with AFP filesystems.
                   31095: ** And since AFP is only supported on MacOSX, the proxy locking is also
                   31096: ** restricted to MacOSX.
                   31097: ** 
                   31098: **
                   31099: ******************* End of the proxy lock implementation **********************
                   31100: ******************************************************************************/
                   31101: 
                   31102: /*
                   31103: ** Initialize the operating system interface.
                   31104: **
                   31105: ** This routine registers all VFS implementations for unix-like operating
                   31106: ** systems.  This routine, and the sqlite3_os_end() routine that follows,
                   31107: ** should be the only routines in this file that are visible from other
                   31108: ** files.
                   31109: **
                   31110: ** This routine is called once during SQLite initialization and by a
                   31111: ** single thread.  The memory allocation and mutex subsystems have not
                   31112: ** necessarily been initialized when this routine is called, and so they
                   31113: ** should not be used.
                   31114: */
                   31115: SQLITE_API int sqlite3_os_init(void){ 
                   31116:   /* 
                   31117:   ** The following macro defines an initializer for an sqlite3_vfs object.
                   31118:   ** The name of the VFS is NAME.  The pAppData is a pointer to a pointer
                   31119:   ** to the "finder" function.  (pAppData is a pointer to a pointer because
                   31120:   ** silly C90 rules prohibit a void* from being cast to a function pointer
                   31121:   ** and so we have to go through the intermediate pointer to avoid problems
                   31122:   ** when compiling with -pedantic-errors on GCC.)
                   31123:   **
                   31124:   ** The FINDER parameter to this macro is the name of the pointer to the
                   31125:   ** finder-function.  The finder-function returns a pointer to the
                   31126:   ** sqlite_io_methods object that implements the desired locking
                   31127:   ** behaviors.  See the division above that contains the IOMETHODS
                   31128:   ** macro for addition information on finder-functions.
                   31129:   **
                   31130:   ** Most finders simply return a pointer to a fixed sqlite3_io_methods
                   31131:   ** object.  But the "autolockIoFinder" available on MacOSX does a little
                   31132:   ** more than that; it looks at the filesystem type that hosts the 
                   31133:   ** database file and tries to choose an locking method appropriate for
                   31134:   ** that filesystem time.
                   31135:   */
                   31136:   #define UNIXVFS(VFSNAME, FINDER) {                        \
                   31137:     3,                    /* iVersion */                    \
                   31138:     sizeof(unixFile),     /* szOsFile */                    \
                   31139:     MAX_PATHNAME,         /* mxPathname */                  \
                   31140:     0,                    /* pNext */                       \
                   31141:     VFSNAME,              /* zName */                       \
                   31142:     (void*)&FINDER,       /* pAppData */                    \
                   31143:     unixOpen,             /* xOpen */                       \
                   31144:     unixDelete,           /* xDelete */                     \
                   31145:     unixAccess,           /* xAccess */                     \
                   31146:     unixFullPathname,     /* xFullPathname */               \
                   31147:     unixDlOpen,           /* xDlOpen */                     \
                   31148:     unixDlError,          /* xDlError */                    \
                   31149:     unixDlSym,            /* xDlSym */                      \
                   31150:     unixDlClose,          /* xDlClose */                    \
                   31151:     unixRandomness,       /* xRandomness */                 \
                   31152:     unixSleep,            /* xSleep */                      \
                   31153:     unixCurrentTime,      /* xCurrentTime */                \
                   31154:     unixGetLastError,     /* xGetLastError */               \
                   31155:     unixCurrentTimeInt64, /* xCurrentTimeInt64 */           \
                   31156:     unixSetSystemCall,    /* xSetSystemCall */              \
                   31157:     unixGetSystemCall,    /* xGetSystemCall */              \
                   31158:     unixNextSystemCall,   /* xNextSystemCall */             \
                   31159:   }
                   31160: 
                   31161:   /*
                   31162:   ** All default VFSes for unix are contained in the following array.
                   31163:   **
                   31164:   ** Note that the sqlite3_vfs.pNext field of the VFS object is modified
                   31165:   ** by the SQLite core when the VFS is registered.  So the following
                   31166:   ** array cannot be const.
                   31167:   */
                   31168:   static sqlite3_vfs aVfs[] = {
                   31169: #if SQLITE_ENABLE_LOCKING_STYLE && (OS_VXWORKS || defined(__APPLE__))
                   31170:     UNIXVFS("unix",          autolockIoFinder ),
                   31171: #else
                   31172:     UNIXVFS("unix",          posixIoFinder ),
                   31173: #endif
                   31174:     UNIXVFS("unix-none",     nolockIoFinder ),
                   31175:     UNIXVFS("unix-dotfile",  dotlockIoFinder ),
                   31176:     UNIXVFS("unix-excl",     posixIoFinder ),
                   31177: #if OS_VXWORKS
                   31178:     UNIXVFS("unix-namedsem", semIoFinder ),
                   31179: #endif
                   31180: #if SQLITE_ENABLE_LOCKING_STYLE
                   31181:     UNIXVFS("unix-posix",    posixIoFinder ),
                   31182: #if !OS_VXWORKS
                   31183:     UNIXVFS("unix-flock",    flockIoFinder ),
                   31184: #endif
                   31185: #endif
                   31186: #if SQLITE_ENABLE_LOCKING_STYLE && defined(__APPLE__)
                   31187:     UNIXVFS("unix-afp",      afpIoFinder ),
                   31188:     UNIXVFS("unix-nfs",      nfsIoFinder ),
                   31189:     UNIXVFS("unix-proxy",    proxyIoFinder ),
                   31190: #endif
                   31191:   };
                   31192:   unsigned int i;          /* Loop counter */
                   31193: 
                   31194:   /* Double-check that the aSyscall[] array has been constructed
                   31195:   ** correctly.  See ticket [bb3a86e890c8e96ab] */
                   31196:   assert( ArraySize(aSyscall)==16 );
                   31197: 
                   31198:   /* Register all VFSes defined in the aVfs[] array */
                   31199:   for(i=0; i<(sizeof(aVfs)/sizeof(sqlite3_vfs)); i++){
                   31200:     sqlite3_vfs_register(&aVfs[i], i==0);
                   31201:   }
                   31202:   return SQLITE_OK; 
                   31203: }
                   31204: 
                   31205: /*
                   31206: ** Shutdown the operating system interface.
                   31207: **
                   31208: ** Some operating systems might need to do some cleanup in this routine,
                   31209: ** to release dynamically allocated objects.  But not on unix.
                   31210: ** This routine is a no-op for unix.
                   31211: */
                   31212: SQLITE_API int sqlite3_os_end(void){ 
                   31213:   return SQLITE_OK; 
                   31214: }
                   31215:  
                   31216: #endif /* SQLITE_OS_UNIX */
                   31217: 
                   31218: /************** End of os_unix.c *********************************************/
                   31219: /************** Begin file os_win.c ******************************************/
                   31220: /*
                   31221: ** 2004 May 22
                   31222: **
                   31223: ** The author disclaims copyright to this source code.  In place of
                   31224: ** a legal notice, here is a blessing:
                   31225: **
                   31226: **    May you do good and not evil.
                   31227: **    May you find forgiveness for yourself and forgive others.
                   31228: **    May you share freely, never taking more than you give.
                   31229: **
                   31230: ******************************************************************************
                   31231: **
                   31232: ** This file contains code that is specific to windows.
                   31233: */
                   31234: #if SQLITE_OS_WIN               /* This file is used for windows only */
                   31235: 
                   31236: 
                   31237: /*
                   31238: ** A Note About Memory Allocation:
                   31239: **
                   31240: ** This driver uses malloc()/free() directly rather than going through
                   31241: ** the SQLite-wrappers sqlite3_malloc()/sqlite3_free().  Those wrappers
                   31242: ** are designed for use on embedded systems where memory is scarce and
                   31243: ** malloc failures happen frequently.  Win32 does not typically run on
                   31244: ** embedded systems, and when it does the developers normally have bigger
                   31245: ** problems to worry about than running out of memory.  So there is not
                   31246: ** a compelling need to use the wrappers.
                   31247: **
                   31248: ** But there is a good reason to not use the wrappers.  If we use the
                   31249: ** wrappers then we will get simulated malloc() failures within this
                   31250: ** driver.  And that causes all kinds of problems for our tests.  We
                   31251: ** could enhance SQLite to deal with simulated malloc failures within
                   31252: ** the OS driver, but the code to deal with those failure would not
                   31253: ** be exercised on Linux (which does not need to malloc() in the driver)
                   31254: ** and so we would have difficulty writing coverage tests for that
                   31255: ** code.  Better to leave the code out, we think.
                   31256: **
                   31257: ** The point of this discussion is as follows:  When creating a new
                   31258: ** OS layer for an embedded system, if you use this file as an example,
                   31259: ** avoid the use of malloc()/free().  Those routines work ok on windows
                   31260: ** desktops but not so well in embedded systems.
                   31261: */
                   31262: 
                   31263: #include <winbase.h>
                   31264: 
                   31265: #ifdef __CYGWIN__
                   31266: # include <sys/cygwin.h>
                   31267: #endif
                   31268: 
                   31269: /*
                   31270: ** Macros used to determine whether or not to use threads.
                   31271: */
                   31272: #if defined(THREADSAFE) && THREADSAFE
                   31273: # define SQLITE_W32_THREADS 1
                   31274: #endif
                   31275: 
                   31276: /*
                   31277: ** Include code that is common to all os_*.c files
                   31278: */
                   31279: /************** Include os_common.h in the middle of os_win.c ****************/
                   31280: /************** Begin file os_common.h ***************************************/
                   31281: /*
                   31282: ** 2004 May 22
                   31283: **
                   31284: ** The author disclaims copyright to this source code.  In place of
                   31285: ** a legal notice, here is a blessing:
                   31286: **
                   31287: **    May you do good and not evil.
                   31288: **    May you find forgiveness for yourself and forgive others.
                   31289: **    May you share freely, never taking more than you give.
                   31290: **
                   31291: ******************************************************************************
                   31292: **
                   31293: ** This file contains macros and a little bit of code that is common to
                   31294: ** all of the platform-specific files (os_*.c) and is #included into those
                   31295: ** files.
                   31296: **
                   31297: ** This file should be #included by the os_*.c files only.  It is not a
                   31298: ** general purpose header file.
                   31299: */
                   31300: #ifndef _OS_COMMON_H_
                   31301: #define _OS_COMMON_H_
                   31302: 
                   31303: /*
                   31304: ** At least two bugs have slipped in because we changed the MEMORY_DEBUG
                   31305: ** macro to SQLITE_DEBUG and some older makefiles have not yet made the
                   31306: ** switch.  The following code should catch this problem at compile-time.
                   31307: */
                   31308: #ifdef MEMORY_DEBUG
                   31309: # error "The MEMORY_DEBUG macro is obsolete.  Use SQLITE_DEBUG instead."
                   31310: #endif
                   31311: 
                   31312: #ifdef SQLITE_DEBUG
                   31313: SQLITE_PRIVATE int sqlite3OSTrace = 0;
                   31314: #define OSTRACE(X)          if( sqlite3OSTrace ) sqlite3DebugPrintf X
                   31315: #else
                   31316: #define OSTRACE(X)
                   31317: #endif
                   31318: 
                   31319: /*
                   31320: ** Macros for performance tracing.  Normally turned off.  Only works
                   31321: ** on i486 hardware.
                   31322: */
                   31323: #ifdef SQLITE_PERFORMANCE_TRACE
                   31324: 
                   31325: /* 
                   31326: ** hwtime.h contains inline assembler code for implementing 
                   31327: ** high-performance timing routines.
                   31328: */
                   31329: /************** Include hwtime.h in the middle of os_common.h ****************/
                   31330: /************** Begin file hwtime.h ******************************************/
                   31331: /*
                   31332: ** 2008 May 27
                   31333: **
                   31334: ** The author disclaims copyright to this source code.  In place of
                   31335: ** a legal notice, here is a blessing:
                   31336: **
                   31337: **    May you do good and not evil.
                   31338: **    May you find forgiveness for yourself and forgive others.
                   31339: **    May you share freely, never taking more than you give.
                   31340: **
                   31341: ******************************************************************************
                   31342: **
                   31343: ** This file contains inline asm code for retrieving "high-performance"
                   31344: ** counters for x86 class CPUs.
                   31345: */
                   31346: #ifndef _HWTIME_H_
                   31347: #define _HWTIME_H_
                   31348: 
                   31349: /*
                   31350: ** The following routine only works on pentium-class (or newer) processors.
                   31351: ** It uses the RDTSC opcode to read the cycle count value out of the
                   31352: ** processor and returns that value.  This can be used for high-res
                   31353: ** profiling.
                   31354: */
                   31355: #if (defined(__GNUC__) || defined(_MSC_VER)) && \
                   31356:       (defined(i386) || defined(__i386__) || defined(_M_IX86))
                   31357: 
                   31358:   #if defined(__GNUC__)
                   31359: 
                   31360:   __inline__ sqlite_uint64 sqlite3Hwtime(void){
                   31361:      unsigned int lo, hi;
                   31362:      __asm__ __volatile__ ("rdtsc" : "=a" (lo), "=d" (hi));
                   31363:      return (sqlite_uint64)hi << 32 | lo;
                   31364:   }
                   31365: 
                   31366:   #elif defined(_MSC_VER)
                   31367: 
                   31368:   __declspec(naked) __inline sqlite_uint64 __cdecl sqlite3Hwtime(void){
                   31369:      __asm {
                   31370:         rdtsc
                   31371:         ret       ; return value at EDX:EAX
                   31372:      }
                   31373:   }
                   31374: 
                   31375:   #endif
                   31376: 
                   31377: #elif (defined(__GNUC__) && defined(__x86_64__))
                   31378: 
                   31379:   __inline__ sqlite_uint64 sqlite3Hwtime(void){
                   31380:       unsigned long val;
                   31381:       __asm__ __volatile__ ("rdtsc" : "=A" (val));
                   31382:       return val;
                   31383:   }
                   31384:  
                   31385: #elif (defined(__GNUC__) && defined(__ppc__))
                   31386: 
                   31387:   __inline__ sqlite_uint64 sqlite3Hwtime(void){
                   31388:       unsigned long long retval;
                   31389:       unsigned long junk;
                   31390:       __asm__ __volatile__ ("\n\
                   31391:           1:      mftbu   %1\n\
                   31392:                   mftb    %L0\n\
                   31393:                   mftbu   %0\n\
                   31394:                   cmpw    %0,%1\n\
                   31395:                   bne     1b"
                   31396:                   : "=r" (retval), "=r" (junk));
                   31397:       return retval;
                   31398:   }
                   31399: 
                   31400: #else
                   31401: 
                   31402:   #error Need implementation of sqlite3Hwtime() for your platform.
                   31403: 
                   31404:   /*
                   31405:   ** To compile without implementing sqlite3Hwtime() for your platform,
                   31406:   ** you can remove the above #error and use the following
                   31407:   ** stub function.  You will lose timing support for many
                   31408:   ** of the debugging and testing utilities, but it should at
                   31409:   ** least compile and run.
                   31410:   */
                   31411: SQLITE_PRIVATE   sqlite_uint64 sqlite3Hwtime(void){ return ((sqlite_uint64)0); }
                   31412: 
                   31413: #endif
                   31414: 
                   31415: #endif /* !defined(_HWTIME_H_) */
                   31416: 
                   31417: /************** End of hwtime.h **********************************************/
                   31418: /************** Continuing where we left off in os_common.h ******************/
                   31419: 
                   31420: static sqlite_uint64 g_start;
                   31421: static sqlite_uint64 g_elapsed;
                   31422: #define TIMER_START       g_start=sqlite3Hwtime()
                   31423: #define TIMER_END         g_elapsed=sqlite3Hwtime()-g_start
                   31424: #define TIMER_ELAPSED     g_elapsed
                   31425: #else
                   31426: #define TIMER_START
                   31427: #define TIMER_END
                   31428: #define TIMER_ELAPSED     ((sqlite_uint64)0)
                   31429: #endif
                   31430: 
                   31431: /*
                   31432: ** If we compile with the SQLITE_TEST macro set, then the following block
                   31433: ** of code will give us the ability to simulate a disk I/O error.  This
                   31434: ** is used for testing the I/O recovery logic.
                   31435: */
                   31436: #ifdef SQLITE_TEST
                   31437: SQLITE_API int sqlite3_io_error_hit = 0;            /* Total number of I/O Errors */
                   31438: SQLITE_API int sqlite3_io_error_hardhit = 0;        /* Number of non-benign errors */
                   31439: SQLITE_API int sqlite3_io_error_pending = 0;        /* Count down to first I/O error */
                   31440: SQLITE_API int sqlite3_io_error_persist = 0;        /* True if I/O errors persist */
                   31441: SQLITE_API int sqlite3_io_error_benign = 0;         /* True if errors are benign */
                   31442: SQLITE_API int sqlite3_diskfull_pending = 0;
                   31443: SQLITE_API int sqlite3_diskfull = 0;
                   31444: #define SimulateIOErrorBenign(X) sqlite3_io_error_benign=(X)
                   31445: #define SimulateIOError(CODE)  \
                   31446:   if( (sqlite3_io_error_persist && sqlite3_io_error_hit) \
                   31447:        || sqlite3_io_error_pending-- == 1 )  \
                   31448:               { local_ioerr(); CODE; }
                   31449: static void local_ioerr(){
                   31450:   IOTRACE(("IOERR\n"));
                   31451:   sqlite3_io_error_hit++;
                   31452:   if( !sqlite3_io_error_benign ) sqlite3_io_error_hardhit++;
                   31453: }
                   31454: #define SimulateDiskfullError(CODE) \
                   31455:    if( sqlite3_diskfull_pending ){ \
                   31456:      if( sqlite3_diskfull_pending == 1 ){ \
                   31457:        local_ioerr(); \
                   31458:        sqlite3_diskfull = 1; \
                   31459:        sqlite3_io_error_hit = 1; \
                   31460:        CODE; \
                   31461:      }else{ \
                   31462:        sqlite3_diskfull_pending--; \
                   31463:      } \
                   31464:    }
                   31465: #else
                   31466: #define SimulateIOErrorBenign(X)
                   31467: #define SimulateIOError(A)
                   31468: #define SimulateDiskfullError(A)
                   31469: #endif
                   31470: 
                   31471: /*
                   31472: ** When testing, keep a count of the number of open files.
                   31473: */
                   31474: #ifdef SQLITE_TEST
                   31475: SQLITE_API int sqlite3_open_file_count = 0;
                   31476: #define OpenCounter(X)  sqlite3_open_file_count+=(X)
                   31477: #else
                   31478: #define OpenCounter(X)
                   31479: #endif
                   31480: 
                   31481: #endif /* !defined(_OS_COMMON_H_) */
                   31482: 
                   31483: /************** End of os_common.h *******************************************/
                   31484: /************** Continuing where we left off in os_win.c *********************/
                   31485: 
                   31486: /*
                   31487: ** Some microsoft compilers lack this definition.
                   31488: */
                   31489: #ifndef INVALID_FILE_ATTRIBUTES
                   31490: # define INVALID_FILE_ATTRIBUTES ((DWORD)-1) 
                   31491: #endif
                   31492: 
                   31493: /*
                   31494: ** Determine if we are dealing with WindowsCE - which has a much
                   31495: ** reduced API.
                   31496: */
                   31497: #if SQLITE_OS_WINCE
                   31498: # define AreFileApisANSI() 1
                   31499: # define FormatMessageW(a,b,c,d,e,f,g) 0
                   31500: #endif
                   31501: 
                   31502: /* Forward references */
                   31503: typedef struct winShm winShm;           /* A connection to shared-memory */
                   31504: typedef struct winShmNode winShmNode;   /* A region of shared-memory */
                   31505: 
                   31506: /*
                   31507: ** WinCE lacks native support for file locking so we have to fake it
                   31508: ** with some code of our own.
                   31509: */
                   31510: #if SQLITE_OS_WINCE
                   31511: typedef struct winceLock {
                   31512:   int nReaders;       /* Number of reader locks obtained */
                   31513:   BOOL bPending;      /* Indicates a pending lock has been obtained */
                   31514:   BOOL bReserved;     /* Indicates a reserved lock has been obtained */
                   31515:   BOOL bExclusive;    /* Indicates an exclusive lock has been obtained */
                   31516: } winceLock;
                   31517: #endif
                   31518: 
                   31519: /*
                   31520: ** The winFile structure is a subclass of sqlite3_file* specific to the win32
                   31521: ** portability layer.
                   31522: */
                   31523: typedef struct winFile winFile;
                   31524: struct winFile {
                   31525:   const sqlite3_io_methods *pMethod; /*** Must be first ***/
                   31526:   sqlite3_vfs *pVfs;      /* The VFS used to open this file */
                   31527:   HANDLE h;               /* Handle for accessing the file */
                   31528:   unsigned char locktype; /* Type of lock currently held on this file */
                   31529:   short sharedLockByte;   /* Randomly chosen byte used as a shared lock */
                   31530:   DWORD lastErrno;        /* The Windows errno from the last I/O error */
                   31531:   DWORD sectorSize;       /* Sector size of the device file is on */
                   31532:   winShm *pShm;           /* Instance of shared memory on this file */
                   31533:   const char *zPath;      /* Full pathname of this file */
                   31534:   int szChunk;            /* Chunk size configured by FCNTL_CHUNK_SIZE */
                   31535: #if SQLITE_OS_WINCE
                   31536:   WCHAR *zDeleteOnClose;  /* Name of file to delete when closing */
                   31537:   HANDLE hMutex;          /* Mutex used to control access to shared lock */  
                   31538:   HANDLE hShared;         /* Shared memory segment used for locking */
                   31539:   winceLock local;        /* Locks obtained by this instance of winFile */
                   31540:   winceLock *shared;      /* Global shared lock memory for the file  */
                   31541: #endif
                   31542: };
                   31543: 
                   31544: 
                   31545: /*
                   31546: ** Forward prototypes.
                   31547: */
                   31548: static int getSectorSize(
                   31549:     sqlite3_vfs *pVfs,
                   31550:     const char *zRelative     /* UTF-8 file name */
                   31551: );
                   31552: 
                   31553: /*
                   31554: ** The following variable is (normally) set once and never changes
                   31555: ** thereafter.  It records whether the operating system is Win95
                   31556: ** or WinNT.
                   31557: **
                   31558: ** 0:   Operating system unknown.
                   31559: ** 1:   Operating system is Win95.
                   31560: ** 2:   Operating system is WinNT.
                   31561: **
                   31562: ** In order to facilitate testing on a WinNT system, the test fixture
                   31563: ** can manually set this value to 1 to emulate Win98 behavior.
                   31564: */
                   31565: #ifdef SQLITE_TEST
                   31566: SQLITE_API int sqlite3_os_type = 0;
                   31567: #else
                   31568: static int sqlite3_os_type = 0;
                   31569: #endif
                   31570: 
                   31571: /*
                   31572: ** Return true (non-zero) if we are running under WinNT, Win2K, WinXP,
                   31573: ** or WinCE.  Return false (zero) for Win95, Win98, or WinME.
                   31574: **
                   31575: ** Here is an interesting observation:  Win95, Win98, and WinME lack
                   31576: ** the LockFileEx() API.  But we can still statically link against that
                   31577: ** API as long as we don't call it when running Win95/98/ME.  A call to
                   31578: ** this routine is used to determine if the host is Win95/98/ME or
                   31579: ** WinNT/2K/XP so that we will know whether or not we can safely call
                   31580: ** the LockFileEx() API.
                   31581: */
                   31582: #if SQLITE_OS_WINCE
                   31583: # define isNT()  (1)
                   31584: #else
                   31585:   static int isNT(void){
                   31586:     if( sqlite3_os_type==0 ){
                   31587:       OSVERSIONINFO sInfo;
                   31588:       sInfo.dwOSVersionInfoSize = sizeof(sInfo);
                   31589:       GetVersionEx(&sInfo);
                   31590:       sqlite3_os_type = sInfo.dwPlatformId==VER_PLATFORM_WIN32_NT ? 2 : 1;
                   31591:     }
                   31592:     return sqlite3_os_type==2;
                   31593:   }
                   31594: #endif /* SQLITE_OS_WINCE */
                   31595: 
                   31596: /*
                   31597: ** Convert a UTF-8 string to microsoft unicode (UTF-16?). 
                   31598: **
                   31599: ** Space to hold the returned string is obtained from malloc.
                   31600: */
                   31601: static WCHAR *utf8ToUnicode(const char *zFilename){
                   31602:   int nChar;
                   31603:   WCHAR *zWideFilename;
                   31604: 
                   31605:   nChar = MultiByteToWideChar(CP_UTF8, 0, zFilename, -1, NULL, 0);
                   31606:   zWideFilename = malloc( nChar*sizeof(zWideFilename[0]) );
                   31607:   if( zWideFilename==0 ){
                   31608:     return 0;
                   31609:   }
                   31610:   nChar = MultiByteToWideChar(CP_UTF8, 0, zFilename, -1, zWideFilename, nChar);
                   31611:   if( nChar==0 ){
                   31612:     free(zWideFilename);
                   31613:     zWideFilename = 0;
                   31614:   }
                   31615:   return zWideFilename;
                   31616: }
                   31617: 
                   31618: /*
                   31619: ** Convert microsoft unicode to UTF-8.  Space to hold the returned string is
                   31620: ** obtained from malloc().
                   31621: */
                   31622: static char *unicodeToUtf8(const WCHAR *zWideFilename){
                   31623:   int nByte;
                   31624:   char *zFilename;
                   31625: 
                   31626:   nByte = WideCharToMultiByte(CP_UTF8, 0, zWideFilename, -1, 0, 0, 0, 0);
                   31627:   zFilename = malloc( nByte );
                   31628:   if( zFilename==0 ){
                   31629:     return 0;
                   31630:   }
                   31631:   nByte = WideCharToMultiByte(CP_UTF8, 0, zWideFilename, -1, zFilename, nByte,
                   31632:                               0, 0);
                   31633:   if( nByte == 0 ){
                   31634:     free(zFilename);
                   31635:     zFilename = 0;
                   31636:   }
                   31637:   return zFilename;
                   31638: }
                   31639: 
                   31640: /*
                   31641: ** Convert an ansi string to microsoft unicode, based on the
                   31642: ** current codepage settings for file apis.
                   31643: ** 
                   31644: ** Space to hold the returned string is obtained
                   31645: ** from malloc.
                   31646: */
                   31647: static WCHAR *mbcsToUnicode(const char *zFilename){
                   31648:   int nByte;
                   31649:   WCHAR *zMbcsFilename;
                   31650:   int codepage = AreFileApisANSI() ? CP_ACP : CP_OEMCP;
                   31651: 
                   31652:   nByte = MultiByteToWideChar(codepage, 0, zFilename, -1, NULL,0)*sizeof(WCHAR);
                   31653:   zMbcsFilename = malloc( nByte*sizeof(zMbcsFilename[0]) );
                   31654:   if( zMbcsFilename==0 ){
                   31655:     return 0;
                   31656:   }
                   31657:   nByte = MultiByteToWideChar(codepage, 0, zFilename, -1, zMbcsFilename, nByte);
                   31658:   if( nByte==0 ){
                   31659:     free(zMbcsFilename);
                   31660:     zMbcsFilename = 0;
                   31661:   }
                   31662:   return zMbcsFilename;
                   31663: }
                   31664: 
                   31665: /*
                   31666: ** Convert microsoft unicode to multibyte character string, based on the
                   31667: ** user's Ansi codepage.
                   31668: **
                   31669: ** Space to hold the returned string is obtained from
                   31670: ** malloc().
                   31671: */
                   31672: static char *unicodeToMbcs(const WCHAR *zWideFilename){
                   31673:   int nByte;
                   31674:   char *zFilename;
                   31675:   int codepage = AreFileApisANSI() ? CP_ACP : CP_OEMCP;
                   31676: 
                   31677:   nByte = WideCharToMultiByte(codepage, 0, zWideFilename, -1, 0, 0, 0, 0);
                   31678:   zFilename = malloc( nByte );
                   31679:   if( zFilename==0 ){
                   31680:     return 0;
                   31681:   }
                   31682:   nByte = WideCharToMultiByte(codepage, 0, zWideFilename, -1, zFilename, nByte,
                   31683:                               0, 0);
                   31684:   if( nByte == 0 ){
                   31685:     free(zFilename);
                   31686:     zFilename = 0;
                   31687:   }
                   31688:   return zFilename;
                   31689: }
                   31690: 
                   31691: /*
                   31692: ** Convert multibyte character string to UTF-8.  Space to hold the
                   31693: ** returned string is obtained from malloc().
                   31694: */
                   31695: SQLITE_API char *sqlite3_win32_mbcs_to_utf8(const char *zFilename){
                   31696:   char *zFilenameUtf8;
                   31697:   WCHAR *zTmpWide;
                   31698: 
                   31699:   zTmpWide = mbcsToUnicode(zFilename);
                   31700:   if( zTmpWide==0 ){
                   31701:     return 0;
                   31702:   }
                   31703:   zFilenameUtf8 = unicodeToUtf8(zTmpWide);
                   31704:   free(zTmpWide);
                   31705:   return zFilenameUtf8;
                   31706: }
                   31707: 
                   31708: /*
                   31709: ** Convert UTF-8 to multibyte character string.  Space to hold the 
                   31710: ** returned string is obtained from malloc().
                   31711: */
                   31712: SQLITE_API char *sqlite3_win32_utf8_to_mbcs(const char *zFilename){
                   31713:   char *zFilenameMbcs;
                   31714:   WCHAR *zTmpWide;
                   31715: 
                   31716:   zTmpWide = utf8ToUnicode(zFilename);
                   31717:   if( zTmpWide==0 ){
                   31718:     return 0;
                   31719:   }
                   31720:   zFilenameMbcs = unicodeToMbcs(zTmpWide);
                   31721:   free(zTmpWide);
                   31722:   return zFilenameMbcs;
                   31723: }
                   31724: 
                   31725: 
                   31726: /*
                   31727: ** The return value of getLastErrorMsg
                   31728: ** is zero if the error message fits in the buffer, or non-zero
                   31729: ** otherwise (if the message was truncated).
                   31730: */
                   31731: static int getLastErrorMsg(int nBuf, char *zBuf){
                   31732:   /* FormatMessage returns 0 on failure.  Otherwise it
                   31733:   ** returns the number of TCHARs written to the output
                   31734:   ** buffer, excluding the terminating null char.
                   31735:   */
                   31736:   DWORD error = GetLastError();
                   31737:   DWORD dwLen = 0;
                   31738:   char *zOut = 0;
                   31739: 
                   31740:   if( isNT() ){
                   31741:     WCHAR *zTempWide = NULL;
                   31742:     dwLen = FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
                   31743:                            NULL,
                   31744:                            error,
                   31745:                            0,
                   31746:                            (LPWSTR) &zTempWide,
                   31747:                            0,
                   31748:                            0);
                   31749:     if( dwLen > 0 ){
                   31750:       /* allocate a buffer and convert to UTF8 */
                   31751:       zOut = unicodeToUtf8(zTempWide);
                   31752:       /* free the system buffer allocated by FormatMessage */
                   31753:       LocalFree(zTempWide);
                   31754:     }
                   31755: /* isNT() is 1 if SQLITE_OS_WINCE==1, so this else is never executed. 
                   31756: ** Since the ASCII version of these Windows API do not exist for WINCE,
                   31757: ** it's important to not reference them for WINCE builds.
                   31758: */
                   31759: #if SQLITE_OS_WINCE==0
                   31760:   }else{
                   31761:     char *zTemp = NULL;
                   31762:     dwLen = FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
                   31763:                            NULL,
                   31764:                            error,
                   31765:                            0,
                   31766:                            (LPSTR) &zTemp,
                   31767:                            0,
                   31768:                            0);
                   31769:     if( dwLen > 0 ){
                   31770:       /* allocate a buffer and convert to UTF8 */
                   31771:       zOut = sqlite3_win32_mbcs_to_utf8(zTemp);
                   31772:       /* free the system buffer allocated by FormatMessage */
                   31773:       LocalFree(zTemp);
                   31774:     }
                   31775: #endif
                   31776:   }
                   31777:   if( 0 == dwLen ){
                   31778:     sqlite3_snprintf(nBuf, zBuf, "OsError 0x%x (%u)", error, error);
                   31779:   }else{
                   31780:     /* copy a maximum of nBuf chars to output buffer */
                   31781:     sqlite3_snprintf(nBuf, zBuf, "%s", zOut);
                   31782:     /* free the UTF8 buffer */
                   31783:     free(zOut);
                   31784:   }
                   31785:   return 0;
                   31786: }
                   31787: 
                   31788: /*
                   31789: **
                   31790: ** This function - winLogErrorAtLine() - is only ever called via the macro
                   31791: ** winLogError().
                   31792: **
                   31793: ** This routine is invoked after an error occurs in an OS function.
                   31794: ** It logs a message using sqlite3_log() containing the current value of
                   31795: ** error code and, if possible, the human-readable equivalent from 
                   31796: ** FormatMessage.
                   31797: **
                   31798: ** The first argument passed to the macro should be the error code that
                   31799: ** will be returned to SQLite (e.g. SQLITE_IOERR_DELETE, SQLITE_CANTOPEN). 
                   31800: ** The two subsequent arguments should be the name of the OS function that
                   31801: ** failed and the the associated file-system path, if any.
                   31802: */
                   31803: #define winLogError(a,b,c)     winLogErrorAtLine(a,b,c,__LINE__)
                   31804: static int winLogErrorAtLine(
                   31805:   int errcode,                    /* SQLite error code */
                   31806:   const char *zFunc,              /* Name of OS function that failed */
                   31807:   const char *zPath,              /* File path associated with error */
                   31808:   int iLine                       /* Source line number where error occurred */
                   31809: ){
                   31810:   char zMsg[500];                 /* Human readable error text */
                   31811:   int i;                          /* Loop counter */
                   31812:   DWORD iErrno = GetLastError();  /* Error code */
                   31813: 
                   31814:   zMsg[0] = 0;
                   31815:   getLastErrorMsg(sizeof(zMsg), zMsg);
                   31816:   assert( errcode!=SQLITE_OK );
                   31817:   if( zPath==0 ) zPath = "";
                   31818:   for(i=0; zMsg[i] && zMsg[i]!='\r' && zMsg[i]!='\n'; i++){}
                   31819:   zMsg[i] = 0;
                   31820:   sqlite3_log(errcode,
                   31821:       "os_win.c:%d: (%d) %s(%s) - %s",
                   31822:       iLine, iErrno, zFunc, zPath, zMsg
                   31823:   );
                   31824: 
                   31825:   return errcode;
                   31826: }
                   31827: 
                   31828: #if SQLITE_OS_WINCE
                   31829: /*************************************************************************
                   31830: ** This section contains code for WinCE only.
                   31831: */
                   31832: /*
                   31833: ** WindowsCE does not have a localtime() function.  So create a
                   31834: ** substitute.
                   31835: */
                   31836: struct tm *__cdecl localtime(const time_t *t)
                   31837: {
                   31838:   static struct tm y;
                   31839:   FILETIME uTm, lTm;
                   31840:   SYSTEMTIME pTm;
                   31841:   sqlite3_int64 t64;
                   31842:   t64 = *t;
                   31843:   t64 = (t64 + 11644473600)*10000000;
                   31844:   uTm.dwLowDateTime = (DWORD)(t64 & 0xFFFFFFFF);
                   31845:   uTm.dwHighDateTime= (DWORD)(t64 >> 32);
                   31846:   FileTimeToLocalFileTime(&uTm,&lTm);
                   31847:   FileTimeToSystemTime(&lTm,&pTm);
                   31848:   y.tm_year = pTm.wYear - 1900;
                   31849:   y.tm_mon = pTm.wMonth - 1;
                   31850:   y.tm_wday = pTm.wDayOfWeek;
                   31851:   y.tm_mday = pTm.wDay;
                   31852:   y.tm_hour = pTm.wHour;
                   31853:   y.tm_min = pTm.wMinute;
                   31854:   y.tm_sec = pTm.wSecond;
                   31855:   return &y;
                   31856: }
                   31857: 
                   31858: /* This will never be called, but defined to make the code compile */
                   31859: #define GetTempPathA(a,b)
                   31860: 
                   31861: #define LockFile(a,b,c,d,e)       winceLockFile(&a, b, c, d, e)
                   31862: #define UnlockFile(a,b,c,d,e)     winceUnlockFile(&a, b, c, d, e)
                   31863: #define LockFileEx(a,b,c,d,e,f)   winceLockFileEx(&a, b, c, d, e, f)
                   31864: 
                   31865: #define HANDLE_TO_WINFILE(a) (winFile*)&((char*)a)[-(int)offsetof(winFile,h)]
                   31866: 
                   31867: /*
                   31868: ** Acquire a lock on the handle h
                   31869: */
                   31870: static void winceMutexAcquire(HANDLE h){
                   31871:    DWORD dwErr;
                   31872:    do {
                   31873:      dwErr = WaitForSingleObject(h, INFINITE);
                   31874:    } while (dwErr != WAIT_OBJECT_0 && dwErr != WAIT_ABANDONED);
                   31875: }
                   31876: /*
                   31877: ** Release a lock acquired by winceMutexAcquire()
                   31878: */
                   31879: #define winceMutexRelease(h) ReleaseMutex(h)
                   31880: 
                   31881: /*
                   31882: ** Create the mutex and shared memory used for locking in the file
                   31883: ** descriptor pFile
                   31884: */
                   31885: static BOOL winceCreateLock(const char *zFilename, winFile *pFile){
                   31886:   WCHAR *zTok;
                   31887:   WCHAR *zName = utf8ToUnicode(zFilename);
                   31888:   BOOL bInit = TRUE;
                   31889: 
                   31890:   /* Initialize the local lockdata */
                   31891:   ZeroMemory(&pFile->local, sizeof(pFile->local));
                   31892: 
                   31893:   /* Replace the backslashes from the filename and lowercase it
                   31894:   ** to derive a mutex name. */
                   31895:   zTok = CharLowerW(zName);
                   31896:   for (;*zTok;zTok++){
                   31897:     if (*zTok == '\\') *zTok = '_';
                   31898:   }
                   31899: 
                   31900:   /* Create/open the named mutex */
                   31901:   pFile->hMutex = CreateMutexW(NULL, FALSE, zName);
                   31902:   if (!pFile->hMutex){
                   31903:     pFile->lastErrno = GetLastError();
                   31904:     winLogError(SQLITE_ERROR, "winceCreateLock1", zFilename);
                   31905:     free(zName);
                   31906:     return FALSE;
                   31907:   }
                   31908: 
                   31909:   /* Acquire the mutex before continuing */
                   31910:   winceMutexAcquire(pFile->hMutex);
                   31911:   
                   31912:   /* Since the names of named mutexes, semaphores, file mappings etc are 
                   31913:   ** case-sensitive, take advantage of that by uppercasing the mutex name
                   31914:   ** and using that as the shared filemapping name.
                   31915:   */
                   31916:   CharUpperW(zName);
                   31917:   pFile->hShared = CreateFileMappingW(INVALID_HANDLE_VALUE, NULL,
                   31918:                                        PAGE_READWRITE, 0, sizeof(winceLock),
                   31919:                                        zName);  
                   31920: 
                   31921:   /* Set a flag that indicates we're the first to create the memory so it 
                   31922:   ** must be zero-initialized */
                   31923:   if (GetLastError() == ERROR_ALREADY_EXISTS){
                   31924:     bInit = FALSE;
                   31925:   }
                   31926: 
                   31927:   free(zName);
                   31928: 
                   31929:   /* If we succeeded in making the shared memory handle, map it. */
                   31930:   if (pFile->hShared){
                   31931:     pFile->shared = (winceLock*)MapViewOfFile(pFile->hShared, 
                   31932:              FILE_MAP_READ|FILE_MAP_WRITE, 0, 0, sizeof(winceLock));
                   31933:     /* If mapping failed, close the shared memory handle and erase it */
                   31934:     if (!pFile->shared){
                   31935:       pFile->lastErrno = GetLastError();
                   31936:       winLogError(SQLITE_ERROR, "winceCreateLock2", zFilename);
                   31937:       CloseHandle(pFile->hShared);
                   31938:       pFile->hShared = NULL;
                   31939:     }
                   31940:   }
                   31941: 
                   31942:   /* If shared memory could not be created, then close the mutex and fail */
                   31943:   if (pFile->hShared == NULL){
                   31944:     winceMutexRelease(pFile->hMutex);
                   31945:     CloseHandle(pFile->hMutex);
                   31946:     pFile->hMutex = NULL;
                   31947:     return FALSE;
                   31948:   }
                   31949:   
                   31950:   /* Initialize the shared memory if we're supposed to */
                   31951:   if (bInit) {
                   31952:     ZeroMemory(pFile->shared, sizeof(winceLock));
                   31953:   }
                   31954: 
                   31955:   winceMutexRelease(pFile->hMutex);
                   31956:   return TRUE;
                   31957: }
                   31958: 
                   31959: /*
                   31960: ** Destroy the part of winFile that deals with wince locks
                   31961: */
                   31962: static void winceDestroyLock(winFile *pFile){
                   31963:   if (pFile->hMutex){
                   31964:     /* Acquire the mutex */
                   31965:     winceMutexAcquire(pFile->hMutex);
                   31966: 
                   31967:     /* The following blocks should probably assert in debug mode, but they
                   31968:        are to cleanup in case any locks remained open */
                   31969:     if (pFile->local.nReaders){
                   31970:       pFile->shared->nReaders --;
                   31971:     }
                   31972:     if (pFile->local.bReserved){
                   31973:       pFile->shared->bReserved = FALSE;
                   31974:     }
                   31975:     if (pFile->local.bPending){
                   31976:       pFile->shared->bPending = FALSE;
                   31977:     }
                   31978:     if (pFile->local.bExclusive){
                   31979:       pFile->shared->bExclusive = FALSE;
                   31980:     }
                   31981: 
                   31982:     /* De-reference and close our copy of the shared memory handle */
                   31983:     UnmapViewOfFile(pFile->shared);
                   31984:     CloseHandle(pFile->hShared);
                   31985: 
                   31986:     /* Done with the mutex */
                   31987:     winceMutexRelease(pFile->hMutex);    
                   31988:     CloseHandle(pFile->hMutex);
                   31989:     pFile->hMutex = NULL;
                   31990:   }
                   31991: }
                   31992: 
                   31993: /* 
                   31994: ** An implementation of the LockFile() API of windows for wince
                   31995: */
                   31996: static BOOL winceLockFile(
                   31997:   HANDLE *phFile,
                   31998:   DWORD dwFileOffsetLow,
                   31999:   DWORD dwFileOffsetHigh,
                   32000:   DWORD nNumberOfBytesToLockLow,
                   32001:   DWORD nNumberOfBytesToLockHigh
                   32002: ){
                   32003:   winFile *pFile = HANDLE_TO_WINFILE(phFile);
                   32004:   BOOL bReturn = FALSE;
                   32005: 
                   32006:   UNUSED_PARAMETER(dwFileOffsetHigh);
                   32007:   UNUSED_PARAMETER(nNumberOfBytesToLockHigh);
                   32008: 
                   32009:   if (!pFile->hMutex) return TRUE;
                   32010:   winceMutexAcquire(pFile->hMutex);
                   32011: 
                   32012:   /* Wanting an exclusive lock? */
                   32013:   if (dwFileOffsetLow == (DWORD)SHARED_FIRST
                   32014:        && nNumberOfBytesToLockLow == (DWORD)SHARED_SIZE){
                   32015:     if (pFile->shared->nReaders == 0 && pFile->shared->bExclusive == 0){
                   32016:        pFile->shared->bExclusive = TRUE;
                   32017:        pFile->local.bExclusive = TRUE;
                   32018:        bReturn = TRUE;
                   32019:     }
                   32020:   }
                   32021: 
                   32022:   /* Want a read-only lock? */
                   32023:   else if (dwFileOffsetLow == (DWORD)SHARED_FIRST &&
                   32024:            nNumberOfBytesToLockLow == 1){
                   32025:     if (pFile->shared->bExclusive == 0){
                   32026:       pFile->local.nReaders ++;
                   32027:       if (pFile->local.nReaders == 1){
                   32028:         pFile->shared->nReaders ++;
                   32029:       }
                   32030:       bReturn = TRUE;
                   32031:     }
                   32032:   }
                   32033: 
                   32034:   /* Want a pending lock? */
                   32035:   else if (dwFileOffsetLow == (DWORD)PENDING_BYTE && nNumberOfBytesToLockLow == 1){
                   32036:     /* If no pending lock has been acquired, then acquire it */
                   32037:     if (pFile->shared->bPending == 0) {
                   32038:       pFile->shared->bPending = TRUE;
                   32039:       pFile->local.bPending = TRUE;
                   32040:       bReturn = TRUE;
                   32041:     }
                   32042:   }
                   32043: 
                   32044:   /* Want a reserved lock? */
                   32045:   else if (dwFileOffsetLow == (DWORD)RESERVED_BYTE && nNumberOfBytesToLockLow == 1){
                   32046:     if (pFile->shared->bReserved == 0) {
                   32047:       pFile->shared->bReserved = TRUE;
                   32048:       pFile->local.bReserved = TRUE;
                   32049:       bReturn = TRUE;
                   32050:     }
                   32051:   }
                   32052: 
                   32053:   winceMutexRelease(pFile->hMutex);
                   32054:   return bReturn;
                   32055: }
                   32056: 
                   32057: /*
                   32058: ** An implementation of the UnlockFile API of windows for wince
                   32059: */
                   32060: static BOOL winceUnlockFile(
                   32061:   HANDLE *phFile,
                   32062:   DWORD dwFileOffsetLow,
                   32063:   DWORD dwFileOffsetHigh,
                   32064:   DWORD nNumberOfBytesToUnlockLow,
                   32065:   DWORD nNumberOfBytesToUnlockHigh
                   32066: ){
                   32067:   winFile *pFile = HANDLE_TO_WINFILE(phFile);
                   32068:   BOOL bReturn = FALSE;
                   32069: 
                   32070:   UNUSED_PARAMETER(dwFileOffsetHigh);
                   32071:   UNUSED_PARAMETER(nNumberOfBytesToUnlockHigh);
                   32072: 
                   32073:   if (!pFile->hMutex) return TRUE;
                   32074:   winceMutexAcquire(pFile->hMutex);
                   32075: 
                   32076:   /* Releasing a reader lock or an exclusive lock */
                   32077:   if (dwFileOffsetLow == (DWORD)SHARED_FIRST){
                   32078:     /* Did we have an exclusive lock? */
                   32079:     if (pFile->local.bExclusive){
                   32080:       assert(nNumberOfBytesToUnlockLow == (DWORD)SHARED_SIZE);
                   32081:       pFile->local.bExclusive = FALSE;
                   32082:       pFile->shared->bExclusive = FALSE;
                   32083:       bReturn = TRUE;
                   32084:     }
                   32085: 
                   32086:     /* Did we just have a reader lock? */
                   32087:     else if (pFile->local.nReaders){
                   32088:       assert(nNumberOfBytesToUnlockLow == (DWORD)SHARED_SIZE || nNumberOfBytesToUnlockLow == 1);
                   32089:       pFile->local.nReaders --;
                   32090:       if (pFile->local.nReaders == 0)
                   32091:       {
                   32092:         pFile->shared->nReaders --;
                   32093:       }
                   32094:       bReturn = TRUE;
                   32095:     }
                   32096:   }
                   32097: 
                   32098:   /* Releasing a pending lock */
                   32099:   else if (dwFileOffsetLow == (DWORD)PENDING_BYTE && nNumberOfBytesToUnlockLow == 1){
                   32100:     if (pFile->local.bPending){
                   32101:       pFile->local.bPending = FALSE;
                   32102:       pFile->shared->bPending = FALSE;
                   32103:       bReturn = TRUE;
                   32104:     }
                   32105:   }
                   32106:   /* Releasing a reserved lock */
                   32107:   else if (dwFileOffsetLow == (DWORD)RESERVED_BYTE && nNumberOfBytesToUnlockLow == 1){
                   32108:     if (pFile->local.bReserved) {
                   32109:       pFile->local.bReserved = FALSE;
                   32110:       pFile->shared->bReserved = FALSE;
                   32111:       bReturn = TRUE;
                   32112:     }
                   32113:   }
                   32114: 
                   32115:   winceMutexRelease(pFile->hMutex);
                   32116:   return bReturn;
                   32117: }
                   32118: 
                   32119: /*
                   32120: ** An implementation of the LockFileEx() API of windows for wince
                   32121: */
                   32122: static BOOL winceLockFileEx(
                   32123:   HANDLE *phFile,
                   32124:   DWORD dwFlags,
                   32125:   DWORD dwReserved,
                   32126:   DWORD nNumberOfBytesToLockLow,
                   32127:   DWORD nNumberOfBytesToLockHigh,
                   32128:   LPOVERLAPPED lpOverlapped
                   32129: ){
                   32130:   UNUSED_PARAMETER(dwReserved);
                   32131:   UNUSED_PARAMETER(nNumberOfBytesToLockHigh);
                   32132: 
                   32133:   /* If the caller wants a shared read lock, forward this call
                   32134:   ** to winceLockFile */
                   32135:   if (lpOverlapped->Offset == (DWORD)SHARED_FIRST &&
                   32136:       dwFlags == 1 &&
                   32137:       nNumberOfBytesToLockLow == (DWORD)SHARED_SIZE){
                   32138:     return winceLockFile(phFile, SHARED_FIRST, 0, 1, 0);
                   32139:   }
                   32140:   return FALSE;
                   32141: }
                   32142: /*
                   32143: ** End of the special code for wince
                   32144: *****************************************************************************/
                   32145: #endif /* SQLITE_OS_WINCE */
                   32146: 
                   32147: /*****************************************************************************
                   32148: ** The next group of routines implement the I/O methods specified
                   32149: ** by the sqlite3_io_methods object.
                   32150: ******************************************************************************/
                   32151: 
                   32152: /*
                   32153: ** Some microsoft compilers lack this definition.
                   32154: */
                   32155: #ifndef INVALID_SET_FILE_POINTER
                   32156: # define INVALID_SET_FILE_POINTER ((DWORD)-1)
                   32157: #endif
                   32158: 
                   32159: /*
                   32160: ** Move the current position of the file handle passed as the first 
                   32161: ** argument to offset iOffset within the file. If successful, return 0. 
                   32162: ** Otherwise, set pFile->lastErrno and return non-zero.
                   32163: */
                   32164: static int seekWinFile(winFile *pFile, sqlite3_int64 iOffset){
                   32165:   LONG upperBits;                 /* Most sig. 32 bits of new offset */
                   32166:   LONG lowerBits;                 /* Least sig. 32 bits of new offset */
                   32167:   DWORD dwRet;                    /* Value returned by SetFilePointer() */
                   32168: 
                   32169:   upperBits = (LONG)((iOffset>>32) & 0x7fffffff);
                   32170:   lowerBits = (LONG)(iOffset & 0xffffffff);
                   32171: 
                   32172:   /* API oddity: If successful, SetFilePointer() returns a dword 
                   32173:   ** containing the lower 32-bits of the new file-offset. Or, if it fails,
                   32174:   ** it returns INVALID_SET_FILE_POINTER. However according to MSDN, 
                   32175:   ** INVALID_SET_FILE_POINTER may also be a valid new offset. So to determine 
1.1.1.3 ! misho    32176:   ** whether an error has actually occurred, it is also necessary to call 
1.1       misho    32177:   ** GetLastError().
                   32178:   */
                   32179:   dwRet = SetFilePointer(pFile->h, lowerBits, &upperBits, FILE_BEGIN);
                   32180:   if( (dwRet==INVALID_SET_FILE_POINTER && GetLastError()!=NO_ERROR) ){
                   32181:     pFile->lastErrno = GetLastError();
                   32182:     winLogError(SQLITE_IOERR_SEEK, "seekWinFile", pFile->zPath);
                   32183:     return 1;
                   32184:   }
                   32185: 
                   32186:   return 0;
                   32187: }
                   32188: 
                   32189: /*
                   32190: ** Close a file.
                   32191: **
                   32192: ** It is reported that an attempt to close a handle might sometimes
                   32193: ** fail.  This is a very unreasonable result, but windows is notorious
                   32194: ** for being unreasonable so I do not doubt that it might happen.  If
                   32195: ** the close fails, we pause for 100 milliseconds and try again.  As
                   32196: ** many as MX_CLOSE_ATTEMPT attempts to close the handle are made before
                   32197: ** giving up and returning an error.
                   32198: */
                   32199: #define MX_CLOSE_ATTEMPT 3
                   32200: static int winClose(sqlite3_file *id){
                   32201:   int rc, cnt = 0;
                   32202:   winFile *pFile = (winFile*)id;
                   32203: 
                   32204:   assert( id!=0 );
                   32205:   assert( pFile->pShm==0 );
                   32206:   OSTRACE(("CLOSE %d\n", pFile->h));
                   32207:   do{
                   32208:     rc = CloseHandle(pFile->h);
                   32209:     /* SimulateIOError( rc=0; cnt=MX_CLOSE_ATTEMPT; ); */
                   32210:   }while( rc==0 && ++cnt < MX_CLOSE_ATTEMPT && (Sleep(100), 1) );
                   32211: #if SQLITE_OS_WINCE
                   32212: #define WINCE_DELETION_ATTEMPTS 3
                   32213:   winceDestroyLock(pFile);
                   32214:   if( pFile->zDeleteOnClose ){
                   32215:     int cnt = 0;
                   32216:     while(
                   32217:            DeleteFileW(pFile->zDeleteOnClose)==0
                   32218:         && GetFileAttributesW(pFile->zDeleteOnClose)!=0xffffffff 
                   32219:         && cnt++ < WINCE_DELETION_ATTEMPTS
                   32220:     ){
                   32221:        Sleep(100);  /* Wait a little before trying again */
                   32222:     }
                   32223:     free(pFile->zDeleteOnClose);
                   32224:   }
                   32225: #endif
                   32226:   OSTRACE(("CLOSE %d %s\n", pFile->h, rc ? "ok" : "failed"));
                   32227:   OpenCounter(-1);
                   32228:   return rc ? SQLITE_OK
                   32229:             : winLogError(SQLITE_IOERR_CLOSE, "winClose", pFile->zPath);
                   32230: }
                   32231: 
                   32232: /*
                   32233: ** Read data from a file into a buffer.  Return SQLITE_OK if all
                   32234: ** bytes were read successfully and SQLITE_IOERR if anything goes
                   32235: ** wrong.
                   32236: */
                   32237: static int winRead(
                   32238:   sqlite3_file *id,          /* File to read from */
                   32239:   void *pBuf,                /* Write content into this buffer */
                   32240:   int amt,                   /* Number of bytes to read */
                   32241:   sqlite3_int64 offset       /* Begin reading at this offset */
                   32242: ){
                   32243:   winFile *pFile = (winFile*)id;  /* file handle */
                   32244:   DWORD nRead;                    /* Number of bytes actually read from file */
                   32245: 
                   32246:   assert( id!=0 );
                   32247:   SimulateIOError(return SQLITE_IOERR_READ);
                   32248:   OSTRACE(("READ %d lock=%d\n", pFile->h, pFile->locktype));
                   32249: 
                   32250:   if( seekWinFile(pFile, offset) ){
                   32251:     return SQLITE_FULL;
                   32252:   }
                   32253:   if( !ReadFile(pFile->h, pBuf, amt, &nRead, 0) ){
                   32254:     pFile->lastErrno = GetLastError();
                   32255:     return winLogError(SQLITE_IOERR_READ, "winRead", pFile->zPath);
                   32256:   }
                   32257:   if( nRead<(DWORD)amt ){
                   32258:     /* Unread parts of the buffer must be zero-filled */
                   32259:     memset(&((char*)pBuf)[nRead], 0, amt-nRead);
                   32260:     return SQLITE_IOERR_SHORT_READ;
                   32261:   }
                   32262: 
                   32263:   return SQLITE_OK;
                   32264: }
                   32265: 
                   32266: /*
                   32267: ** Write data from a buffer into a file.  Return SQLITE_OK on success
                   32268: ** or some other error code on failure.
                   32269: */
                   32270: static int winWrite(
                   32271:   sqlite3_file *id,               /* File to write into */
                   32272:   const void *pBuf,               /* The bytes to be written */
                   32273:   int amt,                        /* Number of bytes to write */
                   32274:   sqlite3_int64 offset            /* Offset into the file to begin writing at */
                   32275: ){
1.1.1.3 ! misho    32276:   int rc;                         /* True if error has occurred, else false */
1.1       misho    32277:   winFile *pFile = (winFile*)id;  /* File handle */
                   32278: 
                   32279:   assert( amt>0 );
                   32280:   assert( pFile );
                   32281:   SimulateIOError(return SQLITE_IOERR_WRITE);
                   32282:   SimulateDiskfullError(return SQLITE_FULL);
                   32283: 
                   32284:   OSTRACE(("WRITE %d lock=%d\n", pFile->h, pFile->locktype));
                   32285: 
                   32286:   rc = seekWinFile(pFile, offset);
                   32287:   if( rc==0 ){
                   32288:     u8 *aRem = (u8 *)pBuf;        /* Data yet to be written */
                   32289:     int nRem = amt;               /* Number of bytes yet to be written */
                   32290:     DWORD nWrite;                 /* Bytes written by each WriteFile() call */
                   32291: 
                   32292:     while( nRem>0 && WriteFile(pFile->h, aRem, nRem, &nWrite, 0) && nWrite>0 ){
                   32293:       aRem += nWrite;
                   32294:       nRem -= nWrite;
                   32295:     }
                   32296:     if( nRem>0 ){
                   32297:       pFile->lastErrno = GetLastError();
                   32298:       rc = 1;
                   32299:     }
                   32300:   }
                   32301: 
                   32302:   if( rc ){
                   32303:     if(   ( pFile->lastErrno==ERROR_HANDLE_DISK_FULL )
                   32304:        || ( pFile->lastErrno==ERROR_DISK_FULL )){
                   32305:       return SQLITE_FULL;
                   32306:     }
                   32307:     return winLogError(SQLITE_IOERR_WRITE, "winWrite", pFile->zPath);
                   32308:   }
                   32309:   return SQLITE_OK;
                   32310: }
                   32311: 
                   32312: /*
                   32313: ** Truncate an open file to a specified size
                   32314: */
                   32315: static int winTruncate(sqlite3_file *id, sqlite3_int64 nByte){
                   32316:   winFile *pFile = (winFile*)id;  /* File handle object */
                   32317:   int rc = SQLITE_OK;             /* Return code for this function */
                   32318: 
                   32319:   assert( pFile );
                   32320: 
                   32321:   OSTRACE(("TRUNCATE %d %lld\n", pFile->h, nByte));
                   32322:   SimulateIOError(return SQLITE_IOERR_TRUNCATE);
                   32323: 
                   32324:   /* If the user has configured a chunk-size for this file, truncate the
                   32325:   ** file so that it consists of an integer number of chunks (i.e. the
                   32326:   ** actual file size after the operation may be larger than the requested
                   32327:   ** size).
                   32328:   */
                   32329:   if( pFile->szChunk ){
                   32330:     nByte = ((nByte + pFile->szChunk - 1)/pFile->szChunk) * pFile->szChunk;
                   32331:   }
                   32332: 
                   32333:   /* SetEndOfFile() returns non-zero when successful, or zero when it fails. */
                   32334:   if( seekWinFile(pFile, nByte) ){
                   32335:     rc = winLogError(SQLITE_IOERR_TRUNCATE, "winTruncate1", pFile->zPath);
                   32336:   }else if( 0==SetEndOfFile(pFile->h) ){
                   32337:     pFile->lastErrno = GetLastError();
                   32338:     rc = winLogError(SQLITE_IOERR_TRUNCATE, "winTruncate2", pFile->zPath);
                   32339:   }
                   32340: 
                   32341:   OSTRACE(("TRUNCATE %d %lld %s\n", pFile->h, nByte, rc ? "failed" : "ok"));
                   32342:   return rc;
                   32343: }
                   32344: 
                   32345: #ifdef SQLITE_TEST
                   32346: /*
                   32347: ** Count the number of fullsyncs and normal syncs.  This is used to test
                   32348: ** that syncs and fullsyncs are occuring at the right times.
                   32349: */
                   32350: SQLITE_API int sqlite3_sync_count = 0;
                   32351: SQLITE_API int sqlite3_fullsync_count = 0;
                   32352: #endif
                   32353: 
                   32354: /*
                   32355: ** Make sure all writes to a particular file are committed to disk.
                   32356: */
                   32357: static int winSync(sqlite3_file *id, int flags){
                   32358: #if !defined(NDEBUG) || !defined(SQLITE_NO_SYNC) || defined(SQLITE_DEBUG)
                   32359:   winFile *pFile = (winFile*)id;
                   32360:   BOOL rc;
                   32361: #else
                   32362:   UNUSED_PARAMETER(id);
                   32363: #endif
                   32364: 
                   32365:   assert( pFile );
                   32366:   /* Check that one of SQLITE_SYNC_NORMAL or FULL was passed */
                   32367:   assert((flags&0x0F)==SQLITE_SYNC_NORMAL
                   32368:       || (flags&0x0F)==SQLITE_SYNC_FULL
                   32369:   );
                   32370: 
                   32371:   OSTRACE(("SYNC %d lock=%d\n", pFile->h, pFile->locktype));
                   32372: 
                   32373:   /* Unix cannot, but some systems may return SQLITE_FULL from here. This
                   32374:   ** line is to test that doing so does not cause any problems.
                   32375:   */
                   32376:   SimulateDiskfullError( return SQLITE_FULL );
                   32377: 
                   32378: #ifndef SQLITE_TEST
                   32379:   UNUSED_PARAMETER(flags);
                   32380: #else
                   32381:   if( (flags&0x0F)==SQLITE_SYNC_FULL ){
                   32382:     sqlite3_fullsync_count++;
                   32383:   }
                   32384:   sqlite3_sync_count++;
                   32385: #endif
                   32386: 
                   32387:   /* If we compiled with the SQLITE_NO_SYNC flag, then syncing is a
                   32388:   ** no-op
                   32389:   */
                   32390: #ifdef SQLITE_NO_SYNC
                   32391:   return SQLITE_OK;
                   32392: #else
                   32393:   rc = FlushFileBuffers(pFile->h);
                   32394:   SimulateIOError( rc=FALSE );
                   32395:   if( rc ){
                   32396:     return SQLITE_OK;
                   32397:   }else{
                   32398:     pFile->lastErrno = GetLastError();
                   32399:     return winLogError(SQLITE_IOERR_FSYNC, "winSync", pFile->zPath);
                   32400:   }
                   32401: #endif
                   32402: }
                   32403: 
                   32404: /*
                   32405: ** Determine the current size of a file in bytes
                   32406: */
                   32407: static int winFileSize(sqlite3_file *id, sqlite3_int64 *pSize){
                   32408:   DWORD upperBits;
                   32409:   DWORD lowerBits;
                   32410:   winFile *pFile = (winFile*)id;
                   32411:   DWORD error;
                   32412: 
                   32413:   assert( id!=0 );
                   32414:   SimulateIOError(return SQLITE_IOERR_FSTAT);
                   32415:   lowerBits = GetFileSize(pFile->h, &upperBits);
                   32416:   if(   (lowerBits == INVALID_FILE_SIZE)
                   32417:      && ((error = GetLastError()) != NO_ERROR) )
                   32418:   {
                   32419:     pFile->lastErrno = error;
                   32420:     return winLogError(SQLITE_IOERR_FSTAT, "winFileSize", pFile->zPath);
                   32421:   }
                   32422:   *pSize = (((sqlite3_int64)upperBits)<<32) + lowerBits;
                   32423:   return SQLITE_OK;
                   32424: }
                   32425: 
                   32426: /*
                   32427: ** LOCKFILE_FAIL_IMMEDIATELY is undefined on some Windows systems.
                   32428: */
                   32429: #ifndef LOCKFILE_FAIL_IMMEDIATELY
                   32430: # define LOCKFILE_FAIL_IMMEDIATELY 1
                   32431: #endif
                   32432: 
                   32433: /*
                   32434: ** Acquire a reader lock.
                   32435: ** Different API routines are called depending on whether or not this
                   32436: ** is Win95 or WinNT.
                   32437: */
                   32438: static int getReadLock(winFile *pFile){
                   32439:   int res;
                   32440:   if( isNT() ){
                   32441:     OVERLAPPED ovlp;
                   32442:     ovlp.Offset = SHARED_FIRST;
                   32443:     ovlp.OffsetHigh = 0;
                   32444:     ovlp.hEvent = 0;
                   32445:     res = LockFileEx(pFile->h, LOCKFILE_FAIL_IMMEDIATELY,
                   32446:                      0, SHARED_SIZE, 0, &ovlp);
                   32447: /* isNT() is 1 if SQLITE_OS_WINCE==1, so this else is never executed. 
                   32448: */
                   32449: #if SQLITE_OS_WINCE==0
                   32450:   }else{
                   32451:     int lk;
                   32452:     sqlite3_randomness(sizeof(lk), &lk);
                   32453:     pFile->sharedLockByte = (short)((lk & 0x7fffffff)%(SHARED_SIZE - 1));
                   32454:     res = LockFile(pFile->h, SHARED_FIRST+pFile->sharedLockByte, 0, 1, 0);
                   32455: #endif
                   32456:   }
                   32457:   if( res == 0 ){
                   32458:     pFile->lastErrno = GetLastError();
                   32459:     /* No need to log a failure to lock */
                   32460:   }
                   32461:   return res;
                   32462: }
                   32463: 
                   32464: /*
                   32465: ** Undo a readlock
                   32466: */
                   32467: static int unlockReadLock(winFile *pFile){
                   32468:   int res;
                   32469:   if( isNT() ){
                   32470:     res = UnlockFile(pFile->h, SHARED_FIRST, 0, SHARED_SIZE, 0);
                   32471: /* isNT() is 1 if SQLITE_OS_WINCE==1, so this else is never executed. 
                   32472: */
                   32473: #if SQLITE_OS_WINCE==0
                   32474:   }else{
                   32475:     res = UnlockFile(pFile->h, SHARED_FIRST + pFile->sharedLockByte, 0, 1, 0);
                   32476: #endif
                   32477:   }
                   32478:   if( res==0 && GetLastError()!=ERROR_NOT_LOCKED ){
                   32479:     pFile->lastErrno = GetLastError();
                   32480:     winLogError(SQLITE_IOERR_UNLOCK, "unlockReadLock", pFile->zPath);
                   32481:   }
                   32482:   return res;
                   32483: }
                   32484: 
                   32485: /*
                   32486: ** Lock the file with the lock specified by parameter locktype - one
                   32487: ** of the following:
                   32488: **
                   32489: **     (1) SHARED_LOCK
                   32490: **     (2) RESERVED_LOCK
                   32491: **     (3) PENDING_LOCK
                   32492: **     (4) EXCLUSIVE_LOCK
                   32493: **
                   32494: ** Sometimes when requesting one lock state, additional lock states
                   32495: ** are inserted in between.  The locking might fail on one of the later
                   32496: ** transitions leaving the lock state different from what it started but
                   32497: ** still short of its goal.  The following chart shows the allowed
                   32498: ** transitions and the inserted intermediate states:
                   32499: **
                   32500: **    UNLOCKED -> SHARED
                   32501: **    SHARED -> RESERVED
                   32502: **    SHARED -> (PENDING) -> EXCLUSIVE
                   32503: **    RESERVED -> (PENDING) -> EXCLUSIVE
                   32504: **    PENDING -> EXCLUSIVE
                   32505: **
                   32506: ** This routine will only increase a lock.  The winUnlock() routine
                   32507: ** erases all locks at once and returns us immediately to locking level 0.
                   32508: ** It is not possible to lower the locking level one step at a time.  You
                   32509: ** must go straight to locking level 0.
                   32510: */
                   32511: static int winLock(sqlite3_file *id, int locktype){
                   32512:   int rc = SQLITE_OK;    /* Return code from subroutines */
                   32513:   int res = 1;           /* Result of a windows lock call */
                   32514:   int newLocktype;       /* Set pFile->locktype to this value before exiting */
                   32515:   int gotPendingLock = 0;/* True if we acquired a PENDING lock this time */
                   32516:   winFile *pFile = (winFile*)id;
                   32517:   DWORD error = NO_ERROR;
                   32518: 
                   32519:   assert( id!=0 );
                   32520:   OSTRACE(("LOCK %d %d was %d(%d)\n",
                   32521:            pFile->h, locktype, pFile->locktype, pFile->sharedLockByte));
                   32522: 
                   32523:   /* If there is already a lock of this type or more restrictive on the
                   32524:   ** OsFile, do nothing. Don't use the end_lock: exit path, as
                   32525:   ** sqlite3OsEnterMutex() hasn't been called yet.
                   32526:   */
                   32527:   if( pFile->locktype>=locktype ){
                   32528:     return SQLITE_OK;
                   32529:   }
                   32530: 
                   32531:   /* Make sure the locking sequence is correct
                   32532:   */
                   32533:   assert( pFile->locktype!=NO_LOCK || locktype==SHARED_LOCK );
                   32534:   assert( locktype!=PENDING_LOCK );
                   32535:   assert( locktype!=RESERVED_LOCK || pFile->locktype==SHARED_LOCK );
                   32536: 
                   32537:   /* Lock the PENDING_LOCK byte if we need to acquire a PENDING lock or
                   32538:   ** a SHARED lock.  If we are acquiring a SHARED lock, the acquisition of
                   32539:   ** the PENDING_LOCK byte is temporary.
                   32540:   */
                   32541:   newLocktype = pFile->locktype;
                   32542:   if(   (pFile->locktype==NO_LOCK)
                   32543:      || (   (locktype==EXCLUSIVE_LOCK)
                   32544:          && (pFile->locktype==RESERVED_LOCK))
                   32545:   ){
                   32546:     int cnt = 3;
                   32547:     while( cnt-->0 && (res = LockFile(pFile->h, PENDING_BYTE, 0, 1, 0))==0 ){
                   32548:       /* Try 3 times to get the pending lock.  The pending lock might be
                   32549:       ** held by another reader process who will release it momentarily.
                   32550:       */
                   32551:       OSTRACE(("could not get a PENDING lock. cnt=%d\n", cnt));
                   32552:       Sleep(1);
                   32553:     }
                   32554:     gotPendingLock = res;
                   32555:     if( !res ){
                   32556:       error = GetLastError();
                   32557:     }
                   32558:   }
                   32559: 
                   32560:   /* Acquire a shared lock
                   32561:   */
                   32562:   if( locktype==SHARED_LOCK && res ){
                   32563:     assert( pFile->locktype==NO_LOCK );
                   32564:     res = getReadLock(pFile);
                   32565:     if( res ){
                   32566:       newLocktype = SHARED_LOCK;
                   32567:     }else{
                   32568:       error = GetLastError();
                   32569:     }
                   32570:   }
                   32571: 
                   32572:   /* Acquire a RESERVED lock
                   32573:   */
                   32574:   if( locktype==RESERVED_LOCK && res ){
                   32575:     assert( pFile->locktype==SHARED_LOCK );
                   32576:     res = LockFile(pFile->h, RESERVED_BYTE, 0, 1, 0);
                   32577:     if( res ){
                   32578:       newLocktype = RESERVED_LOCK;
                   32579:     }else{
                   32580:       error = GetLastError();
                   32581:     }
                   32582:   }
                   32583: 
                   32584:   /* Acquire a PENDING lock
                   32585:   */
                   32586:   if( locktype==EXCLUSIVE_LOCK && res ){
                   32587:     newLocktype = PENDING_LOCK;
                   32588:     gotPendingLock = 0;
                   32589:   }
                   32590: 
                   32591:   /* Acquire an EXCLUSIVE lock
                   32592:   */
                   32593:   if( locktype==EXCLUSIVE_LOCK && res ){
                   32594:     assert( pFile->locktype>=SHARED_LOCK );
                   32595:     res = unlockReadLock(pFile);
                   32596:     OSTRACE(("unreadlock = %d\n", res));
                   32597:     res = LockFile(pFile->h, SHARED_FIRST, 0, SHARED_SIZE, 0);
                   32598:     if( res ){
                   32599:       newLocktype = EXCLUSIVE_LOCK;
                   32600:     }else{
                   32601:       error = GetLastError();
                   32602:       OSTRACE(("error-code = %d\n", error));
                   32603:       getReadLock(pFile);
                   32604:     }
                   32605:   }
                   32606: 
                   32607:   /* If we are holding a PENDING lock that ought to be released, then
                   32608:   ** release it now.
                   32609:   */
                   32610:   if( gotPendingLock && locktype==SHARED_LOCK ){
                   32611:     UnlockFile(pFile->h, PENDING_BYTE, 0, 1, 0);
                   32612:   }
                   32613: 
                   32614:   /* Update the state of the lock has held in the file descriptor then
                   32615:   ** return the appropriate result code.
                   32616:   */
                   32617:   if( res ){
                   32618:     rc = SQLITE_OK;
                   32619:   }else{
                   32620:     OSTRACE(("LOCK FAILED %d trying for %d but got %d\n", pFile->h,
                   32621:            locktype, newLocktype));
                   32622:     pFile->lastErrno = error;
                   32623:     rc = SQLITE_BUSY;
                   32624:   }
                   32625:   pFile->locktype = (u8)newLocktype;
                   32626:   return rc;
                   32627: }
                   32628: 
                   32629: /*
                   32630: ** This routine checks if there is a RESERVED lock held on the specified
                   32631: ** file by this or any other process. If such a lock is held, return
                   32632: ** non-zero, otherwise zero.
                   32633: */
                   32634: static int winCheckReservedLock(sqlite3_file *id, int *pResOut){
                   32635:   int rc;
                   32636:   winFile *pFile = (winFile*)id;
                   32637: 
                   32638:   SimulateIOError( return SQLITE_IOERR_CHECKRESERVEDLOCK; );
                   32639: 
                   32640:   assert( id!=0 );
                   32641:   if( pFile->locktype>=RESERVED_LOCK ){
                   32642:     rc = 1;
                   32643:     OSTRACE(("TEST WR-LOCK %d %d (local)\n", pFile->h, rc));
                   32644:   }else{
                   32645:     rc = LockFile(pFile->h, RESERVED_BYTE, 0, 1, 0);
                   32646:     if( rc ){
                   32647:       UnlockFile(pFile->h, RESERVED_BYTE, 0, 1, 0);
                   32648:     }
                   32649:     rc = !rc;
                   32650:     OSTRACE(("TEST WR-LOCK %d %d (remote)\n", pFile->h, rc));
                   32651:   }
                   32652:   *pResOut = rc;
                   32653:   return SQLITE_OK;
                   32654: }
                   32655: 
                   32656: /*
                   32657: ** Lower the locking level on file descriptor id to locktype.  locktype
                   32658: ** must be either NO_LOCK or SHARED_LOCK.
                   32659: **
                   32660: ** If the locking level of the file descriptor is already at or below
                   32661: ** the requested locking level, this routine is a no-op.
                   32662: **
                   32663: ** It is not possible for this routine to fail if the second argument
                   32664: ** is NO_LOCK.  If the second argument is SHARED_LOCK then this routine
                   32665: ** might return SQLITE_IOERR;
                   32666: */
                   32667: static int winUnlock(sqlite3_file *id, int locktype){
                   32668:   int type;
                   32669:   winFile *pFile = (winFile*)id;
                   32670:   int rc = SQLITE_OK;
                   32671:   assert( pFile!=0 );
                   32672:   assert( locktype<=SHARED_LOCK );
                   32673:   OSTRACE(("UNLOCK %d to %d was %d(%d)\n", pFile->h, locktype,
                   32674:           pFile->locktype, pFile->sharedLockByte));
                   32675:   type = pFile->locktype;
                   32676:   if( type>=EXCLUSIVE_LOCK ){
                   32677:     UnlockFile(pFile->h, SHARED_FIRST, 0, SHARED_SIZE, 0);
                   32678:     if( locktype==SHARED_LOCK && !getReadLock(pFile) ){
                   32679:       /* This should never happen.  We should always be able to
                   32680:       ** reacquire the read lock */
                   32681:       rc = winLogError(SQLITE_IOERR_UNLOCK, "winUnlock", pFile->zPath);
                   32682:     }
                   32683:   }
                   32684:   if( type>=RESERVED_LOCK ){
                   32685:     UnlockFile(pFile->h, RESERVED_BYTE, 0, 1, 0);
                   32686:   }
                   32687:   if( locktype==NO_LOCK && type>=SHARED_LOCK ){
                   32688:     unlockReadLock(pFile);
                   32689:   }
                   32690:   if( type>=PENDING_LOCK ){
                   32691:     UnlockFile(pFile->h, PENDING_BYTE, 0, 1, 0);
                   32692:   }
                   32693:   pFile->locktype = (u8)locktype;
                   32694:   return rc;
                   32695: }
                   32696: 
                   32697: /*
                   32698: ** Control and query of the open file handle.
                   32699: */
                   32700: static int winFileControl(sqlite3_file *id, int op, void *pArg){
                   32701:   switch( op ){
                   32702:     case SQLITE_FCNTL_LOCKSTATE: {
                   32703:       *(int*)pArg = ((winFile*)id)->locktype;
                   32704:       return SQLITE_OK;
                   32705:     }
                   32706:     case SQLITE_LAST_ERRNO: {
                   32707:       *(int*)pArg = (int)((winFile*)id)->lastErrno;
                   32708:       return SQLITE_OK;
                   32709:     }
                   32710:     case SQLITE_FCNTL_CHUNK_SIZE: {
                   32711:       ((winFile*)id)->szChunk = *(int *)pArg;
                   32712:       return SQLITE_OK;
                   32713:     }
                   32714:     case SQLITE_FCNTL_SIZE_HINT: {
                   32715:       sqlite3_int64 sz = *(sqlite3_int64*)pArg;
                   32716:       SimulateIOErrorBenign(1);
                   32717:       winTruncate(id, sz);
                   32718:       SimulateIOErrorBenign(0);
                   32719:       return SQLITE_OK;
                   32720:     }
                   32721:     case SQLITE_FCNTL_SYNC_OMITTED: {
                   32722:       return SQLITE_OK;
                   32723:     }
                   32724:   }
                   32725:   return SQLITE_NOTFOUND;
                   32726: }
                   32727: 
                   32728: /*
                   32729: ** Return the sector size in bytes of the underlying block device for
                   32730: ** the specified file. This is almost always 512 bytes, but may be
                   32731: ** larger for some devices.
                   32732: **
                   32733: ** SQLite code assumes this function cannot fail. It also assumes that
                   32734: ** if two files are created in the same file-system directory (i.e.
                   32735: ** a database and its journal file) that the sector size will be the
                   32736: ** same for both.
                   32737: */
                   32738: static int winSectorSize(sqlite3_file *id){
                   32739:   assert( id!=0 );
                   32740:   return (int)(((winFile*)id)->sectorSize);
                   32741: }
                   32742: 
                   32743: /*
                   32744: ** Return a vector of device characteristics.
                   32745: */
                   32746: static int winDeviceCharacteristics(sqlite3_file *id){
                   32747:   UNUSED_PARAMETER(id);
                   32748:   return SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN;
                   32749: }
                   32750: 
                   32751: #ifndef SQLITE_OMIT_WAL
                   32752: 
                   32753: /* 
                   32754: ** Windows will only let you create file view mappings
                   32755: ** on allocation size granularity boundaries.
                   32756: ** During sqlite3_os_init() we do a GetSystemInfo()
                   32757: ** to get the granularity size.
                   32758: */
                   32759: SYSTEM_INFO winSysInfo;
                   32760: 
                   32761: /*
                   32762: ** Helper functions to obtain and relinquish the global mutex. The
                   32763: ** global mutex is used to protect the winLockInfo objects used by 
                   32764: ** this file, all of which may be shared by multiple threads.
                   32765: **
                   32766: ** Function winShmMutexHeld() is used to assert() that the global mutex 
                   32767: ** is held when required. This function is only used as part of assert() 
                   32768: ** statements. e.g.
                   32769: **
                   32770: **   winShmEnterMutex()
                   32771: **     assert( winShmMutexHeld() );
                   32772: **   winShmLeaveMutex()
                   32773: */
                   32774: static void winShmEnterMutex(void){
                   32775:   sqlite3_mutex_enter(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER));
                   32776: }
                   32777: static void winShmLeaveMutex(void){
                   32778:   sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER));
                   32779: }
                   32780: #ifdef SQLITE_DEBUG
                   32781: static int winShmMutexHeld(void) {
                   32782:   return sqlite3_mutex_held(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER));
                   32783: }
                   32784: #endif
                   32785: 
                   32786: /*
                   32787: ** Object used to represent a single file opened and mmapped to provide
                   32788: ** shared memory.  When multiple threads all reference the same
                   32789: ** log-summary, each thread has its own winFile object, but they all
                   32790: ** point to a single instance of this object.  In other words, each
                   32791: ** log-summary is opened only once per process.
                   32792: **
                   32793: ** winShmMutexHeld() must be true when creating or destroying
                   32794: ** this object or while reading or writing the following fields:
                   32795: **
                   32796: **      nRef
                   32797: **      pNext 
                   32798: **
                   32799: ** The following fields are read-only after the object is created:
                   32800: ** 
                   32801: **      fid
                   32802: **      zFilename
                   32803: **
                   32804: ** Either winShmNode.mutex must be held or winShmNode.nRef==0 and
                   32805: ** winShmMutexHeld() is true when reading or writing any other field
                   32806: ** in this structure.
                   32807: **
                   32808: */
                   32809: struct winShmNode {
                   32810:   sqlite3_mutex *mutex;      /* Mutex to access this object */
                   32811:   char *zFilename;           /* Name of the file */
                   32812:   winFile hFile;             /* File handle from winOpen */
                   32813: 
                   32814:   int szRegion;              /* Size of shared-memory regions */
                   32815:   int nRegion;               /* Size of array apRegion */
                   32816:   struct ShmRegion {
                   32817:     HANDLE hMap;             /* File handle from CreateFileMapping */
                   32818:     void *pMap;
                   32819:   } *aRegion;
                   32820:   DWORD lastErrno;           /* The Windows errno from the last I/O error */
                   32821: 
                   32822:   int nRef;                  /* Number of winShm objects pointing to this */
                   32823:   winShm *pFirst;            /* All winShm objects pointing to this */
                   32824:   winShmNode *pNext;         /* Next in list of all winShmNode objects */
                   32825: #ifdef SQLITE_DEBUG
                   32826:   u8 nextShmId;              /* Next available winShm.id value */
                   32827: #endif
                   32828: };
                   32829: 
                   32830: /*
                   32831: ** A global array of all winShmNode objects.
                   32832: **
                   32833: ** The winShmMutexHeld() must be true while reading or writing this list.
                   32834: */
                   32835: static winShmNode *winShmNodeList = 0;
                   32836: 
                   32837: /*
                   32838: ** Structure used internally by this VFS to record the state of an
                   32839: ** open shared memory connection.
                   32840: **
                   32841: ** The following fields are initialized when this object is created and
                   32842: ** are read-only thereafter:
                   32843: **
                   32844: **    winShm.pShmNode
                   32845: **    winShm.id
                   32846: **
                   32847: ** All other fields are read/write.  The winShm.pShmNode->mutex must be held
                   32848: ** while accessing any read/write fields.
                   32849: */
                   32850: struct winShm {
                   32851:   winShmNode *pShmNode;      /* The underlying winShmNode object */
                   32852:   winShm *pNext;             /* Next winShm with the same winShmNode */
                   32853:   u8 hasMutex;               /* True if holding the winShmNode mutex */
                   32854:   u16 sharedMask;            /* Mask of shared locks held */
                   32855:   u16 exclMask;              /* Mask of exclusive locks held */
                   32856: #ifdef SQLITE_DEBUG
                   32857:   u8 id;                     /* Id of this connection with its winShmNode */
                   32858: #endif
                   32859: };
                   32860: 
                   32861: /*
                   32862: ** Constants used for locking
                   32863: */
                   32864: #define WIN_SHM_BASE   ((22+SQLITE_SHM_NLOCK)*4)        /* first lock byte */
                   32865: #define WIN_SHM_DMS    (WIN_SHM_BASE+SQLITE_SHM_NLOCK)  /* deadman switch */
                   32866: 
                   32867: /*
                   32868: ** Apply advisory locks for all n bytes beginning at ofst.
                   32869: */
                   32870: #define _SHM_UNLCK  1
                   32871: #define _SHM_RDLCK  2
                   32872: #define _SHM_WRLCK  3
                   32873: static int winShmSystemLock(
                   32874:   winShmNode *pFile,    /* Apply locks to this open shared-memory segment */
                   32875:   int lockType,         /* _SHM_UNLCK, _SHM_RDLCK, or _SHM_WRLCK */
                   32876:   int ofst,             /* Offset to first byte to be locked/unlocked */
                   32877:   int nByte             /* Number of bytes to lock or unlock */
                   32878: ){
                   32879:   OVERLAPPED ovlp;
                   32880:   DWORD dwFlags;
                   32881:   int rc = 0;           /* Result code form Lock/UnlockFileEx() */
                   32882: 
                   32883:   /* Access to the winShmNode object is serialized by the caller */
                   32884:   assert( sqlite3_mutex_held(pFile->mutex) || pFile->nRef==0 );
                   32885: 
                   32886:   /* Initialize the locking parameters */
                   32887:   dwFlags = LOCKFILE_FAIL_IMMEDIATELY;
                   32888:   if( lockType == _SHM_WRLCK ) dwFlags |= LOCKFILE_EXCLUSIVE_LOCK;
                   32889: 
                   32890:   memset(&ovlp, 0, sizeof(OVERLAPPED));
                   32891:   ovlp.Offset = ofst;
                   32892: 
                   32893:   /* Release/Acquire the system-level lock */
                   32894:   if( lockType==_SHM_UNLCK ){
                   32895:     rc = UnlockFileEx(pFile->hFile.h, 0, nByte, 0, &ovlp);
                   32896:   }else{
                   32897:     rc = LockFileEx(pFile->hFile.h, dwFlags, 0, nByte, 0, &ovlp);
                   32898:   }
                   32899:   
                   32900:   if( rc!= 0 ){
                   32901:     rc = SQLITE_OK;
                   32902:   }else{
                   32903:     pFile->lastErrno =  GetLastError();
                   32904:     rc = SQLITE_BUSY;
                   32905:   }
                   32906: 
                   32907:   OSTRACE(("SHM-LOCK %d %s %s 0x%08lx\n", 
                   32908:            pFile->hFile.h,
                   32909:            rc==SQLITE_OK ? "ok" : "failed",
                   32910:            lockType==_SHM_UNLCK ? "UnlockFileEx" : "LockFileEx",
                   32911:            pFile->lastErrno));
                   32912: 
                   32913:   return rc;
                   32914: }
                   32915: 
                   32916: /* Forward references to VFS methods */
                   32917: static int winOpen(sqlite3_vfs*,const char*,sqlite3_file*,int,int*);
                   32918: static int winDelete(sqlite3_vfs *,const char*,int);
                   32919: 
                   32920: /*
                   32921: ** Purge the winShmNodeList list of all entries with winShmNode.nRef==0.
                   32922: **
                   32923: ** This is not a VFS shared-memory method; it is a utility function called
                   32924: ** by VFS shared-memory methods.
                   32925: */
                   32926: static void winShmPurge(sqlite3_vfs *pVfs, int deleteFlag){
                   32927:   winShmNode **pp;
                   32928:   winShmNode *p;
                   32929:   BOOL bRc;
                   32930:   assert( winShmMutexHeld() );
                   32931:   pp = &winShmNodeList;
                   32932:   while( (p = *pp)!=0 ){
                   32933:     if( p->nRef==0 ){
                   32934:       int i;
                   32935:       if( p->mutex ) sqlite3_mutex_free(p->mutex);
                   32936:       for(i=0; i<p->nRegion; i++){
                   32937:         bRc = UnmapViewOfFile(p->aRegion[i].pMap);
                   32938:         OSTRACE(("SHM-PURGE pid-%d unmap region=%d %s\n",
                   32939:                  (int)GetCurrentProcessId(), i,
                   32940:                  bRc ? "ok" : "failed"));
                   32941:         bRc = CloseHandle(p->aRegion[i].hMap);
                   32942:         OSTRACE(("SHM-PURGE pid-%d close region=%d %s\n",
                   32943:                  (int)GetCurrentProcessId(), i,
                   32944:                  bRc ? "ok" : "failed"));
                   32945:       }
                   32946:       if( p->hFile.h != INVALID_HANDLE_VALUE ){
                   32947:         SimulateIOErrorBenign(1);
                   32948:         winClose((sqlite3_file *)&p->hFile);
                   32949:         SimulateIOErrorBenign(0);
                   32950:       }
                   32951:       if( deleteFlag ){
                   32952:         SimulateIOErrorBenign(1);
                   32953:         winDelete(pVfs, p->zFilename, 0);
                   32954:         SimulateIOErrorBenign(0);
                   32955:       }
                   32956:       *pp = p->pNext;
                   32957:       sqlite3_free(p->aRegion);
                   32958:       sqlite3_free(p);
                   32959:     }else{
                   32960:       pp = &p->pNext;
                   32961:     }
                   32962:   }
                   32963: }
                   32964: 
                   32965: /*
                   32966: ** Open the shared-memory area associated with database file pDbFd.
                   32967: **
                   32968: ** When opening a new shared-memory file, if no other instances of that
                   32969: ** file are currently open, in this process or in other processes, then
                   32970: ** the file must be truncated to zero length or have its header cleared.
                   32971: */
                   32972: static int winOpenSharedMemory(winFile *pDbFd){
                   32973:   struct winShm *p;                  /* The connection to be opened */
                   32974:   struct winShmNode *pShmNode = 0;   /* The underlying mmapped file */
                   32975:   int rc;                            /* Result code */
                   32976:   struct winShmNode *pNew;           /* Newly allocated winShmNode */
                   32977:   int nName;                         /* Size of zName in bytes */
                   32978: 
                   32979:   assert( pDbFd->pShm==0 );    /* Not previously opened */
                   32980: 
                   32981:   /* Allocate space for the new sqlite3_shm object.  Also speculatively
                   32982:   ** allocate space for a new winShmNode and filename.
                   32983:   */
                   32984:   p = sqlite3_malloc( sizeof(*p) );
                   32985:   if( p==0 ) return SQLITE_NOMEM;
                   32986:   memset(p, 0, sizeof(*p));
                   32987:   nName = sqlite3Strlen30(pDbFd->zPath);
                   32988:   pNew = sqlite3_malloc( sizeof(*pShmNode) + nName + 15 );
                   32989:   if( pNew==0 ){
                   32990:     sqlite3_free(p);
                   32991:     return SQLITE_NOMEM;
                   32992:   }
                   32993:   memset(pNew, 0, sizeof(*pNew));
                   32994:   pNew->zFilename = (char*)&pNew[1];
                   32995:   sqlite3_snprintf(nName+15, pNew->zFilename, "%s-shm", pDbFd->zPath);
                   32996:   sqlite3FileSuffix3(pDbFd->zPath, pNew->zFilename); 
                   32997: 
                   32998:   /* Look to see if there is an existing winShmNode that can be used.
                   32999:   ** If no matching winShmNode currently exists, create a new one.
                   33000:   */
                   33001:   winShmEnterMutex();
                   33002:   for(pShmNode = winShmNodeList; pShmNode; pShmNode=pShmNode->pNext){
                   33003:     /* TBD need to come up with better match here.  Perhaps
                   33004:     ** use FILE_ID_BOTH_DIR_INFO Structure.
                   33005:     */
                   33006:     if( sqlite3StrICmp(pShmNode->zFilename, pNew->zFilename)==0 ) break;
                   33007:   }
                   33008:   if( pShmNode ){
                   33009:     sqlite3_free(pNew);
                   33010:   }else{
                   33011:     pShmNode = pNew;
                   33012:     pNew = 0;
                   33013:     ((winFile*)(&pShmNode->hFile))->h = INVALID_HANDLE_VALUE;
                   33014:     pShmNode->pNext = winShmNodeList;
                   33015:     winShmNodeList = pShmNode;
                   33016: 
                   33017:     pShmNode->mutex = sqlite3_mutex_alloc(SQLITE_MUTEX_FAST);
                   33018:     if( pShmNode->mutex==0 ){
                   33019:       rc = SQLITE_NOMEM;
                   33020:       goto shm_open_err;
                   33021:     }
                   33022: 
                   33023:     rc = winOpen(pDbFd->pVfs,
                   33024:                  pShmNode->zFilename,             /* Name of the file (UTF-8) */
                   33025:                  (sqlite3_file*)&pShmNode->hFile,  /* File handle here */
                   33026:                  SQLITE_OPEN_WAL | SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, /* Mode flags */
                   33027:                  0);
                   33028:     if( SQLITE_OK!=rc ){
                   33029:       rc = SQLITE_CANTOPEN_BKPT;
                   33030:       goto shm_open_err;
                   33031:     }
                   33032: 
                   33033:     /* Check to see if another process is holding the dead-man switch.
                   33034:     ** If not, truncate the file to zero length. 
                   33035:     */
                   33036:     if( winShmSystemLock(pShmNode, _SHM_WRLCK, WIN_SHM_DMS, 1)==SQLITE_OK ){
                   33037:       rc = winTruncate((sqlite3_file *)&pShmNode->hFile, 0);
                   33038:       if( rc!=SQLITE_OK ){
                   33039:         rc = winLogError(SQLITE_IOERR_SHMOPEN, "winOpenShm", pDbFd->zPath);
                   33040:       }
                   33041:     }
                   33042:     if( rc==SQLITE_OK ){
                   33043:       winShmSystemLock(pShmNode, _SHM_UNLCK, WIN_SHM_DMS, 1);
                   33044:       rc = winShmSystemLock(pShmNode, _SHM_RDLCK, WIN_SHM_DMS, 1);
                   33045:     }
                   33046:     if( rc ) goto shm_open_err;
                   33047:   }
                   33048: 
                   33049:   /* Make the new connection a child of the winShmNode */
                   33050:   p->pShmNode = pShmNode;
                   33051: #ifdef SQLITE_DEBUG
                   33052:   p->id = pShmNode->nextShmId++;
                   33053: #endif
                   33054:   pShmNode->nRef++;
                   33055:   pDbFd->pShm = p;
                   33056:   winShmLeaveMutex();
                   33057: 
                   33058:   /* The reference count on pShmNode has already been incremented under
                   33059:   ** the cover of the winShmEnterMutex() mutex and the pointer from the
                   33060:   ** new (struct winShm) object to the pShmNode has been set. All that is
                   33061:   ** left to do is to link the new object into the linked list starting
                   33062:   ** at pShmNode->pFirst. This must be done while holding the pShmNode->mutex 
                   33063:   ** mutex.
                   33064:   */
                   33065:   sqlite3_mutex_enter(pShmNode->mutex);
                   33066:   p->pNext = pShmNode->pFirst;
                   33067:   pShmNode->pFirst = p;
                   33068:   sqlite3_mutex_leave(pShmNode->mutex);
                   33069:   return SQLITE_OK;
                   33070: 
                   33071:   /* Jump here on any error */
                   33072: shm_open_err:
                   33073:   winShmSystemLock(pShmNode, _SHM_UNLCK, WIN_SHM_DMS, 1);
                   33074:   winShmPurge(pDbFd->pVfs, 0);      /* This call frees pShmNode if required */
                   33075:   sqlite3_free(p);
                   33076:   sqlite3_free(pNew);
                   33077:   winShmLeaveMutex();
                   33078:   return rc;
                   33079: }
                   33080: 
                   33081: /*
                   33082: ** Close a connection to shared-memory.  Delete the underlying 
                   33083: ** storage if deleteFlag is true.
                   33084: */
                   33085: static int winShmUnmap(
                   33086:   sqlite3_file *fd,          /* Database holding shared memory */
                   33087:   int deleteFlag             /* Delete after closing if true */
                   33088: ){
                   33089:   winFile *pDbFd;       /* Database holding shared-memory */
                   33090:   winShm *p;            /* The connection to be closed */
                   33091:   winShmNode *pShmNode; /* The underlying shared-memory file */
                   33092:   winShm **pp;          /* For looping over sibling connections */
                   33093: 
                   33094:   pDbFd = (winFile*)fd;
                   33095:   p = pDbFd->pShm;
                   33096:   if( p==0 ) return SQLITE_OK;
                   33097:   pShmNode = p->pShmNode;
                   33098: 
                   33099:   /* Remove connection p from the set of connections associated
                   33100:   ** with pShmNode */
                   33101:   sqlite3_mutex_enter(pShmNode->mutex);
                   33102:   for(pp=&pShmNode->pFirst; (*pp)!=p; pp = &(*pp)->pNext){}
                   33103:   *pp = p->pNext;
                   33104: 
                   33105:   /* Free the connection p */
                   33106:   sqlite3_free(p);
                   33107:   pDbFd->pShm = 0;
                   33108:   sqlite3_mutex_leave(pShmNode->mutex);
                   33109: 
                   33110:   /* If pShmNode->nRef has reached 0, then close the underlying
                   33111:   ** shared-memory file, too */
                   33112:   winShmEnterMutex();
                   33113:   assert( pShmNode->nRef>0 );
                   33114:   pShmNode->nRef--;
                   33115:   if( pShmNode->nRef==0 ){
                   33116:     winShmPurge(pDbFd->pVfs, deleteFlag);
                   33117:   }
                   33118:   winShmLeaveMutex();
                   33119: 
                   33120:   return SQLITE_OK;
                   33121: }
                   33122: 
                   33123: /*
                   33124: ** Change the lock state for a shared-memory segment.
                   33125: */
                   33126: static int winShmLock(
                   33127:   sqlite3_file *fd,          /* Database file holding the shared memory */
                   33128:   int ofst,                  /* First lock to acquire or release */
                   33129:   int n,                     /* Number of locks to acquire or release */
                   33130:   int flags                  /* What to do with the lock */
                   33131: ){
                   33132:   winFile *pDbFd = (winFile*)fd;        /* Connection holding shared memory */
                   33133:   winShm *p = pDbFd->pShm;              /* The shared memory being locked */
                   33134:   winShm *pX;                           /* For looping over all siblings */
                   33135:   winShmNode *pShmNode = p->pShmNode;
                   33136:   int rc = SQLITE_OK;                   /* Result code */
                   33137:   u16 mask;                             /* Mask of locks to take or release */
                   33138: 
                   33139:   assert( ofst>=0 && ofst+n<=SQLITE_SHM_NLOCK );
                   33140:   assert( n>=1 );
                   33141:   assert( flags==(SQLITE_SHM_LOCK | SQLITE_SHM_SHARED)
                   33142:        || flags==(SQLITE_SHM_LOCK | SQLITE_SHM_EXCLUSIVE)
                   33143:        || flags==(SQLITE_SHM_UNLOCK | SQLITE_SHM_SHARED)
                   33144:        || flags==(SQLITE_SHM_UNLOCK | SQLITE_SHM_EXCLUSIVE) );
                   33145:   assert( n==1 || (flags & SQLITE_SHM_EXCLUSIVE)!=0 );
                   33146: 
                   33147:   mask = (u16)((1U<<(ofst+n)) - (1U<<ofst));
                   33148:   assert( n>1 || mask==(1<<ofst) );
                   33149:   sqlite3_mutex_enter(pShmNode->mutex);
                   33150:   if( flags & SQLITE_SHM_UNLOCK ){
                   33151:     u16 allMask = 0; /* Mask of locks held by siblings */
                   33152: 
                   33153:     /* See if any siblings hold this same lock */
                   33154:     for(pX=pShmNode->pFirst; pX; pX=pX->pNext){
                   33155:       if( pX==p ) continue;
                   33156:       assert( (pX->exclMask & (p->exclMask|p->sharedMask))==0 );
                   33157:       allMask |= pX->sharedMask;
                   33158:     }
                   33159: 
                   33160:     /* Unlock the system-level locks */
                   33161:     if( (mask & allMask)==0 ){
                   33162:       rc = winShmSystemLock(pShmNode, _SHM_UNLCK, ofst+WIN_SHM_BASE, n);
                   33163:     }else{
                   33164:       rc = SQLITE_OK;
                   33165:     }
                   33166: 
                   33167:     /* Undo the local locks */
                   33168:     if( rc==SQLITE_OK ){
                   33169:       p->exclMask &= ~mask;
                   33170:       p->sharedMask &= ~mask;
                   33171:     } 
                   33172:   }else if( flags & SQLITE_SHM_SHARED ){
                   33173:     u16 allShared = 0;  /* Union of locks held by connections other than "p" */
                   33174: 
                   33175:     /* Find out which shared locks are already held by sibling connections.
                   33176:     ** If any sibling already holds an exclusive lock, go ahead and return
                   33177:     ** SQLITE_BUSY.
                   33178:     */
                   33179:     for(pX=pShmNode->pFirst; pX; pX=pX->pNext){
                   33180:       if( (pX->exclMask & mask)!=0 ){
                   33181:         rc = SQLITE_BUSY;
                   33182:         break;
                   33183:       }
                   33184:       allShared |= pX->sharedMask;
                   33185:     }
                   33186: 
                   33187:     /* Get shared locks at the system level, if necessary */
                   33188:     if( rc==SQLITE_OK ){
                   33189:       if( (allShared & mask)==0 ){
                   33190:         rc = winShmSystemLock(pShmNode, _SHM_RDLCK, ofst+WIN_SHM_BASE, n);
                   33191:       }else{
                   33192:         rc = SQLITE_OK;
                   33193:       }
                   33194:     }
                   33195: 
                   33196:     /* Get the local shared locks */
                   33197:     if( rc==SQLITE_OK ){
                   33198:       p->sharedMask |= mask;
                   33199:     }
                   33200:   }else{
                   33201:     /* Make sure no sibling connections hold locks that will block this
                   33202:     ** lock.  If any do, return SQLITE_BUSY right away.
                   33203:     */
                   33204:     for(pX=pShmNode->pFirst; pX; pX=pX->pNext){
                   33205:       if( (pX->exclMask & mask)!=0 || (pX->sharedMask & mask)!=0 ){
                   33206:         rc = SQLITE_BUSY;
                   33207:         break;
                   33208:       }
                   33209:     }
                   33210:   
                   33211:     /* Get the exclusive locks at the system level.  Then if successful
                   33212:     ** also mark the local connection as being locked.
                   33213:     */
                   33214:     if( rc==SQLITE_OK ){
                   33215:       rc = winShmSystemLock(pShmNode, _SHM_WRLCK, ofst+WIN_SHM_BASE, n);
                   33216:       if( rc==SQLITE_OK ){
                   33217:         assert( (p->sharedMask & mask)==0 );
                   33218:         p->exclMask |= mask;
                   33219:       }
                   33220:     }
                   33221:   }
                   33222:   sqlite3_mutex_leave(pShmNode->mutex);
                   33223:   OSTRACE(("SHM-LOCK shmid-%d, pid-%d got %03x,%03x %s\n",
                   33224:            p->id, (int)GetCurrentProcessId(), p->sharedMask, p->exclMask,
                   33225:            rc ? "failed" : "ok"));
                   33226:   return rc;
                   33227: }
                   33228: 
                   33229: /*
                   33230: ** Implement a memory barrier or memory fence on shared memory.  
                   33231: **
                   33232: ** All loads and stores begun before the barrier must complete before
                   33233: ** any load or store begun after the barrier.
                   33234: */
                   33235: static void winShmBarrier(
                   33236:   sqlite3_file *fd          /* Database holding the shared memory */
                   33237: ){
                   33238:   UNUSED_PARAMETER(fd);
                   33239:   /* MemoryBarrier(); // does not work -- do not know why not */
                   33240:   winShmEnterMutex();
                   33241:   winShmLeaveMutex();
                   33242: }
                   33243: 
                   33244: /*
                   33245: ** This function is called to obtain a pointer to region iRegion of the 
                   33246: ** shared-memory associated with the database file fd. Shared-memory regions 
                   33247: ** are numbered starting from zero. Each shared-memory region is szRegion 
                   33248: ** bytes in size.
                   33249: **
                   33250: ** If an error occurs, an error code is returned and *pp is set to NULL.
                   33251: **
                   33252: ** Otherwise, if the isWrite parameter is 0 and the requested shared-memory
                   33253: ** region has not been allocated (by any client, including one running in a
                   33254: ** separate process), then *pp is set to NULL and SQLITE_OK returned. If 
                   33255: ** isWrite is non-zero and the requested shared-memory region has not yet 
                   33256: ** been allocated, it is allocated by this function.
                   33257: **
                   33258: ** If the shared-memory region has already been allocated or is allocated by
                   33259: ** this call as described above, then it is mapped into this processes 
                   33260: ** address space (if it is not already), *pp is set to point to the mapped 
                   33261: ** memory and SQLITE_OK returned.
                   33262: */
                   33263: static int winShmMap(
                   33264:   sqlite3_file *fd,               /* Handle open on database file */
                   33265:   int iRegion,                    /* Region to retrieve */
                   33266:   int szRegion,                   /* Size of regions */
                   33267:   int isWrite,                    /* True to extend file if necessary */
                   33268:   void volatile **pp              /* OUT: Mapped memory */
                   33269: ){
                   33270:   winFile *pDbFd = (winFile*)fd;
                   33271:   winShm *p = pDbFd->pShm;
                   33272:   winShmNode *pShmNode;
                   33273:   int rc = SQLITE_OK;
                   33274: 
                   33275:   if( !p ){
                   33276:     rc = winOpenSharedMemory(pDbFd);
                   33277:     if( rc!=SQLITE_OK ) return rc;
                   33278:     p = pDbFd->pShm;
                   33279:   }
                   33280:   pShmNode = p->pShmNode;
                   33281: 
                   33282:   sqlite3_mutex_enter(pShmNode->mutex);
                   33283:   assert( szRegion==pShmNode->szRegion || pShmNode->nRegion==0 );
                   33284: 
                   33285:   if( pShmNode->nRegion<=iRegion ){
                   33286:     struct ShmRegion *apNew;           /* New aRegion[] array */
                   33287:     int nByte = (iRegion+1)*szRegion;  /* Minimum required file size */
                   33288:     sqlite3_int64 sz;                  /* Current size of wal-index file */
                   33289: 
                   33290:     pShmNode->szRegion = szRegion;
                   33291: 
                   33292:     /* The requested region is not mapped into this processes address space.
                   33293:     ** Check to see if it has been allocated (i.e. if the wal-index file is
                   33294:     ** large enough to contain the requested region).
                   33295:     */
                   33296:     rc = winFileSize((sqlite3_file *)&pShmNode->hFile, &sz);
                   33297:     if( rc!=SQLITE_OK ){
                   33298:       rc = winLogError(SQLITE_IOERR_SHMSIZE, "winShmMap1", pDbFd->zPath);
                   33299:       goto shmpage_out;
                   33300:     }
                   33301: 
                   33302:     if( sz<nByte ){
                   33303:       /* The requested memory region does not exist. If isWrite is set to
                   33304:       ** zero, exit early. *pp will be set to NULL and SQLITE_OK returned.
                   33305:       **
                   33306:       ** Alternatively, if isWrite is non-zero, use ftruncate() to allocate
                   33307:       ** the requested memory region.
                   33308:       */
                   33309:       if( !isWrite ) goto shmpage_out;
                   33310:       rc = winTruncate((sqlite3_file *)&pShmNode->hFile, nByte);
                   33311:       if( rc!=SQLITE_OK ){
                   33312:         rc = winLogError(SQLITE_IOERR_SHMSIZE, "winShmMap2", pDbFd->zPath);
                   33313:         goto shmpage_out;
                   33314:       }
                   33315:     }
                   33316: 
                   33317:     /* Map the requested memory region into this processes address space. */
                   33318:     apNew = (struct ShmRegion *)sqlite3_realloc(
                   33319:         pShmNode->aRegion, (iRegion+1)*sizeof(apNew[0])
                   33320:     );
                   33321:     if( !apNew ){
                   33322:       rc = SQLITE_IOERR_NOMEM;
                   33323:       goto shmpage_out;
                   33324:     }
                   33325:     pShmNode->aRegion = apNew;
                   33326: 
                   33327:     while( pShmNode->nRegion<=iRegion ){
                   33328:       HANDLE hMap;                /* file-mapping handle */
                   33329:       void *pMap = 0;             /* Mapped memory region */
                   33330:      
                   33331:       hMap = CreateFileMapping(pShmNode->hFile.h, 
                   33332:           NULL, PAGE_READWRITE, 0, nByte, NULL
                   33333:       );
                   33334:       OSTRACE(("SHM-MAP pid-%d create region=%d nbyte=%d %s\n",
                   33335:                (int)GetCurrentProcessId(), pShmNode->nRegion, nByte,
                   33336:                hMap ? "ok" : "failed"));
                   33337:       if( hMap ){
                   33338:         int iOffset = pShmNode->nRegion*szRegion;
                   33339:         int iOffsetShift = iOffset % winSysInfo.dwAllocationGranularity;
                   33340:         pMap = MapViewOfFile(hMap, FILE_MAP_WRITE | FILE_MAP_READ,
                   33341:             0, iOffset - iOffsetShift, szRegion + iOffsetShift
                   33342:         );
                   33343:         OSTRACE(("SHM-MAP pid-%d map region=%d offset=%d size=%d %s\n",
                   33344:                  (int)GetCurrentProcessId(), pShmNode->nRegion, iOffset, szRegion,
                   33345:                  pMap ? "ok" : "failed"));
                   33346:       }
                   33347:       if( !pMap ){
                   33348:         pShmNode->lastErrno = GetLastError();
                   33349:         rc = winLogError(SQLITE_IOERR_SHMMAP, "winShmMap3", pDbFd->zPath);
                   33350:         if( hMap ) CloseHandle(hMap);
                   33351:         goto shmpage_out;
                   33352:       }
                   33353: 
                   33354:       pShmNode->aRegion[pShmNode->nRegion].pMap = pMap;
                   33355:       pShmNode->aRegion[pShmNode->nRegion].hMap = hMap;
                   33356:       pShmNode->nRegion++;
                   33357:     }
                   33358:   }
                   33359: 
                   33360: shmpage_out:
                   33361:   if( pShmNode->nRegion>iRegion ){
                   33362:     int iOffset = iRegion*szRegion;
                   33363:     int iOffsetShift = iOffset % winSysInfo.dwAllocationGranularity;
                   33364:     char *p = (char *)pShmNode->aRegion[iRegion].pMap;
                   33365:     *pp = (void *)&p[iOffsetShift];
                   33366:   }else{
                   33367:     *pp = 0;
                   33368:   }
                   33369:   sqlite3_mutex_leave(pShmNode->mutex);
                   33370:   return rc;
                   33371: }
                   33372: 
                   33373: #else
                   33374: # define winShmMap     0
                   33375: # define winShmLock    0
                   33376: # define winShmBarrier 0
                   33377: # define winShmUnmap   0
                   33378: #endif /* #ifndef SQLITE_OMIT_WAL */
                   33379: 
                   33380: /*
                   33381: ** Here ends the implementation of all sqlite3_file methods.
                   33382: **
                   33383: ********************** End sqlite3_file Methods *******************************
                   33384: ******************************************************************************/
                   33385: 
                   33386: /*
                   33387: ** This vector defines all the methods that can operate on an
                   33388: ** sqlite3_file for win32.
                   33389: */
                   33390: static const sqlite3_io_methods winIoMethod = {
                   33391:   2,                              /* iVersion */
                   33392:   winClose,                       /* xClose */
                   33393:   winRead,                        /* xRead */
                   33394:   winWrite,                       /* xWrite */
                   33395:   winTruncate,                    /* xTruncate */
                   33396:   winSync,                        /* xSync */
                   33397:   winFileSize,                    /* xFileSize */
                   33398:   winLock,                        /* xLock */
                   33399:   winUnlock,                      /* xUnlock */
                   33400:   winCheckReservedLock,           /* xCheckReservedLock */
                   33401:   winFileControl,                 /* xFileControl */
                   33402:   winSectorSize,                  /* xSectorSize */
                   33403:   winDeviceCharacteristics,       /* xDeviceCharacteristics */
                   33404:   winShmMap,                      /* xShmMap */
                   33405:   winShmLock,                     /* xShmLock */
                   33406:   winShmBarrier,                  /* xShmBarrier */
                   33407:   winShmUnmap                     /* xShmUnmap */
                   33408: };
                   33409: 
                   33410: /****************************************************************************
                   33411: **************************** sqlite3_vfs methods ****************************
                   33412: **
                   33413: ** This division contains the implementation of methods on the
                   33414: ** sqlite3_vfs object.
                   33415: */
                   33416: 
                   33417: /*
                   33418: ** Convert a UTF-8 filename into whatever form the underlying
                   33419: ** operating system wants filenames in.  Space to hold the result
                   33420: ** is obtained from malloc and must be freed by the calling
                   33421: ** function.
                   33422: */
                   33423: static void *convertUtf8Filename(const char *zFilename){
                   33424:   void *zConverted = 0;
                   33425:   if( isNT() ){
                   33426:     zConverted = utf8ToUnicode(zFilename);
                   33427: /* isNT() is 1 if SQLITE_OS_WINCE==1, so this else is never executed. 
                   33428: */
                   33429: #if SQLITE_OS_WINCE==0
                   33430:   }else{
                   33431:     zConverted = sqlite3_win32_utf8_to_mbcs(zFilename);
                   33432: #endif
                   33433:   }
                   33434:   /* caller will handle out of memory */
                   33435:   return zConverted;
                   33436: }
                   33437: 
                   33438: /*
                   33439: ** Create a temporary file name in zBuf.  zBuf must be big enough to
                   33440: ** hold at pVfs->mxPathname characters.
                   33441: */
                   33442: static int getTempname(int nBuf, char *zBuf){
                   33443:   static char zChars[] =
                   33444:     "abcdefghijklmnopqrstuvwxyz"
                   33445:     "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
                   33446:     "0123456789";
                   33447:   size_t i, j;
                   33448:   char zTempPath[MAX_PATH+1];
                   33449: 
                   33450:   /* It's odd to simulate an io-error here, but really this is just
                   33451:   ** using the io-error infrastructure to test that SQLite handles this
                   33452:   ** function failing. 
                   33453:   */
                   33454:   SimulateIOError( return SQLITE_IOERR );
                   33455: 
                   33456:   if( sqlite3_temp_directory ){
                   33457:     sqlite3_snprintf(MAX_PATH-30, zTempPath, "%s", sqlite3_temp_directory);
                   33458:   }else if( isNT() ){
                   33459:     char *zMulti;
                   33460:     WCHAR zWidePath[MAX_PATH];
                   33461:     GetTempPathW(MAX_PATH-30, zWidePath);
                   33462:     zMulti = unicodeToUtf8(zWidePath);
                   33463:     if( zMulti ){
                   33464:       sqlite3_snprintf(MAX_PATH-30, zTempPath, "%s", zMulti);
                   33465:       free(zMulti);
                   33466:     }else{
                   33467:       return SQLITE_NOMEM;
                   33468:     }
                   33469: /* isNT() is 1 if SQLITE_OS_WINCE==1, so this else is never executed. 
                   33470: ** Since the ASCII version of these Windows API do not exist for WINCE,
                   33471: ** it's important to not reference them for WINCE builds.
                   33472: */
                   33473: #if SQLITE_OS_WINCE==0
                   33474:   }else{
                   33475:     char *zUtf8;
                   33476:     char zMbcsPath[MAX_PATH];
                   33477:     GetTempPathA(MAX_PATH-30, zMbcsPath);
                   33478:     zUtf8 = sqlite3_win32_mbcs_to_utf8(zMbcsPath);
                   33479:     if( zUtf8 ){
                   33480:       sqlite3_snprintf(MAX_PATH-30, zTempPath, "%s", zUtf8);
                   33481:       free(zUtf8);
                   33482:     }else{
                   33483:       return SQLITE_NOMEM;
                   33484:     }
                   33485: #endif
                   33486:   }
                   33487: 
                   33488:   /* Check that the output buffer is large enough for the temporary file 
                   33489:   ** name. If it is not, return SQLITE_ERROR.
                   33490:   */
                   33491:   if( (sqlite3Strlen30(zTempPath) + sqlite3Strlen30(SQLITE_TEMP_FILE_PREFIX) + 17) >= nBuf ){
                   33492:     return SQLITE_ERROR;
                   33493:   }
                   33494: 
                   33495:   for(i=sqlite3Strlen30(zTempPath); i>0 && zTempPath[i-1]=='\\'; i--){}
                   33496:   zTempPath[i] = 0;
                   33497: 
                   33498:   sqlite3_snprintf(nBuf-17, zBuf,
                   33499:                    "%s\\"SQLITE_TEMP_FILE_PREFIX, zTempPath);
                   33500:   j = sqlite3Strlen30(zBuf);
                   33501:   sqlite3_randomness(15, &zBuf[j]);
                   33502:   for(i=0; i<15; i++, j++){
                   33503:     zBuf[j] = (char)zChars[ ((unsigned char)zBuf[j])%(sizeof(zChars)-1) ];
                   33504:   }
                   33505:   zBuf[j] = 0;
                   33506: 
                   33507:   OSTRACE(("TEMP FILENAME: %s\n", zBuf));
                   33508:   return SQLITE_OK; 
                   33509: }
                   33510: 
                   33511: /*
                   33512: ** Open a file.
                   33513: */
                   33514: static int winOpen(
                   33515:   sqlite3_vfs *pVfs,        /* Not used */
                   33516:   const char *zName,        /* Name of the file (UTF-8) */
                   33517:   sqlite3_file *id,         /* Write the SQLite file handle here */
                   33518:   int flags,                /* Open mode flags */
                   33519:   int *pOutFlags            /* Status return flags */
                   33520: ){
                   33521:   HANDLE h;
                   33522:   DWORD dwDesiredAccess;
                   33523:   DWORD dwShareMode;
                   33524:   DWORD dwCreationDisposition;
                   33525:   DWORD dwFlagsAndAttributes = 0;
                   33526: #if SQLITE_OS_WINCE
                   33527:   int isTemp = 0;
                   33528: #endif
                   33529:   winFile *pFile = (winFile*)id;
                   33530:   void *zConverted;              /* Filename in OS encoding */
                   33531:   const char *zUtf8Name = zName; /* Filename in UTF-8 encoding */
                   33532: 
                   33533:   /* If argument zPath is a NULL pointer, this function is required to open
                   33534:   ** a temporary file. Use this buffer to store the file name in.
                   33535:   */
                   33536:   char zTmpname[MAX_PATH+1];     /* Buffer used to create temp filename */
                   33537: 
                   33538:   int rc = SQLITE_OK;            /* Function Return Code */
                   33539: #if !defined(NDEBUG) || SQLITE_OS_WINCE
                   33540:   int eType = flags&0xFFFFFF00;  /* Type of file to open */
                   33541: #endif
                   33542: 
                   33543:   int isExclusive  = (flags & SQLITE_OPEN_EXCLUSIVE);
                   33544:   int isDelete     = (flags & SQLITE_OPEN_DELETEONCLOSE);
                   33545:   int isCreate     = (flags & SQLITE_OPEN_CREATE);
                   33546: #ifndef NDEBUG
                   33547:   int isReadonly   = (flags & SQLITE_OPEN_READONLY);
                   33548: #endif
                   33549:   int isReadWrite  = (flags & SQLITE_OPEN_READWRITE);
                   33550: 
                   33551: #ifndef NDEBUG
                   33552:   int isOpenJournal = (isCreate && (
                   33553:         eType==SQLITE_OPEN_MASTER_JOURNAL 
                   33554:      || eType==SQLITE_OPEN_MAIN_JOURNAL 
                   33555:      || eType==SQLITE_OPEN_WAL
                   33556:   ));
                   33557: #endif
                   33558: 
                   33559:   /* Check the following statements are true: 
                   33560:   **
                   33561:   **   (a) Exactly one of the READWRITE and READONLY flags must be set, and 
                   33562:   **   (b) if CREATE is set, then READWRITE must also be set, and
                   33563:   **   (c) if EXCLUSIVE is set, then CREATE must also be set.
                   33564:   **   (d) if DELETEONCLOSE is set, then CREATE must also be set.
                   33565:   */
                   33566:   assert((isReadonly==0 || isReadWrite==0) && (isReadWrite || isReadonly));
                   33567:   assert(isCreate==0 || isReadWrite);
                   33568:   assert(isExclusive==0 || isCreate);
                   33569:   assert(isDelete==0 || isCreate);
                   33570: 
                   33571:   /* The main DB, main journal, WAL file and master journal are never 
                   33572:   ** automatically deleted. Nor are they ever temporary files.  */
                   33573:   assert( (!isDelete && zName) || eType!=SQLITE_OPEN_MAIN_DB );
                   33574:   assert( (!isDelete && zName) || eType!=SQLITE_OPEN_MAIN_JOURNAL );
                   33575:   assert( (!isDelete && zName) || eType!=SQLITE_OPEN_MASTER_JOURNAL );
                   33576:   assert( (!isDelete && zName) || eType!=SQLITE_OPEN_WAL );
                   33577: 
                   33578:   /* Assert that the upper layer has set one of the "file-type" flags. */
                   33579:   assert( eType==SQLITE_OPEN_MAIN_DB      || eType==SQLITE_OPEN_TEMP_DB 
                   33580:        || eType==SQLITE_OPEN_MAIN_JOURNAL || eType==SQLITE_OPEN_TEMP_JOURNAL 
                   33581:        || eType==SQLITE_OPEN_SUBJOURNAL   || eType==SQLITE_OPEN_MASTER_JOURNAL 
                   33582:        || eType==SQLITE_OPEN_TRANSIENT_DB || eType==SQLITE_OPEN_WAL
                   33583:   );
                   33584: 
                   33585:   assert( id!=0 );
                   33586:   UNUSED_PARAMETER(pVfs);
                   33587: 
                   33588:   pFile->h = INVALID_HANDLE_VALUE;
                   33589: 
                   33590:   /* If the second argument to this function is NULL, generate a 
                   33591:   ** temporary file name to use 
                   33592:   */
                   33593:   if( !zUtf8Name ){
                   33594:     assert(isDelete && !isOpenJournal);
                   33595:     rc = getTempname(MAX_PATH+1, zTmpname);
                   33596:     if( rc!=SQLITE_OK ){
                   33597:       return rc;
                   33598:     }
                   33599:     zUtf8Name = zTmpname;
                   33600:   }
                   33601: 
                   33602:   /* Convert the filename to the system encoding. */
                   33603:   zConverted = convertUtf8Filename(zUtf8Name);
                   33604:   if( zConverted==0 ){
                   33605:     return SQLITE_NOMEM;
                   33606:   }
                   33607: 
                   33608:   if( isReadWrite ){
                   33609:     dwDesiredAccess = GENERIC_READ | GENERIC_WRITE;
                   33610:   }else{
                   33611:     dwDesiredAccess = GENERIC_READ;
                   33612:   }
                   33613: 
                   33614:   /* SQLITE_OPEN_EXCLUSIVE is used to make sure that a new file is 
                   33615:   ** created. SQLite doesn't use it to indicate "exclusive access" 
                   33616:   ** as it is usually understood.
                   33617:   */
                   33618:   if( isExclusive ){
                   33619:     /* Creates a new file, only if it does not already exist. */
                   33620:     /* If the file exists, it fails. */
                   33621:     dwCreationDisposition = CREATE_NEW;
                   33622:   }else if( isCreate ){
                   33623:     /* Open existing file, or create if it doesn't exist */
                   33624:     dwCreationDisposition = OPEN_ALWAYS;
                   33625:   }else{
                   33626:     /* Opens a file, only if it exists. */
                   33627:     dwCreationDisposition = OPEN_EXISTING;
                   33628:   }
                   33629: 
                   33630:   dwShareMode = FILE_SHARE_READ | FILE_SHARE_WRITE;
                   33631: 
                   33632:   if( isDelete ){
                   33633: #if SQLITE_OS_WINCE
                   33634:     dwFlagsAndAttributes = FILE_ATTRIBUTE_HIDDEN;
                   33635:     isTemp = 1;
                   33636: #else
                   33637:     dwFlagsAndAttributes = FILE_ATTRIBUTE_TEMPORARY
                   33638:                                | FILE_ATTRIBUTE_HIDDEN
                   33639:                                | FILE_FLAG_DELETE_ON_CLOSE;
                   33640: #endif
                   33641:   }else{
                   33642:     dwFlagsAndAttributes = FILE_ATTRIBUTE_NORMAL;
                   33643:   }
                   33644:   /* Reports from the internet are that performance is always
                   33645:   ** better if FILE_FLAG_RANDOM_ACCESS is used.  Ticket #2699. */
                   33646: #if SQLITE_OS_WINCE
                   33647:   dwFlagsAndAttributes |= FILE_FLAG_RANDOM_ACCESS;
                   33648: #endif
                   33649: 
                   33650:   if( isNT() ){
                   33651:     h = CreateFileW((WCHAR*)zConverted,
                   33652:        dwDesiredAccess,
                   33653:        dwShareMode,
                   33654:        NULL,
                   33655:        dwCreationDisposition,
                   33656:        dwFlagsAndAttributes,
                   33657:        NULL
                   33658:     );
                   33659: /* isNT() is 1 if SQLITE_OS_WINCE==1, so this else is never executed. 
                   33660: ** Since the ASCII version of these Windows API do not exist for WINCE,
                   33661: ** it's important to not reference them for WINCE builds.
                   33662: */
                   33663: #if SQLITE_OS_WINCE==0
                   33664:   }else{
                   33665:     h = CreateFileA((char*)zConverted,
                   33666:        dwDesiredAccess,
                   33667:        dwShareMode,
                   33668:        NULL,
                   33669:        dwCreationDisposition,
                   33670:        dwFlagsAndAttributes,
                   33671:        NULL
                   33672:     );
                   33673: #endif
                   33674:   }
                   33675: 
                   33676:   OSTRACE(("OPEN %d %s 0x%lx %s\n", 
                   33677:            h, zName, dwDesiredAccess, 
                   33678:            h==INVALID_HANDLE_VALUE ? "failed" : "ok"));
                   33679: 
                   33680:   if( h==INVALID_HANDLE_VALUE ){
                   33681:     pFile->lastErrno = GetLastError();
                   33682:     winLogError(SQLITE_CANTOPEN, "winOpen", zUtf8Name);
                   33683:     free(zConverted);
                   33684:     if( isReadWrite ){
                   33685:       return winOpen(pVfs, zName, id, 
                   33686:              ((flags|SQLITE_OPEN_READONLY)&~(SQLITE_OPEN_CREATE|SQLITE_OPEN_READWRITE)), pOutFlags);
                   33687:     }else{
                   33688:       return SQLITE_CANTOPEN_BKPT;
                   33689:     }
                   33690:   }
                   33691: 
                   33692:   if( pOutFlags ){
                   33693:     if( isReadWrite ){
                   33694:       *pOutFlags = SQLITE_OPEN_READWRITE;
                   33695:     }else{
                   33696:       *pOutFlags = SQLITE_OPEN_READONLY;
                   33697:     }
                   33698:   }
                   33699: 
                   33700:   memset(pFile, 0, sizeof(*pFile));
                   33701:   pFile->pMethod = &winIoMethod;
                   33702:   pFile->h = h;
                   33703:   pFile->lastErrno = NO_ERROR;
                   33704:   pFile->pVfs = pVfs;
                   33705:   pFile->pShm = 0;
                   33706:   pFile->zPath = zName;
                   33707:   pFile->sectorSize = getSectorSize(pVfs, zUtf8Name);
                   33708: 
                   33709: #if SQLITE_OS_WINCE
                   33710:   if( isReadWrite && eType==SQLITE_OPEN_MAIN_DB
                   33711:        && !winceCreateLock(zName, pFile)
                   33712:   ){
                   33713:     CloseHandle(h);
                   33714:     free(zConverted);
                   33715:     return SQLITE_CANTOPEN_BKPT;
                   33716:   }
                   33717:   if( isTemp ){
                   33718:     pFile->zDeleteOnClose = zConverted;
                   33719:   }else
                   33720: #endif
                   33721:   {
                   33722:     free(zConverted);
                   33723:   }
                   33724: 
                   33725:   OpenCounter(+1);
                   33726:   return rc;
                   33727: }
                   33728: 
                   33729: /*
                   33730: ** Delete the named file.
                   33731: **
                   33732: ** Note that windows does not allow a file to be deleted if some other
                   33733: ** process has it open.  Sometimes a virus scanner or indexing program
                   33734: ** will open a journal file shortly after it is created in order to do
                   33735: ** whatever it does.  While this other process is holding the
                   33736: ** file open, we will be unable to delete it.  To work around this
                   33737: ** problem, we delay 100 milliseconds and try to delete again.  Up
                   33738: ** to MX_DELETION_ATTEMPTs deletion attempts are run before giving
                   33739: ** up and returning an error.
                   33740: */
                   33741: #define MX_DELETION_ATTEMPTS 5
                   33742: static int winDelete(
                   33743:   sqlite3_vfs *pVfs,          /* Not used on win32 */
                   33744:   const char *zFilename,      /* Name of file to delete */
                   33745:   int syncDir                 /* Not used on win32 */
                   33746: ){
                   33747:   int cnt = 0;
                   33748:   DWORD rc;
                   33749:   DWORD error = 0;
                   33750:   void *zConverted;
                   33751:   UNUSED_PARAMETER(pVfs);
                   33752:   UNUSED_PARAMETER(syncDir);
                   33753: 
                   33754:   SimulateIOError(return SQLITE_IOERR_DELETE);
                   33755:   zConverted = convertUtf8Filename(zFilename);
                   33756:   if( zConverted==0 ){
                   33757:     return SQLITE_NOMEM;
                   33758:   }
                   33759:   if( isNT() ){
                   33760:     do{
                   33761:       DeleteFileW(zConverted);
                   33762:     }while(   (   ((rc = GetFileAttributesW(zConverted)) != INVALID_FILE_ATTRIBUTES)
                   33763:                || ((error = GetLastError()) == ERROR_ACCESS_DENIED))
                   33764:            && (++cnt < MX_DELETION_ATTEMPTS)
                   33765:            && (Sleep(100), 1) );
                   33766: /* isNT() is 1 if SQLITE_OS_WINCE==1, so this else is never executed. 
                   33767: ** Since the ASCII version of these Windows API do not exist for WINCE,
                   33768: ** it's important to not reference them for WINCE builds.
                   33769: */
                   33770: #if SQLITE_OS_WINCE==0
                   33771:   }else{
                   33772:     do{
                   33773:       DeleteFileA(zConverted);
                   33774:     }while(   (   ((rc = GetFileAttributesA(zConverted)) != INVALID_FILE_ATTRIBUTES)
                   33775:                || ((error = GetLastError()) == ERROR_ACCESS_DENIED))
                   33776:            && (++cnt < MX_DELETION_ATTEMPTS)
                   33777:            && (Sleep(100), 1) );
                   33778: #endif
                   33779:   }
                   33780:   free(zConverted);
                   33781:   OSTRACE(("DELETE \"%s\" %s\n", zFilename,
                   33782:        ( (rc==INVALID_FILE_ATTRIBUTES) && (error==ERROR_FILE_NOT_FOUND)) ?
                   33783:          "ok" : "failed" ));
                   33784:  
                   33785:   return (   (rc == INVALID_FILE_ATTRIBUTES) 
                   33786:           && (error == ERROR_FILE_NOT_FOUND)) ? SQLITE_OK :
                   33787:                  winLogError(SQLITE_IOERR_DELETE, "winDelete", zFilename);
                   33788: }
                   33789: 
                   33790: /*
1.1.1.3 ! misho    33791: ** Check the existence and status of a file.
1.1       misho    33792: */
                   33793: static int winAccess(
                   33794:   sqlite3_vfs *pVfs,         /* Not used on win32 */
                   33795:   const char *zFilename,     /* Name of file to check */
                   33796:   int flags,                 /* Type of test to make on this file */
                   33797:   int *pResOut               /* OUT: Result */
                   33798: ){
                   33799:   DWORD attr;
                   33800:   int rc = 0;
                   33801:   void *zConverted;
                   33802:   UNUSED_PARAMETER(pVfs);
                   33803: 
                   33804:   SimulateIOError( return SQLITE_IOERR_ACCESS; );
                   33805:   zConverted = convertUtf8Filename(zFilename);
                   33806:   if( zConverted==0 ){
                   33807:     return SQLITE_NOMEM;
                   33808:   }
                   33809:   if( isNT() ){
                   33810:     WIN32_FILE_ATTRIBUTE_DATA sAttrData;
                   33811:     memset(&sAttrData, 0, sizeof(sAttrData));
                   33812:     if( GetFileAttributesExW((WCHAR*)zConverted,
                   33813:                              GetFileExInfoStandard, 
                   33814:                              &sAttrData) ){
                   33815:       /* For an SQLITE_ACCESS_EXISTS query, treat a zero-length file
                   33816:       ** as if it does not exist.
                   33817:       */
                   33818:       if(    flags==SQLITE_ACCESS_EXISTS
                   33819:           && sAttrData.nFileSizeHigh==0 
                   33820:           && sAttrData.nFileSizeLow==0 ){
                   33821:         attr = INVALID_FILE_ATTRIBUTES;
                   33822:       }else{
                   33823:         attr = sAttrData.dwFileAttributes;
                   33824:       }
                   33825:     }else{
                   33826:       if( GetLastError()!=ERROR_FILE_NOT_FOUND ){
                   33827:         winLogError(SQLITE_IOERR_ACCESS, "winAccess", zFilename);
                   33828:         free(zConverted);
                   33829:         return SQLITE_IOERR_ACCESS;
                   33830:       }else{
                   33831:         attr = INVALID_FILE_ATTRIBUTES;
                   33832:       }
                   33833:     }
                   33834: /* isNT() is 1 if SQLITE_OS_WINCE==1, so this else is never executed. 
                   33835: ** Since the ASCII version of these Windows API do not exist for WINCE,
                   33836: ** it's important to not reference them for WINCE builds.
                   33837: */
                   33838: #if SQLITE_OS_WINCE==0
                   33839:   }else{
                   33840:     attr = GetFileAttributesA((char*)zConverted);
                   33841: #endif
                   33842:   }
                   33843:   free(zConverted);
                   33844:   switch( flags ){
                   33845:     case SQLITE_ACCESS_READ:
                   33846:     case SQLITE_ACCESS_EXISTS:
                   33847:       rc = attr!=INVALID_FILE_ATTRIBUTES;
                   33848:       break;
                   33849:     case SQLITE_ACCESS_READWRITE:
                   33850:       rc = (attr & FILE_ATTRIBUTE_READONLY)==0;
                   33851:       break;
                   33852:     default:
                   33853:       assert(!"Invalid flags argument");
                   33854:   }
                   33855:   *pResOut = rc;
                   33856:   return SQLITE_OK;
                   33857: }
                   33858: 
                   33859: 
                   33860: /*
                   33861: ** Turn a relative pathname into a full pathname.  Write the full
                   33862: ** pathname into zOut[].  zOut[] will be at least pVfs->mxPathname
                   33863: ** bytes in size.
                   33864: */
                   33865: static int winFullPathname(
                   33866:   sqlite3_vfs *pVfs,            /* Pointer to vfs object */
                   33867:   const char *zRelative,        /* Possibly relative input path */
                   33868:   int nFull,                    /* Size of output buffer in bytes */
                   33869:   char *zFull                   /* Output buffer */
                   33870: ){
                   33871:   
                   33872: #if defined(__CYGWIN__)
                   33873:   SimulateIOError( return SQLITE_ERROR );
                   33874:   UNUSED_PARAMETER(nFull);
                   33875:   cygwin_conv_to_full_win32_path(zRelative, zFull);
                   33876:   return SQLITE_OK;
                   33877: #endif
                   33878: 
                   33879: #if SQLITE_OS_WINCE
                   33880:   SimulateIOError( return SQLITE_ERROR );
                   33881:   UNUSED_PARAMETER(nFull);
                   33882:   /* WinCE has no concept of a relative pathname, or so I am told. */
                   33883:   sqlite3_snprintf(pVfs->mxPathname, zFull, "%s", zRelative);
                   33884:   return SQLITE_OK;
                   33885: #endif
                   33886: 
                   33887: #if !SQLITE_OS_WINCE && !defined(__CYGWIN__)
                   33888:   int nByte;
                   33889:   void *zConverted;
                   33890:   char *zOut;
                   33891: 
                   33892:   /* If this path name begins with "/X:", where "X" is any alphabetic
                   33893:   ** character, discard the initial "/" from the pathname.
                   33894:   */
                   33895:   if( zRelative[0]=='/' && sqlite3Isalpha(zRelative[1]) && zRelative[2]==':' ){
                   33896:     zRelative++;
                   33897:   }
                   33898: 
                   33899:   /* It's odd to simulate an io-error here, but really this is just
                   33900:   ** using the io-error infrastructure to test that SQLite handles this
                   33901:   ** function failing. This function could fail if, for example, the
                   33902:   ** current working directory has been unlinked.
                   33903:   */
                   33904:   SimulateIOError( return SQLITE_ERROR );
                   33905:   UNUSED_PARAMETER(nFull);
                   33906:   zConverted = convertUtf8Filename(zRelative);
                   33907:   if( isNT() ){
                   33908:     WCHAR *zTemp;
                   33909:     nByte = GetFullPathNameW((WCHAR*)zConverted, 0, 0, 0) + 3;
                   33910:     zTemp = malloc( nByte*sizeof(zTemp[0]) );
                   33911:     if( zTemp==0 ){
                   33912:       free(zConverted);
                   33913:       return SQLITE_NOMEM;
                   33914:     }
                   33915:     GetFullPathNameW((WCHAR*)zConverted, nByte, zTemp, 0);
                   33916:     free(zConverted);
                   33917:     zOut = unicodeToUtf8(zTemp);
                   33918:     free(zTemp);
                   33919: /* isNT() is 1 if SQLITE_OS_WINCE==1, so this else is never executed. 
                   33920: ** Since the ASCII version of these Windows API do not exist for WINCE,
                   33921: ** it's important to not reference them for WINCE builds.
                   33922: */
                   33923: #if SQLITE_OS_WINCE==0
                   33924:   }else{
                   33925:     char *zTemp;
                   33926:     nByte = GetFullPathNameA((char*)zConverted, 0, 0, 0) + 3;
                   33927:     zTemp = malloc( nByte*sizeof(zTemp[0]) );
                   33928:     if( zTemp==0 ){
                   33929:       free(zConverted);
                   33930:       return SQLITE_NOMEM;
                   33931:     }
                   33932:     GetFullPathNameA((char*)zConverted, nByte, zTemp, 0);
                   33933:     free(zConverted);
                   33934:     zOut = sqlite3_win32_mbcs_to_utf8(zTemp);
                   33935:     free(zTemp);
                   33936: #endif
                   33937:   }
                   33938:   if( zOut ){
                   33939:     sqlite3_snprintf(pVfs->mxPathname, zFull, "%s", zOut);
                   33940:     free(zOut);
                   33941:     return SQLITE_OK;
                   33942:   }else{
                   33943:     return SQLITE_NOMEM;
                   33944:   }
                   33945: #endif
                   33946: }
                   33947: 
                   33948: /*
                   33949: ** Get the sector size of the device used to store
                   33950: ** file.
                   33951: */
                   33952: static int getSectorSize(
                   33953:     sqlite3_vfs *pVfs,
                   33954:     const char *zRelative     /* UTF-8 file name */
                   33955: ){
                   33956:   DWORD bytesPerSector = SQLITE_DEFAULT_SECTOR_SIZE;
                   33957:   /* GetDiskFreeSpace is not supported under WINCE */
                   33958: #if SQLITE_OS_WINCE
                   33959:   UNUSED_PARAMETER(pVfs);
                   33960:   UNUSED_PARAMETER(zRelative);
                   33961: #else
                   33962:   char zFullpath[MAX_PATH+1];
                   33963:   int rc;
                   33964:   DWORD dwRet = 0;
                   33965:   DWORD dwDummy;
                   33966: 
                   33967:   /*
                   33968:   ** We need to get the full path name of the file
                   33969:   ** to get the drive letter to look up the sector
                   33970:   ** size.
                   33971:   */
                   33972:   SimulateIOErrorBenign(1);
                   33973:   rc = winFullPathname(pVfs, zRelative, MAX_PATH, zFullpath);
                   33974:   SimulateIOErrorBenign(0);
                   33975:   if( rc == SQLITE_OK )
                   33976:   {
                   33977:     void *zConverted = convertUtf8Filename(zFullpath);
                   33978:     if( zConverted ){
                   33979:       if( isNT() ){
                   33980:         /* trim path to just drive reference */
                   33981:         WCHAR *p = zConverted;
                   33982:         for(;*p;p++){
                   33983:           if( *p == '\\' ){
                   33984:             *p = '\0';
                   33985:             break;
                   33986:           }
                   33987:         }
                   33988:         dwRet = GetDiskFreeSpaceW((WCHAR*)zConverted,
                   33989:                                   &dwDummy,
                   33990:                                   &bytesPerSector,
                   33991:                                   &dwDummy,
                   33992:                                   &dwDummy);
                   33993:       }else{
                   33994:         /* trim path to just drive reference */
                   33995:         char *p = (char *)zConverted;
                   33996:         for(;*p;p++){
                   33997:           if( *p == '\\' ){
                   33998:             *p = '\0';
                   33999:             break;
                   34000:           }
                   34001:         }
                   34002:         dwRet = GetDiskFreeSpaceA((char*)zConverted,
                   34003:                                   &dwDummy,
                   34004:                                   &bytesPerSector,
                   34005:                                   &dwDummy,
                   34006:                                   &dwDummy);
                   34007:       }
                   34008:       free(zConverted);
                   34009:     }
                   34010:     if( !dwRet ){
                   34011:       bytesPerSector = SQLITE_DEFAULT_SECTOR_SIZE;
                   34012:     }
                   34013:   }
                   34014: #endif
                   34015:   return (int) bytesPerSector; 
                   34016: }
                   34017: 
                   34018: #ifndef SQLITE_OMIT_LOAD_EXTENSION
                   34019: /*
                   34020: ** Interfaces for opening a shared library, finding entry points
                   34021: ** within the shared library, and closing the shared library.
                   34022: */
                   34023: /*
                   34024: ** Interfaces for opening a shared library, finding entry points
                   34025: ** within the shared library, and closing the shared library.
                   34026: */
                   34027: static void *winDlOpen(sqlite3_vfs *pVfs, const char *zFilename){
                   34028:   HANDLE h;
                   34029:   void *zConverted = convertUtf8Filename(zFilename);
                   34030:   UNUSED_PARAMETER(pVfs);
                   34031:   if( zConverted==0 ){
                   34032:     return 0;
                   34033:   }
                   34034:   if( isNT() ){
                   34035:     h = LoadLibraryW((WCHAR*)zConverted);
                   34036: /* isNT() is 1 if SQLITE_OS_WINCE==1, so this else is never executed. 
                   34037: ** Since the ASCII version of these Windows API do not exist for WINCE,
                   34038: ** it's important to not reference them for WINCE builds.
                   34039: */
                   34040: #if SQLITE_OS_WINCE==0
                   34041:   }else{
                   34042:     h = LoadLibraryA((char*)zConverted);
                   34043: #endif
                   34044:   }
                   34045:   free(zConverted);
                   34046:   return (void*)h;
                   34047: }
                   34048: static void winDlError(sqlite3_vfs *pVfs, int nBuf, char *zBufOut){
                   34049:   UNUSED_PARAMETER(pVfs);
                   34050:   getLastErrorMsg(nBuf, zBufOut);
                   34051: }
                   34052: void (*winDlSym(sqlite3_vfs *pVfs, void *pHandle, const char *zSymbol))(void){
                   34053:   UNUSED_PARAMETER(pVfs);
                   34054: #if SQLITE_OS_WINCE
                   34055:   /* The GetProcAddressA() routine is only available on wince. */
                   34056:   return (void(*)(void))GetProcAddressA((HANDLE)pHandle, zSymbol);
                   34057: #else
                   34058:   /* All other windows platforms expect GetProcAddress() to take
                   34059:   ** an Ansi string regardless of the _UNICODE setting */
                   34060:   return (void(*)(void))GetProcAddress((HANDLE)pHandle, zSymbol);
                   34061: #endif
                   34062: }
                   34063: void winDlClose(sqlite3_vfs *pVfs, void *pHandle){
                   34064:   UNUSED_PARAMETER(pVfs);
                   34065:   FreeLibrary((HANDLE)pHandle);
                   34066: }
                   34067: #else /* if SQLITE_OMIT_LOAD_EXTENSION is defined: */
                   34068:   #define winDlOpen  0
                   34069:   #define winDlError 0
                   34070:   #define winDlSym   0
                   34071:   #define winDlClose 0
                   34072: #endif
                   34073: 
                   34074: 
                   34075: /*
                   34076: ** Write up to nBuf bytes of randomness into zBuf.
                   34077: */
                   34078: static int winRandomness(sqlite3_vfs *pVfs, int nBuf, char *zBuf){
                   34079:   int n = 0;
                   34080:   UNUSED_PARAMETER(pVfs);
                   34081: #if defined(SQLITE_TEST)
                   34082:   n = nBuf;
                   34083:   memset(zBuf, 0, nBuf);
                   34084: #else
                   34085:   if( sizeof(SYSTEMTIME)<=nBuf-n ){
                   34086:     SYSTEMTIME x;
                   34087:     GetSystemTime(&x);
                   34088:     memcpy(&zBuf[n], &x, sizeof(x));
                   34089:     n += sizeof(x);
                   34090:   }
                   34091:   if( sizeof(DWORD)<=nBuf-n ){
                   34092:     DWORD pid = GetCurrentProcessId();
                   34093:     memcpy(&zBuf[n], &pid, sizeof(pid));
                   34094:     n += sizeof(pid);
                   34095:   }
                   34096:   if( sizeof(DWORD)<=nBuf-n ){
                   34097:     DWORD cnt = GetTickCount();
                   34098:     memcpy(&zBuf[n], &cnt, sizeof(cnt));
                   34099:     n += sizeof(cnt);
                   34100:   }
                   34101:   if( sizeof(LARGE_INTEGER)<=nBuf-n ){
                   34102:     LARGE_INTEGER i;
                   34103:     QueryPerformanceCounter(&i);
                   34104:     memcpy(&zBuf[n], &i, sizeof(i));
                   34105:     n += sizeof(i);
                   34106:   }
                   34107: #endif
                   34108:   return n;
                   34109: }
                   34110: 
                   34111: 
                   34112: /*
                   34113: ** Sleep for a little while.  Return the amount of time slept.
                   34114: */
                   34115: static int winSleep(sqlite3_vfs *pVfs, int microsec){
                   34116:   Sleep((microsec+999)/1000);
                   34117:   UNUSED_PARAMETER(pVfs);
                   34118:   return ((microsec+999)/1000)*1000;
                   34119: }
                   34120: 
                   34121: /*
                   34122: ** The following variable, if set to a non-zero value, is interpreted as
                   34123: ** the number of seconds since 1970 and is used to set the result of
                   34124: ** sqlite3OsCurrentTime() during testing.
                   34125: */
                   34126: #ifdef SQLITE_TEST
                   34127: SQLITE_API int sqlite3_current_time = 0;  /* Fake system time in seconds since 1970. */
                   34128: #endif
                   34129: 
                   34130: /*
                   34131: ** Find the current time (in Universal Coordinated Time).  Write into *piNow
                   34132: ** the current time and date as a Julian Day number times 86_400_000.  In
                   34133: ** other words, write into *piNow the number of milliseconds since the Julian
                   34134: ** epoch of noon in Greenwich on November 24, 4714 B.C according to the
                   34135: ** proleptic Gregorian calendar.
                   34136: **
                   34137: ** On success, return 0.  Return 1 if the time and date cannot be found.
                   34138: */
                   34139: static int winCurrentTimeInt64(sqlite3_vfs *pVfs, sqlite3_int64 *piNow){
                   34140:   /* FILETIME structure is a 64-bit value representing the number of 
                   34141:      100-nanosecond intervals since January 1, 1601 (= JD 2305813.5). 
                   34142:   */
                   34143:   FILETIME ft;
                   34144:   static const sqlite3_int64 winFiletimeEpoch = 23058135*(sqlite3_int64)8640000;
                   34145: #ifdef SQLITE_TEST
                   34146:   static const sqlite3_int64 unixEpoch = 24405875*(sqlite3_int64)8640000;
                   34147: #endif
                   34148:   /* 2^32 - to avoid use of LL and warnings in gcc */
                   34149:   static const sqlite3_int64 max32BitValue = 
                   34150:       (sqlite3_int64)2000000000 + (sqlite3_int64)2000000000 + (sqlite3_int64)294967296;
                   34151: 
                   34152: #if SQLITE_OS_WINCE
                   34153:   SYSTEMTIME time;
                   34154:   GetSystemTime(&time);
                   34155:   /* if SystemTimeToFileTime() fails, it returns zero. */
                   34156:   if (!SystemTimeToFileTime(&time,&ft)){
                   34157:     return 1;
                   34158:   }
                   34159: #else
                   34160:   GetSystemTimeAsFileTime( &ft );
                   34161: #endif
                   34162: 
                   34163:   *piNow = winFiletimeEpoch +
                   34164:             ((((sqlite3_int64)ft.dwHighDateTime)*max32BitValue) + 
                   34165:                (sqlite3_int64)ft.dwLowDateTime)/(sqlite3_int64)10000;
                   34166: 
                   34167: #ifdef SQLITE_TEST
                   34168:   if( sqlite3_current_time ){
                   34169:     *piNow = 1000*(sqlite3_int64)sqlite3_current_time + unixEpoch;
                   34170:   }
                   34171: #endif
                   34172:   UNUSED_PARAMETER(pVfs);
                   34173:   return 0;
                   34174: }
                   34175: 
                   34176: /*
                   34177: ** Find the current time (in Universal Coordinated Time).  Write the
                   34178: ** current time and date as a Julian Day number into *prNow and
                   34179: ** return 0.  Return 1 if the time and date cannot be found.
                   34180: */
                   34181: int winCurrentTime(sqlite3_vfs *pVfs, double *prNow){
                   34182:   int rc;
                   34183:   sqlite3_int64 i;
                   34184:   rc = winCurrentTimeInt64(pVfs, &i);
                   34185:   if( !rc ){
                   34186:     *prNow = i/86400000.0;
                   34187:   }
                   34188:   return rc;
                   34189: }
                   34190: 
                   34191: /*
                   34192: ** The idea is that this function works like a combination of
                   34193: ** GetLastError() and FormatMessage() on windows (or errno and
                   34194: ** strerror_r() on unix). After an error is returned by an OS
                   34195: ** function, SQLite calls this function with zBuf pointing to
                   34196: ** a buffer of nBuf bytes. The OS layer should populate the
                   34197: ** buffer with a nul-terminated UTF-8 encoded error message
                   34198: ** describing the last IO error to have occurred within the calling
                   34199: ** thread.
                   34200: **
                   34201: ** If the error message is too large for the supplied buffer,
                   34202: ** it should be truncated. The return value of xGetLastError
                   34203: ** is zero if the error message fits in the buffer, or non-zero
                   34204: ** otherwise (if the message was truncated). If non-zero is returned,
                   34205: ** then it is not necessary to include the nul-terminator character
                   34206: ** in the output buffer.
                   34207: **
                   34208: ** Not supplying an error message will have no adverse effect
                   34209: ** on SQLite. It is fine to have an implementation that never
                   34210: ** returns an error message:
                   34211: **
                   34212: **   int xGetLastError(sqlite3_vfs *pVfs, int nBuf, char *zBuf){
                   34213: **     assert(zBuf[0]=='\0');
                   34214: **     return 0;
                   34215: **   }
                   34216: **
                   34217: ** However if an error message is supplied, it will be incorporated
                   34218: ** by sqlite into the error message available to the user using
                   34219: ** sqlite3_errmsg(), possibly making IO errors easier to debug.
                   34220: */
                   34221: static int winGetLastError(sqlite3_vfs *pVfs, int nBuf, char *zBuf){
                   34222:   UNUSED_PARAMETER(pVfs);
                   34223:   return getLastErrorMsg(nBuf, zBuf);
                   34224: }
                   34225: 
                   34226: 
                   34227: 
                   34228: /*
                   34229: ** Initialize and deinitialize the operating system interface.
                   34230: */
                   34231: SQLITE_API int sqlite3_os_init(void){
                   34232:   static sqlite3_vfs winVfs = {
                   34233:     3,                   /* iVersion */
                   34234:     sizeof(winFile),     /* szOsFile */
                   34235:     MAX_PATH,            /* mxPathname */
                   34236:     0,                   /* pNext */
                   34237:     "win32",             /* zName */
                   34238:     0,                   /* pAppData */
                   34239:     winOpen,             /* xOpen */
                   34240:     winDelete,           /* xDelete */
                   34241:     winAccess,           /* xAccess */
                   34242:     winFullPathname,     /* xFullPathname */
                   34243:     winDlOpen,           /* xDlOpen */
                   34244:     winDlError,          /* xDlError */
                   34245:     winDlSym,            /* xDlSym */
                   34246:     winDlClose,          /* xDlClose */
                   34247:     winRandomness,       /* xRandomness */
                   34248:     winSleep,            /* xSleep */
                   34249:     winCurrentTime,      /* xCurrentTime */
                   34250:     winGetLastError,     /* xGetLastError */
                   34251:     winCurrentTimeInt64, /* xCurrentTimeInt64 */
                   34252:     0,                   /* xSetSystemCall */
                   34253:     0,                   /* xGetSystemCall */
                   34254:     0,                   /* xNextSystemCall */
                   34255:   };
                   34256: 
                   34257: #ifndef SQLITE_OMIT_WAL
                   34258:   /* get memory map allocation granularity */
                   34259:   memset(&winSysInfo, 0, sizeof(SYSTEM_INFO));
                   34260:   GetSystemInfo(&winSysInfo);
                   34261:   assert(winSysInfo.dwAllocationGranularity > 0);
                   34262: #endif
                   34263: 
                   34264:   sqlite3_vfs_register(&winVfs, 1);
                   34265:   return SQLITE_OK; 
                   34266: }
                   34267: SQLITE_API int sqlite3_os_end(void){ 
                   34268:   return SQLITE_OK;
                   34269: }
                   34270: 
                   34271: #endif /* SQLITE_OS_WIN */
                   34272: 
                   34273: /************** End of os_win.c **********************************************/
                   34274: /************** Begin file bitvec.c ******************************************/
                   34275: /*
                   34276: ** 2008 February 16
                   34277: **
                   34278: ** The author disclaims copyright to this source code.  In place of
                   34279: ** a legal notice, here is a blessing:
                   34280: **
                   34281: **    May you do good and not evil.
                   34282: **    May you find forgiveness for yourself and forgive others.
                   34283: **    May you share freely, never taking more than you give.
                   34284: **
                   34285: *************************************************************************
                   34286: ** This file implements an object that represents a fixed-length
                   34287: ** bitmap.  Bits are numbered starting with 1.
                   34288: **
                   34289: ** A bitmap is used to record which pages of a database file have been
                   34290: ** journalled during a transaction, or which pages have the "dont-write"
                   34291: ** property.  Usually only a few pages are meet either condition.
                   34292: ** So the bitmap is usually sparse and has low cardinality.
                   34293: ** But sometimes (for example when during a DROP of a large table) most
                   34294: ** or all of the pages in a database can get journalled.  In those cases, 
                   34295: ** the bitmap becomes dense with high cardinality.  The algorithm needs 
                   34296: ** to handle both cases well.
                   34297: **
                   34298: ** The size of the bitmap is fixed when the object is created.
                   34299: **
                   34300: ** All bits are clear when the bitmap is created.  Individual bits
                   34301: ** may be set or cleared one at a time.
                   34302: **
                   34303: ** Test operations are about 100 times more common that set operations.
                   34304: ** Clear operations are exceedingly rare.  There are usually between
                   34305: ** 5 and 500 set operations per Bitvec object, though the number of sets can
                   34306: ** sometimes grow into tens of thousands or larger.  The size of the
                   34307: ** Bitvec object is the number of pages in the database file at the
                   34308: ** start of a transaction, and is thus usually less than a few thousand,
                   34309: ** but can be as large as 2 billion for a really big database.
                   34310: */
                   34311: 
                   34312: /* Size of the Bitvec structure in bytes. */
                   34313: #define BITVEC_SZ        512
                   34314: 
                   34315: /* Round the union size down to the nearest pointer boundary, since that's how 
                   34316: ** it will be aligned within the Bitvec struct. */
                   34317: #define BITVEC_USIZE     (((BITVEC_SZ-(3*sizeof(u32)))/sizeof(Bitvec*))*sizeof(Bitvec*))
                   34318: 
                   34319: /* Type of the array "element" for the bitmap representation. 
                   34320: ** Should be a power of 2, and ideally, evenly divide into BITVEC_USIZE. 
                   34321: ** Setting this to the "natural word" size of your CPU may improve
                   34322: ** performance. */
                   34323: #define BITVEC_TELEM     u8
                   34324: /* Size, in bits, of the bitmap element. */
                   34325: #define BITVEC_SZELEM    8
                   34326: /* Number of elements in a bitmap array. */
                   34327: #define BITVEC_NELEM     (BITVEC_USIZE/sizeof(BITVEC_TELEM))
                   34328: /* Number of bits in the bitmap array. */
                   34329: #define BITVEC_NBIT      (BITVEC_NELEM*BITVEC_SZELEM)
                   34330: 
                   34331: /* Number of u32 values in hash table. */
                   34332: #define BITVEC_NINT      (BITVEC_USIZE/sizeof(u32))
                   34333: /* Maximum number of entries in hash table before 
                   34334: ** sub-dividing and re-hashing. */
                   34335: #define BITVEC_MXHASH    (BITVEC_NINT/2)
                   34336: /* Hashing function for the aHash representation.
                   34337: ** Empirical testing showed that the *37 multiplier 
                   34338: ** (an arbitrary prime)in the hash function provided 
                   34339: ** no fewer collisions than the no-op *1. */
                   34340: #define BITVEC_HASH(X)   (((X)*1)%BITVEC_NINT)
                   34341: 
                   34342: #define BITVEC_NPTR      (BITVEC_USIZE/sizeof(Bitvec *))
                   34343: 
                   34344: 
                   34345: /*
                   34346: ** A bitmap is an instance of the following structure.
                   34347: **
1.1.1.3 ! misho    34348: ** This bitmap records the existence of zero or more bits
1.1       misho    34349: ** with values between 1 and iSize, inclusive.
                   34350: **
                   34351: ** There are three possible representations of the bitmap.
                   34352: ** If iSize<=BITVEC_NBIT, then Bitvec.u.aBitmap[] is a straight
                   34353: ** bitmap.  The least significant bit is bit 1.
                   34354: **
                   34355: ** If iSize>BITVEC_NBIT and iDivisor==0 then Bitvec.u.aHash[] is
                   34356: ** a hash table that will hold up to BITVEC_MXHASH distinct values.
                   34357: **
                   34358: ** Otherwise, the value i is redirected into one of BITVEC_NPTR
                   34359: ** sub-bitmaps pointed to by Bitvec.u.apSub[].  Each subbitmap
                   34360: ** handles up to iDivisor separate values of i.  apSub[0] holds
                   34361: ** values between 1 and iDivisor.  apSub[1] holds values between
                   34362: ** iDivisor+1 and 2*iDivisor.  apSub[N] holds values between
                   34363: ** N*iDivisor+1 and (N+1)*iDivisor.  Each subbitmap is normalized
                   34364: ** to hold deal with values between 1 and iDivisor.
                   34365: */
                   34366: struct Bitvec {
                   34367:   u32 iSize;      /* Maximum bit index.  Max iSize is 4,294,967,296. */
                   34368:   u32 nSet;       /* Number of bits that are set - only valid for aHash
                   34369:                   ** element.  Max is BITVEC_NINT.  For BITVEC_SZ of 512,
                   34370:                   ** this would be 125. */
                   34371:   u32 iDivisor;   /* Number of bits handled by each apSub[] entry. */
                   34372:                   /* Should >=0 for apSub element. */
                   34373:                   /* Max iDivisor is max(u32) / BITVEC_NPTR + 1.  */
                   34374:                   /* For a BITVEC_SZ of 512, this would be 34,359,739. */
                   34375:   union {
                   34376:     BITVEC_TELEM aBitmap[BITVEC_NELEM];    /* Bitmap representation */
                   34377:     u32 aHash[BITVEC_NINT];      /* Hash table representation */
                   34378:     Bitvec *apSub[BITVEC_NPTR];  /* Recursive representation */
                   34379:   } u;
                   34380: };
                   34381: 
                   34382: /*
                   34383: ** Create a new bitmap object able to handle bits between 0 and iSize,
                   34384: ** inclusive.  Return a pointer to the new object.  Return NULL if 
                   34385: ** malloc fails.
                   34386: */
                   34387: SQLITE_PRIVATE Bitvec *sqlite3BitvecCreate(u32 iSize){
                   34388:   Bitvec *p;
                   34389:   assert( sizeof(*p)==BITVEC_SZ );
                   34390:   p = sqlite3MallocZero( sizeof(*p) );
                   34391:   if( p ){
                   34392:     p->iSize = iSize;
                   34393:   }
                   34394:   return p;
                   34395: }
                   34396: 
                   34397: /*
                   34398: ** Check to see if the i-th bit is set.  Return true or false.
                   34399: ** If p is NULL (if the bitmap has not been created) or if
                   34400: ** i is out of range, then return false.
                   34401: */
                   34402: SQLITE_PRIVATE int sqlite3BitvecTest(Bitvec *p, u32 i){
                   34403:   if( p==0 ) return 0;
                   34404:   if( i>p->iSize || i==0 ) return 0;
                   34405:   i--;
                   34406:   while( p->iDivisor ){
                   34407:     u32 bin = i/p->iDivisor;
                   34408:     i = i%p->iDivisor;
                   34409:     p = p->u.apSub[bin];
                   34410:     if (!p) {
                   34411:       return 0;
                   34412:     }
                   34413:   }
                   34414:   if( p->iSize<=BITVEC_NBIT ){
                   34415:     return (p->u.aBitmap[i/BITVEC_SZELEM] & (1<<(i&(BITVEC_SZELEM-1))))!=0;
                   34416:   } else{
                   34417:     u32 h = BITVEC_HASH(i++);
                   34418:     while( p->u.aHash[h] ){
                   34419:       if( p->u.aHash[h]==i ) return 1;
                   34420:       h = (h+1) % BITVEC_NINT;
                   34421:     }
                   34422:     return 0;
                   34423:   }
                   34424: }
                   34425: 
                   34426: /*
                   34427: ** Set the i-th bit.  Return 0 on success and an error code if
                   34428: ** anything goes wrong.
                   34429: **
                   34430: ** This routine might cause sub-bitmaps to be allocated.  Failing
                   34431: ** to get the memory needed to hold the sub-bitmap is the only
                   34432: ** that can go wrong with an insert, assuming p and i are valid.
                   34433: **
                   34434: ** The calling function must ensure that p is a valid Bitvec object
                   34435: ** and that the value for "i" is within range of the Bitvec object.
                   34436: ** Otherwise the behavior is undefined.
                   34437: */
                   34438: SQLITE_PRIVATE int sqlite3BitvecSet(Bitvec *p, u32 i){
                   34439:   u32 h;
                   34440:   if( p==0 ) return SQLITE_OK;
                   34441:   assert( i>0 );
                   34442:   assert( i<=p->iSize );
                   34443:   i--;
                   34444:   while((p->iSize > BITVEC_NBIT) && p->iDivisor) {
                   34445:     u32 bin = i/p->iDivisor;
                   34446:     i = i%p->iDivisor;
                   34447:     if( p->u.apSub[bin]==0 ){
                   34448:       p->u.apSub[bin] = sqlite3BitvecCreate( p->iDivisor );
                   34449:       if( p->u.apSub[bin]==0 ) return SQLITE_NOMEM;
                   34450:     }
                   34451:     p = p->u.apSub[bin];
                   34452:   }
                   34453:   if( p->iSize<=BITVEC_NBIT ){
                   34454:     p->u.aBitmap[i/BITVEC_SZELEM] |= 1 << (i&(BITVEC_SZELEM-1));
                   34455:     return SQLITE_OK;
                   34456:   }
                   34457:   h = BITVEC_HASH(i++);
                   34458:   /* if there wasn't a hash collision, and this doesn't */
                   34459:   /* completely fill the hash, then just add it without */
                   34460:   /* worring about sub-dividing and re-hashing. */
                   34461:   if( !p->u.aHash[h] ){
                   34462:     if (p->nSet<(BITVEC_NINT-1)) {
                   34463:       goto bitvec_set_end;
                   34464:     } else {
                   34465:       goto bitvec_set_rehash;
                   34466:     }
                   34467:   }
                   34468:   /* there was a collision, check to see if it's already */
                   34469:   /* in hash, if not, try to find a spot for it */
                   34470:   do {
                   34471:     if( p->u.aHash[h]==i ) return SQLITE_OK;
                   34472:     h++;
                   34473:     if( h>=BITVEC_NINT ) h = 0;
                   34474:   } while( p->u.aHash[h] );
                   34475:   /* we didn't find it in the hash.  h points to the first */
                   34476:   /* available free spot. check to see if this is going to */
                   34477:   /* make our hash too "full".  */
                   34478: bitvec_set_rehash:
                   34479:   if( p->nSet>=BITVEC_MXHASH ){
                   34480:     unsigned int j;
                   34481:     int rc;
                   34482:     u32 *aiValues = sqlite3StackAllocRaw(0, sizeof(p->u.aHash));
                   34483:     if( aiValues==0 ){
                   34484:       return SQLITE_NOMEM;
                   34485:     }else{
                   34486:       memcpy(aiValues, p->u.aHash, sizeof(p->u.aHash));
                   34487:       memset(p->u.apSub, 0, sizeof(p->u.apSub));
                   34488:       p->iDivisor = (p->iSize + BITVEC_NPTR - 1)/BITVEC_NPTR;
                   34489:       rc = sqlite3BitvecSet(p, i);
                   34490:       for(j=0; j<BITVEC_NINT; j++){
                   34491:         if( aiValues[j] ) rc |= sqlite3BitvecSet(p, aiValues[j]);
                   34492:       }
                   34493:       sqlite3StackFree(0, aiValues);
                   34494:       return rc;
                   34495:     }
                   34496:   }
                   34497: bitvec_set_end:
                   34498:   p->nSet++;
                   34499:   p->u.aHash[h] = i;
                   34500:   return SQLITE_OK;
                   34501: }
                   34502: 
                   34503: /*
                   34504: ** Clear the i-th bit.
                   34505: **
                   34506: ** pBuf must be a pointer to at least BITVEC_SZ bytes of temporary storage
                   34507: ** that BitvecClear can use to rebuilt its hash table.
                   34508: */
                   34509: SQLITE_PRIVATE void sqlite3BitvecClear(Bitvec *p, u32 i, void *pBuf){
                   34510:   if( p==0 ) return;
                   34511:   assert( i>0 );
                   34512:   i--;
                   34513:   while( p->iDivisor ){
                   34514:     u32 bin = i/p->iDivisor;
                   34515:     i = i%p->iDivisor;
                   34516:     p = p->u.apSub[bin];
                   34517:     if (!p) {
                   34518:       return;
                   34519:     }
                   34520:   }
                   34521:   if( p->iSize<=BITVEC_NBIT ){
                   34522:     p->u.aBitmap[i/BITVEC_SZELEM] &= ~(1 << (i&(BITVEC_SZELEM-1)));
                   34523:   }else{
                   34524:     unsigned int j;
                   34525:     u32 *aiValues = pBuf;
                   34526:     memcpy(aiValues, p->u.aHash, sizeof(p->u.aHash));
                   34527:     memset(p->u.aHash, 0, sizeof(p->u.aHash));
                   34528:     p->nSet = 0;
                   34529:     for(j=0; j<BITVEC_NINT; j++){
                   34530:       if( aiValues[j] && aiValues[j]!=(i+1) ){
                   34531:         u32 h = BITVEC_HASH(aiValues[j]-1);
                   34532:         p->nSet++;
                   34533:         while( p->u.aHash[h] ){
                   34534:           h++;
                   34535:           if( h>=BITVEC_NINT ) h = 0;
                   34536:         }
                   34537:         p->u.aHash[h] = aiValues[j];
                   34538:       }
                   34539:     }
                   34540:   }
                   34541: }
                   34542: 
                   34543: /*
                   34544: ** Destroy a bitmap object.  Reclaim all memory used.
                   34545: */
                   34546: SQLITE_PRIVATE void sqlite3BitvecDestroy(Bitvec *p){
                   34547:   if( p==0 ) return;
                   34548:   if( p->iDivisor ){
                   34549:     unsigned int i;
                   34550:     for(i=0; i<BITVEC_NPTR; i++){
                   34551:       sqlite3BitvecDestroy(p->u.apSub[i]);
                   34552:     }
                   34553:   }
                   34554:   sqlite3_free(p);
                   34555: }
                   34556: 
                   34557: /*
                   34558: ** Return the value of the iSize parameter specified when Bitvec *p
                   34559: ** was created.
                   34560: */
                   34561: SQLITE_PRIVATE u32 sqlite3BitvecSize(Bitvec *p){
                   34562:   return p->iSize;
                   34563: }
                   34564: 
                   34565: #ifndef SQLITE_OMIT_BUILTIN_TEST
                   34566: /*
                   34567: ** Let V[] be an array of unsigned characters sufficient to hold
                   34568: ** up to N bits.  Let I be an integer between 0 and N.  0<=I<N.
                   34569: ** Then the following macros can be used to set, clear, or test
                   34570: ** individual bits within V.
                   34571: */
                   34572: #define SETBIT(V,I)      V[I>>3] |= (1<<(I&7))
                   34573: #define CLEARBIT(V,I)    V[I>>3] &= ~(1<<(I&7))
                   34574: #define TESTBIT(V,I)     (V[I>>3]&(1<<(I&7)))!=0
                   34575: 
                   34576: /*
                   34577: ** This routine runs an extensive test of the Bitvec code.
                   34578: **
                   34579: ** The input is an array of integers that acts as a program
                   34580: ** to test the Bitvec.  The integers are opcodes followed
                   34581: ** by 0, 1, or 3 operands, depending on the opcode.  Another
                   34582: ** opcode follows immediately after the last operand.
                   34583: **
                   34584: ** There are 6 opcodes numbered from 0 through 5.  0 is the
                   34585: ** "halt" opcode and causes the test to end.
                   34586: **
                   34587: **    0          Halt and return the number of errors
                   34588: **    1 N S X    Set N bits beginning with S and incrementing by X
                   34589: **    2 N S X    Clear N bits beginning with S and incrementing by X
                   34590: **    3 N        Set N randomly chosen bits
                   34591: **    4 N        Clear N randomly chosen bits
                   34592: **    5 N S X    Set N bits from S increment X in array only, not in bitvec
                   34593: **
                   34594: ** The opcodes 1 through 4 perform set and clear operations are performed
                   34595: ** on both a Bitvec object and on a linear array of bits obtained from malloc.
                   34596: ** Opcode 5 works on the linear array only, not on the Bitvec.
                   34597: ** Opcode 5 is used to deliberately induce a fault in order to
                   34598: ** confirm that error detection works.
                   34599: **
                   34600: ** At the conclusion of the test the linear array is compared
                   34601: ** against the Bitvec object.  If there are any differences,
                   34602: ** an error is returned.  If they are the same, zero is returned.
                   34603: **
                   34604: ** If a memory allocation error occurs, return -1.
                   34605: */
                   34606: SQLITE_PRIVATE int sqlite3BitvecBuiltinTest(int sz, int *aOp){
                   34607:   Bitvec *pBitvec = 0;
                   34608:   unsigned char *pV = 0;
                   34609:   int rc = -1;
                   34610:   int i, nx, pc, op;
                   34611:   void *pTmpSpace;
                   34612: 
                   34613:   /* Allocate the Bitvec to be tested and a linear array of
                   34614:   ** bits to act as the reference */
                   34615:   pBitvec = sqlite3BitvecCreate( sz );
                   34616:   pV = sqlite3_malloc( (sz+7)/8 + 1 );
                   34617:   pTmpSpace = sqlite3_malloc(BITVEC_SZ);
                   34618:   if( pBitvec==0 || pV==0 || pTmpSpace==0  ) goto bitvec_end;
                   34619:   memset(pV, 0, (sz+7)/8 + 1);
                   34620: 
                   34621:   /* NULL pBitvec tests */
                   34622:   sqlite3BitvecSet(0, 1);
                   34623:   sqlite3BitvecClear(0, 1, pTmpSpace);
                   34624: 
                   34625:   /* Run the program */
                   34626:   pc = 0;
                   34627:   while( (op = aOp[pc])!=0 ){
                   34628:     switch( op ){
                   34629:       case 1:
                   34630:       case 2:
                   34631:       case 5: {
                   34632:         nx = 4;
                   34633:         i = aOp[pc+2] - 1;
                   34634:         aOp[pc+2] += aOp[pc+3];
                   34635:         break;
                   34636:       }
                   34637:       case 3:
                   34638:       case 4: 
                   34639:       default: {
                   34640:         nx = 2;
                   34641:         sqlite3_randomness(sizeof(i), &i);
                   34642:         break;
                   34643:       }
                   34644:     }
                   34645:     if( (--aOp[pc+1]) > 0 ) nx = 0;
                   34646:     pc += nx;
                   34647:     i = (i & 0x7fffffff)%sz;
                   34648:     if( (op & 1)!=0 ){
                   34649:       SETBIT(pV, (i+1));
                   34650:       if( op!=5 ){
                   34651:         if( sqlite3BitvecSet(pBitvec, i+1) ) goto bitvec_end;
                   34652:       }
                   34653:     }else{
                   34654:       CLEARBIT(pV, (i+1));
                   34655:       sqlite3BitvecClear(pBitvec, i+1, pTmpSpace);
                   34656:     }
                   34657:   }
                   34658: 
                   34659:   /* Test to make sure the linear array exactly matches the
                   34660:   ** Bitvec object.  Start with the assumption that they do
                   34661:   ** match (rc==0).  Change rc to non-zero if a discrepancy
                   34662:   ** is found.
                   34663:   */
                   34664:   rc = sqlite3BitvecTest(0,0) + sqlite3BitvecTest(pBitvec, sz+1)
                   34665:           + sqlite3BitvecTest(pBitvec, 0)
                   34666:           + (sqlite3BitvecSize(pBitvec) - sz);
                   34667:   for(i=1; i<=sz; i++){
                   34668:     if(  (TESTBIT(pV,i))!=sqlite3BitvecTest(pBitvec,i) ){
                   34669:       rc = i;
                   34670:       break;
                   34671:     }
                   34672:   }
                   34673: 
                   34674:   /* Free allocated structure */
                   34675: bitvec_end:
                   34676:   sqlite3_free(pTmpSpace);
                   34677:   sqlite3_free(pV);
                   34678:   sqlite3BitvecDestroy(pBitvec);
                   34679:   return rc;
                   34680: }
                   34681: #endif /* SQLITE_OMIT_BUILTIN_TEST */
                   34682: 
                   34683: /************** End of bitvec.c **********************************************/
                   34684: /************** Begin file pcache.c ******************************************/
                   34685: /*
                   34686: ** 2008 August 05
                   34687: **
                   34688: ** The author disclaims copyright to this source code.  In place of
                   34689: ** a legal notice, here is a blessing:
                   34690: **
                   34691: **    May you do good and not evil.
                   34692: **    May you find forgiveness for yourself and forgive others.
                   34693: **    May you share freely, never taking more than you give.
                   34694: **
                   34695: *************************************************************************
                   34696: ** This file implements that page cache.
                   34697: */
                   34698: 
                   34699: /*
                   34700: ** A complete page cache is an instance of this structure.
                   34701: */
                   34702: struct PCache {
                   34703:   PgHdr *pDirty, *pDirtyTail;         /* List of dirty pages in LRU order */
                   34704:   PgHdr *pSynced;                     /* Last synced page in dirty page list */
                   34705:   int nRef;                           /* Number of referenced pages */
                   34706:   int nMax;                           /* Configured cache size */
                   34707:   int szPage;                         /* Size of every page in this cache */
                   34708:   int szExtra;                        /* Size of extra space for each page */
                   34709:   int bPurgeable;                     /* True if pages are on backing store */
                   34710:   int (*xStress)(void*,PgHdr*);       /* Call to try make a page clean */
                   34711:   void *pStress;                      /* Argument to xStress */
                   34712:   sqlite3_pcache *pCache;             /* Pluggable cache module */
                   34713:   PgHdr *pPage1;                      /* Reference to page 1 */
                   34714: };
                   34715: 
                   34716: /*
                   34717: ** Some of the assert() macros in this code are too expensive to run
                   34718: ** even during normal debugging.  Use them only rarely on long-running
                   34719: ** tests.  Enable the expensive asserts using the
                   34720: ** -DSQLITE_ENABLE_EXPENSIVE_ASSERT=1 compile-time option.
                   34721: */
                   34722: #ifdef SQLITE_ENABLE_EXPENSIVE_ASSERT
                   34723: # define expensive_assert(X)  assert(X)
                   34724: #else
                   34725: # define expensive_assert(X)
                   34726: #endif
                   34727: 
                   34728: /********************************** Linked List Management ********************/
                   34729: 
                   34730: #if !defined(NDEBUG) && defined(SQLITE_ENABLE_EXPENSIVE_ASSERT)
                   34731: /*
                   34732: ** Check that the pCache->pSynced variable is set correctly. If it
                   34733: ** is not, either fail an assert or return zero. Otherwise, return
                   34734: ** non-zero. This is only used in debugging builds, as follows:
                   34735: **
                   34736: **   expensive_assert( pcacheCheckSynced(pCache) );
                   34737: */
                   34738: static int pcacheCheckSynced(PCache *pCache){
                   34739:   PgHdr *p;
                   34740:   for(p=pCache->pDirtyTail; p!=pCache->pSynced; p=p->pDirtyPrev){
                   34741:     assert( p->nRef || (p->flags&PGHDR_NEED_SYNC) );
                   34742:   }
                   34743:   return (p==0 || p->nRef || (p->flags&PGHDR_NEED_SYNC)==0);
                   34744: }
                   34745: #endif /* !NDEBUG && SQLITE_ENABLE_EXPENSIVE_ASSERT */
                   34746: 
                   34747: /*
                   34748: ** Remove page pPage from the list of dirty pages.
                   34749: */
                   34750: static void pcacheRemoveFromDirtyList(PgHdr *pPage){
                   34751:   PCache *p = pPage->pCache;
                   34752: 
                   34753:   assert( pPage->pDirtyNext || pPage==p->pDirtyTail );
                   34754:   assert( pPage->pDirtyPrev || pPage==p->pDirty );
                   34755: 
                   34756:   /* Update the PCache1.pSynced variable if necessary. */
                   34757:   if( p->pSynced==pPage ){
                   34758:     PgHdr *pSynced = pPage->pDirtyPrev;
                   34759:     while( pSynced && (pSynced->flags&PGHDR_NEED_SYNC) ){
                   34760:       pSynced = pSynced->pDirtyPrev;
                   34761:     }
                   34762:     p->pSynced = pSynced;
                   34763:   }
                   34764: 
                   34765:   if( pPage->pDirtyNext ){
                   34766:     pPage->pDirtyNext->pDirtyPrev = pPage->pDirtyPrev;
                   34767:   }else{
                   34768:     assert( pPage==p->pDirtyTail );
                   34769:     p->pDirtyTail = pPage->pDirtyPrev;
                   34770:   }
                   34771:   if( pPage->pDirtyPrev ){
                   34772:     pPage->pDirtyPrev->pDirtyNext = pPage->pDirtyNext;
                   34773:   }else{
                   34774:     assert( pPage==p->pDirty );
                   34775:     p->pDirty = pPage->pDirtyNext;
                   34776:   }
                   34777:   pPage->pDirtyNext = 0;
                   34778:   pPage->pDirtyPrev = 0;
                   34779: 
                   34780:   expensive_assert( pcacheCheckSynced(p) );
                   34781: }
                   34782: 
                   34783: /*
                   34784: ** Add page pPage to the head of the dirty list (PCache1.pDirty is set to
                   34785: ** pPage).
                   34786: */
                   34787: static void pcacheAddToDirtyList(PgHdr *pPage){
                   34788:   PCache *p = pPage->pCache;
                   34789: 
                   34790:   assert( pPage->pDirtyNext==0 && pPage->pDirtyPrev==0 && p->pDirty!=pPage );
                   34791: 
                   34792:   pPage->pDirtyNext = p->pDirty;
                   34793:   if( pPage->pDirtyNext ){
                   34794:     assert( pPage->pDirtyNext->pDirtyPrev==0 );
                   34795:     pPage->pDirtyNext->pDirtyPrev = pPage;
                   34796:   }
                   34797:   p->pDirty = pPage;
                   34798:   if( !p->pDirtyTail ){
                   34799:     p->pDirtyTail = pPage;
                   34800:   }
                   34801:   if( !p->pSynced && 0==(pPage->flags&PGHDR_NEED_SYNC) ){
                   34802:     p->pSynced = pPage;
                   34803:   }
                   34804:   expensive_assert( pcacheCheckSynced(p) );
                   34805: }
                   34806: 
                   34807: /*
                   34808: ** Wrapper around the pluggable caches xUnpin method. If the cache is
                   34809: ** being used for an in-memory database, this function is a no-op.
                   34810: */
                   34811: static void pcacheUnpin(PgHdr *p){
                   34812:   PCache *pCache = p->pCache;
                   34813:   if( pCache->bPurgeable ){
                   34814:     if( p->pgno==1 ){
                   34815:       pCache->pPage1 = 0;
                   34816:     }
                   34817:     sqlite3GlobalConfig.pcache.xUnpin(pCache->pCache, p, 0);
                   34818:   }
                   34819: }
                   34820: 
                   34821: /*************************************************** General Interfaces ******
                   34822: **
                   34823: ** Initialize and shutdown the page cache subsystem. Neither of these 
                   34824: ** functions are threadsafe.
                   34825: */
                   34826: SQLITE_PRIVATE int sqlite3PcacheInitialize(void){
                   34827:   if( sqlite3GlobalConfig.pcache.xInit==0 ){
                   34828:     /* IMPLEMENTATION-OF: R-26801-64137 If the xInit() method is NULL, then the
                   34829:     ** built-in default page cache is used instead of the application defined
                   34830:     ** page cache. */
                   34831:     sqlite3PCacheSetDefault();
                   34832:   }
                   34833:   return sqlite3GlobalConfig.pcache.xInit(sqlite3GlobalConfig.pcache.pArg);
                   34834: }
                   34835: SQLITE_PRIVATE void sqlite3PcacheShutdown(void){
                   34836:   if( sqlite3GlobalConfig.pcache.xShutdown ){
                   34837:     /* IMPLEMENTATION-OF: R-26000-56589 The xShutdown() method may be NULL. */
                   34838:     sqlite3GlobalConfig.pcache.xShutdown(sqlite3GlobalConfig.pcache.pArg);
                   34839:   }
                   34840: }
                   34841: 
                   34842: /*
                   34843: ** Return the size in bytes of a PCache object.
                   34844: */
                   34845: SQLITE_PRIVATE int sqlite3PcacheSize(void){ return sizeof(PCache); }
                   34846: 
                   34847: /*
                   34848: ** Create a new PCache object. Storage space to hold the object
                   34849: ** has already been allocated and is passed in as the p pointer. 
                   34850: ** The caller discovers how much space needs to be allocated by 
                   34851: ** calling sqlite3PcacheSize().
                   34852: */
                   34853: SQLITE_PRIVATE void sqlite3PcacheOpen(
                   34854:   int szPage,                  /* Size of every page */
                   34855:   int szExtra,                 /* Extra space associated with each page */
                   34856:   int bPurgeable,              /* True if pages are on backing store */
                   34857:   int (*xStress)(void*,PgHdr*),/* Call to try to make pages clean */
                   34858:   void *pStress,               /* Argument to xStress */
                   34859:   PCache *p                    /* Preallocated space for the PCache */
                   34860: ){
                   34861:   memset(p, 0, sizeof(PCache));
                   34862:   p->szPage = szPage;
                   34863:   p->szExtra = szExtra;
                   34864:   p->bPurgeable = bPurgeable;
                   34865:   p->xStress = xStress;
                   34866:   p->pStress = pStress;
                   34867:   p->nMax = 100;
                   34868: }
                   34869: 
                   34870: /*
                   34871: ** Change the page size for PCache object. The caller must ensure that there
                   34872: ** are no outstanding page references when this function is called.
                   34873: */
                   34874: SQLITE_PRIVATE void sqlite3PcacheSetPageSize(PCache *pCache, int szPage){
                   34875:   assert( pCache->nRef==0 && pCache->pDirty==0 );
                   34876:   if( pCache->pCache ){
                   34877:     sqlite3GlobalConfig.pcache.xDestroy(pCache->pCache);
                   34878:     pCache->pCache = 0;
                   34879:     pCache->pPage1 = 0;
                   34880:   }
                   34881:   pCache->szPage = szPage;
                   34882: }
                   34883: 
                   34884: /*
                   34885: ** Try to obtain a page from the cache.
                   34886: */
                   34887: SQLITE_PRIVATE int sqlite3PcacheFetch(
                   34888:   PCache *pCache,       /* Obtain the page from this cache */
                   34889:   Pgno pgno,            /* Page number to obtain */
                   34890:   int createFlag,       /* If true, create page if it does not exist already */
                   34891:   PgHdr **ppPage        /* Write the page here */
                   34892: ){
                   34893:   PgHdr *pPage = 0;
                   34894:   int eCreate;
                   34895: 
                   34896:   assert( pCache!=0 );
                   34897:   assert( createFlag==1 || createFlag==0 );
                   34898:   assert( pgno>0 );
                   34899: 
                   34900:   /* If the pluggable cache (sqlite3_pcache*) has not been allocated,
                   34901:   ** allocate it now.
                   34902:   */
                   34903:   if( !pCache->pCache && createFlag ){
                   34904:     sqlite3_pcache *p;
                   34905:     int nByte;
                   34906:     nByte = pCache->szPage + pCache->szExtra + sizeof(PgHdr);
                   34907:     p = sqlite3GlobalConfig.pcache.xCreate(nByte, pCache->bPurgeable);
                   34908:     if( !p ){
                   34909:       return SQLITE_NOMEM;
                   34910:     }
                   34911:     sqlite3GlobalConfig.pcache.xCachesize(p, pCache->nMax);
                   34912:     pCache->pCache = p;
                   34913:   }
                   34914: 
                   34915:   eCreate = createFlag * (1 + (!pCache->bPurgeable || !pCache->pDirty));
                   34916:   if( pCache->pCache ){
                   34917:     pPage = sqlite3GlobalConfig.pcache.xFetch(pCache->pCache, pgno, eCreate);
                   34918:   }
                   34919: 
                   34920:   if( !pPage && eCreate==1 ){
                   34921:     PgHdr *pPg;
                   34922: 
                   34923:     /* Find a dirty page to write-out and recycle. First try to find a 
                   34924:     ** page that does not require a journal-sync (one with PGHDR_NEED_SYNC
                   34925:     ** cleared), but if that is not possible settle for any other 
                   34926:     ** unreferenced dirty page.
                   34927:     */
                   34928:     expensive_assert( pcacheCheckSynced(pCache) );
                   34929:     for(pPg=pCache->pSynced; 
                   34930:         pPg && (pPg->nRef || (pPg->flags&PGHDR_NEED_SYNC)); 
                   34931:         pPg=pPg->pDirtyPrev
                   34932:     );
                   34933:     pCache->pSynced = pPg;
                   34934:     if( !pPg ){
                   34935:       for(pPg=pCache->pDirtyTail; pPg && pPg->nRef; pPg=pPg->pDirtyPrev);
                   34936:     }
                   34937:     if( pPg ){
                   34938:       int rc;
                   34939: #ifdef SQLITE_LOG_CACHE_SPILL
                   34940:       sqlite3_log(SQLITE_FULL, 
                   34941:                   "spill page %d making room for %d - cache used: %d/%d",
                   34942:                   pPg->pgno, pgno,
                   34943:                   sqlite3GlobalConfig.pcache.xPagecount(pCache->pCache),
                   34944:                   pCache->nMax);
                   34945: #endif
                   34946:       rc = pCache->xStress(pCache->pStress, pPg);
                   34947:       if( rc!=SQLITE_OK && rc!=SQLITE_BUSY ){
                   34948:         return rc;
                   34949:       }
                   34950:     }
                   34951: 
                   34952:     pPage = sqlite3GlobalConfig.pcache.xFetch(pCache->pCache, pgno, 2);
                   34953:   }
                   34954: 
                   34955:   if( pPage ){
                   34956:     if( !pPage->pData ){
                   34957:       memset(pPage, 0, sizeof(PgHdr));
                   34958:       pPage->pData = (void *)&pPage[1];
                   34959:       pPage->pExtra = (void*)&((char *)pPage->pData)[pCache->szPage];
                   34960:       memset(pPage->pExtra, 0, pCache->szExtra);
                   34961:       pPage->pCache = pCache;
                   34962:       pPage->pgno = pgno;
                   34963:     }
                   34964:     assert( pPage->pCache==pCache );
                   34965:     assert( pPage->pgno==pgno );
                   34966:     assert( pPage->pData==(void *)&pPage[1] );
                   34967:     assert( pPage->pExtra==(void *)&((char *)&pPage[1])[pCache->szPage] );
                   34968: 
                   34969:     if( 0==pPage->nRef ){
                   34970:       pCache->nRef++;
                   34971:     }
                   34972:     pPage->nRef++;
                   34973:     if( pgno==1 ){
                   34974:       pCache->pPage1 = pPage;
                   34975:     }
                   34976:   }
                   34977:   *ppPage = pPage;
                   34978:   return (pPage==0 && eCreate) ? SQLITE_NOMEM : SQLITE_OK;
                   34979: }
                   34980: 
                   34981: /*
                   34982: ** Decrement the reference count on a page. If the page is clean and the
                   34983: ** reference count drops to 0, then it is made elible for recycling.
                   34984: */
                   34985: SQLITE_PRIVATE void sqlite3PcacheRelease(PgHdr *p){
                   34986:   assert( p->nRef>0 );
                   34987:   p->nRef--;
                   34988:   if( p->nRef==0 ){
                   34989:     PCache *pCache = p->pCache;
                   34990:     pCache->nRef--;
                   34991:     if( (p->flags&PGHDR_DIRTY)==0 ){
                   34992:       pcacheUnpin(p);
                   34993:     }else{
                   34994:       /* Move the page to the head of the dirty list. */
                   34995:       pcacheRemoveFromDirtyList(p);
                   34996:       pcacheAddToDirtyList(p);
                   34997:     }
                   34998:   }
                   34999: }
                   35000: 
                   35001: /*
                   35002: ** Increase the reference count of a supplied page by 1.
                   35003: */
                   35004: SQLITE_PRIVATE void sqlite3PcacheRef(PgHdr *p){
                   35005:   assert(p->nRef>0);
                   35006:   p->nRef++;
                   35007: }
                   35008: 
                   35009: /*
                   35010: ** Drop a page from the cache. There must be exactly one reference to the
                   35011: ** page. This function deletes that reference, so after it returns the
                   35012: ** page pointed to by p is invalid.
                   35013: */
                   35014: SQLITE_PRIVATE void sqlite3PcacheDrop(PgHdr *p){
                   35015:   PCache *pCache;
                   35016:   assert( p->nRef==1 );
                   35017:   if( p->flags&PGHDR_DIRTY ){
                   35018:     pcacheRemoveFromDirtyList(p);
                   35019:   }
                   35020:   pCache = p->pCache;
                   35021:   pCache->nRef--;
                   35022:   if( p->pgno==1 ){
                   35023:     pCache->pPage1 = 0;
                   35024:   }
                   35025:   sqlite3GlobalConfig.pcache.xUnpin(pCache->pCache, p, 1);
                   35026: }
                   35027: 
                   35028: /*
                   35029: ** Make sure the page is marked as dirty. If it isn't dirty already,
                   35030: ** make it so.
                   35031: */
                   35032: SQLITE_PRIVATE void sqlite3PcacheMakeDirty(PgHdr *p){
                   35033:   p->flags &= ~PGHDR_DONT_WRITE;
                   35034:   assert( p->nRef>0 );
                   35035:   if( 0==(p->flags & PGHDR_DIRTY) ){
                   35036:     p->flags |= PGHDR_DIRTY;
                   35037:     pcacheAddToDirtyList( p);
                   35038:   }
                   35039: }
                   35040: 
                   35041: /*
                   35042: ** Make sure the page is marked as clean. If it isn't clean already,
                   35043: ** make it so.
                   35044: */
                   35045: SQLITE_PRIVATE void sqlite3PcacheMakeClean(PgHdr *p){
                   35046:   if( (p->flags & PGHDR_DIRTY) ){
                   35047:     pcacheRemoveFromDirtyList(p);
                   35048:     p->flags &= ~(PGHDR_DIRTY|PGHDR_NEED_SYNC);
                   35049:     if( p->nRef==0 ){
                   35050:       pcacheUnpin(p);
                   35051:     }
                   35052:   }
                   35053: }
                   35054: 
                   35055: /*
                   35056: ** Make every page in the cache clean.
                   35057: */
                   35058: SQLITE_PRIVATE void sqlite3PcacheCleanAll(PCache *pCache){
                   35059:   PgHdr *p;
                   35060:   while( (p = pCache->pDirty)!=0 ){
                   35061:     sqlite3PcacheMakeClean(p);
                   35062:   }
                   35063: }
                   35064: 
                   35065: /*
                   35066: ** Clear the PGHDR_NEED_SYNC flag from all dirty pages.
                   35067: */
                   35068: SQLITE_PRIVATE void sqlite3PcacheClearSyncFlags(PCache *pCache){
                   35069:   PgHdr *p;
                   35070:   for(p=pCache->pDirty; p; p=p->pDirtyNext){
                   35071:     p->flags &= ~PGHDR_NEED_SYNC;
                   35072:   }
                   35073:   pCache->pSynced = pCache->pDirtyTail;
                   35074: }
                   35075: 
                   35076: /*
                   35077: ** Change the page number of page p to newPgno. 
                   35078: */
                   35079: SQLITE_PRIVATE void sqlite3PcacheMove(PgHdr *p, Pgno newPgno){
                   35080:   PCache *pCache = p->pCache;
                   35081:   assert( p->nRef>0 );
                   35082:   assert( newPgno>0 );
                   35083:   sqlite3GlobalConfig.pcache.xRekey(pCache->pCache, p, p->pgno, newPgno);
                   35084:   p->pgno = newPgno;
                   35085:   if( (p->flags&PGHDR_DIRTY) && (p->flags&PGHDR_NEED_SYNC) ){
                   35086:     pcacheRemoveFromDirtyList(p);
                   35087:     pcacheAddToDirtyList(p);
                   35088:   }
                   35089: }
                   35090: 
                   35091: /*
                   35092: ** Drop every cache entry whose page number is greater than "pgno". The
                   35093: ** caller must ensure that there are no outstanding references to any pages
                   35094: ** other than page 1 with a page number greater than pgno.
                   35095: **
                   35096: ** If there is a reference to page 1 and the pgno parameter passed to this
                   35097: ** function is 0, then the data area associated with page 1 is zeroed, but
                   35098: ** the page object is not dropped.
                   35099: */
                   35100: SQLITE_PRIVATE void sqlite3PcacheTruncate(PCache *pCache, Pgno pgno){
                   35101:   if( pCache->pCache ){
                   35102:     PgHdr *p;
                   35103:     PgHdr *pNext;
                   35104:     for(p=pCache->pDirty; p; p=pNext){
                   35105:       pNext = p->pDirtyNext;
                   35106:       /* This routine never gets call with a positive pgno except right
                   35107:       ** after sqlite3PcacheCleanAll().  So if there are dirty pages,
                   35108:       ** it must be that pgno==0.
                   35109:       */
                   35110:       assert( p->pgno>0 );
                   35111:       if( ALWAYS(p->pgno>pgno) ){
                   35112:         assert( p->flags&PGHDR_DIRTY );
                   35113:         sqlite3PcacheMakeClean(p);
                   35114:       }
                   35115:     }
                   35116:     if( pgno==0 && pCache->pPage1 ){
                   35117:       memset(pCache->pPage1->pData, 0, pCache->szPage);
                   35118:       pgno = 1;
                   35119:     }
                   35120:     sqlite3GlobalConfig.pcache.xTruncate(pCache->pCache, pgno+1);
                   35121:   }
                   35122: }
                   35123: 
                   35124: /*
                   35125: ** Close a cache.
                   35126: */
                   35127: SQLITE_PRIVATE void sqlite3PcacheClose(PCache *pCache){
                   35128:   if( pCache->pCache ){
                   35129:     sqlite3GlobalConfig.pcache.xDestroy(pCache->pCache);
                   35130:   }
                   35131: }
                   35132: 
                   35133: /* 
                   35134: ** Discard the contents of the cache.
                   35135: */
                   35136: SQLITE_PRIVATE void sqlite3PcacheClear(PCache *pCache){
                   35137:   sqlite3PcacheTruncate(pCache, 0);
                   35138: }
                   35139: 
                   35140: /*
                   35141: ** Merge two lists of pages connected by pDirty and in pgno order.
                   35142: ** Do not both fixing the pDirtyPrev pointers.
                   35143: */
                   35144: static PgHdr *pcacheMergeDirtyList(PgHdr *pA, PgHdr *pB){
                   35145:   PgHdr result, *pTail;
                   35146:   pTail = &result;
                   35147:   while( pA && pB ){
                   35148:     if( pA->pgno<pB->pgno ){
                   35149:       pTail->pDirty = pA;
                   35150:       pTail = pA;
                   35151:       pA = pA->pDirty;
                   35152:     }else{
                   35153:       pTail->pDirty = pB;
                   35154:       pTail = pB;
                   35155:       pB = pB->pDirty;
                   35156:     }
                   35157:   }
                   35158:   if( pA ){
                   35159:     pTail->pDirty = pA;
                   35160:   }else if( pB ){
                   35161:     pTail->pDirty = pB;
                   35162:   }else{
                   35163:     pTail->pDirty = 0;
                   35164:   }
                   35165:   return result.pDirty;
                   35166: }
                   35167: 
                   35168: /*
                   35169: ** Sort the list of pages in accending order by pgno.  Pages are
                   35170: ** connected by pDirty pointers.  The pDirtyPrev pointers are
                   35171: ** corrupted by this sort.
                   35172: **
                   35173: ** Since there cannot be more than 2^31 distinct pages in a database,
                   35174: ** there cannot be more than 31 buckets required by the merge sorter.
                   35175: ** One extra bucket is added to catch overflow in case something
                   35176: ** ever changes to make the previous sentence incorrect.
                   35177: */
                   35178: #define N_SORT_BUCKET  32
                   35179: static PgHdr *pcacheSortDirtyList(PgHdr *pIn){
                   35180:   PgHdr *a[N_SORT_BUCKET], *p;
                   35181:   int i;
                   35182:   memset(a, 0, sizeof(a));
                   35183:   while( pIn ){
                   35184:     p = pIn;
                   35185:     pIn = p->pDirty;
                   35186:     p->pDirty = 0;
                   35187:     for(i=0; ALWAYS(i<N_SORT_BUCKET-1); i++){
                   35188:       if( a[i]==0 ){
                   35189:         a[i] = p;
                   35190:         break;
                   35191:       }else{
                   35192:         p = pcacheMergeDirtyList(a[i], p);
                   35193:         a[i] = 0;
                   35194:       }
                   35195:     }
                   35196:     if( NEVER(i==N_SORT_BUCKET-1) ){
                   35197:       /* To get here, there need to be 2^(N_SORT_BUCKET) elements in
                   35198:       ** the input list.  But that is impossible.
                   35199:       */
                   35200:       a[i] = pcacheMergeDirtyList(a[i], p);
                   35201:     }
                   35202:   }
                   35203:   p = a[0];
                   35204:   for(i=1; i<N_SORT_BUCKET; i++){
                   35205:     p = pcacheMergeDirtyList(p, a[i]);
                   35206:   }
                   35207:   return p;
                   35208: }
                   35209: 
                   35210: /*
                   35211: ** Return a list of all dirty pages in the cache, sorted by page number.
                   35212: */
                   35213: SQLITE_PRIVATE PgHdr *sqlite3PcacheDirtyList(PCache *pCache){
                   35214:   PgHdr *p;
                   35215:   for(p=pCache->pDirty; p; p=p->pDirtyNext){
                   35216:     p->pDirty = p->pDirtyNext;
                   35217:   }
                   35218:   return pcacheSortDirtyList(pCache->pDirty);
                   35219: }
                   35220: 
                   35221: /* 
                   35222: ** Return the total number of referenced pages held by the cache.
                   35223: */
                   35224: SQLITE_PRIVATE int sqlite3PcacheRefCount(PCache *pCache){
                   35225:   return pCache->nRef;
                   35226: }
                   35227: 
                   35228: /*
                   35229: ** Return the number of references to the page supplied as an argument.
                   35230: */
                   35231: SQLITE_PRIVATE int sqlite3PcachePageRefcount(PgHdr *p){
                   35232:   return p->nRef;
                   35233: }
                   35234: 
                   35235: /* 
                   35236: ** Return the total number of pages in the cache.
                   35237: */
                   35238: SQLITE_PRIVATE int sqlite3PcachePagecount(PCache *pCache){
                   35239:   int nPage = 0;
                   35240:   if( pCache->pCache ){
                   35241:     nPage = sqlite3GlobalConfig.pcache.xPagecount(pCache->pCache);
                   35242:   }
                   35243:   return nPage;
                   35244: }
                   35245: 
                   35246: #ifdef SQLITE_TEST
                   35247: /*
                   35248: ** Get the suggested cache-size value.
                   35249: */
                   35250: SQLITE_PRIVATE int sqlite3PcacheGetCachesize(PCache *pCache){
                   35251:   return pCache->nMax;
                   35252: }
                   35253: #endif
                   35254: 
                   35255: /*
                   35256: ** Set the suggested cache-size value.
                   35257: */
                   35258: SQLITE_PRIVATE void sqlite3PcacheSetCachesize(PCache *pCache, int mxPage){
                   35259:   pCache->nMax = mxPage;
                   35260:   if( pCache->pCache ){
                   35261:     sqlite3GlobalConfig.pcache.xCachesize(pCache->pCache, mxPage);
                   35262:   }
                   35263: }
                   35264: 
                   35265: #if defined(SQLITE_CHECK_PAGES) || defined(SQLITE_DEBUG)
                   35266: /*
                   35267: ** For all dirty pages currently in the cache, invoke the specified
                   35268: ** callback. This is only used if the SQLITE_CHECK_PAGES macro is
                   35269: ** defined.
                   35270: */
                   35271: SQLITE_PRIVATE void sqlite3PcacheIterateDirty(PCache *pCache, void (*xIter)(PgHdr *)){
                   35272:   PgHdr *pDirty;
                   35273:   for(pDirty=pCache->pDirty; pDirty; pDirty=pDirty->pDirtyNext){
                   35274:     xIter(pDirty);
                   35275:   }
                   35276: }
                   35277: #endif
                   35278: 
                   35279: /************** End of pcache.c **********************************************/
                   35280: /************** Begin file pcache1.c *****************************************/
                   35281: /*
                   35282: ** 2008 November 05
                   35283: **
                   35284: ** The author disclaims copyright to this source code.  In place of
                   35285: ** a legal notice, here is a blessing:
                   35286: **
                   35287: **    May you do good and not evil.
                   35288: **    May you find forgiveness for yourself and forgive others.
                   35289: **    May you share freely, never taking more than you give.
                   35290: **
                   35291: *************************************************************************
                   35292: **
                   35293: ** This file implements the default page cache implementation (the
                   35294: ** sqlite3_pcache interface). It also contains part of the implementation
                   35295: ** of the SQLITE_CONFIG_PAGECACHE and sqlite3_release_memory() features.
                   35296: ** If the default page cache implementation is overriden, then neither of
                   35297: ** these two features are available.
                   35298: */
                   35299: 
                   35300: 
                   35301: typedef struct PCache1 PCache1;
                   35302: typedef struct PgHdr1 PgHdr1;
                   35303: typedef struct PgFreeslot PgFreeslot;
                   35304: typedef struct PGroup PGroup;
                   35305: 
                   35306: /* Each page cache (or PCache) belongs to a PGroup.  A PGroup is a set 
                   35307: ** of one or more PCaches that are able to recycle each others unpinned
                   35308: ** pages when they are under memory pressure.  A PGroup is an instance of
                   35309: ** the following object.
                   35310: **
                   35311: ** This page cache implementation works in one of two modes:
                   35312: **
                   35313: **   (1)  Every PCache is the sole member of its own PGroup.  There is
                   35314: **        one PGroup per PCache.
                   35315: **
                   35316: **   (2)  There is a single global PGroup that all PCaches are a member
                   35317: **        of.
                   35318: **
                   35319: ** Mode 1 uses more memory (since PCache instances are not able to rob
                   35320: ** unused pages from other PCaches) but it also operates without a mutex,
                   35321: ** and is therefore often faster.  Mode 2 requires a mutex in order to be
                   35322: ** threadsafe, but is able recycle pages more efficient.
                   35323: **
                   35324: ** For mode (1), PGroup.mutex is NULL.  For mode (2) there is only a single
                   35325: ** PGroup which is the pcache1.grp global variable and its mutex is
                   35326: ** SQLITE_MUTEX_STATIC_LRU.
                   35327: */
                   35328: struct PGroup {
                   35329:   sqlite3_mutex *mutex;          /* MUTEX_STATIC_LRU or NULL */
                   35330:   int nMaxPage;                  /* Sum of nMax for purgeable caches */
                   35331:   int nMinPage;                  /* Sum of nMin for purgeable caches */
                   35332:   int mxPinned;                  /* nMaxpage + 10 - nMinPage */
                   35333:   int nCurrentPage;              /* Number of purgeable pages allocated */
                   35334:   PgHdr1 *pLruHead, *pLruTail;   /* LRU list of unpinned pages */
                   35335: };
                   35336: 
                   35337: /* Each page cache is an instance of the following object.  Every
                   35338: ** open database file (including each in-memory database and each
                   35339: ** temporary or transient database) has a single page cache which
                   35340: ** is an instance of this object.
                   35341: **
                   35342: ** Pointers to structures of this type are cast and returned as 
                   35343: ** opaque sqlite3_pcache* handles.
                   35344: */
                   35345: struct PCache1 {
                   35346:   /* Cache configuration parameters. Page size (szPage) and the purgeable
                   35347:   ** flag (bPurgeable) are set when the cache is created. nMax may be 
                   35348:   ** modified at any time by a call to the pcache1CacheSize() method.
                   35349:   ** The PGroup mutex must be held when accessing nMax.
                   35350:   */
                   35351:   PGroup *pGroup;                     /* PGroup this cache belongs to */
                   35352:   int szPage;                         /* Size of allocated pages in bytes */
                   35353:   int bPurgeable;                     /* True if cache is purgeable */
                   35354:   unsigned int nMin;                  /* Minimum number of pages reserved */
                   35355:   unsigned int nMax;                  /* Configured "cache_size" value */
                   35356:   unsigned int n90pct;                /* nMax*9/10 */
                   35357: 
                   35358:   /* Hash table of all pages. The following variables may only be accessed
                   35359:   ** when the accessor is holding the PGroup mutex.
                   35360:   */
                   35361:   unsigned int nRecyclable;           /* Number of pages in the LRU list */
                   35362:   unsigned int nPage;                 /* Total number of pages in apHash */
                   35363:   unsigned int nHash;                 /* Number of slots in apHash[] */
                   35364:   PgHdr1 **apHash;                    /* Hash table for fast lookup by key */
                   35365: 
                   35366:   unsigned int iMaxKey;               /* Largest key seen since xTruncate() */
                   35367: };
                   35368: 
                   35369: /*
                   35370: ** Each cache entry is represented by an instance of the following 
                   35371: ** structure. A buffer of PgHdr1.pCache->szPage bytes is allocated 
                   35372: ** directly before this structure in memory (see the PGHDR1_TO_PAGE() 
                   35373: ** macro below).
                   35374: */
                   35375: struct PgHdr1 {
                   35376:   unsigned int iKey;             /* Key value (page number) */
                   35377:   PgHdr1 *pNext;                 /* Next in hash table chain */
                   35378:   PCache1 *pCache;               /* Cache that currently owns this page */
                   35379:   PgHdr1 *pLruNext;              /* Next in LRU list of unpinned pages */
                   35380:   PgHdr1 *pLruPrev;              /* Previous in LRU list of unpinned pages */
                   35381: };
                   35382: 
                   35383: /*
                   35384: ** Free slots in the allocator used to divide up the buffer provided using
                   35385: ** the SQLITE_CONFIG_PAGECACHE mechanism.
                   35386: */
                   35387: struct PgFreeslot {
                   35388:   PgFreeslot *pNext;  /* Next free slot */
                   35389: };
                   35390: 
                   35391: /*
                   35392: ** Global data used by this cache.
                   35393: */
                   35394: static SQLITE_WSD struct PCacheGlobal {
                   35395:   PGroup grp;                    /* The global PGroup for mode (2) */
                   35396: 
                   35397:   /* Variables related to SQLITE_CONFIG_PAGECACHE settings.  The
                   35398:   ** szSlot, nSlot, pStart, pEnd, nReserve, and isInit values are all
                   35399:   ** fixed at sqlite3_initialize() time and do not require mutex protection.
                   35400:   ** The nFreeSlot and pFree values do require mutex protection.
                   35401:   */
                   35402:   int isInit;                    /* True if initialized */
                   35403:   int szSlot;                    /* Size of each free slot */
                   35404:   int nSlot;                     /* The number of pcache slots */
                   35405:   int nReserve;                  /* Try to keep nFreeSlot above this */
                   35406:   void *pStart, *pEnd;           /* Bounds of pagecache malloc range */
                   35407:   /* Above requires no mutex.  Use mutex below for variable that follow. */
                   35408:   sqlite3_mutex *mutex;          /* Mutex for accessing the following: */
                   35409:   int nFreeSlot;                 /* Number of unused pcache slots */
                   35410:   PgFreeslot *pFree;             /* Free page blocks */
                   35411:   /* The following value requires a mutex to change.  We skip the mutex on
                   35412:   ** reading because (1) most platforms read a 32-bit integer atomically and
                   35413:   ** (2) even if an incorrect value is read, no great harm is done since this
                   35414:   ** is really just an optimization. */
                   35415:   int bUnderPressure;            /* True if low on PAGECACHE memory */
                   35416: } pcache1_g;
                   35417: 
                   35418: /*
                   35419: ** All code in this file should access the global structure above via the
                   35420: ** alias "pcache1". This ensures that the WSD emulation is used when
                   35421: ** compiling for systems that do not support real WSD.
                   35422: */
                   35423: #define pcache1 (GLOBAL(struct PCacheGlobal, pcache1_g))
                   35424: 
                   35425: /*
                   35426: ** When a PgHdr1 structure is allocated, the associated PCache1.szPage
                   35427: ** bytes of data are located directly before it in memory (i.e. the total
                   35428: ** size of the allocation is sizeof(PgHdr1)+PCache1.szPage byte). The
                   35429: ** PGHDR1_TO_PAGE() macro takes a pointer to a PgHdr1 structure as
                   35430: ** an argument and returns a pointer to the associated block of szPage
                   35431: ** bytes. The PAGE_TO_PGHDR1() macro does the opposite: its argument is
                   35432: ** a pointer to a block of szPage bytes of data and the return value is
                   35433: ** a pointer to the associated PgHdr1 structure.
                   35434: **
                   35435: **   assert( PGHDR1_TO_PAGE(PAGE_TO_PGHDR1(pCache, X))==X );
                   35436: */
                   35437: #define PGHDR1_TO_PAGE(p)    (void*)(((char*)p) - p->pCache->szPage)
                   35438: #define PAGE_TO_PGHDR1(c, p) (PgHdr1*)(((char*)p) + c->szPage)
                   35439: 
                   35440: /*
                   35441: ** Macros to enter and leave the PCache LRU mutex.
                   35442: */
                   35443: #define pcache1EnterMutex(X) sqlite3_mutex_enter((X)->mutex)
                   35444: #define pcache1LeaveMutex(X) sqlite3_mutex_leave((X)->mutex)
                   35445: 
                   35446: /******************************************************************************/
                   35447: /******** Page Allocation/SQLITE_CONFIG_PCACHE Related Functions **************/
                   35448: 
                   35449: /*
                   35450: ** This function is called during initialization if a static buffer is 
                   35451: ** supplied to use for the page-cache by passing the SQLITE_CONFIG_PAGECACHE
                   35452: ** verb to sqlite3_config(). Parameter pBuf points to an allocation large
                   35453: ** enough to contain 'n' buffers of 'sz' bytes each.
                   35454: **
                   35455: ** This routine is called from sqlite3_initialize() and so it is guaranteed
                   35456: ** to be serialized already.  There is no need for further mutexing.
                   35457: */
                   35458: SQLITE_PRIVATE void sqlite3PCacheBufferSetup(void *pBuf, int sz, int n){
                   35459:   if( pcache1.isInit ){
                   35460:     PgFreeslot *p;
                   35461:     sz = ROUNDDOWN8(sz);
                   35462:     pcache1.szSlot = sz;
                   35463:     pcache1.nSlot = pcache1.nFreeSlot = n;
                   35464:     pcache1.nReserve = n>90 ? 10 : (n/10 + 1);
                   35465:     pcache1.pStart = pBuf;
                   35466:     pcache1.pFree = 0;
                   35467:     pcache1.bUnderPressure = 0;
                   35468:     while( n-- ){
                   35469:       p = (PgFreeslot*)pBuf;
                   35470:       p->pNext = pcache1.pFree;
                   35471:       pcache1.pFree = p;
                   35472:       pBuf = (void*)&((char*)pBuf)[sz];
                   35473:     }
                   35474:     pcache1.pEnd = pBuf;
                   35475:   }
                   35476: }
                   35477: 
                   35478: /*
                   35479: ** Malloc function used within this file to allocate space from the buffer
                   35480: ** configured using sqlite3_config(SQLITE_CONFIG_PAGECACHE) option. If no 
                   35481: ** such buffer exists or there is no space left in it, this function falls 
                   35482: ** back to sqlite3Malloc().
                   35483: **
                   35484: ** Multiple threads can run this routine at the same time.  Global variables
                   35485: ** in pcache1 need to be protected via mutex.
                   35486: */
                   35487: static void *pcache1Alloc(int nByte){
                   35488:   void *p = 0;
                   35489:   assert( sqlite3_mutex_notheld(pcache1.grp.mutex) );
                   35490:   sqlite3StatusSet(SQLITE_STATUS_PAGECACHE_SIZE, nByte);
                   35491:   if( nByte<=pcache1.szSlot ){
                   35492:     sqlite3_mutex_enter(pcache1.mutex);
                   35493:     p = (PgHdr1 *)pcache1.pFree;
                   35494:     if( p ){
                   35495:       pcache1.pFree = pcache1.pFree->pNext;
                   35496:       pcache1.nFreeSlot--;
                   35497:       pcache1.bUnderPressure = pcache1.nFreeSlot<pcache1.nReserve;
                   35498:       assert( pcache1.nFreeSlot>=0 );
                   35499:       sqlite3StatusAdd(SQLITE_STATUS_PAGECACHE_USED, 1);
                   35500:     }
                   35501:     sqlite3_mutex_leave(pcache1.mutex);
                   35502:   }
                   35503:   if( p==0 ){
                   35504:     /* Memory is not available in the SQLITE_CONFIG_PAGECACHE pool.  Get
                   35505:     ** it from sqlite3Malloc instead.
                   35506:     */
                   35507:     p = sqlite3Malloc(nByte);
                   35508:     if( p ){
                   35509:       int sz = sqlite3MallocSize(p);
                   35510:       sqlite3_mutex_enter(pcache1.mutex);
                   35511:       sqlite3StatusAdd(SQLITE_STATUS_PAGECACHE_OVERFLOW, sz);
                   35512:       sqlite3_mutex_leave(pcache1.mutex);
                   35513:     }
                   35514:     sqlite3MemdebugSetType(p, MEMTYPE_PCACHE);
                   35515:   }
                   35516:   return p;
                   35517: }
                   35518: 
                   35519: /*
                   35520: ** Free an allocated buffer obtained from pcache1Alloc().
                   35521: */
                   35522: static void pcache1Free(void *p){
                   35523:   if( p==0 ) return;
                   35524:   if( p>=pcache1.pStart && p<pcache1.pEnd ){
                   35525:     PgFreeslot *pSlot;
                   35526:     sqlite3_mutex_enter(pcache1.mutex);
                   35527:     sqlite3StatusAdd(SQLITE_STATUS_PAGECACHE_USED, -1);
                   35528:     pSlot = (PgFreeslot*)p;
                   35529:     pSlot->pNext = pcache1.pFree;
                   35530:     pcache1.pFree = pSlot;
                   35531:     pcache1.nFreeSlot++;
                   35532:     pcache1.bUnderPressure = pcache1.nFreeSlot<pcache1.nReserve;
                   35533:     assert( pcache1.nFreeSlot<=pcache1.nSlot );
                   35534:     sqlite3_mutex_leave(pcache1.mutex);
                   35535:   }else{
                   35536:     int iSize;
                   35537:     assert( sqlite3MemdebugHasType(p, MEMTYPE_PCACHE) );
                   35538:     sqlite3MemdebugSetType(p, MEMTYPE_HEAP);
                   35539:     iSize = sqlite3MallocSize(p);
                   35540:     sqlite3_mutex_enter(pcache1.mutex);
                   35541:     sqlite3StatusAdd(SQLITE_STATUS_PAGECACHE_OVERFLOW, -iSize);
                   35542:     sqlite3_mutex_leave(pcache1.mutex);
                   35543:     sqlite3_free(p);
                   35544:   }
                   35545: }
                   35546: 
                   35547: #ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT
                   35548: /*
                   35549: ** Return the size of a pcache allocation
                   35550: */
                   35551: static int pcache1MemSize(void *p){
                   35552:   if( p>=pcache1.pStart && p<pcache1.pEnd ){
                   35553:     return pcache1.szSlot;
                   35554:   }else{
                   35555:     int iSize;
                   35556:     assert( sqlite3MemdebugHasType(p, MEMTYPE_PCACHE) );
                   35557:     sqlite3MemdebugSetType(p, MEMTYPE_HEAP);
                   35558:     iSize = sqlite3MallocSize(p);
                   35559:     sqlite3MemdebugSetType(p, MEMTYPE_PCACHE);
                   35560:     return iSize;
                   35561:   }
                   35562: }
                   35563: #endif /* SQLITE_ENABLE_MEMORY_MANAGEMENT */
                   35564: 
                   35565: /*
                   35566: ** Allocate a new page object initially associated with cache pCache.
                   35567: */
                   35568: static PgHdr1 *pcache1AllocPage(PCache1 *pCache){
                   35569:   int nByte = sizeof(PgHdr1) + pCache->szPage;
                   35570:   void *pPg = pcache1Alloc(nByte);
                   35571:   PgHdr1 *p;
                   35572:   if( pPg ){
                   35573:     p = PAGE_TO_PGHDR1(pCache, pPg);
                   35574:     if( pCache->bPurgeable ){
                   35575:       pCache->pGroup->nCurrentPage++;
                   35576:     }
                   35577:   }else{
                   35578:     p = 0;
                   35579:   }
                   35580:   return p;
                   35581: }
                   35582: 
                   35583: /*
                   35584: ** Free a page object allocated by pcache1AllocPage().
                   35585: **
                   35586: ** The pointer is allowed to be NULL, which is prudent.  But it turns out
                   35587: ** that the current implementation happens to never call this routine
                   35588: ** with a NULL pointer, so we mark the NULL test with ALWAYS().
                   35589: */
                   35590: static void pcache1FreePage(PgHdr1 *p){
                   35591:   if( ALWAYS(p) ){
                   35592:     PCache1 *pCache = p->pCache;
                   35593:     if( pCache->bPurgeable ){
                   35594:       pCache->pGroup->nCurrentPage--;
                   35595:     }
                   35596:     pcache1Free(PGHDR1_TO_PAGE(p));
                   35597:   }
                   35598: }
                   35599: 
                   35600: /*
                   35601: ** Malloc function used by SQLite to obtain space from the buffer configured
                   35602: ** using sqlite3_config(SQLITE_CONFIG_PAGECACHE) option. If no such buffer
                   35603: ** exists, this function falls back to sqlite3Malloc().
                   35604: */
                   35605: SQLITE_PRIVATE void *sqlite3PageMalloc(int sz){
                   35606:   return pcache1Alloc(sz);
                   35607: }
                   35608: 
                   35609: /*
                   35610: ** Free an allocated buffer obtained from sqlite3PageMalloc().
                   35611: */
                   35612: SQLITE_PRIVATE void sqlite3PageFree(void *p){
                   35613:   pcache1Free(p);
                   35614: }
                   35615: 
                   35616: 
                   35617: /*
                   35618: ** Return true if it desirable to avoid allocating a new page cache
                   35619: ** entry.
                   35620: **
                   35621: ** If memory was allocated specifically to the page cache using
                   35622: ** SQLITE_CONFIG_PAGECACHE but that memory has all been used, then
                   35623: ** it is desirable to avoid allocating a new page cache entry because
                   35624: ** presumably SQLITE_CONFIG_PAGECACHE was suppose to be sufficient
                   35625: ** for all page cache needs and we should not need to spill the
                   35626: ** allocation onto the heap.
                   35627: **
                   35628: ** Or, the heap is used for all page cache memory put the heap is
                   35629: ** under memory pressure, then again it is desirable to avoid
                   35630: ** allocating a new page cache entry in order to avoid stressing
                   35631: ** the heap even further.
                   35632: */
                   35633: static int pcache1UnderMemoryPressure(PCache1 *pCache){
                   35634:   if( pcache1.nSlot && pCache->szPage<=pcache1.szSlot ){
                   35635:     return pcache1.bUnderPressure;
                   35636:   }else{
                   35637:     return sqlite3HeapNearlyFull();
                   35638:   }
                   35639: }
                   35640: 
                   35641: /******************************************************************************/
                   35642: /******** General Implementation Functions ************************************/
                   35643: 
                   35644: /*
                   35645: ** This function is used to resize the hash table used by the cache passed
                   35646: ** as the first argument.
                   35647: **
                   35648: ** The PCache mutex must be held when this function is called.
                   35649: */
                   35650: static int pcache1ResizeHash(PCache1 *p){
                   35651:   PgHdr1 **apNew;
                   35652:   unsigned int nNew;
                   35653:   unsigned int i;
                   35654: 
                   35655:   assert( sqlite3_mutex_held(p->pGroup->mutex) );
                   35656: 
                   35657:   nNew = p->nHash*2;
                   35658:   if( nNew<256 ){
                   35659:     nNew = 256;
                   35660:   }
                   35661: 
                   35662:   pcache1LeaveMutex(p->pGroup);
                   35663:   if( p->nHash ){ sqlite3BeginBenignMalloc(); }
                   35664:   apNew = (PgHdr1 **)sqlite3_malloc(sizeof(PgHdr1 *)*nNew);
                   35665:   if( p->nHash ){ sqlite3EndBenignMalloc(); }
                   35666:   pcache1EnterMutex(p->pGroup);
                   35667:   if( apNew ){
                   35668:     memset(apNew, 0, sizeof(PgHdr1 *)*nNew);
                   35669:     for(i=0; i<p->nHash; i++){
                   35670:       PgHdr1 *pPage;
                   35671:       PgHdr1 *pNext = p->apHash[i];
                   35672:       while( (pPage = pNext)!=0 ){
                   35673:         unsigned int h = pPage->iKey % nNew;
                   35674:         pNext = pPage->pNext;
                   35675:         pPage->pNext = apNew[h];
                   35676:         apNew[h] = pPage;
                   35677:       }
                   35678:     }
                   35679:     sqlite3_free(p->apHash);
                   35680:     p->apHash = apNew;
                   35681:     p->nHash = nNew;
                   35682:   }
                   35683: 
                   35684:   return (p->apHash ? SQLITE_OK : SQLITE_NOMEM);
                   35685: }
                   35686: 
                   35687: /*
                   35688: ** This function is used internally to remove the page pPage from the 
                   35689: ** PGroup LRU list, if is part of it. If pPage is not part of the PGroup
                   35690: ** LRU list, then this function is a no-op.
                   35691: **
                   35692: ** The PGroup mutex must be held when this function is called.
                   35693: **
                   35694: ** If pPage is NULL then this routine is a no-op.
                   35695: */
                   35696: static void pcache1PinPage(PgHdr1 *pPage){
                   35697:   PCache1 *pCache;
                   35698:   PGroup *pGroup;
                   35699: 
                   35700:   if( pPage==0 ) return;
                   35701:   pCache = pPage->pCache;
                   35702:   pGroup = pCache->pGroup;
                   35703:   assert( sqlite3_mutex_held(pGroup->mutex) );
                   35704:   if( pPage->pLruNext || pPage==pGroup->pLruTail ){
                   35705:     if( pPage->pLruPrev ){
                   35706:       pPage->pLruPrev->pLruNext = pPage->pLruNext;
                   35707:     }
                   35708:     if( pPage->pLruNext ){
                   35709:       pPage->pLruNext->pLruPrev = pPage->pLruPrev;
                   35710:     }
                   35711:     if( pGroup->pLruHead==pPage ){
                   35712:       pGroup->pLruHead = pPage->pLruNext;
                   35713:     }
                   35714:     if( pGroup->pLruTail==pPage ){
                   35715:       pGroup->pLruTail = pPage->pLruPrev;
                   35716:     }
                   35717:     pPage->pLruNext = 0;
                   35718:     pPage->pLruPrev = 0;
                   35719:     pPage->pCache->nRecyclable--;
                   35720:   }
                   35721: }
                   35722: 
                   35723: 
                   35724: /*
                   35725: ** Remove the page supplied as an argument from the hash table 
                   35726: ** (PCache1.apHash structure) that it is currently stored in.
                   35727: **
                   35728: ** The PGroup mutex must be held when this function is called.
                   35729: */
                   35730: static void pcache1RemoveFromHash(PgHdr1 *pPage){
                   35731:   unsigned int h;
                   35732:   PCache1 *pCache = pPage->pCache;
                   35733:   PgHdr1 **pp;
                   35734: 
                   35735:   assert( sqlite3_mutex_held(pCache->pGroup->mutex) );
                   35736:   h = pPage->iKey % pCache->nHash;
                   35737:   for(pp=&pCache->apHash[h]; (*pp)!=pPage; pp=&(*pp)->pNext);
                   35738:   *pp = (*pp)->pNext;
                   35739: 
                   35740:   pCache->nPage--;
                   35741: }
                   35742: 
                   35743: /*
                   35744: ** If there are currently more than nMaxPage pages allocated, try
                   35745: ** to recycle pages to reduce the number allocated to nMaxPage.
                   35746: */
                   35747: static void pcache1EnforceMaxPage(PGroup *pGroup){
                   35748:   assert( sqlite3_mutex_held(pGroup->mutex) );
                   35749:   while( pGroup->nCurrentPage>pGroup->nMaxPage && pGroup->pLruTail ){
                   35750:     PgHdr1 *p = pGroup->pLruTail;
                   35751:     assert( p->pCache->pGroup==pGroup );
                   35752:     pcache1PinPage(p);
                   35753:     pcache1RemoveFromHash(p);
                   35754:     pcache1FreePage(p);
                   35755:   }
                   35756: }
                   35757: 
                   35758: /*
                   35759: ** Discard all pages from cache pCache with a page number (key value) 
                   35760: ** greater than or equal to iLimit. Any pinned pages that meet this 
                   35761: ** criteria are unpinned before they are discarded.
                   35762: **
                   35763: ** The PCache mutex must be held when this function is called.
                   35764: */
                   35765: static void pcache1TruncateUnsafe(
                   35766:   PCache1 *pCache,             /* The cache to truncate */
                   35767:   unsigned int iLimit          /* Drop pages with this pgno or larger */
                   35768: ){
                   35769:   TESTONLY( unsigned int nPage = 0; )  /* To assert pCache->nPage is correct */
                   35770:   unsigned int h;
                   35771:   assert( sqlite3_mutex_held(pCache->pGroup->mutex) );
                   35772:   for(h=0; h<pCache->nHash; h++){
                   35773:     PgHdr1 **pp = &pCache->apHash[h]; 
                   35774:     PgHdr1 *pPage;
                   35775:     while( (pPage = *pp)!=0 ){
                   35776:       if( pPage->iKey>=iLimit ){
                   35777:         pCache->nPage--;
                   35778:         *pp = pPage->pNext;
                   35779:         pcache1PinPage(pPage);
                   35780:         pcache1FreePage(pPage);
                   35781:       }else{
                   35782:         pp = &pPage->pNext;
                   35783:         TESTONLY( nPage++; )
                   35784:       }
                   35785:     }
                   35786:   }
                   35787:   assert( pCache->nPage==nPage );
                   35788: }
                   35789: 
                   35790: /******************************************************************************/
                   35791: /******** sqlite3_pcache Methods **********************************************/
                   35792: 
                   35793: /*
                   35794: ** Implementation of the sqlite3_pcache.xInit method.
                   35795: */
                   35796: static int pcache1Init(void *NotUsed){
                   35797:   UNUSED_PARAMETER(NotUsed);
                   35798:   assert( pcache1.isInit==0 );
                   35799:   memset(&pcache1, 0, sizeof(pcache1));
                   35800:   if( sqlite3GlobalConfig.bCoreMutex ){
                   35801:     pcache1.grp.mutex = sqlite3_mutex_alloc(SQLITE_MUTEX_STATIC_LRU);
                   35802:     pcache1.mutex = sqlite3_mutex_alloc(SQLITE_MUTEX_STATIC_PMEM);
                   35803:   }
                   35804:   pcache1.grp.mxPinned = 10;
                   35805:   pcache1.isInit = 1;
                   35806:   return SQLITE_OK;
                   35807: }
                   35808: 
                   35809: /*
                   35810: ** Implementation of the sqlite3_pcache.xShutdown method.
                   35811: ** Note that the static mutex allocated in xInit does 
                   35812: ** not need to be freed.
                   35813: */
                   35814: static void pcache1Shutdown(void *NotUsed){
                   35815:   UNUSED_PARAMETER(NotUsed);
                   35816:   assert( pcache1.isInit!=0 );
                   35817:   memset(&pcache1, 0, sizeof(pcache1));
                   35818: }
                   35819: 
                   35820: /*
                   35821: ** Implementation of the sqlite3_pcache.xCreate method.
                   35822: **
                   35823: ** Allocate a new cache.
                   35824: */
                   35825: static sqlite3_pcache *pcache1Create(int szPage, int bPurgeable){
                   35826:   PCache1 *pCache;      /* The newly created page cache */
                   35827:   PGroup *pGroup;       /* The group the new page cache will belong to */
                   35828:   int sz;               /* Bytes of memory required to allocate the new cache */
                   35829: 
                   35830:   /*
1.1.1.3 ! misho    35831:   ** The separateCache variable is true if each PCache has its own private
1.1       misho    35832:   ** PGroup.  In other words, separateCache is true for mode (1) where no
                   35833:   ** mutexing is required.
                   35834:   **
                   35835:   **   *  Always use a unified cache (mode-2) if ENABLE_MEMORY_MANAGEMENT
                   35836:   **
                   35837:   **   *  Always use a unified cache in single-threaded applications
                   35838:   **
                   35839:   **   *  Otherwise (if multi-threaded and ENABLE_MEMORY_MANAGEMENT is off)
                   35840:   **      use separate caches (mode-1)
                   35841:   */
                   35842: #if defined(SQLITE_ENABLE_MEMORY_MANAGEMENT) || SQLITE_THREADSAFE==0
                   35843:   const int separateCache = 0;
                   35844: #else
                   35845:   int separateCache = sqlite3GlobalConfig.bCoreMutex>0;
                   35846: #endif
                   35847: 
                   35848:   sz = sizeof(PCache1) + sizeof(PGroup)*separateCache;
                   35849:   pCache = (PCache1 *)sqlite3_malloc(sz);
                   35850:   if( pCache ){
                   35851:     memset(pCache, 0, sz);
                   35852:     if( separateCache ){
                   35853:       pGroup = (PGroup*)&pCache[1];
                   35854:       pGroup->mxPinned = 10;
                   35855:     }else{
                   35856:       pGroup = &pcache1.grp;
                   35857:     }
                   35858:     pCache->pGroup = pGroup;
                   35859:     pCache->szPage = szPage;
                   35860:     pCache->bPurgeable = (bPurgeable ? 1 : 0);
                   35861:     if( bPurgeable ){
                   35862:       pCache->nMin = 10;
                   35863:       pcache1EnterMutex(pGroup);
                   35864:       pGroup->nMinPage += pCache->nMin;
                   35865:       pGroup->mxPinned = pGroup->nMaxPage + 10 - pGroup->nMinPage;
                   35866:       pcache1LeaveMutex(pGroup);
                   35867:     }
                   35868:   }
                   35869:   return (sqlite3_pcache *)pCache;
                   35870: }
                   35871: 
                   35872: /*
                   35873: ** Implementation of the sqlite3_pcache.xCachesize method. 
                   35874: **
                   35875: ** Configure the cache_size limit for a cache.
                   35876: */
                   35877: static void pcache1Cachesize(sqlite3_pcache *p, int nMax){
                   35878:   PCache1 *pCache = (PCache1 *)p;
                   35879:   if( pCache->bPurgeable ){
                   35880:     PGroup *pGroup = pCache->pGroup;
                   35881:     pcache1EnterMutex(pGroup);
                   35882:     pGroup->nMaxPage += (nMax - pCache->nMax);
                   35883:     pGroup->mxPinned = pGroup->nMaxPage + 10 - pGroup->nMinPage;
                   35884:     pCache->nMax = nMax;
                   35885:     pCache->n90pct = pCache->nMax*9/10;
                   35886:     pcache1EnforceMaxPage(pGroup);
                   35887:     pcache1LeaveMutex(pGroup);
                   35888:   }
                   35889: }
                   35890: 
                   35891: /*
                   35892: ** Implementation of the sqlite3_pcache.xPagecount method. 
                   35893: */
                   35894: static int pcache1Pagecount(sqlite3_pcache *p){
                   35895:   int n;
                   35896:   PCache1 *pCache = (PCache1*)p;
                   35897:   pcache1EnterMutex(pCache->pGroup);
                   35898:   n = pCache->nPage;
                   35899:   pcache1LeaveMutex(pCache->pGroup);
                   35900:   return n;
                   35901: }
                   35902: 
                   35903: /*
                   35904: ** Implementation of the sqlite3_pcache.xFetch method. 
                   35905: **
                   35906: ** Fetch a page by key value.
                   35907: **
                   35908: ** Whether or not a new page may be allocated by this function depends on
                   35909: ** the value of the createFlag argument.  0 means do not allocate a new
                   35910: ** page.  1 means allocate a new page if space is easily available.  2 
                   35911: ** means to try really hard to allocate a new page.
                   35912: **
                   35913: ** For a non-purgeable cache (a cache used as the storage for an in-memory
                   35914: ** database) there is really no difference between createFlag 1 and 2.  So
                   35915: ** the calling function (pcache.c) will never have a createFlag of 1 on
                   35916: ** a non-purgable cache.
                   35917: **
                   35918: ** There are three different approaches to obtaining space for a page,
                   35919: ** depending on the value of parameter createFlag (which may be 0, 1 or 2).
                   35920: **
                   35921: **   1. Regardless of the value of createFlag, the cache is searched for a 
                   35922: **      copy of the requested page. If one is found, it is returned.
                   35923: **
                   35924: **   2. If createFlag==0 and the page is not already in the cache, NULL is
                   35925: **      returned.
                   35926: **
                   35927: **   3. If createFlag is 1, and the page is not already in the cache, then
                   35928: **      return NULL (do not allocate a new page) if any of the following
                   35929: **      conditions are true:
                   35930: **
                   35931: **       (a) the number of pages pinned by the cache is greater than
                   35932: **           PCache1.nMax, or
                   35933: **
                   35934: **       (b) the number of pages pinned by the cache is greater than
                   35935: **           the sum of nMax for all purgeable caches, less the sum of 
                   35936: **           nMin for all other purgeable caches, or
                   35937: **
                   35938: **   4. If none of the first three conditions apply and the cache is marked
                   35939: **      as purgeable, and if one of the following is true:
                   35940: **
                   35941: **       (a) The number of pages allocated for the cache is already 
                   35942: **           PCache1.nMax, or
                   35943: **
                   35944: **       (b) The number of pages allocated for all purgeable caches is
                   35945: **           already equal to or greater than the sum of nMax for all
                   35946: **           purgeable caches,
                   35947: **
                   35948: **       (c) The system is under memory pressure and wants to avoid
                   35949: **           unnecessary pages cache entry allocations
                   35950: **
                   35951: **      then attempt to recycle a page from the LRU list. If it is the right
                   35952: **      size, return the recycled buffer. Otherwise, free the buffer and
                   35953: **      proceed to step 5. 
                   35954: **
                   35955: **   5. Otherwise, allocate and return a new page buffer.
                   35956: */
                   35957: static void *pcache1Fetch(sqlite3_pcache *p, unsigned int iKey, int createFlag){
                   35958:   int nPinned;
                   35959:   PCache1 *pCache = (PCache1 *)p;
                   35960:   PGroup *pGroup;
                   35961:   PgHdr1 *pPage = 0;
                   35962: 
                   35963:   assert( pCache->bPurgeable || createFlag!=1 );
                   35964:   assert( pCache->bPurgeable || pCache->nMin==0 );
                   35965:   assert( pCache->bPurgeable==0 || pCache->nMin==10 );
                   35966:   assert( pCache->nMin==0 || pCache->bPurgeable );
                   35967:   pcache1EnterMutex(pGroup = pCache->pGroup);
                   35968: 
                   35969:   /* Step 1: Search the hash table for an existing entry. */
                   35970:   if( pCache->nHash>0 ){
                   35971:     unsigned int h = iKey % pCache->nHash;
                   35972:     for(pPage=pCache->apHash[h]; pPage&&pPage->iKey!=iKey; pPage=pPage->pNext);
                   35973:   }
                   35974: 
                   35975:   /* Step 2: Abort if no existing page is found and createFlag is 0 */
                   35976:   if( pPage || createFlag==0 ){
                   35977:     pcache1PinPage(pPage);
                   35978:     goto fetch_out;
                   35979:   }
                   35980: 
                   35981:   /* The pGroup local variable will normally be initialized by the
                   35982:   ** pcache1EnterMutex() macro above.  But if SQLITE_MUTEX_OMIT is defined,
                   35983:   ** then pcache1EnterMutex() is a no-op, so we have to initialize the
                   35984:   ** local variable here.  Delaying the initialization of pGroup is an
                   35985:   ** optimization:  The common case is to exit the module before reaching
                   35986:   ** this point.
                   35987:   */
                   35988: #ifdef SQLITE_MUTEX_OMIT
                   35989:   pGroup = pCache->pGroup;
                   35990: #endif
                   35991: 
                   35992: 
                   35993:   /* Step 3: Abort if createFlag is 1 but the cache is nearly full */
                   35994:   nPinned = pCache->nPage - pCache->nRecyclable;
                   35995:   assert( nPinned>=0 );
                   35996:   assert( pGroup->mxPinned == pGroup->nMaxPage + 10 - pGroup->nMinPage );
                   35997:   assert( pCache->n90pct == pCache->nMax*9/10 );
                   35998:   if( createFlag==1 && (
                   35999:         nPinned>=pGroup->mxPinned
                   36000:      || nPinned>=(int)pCache->n90pct
                   36001:      || pcache1UnderMemoryPressure(pCache)
                   36002:   )){
                   36003:     goto fetch_out;
                   36004:   }
                   36005: 
                   36006:   if( pCache->nPage>=pCache->nHash && pcache1ResizeHash(pCache) ){
                   36007:     goto fetch_out;
                   36008:   }
                   36009: 
                   36010:   /* Step 4. Try to recycle a page. */
                   36011:   if( pCache->bPurgeable && pGroup->pLruTail && (
                   36012:          (pCache->nPage+1>=pCache->nMax)
                   36013:       || pGroup->nCurrentPage>=pGroup->nMaxPage
                   36014:       || pcache1UnderMemoryPressure(pCache)
                   36015:   )){
                   36016:     PCache1 *pOtherCache;
                   36017:     pPage = pGroup->pLruTail;
                   36018:     pcache1RemoveFromHash(pPage);
                   36019:     pcache1PinPage(pPage);
                   36020:     if( (pOtherCache = pPage->pCache)->szPage!=pCache->szPage ){
                   36021:       pcache1FreePage(pPage);
                   36022:       pPage = 0;
                   36023:     }else{
                   36024:       pGroup->nCurrentPage -= 
                   36025:                (pOtherCache->bPurgeable - pCache->bPurgeable);
                   36026:     }
                   36027:   }
                   36028: 
                   36029:   /* Step 5. If a usable page buffer has still not been found, 
                   36030:   ** attempt to allocate a new one. 
                   36031:   */
                   36032:   if( !pPage ){
                   36033:     if( createFlag==1 ) sqlite3BeginBenignMalloc();
                   36034:     pcache1LeaveMutex(pGroup);
                   36035:     pPage = pcache1AllocPage(pCache);
                   36036:     pcache1EnterMutex(pGroup);
                   36037:     if( createFlag==1 ) sqlite3EndBenignMalloc();
                   36038:   }
                   36039: 
                   36040:   if( pPage ){
                   36041:     unsigned int h = iKey % pCache->nHash;
                   36042:     pCache->nPage++;
                   36043:     pPage->iKey = iKey;
                   36044:     pPage->pNext = pCache->apHash[h];
                   36045:     pPage->pCache = pCache;
                   36046:     pPage->pLruPrev = 0;
                   36047:     pPage->pLruNext = 0;
                   36048:     *(void **)(PGHDR1_TO_PAGE(pPage)) = 0;
                   36049:     pCache->apHash[h] = pPage;
                   36050:   }
                   36051: 
                   36052: fetch_out:
                   36053:   if( pPage && iKey>pCache->iMaxKey ){
                   36054:     pCache->iMaxKey = iKey;
                   36055:   }
                   36056:   pcache1LeaveMutex(pGroup);
                   36057:   return (pPage ? PGHDR1_TO_PAGE(pPage) : 0);
                   36058: }
                   36059: 
                   36060: 
                   36061: /*
                   36062: ** Implementation of the sqlite3_pcache.xUnpin method.
                   36063: **
                   36064: ** Mark a page as unpinned (eligible for asynchronous recycling).
                   36065: */
                   36066: static void pcache1Unpin(sqlite3_pcache *p, void *pPg, int reuseUnlikely){
                   36067:   PCache1 *pCache = (PCache1 *)p;
                   36068:   PgHdr1 *pPage = PAGE_TO_PGHDR1(pCache, pPg);
                   36069:   PGroup *pGroup = pCache->pGroup;
                   36070:  
                   36071:   assert( pPage->pCache==pCache );
                   36072:   pcache1EnterMutex(pGroup);
                   36073: 
                   36074:   /* It is an error to call this function if the page is already 
                   36075:   ** part of the PGroup LRU list.
                   36076:   */
                   36077:   assert( pPage->pLruPrev==0 && pPage->pLruNext==0 );
                   36078:   assert( pGroup->pLruHead!=pPage && pGroup->pLruTail!=pPage );
                   36079: 
                   36080:   if( reuseUnlikely || pGroup->nCurrentPage>pGroup->nMaxPage ){
                   36081:     pcache1RemoveFromHash(pPage);
                   36082:     pcache1FreePage(pPage);
                   36083:   }else{
                   36084:     /* Add the page to the PGroup LRU list. */
                   36085:     if( pGroup->pLruHead ){
                   36086:       pGroup->pLruHead->pLruPrev = pPage;
                   36087:       pPage->pLruNext = pGroup->pLruHead;
                   36088:       pGroup->pLruHead = pPage;
                   36089:     }else{
                   36090:       pGroup->pLruTail = pPage;
                   36091:       pGroup->pLruHead = pPage;
                   36092:     }
                   36093:     pCache->nRecyclable++;
                   36094:   }
                   36095: 
                   36096:   pcache1LeaveMutex(pCache->pGroup);
                   36097: }
                   36098: 
                   36099: /*
                   36100: ** Implementation of the sqlite3_pcache.xRekey method. 
                   36101: */
                   36102: static void pcache1Rekey(
                   36103:   sqlite3_pcache *p,
                   36104:   void *pPg,
                   36105:   unsigned int iOld,
                   36106:   unsigned int iNew
                   36107: ){
                   36108:   PCache1 *pCache = (PCache1 *)p;
                   36109:   PgHdr1 *pPage = PAGE_TO_PGHDR1(pCache, pPg);
                   36110:   PgHdr1 **pp;
                   36111:   unsigned int h; 
                   36112:   assert( pPage->iKey==iOld );
                   36113:   assert( pPage->pCache==pCache );
                   36114: 
                   36115:   pcache1EnterMutex(pCache->pGroup);
                   36116: 
                   36117:   h = iOld%pCache->nHash;
                   36118:   pp = &pCache->apHash[h];
                   36119:   while( (*pp)!=pPage ){
                   36120:     pp = &(*pp)->pNext;
                   36121:   }
                   36122:   *pp = pPage->pNext;
                   36123: 
                   36124:   h = iNew%pCache->nHash;
                   36125:   pPage->iKey = iNew;
                   36126:   pPage->pNext = pCache->apHash[h];
                   36127:   pCache->apHash[h] = pPage;
                   36128:   if( iNew>pCache->iMaxKey ){
                   36129:     pCache->iMaxKey = iNew;
                   36130:   }
                   36131: 
                   36132:   pcache1LeaveMutex(pCache->pGroup);
                   36133: }
                   36134: 
                   36135: /*
                   36136: ** Implementation of the sqlite3_pcache.xTruncate method. 
                   36137: **
                   36138: ** Discard all unpinned pages in the cache with a page number equal to
                   36139: ** or greater than parameter iLimit. Any pinned pages with a page number
                   36140: ** equal to or greater than iLimit are implicitly unpinned.
                   36141: */
                   36142: static void pcache1Truncate(sqlite3_pcache *p, unsigned int iLimit){
                   36143:   PCache1 *pCache = (PCache1 *)p;
                   36144:   pcache1EnterMutex(pCache->pGroup);
                   36145:   if( iLimit<=pCache->iMaxKey ){
                   36146:     pcache1TruncateUnsafe(pCache, iLimit);
                   36147:     pCache->iMaxKey = iLimit-1;
                   36148:   }
                   36149:   pcache1LeaveMutex(pCache->pGroup);
                   36150: }
                   36151: 
                   36152: /*
                   36153: ** Implementation of the sqlite3_pcache.xDestroy method. 
                   36154: **
                   36155: ** Destroy a cache allocated using pcache1Create().
                   36156: */
                   36157: static void pcache1Destroy(sqlite3_pcache *p){
                   36158:   PCache1 *pCache = (PCache1 *)p;
                   36159:   PGroup *pGroup = pCache->pGroup;
                   36160:   assert( pCache->bPurgeable || (pCache->nMax==0 && pCache->nMin==0) );
                   36161:   pcache1EnterMutex(pGroup);
                   36162:   pcache1TruncateUnsafe(pCache, 0);
                   36163:   pGroup->nMaxPage -= pCache->nMax;
                   36164:   pGroup->nMinPage -= pCache->nMin;
                   36165:   pGroup->mxPinned = pGroup->nMaxPage + 10 - pGroup->nMinPage;
                   36166:   pcache1EnforceMaxPage(pGroup);
                   36167:   pcache1LeaveMutex(pGroup);
                   36168:   sqlite3_free(pCache->apHash);
                   36169:   sqlite3_free(pCache);
                   36170: }
                   36171: 
                   36172: /*
                   36173: ** This function is called during initialization (sqlite3_initialize()) to
                   36174: ** install the default pluggable cache module, assuming the user has not
                   36175: ** already provided an alternative.
                   36176: */
                   36177: SQLITE_PRIVATE void sqlite3PCacheSetDefault(void){
                   36178:   static const sqlite3_pcache_methods defaultMethods = {
                   36179:     0,                       /* pArg */
                   36180:     pcache1Init,             /* xInit */
                   36181:     pcache1Shutdown,         /* xShutdown */
                   36182:     pcache1Create,           /* xCreate */
                   36183:     pcache1Cachesize,        /* xCachesize */
                   36184:     pcache1Pagecount,        /* xPagecount */
                   36185:     pcache1Fetch,            /* xFetch */
                   36186:     pcache1Unpin,            /* xUnpin */
                   36187:     pcache1Rekey,            /* xRekey */
                   36188:     pcache1Truncate,         /* xTruncate */
                   36189:     pcache1Destroy           /* xDestroy */
                   36190:   };
                   36191:   sqlite3_config(SQLITE_CONFIG_PCACHE, &defaultMethods);
                   36192: }
                   36193: 
                   36194: #ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT
                   36195: /*
                   36196: ** This function is called to free superfluous dynamically allocated memory
                   36197: ** held by the pager system. Memory in use by any SQLite pager allocated
                   36198: ** by the current thread may be sqlite3_free()ed.
                   36199: **
                   36200: ** nReq is the number of bytes of memory required. Once this much has
                   36201: ** been released, the function returns. The return value is the total number 
                   36202: ** of bytes of memory released.
                   36203: */
                   36204: SQLITE_PRIVATE int sqlite3PcacheReleaseMemory(int nReq){
                   36205:   int nFree = 0;
                   36206:   assert( sqlite3_mutex_notheld(pcache1.grp.mutex) );
                   36207:   assert( sqlite3_mutex_notheld(pcache1.mutex) );
                   36208:   if( pcache1.pStart==0 ){
                   36209:     PgHdr1 *p;
                   36210:     pcache1EnterMutex(&pcache1.grp);
                   36211:     while( (nReq<0 || nFree<nReq) && ((p=pcache1.grp.pLruTail)!=0) ){
                   36212:       nFree += pcache1MemSize(PGHDR1_TO_PAGE(p));
                   36213:       pcache1PinPage(p);
                   36214:       pcache1RemoveFromHash(p);
                   36215:       pcache1FreePage(p);
                   36216:     }
                   36217:     pcache1LeaveMutex(&pcache1.grp);
                   36218:   }
                   36219:   return nFree;
                   36220: }
                   36221: #endif /* SQLITE_ENABLE_MEMORY_MANAGEMENT */
                   36222: 
                   36223: #ifdef SQLITE_TEST
                   36224: /*
                   36225: ** This function is used by test procedures to inspect the internal state
                   36226: ** of the global cache.
                   36227: */
                   36228: SQLITE_PRIVATE void sqlite3PcacheStats(
                   36229:   int *pnCurrent,      /* OUT: Total number of pages cached */
                   36230:   int *pnMax,          /* OUT: Global maximum cache size */
                   36231:   int *pnMin,          /* OUT: Sum of PCache1.nMin for purgeable caches */
                   36232:   int *pnRecyclable    /* OUT: Total number of pages available for recycling */
                   36233: ){
                   36234:   PgHdr1 *p;
                   36235:   int nRecyclable = 0;
                   36236:   for(p=pcache1.grp.pLruHead; p; p=p->pLruNext){
                   36237:     nRecyclable++;
                   36238:   }
                   36239:   *pnCurrent = pcache1.grp.nCurrentPage;
                   36240:   *pnMax = pcache1.grp.nMaxPage;
                   36241:   *pnMin = pcache1.grp.nMinPage;
                   36242:   *pnRecyclable = nRecyclable;
                   36243: }
                   36244: #endif
                   36245: 
                   36246: /************** End of pcache1.c *********************************************/
                   36247: /************** Begin file rowset.c ******************************************/
                   36248: /*
                   36249: ** 2008 December 3
                   36250: **
                   36251: ** The author disclaims copyright to this source code.  In place of
                   36252: ** a legal notice, here is a blessing:
                   36253: **
                   36254: **    May you do good and not evil.
                   36255: **    May you find forgiveness for yourself and forgive others.
                   36256: **    May you share freely, never taking more than you give.
                   36257: **
                   36258: *************************************************************************
                   36259: **
                   36260: ** This module implements an object we call a "RowSet".
                   36261: **
                   36262: ** The RowSet object is a collection of rowids.  Rowids
                   36263: ** are inserted into the RowSet in an arbitrary order.  Inserts
                   36264: ** can be intermixed with tests to see if a given rowid has been
                   36265: ** previously inserted into the RowSet.
                   36266: **
                   36267: ** After all inserts are finished, it is possible to extract the
                   36268: ** elements of the RowSet in sorted order.  Once this extraction
                   36269: ** process has started, no new elements may be inserted.
                   36270: **
                   36271: ** Hence, the primitive operations for a RowSet are:
                   36272: **
                   36273: **    CREATE
                   36274: **    INSERT
                   36275: **    TEST
                   36276: **    SMALLEST
                   36277: **    DESTROY
                   36278: **
                   36279: ** The CREATE and DESTROY primitives are the constructor and destructor,
                   36280: ** obviously.  The INSERT primitive adds a new element to the RowSet.
                   36281: ** TEST checks to see if an element is already in the RowSet.  SMALLEST
                   36282: ** extracts the least value from the RowSet.
                   36283: **
                   36284: ** The INSERT primitive might allocate additional memory.  Memory is
                   36285: ** allocated in chunks so most INSERTs do no allocation.  There is an 
                   36286: ** upper bound on the size of allocated memory.  No memory is freed
                   36287: ** until DESTROY.
                   36288: **
                   36289: ** The TEST primitive includes a "batch" number.  The TEST primitive
                   36290: ** will only see elements that were inserted before the last change
                   36291: ** in the batch number.  In other words, if an INSERT occurs between
                   36292: ** two TESTs where the TESTs have the same batch nubmer, then the
                   36293: ** value added by the INSERT will not be visible to the second TEST.
                   36294: ** The initial batch number is zero, so if the very first TEST contains
                   36295: ** a non-zero batch number, it will see all prior INSERTs.
                   36296: **
                   36297: ** No INSERTs may occurs after a SMALLEST.  An assertion will fail if
                   36298: ** that is attempted.
                   36299: **
                   36300: ** The cost of an INSERT is roughly constant.  (Sometime new memory
                   36301: ** has to be allocated on an INSERT.)  The cost of a TEST with a new
                   36302: ** batch number is O(NlogN) where N is the number of elements in the RowSet.
                   36303: ** The cost of a TEST using the same batch number is O(logN).  The cost
                   36304: ** of the first SMALLEST is O(NlogN).  Second and subsequent SMALLEST
                   36305: ** primitives are constant time.  The cost of DESTROY is O(N).
                   36306: **
                   36307: ** There is an added cost of O(N) when switching between TEST and
                   36308: ** SMALLEST primitives.
                   36309: */
                   36310: 
                   36311: 
                   36312: /*
                   36313: ** Target size for allocation chunks.
                   36314: */
                   36315: #define ROWSET_ALLOCATION_SIZE 1024
                   36316: 
                   36317: /*
                   36318: ** The number of rowset entries per allocation chunk.
                   36319: */
                   36320: #define ROWSET_ENTRY_PER_CHUNK  \
                   36321:                        ((ROWSET_ALLOCATION_SIZE-8)/sizeof(struct RowSetEntry))
                   36322: 
                   36323: /*
                   36324: ** Each entry in a RowSet is an instance of the following object.
                   36325: */
                   36326: struct RowSetEntry {            
                   36327:   i64 v;                        /* ROWID value for this entry */
                   36328:   struct RowSetEntry *pRight;   /* Right subtree (larger entries) or list */
                   36329:   struct RowSetEntry *pLeft;    /* Left subtree (smaller entries) */
                   36330: };
                   36331: 
                   36332: /*
                   36333: ** RowSetEntry objects are allocated in large chunks (instances of the
                   36334: ** following structure) to reduce memory allocation overhead.  The
                   36335: ** chunks are kept on a linked list so that they can be deallocated
                   36336: ** when the RowSet is destroyed.
                   36337: */
                   36338: struct RowSetChunk {
                   36339:   struct RowSetChunk *pNextChunk;        /* Next chunk on list of them all */
                   36340:   struct RowSetEntry aEntry[ROWSET_ENTRY_PER_CHUNK]; /* Allocated entries */
                   36341: };
                   36342: 
                   36343: /*
                   36344: ** A RowSet in an instance of the following structure.
                   36345: **
                   36346: ** A typedef of this structure if found in sqliteInt.h.
                   36347: */
                   36348: struct RowSet {
                   36349:   struct RowSetChunk *pChunk;    /* List of all chunk allocations */
                   36350:   sqlite3 *db;                   /* The database connection */
                   36351:   struct RowSetEntry *pEntry;    /* List of entries using pRight */
                   36352:   struct RowSetEntry *pLast;     /* Last entry on the pEntry list */
                   36353:   struct RowSetEntry *pFresh;    /* Source of new entry objects */
                   36354:   struct RowSetEntry *pTree;     /* Binary tree of entries */
                   36355:   u16 nFresh;                    /* Number of objects on pFresh */
                   36356:   u8 isSorted;                   /* True if pEntry is sorted */
                   36357:   u8 iBatch;                     /* Current insert batch */
                   36358: };
                   36359: 
                   36360: /*
                   36361: ** Turn bulk memory into a RowSet object.  N bytes of memory
                   36362: ** are available at pSpace.  The db pointer is used as a memory context
                   36363: ** for any subsequent allocations that need to occur.
                   36364: ** Return a pointer to the new RowSet object.
                   36365: **
                   36366: ** It must be the case that N is sufficient to make a Rowset.  If not
                   36367: ** an assertion fault occurs.
                   36368: ** 
                   36369: ** If N is larger than the minimum, use the surplus as an initial
                   36370: ** allocation of entries available to be filled.
                   36371: */
                   36372: SQLITE_PRIVATE RowSet *sqlite3RowSetInit(sqlite3 *db, void *pSpace, unsigned int N){
                   36373:   RowSet *p;
                   36374:   assert( N >= ROUND8(sizeof(*p)) );
                   36375:   p = pSpace;
                   36376:   p->pChunk = 0;
                   36377:   p->db = db;
                   36378:   p->pEntry = 0;
                   36379:   p->pLast = 0;
                   36380:   p->pTree = 0;
                   36381:   p->pFresh = (struct RowSetEntry*)(ROUND8(sizeof(*p)) + (char*)p);
                   36382:   p->nFresh = (u16)((N - ROUND8(sizeof(*p)))/sizeof(struct RowSetEntry));
                   36383:   p->isSorted = 1;
                   36384:   p->iBatch = 0;
                   36385:   return p;
                   36386: }
                   36387: 
                   36388: /*
                   36389: ** Deallocate all chunks from a RowSet.  This frees all memory that
                   36390: ** the RowSet has allocated over its lifetime.  This routine is
                   36391: ** the destructor for the RowSet.
                   36392: */
                   36393: SQLITE_PRIVATE void sqlite3RowSetClear(RowSet *p){
                   36394:   struct RowSetChunk *pChunk, *pNextChunk;
                   36395:   for(pChunk=p->pChunk; pChunk; pChunk = pNextChunk){
                   36396:     pNextChunk = pChunk->pNextChunk;
                   36397:     sqlite3DbFree(p->db, pChunk);
                   36398:   }
                   36399:   p->pChunk = 0;
                   36400:   p->nFresh = 0;
                   36401:   p->pEntry = 0;
                   36402:   p->pLast = 0;
                   36403:   p->pTree = 0;
                   36404:   p->isSorted = 1;
                   36405: }
                   36406: 
                   36407: /*
                   36408: ** Insert a new value into a RowSet.
                   36409: **
                   36410: ** The mallocFailed flag of the database connection is set if a
                   36411: ** memory allocation fails.
                   36412: */
                   36413: SQLITE_PRIVATE void sqlite3RowSetInsert(RowSet *p, i64 rowid){
                   36414:   struct RowSetEntry *pEntry;  /* The new entry */
                   36415:   struct RowSetEntry *pLast;   /* The last prior entry */
                   36416:   assert( p!=0 );
                   36417:   if( p->nFresh==0 ){
                   36418:     struct RowSetChunk *pNew;
                   36419:     pNew = sqlite3DbMallocRaw(p->db, sizeof(*pNew));
                   36420:     if( pNew==0 ){
                   36421:       return;
                   36422:     }
                   36423:     pNew->pNextChunk = p->pChunk;
                   36424:     p->pChunk = pNew;
                   36425:     p->pFresh = pNew->aEntry;
                   36426:     p->nFresh = ROWSET_ENTRY_PER_CHUNK;
                   36427:   }
                   36428:   pEntry = p->pFresh++;
                   36429:   p->nFresh--;
                   36430:   pEntry->v = rowid;
                   36431:   pEntry->pRight = 0;
                   36432:   pLast = p->pLast;
                   36433:   if( pLast ){
                   36434:     if( p->isSorted && rowid<=pLast->v ){
                   36435:       p->isSorted = 0;
                   36436:     }
                   36437:     pLast->pRight = pEntry;
                   36438:   }else{
                   36439:     assert( p->pEntry==0 ); /* Fires if INSERT after SMALLEST */
                   36440:     p->pEntry = pEntry;
                   36441:   }
                   36442:   p->pLast = pEntry;
                   36443: }
                   36444: 
                   36445: /*
                   36446: ** Merge two lists of RowSetEntry objects.  Remove duplicates.
                   36447: **
                   36448: ** The input lists are connected via pRight pointers and are 
                   36449: ** assumed to each already be in sorted order.
                   36450: */
                   36451: static struct RowSetEntry *rowSetMerge(
                   36452:   struct RowSetEntry *pA,    /* First sorted list to be merged */
                   36453:   struct RowSetEntry *pB     /* Second sorted list to be merged */
                   36454: ){
                   36455:   struct RowSetEntry head;
                   36456:   struct RowSetEntry *pTail;
                   36457: 
                   36458:   pTail = &head;
                   36459:   while( pA && pB ){
                   36460:     assert( pA->pRight==0 || pA->v<=pA->pRight->v );
                   36461:     assert( pB->pRight==0 || pB->v<=pB->pRight->v );
                   36462:     if( pA->v<pB->v ){
                   36463:       pTail->pRight = pA;
                   36464:       pA = pA->pRight;
                   36465:       pTail = pTail->pRight;
                   36466:     }else if( pB->v<pA->v ){
                   36467:       pTail->pRight = pB;
                   36468:       pB = pB->pRight;
                   36469:       pTail = pTail->pRight;
                   36470:     }else{
                   36471:       pA = pA->pRight;
                   36472:     }
                   36473:   }
                   36474:   if( pA ){
                   36475:     assert( pA->pRight==0 || pA->v<=pA->pRight->v );
                   36476:     pTail->pRight = pA;
                   36477:   }else{
                   36478:     assert( pB==0 || pB->pRight==0 || pB->v<=pB->pRight->v );
                   36479:     pTail->pRight = pB;
                   36480:   }
                   36481:   return head.pRight;
                   36482: }
                   36483: 
                   36484: /*
                   36485: ** Sort all elements on the pEntry list of the RowSet into ascending order.
                   36486: */ 
                   36487: static void rowSetSort(RowSet *p){
                   36488:   unsigned int i;
                   36489:   struct RowSetEntry *pEntry;
                   36490:   struct RowSetEntry *aBucket[40];
                   36491: 
                   36492:   assert( p->isSorted==0 );
                   36493:   memset(aBucket, 0, sizeof(aBucket));
                   36494:   while( p->pEntry ){
                   36495:     pEntry = p->pEntry;
                   36496:     p->pEntry = pEntry->pRight;
                   36497:     pEntry->pRight = 0;
                   36498:     for(i=0; aBucket[i]; i++){
                   36499:       pEntry = rowSetMerge(aBucket[i], pEntry);
                   36500:       aBucket[i] = 0;
                   36501:     }
                   36502:     aBucket[i] = pEntry;
                   36503:   }
                   36504:   pEntry = 0;
                   36505:   for(i=0; i<sizeof(aBucket)/sizeof(aBucket[0]); i++){
                   36506:     pEntry = rowSetMerge(pEntry, aBucket[i]);
                   36507:   }
                   36508:   p->pEntry = pEntry;
                   36509:   p->pLast = 0;
                   36510:   p->isSorted = 1;
                   36511: }
                   36512: 
                   36513: 
                   36514: /*
                   36515: ** The input, pIn, is a binary tree (or subtree) of RowSetEntry objects.
                   36516: ** Convert this tree into a linked list connected by the pRight pointers
                   36517: ** and return pointers to the first and last elements of the new list.
                   36518: */
                   36519: static void rowSetTreeToList(
                   36520:   struct RowSetEntry *pIn,         /* Root of the input tree */
                   36521:   struct RowSetEntry **ppFirst,    /* Write head of the output list here */
                   36522:   struct RowSetEntry **ppLast      /* Write tail of the output list here */
                   36523: ){
                   36524:   assert( pIn!=0 );
                   36525:   if( pIn->pLeft ){
                   36526:     struct RowSetEntry *p;
                   36527:     rowSetTreeToList(pIn->pLeft, ppFirst, &p);
                   36528:     p->pRight = pIn;
                   36529:   }else{
                   36530:     *ppFirst = pIn;
                   36531:   }
                   36532:   if( pIn->pRight ){
                   36533:     rowSetTreeToList(pIn->pRight, &pIn->pRight, ppLast);
                   36534:   }else{
                   36535:     *ppLast = pIn;
                   36536:   }
                   36537:   assert( (*ppLast)->pRight==0 );
                   36538: }
                   36539: 
                   36540: 
                   36541: /*
                   36542: ** Convert a sorted list of elements (connected by pRight) into a binary
                   36543: ** tree with depth of iDepth.  A depth of 1 means the tree contains a single
                   36544: ** node taken from the head of *ppList.  A depth of 2 means a tree with
                   36545: ** three nodes.  And so forth.
                   36546: **
                   36547: ** Use as many entries from the input list as required and update the
                   36548: ** *ppList to point to the unused elements of the list.  If the input
                   36549: ** list contains too few elements, then construct an incomplete tree
                   36550: ** and leave *ppList set to NULL.
                   36551: **
                   36552: ** Return a pointer to the root of the constructed binary tree.
                   36553: */
                   36554: static struct RowSetEntry *rowSetNDeepTree(
                   36555:   struct RowSetEntry **ppList,
                   36556:   int iDepth
                   36557: ){
                   36558:   struct RowSetEntry *p;         /* Root of the new tree */
                   36559:   struct RowSetEntry *pLeft;     /* Left subtree */
                   36560:   if( *ppList==0 ){
                   36561:     return 0;
                   36562:   }
                   36563:   if( iDepth==1 ){
                   36564:     p = *ppList;
                   36565:     *ppList = p->pRight;
                   36566:     p->pLeft = p->pRight = 0;
                   36567:     return p;
                   36568:   }
                   36569:   pLeft = rowSetNDeepTree(ppList, iDepth-1);
                   36570:   p = *ppList;
                   36571:   if( p==0 ){
                   36572:     return pLeft;
                   36573:   }
                   36574:   p->pLeft = pLeft;
                   36575:   *ppList = p->pRight;
                   36576:   p->pRight = rowSetNDeepTree(ppList, iDepth-1);
                   36577:   return p;
                   36578: }
                   36579: 
                   36580: /*
                   36581: ** Convert a sorted list of elements into a binary tree. Make the tree
                   36582: ** as deep as it needs to be in order to contain the entire list.
                   36583: */
                   36584: static struct RowSetEntry *rowSetListToTree(struct RowSetEntry *pList){
                   36585:   int iDepth;           /* Depth of the tree so far */
                   36586:   struct RowSetEntry *p;       /* Current tree root */
                   36587:   struct RowSetEntry *pLeft;   /* Left subtree */
                   36588: 
                   36589:   assert( pList!=0 );
                   36590:   p = pList;
                   36591:   pList = p->pRight;
                   36592:   p->pLeft = p->pRight = 0;
                   36593:   for(iDepth=1; pList; iDepth++){
                   36594:     pLeft = p;
                   36595:     p = pList;
                   36596:     pList = p->pRight;
                   36597:     p->pLeft = pLeft;
                   36598:     p->pRight = rowSetNDeepTree(&pList, iDepth);
                   36599:   }
                   36600:   return p;
                   36601: }
                   36602: 
                   36603: /*
                   36604: ** Convert the list in p->pEntry into a sorted list if it is not
                   36605: ** sorted already.  If there is a binary tree on p->pTree, then
                   36606: ** convert it into a list too and merge it into the p->pEntry list.
                   36607: */
                   36608: static void rowSetToList(RowSet *p){
                   36609:   if( !p->isSorted ){
                   36610:     rowSetSort(p);
                   36611:   }
                   36612:   if( p->pTree ){
                   36613:     struct RowSetEntry *pHead, *pTail;
                   36614:     rowSetTreeToList(p->pTree, &pHead, &pTail);
                   36615:     p->pTree = 0;
                   36616:     p->pEntry = rowSetMerge(p->pEntry, pHead);
                   36617:   }
                   36618: }
                   36619: 
                   36620: /*
                   36621: ** Extract the smallest element from the RowSet.
                   36622: ** Write the element into *pRowid.  Return 1 on success.  Return
                   36623: ** 0 if the RowSet is already empty.
                   36624: **
                   36625: ** After this routine has been called, the sqlite3RowSetInsert()
                   36626: ** routine may not be called again.  
                   36627: */
                   36628: SQLITE_PRIVATE int sqlite3RowSetNext(RowSet *p, i64 *pRowid){
                   36629:   rowSetToList(p);
                   36630:   if( p->pEntry ){
                   36631:     *pRowid = p->pEntry->v;
                   36632:     p->pEntry = p->pEntry->pRight;
                   36633:     if( p->pEntry==0 ){
                   36634:       sqlite3RowSetClear(p);
                   36635:     }
                   36636:     return 1;
                   36637:   }else{
                   36638:     return 0;
                   36639:   }
                   36640: }
                   36641: 
                   36642: /*
                   36643: ** Check to see if element iRowid was inserted into the the rowset as
                   36644: ** part of any insert batch prior to iBatch.  Return 1 or 0.
                   36645: */
                   36646: SQLITE_PRIVATE int sqlite3RowSetTest(RowSet *pRowSet, u8 iBatch, sqlite3_int64 iRowid){
                   36647:   struct RowSetEntry *p;
                   36648:   if( iBatch!=pRowSet->iBatch ){
                   36649:     if( pRowSet->pEntry ){
                   36650:       rowSetToList(pRowSet);
                   36651:       pRowSet->pTree = rowSetListToTree(pRowSet->pEntry);
                   36652:       pRowSet->pEntry = 0;
                   36653:       pRowSet->pLast = 0;
                   36654:     }
                   36655:     pRowSet->iBatch = iBatch;
                   36656:   }
                   36657:   p = pRowSet->pTree;
                   36658:   while( p ){
                   36659:     if( p->v<iRowid ){
                   36660:       p = p->pRight;
                   36661:     }else if( p->v>iRowid ){
                   36662:       p = p->pLeft;
                   36663:     }else{
                   36664:       return 1;
                   36665:     }
                   36666:   }
                   36667:   return 0;
                   36668: }
                   36669: 
                   36670: /************** End of rowset.c **********************************************/
                   36671: /************** Begin file pager.c *******************************************/
                   36672: /*
                   36673: ** 2001 September 15
                   36674: **
                   36675: ** The author disclaims copyright to this source code.  In place of
                   36676: ** a legal notice, here is a blessing:
                   36677: **
                   36678: **    May you do good and not evil.
                   36679: **    May you find forgiveness for yourself and forgive others.
                   36680: **    May you share freely, never taking more than you give.
                   36681: **
                   36682: *************************************************************************
                   36683: ** This is the implementation of the page cache subsystem or "pager".
                   36684: ** 
                   36685: ** The pager is used to access a database disk file.  It implements
                   36686: ** atomic commit and rollback through the use of a journal file that
                   36687: ** is separate from the database file.  The pager also implements file
                   36688: ** locking to prevent two processes from writing the same database
                   36689: ** file simultaneously, or one process from reading the database while
                   36690: ** another is writing.
                   36691: */
                   36692: #ifndef SQLITE_OMIT_DISKIO
                   36693: /************** Include wal.h in the middle of pager.c ***********************/
                   36694: /************** Begin file wal.h *********************************************/
                   36695: /*
                   36696: ** 2010 February 1
                   36697: **
                   36698: ** The author disclaims copyright to this source code.  In place of
                   36699: ** a legal notice, here is a blessing:
                   36700: **
                   36701: **    May you do good and not evil.
                   36702: **    May you find forgiveness for yourself and forgive others.
                   36703: **    May you share freely, never taking more than you give.
                   36704: **
                   36705: *************************************************************************
                   36706: ** This header file defines the interface to the write-ahead logging 
                   36707: ** system. Refer to the comments below and the header comment attached to 
                   36708: ** the implementation of each function in log.c for further details.
                   36709: */
                   36710: 
                   36711: #ifndef _WAL_H_
                   36712: #define _WAL_H_
                   36713: 
                   36714: 
                   36715: #ifdef SQLITE_OMIT_WAL
                   36716: # define sqlite3WalOpen(x,y,z)                   0
                   36717: # define sqlite3WalLimit(x,y)
                   36718: # define sqlite3WalClose(w,x,y,z)                0
                   36719: # define sqlite3WalBeginReadTransaction(y,z)     0
                   36720: # define sqlite3WalEndReadTransaction(z)
                   36721: # define sqlite3WalRead(v,w,x,y,z)               0
                   36722: # define sqlite3WalDbsize(y)                     0
                   36723: # define sqlite3WalBeginWriteTransaction(y)      0
                   36724: # define sqlite3WalEndWriteTransaction(x)        0
                   36725: # define sqlite3WalUndo(x,y,z)                   0
                   36726: # define sqlite3WalSavepoint(y,z)
                   36727: # define sqlite3WalSavepointUndo(y,z)            0
                   36728: # define sqlite3WalFrames(u,v,w,x,y,z)           0
                   36729: # define sqlite3WalCheckpoint(r,s,t,u,v,w,x,y,z) 0
                   36730: # define sqlite3WalCallback(z)                   0
                   36731: # define sqlite3WalExclusiveMode(y,z)            0
                   36732: # define sqlite3WalHeapMemory(z)                 0
                   36733: #else
                   36734: 
                   36735: #define WAL_SAVEPOINT_NDATA 4
                   36736: 
                   36737: /* Connection to a write-ahead log (WAL) file. 
                   36738: ** There is one object of this type for each pager. 
                   36739: */
                   36740: typedef struct Wal Wal;
                   36741: 
                   36742: /* Open and close a connection to a write-ahead log. */
                   36743: SQLITE_PRIVATE int sqlite3WalOpen(sqlite3_vfs*, sqlite3_file*, const char *, int, i64, Wal**);
                   36744: SQLITE_PRIVATE int sqlite3WalClose(Wal *pWal, int sync_flags, int, u8 *);
                   36745: 
                   36746: /* Set the limiting size of a WAL file. */
                   36747: SQLITE_PRIVATE void sqlite3WalLimit(Wal*, i64);
                   36748: 
                   36749: /* Used by readers to open (lock) and close (unlock) a snapshot.  A 
                   36750: ** snapshot is like a read-transaction.  It is the state of the database
                   36751: ** at an instant in time.  sqlite3WalOpenSnapshot gets a read lock and
                   36752: ** preserves the current state even if the other threads or processes
                   36753: ** write to or checkpoint the WAL.  sqlite3WalCloseSnapshot() closes the
                   36754: ** transaction and releases the lock.
                   36755: */
                   36756: SQLITE_PRIVATE int sqlite3WalBeginReadTransaction(Wal *pWal, int *);
                   36757: SQLITE_PRIVATE void sqlite3WalEndReadTransaction(Wal *pWal);
                   36758: 
                   36759: /* Read a page from the write-ahead log, if it is present. */
                   36760: SQLITE_PRIVATE int sqlite3WalRead(Wal *pWal, Pgno pgno, int *pInWal, int nOut, u8 *pOut);
                   36761: 
                   36762: /* If the WAL is not empty, return the size of the database. */
                   36763: SQLITE_PRIVATE Pgno sqlite3WalDbsize(Wal *pWal);
                   36764: 
                   36765: /* Obtain or release the WRITER lock. */
                   36766: SQLITE_PRIVATE int sqlite3WalBeginWriteTransaction(Wal *pWal);
                   36767: SQLITE_PRIVATE int sqlite3WalEndWriteTransaction(Wal *pWal);
                   36768: 
                   36769: /* Undo any frames written (but not committed) to the log */
                   36770: SQLITE_PRIVATE int sqlite3WalUndo(Wal *pWal, int (*xUndo)(void *, Pgno), void *pUndoCtx);
                   36771: 
                   36772: /* Return an integer that records the current (uncommitted) write
                   36773: ** position in the WAL */
                   36774: SQLITE_PRIVATE void sqlite3WalSavepoint(Wal *pWal, u32 *aWalData);
                   36775: 
                   36776: /* Move the write position of the WAL back to iFrame.  Called in
                   36777: ** response to a ROLLBACK TO command. */
                   36778: SQLITE_PRIVATE int sqlite3WalSavepointUndo(Wal *pWal, u32 *aWalData);
                   36779: 
                   36780: /* Write a frame or frames to the log. */
                   36781: SQLITE_PRIVATE int sqlite3WalFrames(Wal *pWal, int, PgHdr *, Pgno, int, int);
                   36782: 
                   36783: /* Copy pages from the log to the database file */ 
                   36784: SQLITE_PRIVATE int sqlite3WalCheckpoint(
                   36785:   Wal *pWal,                      /* Write-ahead log connection */
                   36786:   int eMode,                      /* One of PASSIVE, FULL and RESTART */
                   36787:   int (*xBusy)(void*),            /* Function to call when busy */
                   36788:   void *pBusyArg,                 /* Context argument for xBusyHandler */
                   36789:   int sync_flags,                 /* Flags to sync db file with (or 0) */
                   36790:   int nBuf,                       /* Size of buffer nBuf */
                   36791:   u8 *zBuf,                       /* Temporary buffer to use */
                   36792:   int *pnLog,                     /* OUT: Number of frames in WAL */
                   36793:   int *pnCkpt                     /* OUT: Number of backfilled frames in WAL */
                   36794: );
                   36795: 
                   36796: /* Return the value to pass to a sqlite3_wal_hook callback, the
                   36797: ** number of frames in the WAL at the point of the last commit since
                   36798: ** sqlite3WalCallback() was called.  If no commits have occurred since
                   36799: ** the last call, then return 0.
                   36800: */
                   36801: SQLITE_PRIVATE int sqlite3WalCallback(Wal *pWal);
                   36802: 
                   36803: /* Tell the wal layer that an EXCLUSIVE lock has been obtained (or released)
                   36804: ** by the pager layer on the database file.
                   36805: */
                   36806: SQLITE_PRIVATE int sqlite3WalExclusiveMode(Wal *pWal, int op);
                   36807: 
                   36808: /* Return true if the argument is non-NULL and the WAL module is using
                   36809: ** heap-memory for the wal-index. Otherwise, if the argument is NULL or the
                   36810: ** WAL module is using shared-memory, return false. 
                   36811: */
                   36812: SQLITE_PRIVATE int sqlite3WalHeapMemory(Wal *pWal);
                   36813: 
                   36814: #endif /* ifndef SQLITE_OMIT_WAL */
                   36815: #endif /* _WAL_H_ */
                   36816: 
                   36817: /************** End of wal.h *************************************************/
                   36818: /************** Continuing where we left off in pager.c **********************/
                   36819: 
                   36820: 
                   36821: /******************* NOTES ON THE DESIGN OF THE PAGER ************************
                   36822: **
                   36823: ** This comment block describes invariants that hold when using a rollback
                   36824: ** journal.  These invariants do not apply for journal_mode=WAL,
                   36825: ** journal_mode=MEMORY, or journal_mode=OFF.
                   36826: **
                   36827: ** Within this comment block, a page is deemed to have been synced
                   36828: ** automatically as soon as it is written when PRAGMA synchronous=OFF.
                   36829: ** Otherwise, the page is not synced until the xSync method of the VFS
                   36830: ** is called successfully on the file containing the page.
                   36831: **
                   36832: ** Definition:  A page of the database file is said to be "overwriteable" if
                   36833: ** one or more of the following are true about the page:
                   36834: ** 
                   36835: **     (a)  The original content of the page as it was at the beginning of
                   36836: **          the transaction has been written into the rollback journal and
                   36837: **          synced.
                   36838: ** 
                   36839: **     (b)  The page was a freelist leaf page at the start of the transaction.
                   36840: ** 
                   36841: **     (c)  The page number is greater than the largest page that existed in
                   36842: **          the database file at the start of the transaction.
                   36843: ** 
                   36844: ** (1) A page of the database file is never overwritten unless one of the
                   36845: **     following are true:
                   36846: ** 
                   36847: **     (a) The page and all other pages on the same sector are overwriteable.
                   36848: ** 
                   36849: **     (b) The atomic page write optimization is enabled, and the entire
                   36850: **         transaction other than the update of the transaction sequence
                   36851: **         number consists of a single page change.
                   36852: ** 
                   36853: ** (2) The content of a page written into the rollback journal exactly matches
                   36854: **     both the content in the database when the rollback journal was written
                   36855: **     and the content in the database at the beginning of the current
                   36856: **     transaction.
                   36857: ** 
                   36858: ** (3) Writes to the database file are an integer multiple of the page size
                   36859: **     in length and are aligned on a page boundary.
                   36860: ** 
                   36861: ** (4) Reads from the database file are either aligned on a page boundary and
                   36862: **     an integer multiple of the page size in length or are taken from the
                   36863: **     first 100 bytes of the database file.
                   36864: ** 
                   36865: ** (5) All writes to the database file are synced prior to the rollback journal
                   36866: **     being deleted, truncated, or zeroed.
                   36867: ** 
                   36868: ** (6) If a master journal file is used, then all writes to the database file
                   36869: **     are synced prior to the master journal being deleted.
                   36870: ** 
                   36871: ** Definition: Two databases (or the same database at two points it time)
                   36872: ** are said to be "logically equivalent" if they give the same answer to
                   36873: ** all queries.  Note in particular the the content of freelist leaf
                   36874: ** pages can be changed arbitarily without effecting the logical equivalence
                   36875: ** of the database.
                   36876: ** 
                   36877: ** (7) At any time, if any subset, including the empty set and the total set,
                   36878: **     of the unsynced changes to a rollback journal are removed and the 
                   36879: **     journal is rolled back, the resulting database file will be logical
                   36880: **     equivalent to the database file at the beginning of the transaction.
                   36881: ** 
                   36882: ** (8) When a transaction is rolled back, the xTruncate method of the VFS
                   36883: **     is called to restore the database file to the same size it was at
                   36884: **     the beginning of the transaction.  (In some VFSes, the xTruncate
                   36885: **     method is a no-op, but that does not change the fact the SQLite will
                   36886: **     invoke it.)
                   36887: ** 
                   36888: ** (9) Whenever the database file is modified, at least one bit in the range
                   36889: **     of bytes from 24 through 39 inclusive will be changed prior to releasing
                   36890: **     the EXCLUSIVE lock, thus signaling other connections on the same
                   36891: **     database to flush their caches.
                   36892: **
                   36893: ** (10) The pattern of bits in bytes 24 through 39 shall not repeat in less
                   36894: **      than one billion transactions.
                   36895: **
                   36896: ** (11) A database file is well-formed at the beginning and at the conclusion
                   36897: **      of every transaction.
                   36898: **
                   36899: ** (12) An EXCLUSIVE lock is held on the database file when writing to
                   36900: **      the database file.
                   36901: **
                   36902: ** (13) A SHARED lock is held on the database file while reading any
                   36903: **      content out of the database file.
                   36904: **
                   36905: ******************************************************************************/
                   36906: 
                   36907: /*
                   36908: ** Macros for troubleshooting.  Normally turned off
                   36909: */
                   36910: #if 0
                   36911: int sqlite3PagerTrace=1;  /* True to enable tracing */
                   36912: #define sqlite3DebugPrintf printf
                   36913: #define PAGERTRACE(X)     if( sqlite3PagerTrace ){ sqlite3DebugPrintf X; }
                   36914: #else
                   36915: #define PAGERTRACE(X)
                   36916: #endif
                   36917: 
                   36918: /*
                   36919: ** The following two macros are used within the PAGERTRACE() macros above
                   36920: ** to print out file-descriptors. 
                   36921: **
                   36922: ** PAGERID() takes a pointer to a Pager struct as its argument. The
                   36923: ** associated file-descriptor is returned. FILEHANDLEID() takes an sqlite3_file
                   36924: ** struct as its argument.
                   36925: */
                   36926: #define PAGERID(p) ((int)(p->fd))
                   36927: #define FILEHANDLEID(fd) ((int)fd)
                   36928: 
                   36929: /*
                   36930: ** The Pager.eState variable stores the current 'state' of a pager. A
                   36931: ** pager may be in any one of the seven states shown in the following
                   36932: ** state diagram.
                   36933: **
                   36934: **                            OPEN <------+------+
                   36935: **                              |         |      |
                   36936: **                              V         |      |
                   36937: **               +---------> READER-------+      |
                   36938: **               |              |                |
                   36939: **               |              V                |
                   36940: **               |<-------WRITER_LOCKED------> ERROR
                   36941: **               |              |                ^  
                   36942: **               |              V                |
                   36943: **               |<------WRITER_CACHEMOD-------->|
                   36944: **               |              |                |
                   36945: **               |              V                |
                   36946: **               |<-------WRITER_DBMOD---------->|
                   36947: **               |              |                |
                   36948: **               |              V                |
                   36949: **               +<------WRITER_FINISHED-------->+
                   36950: **
                   36951: **
                   36952: ** List of state transitions and the C [function] that performs each:
                   36953: ** 
                   36954: **   OPEN              -> READER              [sqlite3PagerSharedLock]
                   36955: **   READER            -> OPEN                [pager_unlock]
                   36956: **
                   36957: **   READER            -> WRITER_LOCKED       [sqlite3PagerBegin]
                   36958: **   WRITER_LOCKED     -> WRITER_CACHEMOD     [pager_open_journal]
                   36959: **   WRITER_CACHEMOD   -> WRITER_DBMOD        [syncJournal]
                   36960: **   WRITER_DBMOD      -> WRITER_FINISHED     [sqlite3PagerCommitPhaseOne]
                   36961: **   WRITER_***        -> READER              [pager_end_transaction]
                   36962: **
                   36963: **   WRITER_***        -> ERROR               [pager_error]
                   36964: **   ERROR             -> OPEN                [pager_unlock]
                   36965: ** 
                   36966: **
                   36967: **  OPEN:
                   36968: **
                   36969: **    The pager starts up in this state. Nothing is guaranteed in this
                   36970: **    state - the file may or may not be locked and the database size is
                   36971: **    unknown. The database may not be read or written.
                   36972: **
                   36973: **    * No read or write transaction is active.
                   36974: **    * Any lock, or no lock at all, may be held on the database file.
                   36975: **    * The dbSize, dbOrigSize and dbFileSize variables may not be trusted.
                   36976: **
                   36977: **  READER:
                   36978: **
                   36979: **    In this state all the requirements for reading the database in 
                   36980: **    rollback (non-WAL) mode are met. Unless the pager is (or recently
                   36981: **    was) in exclusive-locking mode, a user-level read transaction is 
                   36982: **    open. The database size is known in this state.
                   36983: **
                   36984: **    A connection running with locking_mode=normal enters this state when
                   36985: **    it opens a read-transaction on the database and returns to state
                   36986: **    OPEN after the read-transaction is completed. However a connection
                   36987: **    running in locking_mode=exclusive (including temp databases) remains in
                   36988: **    this state even after the read-transaction is closed. The only way
                   36989: **    a locking_mode=exclusive connection can transition from READER to OPEN
                   36990: **    is via the ERROR state (see below).
                   36991: ** 
                   36992: **    * A read transaction may be active (but a write-transaction cannot).
                   36993: **    * A SHARED or greater lock is held on the database file.
                   36994: **    * The dbSize variable may be trusted (even if a user-level read 
                   36995: **      transaction is not active). The dbOrigSize and dbFileSize variables
                   36996: **      may not be trusted at this point.
                   36997: **    * If the database is a WAL database, then the WAL connection is open.
                   36998: **    * Even if a read-transaction is not open, it is guaranteed that 
                   36999: **      there is no hot-journal in the file-system.
                   37000: **
                   37001: **  WRITER_LOCKED:
                   37002: **
                   37003: **    The pager moves to this state from READER when a write-transaction
                   37004: **    is first opened on the database. In WRITER_LOCKED state, all locks 
                   37005: **    required to start a write-transaction are held, but no actual 
                   37006: **    modifications to the cache or database have taken place.
                   37007: **
                   37008: **    In rollback mode, a RESERVED or (if the transaction was opened with 
                   37009: **    BEGIN EXCLUSIVE) EXCLUSIVE lock is obtained on the database file when
                   37010: **    moving to this state, but the journal file is not written to or opened 
                   37011: **    to in this state. If the transaction is committed or rolled back while 
                   37012: **    in WRITER_LOCKED state, all that is required is to unlock the database 
                   37013: **    file.
                   37014: **
                   37015: **    IN WAL mode, WalBeginWriteTransaction() is called to lock the log file.
                   37016: **    If the connection is running with locking_mode=exclusive, an attempt
                   37017: **    is made to obtain an EXCLUSIVE lock on the database file.
                   37018: **
                   37019: **    * A write transaction is active.
                   37020: **    * If the connection is open in rollback-mode, a RESERVED or greater 
                   37021: **      lock is held on the database file.
                   37022: **    * If the connection is open in WAL-mode, a WAL write transaction
                   37023: **      is open (i.e. sqlite3WalBeginWriteTransaction() has been successfully
                   37024: **      called).
                   37025: **    * The dbSize, dbOrigSize and dbFileSize variables are all valid.
                   37026: **    * The contents of the pager cache have not been modified.
                   37027: **    * The journal file may or may not be open.
                   37028: **    * Nothing (not even the first header) has been written to the journal.
                   37029: **
                   37030: **  WRITER_CACHEMOD:
                   37031: **
                   37032: **    A pager moves from WRITER_LOCKED state to this state when a page is
                   37033: **    first modified by the upper layer. In rollback mode the journal file
                   37034: **    is opened (if it is not already open) and a header written to the
                   37035: **    start of it. The database file on disk has not been modified.
                   37036: **
                   37037: **    * A write transaction is active.
                   37038: **    * A RESERVED or greater lock is held on the database file.
                   37039: **    * The journal file is open and the first header has been written 
                   37040: **      to it, but the header has not been synced to disk.
                   37041: **    * The contents of the page cache have been modified.
                   37042: **
                   37043: **  WRITER_DBMOD:
                   37044: **
                   37045: **    The pager transitions from WRITER_CACHEMOD into WRITER_DBMOD state
                   37046: **    when it modifies the contents of the database file. WAL connections
                   37047: **    never enter this state (since they do not modify the database file,
                   37048: **    just the log file).
                   37049: **
                   37050: **    * A write transaction is active.
                   37051: **    * An EXCLUSIVE or greater lock is held on the database file.
                   37052: **    * The journal file is open and the first header has been written 
                   37053: **      and synced to disk.
                   37054: **    * The contents of the page cache have been modified (and possibly
                   37055: **      written to disk).
                   37056: **
                   37057: **  WRITER_FINISHED:
                   37058: **
                   37059: **    It is not possible for a WAL connection to enter this state.
                   37060: **
                   37061: **    A rollback-mode pager changes to WRITER_FINISHED state from WRITER_DBMOD
                   37062: **    state after the entire transaction has been successfully written into the
                   37063: **    database file. In this state the transaction may be committed simply
                   37064: **    by finalizing the journal file. Once in WRITER_FINISHED state, it is 
                   37065: **    not possible to modify the database further. At this point, the upper 
                   37066: **    layer must either commit or rollback the transaction.
                   37067: **
                   37068: **    * A write transaction is active.
                   37069: **    * An EXCLUSIVE or greater lock is held on the database file.
                   37070: **    * All writing and syncing of journal and database data has finished.
1.1.1.3 ! misho    37071: **      If no error occurred, all that remains is to finalize the journal to
1.1       misho    37072: **      commit the transaction. If an error did occur, the caller will need
                   37073: **      to rollback the transaction. 
                   37074: **
                   37075: **  ERROR:
                   37076: **
                   37077: **    The ERROR state is entered when an IO or disk-full error (including
                   37078: **    SQLITE_IOERR_NOMEM) occurs at a point in the code that makes it 
                   37079: **    difficult to be sure that the in-memory pager state (cache contents, 
                   37080: **    db size etc.) are consistent with the contents of the file-system.
                   37081: **
                   37082: **    Temporary pager files may enter the ERROR state, but in-memory pagers
                   37083: **    cannot.
                   37084: **
                   37085: **    For example, if an IO error occurs while performing a rollback, 
                   37086: **    the contents of the page-cache may be left in an inconsistent state.
                   37087: **    At this point it would be dangerous to change back to READER state
                   37088: **    (as usually happens after a rollback). Any subsequent readers might
                   37089: **    report database corruption (due to the inconsistent cache), and if
                   37090: **    they upgrade to writers, they may inadvertently corrupt the database
                   37091: **    file. To avoid this hazard, the pager switches into the ERROR state
                   37092: **    instead of READER following such an error.
                   37093: **
                   37094: **    Once it has entered the ERROR state, any attempt to use the pager
                   37095: **    to read or write data returns an error. Eventually, once all 
                   37096: **    outstanding transactions have been abandoned, the pager is able to
                   37097: **    transition back to OPEN state, discarding the contents of the 
                   37098: **    page-cache and any other in-memory state at the same time. Everything
                   37099: **    is reloaded from disk (and, if necessary, hot-journal rollback peformed)
                   37100: **    when a read-transaction is next opened on the pager (transitioning
                   37101: **    the pager into READER state). At that point the system has recovered 
                   37102: **    from the error.
                   37103: **
                   37104: **    Specifically, the pager jumps into the ERROR state if:
                   37105: **
                   37106: **      1. An error occurs while attempting a rollback. This happens in
                   37107: **         function sqlite3PagerRollback().
                   37108: **
                   37109: **      2. An error occurs while attempting to finalize a journal file
                   37110: **         following a commit in function sqlite3PagerCommitPhaseTwo().
                   37111: **
                   37112: **      3. An error occurs while attempting to write to the journal or
                   37113: **         database file in function pagerStress() in order to free up
                   37114: **         memory.
                   37115: **
                   37116: **    In other cases, the error is returned to the b-tree layer. The b-tree
                   37117: **    layer then attempts a rollback operation. If the error condition 
                   37118: **    persists, the pager enters the ERROR state via condition (1) above.
                   37119: **
                   37120: **    Condition (3) is necessary because it can be triggered by a read-only
                   37121: **    statement executed within a transaction. In this case, if the error
                   37122: **    code were simply returned to the user, the b-tree layer would not
                   37123: **    automatically attempt a rollback, as it assumes that an error in a
                   37124: **    read-only statement cannot leave the pager in an internally inconsistent 
                   37125: **    state.
                   37126: **
                   37127: **    * The Pager.errCode variable is set to something other than SQLITE_OK.
                   37128: **    * There are one or more outstanding references to pages (after the
                   37129: **      last reference is dropped the pager should move back to OPEN state).
                   37130: **    * The pager is not an in-memory pager.
                   37131: **    
                   37132: **
                   37133: ** Notes:
                   37134: **
                   37135: **   * A pager is never in WRITER_DBMOD or WRITER_FINISHED state if the
                   37136: **     connection is open in WAL mode. A WAL connection is always in one
                   37137: **     of the first four states.
                   37138: **
                   37139: **   * Normally, a connection open in exclusive mode is never in PAGER_OPEN
                   37140: **     state. There are two exceptions: immediately after exclusive-mode has
                   37141: **     been turned on (and before any read or write transactions are 
                   37142: **     executed), and when the pager is leaving the "error state".
                   37143: **
                   37144: **   * See also: assert_pager_state().
                   37145: */
                   37146: #define PAGER_OPEN                  0
                   37147: #define PAGER_READER                1
                   37148: #define PAGER_WRITER_LOCKED         2
                   37149: #define PAGER_WRITER_CACHEMOD       3
                   37150: #define PAGER_WRITER_DBMOD          4
                   37151: #define PAGER_WRITER_FINISHED       5
                   37152: #define PAGER_ERROR                 6
                   37153: 
                   37154: /*
                   37155: ** The Pager.eLock variable is almost always set to one of the 
                   37156: ** following locking-states, according to the lock currently held on
                   37157: ** the database file: NO_LOCK, SHARED_LOCK, RESERVED_LOCK or EXCLUSIVE_LOCK.
                   37158: ** This variable is kept up to date as locks are taken and released by
                   37159: ** the pagerLockDb() and pagerUnlockDb() wrappers.
                   37160: **
                   37161: ** If the VFS xLock() or xUnlock() returns an error other than SQLITE_BUSY
                   37162: ** (i.e. one of the SQLITE_IOERR subtypes), it is not clear whether or not
                   37163: ** the operation was successful. In these circumstances pagerLockDb() and
                   37164: ** pagerUnlockDb() take a conservative approach - eLock is always updated
                   37165: ** when unlocking the file, and only updated when locking the file if the
                   37166: ** VFS call is successful. This way, the Pager.eLock variable may be set
                   37167: ** to a less exclusive (lower) value than the lock that is actually held
                   37168: ** at the system level, but it is never set to a more exclusive value.
                   37169: **
                   37170: ** This is usually safe. If an xUnlock fails or appears to fail, there may 
                   37171: ** be a few redundant xLock() calls or a lock may be held for longer than
                   37172: ** required, but nothing really goes wrong.
                   37173: **
                   37174: ** The exception is when the database file is unlocked as the pager moves
                   37175: ** from ERROR to OPEN state. At this point there may be a hot-journal file 
                   37176: ** in the file-system that needs to be rolled back (as part of a OPEN->SHARED
                   37177: ** transition, by the same pager or any other). If the call to xUnlock()
                   37178: ** fails at this point and the pager is left holding an EXCLUSIVE lock, this
                   37179: ** can confuse the call to xCheckReservedLock() call made later as part
                   37180: ** of hot-journal detection.
                   37181: **
                   37182: ** xCheckReservedLock() is defined as returning true "if there is a RESERVED 
                   37183: ** lock held by this process or any others". So xCheckReservedLock may 
                   37184: ** return true because the caller itself is holding an EXCLUSIVE lock (but
                   37185: ** doesn't know it because of a previous error in xUnlock). If this happens
                   37186: ** a hot-journal may be mistaken for a journal being created by an active
                   37187: ** transaction in another process, causing SQLite to read from the database
                   37188: ** without rolling it back.
                   37189: **
                   37190: ** To work around this, if a call to xUnlock() fails when unlocking the
                   37191: ** database in the ERROR state, Pager.eLock is set to UNKNOWN_LOCK. It
                   37192: ** is only changed back to a real locking state after a successful call
                   37193: ** to xLock(EXCLUSIVE). Also, the code to do the OPEN->SHARED state transition
                   37194: ** omits the check for a hot-journal if Pager.eLock is set to UNKNOWN_LOCK 
                   37195: ** lock. Instead, it assumes a hot-journal exists and obtains an EXCLUSIVE
                   37196: ** lock on the database file before attempting to roll it back. See function
                   37197: ** PagerSharedLock() for more detail.
                   37198: **
                   37199: ** Pager.eLock may only be set to UNKNOWN_LOCK when the pager is in 
                   37200: ** PAGER_OPEN state.
                   37201: */
                   37202: #define UNKNOWN_LOCK                (EXCLUSIVE_LOCK+1)
                   37203: 
                   37204: /*
                   37205: ** A macro used for invoking the codec if there is one
                   37206: */
                   37207: #ifdef SQLITE_HAS_CODEC
                   37208: # define CODEC1(P,D,N,X,E) \
                   37209:     if( P->xCodec && P->xCodec(P->pCodec,D,N,X)==0 ){ E; }
                   37210: # define CODEC2(P,D,N,X,E,O) \
                   37211:     if( P->xCodec==0 ){ O=(char*)D; }else \
                   37212:     if( (O=(char*)(P->xCodec(P->pCodec,D,N,X)))==0 ){ E; }
                   37213: #else
                   37214: # define CODEC1(P,D,N,X,E)   /* NO-OP */
                   37215: # define CODEC2(P,D,N,X,E,O) O=(char*)D
                   37216: #endif
                   37217: 
                   37218: /*
                   37219: ** The maximum allowed sector size. 64KiB. If the xSectorsize() method 
                   37220: ** returns a value larger than this, then MAX_SECTOR_SIZE is used instead.
                   37221: ** This could conceivably cause corruption following a power failure on
                   37222: ** such a system. This is currently an undocumented limit.
                   37223: */
                   37224: #define MAX_SECTOR_SIZE 0x10000
                   37225: 
                   37226: /*
                   37227: ** An instance of the following structure is allocated for each active
                   37228: ** savepoint and statement transaction in the system. All such structures
                   37229: ** are stored in the Pager.aSavepoint[] array, which is allocated and
                   37230: ** resized using sqlite3Realloc().
                   37231: **
                   37232: ** When a savepoint is created, the PagerSavepoint.iHdrOffset field is
                   37233: ** set to 0. If a journal-header is written into the main journal while
                   37234: ** the savepoint is active, then iHdrOffset is set to the byte offset 
                   37235: ** immediately following the last journal record written into the main
                   37236: ** journal before the journal-header. This is required during savepoint
                   37237: ** rollback (see pagerPlaybackSavepoint()).
                   37238: */
                   37239: typedef struct PagerSavepoint PagerSavepoint;
                   37240: struct PagerSavepoint {
                   37241:   i64 iOffset;                 /* Starting offset in main journal */
                   37242:   i64 iHdrOffset;              /* See above */
                   37243:   Bitvec *pInSavepoint;        /* Set of pages in this savepoint */
                   37244:   Pgno nOrig;                  /* Original number of pages in file */
                   37245:   Pgno iSubRec;                /* Index of first record in sub-journal */
                   37246: #ifndef SQLITE_OMIT_WAL
                   37247:   u32 aWalData[WAL_SAVEPOINT_NDATA];        /* WAL savepoint context */
                   37248: #endif
                   37249: };
                   37250: 
                   37251: /*
                   37252: ** A open page cache is an instance of struct Pager. A description of
                   37253: ** some of the more important member variables follows:
                   37254: **
                   37255: ** eState
                   37256: **
                   37257: **   The current 'state' of the pager object. See the comment and state
                   37258: **   diagram above for a description of the pager state.
                   37259: **
                   37260: ** eLock
                   37261: **
                   37262: **   For a real on-disk database, the current lock held on the database file -
                   37263: **   NO_LOCK, SHARED_LOCK, RESERVED_LOCK or EXCLUSIVE_LOCK.
                   37264: **
                   37265: **   For a temporary or in-memory database (neither of which require any
                   37266: **   locks), this variable is always set to EXCLUSIVE_LOCK. Since such
                   37267: **   databases always have Pager.exclusiveMode==1, this tricks the pager
                   37268: **   logic into thinking that it already has all the locks it will ever
                   37269: **   need (and no reason to release them).
                   37270: **
                   37271: **   In some (obscure) circumstances, this variable may also be set to
                   37272: **   UNKNOWN_LOCK. See the comment above the #define of UNKNOWN_LOCK for
                   37273: **   details.
                   37274: **
                   37275: ** changeCountDone
                   37276: **
                   37277: **   This boolean variable is used to make sure that the change-counter 
                   37278: **   (the 4-byte header field at byte offset 24 of the database file) is 
                   37279: **   not updated more often than necessary. 
                   37280: **
                   37281: **   It is set to true when the change-counter field is updated, which 
                   37282: **   can only happen if an exclusive lock is held on the database file.
                   37283: **   It is cleared (set to false) whenever an exclusive lock is 
                   37284: **   relinquished on the database file. Each time a transaction is committed,
                   37285: **   The changeCountDone flag is inspected. If it is true, the work of
                   37286: **   updating the change-counter is omitted for the current transaction.
                   37287: **
                   37288: **   This mechanism means that when running in exclusive mode, a connection 
                   37289: **   need only update the change-counter once, for the first transaction
                   37290: **   committed.
                   37291: **
                   37292: ** setMaster
                   37293: **
                   37294: **   When PagerCommitPhaseOne() is called to commit a transaction, it may
                   37295: **   (or may not) specify a master-journal name to be written into the 
                   37296: **   journal file before it is synced to disk.
                   37297: **
                   37298: **   Whether or not a journal file contains a master-journal pointer affects 
                   37299: **   the way in which the journal file is finalized after the transaction is 
                   37300: **   committed or rolled back when running in "journal_mode=PERSIST" mode.
                   37301: **   If a journal file does not contain a master-journal pointer, it is
                   37302: **   finalized by overwriting the first journal header with zeroes. If
                   37303: **   it does contain a master-journal pointer the journal file is finalized 
                   37304: **   by truncating it to zero bytes, just as if the connection were 
                   37305: **   running in "journal_mode=truncate" mode.
                   37306: **
                   37307: **   Journal files that contain master journal pointers cannot be finalized
                   37308: **   simply by overwriting the first journal-header with zeroes, as the
                   37309: **   master journal pointer could interfere with hot-journal rollback of any
                   37310: **   subsequently interrupted transaction that reuses the journal file.
                   37311: **
                   37312: **   The flag is cleared as soon as the journal file is finalized (either
                   37313: **   by PagerCommitPhaseTwo or PagerRollback). If an IO error prevents the
                   37314: **   journal file from being successfully finalized, the setMaster flag
                   37315: **   is cleared anyway (and the pager will move to ERROR state).
                   37316: **
                   37317: ** doNotSpill, doNotSyncSpill
                   37318: **
                   37319: **   These two boolean variables control the behaviour of cache-spills
                   37320: **   (calls made by the pcache module to the pagerStress() routine to
                   37321: **   write cached data to the file-system in order to free up memory).
                   37322: **
                   37323: **   When doNotSpill is non-zero, writing to the database from pagerStress()
                   37324: **   is disabled altogether. This is done in a very obscure case that
                   37325: **   comes up during savepoint rollback that requires the pcache module
                   37326: **   to allocate a new page to prevent the journal file from being written
                   37327: **   while it is being traversed by code in pager_playback().
                   37328: ** 
                   37329: **   If doNotSyncSpill is non-zero, writing to the database from pagerStress()
                   37330: **   is permitted, but syncing the journal file is not. This flag is set
                   37331: **   by sqlite3PagerWrite() when the file-system sector-size is larger than
                   37332: **   the database page-size in order to prevent a journal sync from happening 
                   37333: **   in between the journalling of two pages on the same sector. 
                   37334: **
                   37335: ** subjInMemory
                   37336: **
                   37337: **   This is a boolean variable. If true, then any required sub-journal
                   37338: **   is opened as an in-memory journal file. If false, then in-memory
                   37339: **   sub-journals are only used for in-memory pager files.
                   37340: **
                   37341: **   This variable is updated by the upper layer each time a new 
                   37342: **   write-transaction is opened.
                   37343: **
                   37344: ** dbSize, dbOrigSize, dbFileSize
                   37345: **
                   37346: **   Variable dbSize is set to the number of pages in the database file.
                   37347: **   It is valid in PAGER_READER and higher states (all states except for
                   37348: **   OPEN and ERROR). 
                   37349: **
                   37350: **   dbSize is set based on the size of the database file, which may be 
                   37351: **   larger than the size of the database (the value stored at offset
                   37352: **   28 of the database header by the btree). If the size of the file
                   37353: **   is not an integer multiple of the page-size, the value stored in
                   37354: **   dbSize is rounded down (i.e. a 5KB file with 2K page-size has dbSize==2).
                   37355: **   Except, any file that is greater than 0 bytes in size is considered
                   37356: **   to have at least one page. (i.e. a 1KB file with 2K page-size leads
                   37357: **   to dbSize==1).
                   37358: **
                   37359: **   During a write-transaction, if pages with page-numbers greater than
                   37360: **   dbSize are modified in the cache, dbSize is updated accordingly.
                   37361: **   Similarly, if the database is truncated using PagerTruncateImage(), 
                   37362: **   dbSize is updated.
                   37363: **
                   37364: **   Variables dbOrigSize and dbFileSize are valid in states 
                   37365: **   PAGER_WRITER_LOCKED and higher. dbOrigSize is a copy of the dbSize
                   37366: **   variable at the start of the transaction. It is used during rollback,
                   37367: **   and to determine whether or not pages need to be journalled before
                   37368: **   being modified.
                   37369: **
                   37370: **   Throughout a write-transaction, dbFileSize contains the size of
                   37371: **   the file on disk in pages. It is set to a copy of dbSize when the
                   37372: **   write-transaction is first opened, and updated when VFS calls are made
                   37373: **   to write or truncate the database file on disk. 
                   37374: **
                   37375: **   The only reason the dbFileSize variable is required is to suppress 
                   37376: **   unnecessary calls to xTruncate() after committing a transaction. If, 
                   37377: **   when a transaction is committed, the dbFileSize variable indicates 
                   37378: **   that the database file is larger than the database image (Pager.dbSize), 
                   37379: **   pager_truncate() is called. The pager_truncate() call uses xFilesize()
                   37380: **   to measure the database file on disk, and then truncates it if required.
                   37381: **   dbFileSize is not used when rolling back a transaction. In this case
                   37382: **   pager_truncate() is called unconditionally (which means there may be
                   37383: **   a call to xFilesize() that is not strictly required). In either case,
                   37384: **   pager_truncate() may cause the file to become smaller or larger.
                   37385: **
                   37386: ** dbHintSize
                   37387: **
                   37388: **   The dbHintSize variable is used to limit the number of calls made to
                   37389: **   the VFS xFileControl(FCNTL_SIZE_HINT) method. 
                   37390: **
                   37391: **   dbHintSize is set to a copy of the dbSize variable when a
                   37392: **   write-transaction is opened (at the same time as dbFileSize and
                   37393: **   dbOrigSize). If the xFileControl(FCNTL_SIZE_HINT) method is called,
                   37394: **   dbHintSize is increased to the number of pages that correspond to the
                   37395: **   size-hint passed to the method call. See pager_write_pagelist() for 
                   37396: **   details.
                   37397: **
                   37398: ** errCode
                   37399: **
                   37400: **   The Pager.errCode variable is only ever used in PAGER_ERROR state. It
                   37401: **   is set to zero in all other states. In PAGER_ERROR state, Pager.errCode 
                   37402: **   is always set to SQLITE_FULL, SQLITE_IOERR or one of the SQLITE_IOERR_XXX 
                   37403: **   sub-codes.
                   37404: */
                   37405: struct Pager {
                   37406:   sqlite3_vfs *pVfs;          /* OS functions to use for IO */
                   37407:   u8 exclusiveMode;           /* Boolean. True if locking_mode==EXCLUSIVE */
                   37408:   u8 journalMode;             /* One of the PAGER_JOURNALMODE_* values */
                   37409:   u8 useJournal;              /* Use a rollback journal on this file */
                   37410:   u8 noReadlock;              /* Do not bother to obtain readlocks */
                   37411:   u8 noSync;                  /* Do not sync the journal if true */
                   37412:   u8 fullSync;                /* Do extra syncs of the journal for robustness */
                   37413:   u8 ckptSyncFlags;           /* SYNC_NORMAL or SYNC_FULL for checkpoint */
                   37414:   u8 syncFlags;               /* SYNC_NORMAL or SYNC_FULL otherwise */
                   37415:   u8 tempFile;                /* zFilename is a temporary file */
                   37416:   u8 readOnly;                /* True for a read-only database */
                   37417:   u8 memDb;                   /* True to inhibit all file I/O */
                   37418: 
                   37419:   /**************************************************************************
                   37420:   ** The following block contains those class members that change during
                   37421:   ** routine opertion.  Class members not in this block are either fixed
                   37422:   ** when the pager is first created or else only change when there is a
                   37423:   ** significant mode change (such as changing the page_size, locking_mode,
                   37424:   ** or the journal_mode).  From another view, these class members describe
                   37425:   ** the "state" of the pager, while other class members describe the
                   37426:   ** "configuration" of the pager.
                   37427:   */
                   37428:   u8 eState;                  /* Pager state (OPEN, READER, WRITER_LOCKED..) */
                   37429:   u8 eLock;                   /* Current lock held on database file */
                   37430:   u8 changeCountDone;         /* Set after incrementing the change-counter */
                   37431:   u8 setMaster;               /* True if a m-j name has been written to jrnl */
                   37432:   u8 doNotSpill;              /* Do not spill the cache when non-zero */
                   37433:   u8 doNotSyncSpill;          /* Do not do a spill that requires jrnl sync */
                   37434:   u8 subjInMemory;            /* True to use in-memory sub-journals */
                   37435:   Pgno dbSize;                /* Number of pages in the database */
                   37436:   Pgno dbOrigSize;            /* dbSize before the current transaction */
                   37437:   Pgno dbFileSize;            /* Number of pages in the database file */
                   37438:   Pgno dbHintSize;            /* Value passed to FCNTL_SIZE_HINT call */
                   37439:   int errCode;                /* One of several kinds of errors */
                   37440:   int nRec;                   /* Pages journalled since last j-header written */
                   37441:   u32 cksumInit;              /* Quasi-random value added to every checksum */
                   37442:   u32 nSubRec;                /* Number of records written to sub-journal */
                   37443:   Bitvec *pInJournal;         /* One bit for each page in the database file */
                   37444:   sqlite3_file *fd;           /* File descriptor for database */
                   37445:   sqlite3_file *jfd;          /* File descriptor for main journal */
                   37446:   sqlite3_file *sjfd;         /* File descriptor for sub-journal */
                   37447:   i64 journalOff;             /* Current write offset in the journal file */
                   37448:   i64 journalHdr;             /* Byte offset to previous journal header */
                   37449:   sqlite3_backup *pBackup;    /* Pointer to list of ongoing backup processes */
                   37450:   PagerSavepoint *aSavepoint; /* Array of active savepoints */
                   37451:   int nSavepoint;             /* Number of elements in aSavepoint[] */
                   37452:   char dbFileVers[16];        /* Changes whenever database file changes */
                   37453:   /*
                   37454:   ** End of the routinely-changing class members
                   37455:   ***************************************************************************/
                   37456: 
                   37457:   u16 nExtra;                 /* Add this many bytes to each in-memory page */
                   37458:   i16 nReserve;               /* Number of unused bytes at end of each page */
                   37459:   u32 vfsFlags;               /* Flags for sqlite3_vfs.xOpen() */
                   37460:   u32 sectorSize;             /* Assumed sector size during rollback */
                   37461:   int pageSize;               /* Number of bytes in a page */
                   37462:   Pgno mxPgno;                /* Maximum allowed size of the database */
                   37463:   i64 journalSizeLimit;       /* Size limit for persistent journal files */
                   37464:   char *zFilename;            /* Name of the database file */
                   37465:   char *zJournal;             /* Name of the journal file */
                   37466:   int (*xBusyHandler)(void*); /* Function to call when busy */
                   37467:   void *pBusyHandlerArg;      /* Context argument for xBusyHandler */
                   37468: #ifdef SQLITE_TEST
                   37469:   int nHit, nMiss;            /* Cache hits and missing */
                   37470:   int nRead, nWrite;          /* Database pages read/written */
                   37471: #endif
                   37472:   void (*xReiniter)(DbPage*); /* Call this routine when reloading pages */
                   37473: #ifdef SQLITE_HAS_CODEC
                   37474:   void *(*xCodec)(void*,void*,Pgno,int); /* Routine for en/decoding data */
                   37475:   void (*xCodecSizeChng)(void*,int,int); /* Notify of page size changes */
                   37476:   void (*xCodecFree)(void*);             /* Destructor for the codec */
                   37477:   void *pCodec;               /* First argument to xCodec... methods */
                   37478: #endif
                   37479:   char *pTmpSpace;            /* Pager.pageSize bytes of space for tmp use */
                   37480:   PCache *pPCache;            /* Pointer to page cache object */
                   37481: #ifndef SQLITE_OMIT_WAL
                   37482:   Wal *pWal;                  /* Write-ahead log used by "journal_mode=wal" */
                   37483:   char *zWal;                 /* File name for write-ahead log */
                   37484: #endif
                   37485: };
                   37486: 
                   37487: /*
                   37488: ** The following global variables hold counters used for
                   37489: ** testing purposes only.  These variables do not exist in
                   37490: ** a non-testing build.  These variables are not thread-safe.
                   37491: */
                   37492: #ifdef SQLITE_TEST
                   37493: SQLITE_API int sqlite3_pager_readdb_count = 0;    /* Number of full pages read from DB */
                   37494: SQLITE_API int sqlite3_pager_writedb_count = 0;   /* Number of full pages written to DB */
                   37495: SQLITE_API int sqlite3_pager_writej_count = 0;    /* Number of pages written to journal */
                   37496: # define PAGER_INCR(v)  v++
                   37497: #else
                   37498: # define PAGER_INCR(v)
                   37499: #endif
                   37500: 
                   37501: 
                   37502: 
                   37503: /*
                   37504: ** Journal files begin with the following magic string.  The data
                   37505: ** was obtained from /dev/random.  It is used only as a sanity check.
                   37506: **
                   37507: ** Since version 2.8.0, the journal format contains additional sanity
                   37508: ** checking information.  If the power fails while the journal is being
                   37509: ** written, semi-random garbage data might appear in the journal
                   37510: ** file after power is restored.  If an attempt is then made
                   37511: ** to roll the journal back, the database could be corrupted.  The additional
                   37512: ** sanity checking data is an attempt to discover the garbage in the
                   37513: ** journal and ignore it.
                   37514: **
                   37515: ** The sanity checking information for the new journal format consists
                   37516: ** of a 32-bit checksum on each page of data.  The checksum covers both
                   37517: ** the page number and the pPager->pageSize bytes of data for the page.
                   37518: ** This cksum is initialized to a 32-bit random value that appears in the
                   37519: ** journal file right after the header.  The random initializer is important,
                   37520: ** because garbage data that appears at the end of a journal is likely
                   37521: ** data that was once in other files that have now been deleted.  If the
                   37522: ** garbage data came from an obsolete journal file, the checksums might
                   37523: ** be correct.  But by initializing the checksum to random value which
                   37524: ** is different for every journal, we minimize that risk.
                   37525: */
                   37526: static const unsigned char aJournalMagic[] = {
                   37527:   0xd9, 0xd5, 0x05, 0xf9, 0x20, 0xa1, 0x63, 0xd7,
                   37528: };
                   37529: 
                   37530: /*
                   37531: ** The size of the of each page record in the journal is given by
                   37532: ** the following macro.
                   37533: */
                   37534: #define JOURNAL_PG_SZ(pPager)  ((pPager->pageSize) + 8)
                   37535: 
                   37536: /*
                   37537: ** The journal header size for this pager. This is usually the same 
                   37538: ** size as a single disk sector. See also setSectorSize().
                   37539: */
                   37540: #define JOURNAL_HDR_SZ(pPager) (pPager->sectorSize)
                   37541: 
                   37542: /*
                   37543: ** The macro MEMDB is true if we are dealing with an in-memory database.
                   37544: ** We do this as a macro so that if the SQLITE_OMIT_MEMORYDB macro is set,
                   37545: ** the value of MEMDB will be a constant and the compiler will optimize
                   37546: ** out code that would never execute.
                   37547: */
                   37548: #ifdef SQLITE_OMIT_MEMORYDB
                   37549: # define MEMDB 0
                   37550: #else
                   37551: # define MEMDB pPager->memDb
                   37552: #endif
                   37553: 
                   37554: /*
                   37555: ** The maximum legal page number is (2^31 - 1).
                   37556: */
                   37557: #define PAGER_MAX_PGNO 2147483647
                   37558: 
                   37559: /*
                   37560: ** The argument to this macro is a file descriptor (type sqlite3_file*).
                   37561: ** Return 0 if it is not open, or non-zero (but not 1) if it is.
                   37562: **
                   37563: ** This is so that expressions can be written as:
                   37564: **
                   37565: **   if( isOpen(pPager->jfd) ){ ...
                   37566: **
                   37567: ** instead of
                   37568: **
                   37569: **   if( pPager->jfd->pMethods ){ ...
                   37570: */
                   37571: #define isOpen(pFd) ((pFd)->pMethods)
                   37572: 
                   37573: /*
                   37574: ** Return true if this pager uses a write-ahead log instead of the usual
                   37575: ** rollback journal. Otherwise false.
                   37576: */
                   37577: #ifndef SQLITE_OMIT_WAL
                   37578: static int pagerUseWal(Pager *pPager){
                   37579:   return (pPager->pWal!=0);
                   37580: }
                   37581: #else
                   37582: # define pagerUseWal(x) 0
                   37583: # define pagerRollbackWal(x) 0
                   37584: # define pagerWalFrames(v,w,x,y,z) 0
                   37585: # define pagerOpenWalIfPresent(z) SQLITE_OK
                   37586: # define pagerBeginReadTransaction(z) SQLITE_OK
                   37587: #endif
                   37588: 
                   37589: #ifndef NDEBUG 
                   37590: /*
                   37591: ** Usage:
                   37592: **
                   37593: **   assert( assert_pager_state(pPager) );
                   37594: **
                   37595: ** This function runs many asserts to try to find inconsistencies in
                   37596: ** the internal state of the Pager object.
                   37597: */
                   37598: static int assert_pager_state(Pager *p){
                   37599:   Pager *pPager = p;
                   37600: 
                   37601:   /* State must be valid. */
                   37602:   assert( p->eState==PAGER_OPEN
                   37603:        || p->eState==PAGER_READER
                   37604:        || p->eState==PAGER_WRITER_LOCKED
                   37605:        || p->eState==PAGER_WRITER_CACHEMOD
                   37606:        || p->eState==PAGER_WRITER_DBMOD
                   37607:        || p->eState==PAGER_WRITER_FINISHED
                   37608:        || p->eState==PAGER_ERROR
                   37609:   );
                   37610: 
                   37611:   /* Regardless of the current state, a temp-file connection always behaves
                   37612:   ** as if it has an exclusive lock on the database file. It never updates
                   37613:   ** the change-counter field, so the changeCountDone flag is always set.
                   37614:   */
                   37615:   assert( p->tempFile==0 || p->eLock==EXCLUSIVE_LOCK );
                   37616:   assert( p->tempFile==0 || pPager->changeCountDone );
                   37617: 
                   37618:   /* If the useJournal flag is clear, the journal-mode must be "OFF". 
                   37619:   ** And if the journal-mode is "OFF", the journal file must not be open.
                   37620:   */
                   37621:   assert( p->journalMode==PAGER_JOURNALMODE_OFF || p->useJournal );
                   37622:   assert( p->journalMode!=PAGER_JOURNALMODE_OFF || !isOpen(p->jfd) );
                   37623: 
                   37624:   /* Check that MEMDB implies noSync. And an in-memory journal. Since 
                   37625:   ** this means an in-memory pager performs no IO at all, it cannot encounter 
                   37626:   ** either SQLITE_IOERR or SQLITE_FULL during rollback or while finalizing 
                   37627:   ** a journal file. (although the in-memory journal implementation may 
                   37628:   ** return SQLITE_IOERR_NOMEM while the journal file is being written). It 
                   37629:   ** is therefore not possible for an in-memory pager to enter the ERROR 
                   37630:   ** state.
                   37631:   */
                   37632:   if( MEMDB ){
                   37633:     assert( p->noSync );
                   37634:     assert( p->journalMode==PAGER_JOURNALMODE_OFF 
                   37635:          || p->journalMode==PAGER_JOURNALMODE_MEMORY 
                   37636:     );
                   37637:     assert( p->eState!=PAGER_ERROR && p->eState!=PAGER_OPEN );
                   37638:     assert( pagerUseWal(p)==0 );
                   37639:   }
                   37640: 
                   37641:   /* If changeCountDone is set, a RESERVED lock or greater must be held
                   37642:   ** on the file.
                   37643:   */
                   37644:   assert( pPager->changeCountDone==0 || pPager->eLock>=RESERVED_LOCK );
                   37645:   assert( p->eLock!=PENDING_LOCK );
                   37646: 
                   37647:   switch( p->eState ){
                   37648:     case PAGER_OPEN:
                   37649:       assert( !MEMDB );
                   37650:       assert( pPager->errCode==SQLITE_OK );
                   37651:       assert( sqlite3PcacheRefCount(pPager->pPCache)==0 || pPager->tempFile );
                   37652:       break;
                   37653: 
                   37654:     case PAGER_READER:
                   37655:       assert( pPager->errCode==SQLITE_OK );
                   37656:       assert( p->eLock!=UNKNOWN_LOCK );
                   37657:       assert( p->eLock>=SHARED_LOCK || p->noReadlock );
                   37658:       break;
                   37659: 
                   37660:     case PAGER_WRITER_LOCKED:
                   37661:       assert( p->eLock!=UNKNOWN_LOCK );
                   37662:       assert( pPager->errCode==SQLITE_OK );
                   37663:       if( !pagerUseWal(pPager) ){
                   37664:         assert( p->eLock>=RESERVED_LOCK );
                   37665:       }
                   37666:       assert( pPager->dbSize==pPager->dbOrigSize );
                   37667:       assert( pPager->dbOrigSize==pPager->dbFileSize );
                   37668:       assert( pPager->dbOrigSize==pPager->dbHintSize );
                   37669:       assert( pPager->setMaster==0 );
                   37670:       break;
                   37671: 
                   37672:     case PAGER_WRITER_CACHEMOD:
                   37673:       assert( p->eLock!=UNKNOWN_LOCK );
                   37674:       assert( pPager->errCode==SQLITE_OK );
                   37675:       if( !pagerUseWal(pPager) ){
                   37676:         /* It is possible that if journal_mode=wal here that neither the
                   37677:         ** journal file nor the WAL file are open. This happens during
                   37678:         ** a rollback transaction that switches from journal_mode=off
                   37679:         ** to journal_mode=wal.
                   37680:         */
                   37681:         assert( p->eLock>=RESERVED_LOCK );
                   37682:         assert( isOpen(p->jfd) 
                   37683:              || p->journalMode==PAGER_JOURNALMODE_OFF 
                   37684:              || p->journalMode==PAGER_JOURNALMODE_WAL 
                   37685:         );
                   37686:       }
                   37687:       assert( pPager->dbOrigSize==pPager->dbFileSize );
                   37688:       assert( pPager->dbOrigSize==pPager->dbHintSize );
                   37689:       break;
                   37690: 
                   37691:     case PAGER_WRITER_DBMOD:
                   37692:       assert( p->eLock==EXCLUSIVE_LOCK );
                   37693:       assert( pPager->errCode==SQLITE_OK );
                   37694:       assert( !pagerUseWal(pPager) );
                   37695:       assert( p->eLock>=EXCLUSIVE_LOCK );
                   37696:       assert( isOpen(p->jfd) 
                   37697:            || p->journalMode==PAGER_JOURNALMODE_OFF 
                   37698:            || p->journalMode==PAGER_JOURNALMODE_WAL 
                   37699:       );
                   37700:       assert( pPager->dbOrigSize<=pPager->dbHintSize );
                   37701:       break;
                   37702: 
                   37703:     case PAGER_WRITER_FINISHED:
                   37704:       assert( p->eLock==EXCLUSIVE_LOCK );
                   37705:       assert( pPager->errCode==SQLITE_OK );
                   37706:       assert( !pagerUseWal(pPager) );
                   37707:       assert( isOpen(p->jfd) 
                   37708:            || p->journalMode==PAGER_JOURNALMODE_OFF 
                   37709:            || p->journalMode==PAGER_JOURNALMODE_WAL 
                   37710:       );
                   37711:       break;
                   37712: 
                   37713:     case PAGER_ERROR:
                   37714:       /* There must be at least one outstanding reference to the pager if
                   37715:       ** in ERROR state. Otherwise the pager should have already dropped
                   37716:       ** back to OPEN state.
                   37717:       */
                   37718:       assert( pPager->errCode!=SQLITE_OK );
                   37719:       assert( sqlite3PcacheRefCount(pPager->pPCache)>0 );
                   37720:       break;
                   37721:   }
                   37722: 
                   37723:   return 1;
                   37724: }
                   37725: #endif /* ifndef NDEBUG */
                   37726: 
                   37727: #ifdef SQLITE_DEBUG 
                   37728: /*
                   37729: ** Return a pointer to a human readable string in a static buffer
                   37730: ** containing the state of the Pager object passed as an argument. This
                   37731: ** is intended to be used within debuggers. For example, as an alternative
                   37732: ** to "print *pPager" in gdb:
                   37733: **
                   37734: ** (gdb) printf "%s", print_pager_state(pPager)
                   37735: */
                   37736: static char *print_pager_state(Pager *p){
                   37737:   static char zRet[1024];
                   37738: 
                   37739:   sqlite3_snprintf(1024, zRet,
                   37740:       "Filename:      %s\n"
                   37741:       "State:         %s errCode=%d\n"
                   37742:       "Lock:          %s\n"
                   37743:       "Locking mode:  locking_mode=%s\n"
                   37744:       "Journal mode:  journal_mode=%s\n"
                   37745:       "Backing store: tempFile=%d memDb=%d useJournal=%d\n"
                   37746:       "Journal:       journalOff=%lld journalHdr=%lld\n"
                   37747:       "Size:          dbsize=%d dbOrigSize=%d dbFileSize=%d\n"
                   37748:       , p->zFilename
                   37749:       , p->eState==PAGER_OPEN            ? "OPEN" :
                   37750:         p->eState==PAGER_READER          ? "READER" :
                   37751:         p->eState==PAGER_WRITER_LOCKED   ? "WRITER_LOCKED" :
                   37752:         p->eState==PAGER_WRITER_CACHEMOD ? "WRITER_CACHEMOD" :
                   37753:         p->eState==PAGER_WRITER_DBMOD    ? "WRITER_DBMOD" :
                   37754:         p->eState==PAGER_WRITER_FINISHED ? "WRITER_FINISHED" :
                   37755:         p->eState==PAGER_ERROR           ? "ERROR" : "?error?"
                   37756:       , (int)p->errCode
                   37757:       , p->eLock==NO_LOCK         ? "NO_LOCK" :
                   37758:         p->eLock==RESERVED_LOCK   ? "RESERVED" :
                   37759:         p->eLock==EXCLUSIVE_LOCK  ? "EXCLUSIVE" :
                   37760:         p->eLock==SHARED_LOCK     ? "SHARED" :
                   37761:         p->eLock==UNKNOWN_LOCK    ? "UNKNOWN" : "?error?"
                   37762:       , p->exclusiveMode ? "exclusive" : "normal"
                   37763:       , p->journalMode==PAGER_JOURNALMODE_MEMORY   ? "memory" :
                   37764:         p->journalMode==PAGER_JOURNALMODE_OFF      ? "off" :
                   37765:         p->journalMode==PAGER_JOURNALMODE_DELETE   ? "delete" :
                   37766:         p->journalMode==PAGER_JOURNALMODE_PERSIST  ? "persist" :
                   37767:         p->journalMode==PAGER_JOURNALMODE_TRUNCATE ? "truncate" :
                   37768:         p->journalMode==PAGER_JOURNALMODE_WAL      ? "wal" : "?error?"
                   37769:       , (int)p->tempFile, (int)p->memDb, (int)p->useJournal
                   37770:       , p->journalOff, p->journalHdr
                   37771:       , (int)p->dbSize, (int)p->dbOrigSize, (int)p->dbFileSize
                   37772:   );
                   37773: 
                   37774:   return zRet;
                   37775: }
                   37776: #endif
                   37777: 
                   37778: /*
                   37779: ** Return true if it is necessary to write page *pPg into the sub-journal.
                   37780: ** A page needs to be written into the sub-journal if there exists one
                   37781: ** or more open savepoints for which:
                   37782: **
                   37783: **   * The page-number is less than or equal to PagerSavepoint.nOrig, and
                   37784: **   * The bit corresponding to the page-number is not set in
                   37785: **     PagerSavepoint.pInSavepoint.
                   37786: */
                   37787: static int subjRequiresPage(PgHdr *pPg){
                   37788:   Pgno pgno = pPg->pgno;
                   37789:   Pager *pPager = pPg->pPager;
                   37790:   int i;
                   37791:   for(i=0; i<pPager->nSavepoint; i++){
                   37792:     PagerSavepoint *p = &pPager->aSavepoint[i];
                   37793:     if( p->nOrig>=pgno && 0==sqlite3BitvecTest(p->pInSavepoint, pgno) ){
                   37794:       return 1;
                   37795:     }
                   37796:   }
                   37797:   return 0;
                   37798: }
                   37799: 
                   37800: /*
                   37801: ** Return true if the page is already in the journal file.
                   37802: */
                   37803: static int pageInJournal(PgHdr *pPg){
                   37804:   return sqlite3BitvecTest(pPg->pPager->pInJournal, pPg->pgno);
                   37805: }
                   37806: 
                   37807: /*
                   37808: ** Read a 32-bit integer from the given file descriptor.  Store the integer
                   37809: ** that is read in *pRes.  Return SQLITE_OK if everything worked, or an
                   37810: ** error code is something goes wrong.
                   37811: **
                   37812: ** All values are stored on disk as big-endian.
                   37813: */
                   37814: static int read32bits(sqlite3_file *fd, i64 offset, u32 *pRes){
                   37815:   unsigned char ac[4];
                   37816:   int rc = sqlite3OsRead(fd, ac, sizeof(ac), offset);
                   37817:   if( rc==SQLITE_OK ){
                   37818:     *pRes = sqlite3Get4byte(ac);
                   37819:   }
                   37820:   return rc;
                   37821: }
                   37822: 
                   37823: /*
                   37824: ** Write a 32-bit integer into a string buffer in big-endian byte order.
                   37825: */
                   37826: #define put32bits(A,B)  sqlite3Put4byte((u8*)A,B)
                   37827: 
                   37828: 
                   37829: /*
                   37830: ** Write a 32-bit integer into the given file descriptor.  Return SQLITE_OK
                   37831: ** on success or an error code is something goes wrong.
                   37832: */
                   37833: static int write32bits(sqlite3_file *fd, i64 offset, u32 val){
                   37834:   char ac[4];
                   37835:   put32bits(ac, val);
                   37836:   return sqlite3OsWrite(fd, ac, 4, offset);
                   37837: }
                   37838: 
                   37839: /*
                   37840: ** Unlock the database file to level eLock, which must be either NO_LOCK
                   37841: ** or SHARED_LOCK. Regardless of whether or not the call to xUnlock()
                   37842: ** succeeds, set the Pager.eLock variable to match the (attempted) new lock.
                   37843: **
                   37844: ** Except, if Pager.eLock is set to UNKNOWN_LOCK when this function is
                   37845: ** called, do not modify it. See the comment above the #define of 
                   37846: ** UNKNOWN_LOCK for an explanation of this.
                   37847: */
                   37848: static int pagerUnlockDb(Pager *pPager, int eLock){
                   37849:   int rc = SQLITE_OK;
                   37850: 
                   37851:   assert( !pPager->exclusiveMode || pPager->eLock==eLock );
                   37852:   assert( eLock==NO_LOCK || eLock==SHARED_LOCK );
                   37853:   assert( eLock!=NO_LOCK || pagerUseWal(pPager)==0 );
                   37854:   if( isOpen(pPager->fd) ){
                   37855:     assert( pPager->eLock>=eLock );
                   37856:     rc = sqlite3OsUnlock(pPager->fd, eLock);
                   37857:     if( pPager->eLock!=UNKNOWN_LOCK ){
                   37858:       pPager->eLock = (u8)eLock;
                   37859:     }
                   37860:     IOTRACE(("UNLOCK %p %d\n", pPager, eLock))
                   37861:   }
                   37862:   return rc;
                   37863: }
                   37864: 
                   37865: /*
                   37866: ** Lock the database file to level eLock, which must be either SHARED_LOCK,
                   37867: ** RESERVED_LOCK or EXCLUSIVE_LOCK. If the caller is successful, set the
                   37868: ** Pager.eLock variable to the new locking state. 
                   37869: **
                   37870: ** Except, if Pager.eLock is set to UNKNOWN_LOCK when this function is 
                   37871: ** called, do not modify it unless the new locking state is EXCLUSIVE_LOCK. 
                   37872: ** See the comment above the #define of UNKNOWN_LOCK for an explanation 
                   37873: ** of this.
                   37874: */
                   37875: static int pagerLockDb(Pager *pPager, int eLock){
                   37876:   int rc = SQLITE_OK;
                   37877: 
                   37878:   assert( eLock==SHARED_LOCK || eLock==RESERVED_LOCK || eLock==EXCLUSIVE_LOCK );
                   37879:   if( pPager->eLock<eLock || pPager->eLock==UNKNOWN_LOCK ){
                   37880:     rc = sqlite3OsLock(pPager->fd, eLock);
                   37881:     if( rc==SQLITE_OK && (pPager->eLock!=UNKNOWN_LOCK||eLock==EXCLUSIVE_LOCK) ){
                   37882:       pPager->eLock = (u8)eLock;
                   37883:       IOTRACE(("LOCK %p %d\n", pPager, eLock))
                   37884:     }
                   37885:   }
                   37886:   return rc;
                   37887: }
                   37888: 
                   37889: /*
                   37890: ** This function determines whether or not the atomic-write optimization
                   37891: ** can be used with this pager. The optimization can be used if:
                   37892: **
                   37893: **  (a) the value returned by OsDeviceCharacteristics() indicates that
                   37894: **      a database page may be written atomically, and
                   37895: **  (b) the value returned by OsSectorSize() is less than or equal
                   37896: **      to the page size.
                   37897: **
                   37898: ** The optimization is also always enabled for temporary files. It is
                   37899: ** an error to call this function if pPager is opened on an in-memory
                   37900: ** database.
                   37901: **
                   37902: ** If the optimization cannot be used, 0 is returned. If it can be used,
                   37903: ** then the value returned is the size of the journal file when it
                   37904: ** contains rollback data for exactly one page.
                   37905: */
                   37906: #ifdef SQLITE_ENABLE_ATOMIC_WRITE
                   37907: static int jrnlBufferSize(Pager *pPager){
                   37908:   assert( !MEMDB );
                   37909:   if( !pPager->tempFile ){
                   37910:     int dc;                           /* Device characteristics */
                   37911:     int nSector;                      /* Sector size */
                   37912:     int szPage;                       /* Page size */
                   37913: 
                   37914:     assert( isOpen(pPager->fd) );
                   37915:     dc = sqlite3OsDeviceCharacteristics(pPager->fd);
                   37916:     nSector = pPager->sectorSize;
                   37917:     szPage = pPager->pageSize;
                   37918: 
                   37919:     assert(SQLITE_IOCAP_ATOMIC512==(512>>8));
                   37920:     assert(SQLITE_IOCAP_ATOMIC64K==(65536>>8));
                   37921:     if( 0==(dc&(SQLITE_IOCAP_ATOMIC|(szPage>>8)) || nSector>szPage) ){
                   37922:       return 0;
                   37923:     }
                   37924:   }
                   37925: 
                   37926:   return JOURNAL_HDR_SZ(pPager) + JOURNAL_PG_SZ(pPager);
                   37927: }
                   37928: #endif
                   37929: 
                   37930: /*
                   37931: ** If SQLITE_CHECK_PAGES is defined then we do some sanity checking
                   37932: ** on the cache using a hash function.  This is used for testing
                   37933: ** and debugging only.
                   37934: */
                   37935: #ifdef SQLITE_CHECK_PAGES
                   37936: /*
                   37937: ** Return a 32-bit hash of the page data for pPage.
                   37938: */
                   37939: static u32 pager_datahash(int nByte, unsigned char *pData){
                   37940:   u32 hash = 0;
                   37941:   int i;
                   37942:   for(i=0; i<nByte; i++){
                   37943:     hash = (hash*1039) + pData[i];
                   37944:   }
                   37945:   return hash;
                   37946: }
                   37947: static u32 pager_pagehash(PgHdr *pPage){
                   37948:   return pager_datahash(pPage->pPager->pageSize, (unsigned char *)pPage->pData);
                   37949: }
                   37950: static void pager_set_pagehash(PgHdr *pPage){
                   37951:   pPage->pageHash = pager_pagehash(pPage);
                   37952: }
                   37953: 
                   37954: /*
                   37955: ** The CHECK_PAGE macro takes a PgHdr* as an argument. If SQLITE_CHECK_PAGES
                   37956: ** is defined, and NDEBUG is not defined, an assert() statement checks
                   37957: ** that the page is either dirty or still matches the calculated page-hash.
                   37958: */
                   37959: #define CHECK_PAGE(x) checkPage(x)
                   37960: static void checkPage(PgHdr *pPg){
                   37961:   Pager *pPager = pPg->pPager;
                   37962:   assert( pPager->eState!=PAGER_ERROR );
                   37963:   assert( (pPg->flags&PGHDR_DIRTY) || pPg->pageHash==pager_pagehash(pPg) );
                   37964: }
                   37965: 
                   37966: #else
                   37967: #define pager_datahash(X,Y)  0
                   37968: #define pager_pagehash(X)  0
                   37969: #define pager_set_pagehash(X)
                   37970: #define CHECK_PAGE(x)
                   37971: #endif  /* SQLITE_CHECK_PAGES */
                   37972: 
                   37973: /*
                   37974: ** When this is called the journal file for pager pPager must be open.
                   37975: ** This function attempts to read a master journal file name from the 
                   37976: ** end of the file and, if successful, copies it into memory supplied 
                   37977: ** by the caller. See comments above writeMasterJournal() for the format
                   37978: ** used to store a master journal file name at the end of a journal file.
                   37979: **
                   37980: ** zMaster must point to a buffer of at least nMaster bytes allocated by
                   37981: ** the caller. This should be sqlite3_vfs.mxPathname+1 (to ensure there is
                   37982: ** enough space to write the master journal name). If the master journal
                   37983: ** name in the journal is longer than nMaster bytes (including a
                   37984: ** nul-terminator), then this is handled as if no master journal name
                   37985: ** were present in the journal.
                   37986: **
                   37987: ** If a master journal file name is present at the end of the journal
                   37988: ** file, then it is copied into the buffer pointed to by zMaster. A
                   37989: ** nul-terminator byte is appended to the buffer following the master
                   37990: ** journal file name.
                   37991: **
                   37992: ** If it is determined that no master journal file name is present 
                   37993: ** zMaster[0] is set to 0 and SQLITE_OK returned.
                   37994: **
                   37995: ** If an error occurs while reading from the journal file, an SQLite
                   37996: ** error code is returned.
                   37997: */
                   37998: static int readMasterJournal(sqlite3_file *pJrnl, char *zMaster, u32 nMaster){
                   37999:   int rc;                    /* Return code */
                   38000:   u32 len;                   /* Length in bytes of master journal name */
                   38001:   i64 szJ;                   /* Total size in bytes of journal file pJrnl */
                   38002:   u32 cksum;                 /* MJ checksum value read from journal */
                   38003:   u32 u;                     /* Unsigned loop counter */
                   38004:   unsigned char aMagic[8];   /* A buffer to hold the magic header */
                   38005:   zMaster[0] = '\0';
                   38006: 
                   38007:   if( SQLITE_OK!=(rc = sqlite3OsFileSize(pJrnl, &szJ))
                   38008:    || szJ<16
                   38009:    || SQLITE_OK!=(rc = read32bits(pJrnl, szJ-16, &len))
                   38010:    || len>=nMaster 
                   38011:    || SQLITE_OK!=(rc = read32bits(pJrnl, szJ-12, &cksum))
                   38012:    || SQLITE_OK!=(rc = sqlite3OsRead(pJrnl, aMagic, 8, szJ-8))
                   38013:    || memcmp(aMagic, aJournalMagic, 8)
                   38014:    || SQLITE_OK!=(rc = sqlite3OsRead(pJrnl, zMaster, len, szJ-16-len))
                   38015:   ){
                   38016:     return rc;
                   38017:   }
                   38018: 
                   38019:   /* See if the checksum matches the master journal name */
                   38020:   for(u=0; u<len; u++){
                   38021:     cksum -= zMaster[u];
                   38022:   }
                   38023:   if( cksum ){
                   38024:     /* If the checksum doesn't add up, then one or more of the disk sectors
                   38025:     ** containing the master journal filename is corrupted. This means
                   38026:     ** definitely roll back, so just return SQLITE_OK and report a (nul)
                   38027:     ** master-journal filename.
                   38028:     */
                   38029:     len = 0;
                   38030:   }
                   38031:   zMaster[len] = '\0';
                   38032:    
                   38033:   return SQLITE_OK;
                   38034: }
                   38035: 
                   38036: /*
                   38037: ** Return the offset of the sector boundary at or immediately 
                   38038: ** following the value in pPager->journalOff, assuming a sector 
                   38039: ** size of pPager->sectorSize bytes.
                   38040: **
                   38041: ** i.e for a sector size of 512:
                   38042: **
                   38043: **   Pager.journalOff          Return value
                   38044: **   ---------------------------------------
                   38045: **   0                         0
                   38046: **   512                       512
                   38047: **   100                       512
                   38048: **   2000                      2048
                   38049: ** 
                   38050: */
                   38051: static i64 journalHdrOffset(Pager *pPager){
                   38052:   i64 offset = 0;
                   38053:   i64 c = pPager->journalOff;
                   38054:   if( c ){
                   38055:     offset = ((c-1)/JOURNAL_HDR_SZ(pPager) + 1) * JOURNAL_HDR_SZ(pPager);
                   38056:   }
                   38057:   assert( offset%JOURNAL_HDR_SZ(pPager)==0 );
                   38058:   assert( offset>=c );
                   38059:   assert( (offset-c)<JOURNAL_HDR_SZ(pPager) );
                   38060:   return offset;
                   38061: }
                   38062: 
                   38063: /*
                   38064: ** The journal file must be open when this function is called.
                   38065: **
                   38066: ** This function is a no-op if the journal file has not been written to
                   38067: ** within the current transaction (i.e. if Pager.journalOff==0).
                   38068: **
                   38069: ** If doTruncate is non-zero or the Pager.journalSizeLimit variable is
                   38070: ** set to 0, then truncate the journal file to zero bytes in size. Otherwise,
                   38071: ** zero the 28-byte header at the start of the journal file. In either case, 
                   38072: ** if the pager is not in no-sync mode, sync the journal file immediately 
                   38073: ** after writing or truncating it.
                   38074: **
                   38075: ** If Pager.journalSizeLimit is set to a positive, non-zero value, and
                   38076: ** following the truncation or zeroing described above the size of the 
                   38077: ** journal file in bytes is larger than this value, then truncate the
                   38078: ** journal file to Pager.journalSizeLimit bytes. The journal file does
                   38079: ** not need to be synced following this operation.
                   38080: **
                   38081: ** If an IO error occurs, abandon processing and return the IO error code.
                   38082: ** Otherwise, return SQLITE_OK.
                   38083: */
                   38084: static int zeroJournalHdr(Pager *pPager, int doTruncate){
                   38085:   int rc = SQLITE_OK;                               /* Return code */
                   38086:   assert( isOpen(pPager->jfd) );
                   38087:   if( pPager->journalOff ){
                   38088:     const i64 iLimit = pPager->journalSizeLimit;    /* Local cache of jsl */
                   38089: 
                   38090:     IOTRACE(("JZEROHDR %p\n", pPager))
                   38091:     if( doTruncate || iLimit==0 ){
                   38092:       rc = sqlite3OsTruncate(pPager->jfd, 0);
                   38093:     }else{
                   38094:       static const char zeroHdr[28] = {0};
                   38095:       rc = sqlite3OsWrite(pPager->jfd, zeroHdr, sizeof(zeroHdr), 0);
                   38096:     }
                   38097:     if( rc==SQLITE_OK && !pPager->noSync ){
                   38098:       rc = sqlite3OsSync(pPager->jfd, SQLITE_SYNC_DATAONLY|pPager->syncFlags);
                   38099:     }
                   38100: 
                   38101:     /* At this point the transaction is committed but the write lock 
                   38102:     ** is still held on the file. If there is a size limit configured for 
                   38103:     ** the persistent journal and the journal file currently consumes more
                   38104:     ** space than that limit allows for, truncate it now. There is no need
                   38105:     ** to sync the file following this operation.
                   38106:     */
                   38107:     if( rc==SQLITE_OK && iLimit>0 ){
                   38108:       i64 sz;
                   38109:       rc = sqlite3OsFileSize(pPager->jfd, &sz);
                   38110:       if( rc==SQLITE_OK && sz>iLimit ){
                   38111:         rc = sqlite3OsTruncate(pPager->jfd, iLimit);
                   38112:       }
                   38113:     }
                   38114:   }
                   38115:   return rc;
                   38116: }
                   38117: 
                   38118: /*
                   38119: ** The journal file must be open when this routine is called. A journal
                   38120: ** header (JOURNAL_HDR_SZ bytes) is written into the journal file at the
                   38121: ** current location.
                   38122: **
                   38123: ** The format for the journal header is as follows:
                   38124: ** - 8 bytes: Magic identifying journal format.
                   38125: ** - 4 bytes: Number of records in journal, or -1 no-sync mode is on.
                   38126: ** - 4 bytes: Random number used for page hash.
                   38127: ** - 4 bytes: Initial database page count.
                   38128: ** - 4 bytes: Sector size used by the process that wrote this journal.
                   38129: ** - 4 bytes: Database page size.
                   38130: ** 
                   38131: ** Followed by (JOURNAL_HDR_SZ - 28) bytes of unused space.
                   38132: */
                   38133: static int writeJournalHdr(Pager *pPager){
                   38134:   int rc = SQLITE_OK;                 /* Return code */
                   38135:   char *zHeader = pPager->pTmpSpace;  /* Temporary space used to build header */
                   38136:   u32 nHeader = (u32)pPager->pageSize;/* Size of buffer pointed to by zHeader */
                   38137:   u32 nWrite;                         /* Bytes of header sector written */
                   38138:   int ii;                             /* Loop counter */
                   38139: 
                   38140:   assert( isOpen(pPager->jfd) );      /* Journal file must be open. */
                   38141: 
                   38142:   if( nHeader>JOURNAL_HDR_SZ(pPager) ){
                   38143:     nHeader = JOURNAL_HDR_SZ(pPager);
                   38144:   }
                   38145: 
                   38146:   /* If there are active savepoints and any of them were created 
                   38147:   ** since the most recent journal header was written, update the 
                   38148:   ** PagerSavepoint.iHdrOffset fields now.
                   38149:   */
                   38150:   for(ii=0; ii<pPager->nSavepoint; ii++){
                   38151:     if( pPager->aSavepoint[ii].iHdrOffset==0 ){
                   38152:       pPager->aSavepoint[ii].iHdrOffset = pPager->journalOff;
                   38153:     }
                   38154:   }
                   38155: 
                   38156:   pPager->journalHdr = pPager->journalOff = journalHdrOffset(pPager);
                   38157: 
                   38158:   /* 
                   38159:   ** Write the nRec Field - the number of page records that follow this
                   38160:   ** journal header. Normally, zero is written to this value at this time.
                   38161:   ** After the records are added to the journal (and the journal synced, 
                   38162:   ** if in full-sync mode), the zero is overwritten with the true number
                   38163:   ** of records (see syncJournal()).
                   38164:   **
                   38165:   ** A faster alternative is to write 0xFFFFFFFF to the nRec field. When
                   38166:   ** reading the journal this value tells SQLite to assume that the
                   38167:   ** rest of the journal file contains valid page records. This assumption
                   38168:   ** is dangerous, as if a failure occurred whilst writing to the journal
                   38169:   ** file it may contain some garbage data. There are two scenarios
                   38170:   ** where this risk can be ignored:
                   38171:   **
                   38172:   **   * When the pager is in no-sync mode. Corruption can follow a
                   38173:   **     power failure in this case anyway.
                   38174:   **
                   38175:   **   * When the SQLITE_IOCAP_SAFE_APPEND flag is set. This guarantees
                   38176:   **     that garbage data is never appended to the journal file.
                   38177:   */
                   38178:   assert( isOpen(pPager->fd) || pPager->noSync );
                   38179:   if( pPager->noSync || (pPager->journalMode==PAGER_JOURNALMODE_MEMORY)
                   38180:    || (sqlite3OsDeviceCharacteristics(pPager->fd)&SQLITE_IOCAP_SAFE_APPEND) 
                   38181:   ){
                   38182:     memcpy(zHeader, aJournalMagic, sizeof(aJournalMagic));
                   38183:     put32bits(&zHeader[sizeof(aJournalMagic)], 0xffffffff);
                   38184:   }else{
                   38185:     memset(zHeader, 0, sizeof(aJournalMagic)+4);
                   38186:   }
                   38187: 
                   38188:   /* The random check-hash initialiser */ 
                   38189:   sqlite3_randomness(sizeof(pPager->cksumInit), &pPager->cksumInit);
                   38190:   put32bits(&zHeader[sizeof(aJournalMagic)+4], pPager->cksumInit);
                   38191:   /* The initial database size */
                   38192:   put32bits(&zHeader[sizeof(aJournalMagic)+8], pPager->dbOrigSize);
                   38193:   /* The assumed sector size for this process */
                   38194:   put32bits(&zHeader[sizeof(aJournalMagic)+12], pPager->sectorSize);
                   38195: 
                   38196:   /* The page size */
                   38197:   put32bits(&zHeader[sizeof(aJournalMagic)+16], pPager->pageSize);
                   38198: 
                   38199:   /* Initializing the tail of the buffer is not necessary.  Everything
                   38200:   ** works find if the following memset() is omitted.  But initializing
                   38201:   ** the memory prevents valgrind from complaining, so we are willing to
                   38202:   ** take the performance hit.
                   38203:   */
                   38204:   memset(&zHeader[sizeof(aJournalMagic)+20], 0,
                   38205:          nHeader-(sizeof(aJournalMagic)+20));
                   38206: 
                   38207:   /* In theory, it is only necessary to write the 28 bytes that the 
                   38208:   ** journal header consumes to the journal file here. Then increment the 
                   38209:   ** Pager.journalOff variable by JOURNAL_HDR_SZ so that the next 
                   38210:   ** record is written to the following sector (leaving a gap in the file
                   38211:   ** that will be implicitly filled in by the OS).
                   38212:   **
                   38213:   ** However it has been discovered that on some systems this pattern can 
                   38214:   ** be significantly slower than contiguously writing data to the file,
                   38215:   ** even if that means explicitly writing data to the block of 
                   38216:   ** (JOURNAL_HDR_SZ - 28) bytes that will not be used. So that is what
                   38217:   ** is done. 
                   38218:   **
                   38219:   ** The loop is required here in case the sector-size is larger than the 
                   38220:   ** database page size. Since the zHeader buffer is only Pager.pageSize
                   38221:   ** bytes in size, more than one call to sqlite3OsWrite() may be required
                   38222:   ** to populate the entire journal header sector.
                   38223:   */ 
                   38224:   for(nWrite=0; rc==SQLITE_OK&&nWrite<JOURNAL_HDR_SZ(pPager); nWrite+=nHeader){
                   38225:     IOTRACE(("JHDR %p %lld %d\n", pPager, pPager->journalHdr, nHeader))
                   38226:     rc = sqlite3OsWrite(pPager->jfd, zHeader, nHeader, pPager->journalOff);
                   38227:     assert( pPager->journalHdr <= pPager->journalOff );
                   38228:     pPager->journalOff += nHeader;
                   38229:   }
                   38230: 
                   38231:   return rc;
                   38232: }
                   38233: 
                   38234: /*
                   38235: ** The journal file must be open when this is called. A journal header file
                   38236: ** (JOURNAL_HDR_SZ bytes) is read from the current location in the journal
                   38237: ** file. The current location in the journal file is given by
                   38238: ** pPager->journalOff. See comments above function writeJournalHdr() for
                   38239: ** a description of the journal header format.
                   38240: **
                   38241: ** If the header is read successfully, *pNRec is set to the number of
                   38242: ** page records following this header and *pDbSize is set to the size of the
                   38243: ** database before the transaction began, in pages. Also, pPager->cksumInit
                   38244: ** is set to the value read from the journal header. SQLITE_OK is returned
                   38245: ** in this case.
                   38246: **
                   38247: ** If the journal header file appears to be corrupted, SQLITE_DONE is
                   38248: ** returned and *pNRec and *PDbSize are undefined.  If JOURNAL_HDR_SZ bytes
                   38249: ** cannot be read from the journal file an error code is returned.
                   38250: */
                   38251: static int readJournalHdr(
                   38252:   Pager *pPager,               /* Pager object */
                   38253:   int isHot,
                   38254:   i64 journalSize,             /* Size of the open journal file in bytes */
                   38255:   u32 *pNRec,                  /* OUT: Value read from the nRec field */
                   38256:   u32 *pDbSize                 /* OUT: Value of original database size field */
                   38257: ){
                   38258:   int rc;                      /* Return code */
                   38259:   unsigned char aMagic[8];     /* A buffer to hold the magic header */
                   38260:   i64 iHdrOff;                 /* Offset of journal header being read */
                   38261: 
                   38262:   assert( isOpen(pPager->jfd) );      /* Journal file must be open. */
                   38263: 
                   38264:   /* Advance Pager.journalOff to the start of the next sector. If the
                   38265:   ** journal file is too small for there to be a header stored at this
                   38266:   ** point, return SQLITE_DONE.
                   38267:   */
                   38268:   pPager->journalOff = journalHdrOffset(pPager);
                   38269:   if( pPager->journalOff+JOURNAL_HDR_SZ(pPager) > journalSize ){
                   38270:     return SQLITE_DONE;
                   38271:   }
                   38272:   iHdrOff = pPager->journalOff;
                   38273: 
                   38274:   /* Read in the first 8 bytes of the journal header. If they do not match
                   38275:   ** the  magic string found at the start of each journal header, return
                   38276:   ** SQLITE_DONE. If an IO error occurs, return an error code. Otherwise,
                   38277:   ** proceed.
                   38278:   */
                   38279:   if( isHot || iHdrOff!=pPager->journalHdr ){
                   38280:     rc = sqlite3OsRead(pPager->jfd, aMagic, sizeof(aMagic), iHdrOff);
                   38281:     if( rc ){
                   38282:       return rc;
                   38283:     }
                   38284:     if( memcmp(aMagic, aJournalMagic, sizeof(aMagic))!=0 ){
                   38285:       return SQLITE_DONE;
                   38286:     }
                   38287:   }
                   38288: 
                   38289:   /* Read the first three 32-bit fields of the journal header: The nRec
                   38290:   ** field, the checksum-initializer and the database size at the start
                   38291:   ** of the transaction. Return an error code if anything goes wrong.
                   38292:   */
                   38293:   if( SQLITE_OK!=(rc = read32bits(pPager->jfd, iHdrOff+8, pNRec))
                   38294:    || SQLITE_OK!=(rc = read32bits(pPager->jfd, iHdrOff+12, &pPager->cksumInit))
                   38295:    || SQLITE_OK!=(rc = read32bits(pPager->jfd, iHdrOff+16, pDbSize))
                   38296:   ){
                   38297:     return rc;
                   38298:   }
                   38299: 
                   38300:   if( pPager->journalOff==0 ){
                   38301:     u32 iPageSize;               /* Page-size field of journal header */
                   38302:     u32 iSectorSize;             /* Sector-size field of journal header */
                   38303: 
                   38304:     /* Read the page-size and sector-size journal header fields. */
                   38305:     if( SQLITE_OK!=(rc = read32bits(pPager->jfd, iHdrOff+20, &iSectorSize))
                   38306:      || SQLITE_OK!=(rc = read32bits(pPager->jfd, iHdrOff+24, &iPageSize))
                   38307:     ){
                   38308:       return rc;
                   38309:     }
                   38310: 
                   38311:     /* Versions of SQLite prior to 3.5.8 set the page-size field of the
                   38312:     ** journal header to zero. In this case, assume that the Pager.pageSize
                   38313:     ** variable is already set to the correct page size.
                   38314:     */
                   38315:     if( iPageSize==0 ){
                   38316:       iPageSize = pPager->pageSize;
                   38317:     }
                   38318: 
                   38319:     /* Check that the values read from the page-size and sector-size fields
                   38320:     ** are within range. To be 'in range', both values need to be a power
                   38321:     ** of two greater than or equal to 512 or 32, and not greater than their 
                   38322:     ** respective compile time maximum limits.
                   38323:     */
                   38324:     if( iPageSize<512                  || iSectorSize<32
                   38325:      || iPageSize>SQLITE_MAX_PAGE_SIZE || iSectorSize>MAX_SECTOR_SIZE
                   38326:      || ((iPageSize-1)&iPageSize)!=0   || ((iSectorSize-1)&iSectorSize)!=0 
                   38327:     ){
                   38328:       /* If the either the page-size or sector-size in the journal-header is 
                   38329:       ** invalid, then the process that wrote the journal-header must have 
                   38330:       ** crashed before the header was synced. In this case stop reading 
                   38331:       ** the journal file here.
                   38332:       */
                   38333:       return SQLITE_DONE;
                   38334:     }
                   38335: 
                   38336:     /* Update the page-size to match the value read from the journal. 
                   38337:     ** Use a testcase() macro to make sure that malloc failure within 
                   38338:     ** PagerSetPagesize() is tested.
                   38339:     */
                   38340:     rc = sqlite3PagerSetPagesize(pPager, &iPageSize, -1);
                   38341:     testcase( rc!=SQLITE_OK );
                   38342: 
                   38343:     /* Update the assumed sector-size to match the value used by 
                   38344:     ** the process that created this journal. If this journal was
                   38345:     ** created by a process other than this one, then this routine
                   38346:     ** is being called from within pager_playback(). The local value
                   38347:     ** of Pager.sectorSize is restored at the end of that routine.
                   38348:     */
                   38349:     pPager->sectorSize = iSectorSize;
                   38350:   }
                   38351: 
                   38352:   pPager->journalOff += JOURNAL_HDR_SZ(pPager);
                   38353:   return rc;
                   38354: }
                   38355: 
                   38356: 
                   38357: /*
                   38358: ** Write the supplied master journal name into the journal file for pager
                   38359: ** pPager at the current location. The master journal name must be the last
                   38360: ** thing written to a journal file. If the pager is in full-sync mode, the
                   38361: ** journal file descriptor is advanced to the next sector boundary before
                   38362: ** anything is written. The format is:
                   38363: **
                   38364: **   + 4 bytes: PAGER_MJ_PGNO.
                   38365: **   + N bytes: Master journal filename in utf-8.
                   38366: **   + 4 bytes: N (length of master journal name in bytes, no nul-terminator).
                   38367: **   + 4 bytes: Master journal name checksum.
                   38368: **   + 8 bytes: aJournalMagic[].
                   38369: **
                   38370: ** The master journal page checksum is the sum of the bytes in the master
                   38371: ** journal name, where each byte is interpreted as a signed 8-bit integer.
                   38372: **
                   38373: ** If zMaster is a NULL pointer (occurs for a single database transaction), 
                   38374: ** this call is a no-op.
                   38375: */
                   38376: static int writeMasterJournal(Pager *pPager, const char *zMaster){
                   38377:   int rc;                          /* Return code */
                   38378:   int nMaster;                     /* Length of string zMaster */
                   38379:   i64 iHdrOff;                     /* Offset of header in journal file */
                   38380:   i64 jrnlSize;                    /* Size of journal file on disk */
                   38381:   u32 cksum = 0;                   /* Checksum of string zMaster */
                   38382: 
                   38383:   assert( pPager->setMaster==0 );
                   38384:   assert( !pagerUseWal(pPager) );
                   38385: 
                   38386:   if( !zMaster 
                   38387:    || pPager->journalMode==PAGER_JOURNALMODE_MEMORY 
                   38388:    || pPager->journalMode==PAGER_JOURNALMODE_OFF 
                   38389:   ){
                   38390:     return SQLITE_OK;
                   38391:   }
                   38392:   pPager->setMaster = 1;
                   38393:   assert( isOpen(pPager->jfd) );
                   38394:   assert( pPager->journalHdr <= pPager->journalOff );
                   38395: 
                   38396:   /* Calculate the length in bytes and the checksum of zMaster */
                   38397:   for(nMaster=0; zMaster[nMaster]; nMaster++){
                   38398:     cksum += zMaster[nMaster];
                   38399:   }
                   38400: 
                   38401:   /* If in full-sync mode, advance to the next disk sector before writing
                   38402:   ** the master journal name. This is in case the previous page written to
                   38403:   ** the journal has already been synced.
                   38404:   */
                   38405:   if( pPager->fullSync ){
                   38406:     pPager->journalOff = journalHdrOffset(pPager);
                   38407:   }
                   38408:   iHdrOff = pPager->journalOff;
                   38409: 
                   38410:   /* Write the master journal data to the end of the journal file. If
                   38411:   ** an error occurs, return the error code to the caller.
                   38412:   */
                   38413:   if( (0 != (rc = write32bits(pPager->jfd, iHdrOff, PAGER_MJ_PGNO(pPager))))
                   38414:    || (0 != (rc = sqlite3OsWrite(pPager->jfd, zMaster, nMaster, iHdrOff+4)))
                   38415:    || (0 != (rc = write32bits(pPager->jfd, iHdrOff+4+nMaster, nMaster)))
                   38416:    || (0 != (rc = write32bits(pPager->jfd, iHdrOff+4+nMaster+4, cksum)))
                   38417:    || (0 != (rc = sqlite3OsWrite(pPager->jfd, aJournalMagic, 8, iHdrOff+4+nMaster+8)))
                   38418:   ){
                   38419:     return rc;
                   38420:   }
                   38421:   pPager->journalOff += (nMaster+20);
                   38422: 
                   38423:   /* If the pager is in peristent-journal mode, then the physical 
                   38424:   ** journal-file may extend past the end of the master-journal name
                   38425:   ** and 8 bytes of magic data just written to the file. This is 
                   38426:   ** dangerous because the code to rollback a hot-journal file
                   38427:   ** will not be able to find the master-journal name to determine 
                   38428:   ** whether or not the journal is hot. 
                   38429:   **
                   38430:   ** Easiest thing to do in this scenario is to truncate the journal 
                   38431:   ** file to the required size.
                   38432:   */ 
                   38433:   if( SQLITE_OK==(rc = sqlite3OsFileSize(pPager->jfd, &jrnlSize))
                   38434:    && jrnlSize>pPager->journalOff
                   38435:   ){
                   38436:     rc = sqlite3OsTruncate(pPager->jfd, pPager->journalOff);
                   38437:   }
                   38438:   return rc;
                   38439: }
                   38440: 
                   38441: /*
                   38442: ** Find a page in the hash table given its page number. Return
                   38443: ** a pointer to the page or NULL if the requested page is not 
                   38444: ** already in memory.
                   38445: */
                   38446: static PgHdr *pager_lookup(Pager *pPager, Pgno pgno){
                   38447:   PgHdr *p;                         /* Return value */
                   38448: 
                   38449:   /* It is not possible for a call to PcacheFetch() with createFlag==0 to
                   38450:   ** fail, since no attempt to allocate dynamic memory will be made.
                   38451:   */
                   38452:   (void)sqlite3PcacheFetch(pPager->pPCache, pgno, 0, &p);
                   38453:   return p;
                   38454: }
                   38455: 
                   38456: /*
                   38457: ** Discard the entire contents of the in-memory page-cache.
                   38458: */
                   38459: static void pager_reset(Pager *pPager){
                   38460:   sqlite3BackupRestart(pPager->pBackup);
                   38461:   sqlite3PcacheClear(pPager->pPCache);
                   38462: }
                   38463: 
                   38464: /*
                   38465: ** Free all structures in the Pager.aSavepoint[] array and set both
                   38466: ** Pager.aSavepoint and Pager.nSavepoint to zero. Close the sub-journal
                   38467: ** if it is open and the pager is not in exclusive mode.
                   38468: */
                   38469: static void releaseAllSavepoints(Pager *pPager){
                   38470:   int ii;               /* Iterator for looping through Pager.aSavepoint */
                   38471:   for(ii=0; ii<pPager->nSavepoint; ii++){
                   38472:     sqlite3BitvecDestroy(pPager->aSavepoint[ii].pInSavepoint);
                   38473:   }
                   38474:   if( !pPager->exclusiveMode || sqlite3IsMemJournal(pPager->sjfd) ){
                   38475:     sqlite3OsClose(pPager->sjfd);
                   38476:   }
                   38477:   sqlite3_free(pPager->aSavepoint);
                   38478:   pPager->aSavepoint = 0;
                   38479:   pPager->nSavepoint = 0;
                   38480:   pPager->nSubRec = 0;
                   38481: }
                   38482: 
                   38483: /*
                   38484: ** Set the bit number pgno in the PagerSavepoint.pInSavepoint 
                   38485: ** bitvecs of all open savepoints. Return SQLITE_OK if successful
                   38486: ** or SQLITE_NOMEM if a malloc failure occurs.
                   38487: */
                   38488: static int addToSavepointBitvecs(Pager *pPager, Pgno pgno){
                   38489:   int ii;                   /* Loop counter */
                   38490:   int rc = SQLITE_OK;       /* Result code */
                   38491: 
                   38492:   for(ii=0; ii<pPager->nSavepoint; ii++){
                   38493:     PagerSavepoint *p = &pPager->aSavepoint[ii];
                   38494:     if( pgno<=p->nOrig ){
                   38495:       rc |= sqlite3BitvecSet(p->pInSavepoint, pgno);
                   38496:       testcase( rc==SQLITE_NOMEM );
                   38497:       assert( rc==SQLITE_OK || rc==SQLITE_NOMEM );
                   38498:     }
                   38499:   }
                   38500:   return rc;
                   38501: }
                   38502: 
                   38503: /*
                   38504: ** This function is a no-op if the pager is in exclusive mode and not
                   38505: ** in the ERROR state. Otherwise, it switches the pager to PAGER_OPEN
                   38506: ** state.
                   38507: **
                   38508: ** If the pager is not in exclusive-access mode, the database file is
                   38509: ** completely unlocked. If the file is unlocked and the file-system does
                   38510: ** not exhibit the UNDELETABLE_WHEN_OPEN property, the journal file is
                   38511: ** closed (if it is open).
                   38512: **
                   38513: ** If the pager is in ERROR state when this function is called, the 
                   38514: ** contents of the pager cache are discarded before switching back to 
                   38515: ** the OPEN state. Regardless of whether the pager is in exclusive-mode
                   38516: ** or not, any journal file left in the file-system will be treated
                   38517: ** as a hot-journal and rolled back the next time a read-transaction
                   38518: ** is opened (by this or by any other connection).
                   38519: */
                   38520: static void pager_unlock(Pager *pPager){
                   38521: 
                   38522:   assert( pPager->eState==PAGER_READER 
                   38523:        || pPager->eState==PAGER_OPEN 
                   38524:        || pPager->eState==PAGER_ERROR 
                   38525:   );
                   38526: 
                   38527:   sqlite3BitvecDestroy(pPager->pInJournal);
                   38528:   pPager->pInJournal = 0;
                   38529:   releaseAllSavepoints(pPager);
                   38530: 
                   38531:   if( pagerUseWal(pPager) ){
                   38532:     assert( !isOpen(pPager->jfd) );
                   38533:     sqlite3WalEndReadTransaction(pPager->pWal);
                   38534:     pPager->eState = PAGER_OPEN;
                   38535:   }else if( !pPager->exclusiveMode ){
                   38536:     int rc;                       /* Error code returned by pagerUnlockDb() */
                   38537:     int iDc = isOpen(pPager->fd)?sqlite3OsDeviceCharacteristics(pPager->fd):0;
                   38538: 
                   38539:     /* If the operating system support deletion of open files, then
                   38540:     ** close the journal file when dropping the database lock.  Otherwise
                   38541:     ** another connection with journal_mode=delete might delete the file
                   38542:     ** out from under us.
                   38543:     */
                   38544:     assert( (PAGER_JOURNALMODE_MEMORY   & 5)!=1 );
                   38545:     assert( (PAGER_JOURNALMODE_OFF      & 5)!=1 );
                   38546:     assert( (PAGER_JOURNALMODE_WAL      & 5)!=1 );
                   38547:     assert( (PAGER_JOURNALMODE_DELETE   & 5)!=1 );
                   38548:     assert( (PAGER_JOURNALMODE_TRUNCATE & 5)==1 );
                   38549:     assert( (PAGER_JOURNALMODE_PERSIST  & 5)==1 );
                   38550:     if( 0==(iDc & SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN)
                   38551:      || 1!=(pPager->journalMode & 5)
                   38552:     ){
                   38553:       sqlite3OsClose(pPager->jfd);
                   38554:     }
                   38555: 
                   38556:     /* If the pager is in the ERROR state and the call to unlock the database
                   38557:     ** file fails, set the current lock to UNKNOWN_LOCK. See the comment
                   38558:     ** above the #define for UNKNOWN_LOCK for an explanation of why this
                   38559:     ** is necessary.
                   38560:     */
                   38561:     rc = pagerUnlockDb(pPager, NO_LOCK);
                   38562:     if( rc!=SQLITE_OK && pPager->eState==PAGER_ERROR ){
                   38563:       pPager->eLock = UNKNOWN_LOCK;
                   38564:     }
                   38565: 
                   38566:     /* The pager state may be changed from PAGER_ERROR to PAGER_OPEN here
                   38567:     ** without clearing the error code. This is intentional - the error
                   38568:     ** code is cleared and the cache reset in the block below.
                   38569:     */
                   38570:     assert( pPager->errCode || pPager->eState!=PAGER_ERROR );
                   38571:     pPager->changeCountDone = 0;
                   38572:     pPager->eState = PAGER_OPEN;
                   38573:   }
                   38574: 
                   38575:   /* If Pager.errCode is set, the contents of the pager cache cannot be
                   38576:   ** trusted. Now that there are no outstanding references to the pager,
                   38577:   ** it can safely move back to PAGER_OPEN state. This happens in both
                   38578:   ** normal and exclusive-locking mode.
                   38579:   */
                   38580:   if( pPager->errCode ){
                   38581:     assert( !MEMDB );
                   38582:     pager_reset(pPager);
                   38583:     pPager->changeCountDone = pPager->tempFile;
                   38584:     pPager->eState = PAGER_OPEN;
                   38585:     pPager->errCode = SQLITE_OK;
                   38586:   }
                   38587: 
                   38588:   pPager->journalOff = 0;
                   38589:   pPager->journalHdr = 0;
                   38590:   pPager->setMaster = 0;
                   38591: }
                   38592: 
                   38593: /*
                   38594: ** This function is called whenever an IOERR or FULL error that requires
                   38595: ** the pager to transition into the ERROR state may ahve occurred.
                   38596: ** The first argument is a pointer to the pager structure, the second 
                   38597: ** the error-code about to be returned by a pager API function. The 
                   38598: ** value returned is a copy of the second argument to this function. 
                   38599: **
                   38600: ** If the second argument is SQLITE_FULL, SQLITE_IOERR or one of the
                   38601: ** IOERR sub-codes, the pager enters the ERROR state and the error code
                   38602: ** is stored in Pager.errCode. While the pager remains in the ERROR state,
                   38603: ** all major API calls on the Pager will immediately return Pager.errCode.
                   38604: **
                   38605: ** The ERROR state indicates that the contents of the pager-cache 
                   38606: ** cannot be trusted. This state can be cleared by completely discarding 
                   38607: ** the contents of the pager-cache. If a transaction was active when
                   38608: ** the persistent error occurred, then the rollback journal may need
                   38609: ** to be replayed to restore the contents of the database file (as if
                   38610: ** it were a hot-journal).
                   38611: */
                   38612: static int pager_error(Pager *pPager, int rc){
                   38613:   int rc2 = rc & 0xff;
                   38614:   assert( rc==SQLITE_OK || !MEMDB );
                   38615:   assert(
                   38616:        pPager->errCode==SQLITE_FULL ||
                   38617:        pPager->errCode==SQLITE_OK ||
                   38618:        (pPager->errCode & 0xff)==SQLITE_IOERR
                   38619:   );
                   38620:   if( rc2==SQLITE_FULL || rc2==SQLITE_IOERR ){
                   38621:     pPager->errCode = rc;
                   38622:     pPager->eState = PAGER_ERROR;
                   38623:   }
                   38624:   return rc;
                   38625: }
                   38626: 
                   38627: /*
                   38628: ** This routine ends a transaction. A transaction is usually ended by 
                   38629: ** either a COMMIT or a ROLLBACK operation. This routine may be called 
                   38630: ** after rollback of a hot-journal, or if an error occurs while opening
                   38631: ** the journal file or writing the very first journal-header of a
                   38632: ** database transaction.
                   38633: ** 
                   38634: ** This routine is never called in PAGER_ERROR state. If it is called
                   38635: ** in PAGER_NONE or PAGER_SHARED state and the lock held is less
                   38636: ** exclusive than a RESERVED lock, it is a no-op.
                   38637: **
                   38638: ** Otherwise, any active savepoints are released.
                   38639: **
                   38640: ** If the journal file is open, then it is "finalized". Once a journal 
                   38641: ** file has been finalized it is not possible to use it to roll back a 
                   38642: ** transaction. Nor will it be considered to be a hot-journal by this
                   38643: ** or any other database connection. Exactly how a journal is finalized
                   38644: ** depends on whether or not the pager is running in exclusive mode and
                   38645: ** the current journal-mode (Pager.journalMode value), as follows:
                   38646: **
                   38647: **   journalMode==MEMORY
                   38648: **     Journal file descriptor is simply closed. This destroys an 
                   38649: **     in-memory journal.
                   38650: **
                   38651: **   journalMode==TRUNCATE
                   38652: **     Journal file is truncated to zero bytes in size.
                   38653: **
                   38654: **   journalMode==PERSIST
                   38655: **     The first 28 bytes of the journal file are zeroed. This invalidates
                   38656: **     the first journal header in the file, and hence the entire journal
                   38657: **     file. An invalid journal file cannot be rolled back.
                   38658: **
                   38659: **   journalMode==DELETE
                   38660: **     The journal file is closed and deleted using sqlite3OsDelete().
                   38661: **
                   38662: **     If the pager is running in exclusive mode, this method of finalizing
                   38663: **     the journal file is never used. Instead, if the journalMode is
                   38664: **     DELETE and the pager is in exclusive mode, the method described under
                   38665: **     journalMode==PERSIST is used instead.
                   38666: **
                   38667: ** After the journal is finalized, the pager moves to PAGER_READER state.
                   38668: ** If running in non-exclusive rollback mode, the lock on the file is 
                   38669: ** downgraded to a SHARED_LOCK.
                   38670: **
                   38671: ** SQLITE_OK is returned if no error occurs. If an error occurs during
                   38672: ** any of the IO operations to finalize the journal file or unlock the
                   38673: ** database then the IO error code is returned to the user. If the 
                   38674: ** operation to finalize the journal file fails, then the code still
                   38675: ** tries to unlock the database file if not in exclusive mode. If the
                   38676: ** unlock operation fails as well, then the first error code related
                   38677: ** to the first error encountered (the journal finalization one) is
                   38678: ** returned.
                   38679: */
                   38680: static int pager_end_transaction(Pager *pPager, int hasMaster){
                   38681:   int rc = SQLITE_OK;      /* Error code from journal finalization operation */
                   38682:   int rc2 = SQLITE_OK;     /* Error code from db file unlock operation */
                   38683: 
                   38684:   /* Do nothing if the pager does not have an open write transaction
                   38685:   ** or at least a RESERVED lock. This function may be called when there
                   38686:   ** is no write-transaction active but a RESERVED or greater lock is
                   38687:   ** held under two circumstances:
                   38688:   **
                   38689:   **   1. After a successful hot-journal rollback, it is called with
                   38690:   **      eState==PAGER_NONE and eLock==EXCLUSIVE_LOCK.
                   38691:   **
                   38692:   **   2. If a connection with locking_mode=exclusive holding an EXCLUSIVE 
                   38693:   **      lock switches back to locking_mode=normal and then executes a
                   38694:   **      read-transaction, this function is called with eState==PAGER_READER 
                   38695:   **      and eLock==EXCLUSIVE_LOCK when the read-transaction is closed.
                   38696:   */
                   38697:   assert( assert_pager_state(pPager) );
                   38698:   assert( pPager->eState!=PAGER_ERROR );
                   38699:   if( pPager->eState<PAGER_WRITER_LOCKED && pPager->eLock<RESERVED_LOCK ){
                   38700:     return SQLITE_OK;
                   38701:   }
                   38702: 
                   38703:   releaseAllSavepoints(pPager);
                   38704:   assert( isOpen(pPager->jfd) || pPager->pInJournal==0 );
                   38705:   if( isOpen(pPager->jfd) ){
                   38706:     assert( !pagerUseWal(pPager) );
                   38707: 
                   38708:     /* Finalize the journal file. */
                   38709:     if( sqlite3IsMemJournal(pPager->jfd) ){
                   38710:       assert( pPager->journalMode==PAGER_JOURNALMODE_MEMORY );
                   38711:       sqlite3OsClose(pPager->jfd);
                   38712:     }else if( pPager->journalMode==PAGER_JOURNALMODE_TRUNCATE ){
                   38713:       if( pPager->journalOff==0 ){
                   38714:         rc = SQLITE_OK;
                   38715:       }else{
                   38716:         rc = sqlite3OsTruncate(pPager->jfd, 0);
                   38717:       }
                   38718:       pPager->journalOff = 0;
                   38719:     }else if( pPager->journalMode==PAGER_JOURNALMODE_PERSIST
                   38720:       || (pPager->exclusiveMode && pPager->journalMode!=PAGER_JOURNALMODE_WAL)
                   38721:     ){
                   38722:       rc = zeroJournalHdr(pPager, hasMaster);
                   38723:       pPager->journalOff = 0;
                   38724:     }else{
                   38725:       /* This branch may be executed with Pager.journalMode==MEMORY if
                   38726:       ** a hot-journal was just rolled back. In this case the journal
                   38727:       ** file should be closed and deleted. If this connection writes to
                   38728:       ** the database file, it will do so using an in-memory journal. 
                   38729:       */
                   38730:       assert( pPager->journalMode==PAGER_JOURNALMODE_DELETE 
                   38731:            || pPager->journalMode==PAGER_JOURNALMODE_MEMORY 
                   38732:            || pPager->journalMode==PAGER_JOURNALMODE_WAL 
                   38733:       );
                   38734:       sqlite3OsClose(pPager->jfd);
                   38735:       if( !pPager->tempFile ){
                   38736:         rc = sqlite3OsDelete(pPager->pVfs, pPager->zJournal, 0);
                   38737:       }
                   38738:     }
                   38739:   }
                   38740: 
                   38741: #ifdef SQLITE_CHECK_PAGES
                   38742:   sqlite3PcacheIterateDirty(pPager->pPCache, pager_set_pagehash);
                   38743:   if( pPager->dbSize==0 && sqlite3PcacheRefCount(pPager->pPCache)>0 ){
                   38744:     PgHdr *p = pager_lookup(pPager, 1);
                   38745:     if( p ){
                   38746:       p->pageHash = 0;
                   38747:       sqlite3PagerUnref(p);
                   38748:     }
                   38749:   }
                   38750: #endif
                   38751: 
                   38752:   sqlite3BitvecDestroy(pPager->pInJournal);
                   38753:   pPager->pInJournal = 0;
                   38754:   pPager->nRec = 0;
                   38755:   sqlite3PcacheCleanAll(pPager->pPCache);
                   38756:   sqlite3PcacheTruncate(pPager->pPCache, pPager->dbSize);
                   38757: 
                   38758:   if( pagerUseWal(pPager) ){
                   38759:     /* Drop the WAL write-lock, if any. Also, if the connection was in 
                   38760:     ** locking_mode=exclusive mode but is no longer, drop the EXCLUSIVE 
                   38761:     ** lock held on the database file.
                   38762:     */
                   38763:     rc2 = sqlite3WalEndWriteTransaction(pPager->pWal);
                   38764:     assert( rc2==SQLITE_OK );
                   38765:   }
                   38766:   if( !pPager->exclusiveMode 
                   38767:    && (!pagerUseWal(pPager) || sqlite3WalExclusiveMode(pPager->pWal, 0))
                   38768:   ){
                   38769:     rc2 = pagerUnlockDb(pPager, SHARED_LOCK);
                   38770:     pPager->changeCountDone = 0;
                   38771:   }
                   38772:   pPager->eState = PAGER_READER;
                   38773:   pPager->setMaster = 0;
                   38774: 
                   38775:   return (rc==SQLITE_OK?rc2:rc);
                   38776: }
                   38777: 
                   38778: /*
                   38779: ** Execute a rollback if a transaction is active and unlock the 
                   38780: ** database file. 
                   38781: **
                   38782: ** If the pager has already entered the ERROR state, do not attempt 
                   38783: ** the rollback at this time. Instead, pager_unlock() is called. The
                   38784: ** call to pager_unlock() will discard all in-memory pages, unlock
                   38785: ** the database file and move the pager back to OPEN state. If this 
                   38786: ** means that there is a hot-journal left in the file-system, the next 
                   38787: ** connection to obtain a shared lock on the pager (which may be this one) 
                   38788: ** will roll it back.
                   38789: **
                   38790: ** If the pager has not already entered the ERROR state, but an IO or
                   38791: ** malloc error occurs during a rollback, then this will itself cause 
                   38792: ** the pager to enter the ERROR state. Which will be cleared by the
                   38793: ** call to pager_unlock(), as described above.
                   38794: */
                   38795: static void pagerUnlockAndRollback(Pager *pPager){
                   38796:   if( pPager->eState!=PAGER_ERROR && pPager->eState!=PAGER_OPEN ){
                   38797:     assert( assert_pager_state(pPager) );
                   38798:     if( pPager->eState>=PAGER_WRITER_LOCKED ){
                   38799:       sqlite3BeginBenignMalloc();
                   38800:       sqlite3PagerRollback(pPager);
                   38801:       sqlite3EndBenignMalloc();
                   38802:     }else if( !pPager->exclusiveMode ){
                   38803:       assert( pPager->eState==PAGER_READER );
                   38804:       pager_end_transaction(pPager, 0);
                   38805:     }
                   38806:   }
                   38807:   pager_unlock(pPager);
                   38808: }
                   38809: 
                   38810: /*
                   38811: ** Parameter aData must point to a buffer of pPager->pageSize bytes
                   38812: ** of data. Compute and return a checksum based ont the contents of the 
                   38813: ** page of data and the current value of pPager->cksumInit.
                   38814: **
                   38815: ** This is not a real checksum. It is really just the sum of the 
                   38816: ** random initial value (pPager->cksumInit) and every 200th byte
                   38817: ** of the page data, starting with byte offset (pPager->pageSize%200).
                   38818: ** Each byte is interpreted as an 8-bit unsigned integer.
                   38819: **
                   38820: ** Changing the formula used to compute this checksum results in an
                   38821: ** incompatible journal file format.
                   38822: **
                   38823: ** If journal corruption occurs due to a power failure, the most likely 
                   38824: ** scenario is that one end or the other of the record will be changed. 
                   38825: ** It is much less likely that the two ends of the journal record will be
                   38826: ** correct and the middle be corrupt.  Thus, this "checksum" scheme,
                   38827: ** though fast and simple, catches the mostly likely kind of corruption.
                   38828: */
                   38829: static u32 pager_cksum(Pager *pPager, const u8 *aData){
                   38830:   u32 cksum = pPager->cksumInit;         /* Checksum value to return */
                   38831:   int i = pPager->pageSize-200;          /* Loop counter */
                   38832:   while( i>0 ){
                   38833:     cksum += aData[i];
                   38834:     i -= 200;
                   38835:   }
                   38836:   return cksum;
                   38837: }
                   38838: 
                   38839: /*
                   38840: ** Report the current page size and number of reserved bytes back
                   38841: ** to the codec.
                   38842: */
                   38843: #ifdef SQLITE_HAS_CODEC
                   38844: static void pagerReportSize(Pager *pPager){
                   38845:   if( pPager->xCodecSizeChng ){
                   38846:     pPager->xCodecSizeChng(pPager->pCodec, pPager->pageSize,
                   38847:                            (int)pPager->nReserve);
                   38848:   }
                   38849: }
                   38850: #else
                   38851: # define pagerReportSize(X)     /* No-op if we do not support a codec */
                   38852: #endif
                   38853: 
                   38854: /*
                   38855: ** Read a single page from either the journal file (if isMainJrnl==1) or
                   38856: ** from the sub-journal (if isMainJrnl==0) and playback that page.
                   38857: ** The page begins at offset *pOffset into the file. The *pOffset
                   38858: ** value is increased to the start of the next page in the journal.
                   38859: **
                   38860: ** The main rollback journal uses checksums - the statement journal does 
                   38861: ** not.
                   38862: **
                   38863: ** If the page number of the page record read from the (sub-)journal file
                   38864: ** is greater than the current value of Pager.dbSize, then playback is
                   38865: ** skipped and SQLITE_OK is returned.
                   38866: **
                   38867: ** If pDone is not NULL, then it is a record of pages that have already
                   38868: ** been played back.  If the page at *pOffset has already been played back
                   38869: ** (if the corresponding pDone bit is set) then skip the playback.
                   38870: ** Make sure the pDone bit corresponding to the *pOffset page is set
                   38871: ** prior to returning.
                   38872: **
                   38873: ** If the page record is successfully read from the (sub-)journal file
                   38874: ** and played back, then SQLITE_OK is returned. If an IO error occurs
                   38875: ** while reading the record from the (sub-)journal file or while writing
                   38876: ** to the database file, then the IO error code is returned. If data
                   38877: ** is successfully read from the (sub-)journal file but appears to be
                   38878: ** corrupted, SQLITE_DONE is returned. Data is considered corrupted in
                   38879: ** two circumstances:
                   38880: ** 
                   38881: **   * If the record page-number is illegal (0 or PAGER_MJ_PGNO), or
                   38882: **   * If the record is being rolled back from the main journal file
                   38883: **     and the checksum field does not match the record content.
                   38884: **
                   38885: ** Neither of these two scenarios are possible during a savepoint rollback.
                   38886: **
                   38887: ** If this is a savepoint rollback, then memory may have to be dynamically
                   38888: ** allocated by this function. If this is the case and an allocation fails,
                   38889: ** SQLITE_NOMEM is returned.
                   38890: */
                   38891: static int pager_playback_one_page(
                   38892:   Pager *pPager,                /* The pager being played back */
                   38893:   i64 *pOffset,                 /* Offset of record to playback */
                   38894:   Bitvec *pDone,                /* Bitvec of pages already played back */
                   38895:   int isMainJrnl,               /* 1 -> main journal. 0 -> sub-journal. */
                   38896:   int isSavepnt                 /* True for a savepoint rollback */
                   38897: ){
                   38898:   int rc;
                   38899:   PgHdr *pPg;                   /* An existing page in the cache */
                   38900:   Pgno pgno;                    /* The page number of a page in journal */
                   38901:   u32 cksum;                    /* Checksum used for sanity checking */
                   38902:   char *aData;                  /* Temporary storage for the page */
                   38903:   sqlite3_file *jfd;            /* The file descriptor for the journal file */
                   38904:   int isSynced;                 /* True if journal page is synced */
                   38905: 
                   38906:   assert( (isMainJrnl&~1)==0 );      /* isMainJrnl is 0 or 1 */
                   38907:   assert( (isSavepnt&~1)==0 );       /* isSavepnt is 0 or 1 */
                   38908:   assert( isMainJrnl || pDone );     /* pDone always used on sub-journals */
                   38909:   assert( isSavepnt || pDone==0 );   /* pDone never used on non-savepoint */
                   38910: 
                   38911:   aData = pPager->pTmpSpace;
                   38912:   assert( aData );         /* Temp storage must have already been allocated */
                   38913:   assert( pagerUseWal(pPager)==0 || (!isMainJrnl && isSavepnt) );
                   38914: 
                   38915:   /* Either the state is greater than PAGER_WRITER_CACHEMOD (a transaction 
                   38916:   ** or savepoint rollback done at the request of the caller) or this is
                   38917:   ** a hot-journal rollback. If it is a hot-journal rollback, the pager
                   38918:   ** is in state OPEN and holds an EXCLUSIVE lock. Hot-journal rollback
                   38919:   ** only reads from the main journal, not the sub-journal.
                   38920:   */
                   38921:   assert( pPager->eState>=PAGER_WRITER_CACHEMOD
                   38922:        || (pPager->eState==PAGER_OPEN && pPager->eLock==EXCLUSIVE_LOCK)
                   38923:   );
                   38924:   assert( pPager->eState>=PAGER_WRITER_CACHEMOD || isMainJrnl );
                   38925: 
                   38926:   /* Read the page number and page data from the journal or sub-journal
                   38927:   ** file. Return an error code to the caller if an IO error occurs.
                   38928:   */
                   38929:   jfd = isMainJrnl ? pPager->jfd : pPager->sjfd;
                   38930:   rc = read32bits(jfd, *pOffset, &pgno);
                   38931:   if( rc!=SQLITE_OK ) return rc;
                   38932:   rc = sqlite3OsRead(jfd, (u8*)aData, pPager->pageSize, (*pOffset)+4);
                   38933:   if( rc!=SQLITE_OK ) return rc;
                   38934:   *pOffset += pPager->pageSize + 4 + isMainJrnl*4;
                   38935: 
                   38936:   /* Sanity checking on the page.  This is more important that I originally
                   38937:   ** thought.  If a power failure occurs while the journal is being written,
                   38938:   ** it could cause invalid data to be written into the journal.  We need to
                   38939:   ** detect this invalid data (with high probability) and ignore it.
                   38940:   */
                   38941:   if( pgno==0 || pgno==PAGER_MJ_PGNO(pPager) ){
                   38942:     assert( !isSavepnt );
                   38943:     return SQLITE_DONE;
                   38944:   }
                   38945:   if( pgno>(Pgno)pPager->dbSize || sqlite3BitvecTest(pDone, pgno) ){
                   38946:     return SQLITE_OK;
                   38947:   }
                   38948:   if( isMainJrnl ){
                   38949:     rc = read32bits(jfd, (*pOffset)-4, &cksum);
                   38950:     if( rc ) return rc;
                   38951:     if( !isSavepnt && pager_cksum(pPager, (u8*)aData)!=cksum ){
                   38952:       return SQLITE_DONE;
                   38953:     }
                   38954:   }
                   38955: 
                   38956:   /* If this page has already been played by before during the current
                   38957:   ** rollback, then don't bother to play it back again.
                   38958:   */
                   38959:   if( pDone && (rc = sqlite3BitvecSet(pDone, pgno))!=SQLITE_OK ){
                   38960:     return rc;
                   38961:   }
                   38962: 
                   38963:   /* When playing back page 1, restore the nReserve setting
                   38964:   */
                   38965:   if( pgno==1 && pPager->nReserve!=((u8*)aData)[20] ){
                   38966:     pPager->nReserve = ((u8*)aData)[20];
                   38967:     pagerReportSize(pPager);
                   38968:   }
                   38969: 
                   38970:   /* If the pager is in CACHEMOD state, then there must be a copy of this
                   38971:   ** page in the pager cache. In this case just update the pager cache,
                   38972:   ** not the database file. The page is left marked dirty in this case.
                   38973:   **
                   38974:   ** An exception to the above rule: If the database is in no-sync mode
                   38975:   ** and a page is moved during an incremental vacuum then the page may
                   38976:   ** not be in the pager cache. Later: if a malloc() or IO error occurs
                   38977:   ** during a Movepage() call, then the page may not be in the cache
                   38978:   ** either. So the condition described in the above paragraph is not
                   38979:   ** assert()able.
                   38980:   **
                   38981:   ** If in WRITER_DBMOD, WRITER_FINISHED or OPEN state, then we update the
                   38982:   ** pager cache if it exists and the main file. The page is then marked 
                   38983:   ** not dirty. Since this code is only executed in PAGER_OPEN state for
                   38984:   ** a hot-journal rollback, it is guaranteed that the page-cache is empty
                   38985:   ** if the pager is in OPEN state.
                   38986:   **
                   38987:   ** Ticket #1171:  The statement journal might contain page content that is
                   38988:   ** different from the page content at the start of the transaction.
                   38989:   ** This occurs when a page is changed prior to the start of a statement
                   38990:   ** then changed again within the statement.  When rolling back such a
                   38991:   ** statement we must not write to the original database unless we know
                   38992:   ** for certain that original page contents are synced into the main rollback
                   38993:   ** journal.  Otherwise, a power loss might leave modified data in the
                   38994:   ** database file without an entry in the rollback journal that can
                   38995:   ** restore the database to its original form.  Two conditions must be
                   38996:   ** met before writing to the database files. (1) the database must be
                   38997:   ** locked.  (2) we know that the original page content is fully synced
                   38998:   ** in the main journal either because the page is not in cache or else
                   38999:   ** the page is marked as needSync==0.
                   39000:   **
                   39001:   ** 2008-04-14:  When attempting to vacuum a corrupt database file, it
                   39002:   ** is possible to fail a statement on a database that does not yet exist.
                   39003:   ** Do not attempt to write if database file has never been opened.
                   39004:   */
                   39005:   if( pagerUseWal(pPager) ){
                   39006:     pPg = 0;
                   39007:   }else{
                   39008:     pPg = pager_lookup(pPager, pgno);
                   39009:   }
                   39010:   assert( pPg || !MEMDB );
                   39011:   assert( pPager->eState!=PAGER_OPEN || pPg==0 );
                   39012:   PAGERTRACE(("PLAYBACK %d page %d hash(%08x) %s\n",
                   39013:            PAGERID(pPager), pgno, pager_datahash(pPager->pageSize, (u8*)aData),
                   39014:            (isMainJrnl?"main-journal":"sub-journal")
                   39015:   ));
                   39016:   if( isMainJrnl ){
                   39017:     isSynced = pPager->noSync || (*pOffset <= pPager->journalHdr);
                   39018:   }else{
                   39019:     isSynced = (pPg==0 || 0==(pPg->flags & PGHDR_NEED_SYNC));
                   39020:   }
                   39021:   if( isOpen(pPager->fd)
                   39022:    && (pPager->eState>=PAGER_WRITER_DBMOD || pPager->eState==PAGER_OPEN)
                   39023:    && isSynced
                   39024:   ){
                   39025:     i64 ofst = (pgno-1)*(i64)pPager->pageSize;
                   39026:     testcase( !isSavepnt && pPg!=0 && (pPg->flags&PGHDR_NEED_SYNC)!=0 );
                   39027:     assert( !pagerUseWal(pPager) );
                   39028:     rc = sqlite3OsWrite(pPager->fd, (u8*)aData, pPager->pageSize, ofst);
                   39029:     if( pgno>pPager->dbFileSize ){
                   39030:       pPager->dbFileSize = pgno;
                   39031:     }
                   39032:     if( pPager->pBackup ){
                   39033:       CODEC1(pPager, aData, pgno, 3, rc=SQLITE_NOMEM);
                   39034:       sqlite3BackupUpdate(pPager->pBackup, pgno, (u8*)aData);
                   39035:       CODEC2(pPager, aData, pgno, 7, rc=SQLITE_NOMEM, aData);
                   39036:     }
                   39037:   }else if( !isMainJrnl && pPg==0 ){
                   39038:     /* If this is a rollback of a savepoint and data was not written to
                   39039:     ** the database and the page is not in-memory, there is a potential
                   39040:     ** problem. When the page is next fetched by the b-tree layer, it 
                   39041:     ** will be read from the database file, which may or may not be 
                   39042:     ** current. 
                   39043:     **
                   39044:     ** There are a couple of different ways this can happen. All are quite
                   39045:     ** obscure. When running in synchronous mode, this can only happen 
                   39046:     ** if the page is on the free-list at the start of the transaction, then
                   39047:     ** populated, then moved using sqlite3PagerMovepage().
                   39048:     **
                   39049:     ** The solution is to add an in-memory page to the cache containing
                   39050:     ** the data just read from the sub-journal. Mark the page as dirty 
                   39051:     ** and if the pager requires a journal-sync, then mark the page as 
                   39052:     ** requiring a journal-sync before it is written.
                   39053:     */
                   39054:     assert( isSavepnt );
                   39055:     assert( pPager->doNotSpill==0 );
                   39056:     pPager->doNotSpill++;
                   39057:     rc = sqlite3PagerAcquire(pPager, pgno, &pPg, 1);
                   39058:     assert( pPager->doNotSpill==1 );
                   39059:     pPager->doNotSpill--;
                   39060:     if( rc!=SQLITE_OK ) return rc;
                   39061:     pPg->flags &= ~PGHDR_NEED_READ;
                   39062:     sqlite3PcacheMakeDirty(pPg);
                   39063:   }
                   39064:   if( pPg ){
                   39065:     /* No page should ever be explicitly rolled back that is in use, except
                   39066:     ** for page 1 which is held in use in order to keep the lock on the
                   39067:     ** database active. However such a page may be rolled back as a result
                   39068:     ** of an internal error resulting in an automatic call to
                   39069:     ** sqlite3PagerRollback().
                   39070:     */
                   39071:     void *pData;
                   39072:     pData = pPg->pData;
                   39073:     memcpy(pData, (u8*)aData, pPager->pageSize);
                   39074:     pPager->xReiniter(pPg);
                   39075:     if( isMainJrnl && (!isSavepnt || *pOffset<=pPager->journalHdr) ){
                   39076:       /* If the contents of this page were just restored from the main 
                   39077:       ** journal file, then its content must be as they were when the 
                   39078:       ** transaction was first opened. In this case we can mark the page
                   39079:       ** as clean, since there will be no need to write it out to the
                   39080:       ** database.
                   39081:       **
                   39082:       ** There is one exception to this rule. If the page is being rolled
                   39083:       ** back as part of a savepoint (or statement) rollback from an 
                   39084:       ** unsynced portion of the main journal file, then it is not safe
                   39085:       ** to mark the page as clean. This is because marking the page as
                   39086:       ** clean will clear the PGHDR_NEED_SYNC flag. Since the page is
                   39087:       ** already in the journal file (recorded in Pager.pInJournal) and
                   39088:       ** the PGHDR_NEED_SYNC flag is cleared, if the page is written to
                   39089:       ** again within this transaction, it will be marked as dirty but
                   39090:       ** the PGHDR_NEED_SYNC flag will not be set. It could then potentially
                   39091:       ** be written out into the database file before its journal file
                   39092:       ** segment is synced. If a crash occurs during or following this,
                   39093:       ** database corruption may ensue.
                   39094:       */
                   39095:       assert( !pagerUseWal(pPager) );
                   39096:       sqlite3PcacheMakeClean(pPg);
                   39097:     }
                   39098:     pager_set_pagehash(pPg);
                   39099: 
                   39100:     /* If this was page 1, then restore the value of Pager.dbFileVers.
                   39101:     ** Do this before any decoding. */
                   39102:     if( pgno==1 ){
                   39103:       memcpy(&pPager->dbFileVers, &((u8*)pData)[24],sizeof(pPager->dbFileVers));
                   39104:     }
                   39105: 
                   39106:     /* Decode the page just read from disk */
                   39107:     CODEC1(pPager, pData, pPg->pgno, 3, rc=SQLITE_NOMEM);
                   39108:     sqlite3PcacheRelease(pPg);
                   39109:   }
                   39110:   return rc;
                   39111: }
                   39112: 
                   39113: /*
                   39114: ** Parameter zMaster is the name of a master journal file. A single journal
                   39115: ** file that referred to the master journal file has just been rolled back.
                   39116: ** This routine checks if it is possible to delete the master journal file,
                   39117: ** and does so if it is.
                   39118: **
                   39119: ** Argument zMaster may point to Pager.pTmpSpace. So that buffer is not 
                   39120: ** available for use within this function.
                   39121: **
                   39122: ** When a master journal file is created, it is populated with the names 
                   39123: ** of all of its child journals, one after another, formatted as utf-8 
                   39124: ** encoded text. The end of each child journal file is marked with a 
                   39125: ** nul-terminator byte (0x00). i.e. the entire contents of a master journal
                   39126: ** file for a transaction involving two databases might be:
                   39127: **
                   39128: **   "/home/bill/a.db-journal\x00/home/bill/b.db-journal\x00"
                   39129: **
                   39130: ** A master journal file may only be deleted once all of its child 
                   39131: ** journals have been rolled back.
                   39132: **
                   39133: ** This function reads the contents of the master-journal file into 
                   39134: ** memory and loops through each of the child journal names. For
                   39135: ** each child journal, it checks if:
                   39136: **
                   39137: **   * if the child journal exists, and if so
                   39138: **   * if the child journal contains a reference to master journal 
                   39139: **     file zMaster
                   39140: **
                   39141: ** If a child journal can be found that matches both of the criteria
                   39142: ** above, this function returns without doing anything. Otherwise, if
                   39143: ** no such child journal can be found, file zMaster is deleted from
                   39144: ** the file-system using sqlite3OsDelete().
                   39145: **
                   39146: ** If an IO error within this function, an error code is returned. This
                   39147: ** function allocates memory by calling sqlite3Malloc(). If an allocation
                   39148: ** fails, SQLITE_NOMEM is returned. Otherwise, if no IO or malloc errors 
                   39149: ** occur, SQLITE_OK is returned.
                   39150: **
                   39151: ** TODO: This function allocates a single block of memory to load
                   39152: ** the entire contents of the master journal file. This could be
                   39153: ** a couple of kilobytes or so - potentially larger than the page 
                   39154: ** size.
                   39155: */
                   39156: static int pager_delmaster(Pager *pPager, const char *zMaster){
                   39157:   sqlite3_vfs *pVfs = pPager->pVfs;
                   39158:   int rc;                   /* Return code */
                   39159:   sqlite3_file *pMaster;    /* Malloc'd master-journal file descriptor */
                   39160:   sqlite3_file *pJournal;   /* Malloc'd child-journal file descriptor */
                   39161:   char *zMasterJournal = 0; /* Contents of master journal file */
                   39162:   i64 nMasterJournal;       /* Size of master journal file */
                   39163:   char *zJournal;           /* Pointer to one journal within MJ file */
                   39164:   char *zMasterPtr;         /* Space to hold MJ filename from a journal file */
                   39165:   int nMasterPtr;           /* Amount of space allocated to zMasterPtr[] */
                   39166: 
                   39167:   /* Allocate space for both the pJournal and pMaster file descriptors.
                   39168:   ** If successful, open the master journal file for reading.
                   39169:   */
                   39170:   pMaster = (sqlite3_file *)sqlite3MallocZero(pVfs->szOsFile * 2);
                   39171:   pJournal = (sqlite3_file *)(((u8 *)pMaster) + pVfs->szOsFile);
                   39172:   if( !pMaster ){
                   39173:     rc = SQLITE_NOMEM;
                   39174:   }else{
                   39175:     const int flags = (SQLITE_OPEN_READONLY|SQLITE_OPEN_MASTER_JOURNAL);
                   39176:     rc = sqlite3OsOpen(pVfs, zMaster, pMaster, flags, 0);
                   39177:   }
                   39178:   if( rc!=SQLITE_OK ) goto delmaster_out;
                   39179: 
                   39180:   /* Load the entire master journal file into space obtained from
                   39181:   ** sqlite3_malloc() and pointed to by zMasterJournal.   Also obtain
                   39182:   ** sufficient space (in zMasterPtr) to hold the names of master
                   39183:   ** journal files extracted from regular rollback-journals.
                   39184:   */
                   39185:   rc = sqlite3OsFileSize(pMaster, &nMasterJournal);
                   39186:   if( rc!=SQLITE_OK ) goto delmaster_out;
                   39187:   nMasterPtr = pVfs->mxPathname+1;
                   39188:   zMasterJournal = sqlite3Malloc((int)nMasterJournal + nMasterPtr + 1);
                   39189:   if( !zMasterJournal ){
                   39190:     rc = SQLITE_NOMEM;
                   39191:     goto delmaster_out;
                   39192:   }
                   39193:   zMasterPtr = &zMasterJournal[nMasterJournal+1];
                   39194:   rc = sqlite3OsRead(pMaster, zMasterJournal, (int)nMasterJournal, 0);
                   39195:   if( rc!=SQLITE_OK ) goto delmaster_out;
                   39196:   zMasterJournal[nMasterJournal] = 0;
                   39197: 
                   39198:   zJournal = zMasterJournal;
                   39199:   while( (zJournal-zMasterJournal)<nMasterJournal ){
                   39200:     int exists;
                   39201:     rc = sqlite3OsAccess(pVfs, zJournal, SQLITE_ACCESS_EXISTS, &exists);
                   39202:     if( rc!=SQLITE_OK ){
                   39203:       goto delmaster_out;
                   39204:     }
                   39205:     if( exists ){
                   39206:       /* One of the journals pointed to by the master journal exists.
                   39207:       ** Open it and check if it points at the master journal. If
                   39208:       ** so, return without deleting the master journal file.
                   39209:       */
                   39210:       int c;
                   39211:       int flags = (SQLITE_OPEN_READONLY|SQLITE_OPEN_MAIN_JOURNAL);
                   39212:       rc = sqlite3OsOpen(pVfs, zJournal, pJournal, flags, 0);
                   39213:       if( rc!=SQLITE_OK ){
                   39214:         goto delmaster_out;
                   39215:       }
                   39216: 
                   39217:       rc = readMasterJournal(pJournal, zMasterPtr, nMasterPtr);
                   39218:       sqlite3OsClose(pJournal);
                   39219:       if( rc!=SQLITE_OK ){
                   39220:         goto delmaster_out;
                   39221:       }
                   39222: 
                   39223:       c = zMasterPtr[0]!=0 && strcmp(zMasterPtr, zMaster)==0;
                   39224:       if( c ){
                   39225:         /* We have a match. Do not delete the master journal file. */
                   39226:         goto delmaster_out;
                   39227:       }
                   39228:     }
                   39229:     zJournal += (sqlite3Strlen30(zJournal)+1);
                   39230:   }
                   39231:  
                   39232:   sqlite3OsClose(pMaster);
                   39233:   rc = sqlite3OsDelete(pVfs, zMaster, 0);
                   39234: 
                   39235: delmaster_out:
                   39236:   sqlite3_free(zMasterJournal);
                   39237:   if( pMaster ){
                   39238:     sqlite3OsClose(pMaster);
                   39239:     assert( !isOpen(pJournal) );
                   39240:     sqlite3_free(pMaster);
                   39241:   }
                   39242:   return rc;
                   39243: }
                   39244: 
                   39245: 
                   39246: /*
                   39247: ** This function is used to change the actual size of the database 
                   39248: ** file in the file-system. This only happens when committing a transaction,
                   39249: ** or rolling back a transaction (including rolling back a hot-journal).
                   39250: **
                   39251: ** If the main database file is not open, or the pager is not in either
                   39252: ** DBMOD or OPEN state, this function is a no-op. Otherwise, the size 
                   39253: ** of the file is changed to nPage pages (nPage*pPager->pageSize bytes). 
                   39254: ** If the file on disk is currently larger than nPage pages, then use the VFS
                   39255: ** xTruncate() method to truncate it.
                   39256: **
                   39257: ** Or, it might might be the case that the file on disk is smaller than 
                   39258: ** nPage pages. Some operating system implementations can get confused if 
                   39259: ** you try to truncate a file to some size that is larger than it 
                   39260: ** currently is, so detect this case and write a single zero byte to 
                   39261: ** the end of the new file instead.
                   39262: **
                   39263: ** If successful, return SQLITE_OK. If an IO error occurs while modifying
                   39264: ** the database file, return the error code to the caller.
                   39265: */
                   39266: static int pager_truncate(Pager *pPager, Pgno nPage){
                   39267:   int rc = SQLITE_OK;
                   39268:   assert( pPager->eState!=PAGER_ERROR );
                   39269:   assert( pPager->eState!=PAGER_READER );
                   39270:   
                   39271:   if( isOpen(pPager->fd) 
                   39272:    && (pPager->eState>=PAGER_WRITER_DBMOD || pPager->eState==PAGER_OPEN) 
                   39273:   ){
                   39274:     i64 currentSize, newSize;
                   39275:     int szPage = pPager->pageSize;
                   39276:     assert( pPager->eLock==EXCLUSIVE_LOCK );
                   39277:     /* TODO: Is it safe to use Pager.dbFileSize here? */
                   39278:     rc = sqlite3OsFileSize(pPager->fd, &currentSize);
                   39279:     newSize = szPage*(i64)nPage;
                   39280:     if( rc==SQLITE_OK && currentSize!=newSize ){
                   39281:       if( currentSize>newSize ){
                   39282:         rc = sqlite3OsTruncate(pPager->fd, newSize);
                   39283:       }else{
                   39284:         char *pTmp = pPager->pTmpSpace;
                   39285:         memset(pTmp, 0, szPage);
                   39286:         testcase( (newSize-szPage) <  currentSize );
                   39287:         testcase( (newSize-szPage) == currentSize );
                   39288:         testcase( (newSize-szPage) >  currentSize );
                   39289:         rc = sqlite3OsWrite(pPager->fd, pTmp, szPage, newSize-szPage);
                   39290:       }
                   39291:       if( rc==SQLITE_OK ){
                   39292:         pPager->dbFileSize = nPage;
                   39293:       }
                   39294:     }
                   39295:   }
                   39296:   return rc;
                   39297: }
                   39298: 
                   39299: /*
                   39300: ** Set the value of the Pager.sectorSize variable for the given
                   39301: ** pager based on the value returned by the xSectorSize method
                   39302: ** of the open database file. The sector size will be used used 
                   39303: ** to determine the size and alignment of journal header and 
                   39304: ** master journal pointers within created journal files.
                   39305: **
                   39306: ** For temporary files the effective sector size is always 512 bytes.
                   39307: **
                   39308: ** Otherwise, for non-temporary files, the effective sector size is
                   39309: ** the value returned by the xSectorSize() method rounded up to 32 if
                   39310: ** it is less than 32, or rounded down to MAX_SECTOR_SIZE if it
                   39311: ** is greater than MAX_SECTOR_SIZE.
                   39312: */
                   39313: static void setSectorSize(Pager *pPager){
                   39314:   assert( isOpen(pPager->fd) || pPager->tempFile );
                   39315: 
                   39316:   if( !pPager->tempFile ){
                   39317:     /* Sector size doesn't matter for temporary files. Also, the file
                   39318:     ** may not have been opened yet, in which case the OsSectorSize()
                   39319:     ** call will segfault.
                   39320:     */
                   39321:     pPager->sectorSize = sqlite3OsSectorSize(pPager->fd);
                   39322:   }
                   39323:   if( pPager->sectorSize<32 ){
                   39324:     pPager->sectorSize = 512;
                   39325:   }
                   39326:   if( pPager->sectorSize>MAX_SECTOR_SIZE ){
                   39327:     assert( MAX_SECTOR_SIZE>=512 );
                   39328:     pPager->sectorSize = MAX_SECTOR_SIZE;
                   39329:   }
                   39330: }
                   39331: 
                   39332: /*
                   39333: ** Playback the journal and thus restore the database file to
                   39334: ** the state it was in before we started making changes.  
                   39335: **
                   39336: ** The journal file format is as follows: 
                   39337: **
                   39338: **  (1)  8 byte prefix.  A copy of aJournalMagic[].
                   39339: **  (2)  4 byte big-endian integer which is the number of valid page records
                   39340: **       in the journal.  If this value is 0xffffffff, then compute the
                   39341: **       number of page records from the journal size.
                   39342: **  (3)  4 byte big-endian integer which is the initial value for the 
                   39343: **       sanity checksum.
                   39344: **  (4)  4 byte integer which is the number of pages to truncate the
                   39345: **       database to during a rollback.
                   39346: **  (5)  4 byte big-endian integer which is the sector size.  The header
                   39347: **       is this many bytes in size.
                   39348: **  (6)  4 byte big-endian integer which is the page size.
                   39349: **  (7)  zero padding out to the next sector size.
                   39350: **  (8)  Zero or more pages instances, each as follows:
                   39351: **        +  4 byte page number.
                   39352: **        +  pPager->pageSize bytes of data.
                   39353: **        +  4 byte checksum
                   39354: **
                   39355: ** When we speak of the journal header, we mean the first 7 items above.
                   39356: ** Each entry in the journal is an instance of the 8th item.
                   39357: **
                   39358: ** Call the value from the second bullet "nRec".  nRec is the number of
                   39359: ** valid page entries in the journal.  In most cases, you can compute the
                   39360: ** value of nRec from the size of the journal file.  But if a power
                   39361: ** failure occurred while the journal was being written, it could be the
                   39362: ** case that the size of the journal file had already been increased but
                   39363: ** the extra entries had not yet made it safely to disk.  In such a case,
                   39364: ** the value of nRec computed from the file size would be too large.  For
                   39365: ** that reason, we always use the nRec value in the header.
                   39366: **
                   39367: ** If the nRec value is 0xffffffff it means that nRec should be computed
                   39368: ** from the file size.  This value is used when the user selects the
                   39369: ** no-sync option for the journal.  A power failure could lead to corruption
                   39370: ** in this case.  But for things like temporary table (which will be
                   39371: ** deleted when the power is restored) we don't care.  
                   39372: **
                   39373: ** If the file opened as the journal file is not a well-formed
                   39374: ** journal file then all pages up to the first corrupted page are rolled
                   39375: ** back (or no pages if the journal header is corrupted). The journal file
                   39376: ** is then deleted and SQLITE_OK returned, just as if no corruption had
                   39377: ** been encountered.
                   39378: **
                   39379: ** If an I/O or malloc() error occurs, the journal-file is not deleted
                   39380: ** and an error code is returned.
                   39381: **
                   39382: ** The isHot parameter indicates that we are trying to rollback a journal
                   39383: ** that might be a hot journal.  Or, it could be that the journal is 
                   39384: ** preserved because of JOURNALMODE_PERSIST or JOURNALMODE_TRUNCATE.
                   39385: ** If the journal really is hot, reset the pager cache prior rolling
                   39386: ** back any content.  If the journal is merely persistent, no reset is
                   39387: ** needed.
                   39388: */
                   39389: static int pager_playback(Pager *pPager, int isHot){
                   39390:   sqlite3_vfs *pVfs = pPager->pVfs;
                   39391:   i64 szJ;                 /* Size of the journal file in bytes */
                   39392:   u32 nRec;                /* Number of Records in the journal */
                   39393:   u32 u;                   /* Unsigned loop counter */
                   39394:   Pgno mxPg = 0;           /* Size of the original file in pages */
                   39395:   int rc;                  /* Result code of a subroutine */
                   39396:   int res = 1;             /* Value returned by sqlite3OsAccess() */
                   39397:   char *zMaster = 0;       /* Name of master journal file if any */
                   39398:   int needPagerReset;      /* True to reset page prior to first page rollback */
                   39399: 
                   39400:   /* Figure out how many records are in the journal.  Abort early if
                   39401:   ** the journal is empty.
                   39402:   */
                   39403:   assert( isOpen(pPager->jfd) );
                   39404:   rc = sqlite3OsFileSize(pPager->jfd, &szJ);
                   39405:   if( rc!=SQLITE_OK ){
                   39406:     goto end_playback;
                   39407:   }
                   39408: 
                   39409:   /* Read the master journal name from the journal, if it is present.
                   39410:   ** If a master journal file name is specified, but the file is not
                   39411:   ** present on disk, then the journal is not hot and does not need to be
                   39412:   ** played back.
                   39413:   **
                   39414:   ** TODO: Technically the following is an error because it assumes that
                   39415:   ** buffer Pager.pTmpSpace is (mxPathname+1) bytes or larger. i.e. that
                   39416:   ** (pPager->pageSize >= pPager->pVfs->mxPathname+1). Using os_unix.c,
                   39417:   **  mxPathname is 512, which is the same as the minimum allowable value
                   39418:   ** for pageSize.
                   39419:   */
                   39420:   zMaster = pPager->pTmpSpace;
                   39421:   rc = readMasterJournal(pPager->jfd, zMaster, pPager->pVfs->mxPathname+1);
                   39422:   if( rc==SQLITE_OK && zMaster[0] ){
                   39423:     rc = sqlite3OsAccess(pVfs, zMaster, SQLITE_ACCESS_EXISTS, &res);
                   39424:   }
                   39425:   zMaster = 0;
                   39426:   if( rc!=SQLITE_OK || !res ){
                   39427:     goto end_playback;
                   39428:   }
                   39429:   pPager->journalOff = 0;
                   39430:   needPagerReset = isHot;
                   39431: 
                   39432:   /* This loop terminates either when a readJournalHdr() or 
                   39433:   ** pager_playback_one_page() call returns SQLITE_DONE or an IO error 
                   39434:   ** occurs. 
                   39435:   */
                   39436:   while( 1 ){
                   39437:     /* Read the next journal header from the journal file.  If there are
                   39438:     ** not enough bytes left in the journal file for a complete header, or
                   39439:     ** it is corrupted, then a process must have failed while writing it.
                   39440:     ** This indicates nothing more needs to be rolled back.
                   39441:     */
                   39442:     rc = readJournalHdr(pPager, isHot, szJ, &nRec, &mxPg);
                   39443:     if( rc!=SQLITE_OK ){ 
                   39444:       if( rc==SQLITE_DONE ){
                   39445:         rc = SQLITE_OK;
                   39446:       }
                   39447:       goto end_playback;
                   39448:     }
                   39449: 
                   39450:     /* If nRec is 0xffffffff, then this journal was created by a process
                   39451:     ** working in no-sync mode. This means that the rest of the journal
                   39452:     ** file consists of pages, there are no more journal headers. Compute
                   39453:     ** the value of nRec based on this assumption.
                   39454:     */
                   39455:     if( nRec==0xffffffff ){
                   39456:       assert( pPager->journalOff==JOURNAL_HDR_SZ(pPager) );
                   39457:       nRec = (int)((szJ - JOURNAL_HDR_SZ(pPager))/JOURNAL_PG_SZ(pPager));
                   39458:     }
                   39459: 
                   39460:     /* If nRec is 0 and this rollback is of a transaction created by this
                   39461:     ** process and if this is the final header in the journal, then it means
                   39462:     ** that this part of the journal was being filled but has not yet been
                   39463:     ** synced to disk.  Compute the number of pages based on the remaining
                   39464:     ** size of the file.
                   39465:     **
                   39466:     ** The third term of the test was added to fix ticket #2565.
                   39467:     ** When rolling back a hot journal, nRec==0 always means that the next
                   39468:     ** chunk of the journal contains zero pages to be rolled back.  But
                   39469:     ** when doing a ROLLBACK and the nRec==0 chunk is the last chunk in
                   39470:     ** the journal, it means that the journal might contain additional
                   39471:     ** pages that need to be rolled back and that the number of pages 
                   39472:     ** should be computed based on the journal file size.
                   39473:     */
                   39474:     if( nRec==0 && !isHot &&
                   39475:         pPager->journalHdr+JOURNAL_HDR_SZ(pPager)==pPager->journalOff ){
                   39476:       nRec = (int)((szJ - pPager->journalOff) / JOURNAL_PG_SZ(pPager));
                   39477:     }
                   39478: 
                   39479:     /* If this is the first header read from the journal, truncate the
                   39480:     ** database file back to its original size.
                   39481:     */
                   39482:     if( pPager->journalOff==JOURNAL_HDR_SZ(pPager) ){
                   39483:       rc = pager_truncate(pPager, mxPg);
                   39484:       if( rc!=SQLITE_OK ){
                   39485:         goto end_playback;
                   39486:       }
                   39487:       pPager->dbSize = mxPg;
                   39488:     }
                   39489: 
                   39490:     /* Copy original pages out of the journal and back into the 
                   39491:     ** database file and/or page cache.
                   39492:     */
                   39493:     for(u=0; u<nRec; u++){
                   39494:       if( needPagerReset ){
                   39495:         pager_reset(pPager);
                   39496:         needPagerReset = 0;
                   39497:       }
                   39498:       rc = pager_playback_one_page(pPager,&pPager->journalOff,0,1,0);
                   39499:       if( rc!=SQLITE_OK ){
                   39500:         if( rc==SQLITE_DONE ){
                   39501:           rc = SQLITE_OK;
                   39502:           pPager->journalOff = szJ;
                   39503:           break;
                   39504:         }else if( rc==SQLITE_IOERR_SHORT_READ ){
                   39505:           /* If the journal has been truncated, simply stop reading and
                   39506:           ** processing the journal. This might happen if the journal was
                   39507:           ** not completely written and synced prior to a crash.  In that
                   39508:           ** case, the database should have never been written in the
                   39509:           ** first place so it is OK to simply abandon the rollback. */
                   39510:           rc = SQLITE_OK;
                   39511:           goto end_playback;
                   39512:         }else{
                   39513:           /* If we are unable to rollback, quit and return the error
                   39514:           ** code.  This will cause the pager to enter the error state
                   39515:           ** so that no further harm will be done.  Perhaps the next
                   39516:           ** process to come along will be able to rollback the database.
                   39517:           */
                   39518:           goto end_playback;
                   39519:         }
                   39520:       }
                   39521:     }
                   39522:   }
                   39523:   /*NOTREACHED*/
                   39524:   assert( 0 );
                   39525: 
                   39526: end_playback:
                   39527:   /* Following a rollback, the database file should be back in its original
                   39528:   ** state prior to the start of the transaction, so invoke the
                   39529:   ** SQLITE_FCNTL_DB_UNCHANGED file-control method to disable the
                   39530:   ** assertion that the transaction counter was modified.
                   39531:   */
                   39532:   assert(
                   39533:     pPager->fd->pMethods==0 ||
                   39534:     sqlite3OsFileControl(pPager->fd,SQLITE_FCNTL_DB_UNCHANGED,0)>=SQLITE_OK
                   39535:   );
                   39536: 
                   39537:   /* If this playback is happening automatically as a result of an IO or 
                   39538:   ** malloc error that occurred after the change-counter was updated but 
                   39539:   ** before the transaction was committed, then the change-counter 
                   39540:   ** modification may just have been reverted. If this happens in exclusive 
                   39541:   ** mode, then subsequent transactions performed by the connection will not
                   39542:   ** update the change-counter at all. This may lead to cache inconsistency
                   39543:   ** problems for other processes at some point in the future. So, just
                   39544:   ** in case this has happened, clear the changeCountDone flag now.
                   39545:   */
                   39546:   pPager->changeCountDone = pPager->tempFile;
                   39547: 
                   39548:   if( rc==SQLITE_OK ){
                   39549:     zMaster = pPager->pTmpSpace;
                   39550:     rc = readMasterJournal(pPager->jfd, zMaster, pPager->pVfs->mxPathname+1);
                   39551:     testcase( rc!=SQLITE_OK );
                   39552:   }
                   39553:   if( rc==SQLITE_OK
                   39554:    && (pPager->eState>=PAGER_WRITER_DBMOD || pPager->eState==PAGER_OPEN)
                   39555:   ){
                   39556:     rc = sqlite3PagerSync(pPager);
                   39557:   }
                   39558:   if( rc==SQLITE_OK ){
                   39559:     rc = pager_end_transaction(pPager, zMaster[0]!='\0');
                   39560:     testcase( rc!=SQLITE_OK );
                   39561:   }
                   39562:   if( rc==SQLITE_OK && zMaster[0] && res ){
                   39563:     /* If there was a master journal and this routine will return success,
                   39564:     ** see if it is possible to delete the master journal.
                   39565:     */
                   39566:     rc = pager_delmaster(pPager, zMaster);
                   39567:     testcase( rc!=SQLITE_OK );
                   39568:   }
                   39569: 
                   39570:   /* The Pager.sectorSize variable may have been updated while rolling
                   39571:   ** back a journal created by a process with a different sector size
                   39572:   ** value. Reset it to the correct value for this process.
                   39573:   */
                   39574:   setSectorSize(pPager);
                   39575:   return rc;
                   39576: }
                   39577: 
                   39578: 
                   39579: /*
                   39580: ** Read the content for page pPg out of the database file and into 
                   39581: ** pPg->pData. A shared lock or greater must be held on the database
                   39582: ** file before this function is called.
                   39583: **
                   39584: ** If page 1 is read, then the value of Pager.dbFileVers[] is set to
                   39585: ** the value read from the database file.
                   39586: **
                   39587: ** If an IO error occurs, then the IO error is returned to the caller.
                   39588: ** Otherwise, SQLITE_OK is returned.
                   39589: */
                   39590: static int readDbPage(PgHdr *pPg){
                   39591:   Pager *pPager = pPg->pPager; /* Pager object associated with page pPg */
                   39592:   Pgno pgno = pPg->pgno;       /* Page number to read */
                   39593:   int rc = SQLITE_OK;          /* Return code */
                   39594:   int isInWal = 0;             /* True if page is in log file */
                   39595:   int pgsz = pPager->pageSize; /* Number of bytes to read */
                   39596: 
                   39597:   assert( pPager->eState>=PAGER_READER && !MEMDB );
                   39598:   assert( isOpen(pPager->fd) );
                   39599: 
                   39600:   if( NEVER(!isOpen(pPager->fd)) ){
                   39601:     assert( pPager->tempFile );
                   39602:     memset(pPg->pData, 0, pPager->pageSize);
                   39603:     return SQLITE_OK;
                   39604:   }
                   39605: 
                   39606:   if( pagerUseWal(pPager) ){
                   39607:     /* Try to pull the page from the write-ahead log. */
                   39608:     rc = sqlite3WalRead(pPager->pWal, pgno, &isInWal, pgsz, pPg->pData);
                   39609:   }
                   39610:   if( rc==SQLITE_OK && !isInWal ){
                   39611:     i64 iOffset = (pgno-1)*(i64)pPager->pageSize;
                   39612:     rc = sqlite3OsRead(pPager->fd, pPg->pData, pgsz, iOffset);
                   39613:     if( rc==SQLITE_IOERR_SHORT_READ ){
                   39614:       rc = SQLITE_OK;
                   39615:     }
                   39616:   }
                   39617: 
                   39618:   if( pgno==1 ){
                   39619:     if( rc ){
                   39620:       /* If the read is unsuccessful, set the dbFileVers[] to something
                   39621:       ** that will never be a valid file version.  dbFileVers[] is a copy
                   39622:       ** of bytes 24..39 of the database.  Bytes 28..31 should always be
                   39623:       ** zero or the size of the database in page. Bytes 32..35 and 35..39
                   39624:       ** should be page numbers which are never 0xffffffff.  So filling
                   39625:       ** pPager->dbFileVers[] with all 0xff bytes should suffice.
                   39626:       **
                   39627:       ** For an encrypted database, the situation is more complex:  bytes
                   39628:       ** 24..39 of the database are white noise.  But the probability of
                   39629:       ** white noising equaling 16 bytes of 0xff is vanishingly small so
                   39630:       ** we should still be ok.
                   39631:       */
                   39632:       memset(pPager->dbFileVers, 0xff, sizeof(pPager->dbFileVers));
                   39633:     }else{
                   39634:       u8 *dbFileVers = &((u8*)pPg->pData)[24];
                   39635:       memcpy(&pPager->dbFileVers, dbFileVers, sizeof(pPager->dbFileVers));
                   39636:     }
                   39637:   }
                   39638:   CODEC1(pPager, pPg->pData, pgno, 3, rc = SQLITE_NOMEM);
                   39639: 
                   39640:   PAGER_INCR(sqlite3_pager_readdb_count);
                   39641:   PAGER_INCR(pPager->nRead);
                   39642:   IOTRACE(("PGIN %p %d\n", pPager, pgno));
                   39643:   PAGERTRACE(("FETCH %d page %d hash(%08x)\n",
                   39644:                PAGERID(pPager), pgno, pager_pagehash(pPg)));
                   39645: 
                   39646:   return rc;
                   39647: }
                   39648: 
                   39649: /*
                   39650: ** Update the value of the change-counter at offsets 24 and 92 in
                   39651: ** the header and the sqlite version number at offset 96.
                   39652: **
                   39653: ** This is an unconditional update.  See also the pager_incr_changecounter()
                   39654: ** routine which only updates the change-counter if the update is actually
                   39655: ** needed, as determined by the pPager->changeCountDone state variable.
                   39656: */
                   39657: static void pager_write_changecounter(PgHdr *pPg){
                   39658:   u32 change_counter;
                   39659: 
                   39660:   /* Increment the value just read and write it back to byte 24. */
                   39661:   change_counter = sqlite3Get4byte((u8*)pPg->pPager->dbFileVers)+1;
                   39662:   put32bits(((char*)pPg->pData)+24, change_counter);
                   39663: 
                   39664:   /* Also store the SQLite version number in bytes 96..99 and in
                   39665:   ** bytes 92..95 store the change counter for which the version number
                   39666:   ** is valid. */
                   39667:   put32bits(((char*)pPg->pData)+92, change_counter);
                   39668:   put32bits(((char*)pPg->pData)+96, SQLITE_VERSION_NUMBER);
                   39669: }
                   39670: 
                   39671: #ifndef SQLITE_OMIT_WAL
                   39672: /*
                   39673: ** This function is invoked once for each page that has already been 
                   39674: ** written into the log file when a WAL transaction is rolled back.
                   39675: ** Parameter iPg is the page number of said page. The pCtx argument 
                   39676: ** is actually a pointer to the Pager structure.
                   39677: **
                   39678: ** If page iPg is present in the cache, and has no outstanding references,
                   39679: ** it is discarded. Otherwise, if there are one or more outstanding
                   39680: ** references, the page content is reloaded from the database. If the
                   39681: ** attempt to reload content from the database is required and fails, 
                   39682: ** return an SQLite error code. Otherwise, SQLITE_OK.
                   39683: */
                   39684: static int pagerUndoCallback(void *pCtx, Pgno iPg){
                   39685:   int rc = SQLITE_OK;
                   39686:   Pager *pPager = (Pager *)pCtx;
                   39687:   PgHdr *pPg;
                   39688: 
                   39689:   pPg = sqlite3PagerLookup(pPager, iPg);
                   39690:   if( pPg ){
                   39691:     if( sqlite3PcachePageRefcount(pPg)==1 ){
                   39692:       sqlite3PcacheDrop(pPg);
                   39693:     }else{
                   39694:       rc = readDbPage(pPg);
                   39695:       if( rc==SQLITE_OK ){
                   39696:         pPager->xReiniter(pPg);
                   39697:       }
                   39698:       sqlite3PagerUnref(pPg);
                   39699:     }
                   39700:   }
                   39701: 
                   39702:   /* Normally, if a transaction is rolled back, any backup processes are
                   39703:   ** updated as data is copied out of the rollback journal and into the
                   39704:   ** database. This is not generally possible with a WAL database, as
                   39705:   ** rollback involves simply truncating the log file. Therefore, if one
                   39706:   ** or more frames have already been written to the log (and therefore 
                   39707:   ** also copied into the backup databases) as part of this transaction,
                   39708:   ** the backups must be restarted.
                   39709:   */
                   39710:   sqlite3BackupRestart(pPager->pBackup);
                   39711: 
                   39712:   return rc;
                   39713: }
                   39714: 
                   39715: /*
                   39716: ** This function is called to rollback a transaction on a WAL database.
                   39717: */
                   39718: static int pagerRollbackWal(Pager *pPager){
                   39719:   int rc;                         /* Return Code */
                   39720:   PgHdr *pList;                   /* List of dirty pages to revert */
                   39721: 
                   39722:   /* For all pages in the cache that are currently dirty or have already
                   39723:   ** been written (but not committed) to the log file, do one of the 
                   39724:   ** following:
                   39725:   **
                   39726:   **   + Discard the cached page (if refcount==0), or
                   39727:   **   + Reload page content from the database (if refcount>0).
                   39728:   */
                   39729:   pPager->dbSize = pPager->dbOrigSize;
                   39730:   rc = sqlite3WalUndo(pPager->pWal, pagerUndoCallback, (void *)pPager);
                   39731:   pList = sqlite3PcacheDirtyList(pPager->pPCache);
                   39732:   while( pList && rc==SQLITE_OK ){
                   39733:     PgHdr *pNext = pList->pDirty;
                   39734:     rc = pagerUndoCallback((void *)pPager, pList->pgno);
                   39735:     pList = pNext;
                   39736:   }
                   39737: 
                   39738:   return rc;
                   39739: }
                   39740: 
                   39741: /*
                   39742: ** This function is a wrapper around sqlite3WalFrames(). As well as logging
                   39743: ** the contents of the list of pages headed by pList (connected by pDirty),
                   39744: ** this function notifies any active backup processes that the pages have
                   39745: ** changed. 
                   39746: **
                   39747: ** The list of pages passed into this routine is always sorted by page number.
                   39748: ** Hence, if page 1 appears anywhere on the list, it will be the first page.
                   39749: */ 
                   39750: static int pagerWalFrames(
                   39751:   Pager *pPager,                  /* Pager object */
                   39752:   PgHdr *pList,                   /* List of frames to log */
                   39753:   Pgno nTruncate,                 /* Database size after this commit */
                   39754:   int isCommit,                   /* True if this is a commit */
                   39755:   int syncFlags                   /* Flags to pass to OsSync() (or 0) */
                   39756: ){
                   39757:   int rc;                         /* Return code */
                   39758: #if defined(SQLITE_DEBUG) || defined(SQLITE_CHECK_PAGES)
                   39759:   PgHdr *p;                       /* For looping over pages */
                   39760: #endif
                   39761: 
                   39762:   assert( pPager->pWal );
                   39763: #ifdef SQLITE_DEBUG
                   39764:   /* Verify that the page list is in accending order */
                   39765:   for(p=pList; p && p->pDirty; p=p->pDirty){
                   39766:     assert( p->pgno < p->pDirty->pgno );
                   39767:   }
                   39768: #endif
                   39769: 
                   39770:   if( isCommit ){
                   39771:     /* If a WAL transaction is being committed, there is no point in writing
                   39772:     ** any pages with page numbers greater than nTruncate into the WAL file.
                   39773:     ** They will never be read by any client. So remove them from the pDirty
                   39774:     ** list here. */
                   39775:     PgHdr *p;
                   39776:     PgHdr **ppNext = &pList;
                   39777:     for(p=pList; (*ppNext = p); p=p->pDirty){
                   39778:       if( p->pgno<=nTruncate ) ppNext = &p->pDirty;
                   39779:     }
                   39780:     assert( pList );
                   39781:   }
                   39782: 
                   39783:   if( pList->pgno==1 ) pager_write_changecounter(pList);
                   39784:   rc = sqlite3WalFrames(pPager->pWal, 
                   39785:       pPager->pageSize, pList, nTruncate, isCommit, syncFlags
                   39786:   );
                   39787:   if( rc==SQLITE_OK && pPager->pBackup ){
                   39788:     PgHdr *p;
                   39789:     for(p=pList; p; p=p->pDirty){
                   39790:       sqlite3BackupUpdate(pPager->pBackup, p->pgno, (u8 *)p->pData);
                   39791:     }
                   39792:   }
                   39793: 
                   39794: #ifdef SQLITE_CHECK_PAGES
                   39795:   pList = sqlite3PcacheDirtyList(pPager->pPCache);
                   39796:   for(p=pList; p; p=p->pDirty){
                   39797:     pager_set_pagehash(p);
                   39798:   }
                   39799: #endif
                   39800: 
                   39801:   return rc;
                   39802: }
                   39803: 
                   39804: /*
                   39805: ** Begin a read transaction on the WAL.
                   39806: **
                   39807: ** This routine used to be called "pagerOpenSnapshot()" because it essentially
                   39808: ** makes a snapshot of the database at the current point in time and preserves
                   39809: ** that snapshot for use by the reader in spite of concurrently changes by
                   39810: ** other writers or checkpointers.
                   39811: */
                   39812: static int pagerBeginReadTransaction(Pager *pPager){
                   39813:   int rc;                         /* Return code */
                   39814:   int changed = 0;                /* True if cache must be reset */
                   39815: 
                   39816:   assert( pagerUseWal(pPager) );
                   39817:   assert( pPager->eState==PAGER_OPEN || pPager->eState==PAGER_READER );
                   39818: 
                   39819:   /* sqlite3WalEndReadTransaction() was not called for the previous
                   39820:   ** transaction in locking_mode=EXCLUSIVE.  So call it now.  If we
                   39821:   ** are in locking_mode=NORMAL and EndRead() was previously called,
                   39822:   ** the duplicate call is harmless.
                   39823:   */
                   39824:   sqlite3WalEndReadTransaction(pPager->pWal);
                   39825: 
                   39826:   rc = sqlite3WalBeginReadTransaction(pPager->pWal, &changed);
                   39827:   if( rc!=SQLITE_OK || changed ){
                   39828:     pager_reset(pPager);
                   39829:   }
                   39830: 
                   39831:   return rc;
                   39832: }
                   39833: #endif
                   39834: 
                   39835: /*
                   39836: ** This function is called as part of the transition from PAGER_OPEN
                   39837: ** to PAGER_READER state to determine the size of the database file
                   39838: ** in pages (assuming the page size currently stored in Pager.pageSize).
                   39839: **
                   39840: ** If no error occurs, SQLITE_OK is returned and the size of the database
                   39841: ** in pages is stored in *pnPage. Otherwise, an error code (perhaps
                   39842: ** SQLITE_IOERR_FSTAT) is returned and *pnPage is left unmodified.
                   39843: */
                   39844: static int pagerPagecount(Pager *pPager, Pgno *pnPage){
                   39845:   Pgno nPage;                     /* Value to return via *pnPage */
                   39846: 
                   39847:   /* Query the WAL sub-system for the database size. The WalDbsize()
                   39848:   ** function returns zero if the WAL is not open (i.e. Pager.pWal==0), or
                   39849:   ** if the database size is not available. The database size is not
                   39850:   ** available from the WAL sub-system if the log file is empty or
                   39851:   ** contains no valid committed transactions.
                   39852:   */
                   39853:   assert( pPager->eState==PAGER_OPEN );
                   39854:   assert( pPager->eLock>=SHARED_LOCK || pPager->noReadlock );
                   39855:   nPage = sqlite3WalDbsize(pPager->pWal);
                   39856: 
                   39857:   /* If the database size was not available from the WAL sub-system,
                   39858:   ** determine it based on the size of the database file. If the size
                   39859:   ** of the database file is not an integer multiple of the page-size,
                   39860:   ** round down to the nearest page. Except, any file larger than 0
                   39861:   ** bytes in size is considered to contain at least one page.
                   39862:   */
                   39863:   if( nPage==0 ){
                   39864:     i64 n = 0;                    /* Size of db file in bytes */
                   39865:     assert( isOpen(pPager->fd) || pPager->tempFile );
                   39866:     if( isOpen(pPager->fd) ){
                   39867:       int rc = sqlite3OsFileSize(pPager->fd, &n);
                   39868:       if( rc!=SQLITE_OK ){
                   39869:         return rc;
                   39870:       }
                   39871:     }
                   39872:     nPage = (Pgno)(n / pPager->pageSize);
                   39873:     if( nPage==0 && n>0 ){
                   39874:       nPage = 1;
                   39875:     }
                   39876:   }
                   39877: 
                   39878:   /* If the current number of pages in the file is greater than the
                   39879:   ** configured maximum pager number, increase the allowed limit so
                   39880:   ** that the file can be read.
                   39881:   */
                   39882:   if( nPage>pPager->mxPgno ){
                   39883:     pPager->mxPgno = (Pgno)nPage;
                   39884:   }
                   39885: 
                   39886:   *pnPage = nPage;
                   39887:   return SQLITE_OK;
                   39888: }
                   39889: 
                   39890: #ifndef SQLITE_OMIT_WAL
                   39891: /*
                   39892: ** Check if the *-wal file that corresponds to the database opened by pPager
                   39893: ** exists if the database is not empy, or verify that the *-wal file does
                   39894: ** not exist (by deleting it) if the database file is empty.
                   39895: **
                   39896: ** If the database is not empty and the *-wal file exists, open the pager
                   39897: ** in WAL mode.  If the database is empty or if no *-wal file exists and
                   39898: ** if no error occurs, make sure Pager.journalMode is not set to
                   39899: ** PAGER_JOURNALMODE_WAL.
                   39900: **
                   39901: ** Return SQLITE_OK or an error code.
                   39902: **
                   39903: ** The caller must hold a SHARED lock on the database file to call this
                   39904: ** function. Because an EXCLUSIVE lock on the db file is required to delete 
                   39905: ** a WAL on a none-empty database, this ensures there is no race condition 
                   39906: ** between the xAccess() below and an xDelete() being executed by some 
                   39907: ** other connection.
                   39908: */
                   39909: static int pagerOpenWalIfPresent(Pager *pPager){
                   39910:   int rc = SQLITE_OK;
                   39911:   assert( pPager->eState==PAGER_OPEN );
                   39912:   assert( pPager->eLock>=SHARED_LOCK || pPager->noReadlock );
                   39913: 
                   39914:   if( !pPager->tempFile ){
                   39915:     int isWal;                    /* True if WAL file exists */
                   39916:     Pgno nPage;                   /* Size of the database file */
                   39917: 
                   39918:     rc = pagerPagecount(pPager, &nPage);
                   39919:     if( rc ) return rc;
                   39920:     if( nPage==0 ){
                   39921:       rc = sqlite3OsDelete(pPager->pVfs, pPager->zWal, 0);
                   39922:       isWal = 0;
                   39923:     }else{
                   39924:       rc = sqlite3OsAccess(
                   39925:           pPager->pVfs, pPager->zWal, SQLITE_ACCESS_EXISTS, &isWal
                   39926:       );
                   39927:     }
                   39928:     if( rc==SQLITE_OK ){
                   39929:       if( isWal ){
                   39930:         testcase( sqlite3PcachePagecount(pPager->pPCache)==0 );
                   39931:         rc = sqlite3PagerOpenWal(pPager, 0);
                   39932:       }else if( pPager->journalMode==PAGER_JOURNALMODE_WAL ){
                   39933:         pPager->journalMode = PAGER_JOURNALMODE_DELETE;
                   39934:       }
                   39935:     }
                   39936:   }
                   39937:   return rc;
                   39938: }
                   39939: #endif
                   39940: 
                   39941: /*
                   39942: ** Playback savepoint pSavepoint. Or, if pSavepoint==NULL, then playback
                   39943: ** the entire master journal file. The case pSavepoint==NULL occurs when 
                   39944: ** a ROLLBACK TO command is invoked on a SAVEPOINT that is a transaction 
                   39945: ** savepoint.
                   39946: **
                   39947: ** When pSavepoint is not NULL (meaning a non-transaction savepoint is 
                   39948: ** being rolled back), then the rollback consists of up to three stages,
                   39949: ** performed in the order specified:
                   39950: **
                   39951: **   * Pages are played back from the main journal starting at byte
                   39952: **     offset PagerSavepoint.iOffset and continuing to 
                   39953: **     PagerSavepoint.iHdrOffset, or to the end of the main journal
                   39954: **     file if PagerSavepoint.iHdrOffset is zero.
                   39955: **
                   39956: **   * If PagerSavepoint.iHdrOffset is not zero, then pages are played
                   39957: **     back starting from the journal header immediately following 
                   39958: **     PagerSavepoint.iHdrOffset to the end of the main journal file.
                   39959: **
                   39960: **   * Pages are then played back from the sub-journal file, starting
                   39961: **     with the PagerSavepoint.iSubRec and continuing to the end of
                   39962: **     the journal file.
                   39963: **
                   39964: ** Throughout the rollback process, each time a page is rolled back, the
                   39965: ** corresponding bit is set in a bitvec structure (variable pDone in the
                   39966: ** implementation below). This is used to ensure that a page is only
                   39967: ** rolled back the first time it is encountered in either journal.
                   39968: **
                   39969: ** If pSavepoint is NULL, then pages are only played back from the main
                   39970: ** journal file. There is no need for a bitvec in this case.
                   39971: **
                   39972: ** In either case, before playback commences the Pager.dbSize variable
                   39973: ** is reset to the value that it held at the start of the savepoint 
                   39974: ** (or transaction). No page with a page-number greater than this value
                   39975: ** is played back. If one is encountered it is simply skipped.
                   39976: */
                   39977: static int pagerPlaybackSavepoint(Pager *pPager, PagerSavepoint *pSavepoint){
                   39978:   i64 szJ;                 /* Effective size of the main journal */
                   39979:   i64 iHdrOff;             /* End of first segment of main-journal records */
                   39980:   int rc = SQLITE_OK;      /* Return code */
                   39981:   Bitvec *pDone = 0;       /* Bitvec to ensure pages played back only once */
                   39982: 
                   39983:   assert( pPager->eState!=PAGER_ERROR );
                   39984:   assert( pPager->eState>=PAGER_WRITER_LOCKED );
                   39985: 
                   39986:   /* Allocate a bitvec to use to store the set of pages rolled back */
                   39987:   if( pSavepoint ){
                   39988:     pDone = sqlite3BitvecCreate(pSavepoint->nOrig);
                   39989:     if( !pDone ){
                   39990:       return SQLITE_NOMEM;
                   39991:     }
                   39992:   }
                   39993: 
                   39994:   /* Set the database size back to the value it was before the savepoint 
                   39995:   ** being reverted was opened.
                   39996:   */
                   39997:   pPager->dbSize = pSavepoint ? pSavepoint->nOrig : pPager->dbOrigSize;
                   39998:   pPager->changeCountDone = pPager->tempFile;
                   39999: 
                   40000:   if( !pSavepoint && pagerUseWal(pPager) ){
                   40001:     return pagerRollbackWal(pPager);
                   40002:   }
                   40003: 
                   40004:   /* Use pPager->journalOff as the effective size of the main rollback
                   40005:   ** journal.  The actual file might be larger than this in
                   40006:   ** PAGER_JOURNALMODE_TRUNCATE or PAGER_JOURNALMODE_PERSIST.  But anything
                   40007:   ** past pPager->journalOff is off-limits to us.
                   40008:   */
                   40009:   szJ = pPager->journalOff;
                   40010:   assert( pagerUseWal(pPager)==0 || szJ==0 );
                   40011: 
                   40012:   /* Begin by rolling back records from the main journal starting at
                   40013:   ** PagerSavepoint.iOffset and continuing to the next journal header.
                   40014:   ** There might be records in the main journal that have a page number
                   40015:   ** greater than the current database size (pPager->dbSize) but those
                   40016:   ** will be skipped automatically.  Pages are added to pDone as they
                   40017:   ** are played back.
                   40018:   */
                   40019:   if( pSavepoint && !pagerUseWal(pPager) ){
                   40020:     iHdrOff = pSavepoint->iHdrOffset ? pSavepoint->iHdrOffset : szJ;
                   40021:     pPager->journalOff = pSavepoint->iOffset;
                   40022:     while( rc==SQLITE_OK && pPager->journalOff<iHdrOff ){
                   40023:       rc = pager_playback_one_page(pPager, &pPager->journalOff, pDone, 1, 1);
                   40024:     }
                   40025:     assert( rc!=SQLITE_DONE );
                   40026:   }else{
                   40027:     pPager->journalOff = 0;
                   40028:   }
                   40029: 
                   40030:   /* Continue rolling back records out of the main journal starting at
                   40031:   ** the first journal header seen and continuing until the effective end
                   40032:   ** of the main journal file.  Continue to skip out-of-range pages and
                   40033:   ** continue adding pages rolled back to pDone.
                   40034:   */
                   40035:   while( rc==SQLITE_OK && pPager->journalOff<szJ ){
                   40036:     u32 ii;            /* Loop counter */
                   40037:     u32 nJRec = 0;     /* Number of Journal Records */
                   40038:     u32 dummy;
                   40039:     rc = readJournalHdr(pPager, 0, szJ, &nJRec, &dummy);
                   40040:     assert( rc!=SQLITE_DONE );
                   40041: 
                   40042:     /*
                   40043:     ** The "pPager->journalHdr+JOURNAL_HDR_SZ(pPager)==pPager->journalOff"
                   40044:     ** test is related to ticket #2565.  See the discussion in the
                   40045:     ** pager_playback() function for additional information.
                   40046:     */
                   40047:     if( nJRec==0 
                   40048:      && pPager->journalHdr+JOURNAL_HDR_SZ(pPager)==pPager->journalOff
                   40049:     ){
                   40050:       nJRec = (u32)((szJ - pPager->journalOff)/JOURNAL_PG_SZ(pPager));
                   40051:     }
                   40052:     for(ii=0; rc==SQLITE_OK && ii<nJRec && pPager->journalOff<szJ; ii++){
                   40053:       rc = pager_playback_one_page(pPager, &pPager->journalOff, pDone, 1, 1);
                   40054:     }
                   40055:     assert( rc!=SQLITE_DONE );
                   40056:   }
                   40057:   assert( rc!=SQLITE_OK || pPager->journalOff>=szJ );
                   40058: 
                   40059:   /* Finally,  rollback pages from the sub-journal.  Page that were
                   40060:   ** previously rolled back out of the main journal (and are hence in pDone)
                   40061:   ** will be skipped.  Out-of-range pages are also skipped.
                   40062:   */
                   40063:   if( pSavepoint ){
                   40064:     u32 ii;            /* Loop counter */
                   40065:     i64 offset = pSavepoint->iSubRec*(4+pPager->pageSize);
                   40066: 
                   40067:     if( pagerUseWal(pPager) ){
                   40068:       rc = sqlite3WalSavepointUndo(pPager->pWal, pSavepoint->aWalData);
                   40069:     }
                   40070:     for(ii=pSavepoint->iSubRec; rc==SQLITE_OK && ii<pPager->nSubRec; ii++){
                   40071:       assert( offset==ii*(4+pPager->pageSize) );
                   40072:       rc = pager_playback_one_page(pPager, &offset, pDone, 0, 1);
                   40073:     }
                   40074:     assert( rc!=SQLITE_DONE );
                   40075:   }
                   40076: 
                   40077:   sqlite3BitvecDestroy(pDone);
                   40078:   if( rc==SQLITE_OK ){
                   40079:     pPager->journalOff = szJ;
                   40080:   }
                   40081: 
                   40082:   return rc;
                   40083: }
                   40084: 
                   40085: /*
                   40086: ** Change the maximum number of in-memory pages that are allowed.
                   40087: */
                   40088: SQLITE_PRIVATE void sqlite3PagerSetCachesize(Pager *pPager, int mxPage){
                   40089:   sqlite3PcacheSetCachesize(pPager->pPCache, mxPage);
                   40090: }
                   40091: 
                   40092: /*
                   40093: ** Adjust the robustness of the database to damage due to OS crashes
                   40094: ** or power failures by changing the number of syncs()s when writing
                   40095: ** the rollback journal.  There are three levels:
                   40096: **
                   40097: **    OFF       sqlite3OsSync() is never called.  This is the default
                   40098: **              for temporary and transient files.
                   40099: **
                   40100: **    NORMAL    The journal is synced once before writes begin on the
                   40101: **              database.  This is normally adequate protection, but
                   40102: **              it is theoretically possible, though very unlikely,
                   40103: **              that an inopertune power failure could leave the journal
                   40104: **              in a state which would cause damage to the database
                   40105: **              when it is rolled back.
                   40106: **
                   40107: **    FULL      The journal is synced twice before writes begin on the
                   40108: **              database (with some additional information - the nRec field
                   40109: **              of the journal header - being written in between the two
                   40110: **              syncs).  If we assume that writing a
                   40111: **              single disk sector is atomic, then this mode provides
                   40112: **              assurance that the journal will not be corrupted to the
                   40113: **              point of causing damage to the database during rollback.
                   40114: **
                   40115: ** The above is for a rollback-journal mode.  For WAL mode, OFF continues
                   40116: ** to mean that no syncs ever occur.  NORMAL means that the WAL is synced
                   40117: ** prior to the start of checkpoint and that the database file is synced
                   40118: ** at the conclusion of the checkpoint if the entire content of the WAL
                   40119: ** was written back into the database.  But no sync operations occur for
                   40120: ** an ordinary commit in NORMAL mode with WAL.  FULL means that the WAL
                   40121: ** file is synced following each commit operation, in addition to the
                   40122: ** syncs associated with NORMAL.
                   40123: **
                   40124: ** Do not confuse synchronous=FULL with SQLITE_SYNC_FULL.  The
                   40125: ** SQLITE_SYNC_FULL macro means to use the MacOSX-style full-fsync
                   40126: ** using fcntl(F_FULLFSYNC).  SQLITE_SYNC_NORMAL means to do an
                   40127: ** ordinary fsync() call.  There is no difference between SQLITE_SYNC_FULL
                   40128: ** and SQLITE_SYNC_NORMAL on platforms other than MacOSX.  But the
                   40129: ** synchronous=FULL versus synchronous=NORMAL setting determines when
                   40130: ** the xSync primitive is called and is relevant to all platforms.
                   40131: **
                   40132: ** Numeric values associated with these states are OFF==1, NORMAL=2,
                   40133: ** and FULL=3.
                   40134: */
                   40135: #ifndef SQLITE_OMIT_PAGER_PRAGMAS
                   40136: SQLITE_PRIVATE void sqlite3PagerSetSafetyLevel(
                   40137:   Pager *pPager,        /* The pager to set safety level for */
                   40138:   int level,            /* PRAGMA synchronous.  1=OFF, 2=NORMAL, 3=FULL */  
                   40139:   int bFullFsync,       /* PRAGMA fullfsync */
                   40140:   int bCkptFullFsync    /* PRAGMA checkpoint_fullfsync */
                   40141: ){
                   40142:   assert( level>=1 && level<=3 );
                   40143:   pPager->noSync =  (level==1 || pPager->tempFile) ?1:0;
                   40144:   pPager->fullSync = (level==3 && !pPager->tempFile) ?1:0;
                   40145:   if( pPager->noSync ){
                   40146:     pPager->syncFlags = 0;
                   40147:     pPager->ckptSyncFlags = 0;
                   40148:   }else if( bFullFsync ){
                   40149:     pPager->syncFlags = SQLITE_SYNC_FULL;
                   40150:     pPager->ckptSyncFlags = SQLITE_SYNC_FULL;
                   40151:   }else if( bCkptFullFsync ){
                   40152:     pPager->syncFlags = SQLITE_SYNC_NORMAL;
                   40153:     pPager->ckptSyncFlags = SQLITE_SYNC_FULL;
                   40154:   }else{
                   40155:     pPager->syncFlags = SQLITE_SYNC_NORMAL;
                   40156:     pPager->ckptSyncFlags = SQLITE_SYNC_NORMAL;
                   40157:   }
                   40158: }
                   40159: #endif
                   40160: 
                   40161: /*
                   40162: ** The following global variable is incremented whenever the library
                   40163: ** attempts to open a temporary file.  This information is used for
                   40164: ** testing and analysis only.  
                   40165: */
                   40166: #ifdef SQLITE_TEST
                   40167: SQLITE_API int sqlite3_opentemp_count = 0;
                   40168: #endif
                   40169: 
                   40170: /*
                   40171: ** Open a temporary file.
                   40172: **
                   40173: ** Write the file descriptor into *pFile. Return SQLITE_OK on success 
                   40174: ** or some other error code if we fail. The OS will automatically 
                   40175: ** delete the temporary file when it is closed.
                   40176: **
                   40177: ** The flags passed to the VFS layer xOpen() call are those specified
                   40178: ** by parameter vfsFlags ORed with the following:
                   40179: **
                   40180: **     SQLITE_OPEN_READWRITE
                   40181: **     SQLITE_OPEN_CREATE
                   40182: **     SQLITE_OPEN_EXCLUSIVE
                   40183: **     SQLITE_OPEN_DELETEONCLOSE
                   40184: */
                   40185: static int pagerOpentemp(
                   40186:   Pager *pPager,        /* The pager object */
                   40187:   sqlite3_file *pFile,  /* Write the file descriptor here */
                   40188:   int vfsFlags          /* Flags passed through to the VFS */
                   40189: ){
                   40190:   int rc;               /* Return code */
                   40191: 
                   40192: #ifdef SQLITE_TEST
                   40193:   sqlite3_opentemp_count++;  /* Used for testing and analysis only */
                   40194: #endif
                   40195: 
                   40196:   vfsFlags |=  SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE |
                   40197:             SQLITE_OPEN_EXCLUSIVE | SQLITE_OPEN_DELETEONCLOSE;
                   40198:   rc = sqlite3OsOpen(pPager->pVfs, 0, pFile, vfsFlags, 0);
                   40199:   assert( rc!=SQLITE_OK || isOpen(pFile) );
                   40200:   return rc;
                   40201: }
                   40202: 
                   40203: /*
                   40204: ** Set the busy handler function.
                   40205: **
                   40206: ** The pager invokes the busy-handler if sqlite3OsLock() returns 
                   40207: ** SQLITE_BUSY when trying to upgrade from no-lock to a SHARED lock,
                   40208: ** or when trying to upgrade from a RESERVED lock to an EXCLUSIVE 
                   40209: ** lock. It does *not* invoke the busy handler when upgrading from
                   40210: ** SHARED to RESERVED, or when upgrading from SHARED to EXCLUSIVE
                   40211: ** (which occurs during hot-journal rollback). Summary:
                   40212: **
                   40213: **   Transition                        | Invokes xBusyHandler
                   40214: **   --------------------------------------------------------
                   40215: **   NO_LOCK       -> SHARED_LOCK      | Yes
                   40216: **   SHARED_LOCK   -> RESERVED_LOCK    | No
                   40217: **   SHARED_LOCK   -> EXCLUSIVE_LOCK   | No
                   40218: **   RESERVED_LOCK -> EXCLUSIVE_LOCK   | Yes
                   40219: **
                   40220: ** If the busy-handler callback returns non-zero, the lock is 
                   40221: ** retried. If it returns zero, then the SQLITE_BUSY error is
                   40222: ** returned to the caller of the pager API function.
                   40223: */
                   40224: SQLITE_PRIVATE void sqlite3PagerSetBusyhandler(
                   40225:   Pager *pPager,                       /* Pager object */
                   40226:   int (*xBusyHandler)(void *),         /* Pointer to busy-handler function */
                   40227:   void *pBusyHandlerArg                /* Argument to pass to xBusyHandler */
                   40228: ){  
                   40229:   pPager->xBusyHandler = xBusyHandler;
                   40230:   pPager->pBusyHandlerArg = pBusyHandlerArg;
                   40231: }
                   40232: 
                   40233: /*
                   40234: ** Change the page size used by the Pager object. The new page size 
                   40235: ** is passed in *pPageSize.
                   40236: **
                   40237: ** If the pager is in the error state when this function is called, it
                   40238: ** is a no-op. The value returned is the error state error code (i.e. 
                   40239: ** one of SQLITE_IOERR, an SQLITE_IOERR_xxx sub-code or SQLITE_FULL).
                   40240: **
                   40241: ** Otherwise, if all of the following are true:
                   40242: **
                   40243: **   * the new page size (value of *pPageSize) is valid (a power 
                   40244: **     of two between 512 and SQLITE_MAX_PAGE_SIZE, inclusive), and
                   40245: **
                   40246: **   * there are no outstanding page references, and
                   40247: **
                   40248: **   * the database is either not an in-memory database or it is
                   40249: **     an in-memory database that currently consists of zero pages.
                   40250: **
                   40251: ** then the pager object page size is set to *pPageSize.
                   40252: **
                   40253: ** If the page size is changed, then this function uses sqlite3PagerMalloc() 
                   40254: ** to obtain a new Pager.pTmpSpace buffer. If this allocation attempt 
                   40255: ** fails, SQLITE_NOMEM is returned and the page size remains unchanged. 
                   40256: ** In all other cases, SQLITE_OK is returned.
                   40257: **
                   40258: ** If the page size is not changed, either because one of the enumerated
                   40259: ** conditions above is not true, the pager was in error state when this
                   40260: ** function was called, or because the memory allocation attempt failed, 
                   40261: ** then *pPageSize is set to the old, retained page size before returning.
                   40262: */
                   40263: SQLITE_PRIVATE int sqlite3PagerSetPagesize(Pager *pPager, u32 *pPageSize, int nReserve){
                   40264:   int rc = SQLITE_OK;
                   40265: 
                   40266:   /* It is not possible to do a full assert_pager_state() here, as this
                   40267:   ** function may be called from within PagerOpen(), before the state
                   40268:   ** of the Pager object is internally consistent.
                   40269:   **
                   40270:   ** At one point this function returned an error if the pager was in 
                   40271:   ** PAGER_ERROR state. But since PAGER_ERROR state guarantees that
                   40272:   ** there is at least one outstanding page reference, this function
                   40273:   ** is a no-op for that case anyhow.
                   40274:   */
                   40275: 
                   40276:   u32 pageSize = *pPageSize;
                   40277:   assert( pageSize==0 || (pageSize>=512 && pageSize<=SQLITE_MAX_PAGE_SIZE) );
                   40278:   if( (pPager->memDb==0 || pPager->dbSize==0)
                   40279:    && sqlite3PcacheRefCount(pPager->pPCache)==0 
                   40280:    && pageSize && pageSize!=(u32)pPager->pageSize 
                   40281:   ){
                   40282:     char *pNew = NULL;             /* New temp space */
                   40283:     i64 nByte = 0;
                   40284: 
                   40285:     if( pPager->eState>PAGER_OPEN && isOpen(pPager->fd) ){
                   40286:       rc = sqlite3OsFileSize(pPager->fd, &nByte);
                   40287:     }
                   40288:     if( rc==SQLITE_OK ){
                   40289:       pNew = (char *)sqlite3PageMalloc(pageSize);
                   40290:       if( !pNew ) rc = SQLITE_NOMEM;
                   40291:     }
                   40292: 
                   40293:     if( rc==SQLITE_OK ){
                   40294:       pager_reset(pPager);
                   40295:       pPager->dbSize = (Pgno)(nByte/pageSize);
                   40296:       pPager->pageSize = pageSize;
                   40297:       sqlite3PageFree(pPager->pTmpSpace);
                   40298:       pPager->pTmpSpace = pNew;
                   40299:       sqlite3PcacheSetPageSize(pPager->pPCache, pageSize);
                   40300:     }
                   40301:   }
                   40302: 
                   40303:   *pPageSize = pPager->pageSize;
                   40304:   if( rc==SQLITE_OK ){
                   40305:     if( nReserve<0 ) nReserve = pPager->nReserve;
                   40306:     assert( nReserve>=0 && nReserve<1000 );
                   40307:     pPager->nReserve = (i16)nReserve;
                   40308:     pagerReportSize(pPager);
                   40309:   }
                   40310:   return rc;
                   40311: }
                   40312: 
                   40313: /*
                   40314: ** Return a pointer to the "temporary page" buffer held internally
                   40315: ** by the pager.  This is a buffer that is big enough to hold the
                   40316: ** entire content of a database page.  This buffer is used internally
                   40317: ** during rollback and will be overwritten whenever a rollback
                   40318: ** occurs.  But other modules are free to use it too, as long as
                   40319: ** no rollbacks are happening.
                   40320: */
                   40321: SQLITE_PRIVATE void *sqlite3PagerTempSpace(Pager *pPager){
                   40322:   return pPager->pTmpSpace;
                   40323: }
                   40324: 
                   40325: /*
                   40326: ** Attempt to set the maximum database page count if mxPage is positive. 
                   40327: ** Make no changes if mxPage is zero or negative.  And never reduce the
                   40328: ** maximum page count below the current size of the database.
                   40329: **
                   40330: ** Regardless of mxPage, return the current maximum page count.
                   40331: */
                   40332: SQLITE_PRIVATE int sqlite3PagerMaxPageCount(Pager *pPager, int mxPage){
                   40333:   if( mxPage>0 ){
                   40334:     pPager->mxPgno = mxPage;
                   40335:   }
                   40336:   assert( pPager->eState!=PAGER_OPEN );      /* Called only by OP_MaxPgcnt */
                   40337:   assert( pPager->mxPgno>=pPager->dbSize );  /* OP_MaxPgcnt enforces this */
                   40338:   return pPager->mxPgno;
                   40339: }
                   40340: 
                   40341: /*
                   40342: ** The following set of routines are used to disable the simulated
                   40343: ** I/O error mechanism.  These routines are used to avoid simulated
                   40344: ** errors in places where we do not care about errors.
                   40345: **
                   40346: ** Unless -DSQLITE_TEST=1 is used, these routines are all no-ops
                   40347: ** and generate no code.
                   40348: */
                   40349: #ifdef SQLITE_TEST
                   40350: SQLITE_API extern int sqlite3_io_error_pending;
                   40351: SQLITE_API extern int sqlite3_io_error_hit;
                   40352: static int saved_cnt;
                   40353: void disable_simulated_io_errors(void){
                   40354:   saved_cnt = sqlite3_io_error_pending;
                   40355:   sqlite3_io_error_pending = -1;
                   40356: }
                   40357: void enable_simulated_io_errors(void){
                   40358:   sqlite3_io_error_pending = saved_cnt;
                   40359: }
                   40360: #else
                   40361: # define disable_simulated_io_errors()
                   40362: # define enable_simulated_io_errors()
                   40363: #endif
                   40364: 
                   40365: /*
                   40366: ** Read the first N bytes from the beginning of the file into memory
                   40367: ** that pDest points to. 
                   40368: **
                   40369: ** If the pager was opened on a transient file (zFilename==""), or
                   40370: ** opened on a file less than N bytes in size, the output buffer is
                   40371: ** zeroed and SQLITE_OK returned. The rationale for this is that this 
                   40372: ** function is used to read database headers, and a new transient or
                   40373: ** zero sized database has a header than consists entirely of zeroes.
                   40374: **
                   40375: ** If any IO error apart from SQLITE_IOERR_SHORT_READ is encountered,
                   40376: ** the error code is returned to the caller and the contents of the
                   40377: ** output buffer undefined.
                   40378: */
                   40379: SQLITE_PRIVATE int sqlite3PagerReadFileheader(Pager *pPager, int N, unsigned char *pDest){
                   40380:   int rc = SQLITE_OK;
                   40381:   memset(pDest, 0, N);
                   40382:   assert( isOpen(pPager->fd) || pPager->tempFile );
                   40383: 
                   40384:   /* This routine is only called by btree immediately after creating
                   40385:   ** the Pager object.  There has not been an opportunity to transition
                   40386:   ** to WAL mode yet.
                   40387:   */
                   40388:   assert( !pagerUseWal(pPager) );
                   40389: 
                   40390:   if( isOpen(pPager->fd) ){
                   40391:     IOTRACE(("DBHDR %p 0 %d\n", pPager, N))
                   40392:     rc = sqlite3OsRead(pPager->fd, pDest, N, 0);
                   40393:     if( rc==SQLITE_IOERR_SHORT_READ ){
                   40394:       rc = SQLITE_OK;
                   40395:     }
                   40396:   }
                   40397:   return rc;
                   40398: }
                   40399: 
                   40400: /*
                   40401: ** This function may only be called when a read-transaction is open on
                   40402: ** the pager. It returns the total number of pages in the database.
                   40403: **
                   40404: ** However, if the file is between 1 and <page-size> bytes in size, then 
                   40405: ** this is considered a 1 page file.
                   40406: */
                   40407: SQLITE_PRIVATE void sqlite3PagerPagecount(Pager *pPager, int *pnPage){
                   40408:   assert( pPager->eState>=PAGER_READER );
                   40409:   assert( pPager->eState!=PAGER_WRITER_FINISHED );
                   40410:   *pnPage = (int)pPager->dbSize;
                   40411: }
                   40412: 
                   40413: 
                   40414: /*
                   40415: ** Try to obtain a lock of type locktype on the database file. If
                   40416: ** a similar or greater lock is already held, this function is a no-op
                   40417: ** (returning SQLITE_OK immediately).
                   40418: **
                   40419: ** Otherwise, attempt to obtain the lock using sqlite3OsLock(). Invoke 
                   40420: ** the busy callback if the lock is currently not available. Repeat 
                   40421: ** until the busy callback returns false or until the attempt to 
                   40422: ** obtain the lock succeeds.
                   40423: **
                   40424: ** Return SQLITE_OK on success and an error code if we cannot obtain
                   40425: ** the lock. If the lock is obtained successfully, set the Pager.state 
                   40426: ** variable to locktype before returning.
                   40427: */
                   40428: static int pager_wait_on_lock(Pager *pPager, int locktype){
                   40429:   int rc;                              /* Return code */
                   40430: 
                   40431:   /* Check that this is either a no-op (because the requested lock is 
                   40432:   ** already held, or one of the transistions that the busy-handler
                   40433:   ** may be invoked during, according to the comment above
                   40434:   ** sqlite3PagerSetBusyhandler().
                   40435:   */
                   40436:   assert( (pPager->eLock>=locktype)
                   40437:        || (pPager->eLock==NO_LOCK && locktype==SHARED_LOCK)
                   40438:        || (pPager->eLock==RESERVED_LOCK && locktype==EXCLUSIVE_LOCK)
                   40439:   );
                   40440: 
                   40441:   do {
                   40442:     rc = pagerLockDb(pPager, locktype);
                   40443:   }while( rc==SQLITE_BUSY && pPager->xBusyHandler(pPager->pBusyHandlerArg) );
                   40444:   return rc;
                   40445: }
                   40446: 
                   40447: /*
                   40448: ** Function assertTruncateConstraint(pPager) checks that one of the 
                   40449: ** following is true for all dirty pages currently in the page-cache:
                   40450: **
                   40451: **   a) The page number is less than or equal to the size of the 
                   40452: **      current database image, in pages, OR
                   40453: **
                   40454: **   b) if the page content were written at this time, it would not
                   40455: **      be necessary to write the current content out to the sub-journal
                   40456: **      (as determined by function subjRequiresPage()).
                   40457: **
                   40458: ** If the condition asserted by this function were not true, and the
                   40459: ** dirty page were to be discarded from the cache via the pagerStress()
                   40460: ** routine, pagerStress() would not write the current page content to
                   40461: ** the database file. If a savepoint transaction were rolled back after
                   40462: ** this happened, the correct behaviour would be to restore the current
                   40463: ** content of the page. However, since this content is not present in either
                   40464: ** the database file or the portion of the rollback journal and 
                   40465: ** sub-journal rolled back the content could not be restored and the
                   40466: ** database image would become corrupt. It is therefore fortunate that 
                   40467: ** this circumstance cannot arise.
                   40468: */
                   40469: #if defined(SQLITE_DEBUG)
                   40470: static void assertTruncateConstraintCb(PgHdr *pPg){
                   40471:   assert( pPg->flags&PGHDR_DIRTY );
                   40472:   assert( !subjRequiresPage(pPg) || pPg->pgno<=pPg->pPager->dbSize );
                   40473: }
                   40474: static void assertTruncateConstraint(Pager *pPager){
                   40475:   sqlite3PcacheIterateDirty(pPager->pPCache, assertTruncateConstraintCb);
                   40476: }
                   40477: #else
                   40478: # define assertTruncateConstraint(pPager)
                   40479: #endif
                   40480: 
                   40481: /*
                   40482: ** Truncate the in-memory database file image to nPage pages. This 
                   40483: ** function does not actually modify the database file on disk. It 
                   40484: ** just sets the internal state of the pager object so that the 
                   40485: ** truncation will be done when the current transaction is committed.
                   40486: */
                   40487: SQLITE_PRIVATE void sqlite3PagerTruncateImage(Pager *pPager, Pgno nPage){
                   40488:   assert( pPager->dbSize>=nPage );
                   40489:   assert( pPager->eState>=PAGER_WRITER_CACHEMOD );
                   40490:   pPager->dbSize = nPage;
                   40491:   assertTruncateConstraint(pPager);
                   40492: }
                   40493: 
                   40494: 
                   40495: /*
                   40496: ** This function is called before attempting a hot-journal rollback. It
                   40497: ** syncs the journal file to disk, then sets pPager->journalHdr to the
                   40498: ** size of the journal file so that the pager_playback() routine knows
                   40499: ** that the entire journal file has been synced.
                   40500: **
                   40501: ** Syncing a hot-journal to disk before attempting to roll it back ensures 
                   40502: ** that if a power-failure occurs during the rollback, the process that
                   40503: ** attempts rollback following system recovery sees the same journal
                   40504: ** content as this process.
                   40505: **
                   40506: ** If everything goes as planned, SQLITE_OK is returned. Otherwise, 
                   40507: ** an SQLite error code.
                   40508: */
                   40509: static int pagerSyncHotJournal(Pager *pPager){
                   40510:   int rc = SQLITE_OK;
                   40511:   if( !pPager->noSync ){
                   40512:     rc = sqlite3OsSync(pPager->jfd, SQLITE_SYNC_NORMAL);
                   40513:   }
                   40514:   if( rc==SQLITE_OK ){
                   40515:     rc = sqlite3OsFileSize(pPager->jfd, &pPager->journalHdr);
                   40516:   }
                   40517:   return rc;
                   40518: }
                   40519: 
                   40520: /*
                   40521: ** Shutdown the page cache.  Free all memory and close all files.
                   40522: **
                   40523: ** If a transaction was in progress when this routine is called, that
                   40524: ** transaction is rolled back.  All outstanding pages are invalidated
                   40525: ** and their memory is freed.  Any attempt to use a page associated
                   40526: ** with this page cache after this function returns will likely
                   40527: ** result in a coredump.
                   40528: **
                   40529: ** This function always succeeds. If a transaction is active an attempt
                   40530: ** is made to roll it back. If an error occurs during the rollback 
                   40531: ** a hot journal may be left in the filesystem but no error is returned
                   40532: ** to the caller.
                   40533: */
                   40534: SQLITE_PRIVATE int sqlite3PagerClose(Pager *pPager){
                   40535:   u8 *pTmp = (u8 *)pPager->pTmpSpace;
                   40536: 
                   40537:   disable_simulated_io_errors();
                   40538:   sqlite3BeginBenignMalloc();
                   40539:   /* pPager->errCode = 0; */
                   40540:   pPager->exclusiveMode = 0;
                   40541: #ifndef SQLITE_OMIT_WAL
                   40542:   sqlite3WalClose(pPager->pWal, pPager->ckptSyncFlags, pPager->pageSize, pTmp);
                   40543:   pPager->pWal = 0;
                   40544: #endif
                   40545:   pager_reset(pPager);
                   40546:   if( MEMDB ){
                   40547:     pager_unlock(pPager);
                   40548:   }else{
                   40549:     /* If it is open, sync the journal file before calling UnlockAndRollback.
                   40550:     ** If this is not done, then an unsynced portion of the open journal 
                   40551:     ** file may be played back into the database. If a power failure occurs 
                   40552:     ** while this is happening, the database could become corrupt.
                   40553:     **
                   40554:     ** If an error occurs while trying to sync the journal, shift the pager
                   40555:     ** into the ERROR state. This causes UnlockAndRollback to unlock the
                   40556:     ** database and close the journal file without attempting to roll it
                   40557:     ** back or finalize it. The next database user will have to do hot-journal
                   40558:     ** rollback before accessing the database file.
                   40559:     */
                   40560:     if( isOpen(pPager->jfd) ){
                   40561:       pager_error(pPager, pagerSyncHotJournal(pPager));
                   40562:     }
                   40563:     pagerUnlockAndRollback(pPager);
                   40564:   }
                   40565:   sqlite3EndBenignMalloc();
                   40566:   enable_simulated_io_errors();
                   40567:   PAGERTRACE(("CLOSE %d\n", PAGERID(pPager)));
                   40568:   IOTRACE(("CLOSE %p\n", pPager))
                   40569:   sqlite3OsClose(pPager->jfd);
                   40570:   sqlite3OsClose(pPager->fd);
                   40571:   sqlite3PageFree(pTmp);
                   40572:   sqlite3PcacheClose(pPager->pPCache);
                   40573: 
                   40574: #ifdef SQLITE_HAS_CODEC
                   40575:   if( pPager->xCodecFree ) pPager->xCodecFree(pPager->pCodec);
                   40576: #endif
                   40577: 
                   40578:   assert( !pPager->aSavepoint && !pPager->pInJournal );
                   40579:   assert( !isOpen(pPager->jfd) && !isOpen(pPager->sjfd) );
                   40580: 
                   40581:   sqlite3_free(pPager);
                   40582:   return SQLITE_OK;
                   40583: }
                   40584: 
                   40585: #if !defined(NDEBUG) || defined(SQLITE_TEST)
                   40586: /*
                   40587: ** Return the page number for page pPg.
                   40588: */
                   40589: SQLITE_PRIVATE Pgno sqlite3PagerPagenumber(DbPage *pPg){
                   40590:   return pPg->pgno;
                   40591: }
                   40592: #endif
                   40593: 
                   40594: /*
                   40595: ** Increment the reference count for page pPg.
                   40596: */
                   40597: SQLITE_PRIVATE void sqlite3PagerRef(DbPage *pPg){
                   40598:   sqlite3PcacheRef(pPg);
                   40599: }
                   40600: 
                   40601: /*
                   40602: ** Sync the journal. In other words, make sure all the pages that have
                   40603: ** been written to the journal have actually reached the surface of the
                   40604: ** disk and can be restored in the event of a hot-journal rollback.
                   40605: **
                   40606: ** If the Pager.noSync flag is set, then this function is a no-op.
                   40607: ** Otherwise, the actions required depend on the journal-mode and the 
                   40608: ** device characteristics of the the file-system, as follows:
                   40609: **
                   40610: **   * If the journal file is an in-memory journal file, no action need
                   40611: **     be taken.
                   40612: **
                   40613: **   * Otherwise, if the device does not support the SAFE_APPEND property,
                   40614: **     then the nRec field of the most recently written journal header
                   40615: **     is updated to contain the number of journal records that have
                   40616: **     been written following it. If the pager is operating in full-sync
                   40617: **     mode, then the journal file is synced before this field is updated.
                   40618: **
                   40619: **   * If the device does not support the SEQUENTIAL property, then 
                   40620: **     journal file is synced.
                   40621: **
                   40622: ** Or, in pseudo-code:
                   40623: **
                   40624: **   if( NOT <in-memory journal> ){
                   40625: **     if( NOT SAFE_APPEND ){
                   40626: **       if( <full-sync mode> ) xSync(<journal file>);
                   40627: **       <update nRec field>
                   40628: **     } 
                   40629: **     if( NOT SEQUENTIAL ) xSync(<journal file>);
                   40630: **   }
                   40631: **
                   40632: ** If successful, this routine clears the PGHDR_NEED_SYNC flag of every 
                   40633: ** page currently held in memory before returning SQLITE_OK. If an IO
                   40634: ** error is encountered, then the IO error code is returned to the caller.
                   40635: */
                   40636: static int syncJournal(Pager *pPager, int newHdr){
                   40637:   int rc;                         /* Return code */
                   40638: 
                   40639:   assert( pPager->eState==PAGER_WRITER_CACHEMOD
                   40640:        || pPager->eState==PAGER_WRITER_DBMOD
                   40641:   );
                   40642:   assert( assert_pager_state(pPager) );
                   40643:   assert( !pagerUseWal(pPager) );
                   40644: 
                   40645:   rc = sqlite3PagerExclusiveLock(pPager);
                   40646:   if( rc!=SQLITE_OK ) return rc;
                   40647: 
                   40648:   if( !pPager->noSync ){
                   40649:     assert( !pPager->tempFile );
                   40650:     if( isOpen(pPager->jfd) && pPager->journalMode!=PAGER_JOURNALMODE_MEMORY ){
                   40651:       const int iDc = sqlite3OsDeviceCharacteristics(pPager->fd);
                   40652:       assert( isOpen(pPager->jfd) );
                   40653: 
                   40654:       if( 0==(iDc&SQLITE_IOCAP_SAFE_APPEND) ){
                   40655:         /* This block deals with an obscure problem. If the last connection
                   40656:         ** that wrote to this database was operating in persistent-journal
                   40657:         ** mode, then the journal file may at this point actually be larger
                   40658:         ** than Pager.journalOff bytes. If the next thing in the journal
                   40659:         ** file happens to be a journal-header (written as part of the
                   40660:         ** previous connection's transaction), and a crash or power-failure 
                   40661:         ** occurs after nRec is updated but before this connection writes 
                   40662:         ** anything else to the journal file (or commits/rolls back its 
                   40663:         ** transaction), then SQLite may become confused when doing the 
                   40664:         ** hot-journal rollback following recovery. It may roll back all
                   40665:         ** of this connections data, then proceed to rolling back the old,
                   40666:         ** out-of-date data that follows it. Database corruption.
                   40667:         **
                   40668:         ** To work around this, if the journal file does appear to contain
                   40669:         ** a valid header following Pager.journalOff, then write a 0x00
                   40670:         ** byte to the start of it to prevent it from being recognized.
                   40671:         **
                   40672:         ** Variable iNextHdrOffset is set to the offset at which this
                   40673:         ** problematic header will occur, if it exists. aMagic is used 
                   40674:         ** as a temporary buffer to inspect the first couple of bytes of
                   40675:         ** the potential journal header.
                   40676:         */
                   40677:         i64 iNextHdrOffset;
                   40678:         u8 aMagic[8];
                   40679:         u8 zHeader[sizeof(aJournalMagic)+4];
                   40680: 
                   40681:         memcpy(zHeader, aJournalMagic, sizeof(aJournalMagic));
                   40682:         put32bits(&zHeader[sizeof(aJournalMagic)], pPager->nRec);
                   40683: 
                   40684:         iNextHdrOffset = journalHdrOffset(pPager);
                   40685:         rc = sqlite3OsRead(pPager->jfd, aMagic, 8, iNextHdrOffset);
                   40686:         if( rc==SQLITE_OK && 0==memcmp(aMagic, aJournalMagic, 8) ){
                   40687:           static const u8 zerobyte = 0;
                   40688:           rc = sqlite3OsWrite(pPager->jfd, &zerobyte, 1, iNextHdrOffset);
                   40689:         }
                   40690:         if( rc!=SQLITE_OK && rc!=SQLITE_IOERR_SHORT_READ ){
                   40691:           return rc;
                   40692:         }
                   40693: 
                   40694:         /* Write the nRec value into the journal file header. If in
                   40695:         ** full-synchronous mode, sync the journal first. This ensures that
                   40696:         ** all data has really hit the disk before nRec is updated to mark
                   40697:         ** it as a candidate for rollback.
                   40698:         **
                   40699:         ** This is not required if the persistent media supports the
                   40700:         ** SAFE_APPEND property. Because in this case it is not possible 
                   40701:         ** for garbage data to be appended to the file, the nRec field
                   40702:         ** is populated with 0xFFFFFFFF when the journal header is written
                   40703:         ** and never needs to be updated.
                   40704:         */
                   40705:         if( pPager->fullSync && 0==(iDc&SQLITE_IOCAP_SEQUENTIAL) ){
                   40706:           PAGERTRACE(("SYNC journal of %d\n", PAGERID(pPager)));
                   40707:           IOTRACE(("JSYNC %p\n", pPager))
                   40708:           rc = sqlite3OsSync(pPager->jfd, pPager->syncFlags);
                   40709:           if( rc!=SQLITE_OK ) return rc;
                   40710:         }
                   40711:         IOTRACE(("JHDR %p %lld\n", pPager, pPager->journalHdr));
                   40712:         rc = sqlite3OsWrite(
                   40713:             pPager->jfd, zHeader, sizeof(zHeader), pPager->journalHdr
                   40714:         );
                   40715:         if( rc!=SQLITE_OK ) return rc;
                   40716:       }
                   40717:       if( 0==(iDc&SQLITE_IOCAP_SEQUENTIAL) ){
                   40718:         PAGERTRACE(("SYNC journal of %d\n", PAGERID(pPager)));
                   40719:         IOTRACE(("JSYNC %p\n", pPager))
                   40720:         rc = sqlite3OsSync(pPager->jfd, pPager->syncFlags| 
                   40721:           (pPager->syncFlags==SQLITE_SYNC_FULL?SQLITE_SYNC_DATAONLY:0)
                   40722:         );
                   40723:         if( rc!=SQLITE_OK ) return rc;
                   40724:       }
                   40725: 
                   40726:       pPager->journalHdr = pPager->journalOff;
                   40727:       if( newHdr && 0==(iDc&SQLITE_IOCAP_SAFE_APPEND) ){
                   40728:         pPager->nRec = 0;
                   40729:         rc = writeJournalHdr(pPager);
                   40730:         if( rc!=SQLITE_OK ) return rc;
                   40731:       }
                   40732:     }else{
                   40733:       pPager->journalHdr = pPager->journalOff;
                   40734:     }
                   40735:   }
                   40736: 
                   40737:   /* Unless the pager is in noSync mode, the journal file was just 
                   40738:   ** successfully synced. Either way, clear the PGHDR_NEED_SYNC flag on 
                   40739:   ** all pages.
                   40740:   */
                   40741:   sqlite3PcacheClearSyncFlags(pPager->pPCache);
                   40742:   pPager->eState = PAGER_WRITER_DBMOD;
                   40743:   assert( assert_pager_state(pPager) );
                   40744:   return SQLITE_OK;
                   40745: }
                   40746: 
                   40747: /*
                   40748: ** The argument is the first in a linked list of dirty pages connected
                   40749: ** by the PgHdr.pDirty pointer. This function writes each one of the
                   40750: ** in-memory pages in the list to the database file. The argument may
                   40751: ** be NULL, representing an empty list. In this case this function is
                   40752: ** a no-op.
                   40753: **
                   40754: ** The pager must hold at least a RESERVED lock when this function
                   40755: ** is called. Before writing anything to the database file, this lock
                   40756: ** is upgraded to an EXCLUSIVE lock. If the lock cannot be obtained,
                   40757: ** SQLITE_BUSY is returned and no data is written to the database file.
                   40758: ** 
                   40759: ** If the pager is a temp-file pager and the actual file-system file
                   40760: ** is not yet open, it is created and opened before any data is 
                   40761: ** written out.
                   40762: **
                   40763: ** Once the lock has been upgraded and, if necessary, the file opened,
                   40764: ** the pages are written out to the database file in list order. Writing
                   40765: ** a page is skipped if it meets either of the following criteria:
                   40766: **
                   40767: **   * The page number is greater than Pager.dbSize, or
                   40768: **   * The PGHDR_DONT_WRITE flag is set on the page.
                   40769: **
                   40770: ** If writing out a page causes the database file to grow, Pager.dbFileSize
                   40771: ** is updated accordingly. If page 1 is written out, then the value cached
                   40772: ** in Pager.dbFileVers[] is updated to match the new value stored in
                   40773: ** the database file.
                   40774: **
                   40775: ** If everything is successful, SQLITE_OK is returned. If an IO error 
                   40776: ** occurs, an IO error code is returned. Or, if the EXCLUSIVE lock cannot
                   40777: ** be obtained, SQLITE_BUSY is returned.
                   40778: */
                   40779: static int pager_write_pagelist(Pager *pPager, PgHdr *pList){
                   40780:   int rc = SQLITE_OK;                  /* Return code */
                   40781: 
                   40782:   /* This function is only called for rollback pagers in WRITER_DBMOD state. */
                   40783:   assert( !pagerUseWal(pPager) );
                   40784:   assert( pPager->eState==PAGER_WRITER_DBMOD );
                   40785:   assert( pPager->eLock==EXCLUSIVE_LOCK );
                   40786: 
                   40787:   /* If the file is a temp-file has not yet been opened, open it now. It
                   40788:   ** is not possible for rc to be other than SQLITE_OK if this branch
                   40789:   ** is taken, as pager_wait_on_lock() is a no-op for temp-files.
                   40790:   */
                   40791:   if( !isOpen(pPager->fd) ){
                   40792:     assert( pPager->tempFile && rc==SQLITE_OK );
                   40793:     rc = pagerOpentemp(pPager, pPager->fd, pPager->vfsFlags);
                   40794:   }
                   40795: 
                   40796:   /* Before the first write, give the VFS a hint of what the final
                   40797:   ** file size will be.
                   40798:   */
                   40799:   assert( rc!=SQLITE_OK || isOpen(pPager->fd) );
                   40800:   if( rc==SQLITE_OK && pPager->dbSize>pPager->dbHintSize ){
                   40801:     sqlite3_int64 szFile = pPager->pageSize * (sqlite3_int64)pPager->dbSize;
                   40802:     sqlite3OsFileControl(pPager->fd, SQLITE_FCNTL_SIZE_HINT, &szFile);
                   40803:     pPager->dbHintSize = pPager->dbSize;
                   40804:   }
                   40805: 
                   40806:   while( rc==SQLITE_OK && pList ){
                   40807:     Pgno pgno = pList->pgno;
                   40808: 
                   40809:     /* If there are dirty pages in the page cache with page numbers greater
                   40810:     ** than Pager.dbSize, this means sqlite3PagerTruncateImage() was called to
                   40811:     ** make the file smaller (presumably by auto-vacuum code). Do not write
                   40812:     ** any such pages to the file.
                   40813:     **
                   40814:     ** Also, do not write out any page that has the PGHDR_DONT_WRITE flag
                   40815:     ** set (set by sqlite3PagerDontWrite()).
                   40816:     */
                   40817:     if( pgno<=pPager->dbSize && 0==(pList->flags&PGHDR_DONT_WRITE) ){
                   40818:       i64 offset = (pgno-1)*(i64)pPager->pageSize;   /* Offset to write */
                   40819:       char *pData;                                   /* Data to write */    
                   40820: 
                   40821:       assert( (pList->flags&PGHDR_NEED_SYNC)==0 );
                   40822:       if( pList->pgno==1 ) pager_write_changecounter(pList);
                   40823: 
                   40824:       /* Encode the database */
                   40825:       CODEC2(pPager, pList->pData, pgno, 6, return SQLITE_NOMEM, pData);
                   40826: 
                   40827:       /* Write out the page data. */
                   40828:       rc = sqlite3OsWrite(pPager->fd, pData, pPager->pageSize, offset);
                   40829: 
                   40830:       /* If page 1 was just written, update Pager.dbFileVers to match
                   40831:       ** the value now stored in the database file. If writing this 
                   40832:       ** page caused the database file to grow, update dbFileSize. 
                   40833:       */
                   40834:       if( pgno==1 ){
                   40835:         memcpy(&pPager->dbFileVers, &pData[24], sizeof(pPager->dbFileVers));
                   40836:       }
                   40837:       if( pgno>pPager->dbFileSize ){
                   40838:         pPager->dbFileSize = pgno;
                   40839:       }
                   40840: 
                   40841:       /* Update any backup objects copying the contents of this pager. */
                   40842:       sqlite3BackupUpdate(pPager->pBackup, pgno, (u8*)pList->pData);
                   40843: 
                   40844:       PAGERTRACE(("STORE %d page %d hash(%08x)\n",
                   40845:                    PAGERID(pPager), pgno, pager_pagehash(pList)));
                   40846:       IOTRACE(("PGOUT %p %d\n", pPager, pgno));
                   40847:       PAGER_INCR(sqlite3_pager_writedb_count);
                   40848:       PAGER_INCR(pPager->nWrite);
                   40849:     }else{
                   40850:       PAGERTRACE(("NOSTORE %d page %d\n", PAGERID(pPager), pgno));
                   40851:     }
                   40852:     pager_set_pagehash(pList);
                   40853:     pList = pList->pDirty;
                   40854:   }
                   40855: 
                   40856:   return rc;
                   40857: }
                   40858: 
                   40859: /*
                   40860: ** Ensure that the sub-journal file is open. If it is already open, this 
                   40861: ** function is a no-op.
                   40862: **
                   40863: ** SQLITE_OK is returned if everything goes according to plan. An 
                   40864: ** SQLITE_IOERR_XXX error code is returned if a call to sqlite3OsOpen() 
                   40865: ** fails.
                   40866: */
                   40867: static int openSubJournal(Pager *pPager){
                   40868:   int rc = SQLITE_OK;
                   40869:   if( !isOpen(pPager->sjfd) ){
                   40870:     if( pPager->journalMode==PAGER_JOURNALMODE_MEMORY || pPager->subjInMemory ){
                   40871:       sqlite3MemJournalOpen(pPager->sjfd);
                   40872:     }else{
                   40873:       rc = pagerOpentemp(pPager, pPager->sjfd, SQLITE_OPEN_SUBJOURNAL);
                   40874:     }
                   40875:   }
                   40876:   return rc;
                   40877: }
                   40878: 
                   40879: /*
                   40880: ** Append a record of the current state of page pPg to the sub-journal. 
                   40881: ** It is the callers responsibility to use subjRequiresPage() to check 
                   40882: ** that it is really required before calling this function.
                   40883: **
                   40884: ** If successful, set the bit corresponding to pPg->pgno in the bitvecs
                   40885: ** for all open savepoints before returning.
                   40886: **
                   40887: ** This function returns SQLITE_OK if everything is successful, an IO
                   40888: ** error code if the attempt to write to the sub-journal fails, or 
                   40889: ** SQLITE_NOMEM if a malloc fails while setting a bit in a savepoint
                   40890: ** bitvec.
                   40891: */
                   40892: static int subjournalPage(PgHdr *pPg){
                   40893:   int rc = SQLITE_OK;
                   40894:   Pager *pPager = pPg->pPager;
                   40895:   if( pPager->journalMode!=PAGER_JOURNALMODE_OFF ){
                   40896: 
                   40897:     /* Open the sub-journal, if it has not already been opened */
                   40898:     assert( pPager->useJournal );
                   40899:     assert( isOpen(pPager->jfd) || pagerUseWal(pPager) );
                   40900:     assert( isOpen(pPager->sjfd) || pPager->nSubRec==0 );
                   40901:     assert( pagerUseWal(pPager) 
                   40902:          || pageInJournal(pPg) 
                   40903:          || pPg->pgno>pPager->dbOrigSize 
                   40904:     );
                   40905:     rc = openSubJournal(pPager);
                   40906: 
                   40907:     /* If the sub-journal was opened successfully (or was already open),
                   40908:     ** write the journal record into the file.  */
                   40909:     if( rc==SQLITE_OK ){
                   40910:       void *pData = pPg->pData;
                   40911:       i64 offset = pPager->nSubRec*(4+pPager->pageSize);
                   40912:       char *pData2;
                   40913:   
                   40914:       CODEC2(pPager, pData, pPg->pgno, 7, return SQLITE_NOMEM, pData2);
                   40915:       PAGERTRACE(("STMT-JOURNAL %d page %d\n", PAGERID(pPager), pPg->pgno));
                   40916:       rc = write32bits(pPager->sjfd, offset, pPg->pgno);
                   40917:       if( rc==SQLITE_OK ){
                   40918:         rc = sqlite3OsWrite(pPager->sjfd, pData2, pPager->pageSize, offset+4);
                   40919:       }
                   40920:     }
                   40921:   }
                   40922:   if( rc==SQLITE_OK ){
                   40923:     pPager->nSubRec++;
                   40924:     assert( pPager->nSavepoint>0 );
                   40925:     rc = addToSavepointBitvecs(pPager, pPg->pgno);
                   40926:   }
                   40927:   return rc;
                   40928: }
                   40929: 
                   40930: /*
                   40931: ** This function is called by the pcache layer when it has reached some
                   40932: ** soft memory limit. The first argument is a pointer to a Pager object
                   40933: ** (cast as a void*). The pager is always 'purgeable' (not an in-memory
                   40934: ** database). The second argument is a reference to a page that is 
                   40935: ** currently dirty but has no outstanding references. The page
                   40936: ** is always associated with the Pager object passed as the first 
                   40937: ** argument.
                   40938: **
                   40939: ** The job of this function is to make pPg clean by writing its contents
                   40940: ** out to the database file, if possible. This may involve syncing the
                   40941: ** journal file. 
                   40942: **
                   40943: ** If successful, sqlite3PcacheMakeClean() is called on the page and
                   40944: ** SQLITE_OK returned. If an IO error occurs while trying to make the
                   40945: ** page clean, the IO error code is returned. If the page cannot be
                   40946: ** made clean for some other reason, but no error occurs, then SQLITE_OK
                   40947: ** is returned by sqlite3PcacheMakeClean() is not called.
                   40948: */
                   40949: static int pagerStress(void *p, PgHdr *pPg){
                   40950:   Pager *pPager = (Pager *)p;
                   40951:   int rc = SQLITE_OK;
                   40952: 
                   40953:   assert( pPg->pPager==pPager );
                   40954:   assert( pPg->flags&PGHDR_DIRTY );
                   40955: 
                   40956:   /* The doNotSyncSpill flag is set during times when doing a sync of
                   40957:   ** journal (and adding a new header) is not allowed.  This occurs
                   40958:   ** during calls to sqlite3PagerWrite() while trying to journal multiple
                   40959:   ** pages belonging to the same sector.
                   40960:   **
                   40961:   ** The doNotSpill flag inhibits all cache spilling regardless of whether
                   40962:   ** or not a sync is required.  This is set during a rollback.
                   40963:   **
                   40964:   ** Spilling is also prohibited when in an error state since that could
                   40965:   ** lead to database corruption.   In the current implementaton it 
                   40966:   ** is impossible for sqlite3PCacheFetch() to be called with createFlag==1
                   40967:   ** while in the error state, hence it is impossible for this routine to
                   40968:   ** be called in the error state.  Nevertheless, we include a NEVER()
                   40969:   ** test for the error state as a safeguard against future changes.
                   40970:   */
                   40971:   if( NEVER(pPager->errCode) ) return SQLITE_OK;
                   40972:   if( pPager->doNotSpill ) return SQLITE_OK;
                   40973:   if( pPager->doNotSyncSpill && (pPg->flags & PGHDR_NEED_SYNC)!=0 ){
                   40974:     return SQLITE_OK;
                   40975:   }
                   40976: 
                   40977:   pPg->pDirty = 0;
                   40978:   if( pagerUseWal(pPager) ){
                   40979:     /* Write a single frame for this page to the log. */
                   40980:     if( subjRequiresPage(pPg) ){ 
                   40981:       rc = subjournalPage(pPg); 
                   40982:     }
                   40983:     if( rc==SQLITE_OK ){
                   40984:       rc = pagerWalFrames(pPager, pPg, 0, 0, 0);
                   40985:     }
                   40986:   }else{
                   40987:   
                   40988:     /* Sync the journal file if required. */
                   40989:     if( pPg->flags&PGHDR_NEED_SYNC 
                   40990:      || pPager->eState==PAGER_WRITER_CACHEMOD
                   40991:     ){
                   40992:       rc = syncJournal(pPager, 1);
                   40993:     }
                   40994:   
                   40995:     /* If the page number of this page is larger than the current size of
                   40996:     ** the database image, it may need to be written to the sub-journal.
                   40997:     ** This is because the call to pager_write_pagelist() below will not
                   40998:     ** actually write data to the file in this case.
                   40999:     **
                   41000:     ** Consider the following sequence of events:
                   41001:     **
                   41002:     **   BEGIN;
                   41003:     **     <journal page X>
                   41004:     **     <modify page X>
                   41005:     **     SAVEPOINT sp;
                   41006:     **       <shrink database file to Y pages>
                   41007:     **       pagerStress(page X)
                   41008:     **     ROLLBACK TO sp;
                   41009:     **
                   41010:     ** If (X>Y), then when pagerStress is called page X will not be written
                   41011:     ** out to the database file, but will be dropped from the cache. Then,
                   41012:     ** following the "ROLLBACK TO sp" statement, reading page X will read
                   41013:     ** data from the database file. This will be the copy of page X as it
                   41014:     ** was when the transaction started, not as it was when "SAVEPOINT sp"
                   41015:     ** was executed.
                   41016:     **
                   41017:     ** The solution is to write the current data for page X into the 
                   41018:     ** sub-journal file now (if it is not already there), so that it will
                   41019:     ** be restored to its current value when the "ROLLBACK TO sp" is 
                   41020:     ** executed.
                   41021:     */
                   41022:     if( NEVER(
                   41023:         rc==SQLITE_OK && pPg->pgno>pPager->dbSize && subjRequiresPage(pPg)
                   41024:     ) ){
                   41025:       rc = subjournalPage(pPg);
                   41026:     }
                   41027:   
                   41028:     /* Write the contents of the page out to the database file. */
                   41029:     if( rc==SQLITE_OK ){
                   41030:       assert( (pPg->flags&PGHDR_NEED_SYNC)==0 );
                   41031:       rc = pager_write_pagelist(pPager, pPg);
                   41032:     }
                   41033:   }
                   41034: 
                   41035:   /* Mark the page as clean. */
                   41036:   if( rc==SQLITE_OK ){
                   41037:     PAGERTRACE(("STRESS %d page %d\n", PAGERID(pPager), pPg->pgno));
                   41038:     sqlite3PcacheMakeClean(pPg);
                   41039:   }
                   41040: 
                   41041:   return pager_error(pPager, rc); 
                   41042: }
                   41043: 
                   41044: 
                   41045: /*
                   41046: ** Allocate and initialize a new Pager object and put a pointer to it
                   41047: ** in *ppPager. The pager should eventually be freed by passing it
                   41048: ** to sqlite3PagerClose().
                   41049: **
                   41050: ** The zFilename argument is the path to the database file to open.
                   41051: ** If zFilename is NULL then a randomly-named temporary file is created
                   41052: ** and used as the file to be cached. Temporary files are be deleted
                   41053: ** automatically when they are closed. If zFilename is ":memory:" then 
                   41054: ** all information is held in cache. It is never written to disk. 
                   41055: ** This can be used to implement an in-memory database.
                   41056: **
                   41057: ** The nExtra parameter specifies the number of bytes of space allocated
                   41058: ** along with each page reference. This space is available to the user
                   41059: ** via the sqlite3PagerGetExtra() API.
                   41060: **
                   41061: ** The flags argument is used to specify properties that affect the
                   41062: ** operation of the pager. It should be passed some bitwise combination
                   41063: ** of the PAGER_OMIT_JOURNAL and PAGER_NO_READLOCK flags.
                   41064: **
                   41065: ** The vfsFlags parameter is a bitmask to pass to the flags parameter
                   41066: ** of the xOpen() method of the supplied VFS when opening files. 
                   41067: **
                   41068: ** If the pager object is allocated and the specified file opened 
                   41069: ** successfully, SQLITE_OK is returned and *ppPager set to point to
                   41070: ** the new pager object. If an error occurs, *ppPager is set to NULL
                   41071: ** and error code returned. This function may return SQLITE_NOMEM
                   41072: ** (sqlite3Malloc() is used to allocate memory), SQLITE_CANTOPEN or 
                   41073: ** various SQLITE_IO_XXX errors.
                   41074: */
                   41075: SQLITE_PRIVATE int sqlite3PagerOpen(
                   41076:   sqlite3_vfs *pVfs,       /* The virtual file system to use */
                   41077:   Pager **ppPager,         /* OUT: Return the Pager structure here */
                   41078:   const char *zFilename,   /* Name of the database file to open */
                   41079:   int nExtra,              /* Extra bytes append to each in-memory page */
                   41080:   int flags,               /* flags controlling this file */
                   41081:   int vfsFlags,            /* flags passed through to sqlite3_vfs.xOpen() */
                   41082:   void (*xReinit)(DbPage*) /* Function to reinitialize pages */
                   41083: ){
                   41084:   u8 *pPtr;
                   41085:   Pager *pPager = 0;       /* Pager object to allocate and return */
                   41086:   int rc = SQLITE_OK;      /* Return code */
                   41087:   int tempFile = 0;        /* True for temp files (incl. in-memory files) */
                   41088:   int memDb = 0;           /* True if this is an in-memory file */
                   41089:   int readOnly = 0;        /* True if this is a read-only file */
                   41090:   int journalFileSize;     /* Bytes to allocate for each journal fd */
                   41091:   char *zPathname = 0;     /* Full path to database file */
                   41092:   int nPathname = 0;       /* Number of bytes in zPathname */
                   41093:   int useJournal = (flags & PAGER_OMIT_JOURNAL)==0; /* False to omit journal */
                   41094:   int noReadlock = (flags & PAGER_NO_READLOCK)!=0;  /* True to omit read-lock */
                   41095:   int pcacheSize = sqlite3PcacheSize();       /* Bytes to allocate for PCache */
                   41096:   u32 szPageDflt = SQLITE_DEFAULT_PAGE_SIZE;  /* Default page size */
                   41097:   const char *zUri = 0;    /* URI args to copy */
                   41098:   int nUri = 0;            /* Number of bytes of URI args at *zUri */
                   41099: 
                   41100:   /* Figure out how much space is required for each journal file-handle
                   41101:   ** (there are two of them, the main journal and the sub-journal). This
                   41102:   ** is the maximum space required for an in-memory journal file handle 
                   41103:   ** and a regular journal file-handle. Note that a "regular journal-handle"
                   41104:   ** may be a wrapper capable of caching the first portion of the journal
                   41105:   ** file in memory to implement the atomic-write optimization (see 
                   41106:   ** source file journal.c).
                   41107:   */
                   41108:   if( sqlite3JournalSize(pVfs)>sqlite3MemJournalSize() ){
                   41109:     journalFileSize = ROUND8(sqlite3JournalSize(pVfs));
                   41110:   }else{
                   41111:     journalFileSize = ROUND8(sqlite3MemJournalSize());
                   41112:   }
                   41113: 
                   41114:   /* Set the output variable to NULL in case an error occurs. */
                   41115:   *ppPager = 0;
                   41116: 
                   41117: #ifndef SQLITE_OMIT_MEMORYDB
                   41118:   if( flags & PAGER_MEMORY ){
                   41119:     memDb = 1;
                   41120:     zFilename = 0;
                   41121:   }
                   41122: #endif
                   41123: 
                   41124:   /* Compute and store the full pathname in an allocated buffer pointed
                   41125:   ** to by zPathname, length nPathname. Or, if this is a temporary file,
                   41126:   ** leave both nPathname and zPathname set to 0.
                   41127:   */
                   41128:   if( zFilename && zFilename[0] ){
                   41129:     const char *z;
                   41130:     nPathname = pVfs->mxPathname+1;
                   41131:     zPathname = sqlite3Malloc(nPathname*2);
                   41132:     if( zPathname==0 ){
                   41133:       return SQLITE_NOMEM;
                   41134:     }
                   41135:     zPathname[0] = 0; /* Make sure initialized even if FullPathname() fails */
                   41136:     rc = sqlite3OsFullPathname(pVfs, zFilename, nPathname, zPathname);
                   41137:     nPathname = sqlite3Strlen30(zPathname);
                   41138:     z = zUri = &zFilename[sqlite3Strlen30(zFilename)+1];
                   41139:     while( *z ){
                   41140:       z += sqlite3Strlen30(z)+1;
                   41141:       z += sqlite3Strlen30(z)+1;
                   41142:     }
                   41143:     nUri = &z[1] - zUri;
                   41144:     if( rc==SQLITE_OK && nPathname+8>pVfs->mxPathname ){
                   41145:       /* This branch is taken when the journal path required by
                   41146:       ** the database being opened will be more than pVfs->mxPathname
                   41147:       ** bytes in length. This means the database cannot be opened,
                   41148:       ** as it will not be possible to open the journal file or even
                   41149:       ** check for a hot-journal before reading.
                   41150:       */
                   41151:       rc = SQLITE_CANTOPEN_BKPT;
                   41152:     }
                   41153:     if( rc!=SQLITE_OK ){
                   41154:       sqlite3_free(zPathname);
                   41155:       return rc;
                   41156:     }
                   41157:   }
                   41158: 
                   41159:   /* Allocate memory for the Pager structure, PCache object, the
                   41160:   ** three file descriptors, the database file name and the journal 
                   41161:   ** file name. The layout in memory is as follows:
                   41162:   **
                   41163:   **     Pager object                    (sizeof(Pager) bytes)
                   41164:   **     PCache object                   (sqlite3PcacheSize() bytes)
                   41165:   **     Database file handle            (pVfs->szOsFile bytes)
                   41166:   **     Sub-journal file handle         (journalFileSize bytes)
                   41167:   **     Main journal file handle        (journalFileSize bytes)
                   41168:   **     Database file name              (nPathname+1 bytes)
                   41169:   **     Journal file name               (nPathname+8+1 bytes)
                   41170:   */
                   41171:   pPtr = (u8 *)sqlite3MallocZero(
                   41172:     ROUND8(sizeof(*pPager)) +      /* Pager structure */
                   41173:     ROUND8(pcacheSize) +           /* PCache object */
                   41174:     ROUND8(pVfs->szOsFile) +       /* The main db file */
                   41175:     journalFileSize * 2 +          /* The two journal files */ 
                   41176:     nPathname + 1 + nUri +         /* zFilename */
                   41177:     nPathname + 8 + 1              /* zJournal */
                   41178: #ifndef SQLITE_OMIT_WAL
                   41179:     + nPathname + 4 + 1              /* zWal */
                   41180: #endif
                   41181:   );
                   41182:   assert( EIGHT_BYTE_ALIGNMENT(SQLITE_INT_TO_PTR(journalFileSize)) );
                   41183:   if( !pPtr ){
                   41184:     sqlite3_free(zPathname);
                   41185:     return SQLITE_NOMEM;
                   41186:   }
                   41187:   pPager =              (Pager*)(pPtr);
                   41188:   pPager->pPCache =    (PCache*)(pPtr += ROUND8(sizeof(*pPager)));
                   41189:   pPager->fd =   (sqlite3_file*)(pPtr += ROUND8(pcacheSize));
                   41190:   pPager->sjfd = (sqlite3_file*)(pPtr += ROUND8(pVfs->szOsFile));
                   41191:   pPager->jfd =  (sqlite3_file*)(pPtr += journalFileSize);
                   41192:   pPager->zFilename =    (char*)(pPtr += journalFileSize);
                   41193:   assert( EIGHT_BYTE_ALIGNMENT(pPager->jfd) );
                   41194: 
                   41195:   /* Fill in the Pager.zFilename and Pager.zJournal buffers, if required. */
                   41196:   if( zPathname ){
                   41197:     assert( nPathname>0 );
                   41198:     pPager->zJournal =   (char*)(pPtr += nPathname + 1 + nUri);
                   41199:     memcpy(pPager->zFilename, zPathname, nPathname);
                   41200:     memcpy(&pPager->zFilename[nPathname+1], zUri, nUri);
                   41201:     memcpy(pPager->zJournal, zPathname, nPathname);
                   41202:     memcpy(&pPager->zJournal[nPathname], "-journal", 8);
                   41203:     sqlite3FileSuffix3(pPager->zFilename, pPager->zJournal);
                   41204: #ifndef SQLITE_OMIT_WAL
                   41205:     pPager->zWal = &pPager->zJournal[nPathname+8+1];
                   41206:     memcpy(pPager->zWal, zPathname, nPathname);
                   41207:     memcpy(&pPager->zWal[nPathname], "-wal", 4);
                   41208:     sqlite3FileSuffix3(pPager->zFilename, pPager->zWal);
                   41209: #endif
                   41210:     sqlite3_free(zPathname);
                   41211:   }
                   41212:   pPager->pVfs = pVfs;
                   41213:   pPager->vfsFlags = vfsFlags;
                   41214: 
                   41215:   /* Open the pager file.
                   41216:   */
                   41217:   if( zFilename && zFilename[0] ){
                   41218:     int fout = 0;                    /* VFS flags returned by xOpen() */
                   41219:     rc = sqlite3OsOpen(pVfs, pPager->zFilename, pPager->fd, vfsFlags, &fout);
                   41220:     assert( !memDb );
                   41221:     readOnly = (fout&SQLITE_OPEN_READONLY);
                   41222: 
                   41223:     /* If the file was successfully opened for read/write access,
                   41224:     ** choose a default page size in case we have to create the
                   41225:     ** database file. The default page size is the maximum of:
                   41226:     **
                   41227:     **    + SQLITE_DEFAULT_PAGE_SIZE,
                   41228:     **    + The value returned by sqlite3OsSectorSize()
                   41229:     **    + The largest page size that can be written atomically.
                   41230:     */
                   41231:     if( rc==SQLITE_OK && !readOnly ){
                   41232:       setSectorSize(pPager);
                   41233:       assert(SQLITE_DEFAULT_PAGE_SIZE<=SQLITE_MAX_DEFAULT_PAGE_SIZE);
                   41234:       if( szPageDflt<pPager->sectorSize ){
                   41235:         if( pPager->sectorSize>SQLITE_MAX_DEFAULT_PAGE_SIZE ){
                   41236:           szPageDflt = SQLITE_MAX_DEFAULT_PAGE_SIZE;
                   41237:         }else{
                   41238:           szPageDflt = (u32)pPager->sectorSize;
                   41239:         }
                   41240:       }
                   41241: #ifdef SQLITE_ENABLE_ATOMIC_WRITE
                   41242:       {
                   41243:         int iDc = sqlite3OsDeviceCharacteristics(pPager->fd);
                   41244:         int ii;
                   41245:         assert(SQLITE_IOCAP_ATOMIC512==(512>>8));
                   41246:         assert(SQLITE_IOCAP_ATOMIC64K==(65536>>8));
                   41247:         assert(SQLITE_MAX_DEFAULT_PAGE_SIZE<=65536);
                   41248:         for(ii=szPageDflt; ii<=SQLITE_MAX_DEFAULT_PAGE_SIZE; ii=ii*2){
                   41249:           if( iDc&(SQLITE_IOCAP_ATOMIC|(ii>>8)) ){
                   41250:             szPageDflt = ii;
                   41251:           }
                   41252:         }
                   41253:       }
                   41254: #endif
                   41255:     }
                   41256:   }else{
                   41257:     /* If a temporary file is requested, it is not opened immediately.
                   41258:     ** In this case we accept the default page size and delay actually
                   41259:     ** opening the file until the first call to OsWrite().
                   41260:     **
                   41261:     ** This branch is also run for an in-memory database. An in-memory
                   41262:     ** database is the same as a temp-file that is never written out to
                   41263:     ** disk and uses an in-memory rollback journal.
                   41264:     */ 
                   41265:     tempFile = 1;
                   41266:     pPager->eState = PAGER_READER;
                   41267:     pPager->eLock = EXCLUSIVE_LOCK;
                   41268:     readOnly = (vfsFlags&SQLITE_OPEN_READONLY);
                   41269:   }
                   41270: 
                   41271:   /* The following call to PagerSetPagesize() serves to set the value of 
                   41272:   ** Pager.pageSize and to allocate the Pager.pTmpSpace buffer.
                   41273:   */
                   41274:   if( rc==SQLITE_OK ){
                   41275:     assert( pPager->memDb==0 );
                   41276:     rc = sqlite3PagerSetPagesize(pPager, &szPageDflt, -1);
                   41277:     testcase( rc!=SQLITE_OK );
                   41278:   }
                   41279: 
                   41280:   /* If an error occurred in either of the blocks above, free the 
                   41281:   ** Pager structure and close the file.
                   41282:   */
                   41283:   if( rc!=SQLITE_OK ){
                   41284:     assert( !pPager->pTmpSpace );
                   41285:     sqlite3OsClose(pPager->fd);
                   41286:     sqlite3_free(pPager);
                   41287:     return rc;
                   41288:   }
                   41289: 
                   41290:   /* Initialize the PCache object. */
                   41291:   assert( nExtra<1000 );
                   41292:   nExtra = ROUND8(nExtra);
                   41293:   sqlite3PcacheOpen(szPageDflt, nExtra, !memDb,
                   41294:                     !memDb?pagerStress:0, (void *)pPager, pPager->pPCache);
                   41295: 
                   41296:   PAGERTRACE(("OPEN %d %s\n", FILEHANDLEID(pPager->fd), pPager->zFilename));
                   41297:   IOTRACE(("OPEN %p %s\n", pPager, pPager->zFilename))
                   41298: 
                   41299:   pPager->useJournal = (u8)useJournal;
                   41300:   pPager->noReadlock = (noReadlock && readOnly) ?1:0;
                   41301:   /* pPager->stmtOpen = 0; */
                   41302:   /* pPager->stmtInUse = 0; */
                   41303:   /* pPager->nRef = 0; */
                   41304:   /* pPager->stmtSize = 0; */
                   41305:   /* pPager->stmtJSize = 0; */
                   41306:   /* pPager->nPage = 0; */
                   41307:   pPager->mxPgno = SQLITE_MAX_PAGE_COUNT;
                   41308:   /* pPager->state = PAGER_UNLOCK; */
                   41309: #if 0
                   41310:   assert( pPager->state == (tempFile ? PAGER_EXCLUSIVE : PAGER_UNLOCK) );
                   41311: #endif
                   41312:   /* pPager->errMask = 0; */
                   41313:   pPager->tempFile = (u8)tempFile;
                   41314:   assert( tempFile==PAGER_LOCKINGMODE_NORMAL 
                   41315:           || tempFile==PAGER_LOCKINGMODE_EXCLUSIVE );
                   41316:   assert( PAGER_LOCKINGMODE_EXCLUSIVE==1 );
                   41317:   pPager->exclusiveMode = (u8)tempFile; 
                   41318:   pPager->changeCountDone = pPager->tempFile;
                   41319:   pPager->memDb = (u8)memDb;
                   41320:   pPager->readOnly = (u8)readOnly;
                   41321:   assert( useJournal || pPager->tempFile );
                   41322:   pPager->noSync = pPager->tempFile;
                   41323:   pPager->fullSync = pPager->noSync ?0:1;
                   41324:   pPager->syncFlags = pPager->noSync ? 0 : SQLITE_SYNC_NORMAL;
                   41325:   pPager->ckptSyncFlags = pPager->syncFlags;
                   41326:   /* pPager->pFirst = 0; */
                   41327:   /* pPager->pFirstSynced = 0; */
                   41328:   /* pPager->pLast = 0; */
                   41329:   pPager->nExtra = (u16)nExtra;
                   41330:   pPager->journalSizeLimit = SQLITE_DEFAULT_JOURNAL_SIZE_LIMIT;
                   41331:   assert( isOpen(pPager->fd) || tempFile );
                   41332:   setSectorSize(pPager);
                   41333:   if( !useJournal ){
                   41334:     pPager->journalMode = PAGER_JOURNALMODE_OFF;
                   41335:   }else if( memDb ){
                   41336:     pPager->journalMode = PAGER_JOURNALMODE_MEMORY;
                   41337:   }
                   41338:   /* pPager->xBusyHandler = 0; */
                   41339:   /* pPager->pBusyHandlerArg = 0; */
                   41340:   pPager->xReiniter = xReinit;
                   41341:   /* memset(pPager->aHash, 0, sizeof(pPager->aHash)); */
                   41342: 
                   41343:   *ppPager = pPager;
                   41344:   return SQLITE_OK;
                   41345: }
                   41346: 
                   41347: 
                   41348: 
                   41349: /*
                   41350: ** This function is called after transitioning from PAGER_UNLOCK to
                   41351: ** PAGER_SHARED state. It tests if there is a hot journal present in
                   41352: ** the file-system for the given pager. A hot journal is one that 
                   41353: ** needs to be played back. According to this function, a hot-journal
                   41354: ** file exists if the following criteria are met:
                   41355: **
                   41356: **   * The journal file exists in the file system, and
                   41357: **   * No process holds a RESERVED or greater lock on the database file, and
                   41358: **   * The database file itself is greater than 0 bytes in size, and
                   41359: **   * The first byte of the journal file exists and is not 0x00.
                   41360: **
                   41361: ** If the current size of the database file is 0 but a journal file
                   41362: ** exists, that is probably an old journal left over from a prior
                   41363: ** database with the same name. In this case the journal file is
                   41364: ** just deleted using OsDelete, *pExists is set to 0 and SQLITE_OK
                   41365: ** is returned.
                   41366: **
                   41367: ** This routine does not check if there is a master journal filename
                   41368: ** at the end of the file. If there is, and that master journal file
                   41369: ** does not exist, then the journal file is not really hot. In this
                   41370: ** case this routine will return a false-positive. The pager_playback()
                   41371: ** routine will discover that the journal file is not really hot and 
                   41372: ** will not roll it back. 
                   41373: **
                   41374: ** If a hot-journal file is found to exist, *pExists is set to 1 and 
                   41375: ** SQLITE_OK returned. If no hot-journal file is present, *pExists is
                   41376: ** set to 0 and SQLITE_OK returned. If an IO error occurs while trying
                   41377: ** to determine whether or not a hot-journal file exists, the IO error
                   41378: ** code is returned and the value of *pExists is undefined.
                   41379: */
                   41380: static int hasHotJournal(Pager *pPager, int *pExists){
                   41381:   sqlite3_vfs * const pVfs = pPager->pVfs;
                   41382:   int rc = SQLITE_OK;           /* Return code */
                   41383:   int exists = 1;               /* True if a journal file is present */
                   41384:   int jrnlOpen = !!isOpen(pPager->jfd);
                   41385: 
                   41386:   assert( pPager->useJournal );
                   41387:   assert( isOpen(pPager->fd) );
                   41388:   assert( pPager->eState==PAGER_OPEN );
                   41389: 
                   41390:   assert( jrnlOpen==0 || ( sqlite3OsDeviceCharacteristics(pPager->jfd) &
                   41391:     SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN
                   41392:   ));
                   41393: 
                   41394:   *pExists = 0;
                   41395:   if( !jrnlOpen ){
                   41396:     rc = sqlite3OsAccess(pVfs, pPager->zJournal, SQLITE_ACCESS_EXISTS, &exists);
                   41397:   }
                   41398:   if( rc==SQLITE_OK && exists ){
                   41399:     int locked = 0;             /* True if some process holds a RESERVED lock */
                   41400: 
                   41401:     /* Race condition here:  Another process might have been holding the
                   41402:     ** the RESERVED lock and have a journal open at the sqlite3OsAccess() 
                   41403:     ** call above, but then delete the journal and drop the lock before
                   41404:     ** we get to the following sqlite3OsCheckReservedLock() call.  If that
                   41405:     ** is the case, this routine might think there is a hot journal when
                   41406:     ** in fact there is none.  This results in a false-positive which will
                   41407:     ** be dealt with by the playback routine.  Ticket #3883.
                   41408:     */
                   41409:     rc = sqlite3OsCheckReservedLock(pPager->fd, &locked);
                   41410:     if( rc==SQLITE_OK && !locked ){
                   41411:       Pgno nPage;                 /* Number of pages in database file */
                   41412: 
                   41413:       /* Check the size of the database file. If it consists of 0 pages,
                   41414:       ** then delete the journal file. See the header comment above for 
                   41415:       ** the reasoning here.  Delete the obsolete journal file under
                   41416:       ** a RESERVED lock to avoid race conditions and to avoid violating
                   41417:       ** [H33020].
                   41418:       */
                   41419:       rc = pagerPagecount(pPager, &nPage);
                   41420:       if( rc==SQLITE_OK ){
                   41421:         if( nPage==0 ){
                   41422:           sqlite3BeginBenignMalloc();
                   41423:           if( pagerLockDb(pPager, RESERVED_LOCK)==SQLITE_OK ){
                   41424:             sqlite3OsDelete(pVfs, pPager->zJournal, 0);
                   41425:             if( !pPager->exclusiveMode ) pagerUnlockDb(pPager, SHARED_LOCK);
                   41426:           }
                   41427:           sqlite3EndBenignMalloc();
                   41428:         }else{
                   41429:           /* The journal file exists and no other connection has a reserved
                   41430:           ** or greater lock on the database file. Now check that there is
                   41431:           ** at least one non-zero bytes at the start of the journal file.
                   41432:           ** If there is, then we consider this journal to be hot. If not, 
                   41433:           ** it can be ignored.
                   41434:           */
                   41435:           if( !jrnlOpen ){
                   41436:             int f = SQLITE_OPEN_READONLY|SQLITE_OPEN_MAIN_JOURNAL;
                   41437:             rc = sqlite3OsOpen(pVfs, pPager->zJournal, pPager->jfd, f, &f);
                   41438:           }
                   41439:           if( rc==SQLITE_OK ){
                   41440:             u8 first = 0;
                   41441:             rc = sqlite3OsRead(pPager->jfd, (void *)&first, 1, 0);
                   41442:             if( rc==SQLITE_IOERR_SHORT_READ ){
                   41443:               rc = SQLITE_OK;
                   41444:             }
                   41445:             if( !jrnlOpen ){
                   41446:               sqlite3OsClose(pPager->jfd);
                   41447:             }
                   41448:             *pExists = (first!=0);
                   41449:           }else if( rc==SQLITE_CANTOPEN ){
                   41450:             /* If we cannot open the rollback journal file in order to see if
                   41451:             ** its has a zero header, that might be due to an I/O error, or
                   41452:             ** it might be due to the race condition described above and in
                   41453:             ** ticket #3883.  Either way, assume that the journal is hot.
                   41454:             ** This might be a false positive.  But if it is, then the
                   41455:             ** automatic journal playback and recovery mechanism will deal
                   41456:             ** with it under an EXCLUSIVE lock where we do not need to
                   41457:             ** worry so much with race conditions.
                   41458:             */
                   41459:             *pExists = 1;
                   41460:             rc = SQLITE_OK;
                   41461:           }
                   41462:         }
                   41463:       }
                   41464:     }
                   41465:   }
                   41466: 
                   41467:   return rc;
                   41468: }
                   41469: 
                   41470: /*
                   41471: ** This function is called to obtain a shared lock on the database file.
                   41472: ** It is illegal to call sqlite3PagerAcquire() until after this function
                   41473: ** has been successfully called. If a shared-lock is already held when
                   41474: ** this function is called, it is a no-op.
                   41475: **
                   41476: ** The following operations are also performed by this function.
                   41477: **
                   41478: **   1) If the pager is currently in PAGER_OPEN state (no lock held
                   41479: **      on the database file), then an attempt is made to obtain a
                   41480: **      SHARED lock on the database file. Immediately after obtaining
                   41481: **      the SHARED lock, the file-system is checked for a hot-journal,
                   41482: **      which is played back if present. Following any hot-journal 
                   41483: **      rollback, the contents of the cache are validated by checking
                   41484: **      the 'change-counter' field of the database file header and
                   41485: **      discarded if they are found to be invalid.
                   41486: **
                   41487: **   2) If the pager is running in exclusive-mode, and there are currently
                   41488: **      no outstanding references to any pages, and is in the error state,
                   41489: **      then an attempt is made to clear the error state by discarding
                   41490: **      the contents of the page cache and rolling back any open journal
                   41491: **      file.
                   41492: **
                   41493: ** If everything is successful, SQLITE_OK is returned. If an IO error 
                   41494: ** occurs while locking the database, checking for a hot-journal file or 
                   41495: ** rolling back a journal file, the IO error code is returned.
                   41496: */
                   41497: SQLITE_PRIVATE int sqlite3PagerSharedLock(Pager *pPager){
                   41498:   int rc = SQLITE_OK;                /* Return code */
                   41499: 
                   41500:   /* This routine is only called from b-tree and only when there are no
                   41501:   ** outstanding pages. This implies that the pager state should either
                   41502:   ** be OPEN or READER. READER is only possible if the pager is or was in 
                   41503:   ** exclusive access mode.
                   41504:   */
                   41505:   assert( sqlite3PcacheRefCount(pPager->pPCache)==0 );
                   41506:   assert( assert_pager_state(pPager) );
                   41507:   assert( pPager->eState==PAGER_OPEN || pPager->eState==PAGER_READER );
                   41508:   if( NEVER(MEMDB && pPager->errCode) ){ return pPager->errCode; }
                   41509: 
                   41510:   if( !pagerUseWal(pPager) && pPager->eState==PAGER_OPEN ){
                   41511:     int bHotJournal = 1;          /* True if there exists a hot journal-file */
                   41512: 
                   41513:     assert( !MEMDB );
                   41514:     assert( pPager->noReadlock==0 || pPager->readOnly );
                   41515: 
                   41516:     if( pPager->noReadlock==0 ){
                   41517:       rc = pager_wait_on_lock(pPager, SHARED_LOCK);
                   41518:       if( rc!=SQLITE_OK ){
                   41519:         assert( pPager->eLock==NO_LOCK || pPager->eLock==UNKNOWN_LOCK );
                   41520:         goto failed;
                   41521:       }
                   41522:     }
                   41523: 
                   41524:     /* If a journal file exists, and there is no RESERVED lock on the
                   41525:     ** database file, then it either needs to be played back or deleted.
                   41526:     */
                   41527:     if( pPager->eLock<=SHARED_LOCK ){
                   41528:       rc = hasHotJournal(pPager, &bHotJournal);
                   41529:     }
                   41530:     if( rc!=SQLITE_OK ){
                   41531:       goto failed;
                   41532:     }
                   41533:     if( bHotJournal ){
                   41534:       /* Get an EXCLUSIVE lock on the database file. At this point it is
                   41535:       ** important that a RESERVED lock is not obtained on the way to the
                   41536:       ** EXCLUSIVE lock. If it were, another process might open the
                   41537:       ** database file, detect the RESERVED lock, and conclude that the
                   41538:       ** database is safe to read while this process is still rolling the 
                   41539:       ** hot-journal back.
                   41540:       ** 
                   41541:       ** Because the intermediate RESERVED lock is not requested, any
                   41542:       ** other process attempting to access the database file will get to 
                   41543:       ** this point in the code and fail to obtain its own EXCLUSIVE lock 
                   41544:       ** on the database file.
                   41545:       **
                   41546:       ** Unless the pager is in locking_mode=exclusive mode, the lock is
                   41547:       ** downgraded to SHARED_LOCK before this function returns.
                   41548:       */
                   41549:       rc = pagerLockDb(pPager, EXCLUSIVE_LOCK);
                   41550:       if( rc!=SQLITE_OK ){
                   41551:         goto failed;
                   41552:       }
                   41553:  
                   41554:       /* If it is not already open and the file exists on disk, open the 
                   41555:       ** journal for read/write access. Write access is required because 
                   41556:       ** in exclusive-access mode the file descriptor will be kept open 
                   41557:       ** and possibly used for a transaction later on. Also, write-access 
                   41558:       ** is usually required to finalize the journal in journal_mode=persist 
                   41559:       ** mode (and also for journal_mode=truncate on some systems).
                   41560:       **
                   41561:       ** If the journal does not exist, it usually means that some 
                   41562:       ** other connection managed to get in and roll it back before 
                   41563:       ** this connection obtained the exclusive lock above. Or, it 
                   41564:       ** may mean that the pager was in the error-state when this
                   41565:       ** function was called and the journal file does not exist.
                   41566:       */
                   41567:       if( !isOpen(pPager->jfd) ){
                   41568:         sqlite3_vfs * const pVfs = pPager->pVfs;
                   41569:         int bExists;              /* True if journal file exists */
                   41570:         rc = sqlite3OsAccess(
                   41571:             pVfs, pPager->zJournal, SQLITE_ACCESS_EXISTS, &bExists);
                   41572:         if( rc==SQLITE_OK && bExists ){
                   41573:           int fout = 0;
                   41574:           int f = SQLITE_OPEN_READWRITE|SQLITE_OPEN_MAIN_JOURNAL;
                   41575:           assert( !pPager->tempFile );
                   41576:           rc = sqlite3OsOpen(pVfs, pPager->zJournal, pPager->jfd, f, &fout);
                   41577:           assert( rc!=SQLITE_OK || isOpen(pPager->jfd) );
                   41578:           if( rc==SQLITE_OK && fout&SQLITE_OPEN_READONLY ){
                   41579:             rc = SQLITE_CANTOPEN_BKPT;
                   41580:             sqlite3OsClose(pPager->jfd);
                   41581:           }
                   41582:         }
                   41583:       }
                   41584:  
                   41585:       /* Playback and delete the journal.  Drop the database write
                   41586:       ** lock and reacquire the read lock. Purge the cache before
                   41587:       ** playing back the hot-journal so that we don't end up with
                   41588:       ** an inconsistent cache.  Sync the hot journal before playing
                   41589:       ** it back since the process that crashed and left the hot journal
                   41590:       ** probably did not sync it and we are required to always sync
                   41591:       ** the journal before playing it back.
                   41592:       */
                   41593:       if( isOpen(pPager->jfd) ){
                   41594:         assert( rc==SQLITE_OK );
                   41595:         rc = pagerSyncHotJournal(pPager);
                   41596:         if( rc==SQLITE_OK ){
                   41597:           rc = pager_playback(pPager, 1);
                   41598:           pPager->eState = PAGER_OPEN;
                   41599:         }
                   41600:       }else if( !pPager->exclusiveMode ){
                   41601:         pagerUnlockDb(pPager, SHARED_LOCK);
                   41602:       }
                   41603: 
                   41604:       if( rc!=SQLITE_OK ){
                   41605:         /* This branch is taken if an error occurs while trying to open
                   41606:         ** or roll back a hot-journal while holding an EXCLUSIVE lock. The
                   41607:         ** pager_unlock() routine will be called before returning to unlock
                   41608:         ** the file. If the unlock attempt fails, then Pager.eLock must be
                   41609:         ** set to UNKNOWN_LOCK (see the comment above the #define for 
                   41610:         ** UNKNOWN_LOCK above for an explanation). 
                   41611:         **
                   41612:         ** In order to get pager_unlock() to do this, set Pager.eState to
                   41613:         ** PAGER_ERROR now. This is not actually counted as a transition
                   41614:         ** to ERROR state in the state diagram at the top of this file,
                   41615:         ** since we know that the same call to pager_unlock() will very
                   41616:         ** shortly transition the pager object to the OPEN state. Calling
                   41617:         ** assert_pager_state() would fail now, as it should not be possible
                   41618:         ** to be in ERROR state when there are zero outstanding page 
                   41619:         ** references.
                   41620:         */
                   41621:         pager_error(pPager, rc);
                   41622:         goto failed;
                   41623:       }
                   41624: 
                   41625:       assert( pPager->eState==PAGER_OPEN );
                   41626:       assert( (pPager->eLock==SHARED_LOCK)
                   41627:            || (pPager->exclusiveMode && pPager->eLock>SHARED_LOCK)
                   41628:       );
                   41629:     }
                   41630: 
                   41631:     if( !pPager->tempFile 
                   41632:      && (pPager->pBackup || sqlite3PcachePagecount(pPager->pPCache)>0) 
                   41633:     ){
                   41634:       /* The shared-lock has just been acquired on the database file
                   41635:       ** and there are already pages in the cache (from a previous
                   41636:       ** read or write transaction).  Check to see if the database
                   41637:       ** has been modified.  If the database has changed, flush the
                   41638:       ** cache.
                   41639:       **
                   41640:       ** Database changes is detected by looking at 15 bytes beginning
                   41641:       ** at offset 24 into the file.  The first 4 of these 16 bytes are
                   41642:       ** a 32-bit counter that is incremented with each change.  The
                   41643:       ** other bytes change randomly with each file change when
                   41644:       ** a codec is in use.
                   41645:       ** 
                   41646:       ** There is a vanishingly small chance that a change will not be 
                   41647:       ** detected.  The chance of an undetected change is so small that
                   41648:       ** it can be neglected.
                   41649:       */
                   41650:       Pgno nPage = 0;
                   41651:       char dbFileVers[sizeof(pPager->dbFileVers)];
                   41652: 
                   41653:       rc = pagerPagecount(pPager, &nPage);
                   41654:       if( rc ) goto failed;
                   41655: 
                   41656:       if( nPage>0 ){
                   41657:         IOTRACE(("CKVERS %p %d\n", pPager, sizeof(dbFileVers)));
                   41658:         rc = sqlite3OsRead(pPager->fd, &dbFileVers, sizeof(dbFileVers), 24);
                   41659:         if( rc!=SQLITE_OK ){
                   41660:           goto failed;
                   41661:         }
                   41662:       }else{
                   41663:         memset(dbFileVers, 0, sizeof(dbFileVers));
                   41664:       }
                   41665: 
                   41666:       if( memcmp(pPager->dbFileVers, dbFileVers, sizeof(dbFileVers))!=0 ){
                   41667:         pager_reset(pPager);
                   41668:       }
                   41669:     }
                   41670: 
                   41671:     /* If there is a WAL file in the file-system, open this database in WAL
                   41672:     ** mode. Otherwise, the following function call is a no-op.
                   41673:     */
                   41674:     rc = pagerOpenWalIfPresent(pPager);
                   41675: #ifndef SQLITE_OMIT_WAL
                   41676:     assert( pPager->pWal==0 || rc==SQLITE_OK );
                   41677: #endif
                   41678:   }
                   41679: 
                   41680:   if( pagerUseWal(pPager) ){
                   41681:     assert( rc==SQLITE_OK );
                   41682:     rc = pagerBeginReadTransaction(pPager);
                   41683:   }
                   41684: 
                   41685:   if( pPager->eState==PAGER_OPEN && rc==SQLITE_OK ){
                   41686:     rc = pagerPagecount(pPager, &pPager->dbSize);
                   41687:   }
                   41688: 
                   41689:  failed:
                   41690:   if( rc!=SQLITE_OK ){
                   41691:     assert( !MEMDB );
                   41692:     pager_unlock(pPager);
                   41693:     assert( pPager->eState==PAGER_OPEN );
                   41694:   }else{
                   41695:     pPager->eState = PAGER_READER;
                   41696:   }
                   41697:   return rc;
                   41698: }
                   41699: 
                   41700: /*
                   41701: ** If the reference count has reached zero, rollback any active
                   41702: ** transaction and unlock the pager.
                   41703: **
                   41704: ** Except, in locking_mode=EXCLUSIVE when there is nothing to in
                   41705: ** the rollback journal, the unlock is not performed and there is
                   41706: ** nothing to rollback, so this routine is a no-op.
                   41707: */ 
                   41708: static void pagerUnlockIfUnused(Pager *pPager){
                   41709:   if( (sqlite3PcacheRefCount(pPager->pPCache)==0) ){
                   41710:     pagerUnlockAndRollback(pPager);
                   41711:   }
                   41712: }
                   41713: 
                   41714: /*
                   41715: ** Acquire a reference to page number pgno in pager pPager (a page
                   41716: ** reference has type DbPage*). If the requested reference is 
                   41717: ** successfully obtained, it is copied to *ppPage and SQLITE_OK returned.
                   41718: **
                   41719: ** If the requested page is already in the cache, it is returned. 
                   41720: ** Otherwise, a new page object is allocated and populated with data
                   41721: ** read from the database file. In some cases, the pcache module may
                   41722: ** choose not to allocate a new page object and may reuse an existing
                   41723: ** object with no outstanding references.
                   41724: **
                   41725: ** The extra data appended to a page is always initialized to zeros the 
                   41726: ** first time a page is loaded into memory. If the page requested is 
                   41727: ** already in the cache when this function is called, then the extra
                   41728: ** data is left as it was when the page object was last used.
                   41729: **
                   41730: ** If the database image is smaller than the requested page or if a 
                   41731: ** non-zero value is passed as the noContent parameter and the 
                   41732: ** requested page is not already stored in the cache, then no 
                   41733: ** actual disk read occurs. In this case the memory image of the 
                   41734: ** page is initialized to all zeros. 
                   41735: **
                   41736: ** If noContent is true, it means that we do not care about the contents
1.1.1.3 ! misho    41737: ** of the page. This occurs in two separate scenarios:
1.1       misho    41738: **
                   41739: **   a) When reading a free-list leaf page from the database, and
                   41740: **
                   41741: **   b) When a savepoint is being rolled back and we need to load
                   41742: **      a new page into the cache to be filled with the data read
                   41743: **      from the savepoint journal.
                   41744: **
                   41745: ** If noContent is true, then the data returned is zeroed instead of
                   41746: ** being read from the database. Additionally, the bits corresponding
                   41747: ** to pgno in Pager.pInJournal (bitvec of pages already written to the
                   41748: ** journal file) and the PagerSavepoint.pInSavepoint bitvecs of any open
                   41749: ** savepoints are set. This means if the page is made writable at any
                   41750: ** point in the future, using a call to sqlite3PagerWrite(), its contents
                   41751: ** will not be journaled. This saves IO.
                   41752: **
                   41753: ** The acquisition might fail for several reasons.  In all cases,
                   41754: ** an appropriate error code is returned and *ppPage is set to NULL.
                   41755: **
                   41756: ** See also sqlite3PagerLookup().  Both this routine and Lookup() attempt
                   41757: ** to find a page in the in-memory cache first.  If the page is not already
                   41758: ** in memory, this routine goes to disk to read it in whereas Lookup()
                   41759: ** just returns 0.  This routine acquires a read-lock the first time it
                   41760: ** has to go to disk, and could also playback an old journal if necessary.
                   41761: ** Since Lookup() never goes to disk, it never has to deal with locks
                   41762: ** or journal files.
                   41763: */
                   41764: SQLITE_PRIVATE int sqlite3PagerAcquire(
                   41765:   Pager *pPager,      /* The pager open on the database file */
                   41766:   Pgno pgno,          /* Page number to fetch */
                   41767:   DbPage **ppPage,    /* Write a pointer to the page here */
                   41768:   int noContent       /* Do not bother reading content from disk if true */
                   41769: ){
                   41770:   int rc;
                   41771:   PgHdr *pPg;
                   41772: 
                   41773:   assert( pPager->eState>=PAGER_READER );
                   41774:   assert( assert_pager_state(pPager) );
                   41775: 
                   41776:   if( pgno==0 ){
                   41777:     return SQLITE_CORRUPT_BKPT;
                   41778:   }
                   41779: 
                   41780:   /* If the pager is in the error state, return an error immediately. 
                   41781:   ** Otherwise, request the page from the PCache layer. */
                   41782:   if( pPager->errCode!=SQLITE_OK ){
                   41783:     rc = pPager->errCode;
                   41784:   }else{
                   41785:     rc = sqlite3PcacheFetch(pPager->pPCache, pgno, 1, ppPage);
                   41786:   }
                   41787: 
                   41788:   if( rc!=SQLITE_OK ){
                   41789:     /* Either the call to sqlite3PcacheFetch() returned an error or the
                   41790:     ** pager was already in the error-state when this function was called.
                   41791:     ** Set pPg to 0 and jump to the exception handler.  */
                   41792:     pPg = 0;
                   41793:     goto pager_acquire_err;
                   41794:   }
                   41795:   assert( (*ppPage)->pgno==pgno );
                   41796:   assert( (*ppPage)->pPager==pPager || (*ppPage)->pPager==0 );
                   41797: 
                   41798:   if( (*ppPage)->pPager && !noContent ){
                   41799:     /* In this case the pcache already contains an initialized copy of
                   41800:     ** the page. Return without further ado.  */
                   41801:     assert( pgno<=PAGER_MAX_PGNO && pgno!=PAGER_MJ_PGNO(pPager) );
                   41802:     PAGER_INCR(pPager->nHit);
                   41803:     return SQLITE_OK;
                   41804: 
                   41805:   }else{
                   41806:     /* The pager cache has created a new page. Its content needs to 
                   41807:     ** be initialized.  */
                   41808: 
                   41809:     PAGER_INCR(pPager->nMiss);
                   41810:     pPg = *ppPage;
                   41811:     pPg->pPager = pPager;
                   41812: 
                   41813:     /* The maximum page number is 2^31. Return SQLITE_CORRUPT if a page
                   41814:     ** number greater than this, or the unused locking-page, is requested. */
                   41815:     if( pgno>PAGER_MAX_PGNO || pgno==PAGER_MJ_PGNO(pPager) ){
                   41816:       rc = SQLITE_CORRUPT_BKPT;
                   41817:       goto pager_acquire_err;
                   41818:     }
                   41819: 
                   41820:     if( MEMDB || pPager->dbSize<pgno || noContent || !isOpen(pPager->fd) ){
                   41821:       if( pgno>pPager->mxPgno ){
                   41822:         rc = SQLITE_FULL;
                   41823:         goto pager_acquire_err;
                   41824:       }
                   41825:       if( noContent ){
                   41826:         /* Failure to set the bits in the InJournal bit-vectors is benign.
                   41827:         ** It merely means that we might do some extra work to journal a 
                   41828:         ** page that does not need to be journaled.  Nevertheless, be sure 
                   41829:         ** to test the case where a malloc error occurs while trying to set 
                   41830:         ** a bit in a bit vector.
                   41831:         */
                   41832:         sqlite3BeginBenignMalloc();
                   41833:         if( pgno<=pPager->dbOrigSize ){
                   41834:           TESTONLY( rc = ) sqlite3BitvecSet(pPager->pInJournal, pgno);
                   41835:           testcase( rc==SQLITE_NOMEM );
                   41836:         }
                   41837:         TESTONLY( rc = ) addToSavepointBitvecs(pPager, pgno);
                   41838:         testcase( rc==SQLITE_NOMEM );
                   41839:         sqlite3EndBenignMalloc();
                   41840:       }
                   41841:       memset(pPg->pData, 0, pPager->pageSize);
                   41842:       IOTRACE(("ZERO %p %d\n", pPager, pgno));
                   41843:     }else{
                   41844:       assert( pPg->pPager==pPager );
                   41845:       rc = readDbPage(pPg);
                   41846:       if( rc!=SQLITE_OK ){
                   41847:         goto pager_acquire_err;
                   41848:       }
                   41849:     }
                   41850:     pager_set_pagehash(pPg);
                   41851:   }
                   41852: 
                   41853:   return SQLITE_OK;
                   41854: 
                   41855: pager_acquire_err:
                   41856:   assert( rc!=SQLITE_OK );
                   41857:   if( pPg ){
                   41858:     sqlite3PcacheDrop(pPg);
                   41859:   }
                   41860:   pagerUnlockIfUnused(pPager);
                   41861: 
                   41862:   *ppPage = 0;
                   41863:   return rc;
                   41864: }
                   41865: 
                   41866: /*
                   41867: ** Acquire a page if it is already in the in-memory cache.  Do
                   41868: ** not read the page from disk.  Return a pointer to the page,
                   41869: ** or 0 if the page is not in cache. 
                   41870: **
                   41871: ** See also sqlite3PagerGet().  The difference between this routine
                   41872: ** and sqlite3PagerGet() is that _get() will go to the disk and read
                   41873: ** in the page if the page is not already in cache.  This routine
                   41874: ** returns NULL if the page is not in cache or if a disk I/O error 
                   41875: ** has ever happened.
                   41876: */
                   41877: SQLITE_PRIVATE DbPage *sqlite3PagerLookup(Pager *pPager, Pgno pgno){
                   41878:   PgHdr *pPg = 0;
                   41879:   assert( pPager!=0 );
                   41880:   assert( pgno!=0 );
                   41881:   assert( pPager->pPCache!=0 );
                   41882:   assert( pPager->eState>=PAGER_READER && pPager->eState!=PAGER_ERROR );
                   41883:   sqlite3PcacheFetch(pPager->pPCache, pgno, 0, &pPg);
                   41884:   return pPg;
                   41885: }
                   41886: 
                   41887: /*
                   41888: ** Release a page reference.
                   41889: **
                   41890: ** If the number of references to the page drop to zero, then the
                   41891: ** page is added to the LRU list.  When all references to all pages
                   41892: ** are released, a rollback occurs and the lock on the database is
                   41893: ** removed.
                   41894: */
                   41895: SQLITE_PRIVATE void sqlite3PagerUnref(DbPage *pPg){
                   41896:   if( pPg ){
                   41897:     Pager *pPager = pPg->pPager;
                   41898:     sqlite3PcacheRelease(pPg);
                   41899:     pagerUnlockIfUnused(pPager);
                   41900:   }
                   41901: }
                   41902: 
                   41903: /*
                   41904: ** This function is called at the start of every write transaction.
                   41905: ** There must already be a RESERVED or EXCLUSIVE lock on the database 
                   41906: ** file when this routine is called.
                   41907: **
                   41908: ** Open the journal file for pager pPager and write a journal header
                   41909: ** to the start of it. If there are active savepoints, open the sub-journal
                   41910: ** as well. This function is only used when the journal file is being 
                   41911: ** opened to write a rollback log for a transaction. It is not used 
                   41912: ** when opening a hot journal file to roll it back.
                   41913: **
                   41914: ** If the journal file is already open (as it may be in exclusive mode),
                   41915: ** then this function just writes a journal header to the start of the
                   41916: ** already open file. 
                   41917: **
                   41918: ** Whether or not the journal file is opened by this function, the
                   41919: ** Pager.pInJournal bitvec structure is allocated.
                   41920: **
                   41921: ** Return SQLITE_OK if everything is successful. Otherwise, return 
                   41922: ** SQLITE_NOMEM if the attempt to allocate Pager.pInJournal fails, or 
                   41923: ** an IO error code if opening or writing the journal file fails.
                   41924: */
                   41925: static int pager_open_journal(Pager *pPager){
                   41926:   int rc = SQLITE_OK;                        /* Return code */
                   41927:   sqlite3_vfs * const pVfs = pPager->pVfs;   /* Local cache of vfs pointer */
                   41928: 
                   41929:   assert( pPager->eState==PAGER_WRITER_LOCKED );
                   41930:   assert( assert_pager_state(pPager) );
                   41931:   assert( pPager->pInJournal==0 );
                   41932:   
                   41933:   /* If already in the error state, this function is a no-op.  But on
                   41934:   ** the other hand, this routine is never called if we are already in
                   41935:   ** an error state. */
                   41936:   if( NEVER(pPager->errCode) ) return pPager->errCode;
                   41937: 
                   41938:   if( !pagerUseWal(pPager) && pPager->journalMode!=PAGER_JOURNALMODE_OFF ){
                   41939:     pPager->pInJournal = sqlite3BitvecCreate(pPager->dbSize);
                   41940:     if( pPager->pInJournal==0 ){
                   41941:       return SQLITE_NOMEM;
                   41942:     }
                   41943:   
                   41944:     /* Open the journal file if it is not already open. */
                   41945:     if( !isOpen(pPager->jfd) ){
                   41946:       if( pPager->journalMode==PAGER_JOURNALMODE_MEMORY ){
                   41947:         sqlite3MemJournalOpen(pPager->jfd);
                   41948:       }else{
                   41949:         const int flags =                   /* VFS flags to open journal file */
                   41950:           SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE|
                   41951:           (pPager->tempFile ? 
                   41952:             (SQLITE_OPEN_DELETEONCLOSE|SQLITE_OPEN_TEMP_JOURNAL):
                   41953:             (SQLITE_OPEN_MAIN_JOURNAL)
                   41954:           );
                   41955:   #ifdef SQLITE_ENABLE_ATOMIC_WRITE
                   41956:         rc = sqlite3JournalOpen(
                   41957:             pVfs, pPager->zJournal, pPager->jfd, flags, jrnlBufferSize(pPager)
                   41958:         );
                   41959:   #else
                   41960:         rc = sqlite3OsOpen(pVfs, pPager->zJournal, pPager->jfd, flags, 0);
                   41961:   #endif
                   41962:       }
                   41963:       assert( rc!=SQLITE_OK || isOpen(pPager->jfd) );
                   41964:     }
                   41965:   
                   41966:   
                   41967:     /* Write the first journal header to the journal file and open 
                   41968:     ** the sub-journal if necessary.
                   41969:     */
                   41970:     if( rc==SQLITE_OK ){
                   41971:       /* TODO: Check if all of these are really required. */
                   41972:       pPager->nRec = 0;
                   41973:       pPager->journalOff = 0;
                   41974:       pPager->setMaster = 0;
                   41975:       pPager->journalHdr = 0;
                   41976:       rc = writeJournalHdr(pPager);
                   41977:     }
                   41978:   }
                   41979: 
                   41980:   if( rc!=SQLITE_OK ){
                   41981:     sqlite3BitvecDestroy(pPager->pInJournal);
                   41982:     pPager->pInJournal = 0;
                   41983:   }else{
                   41984:     assert( pPager->eState==PAGER_WRITER_LOCKED );
                   41985:     pPager->eState = PAGER_WRITER_CACHEMOD;
                   41986:   }
                   41987: 
                   41988:   return rc;
                   41989: }
                   41990: 
                   41991: /*
                   41992: ** Begin a write-transaction on the specified pager object. If a 
                   41993: ** write-transaction has already been opened, this function is a no-op.
                   41994: **
                   41995: ** If the exFlag argument is false, then acquire at least a RESERVED
                   41996: ** lock on the database file. If exFlag is true, then acquire at least
                   41997: ** an EXCLUSIVE lock. If such a lock is already held, no locking 
                   41998: ** functions need be called.
                   41999: **
                   42000: ** If the subjInMemory argument is non-zero, then any sub-journal opened
                   42001: ** within this transaction will be opened as an in-memory file. This
                   42002: ** has no effect if the sub-journal is already opened (as it may be when
                   42003: ** running in exclusive mode) or if the transaction does not require a
                   42004: ** sub-journal. If the subjInMemory argument is zero, then any required
                   42005: ** sub-journal is implemented in-memory if pPager is an in-memory database, 
                   42006: ** or using a temporary file otherwise.
                   42007: */
                   42008: SQLITE_PRIVATE int sqlite3PagerBegin(Pager *pPager, int exFlag, int subjInMemory){
                   42009:   int rc = SQLITE_OK;
                   42010: 
                   42011:   if( pPager->errCode ) return pPager->errCode;
                   42012:   assert( pPager->eState>=PAGER_READER && pPager->eState<PAGER_ERROR );
                   42013:   pPager->subjInMemory = (u8)subjInMemory;
                   42014: 
                   42015:   if( ALWAYS(pPager->eState==PAGER_READER) ){
                   42016:     assert( pPager->pInJournal==0 );
                   42017: 
                   42018:     if( pagerUseWal(pPager) ){
                   42019:       /* If the pager is configured to use locking_mode=exclusive, and an
                   42020:       ** exclusive lock on the database is not already held, obtain it now.
                   42021:       */
                   42022:       if( pPager->exclusiveMode && sqlite3WalExclusiveMode(pPager->pWal, -1) ){
                   42023:         rc = pagerLockDb(pPager, EXCLUSIVE_LOCK);
                   42024:         if( rc!=SQLITE_OK ){
                   42025:           return rc;
                   42026:         }
                   42027:         sqlite3WalExclusiveMode(pPager->pWal, 1);
                   42028:       }
                   42029: 
                   42030:       /* Grab the write lock on the log file. If successful, upgrade to
                   42031:       ** PAGER_RESERVED state. Otherwise, return an error code to the caller.
                   42032:       ** The busy-handler is not invoked if another connection already
                   42033:       ** holds the write-lock. If possible, the upper layer will call it.
                   42034:       */
                   42035:       rc = sqlite3WalBeginWriteTransaction(pPager->pWal);
                   42036:     }else{
                   42037:       /* Obtain a RESERVED lock on the database file. If the exFlag parameter
                   42038:       ** is true, then immediately upgrade this to an EXCLUSIVE lock. The
                   42039:       ** busy-handler callback can be used when upgrading to the EXCLUSIVE
                   42040:       ** lock, but not when obtaining the RESERVED lock.
                   42041:       */
                   42042:       rc = pagerLockDb(pPager, RESERVED_LOCK);
                   42043:       if( rc==SQLITE_OK && exFlag ){
                   42044:         rc = pager_wait_on_lock(pPager, EXCLUSIVE_LOCK);
                   42045:       }
                   42046:     }
                   42047: 
                   42048:     if( rc==SQLITE_OK ){
                   42049:       /* Change to WRITER_LOCKED state.
                   42050:       **
                   42051:       ** WAL mode sets Pager.eState to PAGER_WRITER_LOCKED or CACHEMOD
                   42052:       ** when it has an open transaction, but never to DBMOD or FINISHED.
                   42053:       ** This is because in those states the code to roll back savepoint 
                   42054:       ** transactions may copy data from the sub-journal into the database 
                   42055:       ** file as well as into the page cache. Which would be incorrect in 
                   42056:       ** WAL mode.
                   42057:       */
                   42058:       pPager->eState = PAGER_WRITER_LOCKED;
                   42059:       pPager->dbHintSize = pPager->dbSize;
                   42060:       pPager->dbFileSize = pPager->dbSize;
                   42061:       pPager->dbOrigSize = pPager->dbSize;
                   42062:       pPager->journalOff = 0;
                   42063:     }
                   42064: 
                   42065:     assert( rc==SQLITE_OK || pPager->eState==PAGER_READER );
                   42066:     assert( rc!=SQLITE_OK || pPager->eState==PAGER_WRITER_LOCKED );
                   42067:     assert( assert_pager_state(pPager) );
                   42068:   }
                   42069: 
                   42070:   PAGERTRACE(("TRANSACTION %d\n", PAGERID(pPager)));
                   42071:   return rc;
                   42072: }
                   42073: 
                   42074: /*
                   42075: ** Mark a single data page as writeable. The page is written into the 
                   42076: ** main journal or sub-journal as required. If the page is written into
                   42077: ** one of the journals, the corresponding bit is set in the 
                   42078: ** Pager.pInJournal bitvec and the PagerSavepoint.pInSavepoint bitvecs
                   42079: ** of any open savepoints as appropriate.
                   42080: */
                   42081: static int pager_write(PgHdr *pPg){
                   42082:   void *pData = pPg->pData;
                   42083:   Pager *pPager = pPg->pPager;
                   42084:   int rc = SQLITE_OK;
                   42085: 
                   42086:   /* This routine is not called unless a write-transaction has already 
                   42087:   ** been started. The journal file may or may not be open at this point.
                   42088:   ** It is never called in the ERROR state.
                   42089:   */
                   42090:   assert( pPager->eState==PAGER_WRITER_LOCKED
                   42091:        || pPager->eState==PAGER_WRITER_CACHEMOD
                   42092:        || pPager->eState==PAGER_WRITER_DBMOD
                   42093:   );
                   42094:   assert( assert_pager_state(pPager) );
                   42095: 
                   42096:   /* If an error has been previously detected, report the same error
                   42097:   ** again. This should not happen, but the check provides robustness. */
                   42098:   if( NEVER(pPager->errCode) )  return pPager->errCode;
                   42099: 
                   42100:   /* Higher-level routines never call this function if database is not
                   42101:   ** writable.  But check anyway, just for robustness. */
                   42102:   if( NEVER(pPager->readOnly) ) return SQLITE_PERM;
                   42103: 
                   42104:   CHECK_PAGE(pPg);
                   42105: 
                   42106:   /* The journal file needs to be opened. Higher level routines have already
                   42107:   ** obtained the necessary locks to begin the write-transaction, but the
                   42108:   ** rollback journal might not yet be open. Open it now if this is the case.
                   42109:   **
                   42110:   ** This is done before calling sqlite3PcacheMakeDirty() on the page. 
                   42111:   ** Otherwise, if it were done after calling sqlite3PcacheMakeDirty(), then
                   42112:   ** an error might occur and the pager would end up in WRITER_LOCKED state
                   42113:   ** with pages marked as dirty in the cache.
                   42114:   */
                   42115:   if( pPager->eState==PAGER_WRITER_LOCKED ){
                   42116:     rc = pager_open_journal(pPager);
                   42117:     if( rc!=SQLITE_OK ) return rc;
                   42118:   }
                   42119:   assert( pPager->eState>=PAGER_WRITER_CACHEMOD );
                   42120:   assert( assert_pager_state(pPager) );
                   42121: 
                   42122:   /* Mark the page as dirty.  If the page has already been written
                   42123:   ** to the journal then we can return right away.
                   42124:   */
                   42125:   sqlite3PcacheMakeDirty(pPg);
                   42126:   if( pageInJournal(pPg) && !subjRequiresPage(pPg) ){
                   42127:     assert( !pagerUseWal(pPager) );
                   42128:   }else{
                   42129:   
                   42130:     /* The transaction journal now exists and we have a RESERVED or an
                   42131:     ** EXCLUSIVE lock on the main database file.  Write the current page to
                   42132:     ** the transaction journal if it is not there already.
                   42133:     */
                   42134:     if( !pageInJournal(pPg) && !pagerUseWal(pPager) ){
                   42135:       assert( pagerUseWal(pPager)==0 );
                   42136:       if( pPg->pgno<=pPager->dbOrigSize && isOpen(pPager->jfd) ){
                   42137:         u32 cksum;
                   42138:         char *pData2;
                   42139:         i64 iOff = pPager->journalOff;
                   42140: 
                   42141:         /* We should never write to the journal file the page that
                   42142:         ** contains the database locks.  The following assert verifies
                   42143:         ** that we do not. */
                   42144:         assert( pPg->pgno!=PAGER_MJ_PGNO(pPager) );
                   42145: 
                   42146:         assert( pPager->journalHdr<=pPager->journalOff );
                   42147:         CODEC2(pPager, pData, pPg->pgno, 7, return SQLITE_NOMEM, pData2);
                   42148:         cksum = pager_cksum(pPager, (u8*)pData2);
                   42149: 
                   42150:         /* Even if an IO or diskfull error occurs while journalling the
                   42151:         ** page in the block above, set the need-sync flag for the page.
                   42152:         ** Otherwise, when the transaction is rolled back, the logic in
                   42153:         ** playback_one_page() will think that the page needs to be restored
                   42154:         ** in the database file. And if an IO error occurs while doing so,
                   42155:         ** then corruption may follow.
                   42156:         */
                   42157:         pPg->flags |= PGHDR_NEED_SYNC;
                   42158: 
                   42159:         rc = write32bits(pPager->jfd, iOff, pPg->pgno);
                   42160:         if( rc!=SQLITE_OK ) return rc;
                   42161:         rc = sqlite3OsWrite(pPager->jfd, pData2, pPager->pageSize, iOff+4);
                   42162:         if( rc!=SQLITE_OK ) return rc;
                   42163:         rc = write32bits(pPager->jfd, iOff+pPager->pageSize+4, cksum);
                   42164:         if( rc!=SQLITE_OK ) return rc;
                   42165: 
                   42166:         IOTRACE(("JOUT %p %d %lld %d\n", pPager, pPg->pgno, 
                   42167:                  pPager->journalOff, pPager->pageSize));
                   42168:         PAGER_INCR(sqlite3_pager_writej_count);
                   42169:         PAGERTRACE(("JOURNAL %d page %d needSync=%d hash(%08x)\n",
                   42170:              PAGERID(pPager), pPg->pgno, 
                   42171:              ((pPg->flags&PGHDR_NEED_SYNC)?1:0), pager_pagehash(pPg)));
                   42172: 
                   42173:         pPager->journalOff += 8 + pPager->pageSize;
                   42174:         pPager->nRec++;
                   42175:         assert( pPager->pInJournal!=0 );
                   42176:         rc = sqlite3BitvecSet(pPager->pInJournal, pPg->pgno);
                   42177:         testcase( rc==SQLITE_NOMEM );
                   42178:         assert( rc==SQLITE_OK || rc==SQLITE_NOMEM );
                   42179:         rc |= addToSavepointBitvecs(pPager, pPg->pgno);
                   42180:         if( rc!=SQLITE_OK ){
                   42181:           assert( rc==SQLITE_NOMEM );
                   42182:           return rc;
                   42183:         }
                   42184:       }else{
                   42185:         if( pPager->eState!=PAGER_WRITER_DBMOD ){
                   42186:           pPg->flags |= PGHDR_NEED_SYNC;
                   42187:         }
                   42188:         PAGERTRACE(("APPEND %d page %d needSync=%d\n",
                   42189:                 PAGERID(pPager), pPg->pgno,
                   42190:                ((pPg->flags&PGHDR_NEED_SYNC)?1:0)));
                   42191:       }
                   42192:     }
                   42193:   
                   42194:     /* If the statement journal is open and the page is not in it,
                   42195:     ** then write the current page to the statement journal.  Note that
                   42196:     ** the statement journal format differs from the standard journal format
                   42197:     ** in that it omits the checksums and the header.
                   42198:     */
                   42199:     if( subjRequiresPage(pPg) ){
                   42200:       rc = subjournalPage(pPg);
                   42201:     }
                   42202:   }
                   42203: 
                   42204:   /* Update the database size and return.
                   42205:   */
                   42206:   if( pPager->dbSize<pPg->pgno ){
                   42207:     pPager->dbSize = pPg->pgno;
                   42208:   }
                   42209:   return rc;
                   42210: }
                   42211: 
                   42212: /*
                   42213: ** Mark a data page as writeable. This routine must be called before 
                   42214: ** making changes to a page. The caller must check the return value 
                   42215: ** of this function and be careful not to change any page data unless 
                   42216: ** this routine returns SQLITE_OK.
                   42217: **
                   42218: ** The difference between this function and pager_write() is that this
                   42219: ** function also deals with the special case where 2 or more pages
                   42220: ** fit on a single disk sector. In this case all co-resident pages
                   42221: ** must have been written to the journal file before returning.
                   42222: **
                   42223: ** If an error occurs, SQLITE_NOMEM or an IO error code is returned
                   42224: ** as appropriate. Otherwise, SQLITE_OK.
                   42225: */
                   42226: SQLITE_PRIVATE int sqlite3PagerWrite(DbPage *pDbPage){
                   42227:   int rc = SQLITE_OK;
                   42228: 
                   42229:   PgHdr *pPg = pDbPage;
                   42230:   Pager *pPager = pPg->pPager;
                   42231:   Pgno nPagePerSector = (pPager->sectorSize/pPager->pageSize);
                   42232: 
                   42233:   assert( pPager->eState>=PAGER_WRITER_LOCKED );
                   42234:   assert( pPager->eState!=PAGER_ERROR );
                   42235:   assert( assert_pager_state(pPager) );
                   42236: 
                   42237:   if( nPagePerSector>1 ){
                   42238:     Pgno nPageCount;          /* Total number of pages in database file */
                   42239:     Pgno pg1;                 /* First page of the sector pPg is located on. */
                   42240:     int nPage = 0;            /* Number of pages starting at pg1 to journal */
                   42241:     int ii;                   /* Loop counter */
                   42242:     int needSync = 0;         /* True if any page has PGHDR_NEED_SYNC */
                   42243: 
                   42244:     /* Set the doNotSyncSpill flag to 1. This is because we cannot allow
                   42245:     ** a journal header to be written between the pages journaled by
                   42246:     ** this function.
                   42247:     */
                   42248:     assert( !MEMDB );
                   42249:     assert( pPager->doNotSyncSpill==0 );
                   42250:     pPager->doNotSyncSpill++;
                   42251: 
                   42252:     /* This trick assumes that both the page-size and sector-size are
                   42253:     ** an integer power of 2. It sets variable pg1 to the identifier
                   42254:     ** of the first page of the sector pPg is located on.
                   42255:     */
                   42256:     pg1 = ((pPg->pgno-1) & ~(nPagePerSector-1)) + 1;
                   42257: 
                   42258:     nPageCount = pPager->dbSize;
                   42259:     if( pPg->pgno>nPageCount ){
                   42260:       nPage = (pPg->pgno - pg1)+1;
                   42261:     }else if( (pg1+nPagePerSector-1)>nPageCount ){
                   42262:       nPage = nPageCount+1-pg1;
                   42263:     }else{
                   42264:       nPage = nPagePerSector;
                   42265:     }
                   42266:     assert(nPage>0);
                   42267:     assert(pg1<=pPg->pgno);
                   42268:     assert((pg1+nPage)>pPg->pgno);
                   42269: 
                   42270:     for(ii=0; ii<nPage && rc==SQLITE_OK; ii++){
                   42271:       Pgno pg = pg1+ii;
                   42272:       PgHdr *pPage;
                   42273:       if( pg==pPg->pgno || !sqlite3BitvecTest(pPager->pInJournal, pg) ){
                   42274:         if( pg!=PAGER_MJ_PGNO(pPager) ){
                   42275:           rc = sqlite3PagerGet(pPager, pg, &pPage);
                   42276:           if( rc==SQLITE_OK ){
                   42277:             rc = pager_write(pPage);
                   42278:             if( pPage->flags&PGHDR_NEED_SYNC ){
                   42279:               needSync = 1;
                   42280:             }
                   42281:             sqlite3PagerUnref(pPage);
                   42282:           }
                   42283:         }
                   42284:       }else if( (pPage = pager_lookup(pPager, pg))!=0 ){
                   42285:         if( pPage->flags&PGHDR_NEED_SYNC ){
                   42286:           needSync = 1;
                   42287:         }
                   42288:         sqlite3PagerUnref(pPage);
                   42289:       }
                   42290:     }
                   42291: 
                   42292:     /* If the PGHDR_NEED_SYNC flag is set for any of the nPage pages 
                   42293:     ** starting at pg1, then it needs to be set for all of them. Because
                   42294:     ** writing to any of these nPage pages may damage the others, the
                   42295:     ** journal file must contain sync()ed copies of all of them
                   42296:     ** before any of them can be written out to the database file.
                   42297:     */
                   42298:     if( rc==SQLITE_OK && needSync ){
                   42299:       assert( !MEMDB );
                   42300:       for(ii=0; ii<nPage; ii++){
                   42301:         PgHdr *pPage = pager_lookup(pPager, pg1+ii);
                   42302:         if( pPage ){
                   42303:           pPage->flags |= PGHDR_NEED_SYNC;
                   42304:           sqlite3PagerUnref(pPage);
                   42305:         }
                   42306:       }
                   42307:     }
                   42308: 
                   42309:     assert( pPager->doNotSyncSpill==1 );
                   42310:     pPager->doNotSyncSpill--;
                   42311:   }else{
                   42312:     rc = pager_write(pDbPage);
                   42313:   }
                   42314:   return rc;
                   42315: }
                   42316: 
                   42317: /*
                   42318: ** Return TRUE if the page given in the argument was previously passed
                   42319: ** to sqlite3PagerWrite().  In other words, return TRUE if it is ok
                   42320: ** to change the content of the page.
                   42321: */
                   42322: #ifndef NDEBUG
                   42323: SQLITE_PRIVATE int sqlite3PagerIswriteable(DbPage *pPg){
                   42324:   return pPg->flags&PGHDR_DIRTY;
                   42325: }
                   42326: #endif
                   42327: 
                   42328: /*
                   42329: ** A call to this routine tells the pager that it is not necessary to
                   42330: ** write the information on page pPg back to the disk, even though
                   42331: ** that page might be marked as dirty.  This happens, for example, when
                   42332: ** the page has been added as a leaf of the freelist and so its
                   42333: ** content no longer matters.
                   42334: **
                   42335: ** The overlying software layer calls this routine when all of the data
                   42336: ** on the given page is unused. The pager marks the page as clean so
                   42337: ** that it does not get written to disk.
                   42338: **
                   42339: ** Tests show that this optimization can quadruple the speed of large 
                   42340: ** DELETE operations.
                   42341: */
                   42342: SQLITE_PRIVATE void sqlite3PagerDontWrite(PgHdr *pPg){
                   42343:   Pager *pPager = pPg->pPager;
                   42344:   if( (pPg->flags&PGHDR_DIRTY) && pPager->nSavepoint==0 ){
                   42345:     PAGERTRACE(("DONT_WRITE page %d of %d\n", pPg->pgno, PAGERID(pPager)));
                   42346:     IOTRACE(("CLEAN %p %d\n", pPager, pPg->pgno))
                   42347:     pPg->flags |= PGHDR_DONT_WRITE;
                   42348:     pager_set_pagehash(pPg);
                   42349:   }
                   42350: }
                   42351: 
                   42352: /*
                   42353: ** This routine is called to increment the value of the database file 
                   42354: ** change-counter, stored as a 4-byte big-endian integer starting at 
                   42355: ** byte offset 24 of the pager file.  The secondary change counter at
                   42356: ** 92 is also updated, as is the SQLite version number at offset 96.
                   42357: **
                   42358: ** But this only happens if the pPager->changeCountDone flag is false.
                   42359: ** To avoid excess churning of page 1, the update only happens once.
                   42360: ** See also the pager_write_changecounter() routine that does an 
                   42361: ** unconditional update of the change counters.
                   42362: **
                   42363: ** If the isDirectMode flag is zero, then this is done by calling 
                   42364: ** sqlite3PagerWrite() on page 1, then modifying the contents of the
                   42365: ** page data. In this case the file will be updated when the current
                   42366: ** transaction is committed.
                   42367: **
                   42368: ** The isDirectMode flag may only be non-zero if the library was compiled
                   42369: ** with the SQLITE_ENABLE_ATOMIC_WRITE macro defined. In this case,
                   42370: ** if isDirect is non-zero, then the database file is updated directly
                   42371: ** by writing an updated version of page 1 using a call to the 
                   42372: ** sqlite3OsWrite() function.
                   42373: */
                   42374: static int pager_incr_changecounter(Pager *pPager, int isDirectMode){
                   42375:   int rc = SQLITE_OK;
                   42376: 
                   42377:   assert( pPager->eState==PAGER_WRITER_CACHEMOD
                   42378:        || pPager->eState==PAGER_WRITER_DBMOD
                   42379:   );
                   42380:   assert( assert_pager_state(pPager) );
                   42381: 
                   42382:   /* Declare and initialize constant integer 'isDirect'. If the
                   42383:   ** atomic-write optimization is enabled in this build, then isDirect
                   42384:   ** is initialized to the value passed as the isDirectMode parameter
                   42385:   ** to this function. Otherwise, it is always set to zero.
                   42386:   **
                   42387:   ** The idea is that if the atomic-write optimization is not
                   42388:   ** enabled at compile time, the compiler can omit the tests of
                   42389:   ** 'isDirect' below, as well as the block enclosed in the
                   42390:   ** "if( isDirect )" condition.
                   42391:   */
                   42392: #ifndef SQLITE_ENABLE_ATOMIC_WRITE
                   42393: # define DIRECT_MODE 0
                   42394:   assert( isDirectMode==0 );
                   42395:   UNUSED_PARAMETER(isDirectMode);
                   42396: #else
                   42397: # define DIRECT_MODE isDirectMode
                   42398: #endif
                   42399: 
                   42400:   if( !pPager->changeCountDone && pPager->dbSize>0 ){
                   42401:     PgHdr *pPgHdr;                /* Reference to page 1 */
                   42402: 
                   42403:     assert( !pPager->tempFile && isOpen(pPager->fd) );
                   42404: 
                   42405:     /* Open page 1 of the file for writing. */
                   42406:     rc = sqlite3PagerGet(pPager, 1, &pPgHdr);
                   42407:     assert( pPgHdr==0 || rc==SQLITE_OK );
                   42408: 
                   42409:     /* If page one was fetched successfully, and this function is not
                   42410:     ** operating in direct-mode, make page 1 writable.  When not in 
                   42411:     ** direct mode, page 1 is always held in cache and hence the PagerGet()
                   42412:     ** above is always successful - hence the ALWAYS on rc==SQLITE_OK.
                   42413:     */
                   42414:     if( !DIRECT_MODE && ALWAYS(rc==SQLITE_OK) ){
                   42415:       rc = sqlite3PagerWrite(pPgHdr);
                   42416:     }
                   42417: 
                   42418:     if( rc==SQLITE_OK ){
                   42419:       /* Actually do the update of the change counter */
                   42420:       pager_write_changecounter(pPgHdr);
                   42421: 
                   42422:       /* If running in direct mode, write the contents of page 1 to the file. */
                   42423:       if( DIRECT_MODE ){
                   42424:         const void *zBuf;
                   42425:         assert( pPager->dbFileSize>0 );
                   42426:         CODEC2(pPager, pPgHdr->pData, 1, 6, rc=SQLITE_NOMEM, zBuf);
                   42427:         if( rc==SQLITE_OK ){
                   42428:           rc = sqlite3OsWrite(pPager->fd, zBuf, pPager->pageSize, 0);
                   42429:         }
                   42430:         if( rc==SQLITE_OK ){
                   42431:           pPager->changeCountDone = 1;
                   42432:         }
                   42433:       }else{
                   42434:         pPager->changeCountDone = 1;
                   42435:       }
                   42436:     }
                   42437: 
                   42438:     /* Release the page reference. */
                   42439:     sqlite3PagerUnref(pPgHdr);
                   42440:   }
                   42441:   return rc;
                   42442: }
                   42443: 
                   42444: /*
                   42445: ** Sync the database file to disk. This is a no-op for in-memory databases
                   42446: ** or pages with the Pager.noSync flag set.
                   42447: **
                   42448: ** If successful, or if called on a pager for which it is a no-op, this
                   42449: ** function returns SQLITE_OK. Otherwise, an IO error code is returned.
                   42450: */
                   42451: SQLITE_PRIVATE int sqlite3PagerSync(Pager *pPager){
                   42452:   int rc = SQLITE_OK;
                   42453:   if( !pPager->noSync ){
                   42454:     assert( !MEMDB );
                   42455:     rc = sqlite3OsSync(pPager->fd, pPager->syncFlags);
                   42456:   }else if( isOpen(pPager->fd) ){
                   42457:     assert( !MEMDB );
                   42458:     sqlite3OsFileControl(pPager->fd, SQLITE_FCNTL_SYNC_OMITTED, (void *)&rc);
                   42459:   }
                   42460:   return rc;
                   42461: }
                   42462: 
                   42463: /*
                   42464: ** This function may only be called while a write-transaction is active in
                   42465: ** rollback. If the connection is in WAL mode, this call is a no-op. 
                   42466: ** Otherwise, if the connection does not already have an EXCLUSIVE lock on 
                   42467: ** the database file, an attempt is made to obtain one.
                   42468: **
                   42469: ** If the EXCLUSIVE lock is already held or the attempt to obtain it is
                   42470: ** successful, or the connection is in WAL mode, SQLITE_OK is returned.
                   42471: ** Otherwise, either SQLITE_BUSY or an SQLITE_IOERR_XXX error code is 
                   42472: ** returned.
                   42473: */
                   42474: SQLITE_PRIVATE int sqlite3PagerExclusiveLock(Pager *pPager){
                   42475:   int rc = SQLITE_OK;
                   42476:   assert( pPager->eState==PAGER_WRITER_CACHEMOD 
                   42477:        || pPager->eState==PAGER_WRITER_DBMOD 
                   42478:        || pPager->eState==PAGER_WRITER_LOCKED 
                   42479:   );
                   42480:   assert( assert_pager_state(pPager) );
                   42481:   if( 0==pagerUseWal(pPager) ){
                   42482:     rc = pager_wait_on_lock(pPager, EXCLUSIVE_LOCK);
                   42483:   }
                   42484:   return rc;
                   42485: }
                   42486: 
                   42487: /*
                   42488: ** Sync the database file for the pager pPager. zMaster points to the name
                   42489: ** of a master journal file that should be written into the individual
                   42490: ** journal file. zMaster may be NULL, which is interpreted as no master
                   42491: ** journal (a single database transaction).
                   42492: **
                   42493: ** This routine ensures that:
                   42494: **
                   42495: **   * The database file change-counter is updated,
                   42496: **   * the journal is synced (unless the atomic-write optimization is used),
                   42497: **   * all dirty pages are written to the database file, 
                   42498: **   * the database file is truncated (if required), and
                   42499: **   * the database file synced. 
                   42500: **
                   42501: ** The only thing that remains to commit the transaction is to finalize 
                   42502: ** (delete, truncate or zero the first part of) the journal file (or 
                   42503: ** delete the master journal file if specified).
                   42504: **
                   42505: ** Note that if zMaster==NULL, this does not overwrite a previous value
                   42506: ** passed to an sqlite3PagerCommitPhaseOne() call.
                   42507: **
                   42508: ** If the final parameter - noSync - is true, then the database file itself
                   42509: ** is not synced. The caller must call sqlite3PagerSync() directly to
                   42510: ** sync the database file before calling CommitPhaseTwo() to delete the
                   42511: ** journal file in this case.
                   42512: */
                   42513: SQLITE_PRIVATE int sqlite3PagerCommitPhaseOne(
                   42514:   Pager *pPager,                  /* Pager object */
                   42515:   const char *zMaster,            /* If not NULL, the master journal name */
                   42516:   int noSync                      /* True to omit the xSync on the db file */
                   42517: ){
                   42518:   int rc = SQLITE_OK;             /* Return code */
                   42519: 
                   42520:   assert( pPager->eState==PAGER_WRITER_LOCKED
                   42521:        || pPager->eState==PAGER_WRITER_CACHEMOD
                   42522:        || pPager->eState==PAGER_WRITER_DBMOD
                   42523:        || pPager->eState==PAGER_ERROR
                   42524:   );
                   42525:   assert( assert_pager_state(pPager) );
                   42526: 
                   42527:   /* If a prior error occurred, report that error again. */
                   42528:   if( NEVER(pPager->errCode) ) return pPager->errCode;
                   42529: 
                   42530:   PAGERTRACE(("DATABASE SYNC: File=%s zMaster=%s nSize=%d\n", 
                   42531:       pPager->zFilename, zMaster, pPager->dbSize));
                   42532: 
                   42533:   /* If no database changes have been made, return early. */
                   42534:   if( pPager->eState<PAGER_WRITER_CACHEMOD ) return SQLITE_OK;
                   42535: 
                   42536:   if( MEMDB ){
                   42537:     /* If this is an in-memory db, or no pages have been written to, or this
                   42538:     ** function has already been called, it is mostly a no-op.  However, any
                   42539:     ** backup in progress needs to be restarted.
                   42540:     */
                   42541:     sqlite3BackupRestart(pPager->pBackup);
                   42542:   }else{
                   42543:     if( pagerUseWal(pPager) ){
                   42544:       PgHdr *pList = sqlite3PcacheDirtyList(pPager->pPCache);
                   42545:       PgHdr *pPageOne = 0;
                   42546:       if( pList==0 ){
                   42547:         /* Must have at least one page for the WAL commit flag.
                   42548:         ** Ticket [2d1a5c67dfc2363e44f29d9bbd57f] 2011-05-18 */
                   42549:         rc = sqlite3PagerGet(pPager, 1, &pPageOne);
                   42550:         pList = pPageOne;
                   42551:         pList->pDirty = 0;
                   42552:       }
                   42553:       assert( rc==SQLITE_OK );
                   42554:       if( ALWAYS(pList) ){
                   42555:         rc = pagerWalFrames(pPager, pList, pPager->dbSize, 1, 
                   42556:             (pPager->fullSync ? pPager->syncFlags : 0)
                   42557:         );
                   42558:       }
                   42559:       sqlite3PagerUnref(pPageOne);
                   42560:       if( rc==SQLITE_OK ){
                   42561:         sqlite3PcacheCleanAll(pPager->pPCache);
                   42562:       }
                   42563:     }else{
                   42564:       /* The following block updates the change-counter. Exactly how it
                   42565:       ** does this depends on whether or not the atomic-update optimization
                   42566:       ** was enabled at compile time, and if this transaction meets the 
                   42567:       ** runtime criteria to use the operation: 
                   42568:       **
                   42569:       **    * The file-system supports the atomic-write property for
                   42570:       **      blocks of size page-size, and 
                   42571:       **    * This commit is not part of a multi-file transaction, and
                   42572:       **    * Exactly one page has been modified and store in the journal file.
                   42573:       **
                   42574:       ** If the optimization was not enabled at compile time, then the
                   42575:       ** pager_incr_changecounter() function is called to update the change
                   42576:       ** counter in 'indirect-mode'. If the optimization is compiled in but
                   42577:       ** is not applicable to this transaction, call sqlite3JournalCreate()
                   42578:       ** to make sure the journal file has actually been created, then call
                   42579:       ** pager_incr_changecounter() to update the change-counter in indirect
                   42580:       ** mode. 
                   42581:       **
                   42582:       ** Otherwise, if the optimization is both enabled and applicable,
                   42583:       ** then call pager_incr_changecounter() to update the change-counter
                   42584:       ** in 'direct' mode. In this case the journal file will never be
                   42585:       ** created for this transaction.
                   42586:       */
                   42587:   #ifdef SQLITE_ENABLE_ATOMIC_WRITE
                   42588:       PgHdr *pPg;
                   42589:       assert( isOpen(pPager->jfd) 
                   42590:            || pPager->journalMode==PAGER_JOURNALMODE_OFF 
                   42591:            || pPager->journalMode==PAGER_JOURNALMODE_WAL 
                   42592:       );
                   42593:       if( !zMaster && isOpen(pPager->jfd) 
                   42594:        && pPager->journalOff==jrnlBufferSize(pPager) 
                   42595:        && pPager->dbSize>=pPager->dbOrigSize
                   42596:        && (0==(pPg = sqlite3PcacheDirtyList(pPager->pPCache)) || 0==pPg->pDirty)
                   42597:       ){
                   42598:         /* Update the db file change counter via the direct-write method. The 
                   42599:         ** following call will modify the in-memory representation of page 1 
                   42600:         ** to include the updated change counter and then write page 1 
                   42601:         ** directly to the database file. Because of the atomic-write 
                   42602:         ** property of the host file-system, this is safe.
                   42603:         */
                   42604:         rc = pager_incr_changecounter(pPager, 1);
                   42605:       }else{
                   42606:         rc = sqlite3JournalCreate(pPager->jfd);
                   42607:         if( rc==SQLITE_OK ){
                   42608:           rc = pager_incr_changecounter(pPager, 0);
                   42609:         }
                   42610:       }
                   42611:   #else
                   42612:       rc = pager_incr_changecounter(pPager, 0);
                   42613:   #endif
                   42614:       if( rc!=SQLITE_OK ) goto commit_phase_one_exit;
                   42615:   
                   42616:       /* If this transaction has made the database smaller, then all pages
                   42617:       ** being discarded by the truncation must be written to the journal
                   42618:       ** file. This can only happen in auto-vacuum mode.
                   42619:       **
                   42620:       ** Before reading the pages with page numbers larger than the 
                   42621:       ** current value of Pager.dbSize, set dbSize back to the value
                   42622:       ** that it took at the start of the transaction. Otherwise, the
                   42623:       ** calls to sqlite3PagerGet() return zeroed pages instead of 
                   42624:       ** reading data from the database file.
                   42625:       */
                   42626:   #ifndef SQLITE_OMIT_AUTOVACUUM
                   42627:       if( pPager->dbSize<pPager->dbOrigSize 
                   42628:        && pPager->journalMode!=PAGER_JOURNALMODE_OFF
                   42629:       ){
                   42630:         Pgno i;                                   /* Iterator variable */
                   42631:         const Pgno iSkip = PAGER_MJ_PGNO(pPager); /* Pending lock page */
                   42632:         const Pgno dbSize = pPager->dbSize;       /* Database image size */ 
                   42633:         pPager->dbSize = pPager->dbOrigSize;
                   42634:         for( i=dbSize+1; i<=pPager->dbOrigSize; i++ ){
                   42635:           if( !sqlite3BitvecTest(pPager->pInJournal, i) && i!=iSkip ){
                   42636:             PgHdr *pPage;             /* Page to journal */
                   42637:             rc = sqlite3PagerGet(pPager, i, &pPage);
                   42638:             if( rc!=SQLITE_OK ) goto commit_phase_one_exit;
                   42639:             rc = sqlite3PagerWrite(pPage);
                   42640:             sqlite3PagerUnref(pPage);
                   42641:             if( rc!=SQLITE_OK ) goto commit_phase_one_exit;
                   42642:           }
                   42643:         }
                   42644:         pPager->dbSize = dbSize;
                   42645:       } 
                   42646:   #endif
                   42647:   
                   42648:       /* Write the master journal name into the journal file. If a master 
                   42649:       ** journal file name has already been written to the journal file, 
                   42650:       ** or if zMaster is NULL (no master journal), then this call is a no-op.
                   42651:       */
                   42652:       rc = writeMasterJournal(pPager, zMaster);
                   42653:       if( rc!=SQLITE_OK ) goto commit_phase_one_exit;
                   42654:   
                   42655:       /* Sync the journal file and write all dirty pages to the database.
                   42656:       ** If the atomic-update optimization is being used, this sync will not 
                   42657:       ** create the journal file or perform any real IO.
                   42658:       **
                   42659:       ** Because the change-counter page was just modified, unless the
                   42660:       ** atomic-update optimization is used it is almost certain that the
                   42661:       ** journal requires a sync here. However, in locking_mode=exclusive
                   42662:       ** on a system under memory pressure it is just possible that this is 
                   42663:       ** not the case. In this case it is likely enough that the redundant
                   42664:       ** xSync() call will be changed to a no-op by the OS anyhow. 
                   42665:       */
                   42666:       rc = syncJournal(pPager, 0);
                   42667:       if( rc!=SQLITE_OK ) goto commit_phase_one_exit;
                   42668:   
                   42669:       rc = pager_write_pagelist(pPager,sqlite3PcacheDirtyList(pPager->pPCache));
                   42670:       if( rc!=SQLITE_OK ){
                   42671:         assert( rc!=SQLITE_IOERR_BLOCKED );
                   42672:         goto commit_phase_one_exit;
                   42673:       }
                   42674:       sqlite3PcacheCleanAll(pPager->pPCache);
                   42675:   
                   42676:       /* If the file on disk is not the same size as the database image,
                   42677:       ** then use pager_truncate to grow or shrink the file here.
                   42678:       */
                   42679:       if( pPager->dbSize!=pPager->dbFileSize ){
                   42680:         Pgno nNew = pPager->dbSize - (pPager->dbSize==PAGER_MJ_PGNO(pPager));
                   42681:         assert( pPager->eState==PAGER_WRITER_DBMOD );
                   42682:         rc = pager_truncate(pPager, nNew);
                   42683:         if( rc!=SQLITE_OK ) goto commit_phase_one_exit;
                   42684:       }
                   42685:   
                   42686:       /* Finally, sync the database file. */
                   42687:       if( !noSync ){
                   42688:         rc = sqlite3PagerSync(pPager);
                   42689:       }
                   42690:       IOTRACE(("DBSYNC %p\n", pPager))
                   42691:     }
                   42692:   }
                   42693: 
                   42694: commit_phase_one_exit:
                   42695:   if( rc==SQLITE_OK && !pagerUseWal(pPager) ){
                   42696:     pPager->eState = PAGER_WRITER_FINISHED;
                   42697:   }
                   42698:   return rc;
                   42699: }
                   42700: 
                   42701: 
                   42702: /*
                   42703: ** When this function is called, the database file has been completely
                   42704: ** updated to reflect the changes made by the current transaction and
                   42705: ** synced to disk. The journal file still exists in the file-system 
                   42706: ** though, and if a failure occurs at this point it will eventually
                   42707: ** be used as a hot-journal and the current transaction rolled back.
                   42708: **
                   42709: ** This function finalizes the journal file, either by deleting, 
                   42710: ** truncating or partially zeroing it, so that it cannot be used 
                   42711: ** for hot-journal rollback. Once this is done the transaction is
                   42712: ** irrevocably committed.
                   42713: **
                   42714: ** If an error occurs, an IO error code is returned and the pager
                   42715: ** moves into the error state. Otherwise, SQLITE_OK is returned.
                   42716: */
                   42717: SQLITE_PRIVATE int sqlite3PagerCommitPhaseTwo(Pager *pPager){
                   42718:   int rc = SQLITE_OK;                  /* Return code */
                   42719: 
                   42720:   /* This routine should not be called if a prior error has occurred.
                   42721:   ** But if (due to a coding error elsewhere in the system) it does get
                   42722:   ** called, just return the same error code without doing anything. */
                   42723:   if( NEVER(pPager->errCode) ) return pPager->errCode;
                   42724: 
                   42725:   assert( pPager->eState==PAGER_WRITER_LOCKED
                   42726:        || pPager->eState==PAGER_WRITER_FINISHED
                   42727:        || (pagerUseWal(pPager) && pPager->eState==PAGER_WRITER_CACHEMOD)
                   42728:   );
                   42729:   assert( assert_pager_state(pPager) );
                   42730: 
                   42731:   /* An optimization. If the database was not actually modified during
                   42732:   ** this transaction, the pager is running in exclusive-mode and is
                   42733:   ** using persistent journals, then this function is a no-op.
                   42734:   **
                   42735:   ** The start of the journal file currently contains a single journal 
                   42736:   ** header with the nRec field set to 0. If such a journal is used as
                   42737:   ** a hot-journal during hot-journal rollback, 0 changes will be made
                   42738:   ** to the database file. So there is no need to zero the journal 
                   42739:   ** header. Since the pager is in exclusive mode, there is no need
                   42740:   ** to drop any locks either.
                   42741:   */
                   42742:   if( pPager->eState==PAGER_WRITER_LOCKED 
                   42743:    && pPager->exclusiveMode 
                   42744:    && pPager->journalMode==PAGER_JOURNALMODE_PERSIST
                   42745:   ){
                   42746:     assert( pPager->journalOff==JOURNAL_HDR_SZ(pPager) || !pPager->journalOff );
                   42747:     pPager->eState = PAGER_READER;
                   42748:     return SQLITE_OK;
                   42749:   }
                   42750: 
                   42751:   PAGERTRACE(("COMMIT %d\n", PAGERID(pPager)));
                   42752:   rc = pager_end_transaction(pPager, pPager->setMaster);
                   42753:   return pager_error(pPager, rc);
                   42754: }
                   42755: 
                   42756: /*
                   42757: ** If a write transaction is open, then all changes made within the 
                   42758: ** transaction are reverted and the current write-transaction is closed.
                   42759: ** The pager falls back to PAGER_READER state if successful, or PAGER_ERROR
                   42760: ** state if an error occurs.
                   42761: **
                   42762: ** If the pager is already in PAGER_ERROR state when this function is called,
                   42763: ** it returns Pager.errCode immediately. No work is performed in this case.
                   42764: **
                   42765: ** Otherwise, in rollback mode, this function performs two functions:
                   42766: **
                   42767: **   1) It rolls back the journal file, restoring all database file and 
                   42768: **      in-memory cache pages to the state they were in when the transaction
                   42769: **      was opened, and
                   42770: **
                   42771: **   2) It finalizes the journal file, so that it is not used for hot
                   42772: **      rollback at any point in the future.
                   42773: **
                   42774: ** Finalization of the journal file (task 2) is only performed if the 
                   42775: ** rollback is successful.
                   42776: **
                   42777: ** In WAL mode, all cache-entries containing data modified within the
                   42778: ** current transaction are either expelled from the cache or reverted to
                   42779: ** their pre-transaction state by re-reading data from the database or
                   42780: ** WAL files. The WAL transaction is then closed.
                   42781: */
                   42782: SQLITE_PRIVATE int sqlite3PagerRollback(Pager *pPager){
                   42783:   int rc = SQLITE_OK;                  /* Return code */
                   42784:   PAGERTRACE(("ROLLBACK %d\n", PAGERID(pPager)));
                   42785: 
                   42786:   /* PagerRollback() is a no-op if called in READER or OPEN state. If
                   42787:   ** the pager is already in the ERROR state, the rollback is not 
                   42788:   ** attempted here. Instead, the error code is returned to the caller.
                   42789:   */
                   42790:   assert( assert_pager_state(pPager) );
                   42791:   if( pPager->eState==PAGER_ERROR ) return pPager->errCode;
                   42792:   if( pPager->eState<=PAGER_READER ) return SQLITE_OK;
                   42793: 
                   42794:   if( pagerUseWal(pPager) ){
                   42795:     int rc2;
                   42796:     rc = sqlite3PagerSavepoint(pPager, SAVEPOINT_ROLLBACK, -1);
                   42797:     rc2 = pager_end_transaction(pPager, pPager->setMaster);
                   42798:     if( rc==SQLITE_OK ) rc = rc2;
                   42799:   }else if( !isOpen(pPager->jfd) || pPager->eState==PAGER_WRITER_LOCKED ){
                   42800:     int eState = pPager->eState;
                   42801:     rc = pager_end_transaction(pPager, 0);
                   42802:     if( !MEMDB && eState>PAGER_WRITER_LOCKED ){
                   42803:       /* This can happen using journal_mode=off. Move the pager to the error 
                   42804:       ** state to indicate that the contents of the cache may not be trusted.
                   42805:       ** Any active readers will get SQLITE_ABORT.
                   42806:       */
                   42807:       pPager->errCode = SQLITE_ABORT;
                   42808:       pPager->eState = PAGER_ERROR;
                   42809:       return rc;
                   42810:     }
                   42811:   }else{
                   42812:     rc = pager_playback(pPager, 0);
                   42813:   }
                   42814: 
                   42815:   assert( pPager->eState==PAGER_READER || rc!=SQLITE_OK );
                   42816:   assert( rc==SQLITE_OK || rc==SQLITE_FULL || (rc&0xFF)==SQLITE_IOERR );
                   42817: 
                   42818:   /* If an error occurs during a ROLLBACK, we can no longer trust the pager
                   42819:   ** cache. So call pager_error() on the way out to make any error persistent.
                   42820:   */
                   42821:   return pager_error(pPager, rc);
                   42822: }
                   42823: 
                   42824: /*
                   42825: ** Return TRUE if the database file is opened read-only.  Return FALSE
                   42826: ** if the database is (in theory) writable.
                   42827: */
                   42828: SQLITE_PRIVATE u8 sqlite3PagerIsreadonly(Pager *pPager){
                   42829:   return pPager->readOnly;
                   42830: }
                   42831: 
                   42832: /*
                   42833: ** Return the number of references to the pager.
                   42834: */
                   42835: SQLITE_PRIVATE int sqlite3PagerRefcount(Pager *pPager){
                   42836:   return sqlite3PcacheRefCount(pPager->pPCache);
                   42837: }
                   42838: 
                   42839: /*
                   42840: ** Return the approximate number of bytes of memory currently
                   42841: ** used by the pager and its associated cache.
                   42842: */
                   42843: SQLITE_PRIVATE int sqlite3PagerMemUsed(Pager *pPager){
                   42844:   int perPageSize = pPager->pageSize + pPager->nExtra + sizeof(PgHdr)
                   42845:                                      + 5*sizeof(void*);
                   42846:   return perPageSize*sqlite3PcachePagecount(pPager->pPCache)
                   42847:            + sqlite3MallocSize(pPager)
                   42848:            + pPager->pageSize;
                   42849: }
                   42850: 
                   42851: /*
                   42852: ** Return the number of references to the specified page.
                   42853: */
                   42854: SQLITE_PRIVATE int sqlite3PagerPageRefcount(DbPage *pPage){
                   42855:   return sqlite3PcachePageRefcount(pPage);
                   42856: }
                   42857: 
                   42858: #ifdef SQLITE_TEST
                   42859: /*
                   42860: ** This routine is used for testing and analysis only.
                   42861: */
                   42862: SQLITE_PRIVATE int *sqlite3PagerStats(Pager *pPager){
                   42863:   static int a[11];
                   42864:   a[0] = sqlite3PcacheRefCount(pPager->pPCache);
                   42865:   a[1] = sqlite3PcachePagecount(pPager->pPCache);
                   42866:   a[2] = sqlite3PcacheGetCachesize(pPager->pPCache);
                   42867:   a[3] = pPager->eState==PAGER_OPEN ? -1 : (int) pPager->dbSize;
                   42868:   a[4] = pPager->eState;
                   42869:   a[5] = pPager->errCode;
                   42870:   a[6] = pPager->nHit;
                   42871:   a[7] = pPager->nMiss;
                   42872:   a[8] = 0;  /* Used to be pPager->nOvfl */
                   42873:   a[9] = pPager->nRead;
                   42874:   a[10] = pPager->nWrite;
                   42875:   return a;
                   42876: }
                   42877: #endif
                   42878: 
                   42879: /*
                   42880: ** Return true if this is an in-memory pager.
                   42881: */
                   42882: SQLITE_PRIVATE int sqlite3PagerIsMemdb(Pager *pPager){
                   42883:   return MEMDB;
                   42884: }
                   42885: 
                   42886: /*
                   42887: ** Check that there are at least nSavepoint savepoints open. If there are
                   42888: ** currently less than nSavepoints open, then open one or more savepoints
                   42889: ** to make up the difference. If the number of savepoints is already
                   42890: ** equal to nSavepoint, then this function is a no-op.
                   42891: **
                   42892: ** If a memory allocation fails, SQLITE_NOMEM is returned. If an error 
                   42893: ** occurs while opening the sub-journal file, then an IO error code is
                   42894: ** returned. Otherwise, SQLITE_OK.
                   42895: */
                   42896: SQLITE_PRIVATE int sqlite3PagerOpenSavepoint(Pager *pPager, int nSavepoint){
                   42897:   int rc = SQLITE_OK;                       /* Return code */
                   42898:   int nCurrent = pPager->nSavepoint;        /* Current number of savepoints */
                   42899: 
                   42900:   assert( pPager->eState>=PAGER_WRITER_LOCKED );
                   42901:   assert( assert_pager_state(pPager) );
                   42902: 
                   42903:   if( nSavepoint>nCurrent && pPager->useJournal ){
                   42904:     int ii;                                 /* Iterator variable */
                   42905:     PagerSavepoint *aNew;                   /* New Pager.aSavepoint array */
                   42906: 
                   42907:     /* Grow the Pager.aSavepoint array using realloc(). Return SQLITE_NOMEM
                   42908:     ** if the allocation fails. Otherwise, zero the new portion in case a 
                   42909:     ** malloc failure occurs while populating it in the for(...) loop below.
                   42910:     */
                   42911:     aNew = (PagerSavepoint *)sqlite3Realloc(
                   42912:         pPager->aSavepoint, sizeof(PagerSavepoint)*nSavepoint
                   42913:     );
                   42914:     if( !aNew ){
                   42915:       return SQLITE_NOMEM;
                   42916:     }
                   42917:     memset(&aNew[nCurrent], 0, (nSavepoint-nCurrent) * sizeof(PagerSavepoint));
                   42918:     pPager->aSavepoint = aNew;
                   42919: 
                   42920:     /* Populate the PagerSavepoint structures just allocated. */
                   42921:     for(ii=nCurrent; ii<nSavepoint; ii++){
                   42922:       aNew[ii].nOrig = pPager->dbSize;
                   42923:       if( isOpen(pPager->jfd) && pPager->journalOff>0 ){
                   42924:         aNew[ii].iOffset = pPager->journalOff;
                   42925:       }else{
                   42926:         aNew[ii].iOffset = JOURNAL_HDR_SZ(pPager);
                   42927:       }
                   42928:       aNew[ii].iSubRec = pPager->nSubRec;
                   42929:       aNew[ii].pInSavepoint = sqlite3BitvecCreate(pPager->dbSize);
                   42930:       if( !aNew[ii].pInSavepoint ){
                   42931:         return SQLITE_NOMEM;
                   42932:       }
                   42933:       if( pagerUseWal(pPager) ){
                   42934:         sqlite3WalSavepoint(pPager->pWal, aNew[ii].aWalData);
                   42935:       }
                   42936:       pPager->nSavepoint = ii+1;
                   42937:     }
                   42938:     assert( pPager->nSavepoint==nSavepoint );
                   42939:     assertTruncateConstraint(pPager);
                   42940:   }
                   42941: 
                   42942:   return rc;
                   42943: }
                   42944: 
                   42945: /*
                   42946: ** This function is called to rollback or release (commit) a savepoint.
                   42947: ** The savepoint to release or rollback need not be the most recently 
                   42948: ** created savepoint.
                   42949: **
                   42950: ** Parameter op is always either SAVEPOINT_ROLLBACK or SAVEPOINT_RELEASE.
                   42951: ** If it is SAVEPOINT_RELEASE, then release and destroy the savepoint with
                   42952: ** index iSavepoint. If it is SAVEPOINT_ROLLBACK, then rollback all changes
                   42953: ** that have occurred since the specified savepoint was created.
                   42954: **
                   42955: ** The savepoint to rollback or release is identified by parameter 
                   42956: ** iSavepoint. A value of 0 means to operate on the outermost savepoint
                   42957: ** (the first created). A value of (Pager.nSavepoint-1) means operate
                   42958: ** on the most recently created savepoint. If iSavepoint is greater than
                   42959: ** (Pager.nSavepoint-1), then this function is a no-op.
                   42960: **
                   42961: ** If a negative value is passed to this function, then the current
                   42962: ** transaction is rolled back. This is different to calling 
                   42963: ** sqlite3PagerRollback() because this function does not terminate
                   42964: ** the transaction or unlock the database, it just restores the 
                   42965: ** contents of the database to its original state. 
                   42966: **
                   42967: ** In any case, all savepoints with an index greater than iSavepoint 
                   42968: ** are destroyed. If this is a release operation (op==SAVEPOINT_RELEASE),
                   42969: ** then savepoint iSavepoint is also destroyed.
                   42970: **
                   42971: ** This function may return SQLITE_NOMEM if a memory allocation fails,
                   42972: ** or an IO error code if an IO error occurs while rolling back a 
                   42973: ** savepoint. If no errors occur, SQLITE_OK is returned.
                   42974: */ 
                   42975: SQLITE_PRIVATE int sqlite3PagerSavepoint(Pager *pPager, int op, int iSavepoint){
                   42976:   int rc = pPager->errCode;       /* Return code */
                   42977: 
                   42978:   assert( op==SAVEPOINT_RELEASE || op==SAVEPOINT_ROLLBACK );
                   42979:   assert( iSavepoint>=0 || op==SAVEPOINT_ROLLBACK );
                   42980: 
                   42981:   if( rc==SQLITE_OK && iSavepoint<pPager->nSavepoint ){
                   42982:     int ii;            /* Iterator variable */
                   42983:     int nNew;          /* Number of remaining savepoints after this op. */
                   42984: 
                   42985:     /* Figure out how many savepoints will still be active after this
                   42986:     ** operation. Store this value in nNew. Then free resources associated 
                   42987:     ** with any savepoints that are destroyed by this operation.
                   42988:     */
                   42989:     nNew = iSavepoint + (( op==SAVEPOINT_RELEASE ) ? 0 : 1);
                   42990:     for(ii=nNew; ii<pPager->nSavepoint; ii++){
                   42991:       sqlite3BitvecDestroy(pPager->aSavepoint[ii].pInSavepoint);
                   42992:     }
                   42993:     pPager->nSavepoint = nNew;
                   42994: 
                   42995:     /* If this is a release of the outermost savepoint, truncate 
                   42996:     ** the sub-journal to zero bytes in size. */
                   42997:     if( op==SAVEPOINT_RELEASE ){
                   42998:       if( nNew==0 && isOpen(pPager->sjfd) ){
                   42999:         /* Only truncate if it is an in-memory sub-journal. */
                   43000:         if( sqlite3IsMemJournal(pPager->sjfd) ){
                   43001:           rc = sqlite3OsTruncate(pPager->sjfd, 0);
                   43002:           assert( rc==SQLITE_OK );
                   43003:         }
                   43004:         pPager->nSubRec = 0;
                   43005:       }
                   43006:     }
                   43007:     /* Else this is a rollback operation, playback the specified savepoint.
                   43008:     ** If this is a temp-file, it is possible that the journal file has
                   43009:     ** not yet been opened. In this case there have been no changes to
                   43010:     ** the database file, so the playback operation can be skipped.
                   43011:     */
                   43012:     else if( pagerUseWal(pPager) || isOpen(pPager->jfd) ){
                   43013:       PagerSavepoint *pSavepoint = (nNew==0)?0:&pPager->aSavepoint[nNew-1];
                   43014:       rc = pagerPlaybackSavepoint(pPager, pSavepoint);
                   43015:       assert(rc!=SQLITE_DONE);
                   43016:     }
                   43017:   }
                   43018: 
                   43019:   return rc;
                   43020: }
                   43021: 
                   43022: /*
                   43023: ** Return the full pathname of the database file.
                   43024: */
                   43025: SQLITE_PRIVATE const char *sqlite3PagerFilename(Pager *pPager){
                   43026:   return pPager->zFilename;
                   43027: }
                   43028: 
                   43029: /*
                   43030: ** Return the VFS structure for the pager.
                   43031: */
                   43032: SQLITE_PRIVATE const sqlite3_vfs *sqlite3PagerVfs(Pager *pPager){
                   43033:   return pPager->pVfs;
                   43034: }
                   43035: 
                   43036: /*
                   43037: ** Return the file handle for the database file associated
                   43038: ** with the pager.  This might return NULL if the file has
                   43039: ** not yet been opened.
                   43040: */
                   43041: SQLITE_PRIVATE sqlite3_file *sqlite3PagerFile(Pager *pPager){
                   43042:   return pPager->fd;
                   43043: }
                   43044: 
                   43045: /*
                   43046: ** Return the full pathname of the journal file.
                   43047: */
                   43048: SQLITE_PRIVATE const char *sqlite3PagerJournalname(Pager *pPager){
                   43049:   return pPager->zJournal;
                   43050: }
                   43051: 
                   43052: /*
                   43053: ** Return true if fsync() calls are disabled for this pager.  Return FALSE
                   43054: ** if fsync()s are executed normally.
                   43055: */
                   43056: SQLITE_PRIVATE int sqlite3PagerNosync(Pager *pPager){
                   43057:   return pPager->noSync;
                   43058: }
                   43059: 
                   43060: #ifdef SQLITE_HAS_CODEC
                   43061: /*
                   43062: ** Set or retrieve the codec for this pager
                   43063: */
                   43064: SQLITE_PRIVATE void sqlite3PagerSetCodec(
                   43065:   Pager *pPager,
                   43066:   void *(*xCodec)(void*,void*,Pgno,int),
                   43067:   void (*xCodecSizeChng)(void*,int,int),
                   43068:   void (*xCodecFree)(void*),
                   43069:   void *pCodec
                   43070: ){
                   43071:   if( pPager->xCodecFree ) pPager->xCodecFree(pPager->pCodec);
                   43072:   pPager->xCodec = pPager->memDb ? 0 : xCodec;
                   43073:   pPager->xCodecSizeChng = xCodecSizeChng;
                   43074:   pPager->xCodecFree = xCodecFree;
                   43075:   pPager->pCodec = pCodec;
                   43076:   pagerReportSize(pPager);
                   43077: }
                   43078: SQLITE_PRIVATE void *sqlite3PagerGetCodec(Pager *pPager){
                   43079:   return pPager->pCodec;
                   43080: }
                   43081: #endif
                   43082: 
                   43083: #ifndef SQLITE_OMIT_AUTOVACUUM
                   43084: /*
                   43085: ** Move the page pPg to location pgno in the file.
                   43086: **
                   43087: ** There must be no references to the page previously located at
                   43088: ** pgno (which we call pPgOld) though that page is allowed to be
                   43089: ** in cache.  If the page previously located at pgno is not already
                   43090: ** in the rollback journal, it is not put there by by this routine.
                   43091: **
                   43092: ** References to the page pPg remain valid. Updating any
                   43093: ** meta-data associated with pPg (i.e. data stored in the nExtra bytes
                   43094: ** allocated along with the page) is the responsibility of the caller.
                   43095: **
                   43096: ** A transaction must be active when this routine is called. It used to be
                   43097: ** required that a statement transaction was not active, but this restriction
                   43098: ** has been removed (CREATE INDEX needs to move a page when a statement
                   43099: ** transaction is active).
                   43100: **
                   43101: ** If the fourth argument, isCommit, is non-zero, then this page is being
                   43102: ** moved as part of a database reorganization just before the transaction 
                   43103: ** is being committed. In this case, it is guaranteed that the database page 
                   43104: ** pPg refers to will not be written to again within this transaction.
                   43105: **
                   43106: ** This function may return SQLITE_NOMEM or an IO error code if an error
                   43107: ** occurs. Otherwise, it returns SQLITE_OK.
                   43108: */
                   43109: SQLITE_PRIVATE int sqlite3PagerMovepage(Pager *pPager, DbPage *pPg, Pgno pgno, int isCommit){
                   43110:   PgHdr *pPgOld;               /* The page being overwritten. */
                   43111:   Pgno needSyncPgno = 0;       /* Old value of pPg->pgno, if sync is required */
                   43112:   int rc;                      /* Return code */
                   43113:   Pgno origPgno;               /* The original page number */
                   43114: 
                   43115:   assert( pPg->nRef>0 );
                   43116:   assert( pPager->eState==PAGER_WRITER_CACHEMOD
                   43117:        || pPager->eState==PAGER_WRITER_DBMOD
                   43118:   );
                   43119:   assert( assert_pager_state(pPager) );
                   43120: 
                   43121:   /* In order to be able to rollback, an in-memory database must journal
                   43122:   ** the page we are moving from.
                   43123:   */
                   43124:   if( MEMDB ){
                   43125:     rc = sqlite3PagerWrite(pPg);
                   43126:     if( rc ) return rc;
                   43127:   }
                   43128: 
                   43129:   /* If the page being moved is dirty and has not been saved by the latest
                   43130:   ** savepoint, then save the current contents of the page into the 
                   43131:   ** sub-journal now. This is required to handle the following scenario:
                   43132:   **
                   43133:   **   BEGIN;
                   43134:   **     <journal page X, then modify it in memory>
                   43135:   **     SAVEPOINT one;
                   43136:   **       <Move page X to location Y>
                   43137:   **     ROLLBACK TO one;
                   43138:   **
                   43139:   ** If page X were not written to the sub-journal here, it would not
                   43140:   ** be possible to restore its contents when the "ROLLBACK TO one"
                   43141:   ** statement were is processed.
                   43142:   **
                   43143:   ** subjournalPage() may need to allocate space to store pPg->pgno into
                   43144:   ** one or more savepoint bitvecs. This is the reason this function
                   43145:   ** may return SQLITE_NOMEM.
                   43146:   */
                   43147:   if( pPg->flags&PGHDR_DIRTY
                   43148:    && subjRequiresPage(pPg)
                   43149:    && SQLITE_OK!=(rc = subjournalPage(pPg))
                   43150:   ){
                   43151:     return rc;
                   43152:   }
                   43153: 
                   43154:   PAGERTRACE(("MOVE %d page %d (needSync=%d) moves to %d\n", 
                   43155:       PAGERID(pPager), pPg->pgno, (pPg->flags&PGHDR_NEED_SYNC)?1:0, pgno));
                   43156:   IOTRACE(("MOVE %p %d %d\n", pPager, pPg->pgno, pgno))
                   43157: 
                   43158:   /* If the journal needs to be sync()ed before page pPg->pgno can
                   43159:   ** be written to, store pPg->pgno in local variable needSyncPgno.
                   43160:   **
                   43161:   ** If the isCommit flag is set, there is no need to remember that
                   43162:   ** the journal needs to be sync()ed before database page pPg->pgno 
                   43163:   ** can be written to. The caller has already promised not to write to it.
                   43164:   */
                   43165:   if( (pPg->flags&PGHDR_NEED_SYNC) && !isCommit ){
                   43166:     needSyncPgno = pPg->pgno;
                   43167:     assert( pageInJournal(pPg) || pPg->pgno>pPager->dbOrigSize );
                   43168:     assert( pPg->flags&PGHDR_DIRTY );
                   43169:   }
                   43170: 
                   43171:   /* If the cache contains a page with page-number pgno, remove it
                   43172:   ** from its hash chain. Also, if the PGHDR_NEED_SYNC flag was set for 
                   43173:   ** page pgno before the 'move' operation, it needs to be retained 
                   43174:   ** for the page moved there.
                   43175:   */
                   43176:   pPg->flags &= ~PGHDR_NEED_SYNC;
                   43177:   pPgOld = pager_lookup(pPager, pgno);
                   43178:   assert( !pPgOld || pPgOld->nRef==1 );
                   43179:   if( pPgOld ){
                   43180:     pPg->flags |= (pPgOld->flags&PGHDR_NEED_SYNC);
                   43181:     if( MEMDB ){
                   43182:       /* Do not discard pages from an in-memory database since we might
                   43183:       ** need to rollback later.  Just move the page out of the way. */
                   43184:       sqlite3PcacheMove(pPgOld, pPager->dbSize+1);
                   43185:     }else{
                   43186:       sqlite3PcacheDrop(pPgOld);
                   43187:     }
                   43188:   }
                   43189: 
                   43190:   origPgno = pPg->pgno;
                   43191:   sqlite3PcacheMove(pPg, pgno);
                   43192:   sqlite3PcacheMakeDirty(pPg);
                   43193: 
                   43194:   /* For an in-memory database, make sure the original page continues
                   43195:   ** to exist, in case the transaction needs to roll back.  Use pPgOld
                   43196:   ** as the original page since it has already been allocated.
                   43197:   */
                   43198:   if( MEMDB ){
                   43199:     assert( pPgOld );
                   43200:     sqlite3PcacheMove(pPgOld, origPgno);
                   43201:     sqlite3PagerUnref(pPgOld);
                   43202:   }
                   43203: 
                   43204:   if( needSyncPgno ){
                   43205:     /* If needSyncPgno is non-zero, then the journal file needs to be 
                   43206:     ** sync()ed before any data is written to database file page needSyncPgno.
                   43207:     ** Currently, no such page exists in the page-cache and the 
                   43208:     ** "is journaled" bitvec flag has been set. This needs to be remedied by
                   43209:     ** loading the page into the pager-cache and setting the PGHDR_NEED_SYNC
                   43210:     ** flag.
                   43211:     **
                   43212:     ** If the attempt to load the page into the page-cache fails, (due
                   43213:     ** to a malloc() or IO failure), clear the bit in the pInJournal[]
                   43214:     ** array. Otherwise, if the page is loaded and written again in
                   43215:     ** this transaction, it may be written to the database file before
                   43216:     ** it is synced into the journal file. This way, it may end up in
                   43217:     ** the journal file twice, but that is not a problem.
                   43218:     */
                   43219:     PgHdr *pPgHdr;
                   43220:     rc = sqlite3PagerGet(pPager, needSyncPgno, &pPgHdr);
                   43221:     if( rc!=SQLITE_OK ){
                   43222:       if( needSyncPgno<=pPager->dbOrigSize ){
                   43223:         assert( pPager->pTmpSpace!=0 );
                   43224:         sqlite3BitvecClear(pPager->pInJournal, needSyncPgno, pPager->pTmpSpace);
                   43225:       }
                   43226:       return rc;
                   43227:     }
                   43228:     pPgHdr->flags |= PGHDR_NEED_SYNC;
                   43229:     sqlite3PcacheMakeDirty(pPgHdr);
                   43230:     sqlite3PagerUnref(pPgHdr);
                   43231:   }
                   43232: 
                   43233:   return SQLITE_OK;
                   43234: }
                   43235: #endif
                   43236: 
                   43237: /*
                   43238: ** Return a pointer to the data for the specified page.
                   43239: */
                   43240: SQLITE_PRIVATE void *sqlite3PagerGetData(DbPage *pPg){
                   43241:   assert( pPg->nRef>0 || pPg->pPager->memDb );
                   43242:   return pPg->pData;
                   43243: }
                   43244: 
                   43245: /*
                   43246: ** Return a pointer to the Pager.nExtra bytes of "extra" space 
                   43247: ** allocated along with the specified page.
                   43248: */
                   43249: SQLITE_PRIVATE void *sqlite3PagerGetExtra(DbPage *pPg){
                   43250:   return pPg->pExtra;
                   43251: }
                   43252: 
                   43253: /*
                   43254: ** Get/set the locking-mode for this pager. Parameter eMode must be one
                   43255: ** of PAGER_LOCKINGMODE_QUERY, PAGER_LOCKINGMODE_NORMAL or 
                   43256: ** PAGER_LOCKINGMODE_EXCLUSIVE. If the parameter is not _QUERY, then
                   43257: ** the locking-mode is set to the value specified.
                   43258: **
                   43259: ** The returned value is either PAGER_LOCKINGMODE_NORMAL or
                   43260: ** PAGER_LOCKINGMODE_EXCLUSIVE, indicating the current (possibly updated)
                   43261: ** locking-mode.
                   43262: */
                   43263: SQLITE_PRIVATE int sqlite3PagerLockingMode(Pager *pPager, int eMode){
                   43264:   assert( eMode==PAGER_LOCKINGMODE_QUERY
                   43265:             || eMode==PAGER_LOCKINGMODE_NORMAL
                   43266:             || eMode==PAGER_LOCKINGMODE_EXCLUSIVE );
                   43267:   assert( PAGER_LOCKINGMODE_QUERY<0 );
                   43268:   assert( PAGER_LOCKINGMODE_NORMAL>=0 && PAGER_LOCKINGMODE_EXCLUSIVE>=0 );
                   43269:   assert( pPager->exclusiveMode || 0==sqlite3WalHeapMemory(pPager->pWal) );
                   43270:   if( eMode>=0 && !pPager->tempFile && !sqlite3WalHeapMemory(pPager->pWal) ){
                   43271:     pPager->exclusiveMode = (u8)eMode;
                   43272:   }
                   43273:   return (int)pPager->exclusiveMode;
                   43274: }
                   43275: 
                   43276: /*
                   43277: ** Set the journal-mode for this pager. Parameter eMode must be one of:
                   43278: **
                   43279: **    PAGER_JOURNALMODE_DELETE
                   43280: **    PAGER_JOURNALMODE_TRUNCATE
                   43281: **    PAGER_JOURNALMODE_PERSIST
                   43282: **    PAGER_JOURNALMODE_OFF
                   43283: **    PAGER_JOURNALMODE_MEMORY
                   43284: **    PAGER_JOURNALMODE_WAL
                   43285: **
                   43286: ** The journalmode is set to the value specified if the change is allowed.
                   43287: ** The change may be disallowed for the following reasons:
                   43288: **
                   43289: **   *  An in-memory database can only have its journal_mode set to _OFF
                   43290: **      or _MEMORY.
                   43291: **
                   43292: **   *  Temporary databases cannot have _WAL journalmode.
                   43293: **
                   43294: ** The returned indicate the current (possibly updated) journal-mode.
                   43295: */
                   43296: SQLITE_PRIVATE int sqlite3PagerSetJournalMode(Pager *pPager, int eMode){
                   43297:   u8 eOld = pPager->journalMode;    /* Prior journalmode */
                   43298: 
                   43299: #ifdef SQLITE_DEBUG
                   43300:   /* The print_pager_state() routine is intended to be used by the debugger
                   43301:   ** only.  We invoke it once here to suppress a compiler warning. */
                   43302:   print_pager_state(pPager);
                   43303: #endif
                   43304: 
                   43305: 
                   43306:   /* The eMode parameter is always valid */
                   43307:   assert(      eMode==PAGER_JOURNALMODE_DELETE
                   43308:             || eMode==PAGER_JOURNALMODE_TRUNCATE
                   43309:             || eMode==PAGER_JOURNALMODE_PERSIST
                   43310:             || eMode==PAGER_JOURNALMODE_OFF 
                   43311:             || eMode==PAGER_JOURNALMODE_WAL 
                   43312:             || eMode==PAGER_JOURNALMODE_MEMORY );
                   43313: 
                   43314:   /* This routine is only called from the OP_JournalMode opcode, and
                   43315:   ** the logic there will never allow a temporary file to be changed
                   43316:   ** to WAL mode.
                   43317:   */
                   43318:   assert( pPager->tempFile==0 || eMode!=PAGER_JOURNALMODE_WAL );
                   43319: 
                   43320:   /* Do allow the journalmode of an in-memory database to be set to
                   43321:   ** anything other than MEMORY or OFF
                   43322:   */
                   43323:   if( MEMDB ){
                   43324:     assert( eOld==PAGER_JOURNALMODE_MEMORY || eOld==PAGER_JOURNALMODE_OFF );
                   43325:     if( eMode!=PAGER_JOURNALMODE_MEMORY && eMode!=PAGER_JOURNALMODE_OFF ){
                   43326:       eMode = eOld;
                   43327:     }
                   43328:   }
                   43329: 
                   43330:   if( eMode!=eOld ){
                   43331: 
                   43332:     /* Change the journal mode. */
                   43333:     assert( pPager->eState!=PAGER_ERROR );
                   43334:     pPager->journalMode = (u8)eMode;
                   43335: 
                   43336:     /* When transistioning from TRUNCATE or PERSIST to any other journal
                   43337:     ** mode except WAL, unless the pager is in locking_mode=exclusive mode,
                   43338:     ** delete the journal file.
                   43339:     */
                   43340:     assert( (PAGER_JOURNALMODE_TRUNCATE & 5)==1 );
                   43341:     assert( (PAGER_JOURNALMODE_PERSIST & 5)==1 );
                   43342:     assert( (PAGER_JOURNALMODE_DELETE & 5)==0 );
                   43343:     assert( (PAGER_JOURNALMODE_MEMORY & 5)==4 );
                   43344:     assert( (PAGER_JOURNALMODE_OFF & 5)==0 );
                   43345:     assert( (PAGER_JOURNALMODE_WAL & 5)==5 );
                   43346: 
                   43347:     assert( isOpen(pPager->fd) || pPager->exclusiveMode );
                   43348:     if( !pPager->exclusiveMode && (eOld & 5)==1 && (eMode & 1)==0 ){
                   43349: 
                   43350:       /* In this case we would like to delete the journal file. If it is
                   43351:       ** not possible, then that is not a problem. Deleting the journal file
                   43352:       ** here is an optimization only.
                   43353:       **
                   43354:       ** Before deleting the journal file, obtain a RESERVED lock on the
                   43355:       ** database file. This ensures that the journal file is not deleted
                   43356:       ** while it is in use by some other client.
                   43357:       */
                   43358:       sqlite3OsClose(pPager->jfd);
                   43359:       if( pPager->eLock>=RESERVED_LOCK ){
                   43360:         sqlite3OsDelete(pPager->pVfs, pPager->zJournal, 0);
                   43361:       }else{
                   43362:         int rc = SQLITE_OK;
                   43363:         int state = pPager->eState;
                   43364:         assert( state==PAGER_OPEN || state==PAGER_READER );
                   43365:         if( state==PAGER_OPEN ){
                   43366:           rc = sqlite3PagerSharedLock(pPager);
                   43367:         }
                   43368:         if( pPager->eState==PAGER_READER ){
                   43369:           assert( rc==SQLITE_OK );
                   43370:           rc = pagerLockDb(pPager, RESERVED_LOCK);
                   43371:         }
                   43372:         if( rc==SQLITE_OK ){
                   43373:           sqlite3OsDelete(pPager->pVfs, pPager->zJournal, 0);
                   43374:         }
                   43375:         if( rc==SQLITE_OK && state==PAGER_READER ){
                   43376:           pagerUnlockDb(pPager, SHARED_LOCK);
                   43377:         }else if( state==PAGER_OPEN ){
                   43378:           pager_unlock(pPager);
                   43379:         }
                   43380:         assert( state==pPager->eState );
                   43381:       }
                   43382:     }
                   43383:   }
                   43384: 
                   43385:   /* Return the new journal mode */
                   43386:   return (int)pPager->journalMode;
                   43387: }
                   43388: 
                   43389: /*
                   43390: ** Return the current journal mode.
                   43391: */
                   43392: SQLITE_PRIVATE int sqlite3PagerGetJournalMode(Pager *pPager){
                   43393:   return (int)pPager->journalMode;
                   43394: }
                   43395: 
                   43396: /*
                   43397: ** Return TRUE if the pager is in a state where it is OK to change the
                   43398: ** journalmode.  Journalmode changes can only happen when the database
                   43399: ** is unmodified.
                   43400: */
                   43401: SQLITE_PRIVATE int sqlite3PagerOkToChangeJournalMode(Pager *pPager){
                   43402:   assert( assert_pager_state(pPager) );
                   43403:   if( pPager->eState>=PAGER_WRITER_CACHEMOD ) return 0;
                   43404:   if( NEVER(isOpen(pPager->jfd) && pPager->journalOff>0) ) return 0;
                   43405:   return 1;
                   43406: }
                   43407: 
                   43408: /*
                   43409: ** Get/set the size-limit used for persistent journal files.
                   43410: **
                   43411: ** Setting the size limit to -1 means no limit is enforced.
                   43412: ** An attempt to set a limit smaller than -1 is a no-op.
                   43413: */
                   43414: SQLITE_PRIVATE i64 sqlite3PagerJournalSizeLimit(Pager *pPager, i64 iLimit){
                   43415:   if( iLimit>=-1 ){
                   43416:     pPager->journalSizeLimit = iLimit;
                   43417:     sqlite3WalLimit(pPager->pWal, iLimit);
                   43418:   }
                   43419:   return pPager->journalSizeLimit;
                   43420: }
                   43421: 
                   43422: /*
                   43423: ** Return a pointer to the pPager->pBackup variable. The backup module
                   43424: ** in backup.c maintains the content of this variable. This module
                   43425: ** uses it opaquely as an argument to sqlite3BackupRestart() and
                   43426: ** sqlite3BackupUpdate() only.
                   43427: */
                   43428: SQLITE_PRIVATE sqlite3_backup **sqlite3PagerBackupPtr(Pager *pPager){
                   43429:   return &pPager->pBackup;
                   43430: }
                   43431: 
                   43432: #ifndef SQLITE_OMIT_WAL
                   43433: /*
                   43434: ** This function is called when the user invokes "PRAGMA wal_checkpoint",
                   43435: ** "PRAGMA wal_blocking_checkpoint" or calls the sqlite3_wal_checkpoint()
                   43436: ** or wal_blocking_checkpoint() API functions.
                   43437: **
                   43438: ** Parameter eMode is one of SQLITE_CHECKPOINT_PASSIVE, FULL or RESTART.
                   43439: */
                   43440: SQLITE_PRIVATE int sqlite3PagerCheckpoint(Pager *pPager, int eMode, int *pnLog, int *pnCkpt){
                   43441:   int rc = SQLITE_OK;
                   43442:   if( pPager->pWal ){
                   43443:     rc = sqlite3WalCheckpoint(pPager->pWal, eMode,
                   43444:         pPager->xBusyHandler, pPager->pBusyHandlerArg,
                   43445:         pPager->ckptSyncFlags, pPager->pageSize, (u8 *)pPager->pTmpSpace,
                   43446:         pnLog, pnCkpt
                   43447:     );
                   43448:   }
                   43449:   return rc;
                   43450: }
                   43451: 
                   43452: SQLITE_PRIVATE int sqlite3PagerWalCallback(Pager *pPager){
                   43453:   return sqlite3WalCallback(pPager->pWal);
                   43454: }
                   43455: 
                   43456: /*
                   43457: ** Return true if the underlying VFS for the given pager supports the
                   43458: ** primitives necessary for write-ahead logging.
                   43459: */
                   43460: SQLITE_PRIVATE int sqlite3PagerWalSupported(Pager *pPager){
                   43461:   const sqlite3_io_methods *pMethods = pPager->fd->pMethods;
                   43462:   return pPager->exclusiveMode || (pMethods->iVersion>=2 && pMethods->xShmMap);
                   43463: }
                   43464: 
                   43465: /*
                   43466: ** Attempt to take an exclusive lock on the database file. If a PENDING lock
                   43467: ** is obtained instead, immediately release it.
                   43468: */
                   43469: static int pagerExclusiveLock(Pager *pPager){
                   43470:   int rc;                         /* Return code */
                   43471: 
                   43472:   assert( pPager->eLock==SHARED_LOCK || pPager->eLock==EXCLUSIVE_LOCK );
                   43473:   rc = pagerLockDb(pPager, EXCLUSIVE_LOCK);
                   43474:   if( rc!=SQLITE_OK ){
                   43475:     /* If the attempt to grab the exclusive lock failed, release the 
                   43476:     ** pending lock that may have been obtained instead.  */
                   43477:     pagerUnlockDb(pPager, SHARED_LOCK);
                   43478:   }
                   43479: 
                   43480:   return rc;
                   43481: }
                   43482: 
                   43483: /*
                   43484: ** Call sqlite3WalOpen() to open the WAL handle. If the pager is in 
                   43485: ** exclusive-locking mode when this function is called, take an EXCLUSIVE
                   43486: ** lock on the database file and use heap-memory to store the wal-index
                   43487: ** in. Otherwise, use the normal shared-memory.
                   43488: */
                   43489: static int pagerOpenWal(Pager *pPager){
                   43490:   int rc = SQLITE_OK;
                   43491: 
                   43492:   assert( pPager->pWal==0 && pPager->tempFile==0 );
                   43493:   assert( pPager->eLock==SHARED_LOCK || pPager->eLock==EXCLUSIVE_LOCK || pPager->noReadlock);
                   43494: 
                   43495:   /* If the pager is already in exclusive-mode, the WAL module will use 
                   43496:   ** heap-memory for the wal-index instead of the VFS shared-memory 
                   43497:   ** implementation. Take the exclusive lock now, before opening the WAL
                   43498:   ** file, to make sure this is safe.
                   43499:   */
                   43500:   if( pPager->exclusiveMode ){
                   43501:     rc = pagerExclusiveLock(pPager);
                   43502:   }
                   43503: 
                   43504:   /* Open the connection to the log file. If this operation fails, 
                   43505:   ** (e.g. due to malloc() failure), return an error code.
                   43506:   */
                   43507:   if( rc==SQLITE_OK ){
                   43508:     rc = sqlite3WalOpen(pPager->pVfs, 
                   43509:         pPager->fd, pPager->zWal, pPager->exclusiveMode,
                   43510:         pPager->journalSizeLimit, &pPager->pWal
                   43511:     );
                   43512:   }
                   43513: 
                   43514:   return rc;
                   43515: }
                   43516: 
                   43517: 
                   43518: /*
                   43519: ** The caller must be holding a SHARED lock on the database file to call
                   43520: ** this function.
                   43521: **
                   43522: ** If the pager passed as the first argument is open on a real database
                   43523: ** file (not a temp file or an in-memory database), and the WAL file
                   43524: ** is not already open, make an attempt to open it now. If successful,
                   43525: ** return SQLITE_OK. If an error occurs or the VFS used by the pager does 
                   43526: ** not support the xShmXXX() methods, return an error code. *pbOpen is
                   43527: ** not modified in either case.
                   43528: **
                   43529: ** If the pager is open on a temp-file (or in-memory database), or if
                   43530: ** the WAL file is already open, set *pbOpen to 1 and return SQLITE_OK
                   43531: ** without doing anything.
                   43532: */
                   43533: SQLITE_PRIVATE int sqlite3PagerOpenWal(
                   43534:   Pager *pPager,                  /* Pager object */
                   43535:   int *pbOpen                     /* OUT: Set to true if call is a no-op */
                   43536: ){
                   43537:   int rc = SQLITE_OK;             /* Return code */
                   43538: 
                   43539:   assert( assert_pager_state(pPager) );
                   43540:   assert( pPager->eState==PAGER_OPEN   || pbOpen );
                   43541:   assert( pPager->eState==PAGER_READER || !pbOpen );
                   43542:   assert( pbOpen==0 || *pbOpen==0 );
                   43543:   assert( pbOpen!=0 || (!pPager->tempFile && !pPager->pWal) );
                   43544: 
                   43545:   if( !pPager->tempFile && !pPager->pWal ){
                   43546:     if( !sqlite3PagerWalSupported(pPager) ) return SQLITE_CANTOPEN;
                   43547: 
                   43548:     /* Close any rollback journal previously open */
                   43549:     sqlite3OsClose(pPager->jfd);
                   43550: 
                   43551:     rc = pagerOpenWal(pPager);
                   43552:     if( rc==SQLITE_OK ){
                   43553:       pPager->journalMode = PAGER_JOURNALMODE_WAL;
                   43554:       pPager->eState = PAGER_OPEN;
                   43555:     }
                   43556:   }else{
                   43557:     *pbOpen = 1;
                   43558:   }
                   43559: 
                   43560:   return rc;
                   43561: }
                   43562: 
                   43563: /*
                   43564: ** This function is called to close the connection to the log file prior
                   43565: ** to switching from WAL to rollback mode.
                   43566: **
                   43567: ** Before closing the log file, this function attempts to take an 
                   43568: ** EXCLUSIVE lock on the database file. If this cannot be obtained, an
                   43569: ** error (SQLITE_BUSY) is returned and the log connection is not closed.
                   43570: ** If successful, the EXCLUSIVE lock is not released before returning.
                   43571: */
                   43572: SQLITE_PRIVATE int sqlite3PagerCloseWal(Pager *pPager){
                   43573:   int rc = SQLITE_OK;
                   43574: 
                   43575:   assert( pPager->journalMode==PAGER_JOURNALMODE_WAL );
                   43576: 
                   43577:   /* If the log file is not already open, but does exist in the file-system,
                   43578:   ** it may need to be checkpointed before the connection can switch to
                   43579:   ** rollback mode. Open it now so this can happen.
                   43580:   */
                   43581:   if( !pPager->pWal ){
                   43582:     int logexists = 0;
                   43583:     rc = pagerLockDb(pPager, SHARED_LOCK);
                   43584:     if( rc==SQLITE_OK ){
                   43585:       rc = sqlite3OsAccess(
                   43586:           pPager->pVfs, pPager->zWal, SQLITE_ACCESS_EXISTS, &logexists
                   43587:       );
                   43588:     }
                   43589:     if( rc==SQLITE_OK && logexists ){
                   43590:       rc = pagerOpenWal(pPager);
                   43591:     }
                   43592:   }
                   43593:     
                   43594:   /* Checkpoint and close the log. Because an EXCLUSIVE lock is held on
                   43595:   ** the database file, the log and log-summary files will be deleted.
                   43596:   */
                   43597:   if( rc==SQLITE_OK && pPager->pWal ){
                   43598:     rc = pagerExclusiveLock(pPager);
                   43599:     if( rc==SQLITE_OK ){
                   43600:       rc = sqlite3WalClose(pPager->pWal, pPager->ckptSyncFlags,
                   43601:                            pPager->pageSize, (u8*)pPager->pTmpSpace);
                   43602:       pPager->pWal = 0;
                   43603:     }
                   43604:   }
                   43605:   return rc;
                   43606: }
                   43607: 
                   43608: #ifdef SQLITE_HAS_CODEC
                   43609: /*
                   43610: ** This function is called by the wal module when writing page content
                   43611: ** into the log file.
                   43612: **
                   43613: ** This function returns a pointer to a buffer containing the encrypted
                   43614: ** page content. If a malloc fails, this function may return NULL.
                   43615: */
                   43616: SQLITE_PRIVATE void *sqlite3PagerCodec(PgHdr *pPg){
                   43617:   void *aData = 0;
                   43618:   CODEC2(pPg->pPager, pPg->pData, pPg->pgno, 6, return 0, aData);
                   43619:   return aData;
                   43620: }
                   43621: #endif /* SQLITE_HAS_CODEC */
                   43622: 
                   43623: #endif /* !SQLITE_OMIT_WAL */
                   43624: 
                   43625: #endif /* SQLITE_OMIT_DISKIO */
                   43626: 
                   43627: /************** End of pager.c ***********************************************/
                   43628: /************** Begin file wal.c *********************************************/
                   43629: /*
                   43630: ** 2010 February 1
                   43631: **
                   43632: ** The author disclaims copyright to this source code.  In place of
                   43633: ** a legal notice, here is a blessing:
                   43634: **
                   43635: **    May you do good and not evil.
                   43636: **    May you find forgiveness for yourself and forgive others.
                   43637: **    May you share freely, never taking more than you give.
                   43638: **
                   43639: *************************************************************************
                   43640: **
                   43641: ** This file contains the implementation of a write-ahead log (WAL) used in 
                   43642: ** "journal_mode=WAL" mode.
                   43643: **
                   43644: ** WRITE-AHEAD LOG (WAL) FILE FORMAT
                   43645: **
                   43646: ** A WAL file consists of a header followed by zero or more "frames".
                   43647: ** Each frame records the revised content of a single page from the
                   43648: ** database file.  All changes to the database are recorded by writing
                   43649: ** frames into the WAL.  Transactions commit when a frame is written that
                   43650: ** contains a commit marker.  A single WAL can and usually does record 
                   43651: ** multiple transactions.  Periodically, the content of the WAL is
                   43652: ** transferred back into the database file in an operation called a
                   43653: ** "checkpoint".
                   43654: **
                   43655: ** A single WAL file can be used multiple times.  In other words, the
                   43656: ** WAL can fill up with frames and then be checkpointed and then new
                   43657: ** frames can overwrite the old ones.  A WAL always grows from beginning
                   43658: ** toward the end.  Checksums and counters attached to each frame are
                   43659: ** used to determine which frames within the WAL are valid and which
                   43660: ** are leftovers from prior checkpoints.
                   43661: **
                   43662: ** The WAL header is 32 bytes in size and consists of the following eight
                   43663: ** big-endian 32-bit unsigned integer values:
                   43664: **
                   43665: **     0: Magic number.  0x377f0682 or 0x377f0683
                   43666: **     4: File format version.  Currently 3007000
                   43667: **     8: Database page size.  Example: 1024
                   43668: **    12: Checkpoint sequence number
                   43669: **    16: Salt-1, random integer incremented with each checkpoint
                   43670: **    20: Salt-2, a different random integer changing with each ckpt
                   43671: **    24: Checksum-1 (first part of checksum for first 24 bytes of header).
                   43672: **    28: Checksum-2 (second part of checksum for first 24 bytes of header).
                   43673: **
                   43674: ** Immediately following the wal-header are zero or more frames. Each
                   43675: ** frame consists of a 24-byte frame-header followed by a <page-size> bytes
                   43676: ** of page data. The frame-header is six big-endian 32-bit unsigned 
                   43677: ** integer values, as follows:
                   43678: **
                   43679: **     0: Page number.
                   43680: **     4: For commit records, the size of the database image in pages 
                   43681: **        after the commit. For all other records, zero.
                   43682: **     8: Salt-1 (copied from the header)
                   43683: **    12: Salt-2 (copied from the header)
                   43684: **    16: Checksum-1.
                   43685: **    20: Checksum-2.
                   43686: **
                   43687: ** A frame is considered valid if and only if the following conditions are
                   43688: ** true:
                   43689: **
                   43690: **    (1) The salt-1 and salt-2 values in the frame-header match
                   43691: **        salt values in the wal-header
                   43692: **
                   43693: **    (2) The checksum values in the final 8 bytes of the frame-header
                   43694: **        exactly match the checksum computed consecutively on the
                   43695: **        WAL header and the first 8 bytes and the content of all frames
                   43696: **        up to and including the current frame.
                   43697: **
                   43698: ** The checksum is computed using 32-bit big-endian integers if the
                   43699: ** magic number in the first 4 bytes of the WAL is 0x377f0683 and it
                   43700: ** is computed using little-endian if the magic number is 0x377f0682.
                   43701: ** The checksum values are always stored in the frame header in a
                   43702: ** big-endian format regardless of which byte order is used to compute
                   43703: ** the checksum.  The checksum is computed by interpreting the input as
                   43704: ** an even number of unsigned 32-bit integers: x[0] through x[N].  The
                   43705: ** algorithm used for the checksum is as follows:
                   43706: ** 
                   43707: **   for i from 0 to n-1 step 2:
                   43708: **     s0 += x[i] + s1;
                   43709: **     s1 += x[i+1] + s0;
                   43710: **   endfor
                   43711: **
                   43712: ** Note that s0 and s1 are both weighted checksums using fibonacci weights
                   43713: ** in reverse order (the largest fibonacci weight occurs on the first element
                   43714: ** of the sequence being summed.)  The s1 value spans all 32-bit 
                   43715: ** terms of the sequence whereas s0 omits the final term.
                   43716: **
                   43717: ** On a checkpoint, the WAL is first VFS.xSync-ed, then valid content of the
                   43718: ** WAL is transferred into the database, then the database is VFS.xSync-ed.
                   43719: ** The VFS.xSync operations serve as write barriers - all writes launched
                   43720: ** before the xSync must complete before any write that launches after the
                   43721: ** xSync begins.
                   43722: **
                   43723: ** After each checkpoint, the salt-1 value is incremented and the salt-2
                   43724: ** value is randomized.  This prevents old and new frames in the WAL from
                   43725: ** being considered valid at the same time and being checkpointing together
                   43726: ** following a crash.
                   43727: **
                   43728: ** READER ALGORITHM
                   43729: **
                   43730: ** To read a page from the database (call it page number P), a reader
                   43731: ** first checks the WAL to see if it contains page P.  If so, then the
                   43732: ** last valid instance of page P that is a followed by a commit frame
                   43733: ** or is a commit frame itself becomes the value read.  If the WAL
                   43734: ** contains no copies of page P that are valid and which are a commit
                   43735: ** frame or are followed by a commit frame, then page P is read from
                   43736: ** the database file.
                   43737: **
                   43738: ** To start a read transaction, the reader records the index of the last
                   43739: ** valid frame in the WAL.  The reader uses this recorded "mxFrame" value
                   43740: ** for all subsequent read operations.  New transactions can be appended
                   43741: ** to the WAL, but as long as the reader uses its original mxFrame value
                   43742: ** and ignores the newly appended content, it will see a consistent snapshot
                   43743: ** of the database from a single point in time.  This technique allows
                   43744: ** multiple concurrent readers to view different versions of the database
                   43745: ** content simultaneously.
                   43746: **
                   43747: ** The reader algorithm in the previous paragraphs works correctly, but 
                   43748: ** because frames for page P can appear anywhere within the WAL, the
                   43749: ** reader has to scan the entire WAL looking for page P frames.  If the
                   43750: ** WAL is large (multiple megabytes is typical) that scan can be slow,
                   43751: ** and read performance suffers.  To overcome this problem, a separate
                   43752: ** data structure called the wal-index is maintained to expedite the
                   43753: ** search for frames of a particular page.
                   43754: ** 
                   43755: ** WAL-INDEX FORMAT
                   43756: **
                   43757: ** Conceptually, the wal-index is shared memory, though VFS implementations
                   43758: ** might choose to implement the wal-index using a mmapped file.  Because
                   43759: ** the wal-index is shared memory, SQLite does not support journal_mode=WAL 
                   43760: ** on a network filesystem.  All users of the database must be able to
                   43761: ** share memory.
                   43762: **
                   43763: ** The wal-index is transient.  After a crash, the wal-index can (and should
                   43764: ** be) reconstructed from the original WAL file.  In fact, the VFS is required
                   43765: ** to either truncate or zero the header of the wal-index when the last
                   43766: ** connection to it closes.  Because the wal-index is transient, it can
                   43767: ** use an architecture-specific format; it does not have to be cross-platform.
                   43768: ** Hence, unlike the database and WAL file formats which store all values
                   43769: ** as big endian, the wal-index can store multi-byte values in the native
                   43770: ** byte order of the host computer.
                   43771: **
                   43772: ** The purpose of the wal-index is to answer this question quickly:  Given
                   43773: ** a page number P, return the index of the last frame for page P in the WAL,
                   43774: ** or return NULL if there are no frames for page P in the WAL.
                   43775: **
                   43776: ** The wal-index consists of a header region, followed by an one or
                   43777: ** more index blocks.  
                   43778: **
                   43779: ** The wal-index header contains the total number of frames within the WAL
                   43780: ** in the the mxFrame field.  
                   43781: **
                   43782: ** Each index block except for the first contains information on 
                   43783: ** HASHTABLE_NPAGE frames. The first index block contains information on
                   43784: ** HASHTABLE_NPAGE_ONE frames. The values of HASHTABLE_NPAGE_ONE and 
                   43785: ** HASHTABLE_NPAGE are selected so that together the wal-index header and
                   43786: ** first index block are the same size as all other index blocks in the
                   43787: ** wal-index.
                   43788: **
                   43789: ** Each index block contains two sections, a page-mapping that contains the
                   43790: ** database page number associated with each wal frame, and a hash-table 
                   43791: ** that allows readers to query an index block for a specific page number.
                   43792: ** The page-mapping is an array of HASHTABLE_NPAGE (or HASHTABLE_NPAGE_ONE
                   43793: ** for the first index block) 32-bit page numbers. The first entry in the 
                   43794: ** first index-block contains the database page number corresponding to the
                   43795: ** first frame in the WAL file. The first entry in the second index block
                   43796: ** in the WAL file corresponds to the (HASHTABLE_NPAGE_ONE+1)th frame in
                   43797: ** the log, and so on.
                   43798: **
                   43799: ** The last index block in a wal-index usually contains less than the full
                   43800: ** complement of HASHTABLE_NPAGE (or HASHTABLE_NPAGE_ONE) page-numbers,
                   43801: ** depending on the contents of the WAL file. This does not change the
                   43802: ** allocated size of the page-mapping array - the page-mapping array merely
                   43803: ** contains unused entries.
                   43804: **
                   43805: ** Even without using the hash table, the last frame for page P
                   43806: ** can be found by scanning the page-mapping sections of each index block
                   43807: ** starting with the last index block and moving toward the first, and
                   43808: ** within each index block, starting at the end and moving toward the
                   43809: ** beginning.  The first entry that equals P corresponds to the frame
                   43810: ** holding the content for that page.
                   43811: **
                   43812: ** The hash table consists of HASHTABLE_NSLOT 16-bit unsigned integers.
                   43813: ** HASHTABLE_NSLOT = 2*HASHTABLE_NPAGE, and there is one entry in the
                   43814: ** hash table for each page number in the mapping section, so the hash 
                   43815: ** table is never more than half full.  The expected number of collisions 
                   43816: ** prior to finding a match is 1.  Each entry of the hash table is an
                   43817: ** 1-based index of an entry in the mapping section of the same
                   43818: ** index block.   Let K be the 1-based index of the largest entry in
                   43819: ** the mapping section.  (For index blocks other than the last, K will
                   43820: ** always be exactly HASHTABLE_NPAGE (4096) and for the last index block
                   43821: ** K will be (mxFrame%HASHTABLE_NPAGE).)  Unused slots of the hash table
                   43822: ** contain a value of 0.
                   43823: **
                   43824: ** To look for page P in the hash table, first compute a hash iKey on
                   43825: ** P as follows:
                   43826: **
                   43827: **      iKey = (P * 383) % HASHTABLE_NSLOT
                   43828: **
                   43829: ** Then start scanning entries of the hash table, starting with iKey
                   43830: ** (wrapping around to the beginning when the end of the hash table is
                   43831: ** reached) until an unused hash slot is found. Let the first unused slot
                   43832: ** be at index iUnused.  (iUnused might be less than iKey if there was
                   43833: ** wrap-around.) Because the hash table is never more than half full,
                   43834: ** the search is guaranteed to eventually hit an unused entry.  Let 
                   43835: ** iMax be the value between iKey and iUnused, closest to iUnused,
                   43836: ** where aHash[iMax]==P.  If there is no iMax entry (if there exists
                   43837: ** no hash slot such that aHash[i]==p) then page P is not in the
                   43838: ** current index block.  Otherwise the iMax-th mapping entry of the
                   43839: ** current index block corresponds to the last entry that references 
                   43840: ** page P.
                   43841: **
                   43842: ** A hash search begins with the last index block and moves toward the
                   43843: ** first index block, looking for entries corresponding to page P.  On
                   43844: ** average, only two or three slots in each index block need to be
                   43845: ** examined in order to either find the last entry for page P, or to
                   43846: ** establish that no such entry exists in the block.  Each index block
                   43847: ** holds over 4000 entries.  So two or three index blocks are sufficient
                   43848: ** to cover a typical 10 megabyte WAL file, assuming 1K pages.  8 or 10
                   43849: ** comparisons (on average) suffice to either locate a frame in the
                   43850: ** WAL or to establish that the frame does not exist in the WAL.  This
                   43851: ** is much faster than scanning the entire 10MB WAL.
                   43852: **
                   43853: ** Note that entries are added in order of increasing K.  Hence, one
                   43854: ** reader might be using some value K0 and a second reader that started
                   43855: ** at a later time (after additional transactions were added to the WAL
                   43856: ** and to the wal-index) might be using a different value K1, where K1>K0.
                   43857: ** Both readers can use the same hash table and mapping section to get
                   43858: ** the correct result.  There may be entries in the hash table with
                   43859: ** K>K0 but to the first reader, those entries will appear to be unused
                   43860: ** slots in the hash table and so the first reader will get an answer as
                   43861: ** if no values greater than K0 had ever been inserted into the hash table
                   43862: ** in the first place - which is what reader one wants.  Meanwhile, the
                   43863: ** second reader using K1 will see additional values that were inserted
                   43864: ** later, which is exactly what reader two wants.  
                   43865: **
                   43866: ** When a rollback occurs, the value of K is decreased. Hash table entries
                   43867: ** that correspond to frames greater than the new K value are removed
                   43868: ** from the hash table at this point.
                   43869: */
                   43870: #ifndef SQLITE_OMIT_WAL
                   43871: 
                   43872: 
                   43873: /*
                   43874: ** Trace output macros
                   43875: */
                   43876: #if defined(SQLITE_TEST) && defined(SQLITE_DEBUG)
                   43877: SQLITE_PRIVATE int sqlite3WalTrace = 0;
                   43878: # define WALTRACE(X)  if(sqlite3WalTrace) sqlite3DebugPrintf X
                   43879: #else
                   43880: # define WALTRACE(X)
                   43881: #endif
                   43882: 
                   43883: /*
                   43884: ** The maximum (and only) versions of the wal and wal-index formats
                   43885: ** that may be interpreted by this version of SQLite.
                   43886: **
                   43887: ** If a client begins recovering a WAL file and finds that (a) the checksum
                   43888: ** values in the wal-header are correct and (b) the version field is not
                   43889: ** WAL_MAX_VERSION, recovery fails and SQLite returns SQLITE_CANTOPEN.
                   43890: **
                   43891: ** Similarly, if a client successfully reads a wal-index header (i.e. the 
                   43892: ** checksum test is successful) and finds that the version field is not
                   43893: ** WALINDEX_MAX_VERSION, then no read-transaction is opened and SQLite
                   43894: ** returns SQLITE_CANTOPEN.
                   43895: */
                   43896: #define WAL_MAX_VERSION      3007000
                   43897: #define WALINDEX_MAX_VERSION 3007000
                   43898: 
                   43899: /*
                   43900: ** Indices of various locking bytes.   WAL_NREADER is the number
                   43901: ** of available reader locks and should be at least 3.
                   43902: */
                   43903: #define WAL_WRITE_LOCK         0
                   43904: #define WAL_ALL_BUT_WRITE      1
                   43905: #define WAL_CKPT_LOCK          1
                   43906: #define WAL_RECOVER_LOCK       2
                   43907: #define WAL_READ_LOCK(I)       (3+(I))
                   43908: #define WAL_NREADER            (SQLITE_SHM_NLOCK-3)
                   43909: 
                   43910: 
                   43911: /* Object declarations */
                   43912: typedef struct WalIndexHdr WalIndexHdr;
                   43913: typedef struct WalIterator WalIterator;
                   43914: typedef struct WalCkptInfo WalCkptInfo;
                   43915: 
                   43916: 
                   43917: /*
                   43918: ** The following object holds a copy of the wal-index header content.
                   43919: **
                   43920: ** The actual header in the wal-index consists of two copies of this
                   43921: ** object.
                   43922: **
                   43923: ** The szPage value can be any power of 2 between 512 and 32768, inclusive.
                   43924: ** Or it can be 1 to represent a 65536-byte page.  The latter case was
                   43925: ** added in 3.7.1 when support for 64K pages was added.  
                   43926: */
                   43927: struct WalIndexHdr {
                   43928:   u32 iVersion;                   /* Wal-index version */
                   43929:   u32 unused;                     /* Unused (padding) field */
                   43930:   u32 iChange;                    /* Counter incremented each transaction */
                   43931:   u8 isInit;                      /* 1 when initialized */
                   43932:   u8 bigEndCksum;                 /* True if checksums in WAL are big-endian */
                   43933:   u16 szPage;                     /* Database page size in bytes. 1==64K */
                   43934:   u32 mxFrame;                    /* Index of last valid frame in the WAL */
                   43935:   u32 nPage;                      /* Size of database in pages */
                   43936:   u32 aFrameCksum[2];             /* Checksum of last frame in log */
                   43937:   u32 aSalt[2];                   /* Two salt values copied from WAL header */
                   43938:   u32 aCksum[2];                  /* Checksum over all prior fields */
                   43939: };
                   43940: 
                   43941: /*
                   43942: ** A copy of the following object occurs in the wal-index immediately
                   43943: ** following the second copy of the WalIndexHdr.  This object stores
                   43944: ** information used by checkpoint.
                   43945: **
                   43946: ** nBackfill is the number of frames in the WAL that have been written
                   43947: ** back into the database. (We call the act of moving content from WAL to
                   43948: ** database "backfilling".)  The nBackfill number is never greater than
                   43949: ** WalIndexHdr.mxFrame.  nBackfill can only be increased by threads
                   43950: ** holding the WAL_CKPT_LOCK lock (which includes a recovery thread).
                   43951: ** However, a WAL_WRITE_LOCK thread can move the value of nBackfill from
                   43952: ** mxFrame back to zero when the WAL is reset.
                   43953: **
                   43954: ** There is one entry in aReadMark[] for each reader lock.  If a reader
                   43955: ** holds read-lock K, then the value in aReadMark[K] is no greater than
                   43956: ** the mxFrame for that reader.  The value READMARK_NOT_USED (0xffffffff)
                   43957: ** for any aReadMark[] means that entry is unused.  aReadMark[0] is 
                   43958: ** a special case; its value is never used and it exists as a place-holder
                   43959: ** to avoid having to offset aReadMark[] indexs by one.  Readers holding
                   43960: ** WAL_READ_LOCK(0) always ignore the entire WAL and read all content
                   43961: ** directly from the database.
                   43962: **
                   43963: ** The value of aReadMark[K] may only be changed by a thread that
                   43964: ** is holding an exclusive lock on WAL_READ_LOCK(K).  Thus, the value of
                   43965: ** aReadMark[K] cannot changed while there is a reader is using that mark
                   43966: ** since the reader will be holding a shared lock on WAL_READ_LOCK(K).
                   43967: **
                   43968: ** The checkpointer may only transfer frames from WAL to database where
                   43969: ** the frame numbers are less than or equal to every aReadMark[] that is
                   43970: ** in use (that is, every aReadMark[j] for which there is a corresponding
                   43971: ** WAL_READ_LOCK(j)).  New readers (usually) pick the aReadMark[] with the
                   43972: ** largest value and will increase an unused aReadMark[] to mxFrame if there
                   43973: ** is not already an aReadMark[] equal to mxFrame.  The exception to the
                   43974: ** previous sentence is when nBackfill equals mxFrame (meaning that everything
                   43975: ** in the WAL has been backfilled into the database) then new readers
                   43976: ** will choose aReadMark[0] which has value 0 and hence such reader will
                   43977: ** get all their all content directly from the database file and ignore 
                   43978: ** the WAL.
                   43979: **
                   43980: ** Writers normally append new frames to the end of the WAL.  However,
                   43981: ** if nBackfill equals mxFrame (meaning that all WAL content has been
                   43982: ** written back into the database) and if no readers are using the WAL
                   43983: ** (in other words, if there are no WAL_READ_LOCK(i) where i>0) then
                   43984: ** the writer will first "reset" the WAL back to the beginning and start
                   43985: ** writing new content beginning at frame 1.
                   43986: **
                   43987: ** We assume that 32-bit loads are atomic and so no locks are needed in
                   43988: ** order to read from any aReadMark[] entries.
                   43989: */
                   43990: struct WalCkptInfo {
                   43991:   u32 nBackfill;                  /* Number of WAL frames backfilled into DB */
                   43992:   u32 aReadMark[WAL_NREADER];     /* Reader marks */
                   43993: };
                   43994: #define READMARK_NOT_USED  0xffffffff
                   43995: 
                   43996: 
                   43997: /* A block of WALINDEX_LOCK_RESERVED bytes beginning at
                   43998: ** WALINDEX_LOCK_OFFSET is reserved for locks. Since some systems
                   43999: ** only support mandatory file-locks, we do not read or write data
                   44000: ** from the region of the file on which locks are applied.
                   44001: */
                   44002: #define WALINDEX_LOCK_OFFSET   (sizeof(WalIndexHdr)*2 + sizeof(WalCkptInfo))
                   44003: #define WALINDEX_LOCK_RESERVED 16
                   44004: #define WALINDEX_HDR_SIZE      (WALINDEX_LOCK_OFFSET+WALINDEX_LOCK_RESERVED)
                   44005: 
                   44006: /* Size of header before each frame in wal */
                   44007: #define WAL_FRAME_HDRSIZE 24
                   44008: 
                   44009: /* Size of write ahead log header, including checksum. */
                   44010: /* #define WAL_HDRSIZE 24 */
                   44011: #define WAL_HDRSIZE 32
                   44012: 
                   44013: /* WAL magic value. Either this value, or the same value with the least
                   44014: ** significant bit also set (WAL_MAGIC | 0x00000001) is stored in 32-bit
                   44015: ** big-endian format in the first 4 bytes of a WAL file.
                   44016: **
                   44017: ** If the LSB is set, then the checksums for each frame within the WAL
                   44018: ** file are calculated by treating all data as an array of 32-bit 
                   44019: ** big-endian words. Otherwise, they are calculated by interpreting 
                   44020: ** all data as 32-bit little-endian words.
                   44021: */
                   44022: #define WAL_MAGIC 0x377f0682
                   44023: 
                   44024: /*
                   44025: ** Return the offset of frame iFrame in the write-ahead log file, 
                   44026: ** assuming a database page size of szPage bytes. The offset returned
                   44027: ** is to the start of the write-ahead log frame-header.
                   44028: */
                   44029: #define walFrameOffset(iFrame, szPage) (                               \
                   44030:   WAL_HDRSIZE + ((iFrame)-1)*(i64)((szPage)+WAL_FRAME_HDRSIZE)         \
                   44031: )
                   44032: 
                   44033: /*
                   44034: ** An open write-ahead log file is represented by an instance of the
                   44035: ** following object.
                   44036: */
                   44037: struct Wal {
                   44038:   sqlite3_vfs *pVfs;         /* The VFS used to create pDbFd */
                   44039:   sqlite3_file *pDbFd;       /* File handle for the database file */
                   44040:   sqlite3_file *pWalFd;      /* File handle for WAL file */
                   44041:   u32 iCallback;             /* Value to pass to log callback (or 0) */
                   44042:   i64 mxWalSize;             /* Truncate WAL to this size upon reset */
                   44043:   int nWiData;               /* Size of array apWiData */
                   44044:   volatile u32 **apWiData;   /* Pointer to wal-index content in memory */
                   44045:   u32 szPage;                /* Database page size */
                   44046:   i16 readLock;              /* Which read lock is being held.  -1 for none */
                   44047:   u8 exclusiveMode;          /* Non-zero if connection is in exclusive mode */
                   44048:   u8 writeLock;              /* True if in a write transaction */
                   44049:   u8 ckptLock;               /* True if holding a checkpoint lock */
                   44050:   u8 readOnly;               /* WAL_RDWR, WAL_RDONLY, or WAL_SHM_RDONLY */
                   44051:   WalIndexHdr hdr;           /* Wal-index header for current transaction */
                   44052:   const char *zWalName;      /* Name of WAL file */
                   44053:   u32 nCkpt;                 /* Checkpoint sequence counter in the wal-header */
                   44054: #ifdef SQLITE_DEBUG
                   44055:   u8 lockError;              /* True if a locking error has occurred */
                   44056: #endif
                   44057: };
                   44058: 
                   44059: /*
                   44060: ** Candidate values for Wal.exclusiveMode.
                   44061: */
                   44062: #define WAL_NORMAL_MODE     0
                   44063: #define WAL_EXCLUSIVE_MODE  1     
                   44064: #define WAL_HEAPMEMORY_MODE 2
                   44065: 
                   44066: /*
                   44067: ** Possible values for WAL.readOnly
                   44068: */
                   44069: #define WAL_RDWR        0    /* Normal read/write connection */
                   44070: #define WAL_RDONLY      1    /* The WAL file is readonly */
                   44071: #define WAL_SHM_RDONLY  2    /* The SHM file is readonly */
                   44072: 
                   44073: /*
                   44074: ** Each page of the wal-index mapping contains a hash-table made up of
                   44075: ** an array of HASHTABLE_NSLOT elements of the following type.
                   44076: */
                   44077: typedef u16 ht_slot;
                   44078: 
                   44079: /*
                   44080: ** This structure is used to implement an iterator that loops through
                   44081: ** all frames in the WAL in database page order. Where two or more frames
                   44082: ** correspond to the same database page, the iterator visits only the 
                   44083: ** frame most recently written to the WAL (in other words, the frame with
                   44084: ** the largest index).
                   44085: **
                   44086: ** The internals of this structure are only accessed by:
                   44087: **
                   44088: **   walIteratorInit() - Create a new iterator,
                   44089: **   walIteratorNext() - Step an iterator,
                   44090: **   walIteratorFree() - Free an iterator.
                   44091: **
                   44092: ** This functionality is used by the checkpoint code (see walCheckpoint()).
                   44093: */
                   44094: struct WalIterator {
                   44095:   int iPrior;                     /* Last result returned from the iterator */
                   44096:   int nSegment;                   /* Number of entries in aSegment[] */
                   44097:   struct WalSegment {
                   44098:     int iNext;                    /* Next slot in aIndex[] not yet returned */
                   44099:     ht_slot *aIndex;              /* i0, i1, i2... such that aPgno[iN] ascend */
                   44100:     u32 *aPgno;                   /* Array of page numbers. */
                   44101:     int nEntry;                   /* Nr. of entries in aPgno[] and aIndex[] */
                   44102:     int iZero;                    /* Frame number associated with aPgno[0] */
                   44103:   } aSegment[1];                  /* One for every 32KB page in the wal-index */
                   44104: };
                   44105: 
                   44106: /*
                   44107: ** Define the parameters of the hash tables in the wal-index file. There
                   44108: ** is a hash-table following every HASHTABLE_NPAGE page numbers in the
                   44109: ** wal-index.
                   44110: **
                   44111: ** Changing any of these constants will alter the wal-index format and
                   44112: ** create incompatibilities.
                   44113: */
                   44114: #define HASHTABLE_NPAGE      4096                 /* Must be power of 2 */
                   44115: #define HASHTABLE_HASH_1     383                  /* Should be prime */
                   44116: #define HASHTABLE_NSLOT      (HASHTABLE_NPAGE*2)  /* Must be a power of 2 */
                   44117: 
                   44118: /* 
                   44119: ** The block of page numbers associated with the first hash-table in a
                   44120: ** wal-index is smaller than usual. This is so that there is a complete
                   44121: ** hash-table on each aligned 32KB page of the wal-index.
                   44122: */
                   44123: #define HASHTABLE_NPAGE_ONE  (HASHTABLE_NPAGE - (WALINDEX_HDR_SIZE/sizeof(u32)))
                   44124: 
                   44125: /* The wal-index is divided into pages of WALINDEX_PGSZ bytes each. */
                   44126: #define WALINDEX_PGSZ   (                                         \
                   44127:     sizeof(ht_slot)*HASHTABLE_NSLOT + HASHTABLE_NPAGE*sizeof(u32) \
                   44128: )
                   44129: 
                   44130: /*
                   44131: ** Obtain a pointer to the iPage'th page of the wal-index. The wal-index
                   44132: ** is broken into pages of WALINDEX_PGSZ bytes. Wal-index pages are
                   44133: ** numbered from zero.
                   44134: **
                   44135: ** If this call is successful, *ppPage is set to point to the wal-index
                   44136: ** page and SQLITE_OK is returned. If an error (an OOM or VFS error) occurs,
                   44137: ** then an SQLite error code is returned and *ppPage is set to 0.
                   44138: */
                   44139: static int walIndexPage(Wal *pWal, int iPage, volatile u32 **ppPage){
                   44140:   int rc = SQLITE_OK;
                   44141: 
                   44142:   /* Enlarge the pWal->apWiData[] array if required */
                   44143:   if( pWal->nWiData<=iPage ){
                   44144:     int nByte = sizeof(u32*)*(iPage+1);
                   44145:     volatile u32 **apNew;
                   44146:     apNew = (volatile u32 **)sqlite3_realloc((void *)pWal->apWiData, nByte);
                   44147:     if( !apNew ){
                   44148:       *ppPage = 0;
                   44149:       return SQLITE_NOMEM;
                   44150:     }
                   44151:     memset((void*)&apNew[pWal->nWiData], 0,
                   44152:            sizeof(u32*)*(iPage+1-pWal->nWiData));
                   44153:     pWal->apWiData = apNew;
                   44154:     pWal->nWiData = iPage+1;
                   44155:   }
                   44156: 
                   44157:   /* Request a pointer to the required page from the VFS */
                   44158:   if( pWal->apWiData[iPage]==0 ){
                   44159:     if( pWal->exclusiveMode==WAL_HEAPMEMORY_MODE ){
                   44160:       pWal->apWiData[iPage] = (u32 volatile *)sqlite3MallocZero(WALINDEX_PGSZ);
                   44161:       if( !pWal->apWiData[iPage] ) rc = SQLITE_NOMEM;
                   44162:     }else{
                   44163:       rc = sqlite3OsShmMap(pWal->pDbFd, iPage, WALINDEX_PGSZ, 
                   44164:           pWal->writeLock, (void volatile **)&pWal->apWiData[iPage]
                   44165:       );
                   44166:       if( rc==SQLITE_READONLY ){
                   44167:         pWal->readOnly |= WAL_SHM_RDONLY;
                   44168:         rc = SQLITE_OK;
                   44169:       }
                   44170:     }
                   44171:   }
                   44172: 
                   44173:   *ppPage = pWal->apWiData[iPage];
                   44174:   assert( iPage==0 || *ppPage || rc!=SQLITE_OK );
                   44175:   return rc;
                   44176: }
                   44177: 
                   44178: /*
                   44179: ** Return a pointer to the WalCkptInfo structure in the wal-index.
                   44180: */
                   44181: static volatile WalCkptInfo *walCkptInfo(Wal *pWal){
                   44182:   assert( pWal->nWiData>0 && pWal->apWiData[0] );
                   44183:   return (volatile WalCkptInfo*)&(pWal->apWiData[0][sizeof(WalIndexHdr)/2]);
                   44184: }
                   44185: 
                   44186: /*
                   44187: ** Return a pointer to the WalIndexHdr structure in the wal-index.
                   44188: */
                   44189: static volatile WalIndexHdr *walIndexHdr(Wal *pWal){
                   44190:   assert( pWal->nWiData>0 && pWal->apWiData[0] );
                   44191:   return (volatile WalIndexHdr*)pWal->apWiData[0];
                   44192: }
                   44193: 
                   44194: /*
                   44195: ** The argument to this macro must be of type u32. On a little-endian
                   44196: ** architecture, it returns the u32 value that results from interpreting
                   44197: ** the 4 bytes as a big-endian value. On a big-endian architecture, it
                   44198: ** returns the value that would be produced by intepreting the 4 bytes
                   44199: ** of the input value as a little-endian integer.
                   44200: */
                   44201: #define BYTESWAP32(x) ( \
                   44202:     (((x)&0x000000FF)<<24) + (((x)&0x0000FF00)<<8)  \
                   44203:   + (((x)&0x00FF0000)>>8)  + (((x)&0xFF000000)>>24) \
                   44204: )
                   44205: 
                   44206: /*
                   44207: ** Generate or extend an 8 byte checksum based on the data in 
                   44208: ** array aByte[] and the initial values of aIn[0] and aIn[1] (or
                   44209: ** initial values of 0 and 0 if aIn==NULL).
                   44210: **
                   44211: ** The checksum is written back into aOut[] before returning.
                   44212: **
                   44213: ** nByte must be a positive multiple of 8.
                   44214: */
                   44215: static void walChecksumBytes(
                   44216:   int nativeCksum, /* True for native byte-order, false for non-native */
                   44217:   u8 *a,           /* Content to be checksummed */
                   44218:   int nByte,       /* Bytes of content in a[].  Must be a multiple of 8. */
                   44219:   const u32 *aIn,  /* Initial checksum value input */
                   44220:   u32 *aOut        /* OUT: Final checksum value output */
                   44221: ){
                   44222:   u32 s1, s2;
                   44223:   u32 *aData = (u32 *)a;
                   44224:   u32 *aEnd = (u32 *)&a[nByte];
                   44225: 
                   44226:   if( aIn ){
                   44227:     s1 = aIn[0];
                   44228:     s2 = aIn[1];
                   44229:   }else{
                   44230:     s1 = s2 = 0;
                   44231:   }
                   44232: 
                   44233:   assert( nByte>=8 );
                   44234:   assert( (nByte&0x00000007)==0 );
                   44235: 
                   44236:   if( nativeCksum ){
                   44237:     do {
                   44238:       s1 += *aData++ + s2;
                   44239:       s2 += *aData++ + s1;
                   44240:     }while( aData<aEnd );
                   44241:   }else{
                   44242:     do {
                   44243:       s1 += BYTESWAP32(aData[0]) + s2;
                   44244:       s2 += BYTESWAP32(aData[1]) + s1;
                   44245:       aData += 2;
                   44246:     }while( aData<aEnd );
                   44247:   }
                   44248: 
                   44249:   aOut[0] = s1;
                   44250:   aOut[1] = s2;
                   44251: }
                   44252: 
                   44253: static void walShmBarrier(Wal *pWal){
                   44254:   if( pWal->exclusiveMode!=WAL_HEAPMEMORY_MODE ){
                   44255:     sqlite3OsShmBarrier(pWal->pDbFd);
                   44256:   }
                   44257: }
                   44258: 
                   44259: /*
                   44260: ** Write the header information in pWal->hdr into the wal-index.
                   44261: **
                   44262: ** The checksum on pWal->hdr is updated before it is written.
                   44263: */
                   44264: static void walIndexWriteHdr(Wal *pWal){
                   44265:   volatile WalIndexHdr *aHdr = walIndexHdr(pWal);
                   44266:   const int nCksum = offsetof(WalIndexHdr, aCksum);
                   44267: 
                   44268:   assert( pWal->writeLock );
                   44269:   pWal->hdr.isInit = 1;
                   44270:   pWal->hdr.iVersion = WALINDEX_MAX_VERSION;
                   44271:   walChecksumBytes(1, (u8*)&pWal->hdr, nCksum, 0, pWal->hdr.aCksum);
                   44272:   memcpy((void *)&aHdr[1], (void *)&pWal->hdr, sizeof(WalIndexHdr));
                   44273:   walShmBarrier(pWal);
                   44274:   memcpy((void *)&aHdr[0], (void *)&pWal->hdr, sizeof(WalIndexHdr));
                   44275: }
                   44276: 
                   44277: /*
                   44278: ** This function encodes a single frame header and writes it to a buffer
                   44279: ** supplied by the caller. A frame-header is made up of a series of 
                   44280: ** 4-byte big-endian integers, as follows:
                   44281: **
                   44282: **     0: Page number.
                   44283: **     4: For commit records, the size of the database image in pages 
                   44284: **        after the commit. For all other records, zero.
                   44285: **     8: Salt-1 (copied from the wal-header)
                   44286: **    12: Salt-2 (copied from the wal-header)
                   44287: **    16: Checksum-1.
                   44288: **    20: Checksum-2.
                   44289: */
                   44290: static void walEncodeFrame(
                   44291:   Wal *pWal,                      /* The write-ahead log */
                   44292:   u32 iPage,                      /* Database page number for frame */
                   44293:   u32 nTruncate,                  /* New db size (or 0 for non-commit frames) */
                   44294:   u8 *aData,                      /* Pointer to page data */
                   44295:   u8 *aFrame                      /* OUT: Write encoded frame here */
                   44296: ){
                   44297:   int nativeCksum;                /* True for native byte-order checksums */
                   44298:   u32 *aCksum = pWal->hdr.aFrameCksum;
                   44299:   assert( WAL_FRAME_HDRSIZE==24 );
                   44300:   sqlite3Put4byte(&aFrame[0], iPage);
                   44301:   sqlite3Put4byte(&aFrame[4], nTruncate);
                   44302:   memcpy(&aFrame[8], pWal->hdr.aSalt, 8);
                   44303: 
                   44304:   nativeCksum = (pWal->hdr.bigEndCksum==SQLITE_BIGENDIAN);
                   44305:   walChecksumBytes(nativeCksum, aFrame, 8, aCksum, aCksum);
                   44306:   walChecksumBytes(nativeCksum, aData, pWal->szPage, aCksum, aCksum);
                   44307: 
                   44308:   sqlite3Put4byte(&aFrame[16], aCksum[0]);
                   44309:   sqlite3Put4byte(&aFrame[20], aCksum[1]);
                   44310: }
                   44311: 
                   44312: /*
                   44313: ** Check to see if the frame with header in aFrame[] and content
                   44314: ** in aData[] is valid.  If it is a valid frame, fill *piPage and
                   44315: ** *pnTruncate and return true.  Return if the frame is not valid.
                   44316: */
                   44317: static int walDecodeFrame(
                   44318:   Wal *pWal,                      /* The write-ahead log */
                   44319:   u32 *piPage,                    /* OUT: Database page number for frame */
                   44320:   u32 *pnTruncate,                /* OUT: New db size (or 0 if not commit) */
                   44321:   u8 *aData,                      /* Pointer to page data (for checksum) */
                   44322:   u8 *aFrame                      /* Frame data */
                   44323: ){
                   44324:   int nativeCksum;                /* True for native byte-order checksums */
                   44325:   u32 *aCksum = pWal->hdr.aFrameCksum;
                   44326:   u32 pgno;                       /* Page number of the frame */
                   44327:   assert( WAL_FRAME_HDRSIZE==24 );
                   44328: 
                   44329:   /* A frame is only valid if the salt values in the frame-header
                   44330:   ** match the salt values in the wal-header. 
                   44331:   */
                   44332:   if( memcmp(&pWal->hdr.aSalt, &aFrame[8], 8)!=0 ){
                   44333:     return 0;
                   44334:   }
                   44335: 
                   44336:   /* A frame is only valid if the page number is creater than zero.
                   44337:   */
                   44338:   pgno = sqlite3Get4byte(&aFrame[0]);
                   44339:   if( pgno==0 ){
                   44340:     return 0;
                   44341:   }
                   44342: 
                   44343:   /* A frame is only valid if a checksum of the WAL header,
                   44344:   ** all prior frams, the first 16 bytes of this frame-header, 
                   44345:   ** and the frame-data matches the checksum in the last 8 
                   44346:   ** bytes of this frame-header.
                   44347:   */
                   44348:   nativeCksum = (pWal->hdr.bigEndCksum==SQLITE_BIGENDIAN);
                   44349:   walChecksumBytes(nativeCksum, aFrame, 8, aCksum, aCksum);
                   44350:   walChecksumBytes(nativeCksum, aData, pWal->szPage, aCksum, aCksum);
                   44351:   if( aCksum[0]!=sqlite3Get4byte(&aFrame[16]) 
                   44352:    || aCksum[1]!=sqlite3Get4byte(&aFrame[20]) 
                   44353:   ){
                   44354:     /* Checksum failed. */
                   44355:     return 0;
                   44356:   }
                   44357: 
                   44358:   /* If we reach this point, the frame is valid.  Return the page number
                   44359:   ** and the new database size.
                   44360:   */
                   44361:   *piPage = pgno;
                   44362:   *pnTruncate = sqlite3Get4byte(&aFrame[4]);
                   44363:   return 1;
                   44364: }
                   44365: 
                   44366: 
                   44367: #if defined(SQLITE_TEST) && defined(SQLITE_DEBUG)
                   44368: /*
                   44369: ** Names of locks.  This routine is used to provide debugging output and is not
                   44370: ** a part of an ordinary build.
                   44371: */
                   44372: static const char *walLockName(int lockIdx){
                   44373:   if( lockIdx==WAL_WRITE_LOCK ){
                   44374:     return "WRITE-LOCK";
                   44375:   }else if( lockIdx==WAL_CKPT_LOCK ){
                   44376:     return "CKPT-LOCK";
                   44377:   }else if( lockIdx==WAL_RECOVER_LOCK ){
                   44378:     return "RECOVER-LOCK";
                   44379:   }else{
                   44380:     static char zName[15];
                   44381:     sqlite3_snprintf(sizeof(zName), zName, "READ-LOCK[%d]",
                   44382:                      lockIdx-WAL_READ_LOCK(0));
                   44383:     return zName;
                   44384:   }
                   44385: }
                   44386: #endif /*defined(SQLITE_TEST) || defined(SQLITE_DEBUG) */
                   44387:     
                   44388: 
                   44389: /*
                   44390: ** Set or release locks on the WAL.  Locks are either shared or exclusive.
                   44391: ** A lock cannot be moved directly between shared and exclusive - it must go
                   44392: ** through the unlocked state first.
                   44393: **
                   44394: ** In locking_mode=EXCLUSIVE, all of these routines become no-ops.
                   44395: */
                   44396: static int walLockShared(Wal *pWal, int lockIdx){
                   44397:   int rc;
                   44398:   if( pWal->exclusiveMode ) return SQLITE_OK;
                   44399:   rc = sqlite3OsShmLock(pWal->pDbFd, lockIdx, 1,
                   44400:                         SQLITE_SHM_LOCK | SQLITE_SHM_SHARED);
                   44401:   WALTRACE(("WAL%p: acquire SHARED-%s %s\n", pWal,
                   44402:             walLockName(lockIdx), rc ? "failed" : "ok"));
                   44403:   VVA_ONLY( pWal->lockError = (u8)(rc!=SQLITE_OK && rc!=SQLITE_BUSY); )
                   44404:   return rc;
                   44405: }
                   44406: static void walUnlockShared(Wal *pWal, int lockIdx){
                   44407:   if( pWal->exclusiveMode ) return;
                   44408:   (void)sqlite3OsShmLock(pWal->pDbFd, lockIdx, 1,
                   44409:                          SQLITE_SHM_UNLOCK | SQLITE_SHM_SHARED);
                   44410:   WALTRACE(("WAL%p: release SHARED-%s\n", pWal, walLockName(lockIdx)));
                   44411: }
                   44412: static int walLockExclusive(Wal *pWal, int lockIdx, int n){
                   44413:   int rc;
                   44414:   if( pWal->exclusiveMode ) return SQLITE_OK;
                   44415:   rc = sqlite3OsShmLock(pWal->pDbFd, lockIdx, n,
                   44416:                         SQLITE_SHM_LOCK | SQLITE_SHM_EXCLUSIVE);
                   44417:   WALTRACE(("WAL%p: acquire EXCLUSIVE-%s cnt=%d %s\n", pWal,
                   44418:             walLockName(lockIdx), n, rc ? "failed" : "ok"));
                   44419:   VVA_ONLY( pWal->lockError = (u8)(rc!=SQLITE_OK && rc!=SQLITE_BUSY); )
                   44420:   return rc;
                   44421: }
                   44422: static void walUnlockExclusive(Wal *pWal, int lockIdx, int n){
                   44423:   if( pWal->exclusiveMode ) return;
                   44424:   (void)sqlite3OsShmLock(pWal->pDbFd, lockIdx, n,
                   44425:                          SQLITE_SHM_UNLOCK | SQLITE_SHM_EXCLUSIVE);
                   44426:   WALTRACE(("WAL%p: release EXCLUSIVE-%s cnt=%d\n", pWal,
                   44427:              walLockName(lockIdx), n));
                   44428: }
                   44429: 
                   44430: /*
                   44431: ** Compute a hash on a page number.  The resulting hash value must land
                   44432: ** between 0 and (HASHTABLE_NSLOT-1).  The walHashNext() function advances
                   44433: ** the hash to the next value in the event of a collision.
                   44434: */
                   44435: static int walHash(u32 iPage){
                   44436:   assert( iPage>0 );
                   44437:   assert( (HASHTABLE_NSLOT & (HASHTABLE_NSLOT-1))==0 );
                   44438:   return (iPage*HASHTABLE_HASH_1) & (HASHTABLE_NSLOT-1);
                   44439: }
                   44440: static int walNextHash(int iPriorHash){
                   44441:   return (iPriorHash+1)&(HASHTABLE_NSLOT-1);
                   44442: }
                   44443: 
                   44444: /* 
                   44445: ** Return pointers to the hash table and page number array stored on
                   44446: ** page iHash of the wal-index. The wal-index is broken into 32KB pages
                   44447: ** numbered starting from 0.
                   44448: **
                   44449: ** Set output variable *paHash to point to the start of the hash table
                   44450: ** in the wal-index file. Set *piZero to one less than the frame 
                   44451: ** number of the first frame indexed by this hash table. If a
                   44452: ** slot in the hash table is set to N, it refers to frame number 
                   44453: ** (*piZero+N) in the log.
                   44454: **
                   44455: ** Finally, set *paPgno so that *paPgno[1] is the page number of the
                   44456: ** first frame indexed by the hash table, frame (*piZero+1).
                   44457: */
                   44458: static int walHashGet(
                   44459:   Wal *pWal,                      /* WAL handle */
                   44460:   int iHash,                      /* Find the iHash'th table */
                   44461:   volatile ht_slot **paHash,      /* OUT: Pointer to hash index */
                   44462:   volatile u32 **paPgno,          /* OUT: Pointer to page number array */
                   44463:   u32 *piZero                     /* OUT: Frame associated with *paPgno[0] */
                   44464: ){
                   44465:   int rc;                         /* Return code */
                   44466:   volatile u32 *aPgno;
                   44467: 
                   44468:   rc = walIndexPage(pWal, iHash, &aPgno);
                   44469:   assert( rc==SQLITE_OK || iHash>0 );
                   44470: 
                   44471:   if( rc==SQLITE_OK ){
                   44472:     u32 iZero;
                   44473:     volatile ht_slot *aHash;
                   44474: 
                   44475:     aHash = (volatile ht_slot *)&aPgno[HASHTABLE_NPAGE];
                   44476:     if( iHash==0 ){
                   44477:       aPgno = &aPgno[WALINDEX_HDR_SIZE/sizeof(u32)];
                   44478:       iZero = 0;
                   44479:     }else{
                   44480:       iZero = HASHTABLE_NPAGE_ONE + (iHash-1)*HASHTABLE_NPAGE;
                   44481:     }
                   44482:   
                   44483:     *paPgno = &aPgno[-1];
                   44484:     *paHash = aHash;
                   44485:     *piZero = iZero;
                   44486:   }
                   44487:   return rc;
                   44488: }
                   44489: 
                   44490: /*
                   44491: ** Return the number of the wal-index page that contains the hash-table
                   44492: ** and page-number array that contain entries corresponding to WAL frame
                   44493: ** iFrame. The wal-index is broken up into 32KB pages. Wal-index pages 
                   44494: ** are numbered starting from 0.
                   44495: */
                   44496: static int walFramePage(u32 iFrame){
                   44497:   int iHash = (iFrame+HASHTABLE_NPAGE-HASHTABLE_NPAGE_ONE-1) / HASHTABLE_NPAGE;
                   44498:   assert( (iHash==0 || iFrame>HASHTABLE_NPAGE_ONE)
                   44499:        && (iHash>=1 || iFrame<=HASHTABLE_NPAGE_ONE)
                   44500:        && (iHash<=1 || iFrame>(HASHTABLE_NPAGE_ONE+HASHTABLE_NPAGE))
                   44501:        && (iHash>=2 || iFrame<=HASHTABLE_NPAGE_ONE+HASHTABLE_NPAGE)
                   44502:        && (iHash<=2 || iFrame>(HASHTABLE_NPAGE_ONE+2*HASHTABLE_NPAGE))
                   44503:   );
                   44504:   return iHash;
                   44505: }
                   44506: 
                   44507: /*
                   44508: ** Return the page number associated with frame iFrame in this WAL.
                   44509: */
                   44510: static u32 walFramePgno(Wal *pWal, u32 iFrame){
                   44511:   int iHash = walFramePage(iFrame);
                   44512:   if( iHash==0 ){
                   44513:     return pWal->apWiData[0][WALINDEX_HDR_SIZE/sizeof(u32) + iFrame - 1];
                   44514:   }
                   44515:   return pWal->apWiData[iHash][(iFrame-1-HASHTABLE_NPAGE_ONE)%HASHTABLE_NPAGE];
                   44516: }
                   44517: 
                   44518: /*
                   44519: ** Remove entries from the hash table that point to WAL slots greater
                   44520: ** than pWal->hdr.mxFrame.
                   44521: **
                   44522: ** This function is called whenever pWal->hdr.mxFrame is decreased due
                   44523: ** to a rollback or savepoint.
                   44524: **
                   44525: ** At most only the hash table containing pWal->hdr.mxFrame needs to be
                   44526: ** updated.  Any later hash tables will be automatically cleared when
                   44527: ** pWal->hdr.mxFrame advances to the point where those hash tables are
                   44528: ** actually needed.
                   44529: */
                   44530: static void walCleanupHash(Wal *pWal){
                   44531:   volatile ht_slot *aHash = 0;    /* Pointer to hash table to clear */
                   44532:   volatile u32 *aPgno = 0;        /* Page number array for hash table */
                   44533:   u32 iZero = 0;                  /* frame == (aHash[x]+iZero) */
                   44534:   int iLimit = 0;                 /* Zero values greater than this */
                   44535:   int nByte;                      /* Number of bytes to zero in aPgno[] */
                   44536:   int i;                          /* Used to iterate through aHash[] */
                   44537: 
                   44538:   assert( pWal->writeLock );
                   44539:   testcase( pWal->hdr.mxFrame==HASHTABLE_NPAGE_ONE-1 );
                   44540:   testcase( pWal->hdr.mxFrame==HASHTABLE_NPAGE_ONE );
                   44541:   testcase( pWal->hdr.mxFrame==HASHTABLE_NPAGE_ONE+1 );
                   44542: 
                   44543:   if( pWal->hdr.mxFrame==0 ) return;
                   44544: 
                   44545:   /* Obtain pointers to the hash-table and page-number array containing 
                   44546:   ** the entry that corresponds to frame pWal->hdr.mxFrame. It is guaranteed
                   44547:   ** that the page said hash-table and array reside on is already mapped.
                   44548:   */
                   44549:   assert( pWal->nWiData>walFramePage(pWal->hdr.mxFrame) );
                   44550:   assert( pWal->apWiData[walFramePage(pWal->hdr.mxFrame)] );
                   44551:   walHashGet(pWal, walFramePage(pWal->hdr.mxFrame), &aHash, &aPgno, &iZero);
                   44552: 
                   44553:   /* Zero all hash-table entries that correspond to frame numbers greater
                   44554:   ** than pWal->hdr.mxFrame.
                   44555:   */
                   44556:   iLimit = pWal->hdr.mxFrame - iZero;
                   44557:   assert( iLimit>0 );
                   44558:   for(i=0; i<HASHTABLE_NSLOT; i++){
                   44559:     if( aHash[i]>iLimit ){
                   44560:       aHash[i] = 0;
                   44561:     }
                   44562:   }
                   44563:   
                   44564:   /* Zero the entries in the aPgno array that correspond to frames with
                   44565:   ** frame numbers greater than pWal->hdr.mxFrame. 
                   44566:   */
                   44567:   nByte = (int)((char *)aHash - (char *)&aPgno[iLimit+1]);
                   44568:   memset((void *)&aPgno[iLimit+1], 0, nByte);
                   44569: 
                   44570: #ifdef SQLITE_ENABLE_EXPENSIVE_ASSERT
                   44571:   /* Verify that the every entry in the mapping region is still reachable
                   44572:   ** via the hash table even after the cleanup.
                   44573:   */
                   44574:   if( iLimit ){
                   44575:     int i;           /* Loop counter */
                   44576:     int iKey;        /* Hash key */
                   44577:     for(i=1; i<=iLimit; i++){
                   44578:       for(iKey=walHash(aPgno[i]); aHash[iKey]; iKey=walNextHash(iKey)){
                   44579:         if( aHash[iKey]==i ) break;
                   44580:       }
                   44581:       assert( aHash[iKey]==i );
                   44582:     }
                   44583:   }
                   44584: #endif /* SQLITE_ENABLE_EXPENSIVE_ASSERT */
                   44585: }
                   44586: 
                   44587: 
                   44588: /*
                   44589: ** Set an entry in the wal-index that will map database page number
                   44590: ** pPage into WAL frame iFrame.
                   44591: */
                   44592: static int walIndexAppend(Wal *pWal, u32 iFrame, u32 iPage){
                   44593:   int rc;                         /* Return code */
                   44594:   u32 iZero = 0;                  /* One less than frame number of aPgno[1] */
                   44595:   volatile u32 *aPgno = 0;        /* Page number array */
                   44596:   volatile ht_slot *aHash = 0;    /* Hash table */
                   44597: 
                   44598:   rc = walHashGet(pWal, walFramePage(iFrame), &aHash, &aPgno, &iZero);
                   44599: 
                   44600:   /* Assuming the wal-index file was successfully mapped, populate the
                   44601:   ** page number array and hash table entry.
                   44602:   */
                   44603:   if( rc==SQLITE_OK ){
                   44604:     int iKey;                     /* Hash table key */
                   44605:     int idx;                      /* Value to write to hash-table slot */
                   44606:     int nCollide;                 /* Number of hash collisions */
                   44607: 
                   44608:     idx = iFrame - iZero;
                   44609:     assert( idx <= HASHTABLE_NSLOT/2 + 1 );
                   44610:     
                   44611:     /* If this is the first entry to be added to this hash-table, zero the
                   44612:     ** entire hash table and aPgno[] array before proceding. 
                   44613:     */
                   44614:     if( idx==1 ){
                   44615:       int nByte = (int)((u8 *)&aHash[HASHTABLE_NSLOT] - (u8 *)&aPgno[1]);
                   44616:       memset((void*)&aPgno[1], 0, nByte);
                   44617:     }
                   44618: 
                   44619:     /* If the entry in aPgno[] is already set, then the previous writer
                   44620:     ** must have exited unexpectedly in the middle of a transaction (after
                   44621:     ** writing one or more dirty pages to the WAL to free up memory). 
                   44622:     ** Remove the remnants of that writers uncommitted transaction from 
                   44623:     ** the hash-table before writing any new entries.
                   44624:     */
                   44625:     if( aPgno[idx] ){
                   44626:       walCleanupHash(pWal);
                   44627:       assert( !aPgno[idx] );
                   44628:     }
                   44629: 
                   44630:     /* Write the aPgno[] array entry and the hash-table slot. */
                   44631:     nCollide = idx;
                   44632:     for(iKey=walHash(iPage); aHash[iKey]; iKey=walNextHash(iKey)){
                   44633:       if( (nCollide--)==0 ) return SQLITE_CORRUPT_BKPT;
                   44634:     }
                   44635:     aPgno[idx] = iPage;
                   44636:     aHash[iKey] = (ht_slot)idx;
                   44637: 
                   44638: #ifdef SQLITE_ENABLE_EXPENSIVE_ASSERT
                   44639:     /* Verify that the number of entries in the hash table exactly equals
                   44640:     ** the number of entries in the mapping region.
                   44641:     */
                   44642:     {
                   44643:       int i;           /* Loop counter */
                   44644:       int nEntry = 0;  /* Number of entries in the hash table */
                   44645:       for(i=0; i<HASHTABLE_NSLOT; i++){ if( aHash[i] ) nEntry++; }
                   44646:       assert( nEntry==idx );
                   44647:     }
                   44648: 
                   44649:     /* Verify that the every entry in the mapping region is reachable
                   44650:     ** via the hash table.  This turns out to be a really, really expensive
                   44651:     ** thing to check, so only do this occasionally - not on every
                   44652:     ** iteration.
                   44653:     */
                   44654:     if( (idx&0x3ff)==0 ){
                   44655:       int i;           /* Loop counter */
                   44656:       for(i=1; i<=idx; i++){
                   44657:         for(iKey=walHash(aPgno[i]); aHash[iKey]; iKey=walNextHash(iKey)){
                   44658:           if( aHash[iKey]==i ) break;
                   44659:         }
                   44660:         assert( aHash[iKey]==i );
                   44661:       }
                   44662:     }
                   44663: #endif /* SQLITE_ENABLE_EXPENSIVE_ASSERT */
                   44664:   }
                   44665: 
                   44666: 
                   44667:   return rc;
                   44668: }
                   44669: 
                   44670: 
                   44671: /*
                   44672: ** Recover the wal-index by reading the write-ahead log file. 
                   44673: **
                   44674: ** This routine first tries to establish an exclusive lock on the
                   44675: ** wal-index to prevent other threads/processes from doing anything
                   44676: ** with the WAL or wal-index while recovery is running.  The
                   44677: ** WAL_RECOVER_LOCK is also held so that other threads will know
                   44678: ** that this thread is running recovery.  If unable to establish
                   44679: ** the necessary locks, this routine returns SQLITE_BUSY.
                   44680: */
                   44681: static int walIndexRecover(Wal *pWal){
                   44682:   int rc;                         /* Return Code */
                   44683:   i64 nSize;                      /* Size of log file */
                   44684:   u32 aFrameCksum[2] = {0, 0};
                   44685:   int iLock;                      /* Lock offset to lock for checkpoint */
                   44686:   int nLock;                      /* Number of locks to hold */
                   44687: 
                   44688:   /* Obtain an exclusive lock on all byte in the locking range not already
                   44689:   ** locked by the caller. The caller is guaranteed to have locked the
                   44690:   ** WAL_WRITE_LOCK byte, and may have also locked the WAL_CKPT_LOCK byte.
                   44691:   ** If successful, the same bytes that are locked here are unlocked before
                   44692:   ** this function returns.
                   44693:   */
                   44694:   assert( pWal->ckptLock==1 || pWal->ckptLock==0 );
                   44695:   assert( WAL_ALL_BUT_WRITE==WAL_WRITE_LOCK+1 );
                   44696:   assert( WAL_CKPT_LOCK==WAL_ALL_BUT_WRITE );
                   44697:   assert( pWal->writeLock );
                   44698:   iLock = WAL_ALL_BUT_WRITE + pWal->ckptLock;
                   44699:   nLock = SQLITE_SHM_NLOCK - iLock;
                   44700:   rc = walLockExclusive(pWal, iLock, nLock);
                   44701:   if( rc ){
                   44702:     return rc;
                   44703:   }
                   44704:   WALTRACE(("WAL%p: recovery begin...\n", pWal));
                   44705: 
                   44706:   memset(&pWal->hdr, 0, sizeof(WalIndexHdr));
                   44707: 
                   44708:   rc = sqlite3OsFileSize(pWal->pWalFd, &nSize);
                   44709:   if( rc!=SQLITE_OK ){
                   44710:     goto recovery_error;
                   44711:   }
                   44712: 
                   44713:   if( nSize>WAL_HDRSIZE ){
                   44714:     u8 aBuf[WAL_HDRSIZE];         /* Buffer to load WAL header into */
                   44715:     u8 *aFrame = 0;               /* Malloc'd buffer to load entire frame */
                   44716:     int szFrame;                  /* Number of bytes in buffer aFrame[] */
                   44717:     u8 *aData;                    /* Pointer to data part of aFrame buffer */
                   44718:     int iFrame;                   /* Index of last frame read */
                   44719:     i64 iOffset;                  /* Next offset to read from log file */
                   44720:     int szPage;                   /* Page size according to the log */
                   44721:     u32 magic;                    /* Magic value read from WAL header */
                   44722:     u32 version;                  /* Magic value read from WAL header */
                   44723: 
                   44724:     /* Read in the WAL header. */
                   44725:     rc = sqlite3OsRead(pWal->pWalFd, aBuf, WAL_HDRSIZE, 0);
                   44726:     if( rc!=SQLITE_OK ){
                   44727:       goto recovery_error;
                   44728:     }
                   44729: 
                   44730:     /* If the database page size is not a power of two, or is greater than
                   44731:     ** SQLITE_MAX_PAGE_SIZE, conclude that the WAL file contains no valid 
                   44732:     ** data. Similarly, if the 'magic' value is invalid, ignore the whole
                   44733:     ** WAL file.
                   44734:     */
                   44735:     magic = sqlite3Get4byte(&aBuf[0]);
                   44736:     szPage = sqlite3Get4byte(&aBuf[8]);
                   44737:     if( (magic&0xFFFFFFFE)!=WAL_MAGIC 
                   44738:      || szPage&(szPage-1) 
                   44739:      || szPage>SQLITE_MAX_PAGE_SIZE 
                   44740:      || szPage<512 
                   44741:     ){
                   44742:       goto finished;
                   44743:     }
                   44744:     pWal->hdr.bigEndCksum = (u8)(magic&0x00000001);
                   44745:     pWal->szPage = szPage;
                   44746:     pWal->nCkpt = sqlite3Get4byte(&aBuf[12]);
                   44747:     memcpy(&pWal->hdr.aSalt, &aBuf[16], 8);
                   44748: 
                   44749:     /* Verify that the WAL header checksum is correct */
                   44750:     walChecksumBytes(pWal->hdr.bigEndCksum==SQLITE_BIGENDIAN, 
                   44751:         aBuf, WAL_HDRSIZE-2*4, 0, pWal->hdr.aFrameCksum
                   44752:     );
                   44753:     if( pWal->hdr.aFrameCksum[0]!=sqlite3Get4byte(&aBuf[24])
                   44754:      || pWal->hdr.aFrameCksum[1]!=sqlite3Get4byte(&aBuf[28])
                   44755:     ){
                   44756:       goto finished;
                   44757:     }
                   44758: 
                   44759:     /* Verify that the version number on the WAL format is one that
                   44760:     ** are able to understand */
                   44761:     version = sqlite3Get4byte(&aBuf[4]);
                   44762:     if( version!=WAL_MAX_VERSION ){
                   44763:       rc = SQLITE_CANTOPEN_BKPT;
                   44764:       goto finished;
                   44765:     }
                   44766: 
                   44767:     /* Malloc a buffer to read frames into. */
                   44768:     szFrame = szPage + WAL_FRAME_HDRSIZE;
                   44769:     aFrame = (u8 *)sqlite3_malloc(szFrame);
                   44770:     if( !aFrame ){
                   44771:       rc = SQLITE_NOMEM;
                   44772:       goto recovery_error;
                   44773:     }
                   44774:     aData = &aFrame[WAL_FRAME_HDRSIZE];
                   44775: 
                   44776:     /* Read all frames from the log file. */
                   44777:     iFrame = 0;
                   44778:     for(iOffset=WAL_HDRSIZE; (iOffset+szFrame)<=nSize; iOffset+=szFrame){
                   44779:       u32 pgno;                   /* Database page number for frame */
                   44780:       u32 nTruncate;              /* dbsize field from frame header */
                   44781:       int isValid;                /* True if this frame is valid */
                   44782: 
                   44783:       /* Read and decode the next log frame. */
                   44784:       rc = sqlite3OsRead(pWal->pWalFd, aFrame, szFrame, iOffset);
                   44785:       if( rc!=SQLITE_OK ) break;
                   44786:       isValid = walDecodeFrame(pWal, &pgno, &nTruncate, aData, aFrame);
                   44787:       if( !isValid ) break;
                   44788:       rc = walIndexAppend(pWal, ++iFrame, pgno);
                   44789:       if( rc!=SQLITE_OK ) break;
                   44790: 
                   44791:       /* If nTruncate is non-zero, this is a commit record. */
                   44792:       if( nTruncate ){
                   44793:         pWal->hdr.mxFrame = iFrame;
                   44794:         pWal->hdr.nPage = nTruncate;
                   44795:         pWal->hdr.szPage = (u16)((szPage&0xff00) | (szPage>>16));
                   44796:         testcase( szPage<=32768 );
                   44797:         testcase( szPage>=65536 );
                   44798:         aFrameCksum[0] = pWal->hdr.aFrameCksum[0];
                   44799:         aFrameCksum[1] = pWal->hdr.aFrameCksum[1];
                   44800:       }
                   44801:     }
                   44802: 
                   44803:     sqlite3_free(aFrame);
                   44804:   }
                   44805: 
                   44806: finished:
                   44807:   if( rc==SQLITE_OK ){
                   44808:     volatile WalCkptInfo *pInfo;
                   44809:     int i;
                   44810:     pWal->hdr.aFrameCksum[0] = aFrameCksum[0];
                   44811:     pWal->hdr.aFrameCksum[1] = aFrameCksum[1];
                   44812:     walIndexWriteHdr(pWal);
                   44813: 
                   44814:     /* Reset the checkpoint-header. This is safe because this thread is 
                   44815:     ** currently holding locks that exclude all other readers, writers and
                   44816:     ** checkpointers.
                   44817:     */
                   44818:     pInfo = walCkptInfo(pWal);
                   44819:     pInfo->nBackfill = 0;
                   44820:     pInfo->aReadMark[0] = 0;
                   44821:     for(i=1; i<WAL_NREADER; i++) pInfo->aReadMark[i] = READMARK_NOT_USED;
                   44822: 
                   44823:     /* If more than one frame was recovered from the log file, report an
                   44824:     ** event via sqlite3_log(). This is to help with identifying performance
                   44825:     ** problems caused by applications routinely shutting down without
                   44826:     ** checkpointing the log file.
                   44827:     */
                   44828:     if( pWal->hdr.nPage ){
                   44829:       sqlite3_log(SQLITE_OK, "Recovered %d frames from WAL file %s",
                   44830:           pWal->hdr.nPage, pWal->zWalName
                   44831:       );
                   44832:     }
                   44833:   }
                   44834: 
                   44835: recovery_error:
                   44836:   WALTRACE(("WAL%p: recovery %s\n", pWal, rc ? "failed" : "ok"));
                   44837:   walUnlockExclusive(pWal, iLock, nLock);
                   44838:   return rc;
                   44839: }
                   44840: 
                   44841: /*
                   44842: ** Close an open wal-index.
                   44843: */
                   44844: static void walIndexClose(Wal *pWal, int isDelete){
                   44845:   if( pWal->exclusiveMode==WAL_HEAPMEMORY_MODE ){
                   44846:     int i;
                   44847:     for(i=0; i<pWal->nWiData; i++){
                   44848:       sqlite3_free((void *)pWal->apWiData[i]);
                   44849:       pWal->apWiData[i] = 0;
                   44850:     }
                   44851:   }else{
                   44852:     sqlite3OsShmUnmap(pWal->pDbFd, isDelete);
                   44853:   }
                   44854: }
                   44855: 
                   44856: /* 
                   44857: ** Open a connection to the WAL file zWalName. The database file must 
                   44858: ** already be opened on connection pDbFd. The buffer that zWalName points
                   44859: ** to must remain valid for the lifetime of the returned Wal* handle.
                   44860: **
                   44861: ** A SHARED lock should be held on the database file when this function
                   44862: ** is called. The purpose of this SHARED lock is to prevent any other
                   44863: ** client from unlinking the WAL or wal-index file. If another process
                   44864: ** were to do this just after this client opened one of these files, the
                   44865: ** system would be badly broken.
                   44866: **
                   44867: ** If the log file is successfully opened, SQLITE_OK is returned and 
                   44868: ** *ppWal is set to point to a new WAL handle. If an error occurs,
                   44869: ** an SQLite error code is returned and *ppWal is left unmodified.
                   44870: */
                   44871: SQLITE_PRIVATE int sqlite3WalOpen(
                   44872:   sqlite3_vfs *pVfs,              /* vfs module to open wal and wal-index */
                   44873:   sqlite3_file *pDbFd,            /* The open database file */
                   44874:   const char *zWalName,           /* Name of the WAL file */
                   44875:   int bNoShm,                     /* True to run in heap-memory mode */
                   44876:   i64 mxWalSize,                  /* Truncate WAL to this size on reset */
                   44877:   Wal **ppWal                     /* OUT: Allocated Wal handle */
                   44878: ){
                   44879:   int rc;                         /* Return Code */
                   44880:   Wal *pRet;                      /* Object to allocate and return */
                   44881:   int flags;                      /* Flags passed to OsOpen() */
                   44882: 
                   44883:   assert( zWalName && zWalName[0] );
                   44884:   assert( pDbFd );
                   44885: 
                   44886:   /* In the amalgamation, the os_unix.c and os_win.c source files come before
                   44887:   ** this source file.  Verify that the #defines of the locking byte offsets
                   44888:   ** in os_unix.c and os_win.c agree with the WALINDEX_LOCK_OFFSET value.
                   44889:   */
                   44890: #ifdef WIN_SHM_BASE
                   44891:   assert( WIN_SHM_BASE==WALINDEX_LOCK_OFFSET );
                   44892: #endif
                   44893: #ifdef UNIX_SHM_BASE
                   44894:   assert( UNIX_SHM_BASE==WALINDEX_LOCK_OFFSET );
                   44895: #endif
                   44896: 
                   44897: 
                   44898:   /* Allocate an instance of struct Wal to return. */
                   44899:   *ppWal = 0;
                   44900:   pRet = (Wal*)sqlite3MallocZero(sizeof(Wal) + pVfs->szOsFile);
                   44901:   if( !pRet ){
                   44902:     return SQLITE_NOMEM;
                   44903:   }
                   44904: 
                   44905:   pRet->pVfs = pVfs;
                   44906:   pRet->pWalFd = (sqlite3_file *)&pRet[1];
                   44907:   pRet->pDbFd = pDbFd;
                   44908:   pRet->readLock = -1;
                   44909:   pRet->mxWalSize = mxWalSize;
                   44910:   pRet->zWalName = zWalName;
                   44911:   pRet->exclusiveMode = (bNoShm ? WAL_HEAPMEMORY_MODE: WAL_NORMAL_MODE);
                   44912: 
                   44913:   /* Open file handle on the write-ahead log file. */
                   44914:   flags = (SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE|SQLITE_OPEN_WAL);
                   44915:   rc = sqlite3OsOpen(pVfs, zWalName, pRet->pWalFd, flags, &flags);
                   44916:   if( rc==SQLITE_OK && flags&SQLITE_OPEN_READONLY ){
                   44917:     pRet->readOnly = WAL_RDONLY;
                   44918:   }
                   44919: 
                   44920:   if( rc!=SQLITE_OK ){
                   44921:     walIndexClose(pRet, 0);
                   44922:     sqlite3OsClose(pRet->pWalFd);
                   44923:     sqlite3_free(pRet);
                   44924:   }else{
                   44925:     *ppWal = pRet;
                   44926:     WALTRACE(("WAL%d: opened\n", pRet));
                   44927:   }
                   44928:   return rc;
                   44929: }
                   44930: 
                   44931: /*
                   44932: ** Change the size to which the WAL file is trucated on each reset.
                   44933: */
                   44934: SQLITE_PRIVATE void sqlite3WalLimit(Wal *pWal, i64 iLimit){
                   44935:   if( pWal ) pWal->mxWalSize = iLimit;
                   44936: }
                   44937: 
                   44938: /*
                   44939: ** Find the smallest page number out of all pages held in the WAL that
                   44940: ** has not been returned by any prior invocation of this method on the
                   44941: ** same WalIterator object.   Write into *piFrame the frame index where
                   44942: ** that page was last written into the WAL.  Write into *piPage the page
                   44943: ** number.
                   44944: **
                   44945: ** Return 0 on success.  If there are no pages in the WAL with a page
                   44946: ** number larger than *piPage, then return 1.
                   44947: */
                   44948: static int walIteratorNext(
                   44949:   WalIterator *p,               /* Iterator */
                   44950:   u32 *piPage,                  /* OUT: The page number of the next page */
                   44951:   u32 *piFrame                  /* OUT: Wal frame index of next page */
                   44952: ){
                   44953:   u32 iMin;                     /* Result pgno must be greater than iMin */
                   44954:   u32 iRet = 0xFFFFFFFF;        /* 0xffffffff is never a valid page number */
                   44955:   int i;                        /* For looping through segments */
                   44956: 
                   44957:   iMin = p->iPrior;
                   44958:   assert( iMin<0xffffffff );
                   44959:   for(i=p->nSegment-1; i>=0; i--){
                   44960:     struct WalSegment *pSegment = &p->aSegment[i];
                   44961:     while( pSegment->iNext<pSegment->nEntry ){
                   44962:       u32 iPg = pSegment->aPgno[pSegment->aIndex[pSegment->iNext]];
                   44963:       if( iPg>iMin ){
                   44964:         if( iPg<iRet ){
                   44965:           iRet = iPg;
                   44966:           *piFrame = pSegment->iZero + pSegment->aIndex[pSegment->iNext];
                   44967:         }
                   44968:         break;
                   44969:       }
                   44970:       pSegment->iNext++;
                   44971:     }
                   44972:   }
                   44973: 
                   44974:   *piPage = p->iPrior = iRet;
                   44975:   return (iRet==0xFFFFFFFF);
                   44976: }
                   44977: 
                   44978: /*
                   44979: ** This function merges two sorted lists into a single sorted list.
                   44980: **
                   44981: ** aLeft[] and aRight[] are arrays of indices.  The sort key is
                   44982: ** aContent[aLeft[]] and aContent[aRight[]].  Upon entry, the following
                   44983: ** is guaranteed for all J<K:
                   44984: **
                   44985: **        aContent[aLeft[J]] < aContent[aLeft[K]]
                   44986: **        aContent[aRight[J]] < aContent[aRight[K]]
                   44987: **
                   44988: ** This routine overwrites aRight[] with a new (probably longer) sequence
                   44989: ** of indices such that the aRight[] contains every index that appears in
                   44990: ** either aLeft[] or the old aRight[] and such that the second condition
                   44991: ** above is still met.
                   44992: **
                   44993: ** The aContent[aLeft[X]] values will be unique for all X.  And the
                   44994: ** aContent[aRight[X]] values will be unique too.  But there might be
                   44995: ** one or more combinations of X and Y such that
                   44996: **
                   44997: **      aLeft[X]!=aRight[Y]  &&  aContent[aLeft[X]] == aContent[aRight[Y]]
                   44998: **
                   44999: ** When that happens, omit the aLeft[X] and use the aRight[Y] index.
                   45000: */
                   45001: static void walMerge(
                   45002:   const u32 *aContent,            /* Pages in wal - keys for the sort */
                   45003:   ht_slot *aLeft,                 /* IN: Left hand input list */
                   45004:   int nLeft,                      /* IN: Elements in array *paLeft */
                   45005:   ht_slot **paRight,              /* IN/OUT: Right hand input list */
                   45006:   int *pnRight,                   /* IN/OUT: Elements in *paRight */
                   45007:   ht_slot *aTmp                   /* Temporary buffer */
                   45008: ){
                   45009:   int iLeft = 0;                  /* Current index in aLeft */
                   45010:   int iRight = 0;                 /* Current index in aRight */
                   45011:   int iOut = 0;                   /* Current index in output buffer */
                   45012:   int nRight = *pnRight;
                   45013:   ht_slot *aRight = *paRight;
                   45014: 
                   45015:   assert( nLeft>0 && nRight>0 );
                   45016:   while( iRight<nRight || iLeft<nLeft ){
                   45017:     ht_slot logpage;
                   45018:     Pgno dbpage;
                   45019: 
                   45020:     if( (iLeft<nLeft) 
                   45021:      && (iRight>=nRight || aContent[aLeft[iLeft]]<aContent[aRight[iRight]])
                   45022:     ){
                   45023:       logpage = aLeft[iLeft++];
                   45024:     }else{
                   45025:       logpage = aRight[iRight++];
                   45026:     }
                   45027:     dbpage = aContent[logpage];
                   45028: 
                   45029:     aTmp[iOut++] = logpage;
                   45030:     if( iLeft<nLeft && aContent[aLeft[iLeft]]==dbpage ) iLeft++;
                   45031: 
                   45032:     assert( iLeft>=nLeft || aContent[aLeft[iLeft]]>dbpage );
                   45033:     assert( iRight>=nRight || aContent[aRight[iRight]]>dbpage );
                   45034:   }
                   45035: 
                   45036:   *paRight = aLeft;
                   45037:   *pnRight = iOut;
                   45038:   memcpy(aLeft, aTmp, sizeof(aTmp[0])*iOut);
                   45039: }
                   45040: 
                   45041: /*
                   45042: ** Sort the elements in list aList using aContent[] as the sort key.
                   45043: ** Remove elements with duplicate keys, preferring to keep the
                   45044: ** larger aList[] values.
                   45045: **
                   45046: ** The aList[] entries are indices into aContent[].  The values in
                   45047: ** aList[] are to be sorted so that for all J<K:
                   45048: **
                   45049: **      aContent[aList[J]] < aContent[aList[K]]
                   45050: **
                   45051: ** For any X and Y such that
                   45052: **
                   45053: **      aContent[aList[X]] == aContent[aList[Y]]
                   45054: **
                   45055: ** Keep the larger of the two values aList[X] and aList[Y] and discard
                   45056: ** the smaller.
                   45057: */
                   45058: static void walMergesort(
                   45059:   const u32 *aContent,            /* Pages in wal */
                   45060:   ht_slot *aBuffer,               /* Buffer of at least *pnList items to use */
                   45061:   ht_slot *aList,                 /* IN/OUT: List to sort */
                   45062:   int *pnList                     /* IN/OUT: Number of elements in aList[] */
                   45063: ){
                   45064:   struct Sublist {
                   45065:     int nList;                    /* Number of elements in aList */
                   45066:     ht_slot *aList;               /* Pointer to sub-list content */
                   45067:   };
                   45068: 
                   45069:   const int nList = *pnList;      /* Size of input list */
                   45070:   int nMerge = 0;                 /* Number of elements in list aMerge */
                   45071:   ht_slot *aMerge = 0;            /* List to be merged */
                   45072:   int iList;                      /* Index into input list */
                   45073:   int iSub = 0;                   /* Index into aSub array */
                   45074:   struct Sublist aSub[13];        /* Array of sub-lists */
                   45075: 
                   45076:   memset(aSub, 0, sizeof(aSub));
                   45077:   assert( nList<=HASHTABLE_NPAGE && nList>0 );
                   45078:   assert( HASHTABLE_NPAGE==(1<<(ArraySize(aSub)-1)) );
                   45079: 
                   45080:   for(iList=0; iList<nList; iList++){
                   45081:     nMerge = 1;
                   45082:     aMerge = &aList[iList];
                   45083:     for(iSub=0; iList & (1<<iSub); iSub++){
                   45084:       struct Sublist *p = &aSub[iSub];
                   45085:       assert( p->aList && p->nList<=(1<<iSub) );
                   45086:       assert( p->aList==&aList[iList&~((2<<iSub)-1)] );
                   45087:       walMerge(aContent, p->aList, p->nList, &aMerge, &nMerge, aBuffer);
                   45088:     }
                   45089:     aSub[iSub].aList = aMerge;
                   45090:     aSub[iSub].nList = nMerge;
                   45091:   }
                   45092: 
                   45093:   for(iSub++; iSub<ArraySize(aSub); iSub++){
                   45094:     if( nList & (1<<iSub) ){
                   45095:       struct Sublist *p = &aSub[iSub];
                   45096:       assert( p->nList<=(1<<iSub) );
                   45097:       assert( p->aList==&aList[nList&~((2<<iSub)-1)] );
                   45098:       walMerge(aContent, p->aList, p->nList, &aMerge, &nMerge, aBuffer);
                   45099:     }
                   45100:   }
                   45101:   assert( aMerge==aList );
                   45102:   *pnList = nMerge;
                   45103: 
                   45104: #ifdef SQLITE_DEBUG
                   45105:   {
                   45106:     int i;
                   45107:     for(i=1; i<*pnList; i++){
                   45108:       assert( aContent[aList[i]] > aContent[aList[i-1]] );
                   45109:     }
                   45110:   }
                   45111: #endif
                   45112: }
                   45113: 
                   45114: /* 
                   45115: ** Free an iterator allocated by walIteratorInit().
                   45116: */
                   45117: static void walIteratorFree(WalIterator *p){
                   45118:   sqlite3ScratchFree(p);
                   45119: }
                   45120: 
                   45121: /*
                   45122: ** Construct a WalInterator object that can be used to loop over all 
                   45123: ** pages in the WAL in ascending order. The caller must hold the checkpoint
                   45124: ** lock.
                   45125: **
                   45126: ** On success, make *pp point to the newly allocated WalInterator object
                   45127: ** return SQLITE_OK. Otherwise, return an error code. If this routine
                   45128: ** returns an error, the value of *pp is undefined.
                   45129: **
                   45130: ** The calling routine should invoke walIteratorFree() to destroy the
                   45131: ** WalIterator object when it has finished with it.
                   45132: */
                   45133: static int walIteratorInit(Wal *pWal, WalIterator **pp){
                   45134:   WalIterator *p;                 /* Return value */
                   45135:   int nSegment;                   /* Number of segments to merge */
                   45136:   u32 iLast;                      /* Last frame in log */
                   45137:   int nByte;                      /* Number of bytes to allocate */
                   45138:   int i;                          /* Iterator variable */
                   45139:   ht_slot *aTmp;                  /* Temp space used by merge-sort */
                   45140:   int rc = SQLITE_OK;             /* Return Code */
                   45141: 
                   45142:   /* This routine only runs while holding the checkpoint lock. And
                   45143:   ** it only runs if there is actually content in the log (mxFrame>0).
                   45144:   */
                   45145:   assert( pWal->ckptLock && pWal->hdr.mxFrame>0 );
                   45146:   iLast = pWal->hdr.mxFrame;
                   45147: 
                   45148:   /* Allocate space for the WalIterator object. */
                   45149:   nSegment = walFramePage(iLast) + 1;
                   45150:   nByte = sizeof(WalIterator) 
                   45151:         + (nSegment-1)*sizeof(struct WalSegment)
                   45152:         + iLast*sizeof(ht_slot);
                   45153:   p = (WalIterator *)sqlite3ScratchMalloc(nByte);
                   45154:   if( !p ){
                   45155:     return SQLITE_NOMEM;
                   45156:   }
                   45157:   memset(p, 0, nByte);
                   45158:   p->nSegment = nSegment;
                   45159: 
                   45160:   /* Allocate temporary space used by the merge-sort routine. This block
                   45161:   ** of memory will be freed before this function returns.
                   45162:   */
                   45163:   aTmp = (ht_slot *)sqlite3ScratchMalloc(
                   45164:       sizeof(ht_slot) * (iLast>HASHTABLE_NPAGE?HASHTABLE_NPAGE:iLast)
                   45165:   );
                   45166:   if( !aTmp ){
                   45167:     rc = SQLITE_NOMEM;
                   45168:   }
                   45169: 
                   45170:   for(i=0; rc==SQLITE_OK && i<nSegment; i++){
                   45171:     volatile ht_slot *aHash;
                   45172:     u32 iZero;
                   45173:     volatile u32 *aPgno;
                   45174: 
                   45175:     rc = walHashGet(pWal, i, &aHash, &aPgno, &iZero);
                   45176:     if( rc==SQLITE_OK ){
                   45177:       int j;                      /* Counter variable */
                   45178:       int nEntry;                 /* Number of entries in this segment */
                   45179:       ht_slot *aIndex;            /* Sorted index for this segment */
                   45180: 
                   45181:       aPgno++;
                   45182:       if( (i+1)==nSegment ){
                   45183:         nEntry = (int)(iLast - iZero);
                   45184:       }else{
                   45185:         nEntry = (int)((u32*)aHash - (u32*)aPgno);
                   45186:       }
                   45187:       aIndex = &((ht_slot *)&p->aSegment[p->nSegment])[iZero];
                   45188:       iZero++;
                   45189:   
                   45190:       for(j=0; j<nEntry; j++){
                   45191:         aIndex[j] = (ht_slot)j;
                   45192:       }
                   45193:       walMergesort((u32 *)aPgno, aTmp, aIndex, &nEntry);
                   45194:       p->aSegment[i].iZero = iZero;
                   45195:       p->aSegment[i].nEntry = nEntry;
                   45196:       p->aSegment[i].aIndex = aIndex;
                   45197:       p->aSegment[i].aPgno = (u32 *)aPgno;
                   45198:     }
                   45199:   }
                   45200:   sqlite3ScratchFree(aTmp);
                   45201: 
                   45202:   if( rc!=SQLITE_OK ){
                   45203:     walIteratorFree(p);
                   45204:   }
                   45205:   *pp = p;
                   45206:   return rc;
                   45207: }
                   45208: 
                   45209: /*
                   45210: ** Attempt to obtain the exclusive WAL lock defined by parameters lockIdx and
                   45211: ** n. If the attempt fails and parameter xBusy is not NULL, then it is a
                   45212: ** busy-handler function. Invoke it and retry the lock until either the
                   45213: ** lock is successfully obtained or the busy-handler returns 0.
                   45214: */
                   45215: static int walBusyLock(
                   45216:   Wal *pWal,                      /* WAL connection */
                   45217:   int (*xBusy)(void*),            /* Function to call when busy */
                   45218:   void *pBusyArg,                 /* Context argument for xBusyHandler */
                   45219:   int lockIdx,                    /* Offset of first byte to lock */
                   45220:   int n                           /* Number of bytes to lock */
                   45221: ){
                   45222:   int rc;
                   45223:   do {
                   45224:     rc = walLockExclusive(pWal, lockIdx, n);
                   45225:   }while( xBusy && rc==SQLITE_BUSY && xBusy(pBusyArg) );
                   45226:   return rc;
                   45227: }
                   45228: 
                   45229: /*
                   45230: ** The cache of the wal-index header must be valid to call this function.
                   45231: ** Return the page-size in bytes used by the database.
                   45232: */
                   45233: static int walPagesize(Wal *pWal){
                   45234:   return (pWal->hdr.szPage&0xfe00) + ((pWal->hdr.szPage&0x0001)<<16);
                   45235: }
                   45236: 
                   45237: /*
                   45238: ** Copy as much content as we can from the WAL back into the database file
                   45239: ** in response to an sqlite3_wal_checkpoint() request or the equivalent.
                   45240: **
                   45241: ** The amount of information copies from WAL to database might be limited
                   45242: ** by active readers.  This routine will never overwrite a database page
                   45243: ** that a concurrent reader might be using.
                   45244: **
                   45245: ** All I/O barrier operations (a.k.a fsyncs) occur in this routine when
                   45246: ** SQLite is in WAL-mode in synchronous=NORMAL.  That means that if 
                   45247: ** checkpoints are always run by a background thread or background 
                   45248: ** process, foreground threads will never block on a lengthy fsync call.
                   45249: **
                   45250: ** Fsync is called on the WAL before writing content out of the WAL and
                   45251: ** into the database.  This ensures that if the new content is persistent
                   45252: ** in the WAL and can be recovered following a power-loss or hard reset.
                   45253: **
                   45254: ** Fsync is also called on the database file if (and only if) the entire
                   45255: ** WAL content is copied into the database file.  This second fsync makes
                   45256: ** it safe to delete the WAL since the new content will persist in the
                   45257: ** database file.
                   45258: **
                   45259: ** This routine uses and updates the nBackfill field of the wal-index header.
                   45260: ** This is the only routine tha will increase the value of nBackfill.  
                   45261: ** (A WAL reset or recovery will revert nBackfill to zero, but not increase
                   45262: ** its value.)
                   45263: **
                   45264: ** The caller must be holding sufficient locks to ensure that no other
                   45265: ** checkpoint is running (in any other thread or process) at the same
                   45266: ** time.
                   45267: */
                   45268: static int walCheckpoint(
                   45269:   Wal *pWal,                      /* Wal connection */
                   45270:   int eMode,                      /* One of PASSIVE, FULL or RESTART */
                   45271:   int (*xBusyCall)(void*),        /* Function to call when busy */
                   45272:   void *pBusyArg,                 /* Context argument for xBusyHandler */
                   45273:   int sync_flags,                 /* Flags for OsSync() (or 0) */
                   45274:   u8 *zBuf                        /* Temporary buffer to use */
                   45275: ){
                   45276:   int rc;                         /* Return code */
                   45277:   int szPage;                     /* Database page-size */
                   45278:   WalIterator *pIter = 0;         /* Wal iterator context */
                   45279:   u32 iDbpage = 0;                /* Next database page to write */
                   45280:   u32 iFrame = 0;                 /* Wal frame containing data for iDbpage */
                   45281:   u32 mxSafeFrame;                /* Max frame that can be backfilled */
                   45282:   u32 mxPage;                     /* Max database page to write */
                   45283:   int i;                          /* Loop counter */
                   45284:   volatile WalCkptInfo *pInfo;    /* The checkpoint status information */
                   45285:   int (*xBusy)(void*) = 0;        /* Function to call when waiting for locks */
                   45286: 
                   45287:   szPage = walPagesize(pWal);
                   45288:   testcase( szPage<=32768 );
                   45289:   testcase( szPage>=65536 );
                   45290:   pInfo = walCkptInfo(pWal);
                   45291:   if( pInfo->nBackfill>=pWal->hdr.mxFrame ) return SQLITE_OK;
                   45292: 
                   45293:   /* Allocate the iterator */
                   45294:   rc = walIteratorInit(pWal, &pIter);
                   45295:   if( rc!=SQLITE_OK ){
                   45296:     return rc;
                   45297:   }
                   45298:   assert( pIter );
                   45299: 
                   45300:   if( eMode!=SQLITE_CHECKPOINT_PASSIVE ) xBusy = xBusyCall;
                   45301: 
                   45302:   /* Compute in mxSafeFrame the index of the last frame of the WAL that is
                   45303:   ** safe to write into the database.  Frames beyond mxSafeFrame might
                   45304:   ** overwrite database pages that are in use by active readers and thus
                   45305:   ** cannot be backfilled from the WAL.
                   45306:   */
                   45307:   mxSafeFrame = pWal->hdr.mxFrame;
                   45308:   mxPage = pWal->hdr.nPage;
                   45309:   for(i=1; i<WAL_NREADER; i++){
                   45310:     u32 y = pInfo->aReadMark[i];
                   45311:     if( mxSafeFrame>y ){
                   45312:       assert( y<=pWal->hdr.mxFrame );
                   45313:       rc = walBusyLock(pWal, xBusy, pBusyArg, WAL_READ_LOCK(i), 1);
                   45314:       if( rc==SQLITE_OK ){
                   45315:         pInfo->aReadMark[i] = READMARK_NOT_USED;
                   45316:         walUnlockExclusive(pWal, WAL_READ_LOCK(i), 1);
                   45317:       }else if( rc==SQLITE_BUSY ){
                   45318:         mxSafeFrame = y;
                   45319:         xBusy = 0;
                   45320:       }else{
                   45321:         goto walcheckpoint_out;
                   45322:       }
                   45323:     }
                   45324:   }
                   45325: 
                   45326:   if( pInfo->nBackfill<mxSafeFrame
                   45327:    && (rc = walBusyLock(pWal, xBusy, pBusyArg, WAL_READ_LOCK(0), 1))==SQLITE_OK
                   45328:   ){
                   45329:     i64 nSize;                    /* Current size of database file */
                   45330:     u32 nBackfill = pInfo->nBackfill;
                   45331: 
                   45332:     /* Sync the WAL to disk */
                   45333:     if( sync_flags ){
                   45334:       rc = sqlite3OsSync(pWal->pWalFd, sync_flags);
                   45335:     }
                   45336: 
                   45337:     /* If the database file may grow as a result of this checkpoint, hint
                   45338:     ** about the eventual size of the db file to the VFS layer. 
                   45339:     */
                   45340:     if( rc==SQLITE_OK ){
                   45341:       i64 nReq = ((i64)mxPage * szPage);
                   45342:       rc = sqlite3OsFileSize(pWal->pDbFd, &nSize);
                   45343:       if( rc==SQLITE_OK && nSize<nReq ){
                   45344:         sqlite3OsFileControl(pWal->pDbFd, SQLITE_FCNTL_SIZE_HINT, &nReq);
                   45345:       }
                   45346:     }
                   45347: 
                   45348:     /* Iterate through the contents of the WAL, copying data to the db file. */
                   45349:     while( rc==SQLITE_OK && 0==walIteratorNext(pIter, &iDbpage, &iFrame) ){
                   45350:       i64 iOffset;
                   45351:       assert( walFramePgno(pWal, iFrame)==iDbpage );
                   45352:       if( iFrame<=nBackfill || iFrame>mxSafeFrame || iDbpage>mxPage ) continue;
                   45353:       iOffset = walFrameOffset(iFrame, szPage) + WAL_FRAME_HDRSIZE;
                   45354:       /* testcase( IS_BIG_INT(iOffset) ); // requires a 4GiB WAL file */
                   45355:       rc = sqlite3OsRead(pWal->pWalFd, zBuf, szPage, iOffset);
                   45356:       if( rc!=SQLITE_OK ) break;
                   45357:       iOffset = (iDbpage-1)*(i64)szPage;
                   45358:       testcase( IS_BIG_INT(iOffset) );
                   45359:       rc = sqlite3OsWrite(pWal->pDbFd, zBuf, szPage, iOffset);
                   45360:       if( rc!=SQLITE_OK ) break;
                   45361:     }
                   45362: 
                   45363:     /* If work was actually accomplished... */
                   45364:     if( rc==SQLITE_OK ){
                   45365:       if( mxSafeFrame==walIndexHdr(pWal)->mxFrame ){
                   45366:         i64 szDb = pWal->hdr.nPage*(i64)szPage;
                   45367:         testcase( IS_BIG_INT(szDb) );
                   45368:         rc = sqlite3OsTruncate(pWal->pDbFd, szDb);
                   45369:         if( rc==SQLITE_OK && sync_flags ){
                   45370:           rc = sqlite3OsSync(pWal->pDbFd, sync_flags);
                   45371:         }
                   45372:       }
                   45373:       if( rc==SQLITE_OK ){
                   45374:         pInfo->nBackfill = mxSafeFrame;
                   45375:       }
                   45376:     }
                   45377: 
                   45378:     /* Release the reader lock held while backfilling */
                   45379:     walUnlockExclusive(pWal, WAL_READ_LOCK(0), 1);
                   45380:   }
                   45381: 
                   45382:   if( rc==SQLITE_BUSY ){
                   45383:     /* Reset the return code so as not to report a checkpoint failure
                   45384:     ** just because there are active readers.  */
                   45385:     rc = SQLITE_OK;
                   45386:   }
                   45387: 
                   45388:   /* If this is an SQLITE_CHECKPOINT_RESTART operation, and the entire wal
                   45389:   ** file has been copied into the database file, then block until all
                   45390:   ** readers have finished using the wal file. This ensures that the next
                   45391:   ** process to write to the database restarts the wal file.
                   45392:   */
                   45393:   if( rc==SQLITE_OK && eMode!=SQLITE_CHECKPOINT_PASSIVE ){
                   45394:     assert( pWal->writeLock );
                   45395:     if( pInfo->nBackfill<pWal->hdr.mxFrame ){
                   45396:       rc = SQLITE_BUSY;
                   45397:     }else if( eMode==SQLITE_CHECKPOINT_RESTART ){
                   45398:       assert( mxSafeFrame==pWal->hdr.mxFrame );
                   45399:       rc = walBusyLock(pWal, xBusy, pBusyArg, WAL_READ_LOCK(1), WAL_NREADER-1);
                   45400:       if( rc==SQLITE_OK ){
                   45401:         walUnlockExclusive(pWal, WAL_READ_LOCK(1), WAL_NREADER-1);
                   45402:       }
                   45403:     }
                   45404:   }
                   45405: 
                   45406:  walcheckpoint_out:
                   45407:   walIteratorFree(pIter);
                   45408:   return rc;
                   45409: }
                   45410: 
                   45411: /*
                   45412: ** Close a connection to a log file.
                   45413: */
                   45414: SQLITE_PRIVATE int sqlite3WalClose(
                   45415:   Wal *pWal,                      /* Wal to close */
                   45416:   int sync_flags,                 /* Flags to pass to OsSync() (or 0) */
                   45417:   int nBuf,
                   45418:   u8 *zBuf                        /* Buffer of at least nBuf bytes */
                   45419: ){
                   45420:   int rc = SQLITE_OK;
                   45421:   if( pWal ){
                   45422:     int isDelete = 0;             /* True to unlink wal and wal-index files */
                   45423: 
                   45424:     /* If an EXCLUSIVE lock can be obtained on the database file (using the
                   45425:     ** ordinary, rollback-mode locking methods, this guarantees that the
                   45426:     ** connection associated with this log file is the only connection to
                   45427:     ** the database. In this case checkpoint the database and unlink both
                   45428:     ** the wal and wal-index files.
                   45429:     **
                   45430:     ** The EXCLUSIVE lock is not released before returning.
                   45431:     */
                   45432:     rc = sqlite3OsLock(pWal->pDbFd, SQLITE_LOCK_EXCLUSIVE);
                   45433:     if( rc==SQLITE_OK ){
                   45434:       if( pWal->exclusiveMode==WAL_NORMAL_MODE ){
                   45435:         pWal->exclusiveMode = WAL_EXCLUSIVE_MODE;
                   45436:       }
                   45437:       rc = sqlite3WalCheckpoint(
                   45438:           pWal, SQLITE_CHECKPOINT_PASSIVE, 0, 0, sync_flags, nBuf, zBuf, 0, 0
                   45439:       );
                   45440:       if( rc==SQLITE_OK ){
                   45441:         isDelete = 1;
                   45442:       }
                   45443:     }
                   45444: 
                   45445:     walIndexClose(pWal, isDelete);
                   45446:     sqlite3OsClose(pWal->pWalFd);
                   45447:     if( isDelete ){
                   45448:       sqlite3OsDelete(pWal->pVfs, pWal->zWalName, 0);
                   45449:     }
                   45450:     WALTRACE(("WAL%p: closed\n", pWal));
                   45451:     sqlite3_free((void *)pWal->apWiData);
                   45452:     sqlite3_free(pWal);
                   45453:   }
                   45454:   return rc;
                   45455: }
                   45456: 
                   45457: /*
                   45458: ** Try to read the wal-index header.  Return 0 on success and 1 if
                   45459: ** there is a problem.
                   45460: **
                   45461: ** The wal-index is in shared memory.  Another thread or process might
                   45462: ** be writing the header at the same time this procedure is trying to
                   45463: ** read it, which might result in inconsistency.  A dirty read is detected
                   45464: ** by verifying that both copies of the header are the same and also by
                   45465: ** a checksum on the header.
                   45466: **
                   45467: ** If and only if the read is consistent and the header is different from
                   45468: ** pWal->hdr, then pWal->hdr is updated to the content of the new header
                   45469: ** and *pChanged is set to 1.
                   45470: **
                   45471: ** If the checksum cannot be verified return non-zero. If the header
                   45472: ** is read successfully and the checksum verified, return zero.
                   45473: */
                   45474: static int walIndexTryHdr(Wal *pWal, int *pChanged){
                   45475:   u32 aCksum[2];                  /* Checksum on the header content */
                   45476:   WalIndexHdr h1, h2;             /* Two copies of the header content */
                   45477:   WalIndexHdr volatile *aHdr;     /* Header in shared memory */
                   45478: 
                   45479:   /* The first page of the wal-index must be mapped at this point. */
                   45480:   assert( pWal->nWiData>0 && pWal->apWiData[0] );
                   45481: 
                   45482:   /* Read the header. This might happen concurrently with a write to the
                   45483:   ** same area of shared memory on a different CPU in a SMP,
                   45484:   ** meaning it is possible that an inconsistent snapshot is read
                   45485:   ** from the file. If this happens, return non-zero.
                   45486:   **
                   45487:   ** There are two copies of the header at the beginning of the wal-index.
                   45488:   ** When reading, read [0] first then [1].  Writes are in the reverse order.
                   45489:   ** Memory barriers are used to prevent the compiler or the hardware from
                   45490:   ** reordering the reads and writes.
                   45491:   */
                   45492:   aHdr = walIndexHdr(pWal);
                   45493:   memcpy(&h1, (void *)&aHdr[0], sizeof(h1));
                   45494:   walShmBarrier(pWal);
                   45495:   memcpy(&h2, (void *)&aHdr[1], sizeof(h2));
                   45496: 
                   45497:   if( memcmp(&h1, &h2, sizeof(h1))!=0 ){
                   45498:     return 1;   /* Dirty read */
                   45499:   }  
                   45500:   if( h1.isInit==0 ){
                   45501:     return 1;   /* Malformed header - probably all zeros */
                   45502:   }
                   45503:   walChecksumBytes(1, (u8*)&h1, sizeof(h1)-sizeof(h1.aCksum), 0, aCksum);
                   45504:   if( aCksum[0]!=h1.aCksum[0] || aCksum[1]!=h1.aCksum[1] ){
                   45505:     return 1;   /* Checksum does not match */
                   45506:   }
                   45507: 
                   45508:   if( memcmp(&pWal->hdr, &h1, sizeof(WalIndexHdr)) ){
                   45509:     *pChanged = 1;
                   45510:     memcpy(&pWal->hdr, &h1, sizeof(WalIndexHdr));
                   45511:     pWal->szPage = (pWal->hdr.szPage&0xfe00) + ((pWal->hdr.szPage&0x0001)<<16);
                   45512:     testcase( pWal->szPage<=32768 );
                   45513:     testcase( pWal->szPage>=65536 );
                   45514:   }
                   45515: 
                   45516:   /* The header was successfully read. Return zero. */
                   45517:   return 0;
                   45518: }
                   45519: 
                   45520: /*
                   45521: ** Read the wal-index header from the wal-index and into pWal->hdr.
                   45522: ** If the wal-header appears to be corrupt, try to reconstruct the
                   45523: ** wal-index from the WAL before returning.
                   45524: **
                   45525: ** Set *pChanged to 1 if the wal-index header value in pWal->hdr is
                   45526: ** changed by this opertion.  If pWal->hdr is unchanged, set *pChanged
                   45527: ** to 0.
                   45528: **
                   45529: ** If the wal-index header is successfully read, return SQLITE_OK. 
                   45530: ** Otherwise an SQLite error code.
                   45531: */
                   45532: static int walIndexReadHdr(Wal *pWal, int *pChanged){
                   45533:   int rc;                         /* Return code */
                   45534:   int badHdr;                     /* True if a header read failed */
                   45535:   volatile u32 *page0;            /* Chunk of wal-index containing header */
                   45536: 
                   45537:   /* Ensure that page 0 of the wal-index (the page that contains the 
                   45538:   ** wal-index header) is mapped. Return early if an error occurs here.
                   45539:   */
                   45540:   assert( pChanged );
                   45541:   rc = walIndexPage(pWal, 0, &page0);
                   45542:   if( rc!=SQLITE_OK ){
                   45543:     return rc;
                   45544:   };
                   45545:   assert( page0 || pWal->writeLock==0 );
                   45546: 
                   45547:   /* If the first page of the wal-index has been mapped, try to read the
                   45548:   ** wal-index header immediately, without holding any lock. This usually
                   45549:   ** works, but may fail if the wal-index header is corrupt or currently 
                   45550:   ** being modified by another thread or process.
                   45551:   */
                   45552:   badHdr = (page0 ? walIndexTryHdr(pWal, pChanged) : 1);
                   45553: 
                   45554:   /* If the first attempt failed, it might have been due to a race
                   45555:   ** with a writer.  So get a WRITE lock and try again.
                   45556:   */
                   45557:   assert( badHdr==0 || pWal->writeLock==0 );
                   45558:   if( badHdr ){
                   45559:     if( pWal->readOnly & WAL_SHM_RDONLY ){
                   45560:       if( SQLITE_OK==(rc = walLockShared(pWal, WAL_WRITE_LOCK)) ){
                   45561:         walUnlockShared(pWal, WAL_WRITE_LOCK);
                   45562:         rc = SQLITE_READONLY_RECOVERY;
                   45563:       }
                   45564:     }else if( SQLITE_OK==(rc = walLockExclusive(pWal, WAL_WRITE_LOCK, 1)) ){
                   45565:       pWal->writeLock = 1;
                   45566:       if( SQLITE_OK==(rc = walIndexPage(pWal, 0, &page0)) ){
                   45567:         badHdr = walIndexTryHdr(pWal, pChanged);
                   45568:         if( badHdr ){
                   45569:           /* If the wal-index header is still malformed even while holding
                   45570:           ** a WRITE lock, it can only mean that the header is corrupted and
                   45571:           ** needs to be reconstructed.  So run recovery to do exactly that.
                   45572:           */
                   45573:           rc = walIndexRecover(pWal);
                   45574:           *pChanged = 1;
                   45575:         }
                   45576:       }
                   45577:       pWal->writeLock = 0;
                   45578:       walUnlockExclusive(pWal, WAL_WRITE_LOCK, 1);
                   45579:     }
                   45580:   }
                   45581: 
                   45582:   /* If the header is read successfully, check the version number to make
                   45583:   ** sure the wal-index was not constructed with some future format that
                   45584:   ** this version of SQLite cannot understand.
                   45585:   */
                   45586:   if( badHdr==0 && pWal->hdr.iVersion!=WALINDEX_MAX_VERSION ){
                   45587:     rc = SQLITE_CANTOPEN_BKPT;
                   45588:   }
                   45589: 
                   45590:   return rc;
                   45591: }
                   45592: 
                   45593: /*
                   45594: ** This is the value that walTryBeginRead returns when it needs to
                   45595: ** be retried.
                   45596: */
                   45597: #define WAL_RETRY  (-1)
                   45598: 
                   45599: /*
                   45600: ** Attempt to start a read transaction.  This might fail due to a race or
                   45601: ** other transient condition.  When that happens, it returns WAL_RETRY to
                   45602: ** indicate to the caller that it is safe to retry immediately.
                   45603: **
                   45604: ** On success return SQLITE_OK.  On a permanent failure (such an
                   45605: ** I/O error or an SQLITE_BUSY because another process is running
                   45606: ** recovery) return a positive error code.
                   45607: **
                   45608: ** The useWal parameter is true to force the use of the WAL and disable
                   45609: ** the case where the WAL is bypassed because it has been completely
                   45610: ** checkpointed.  If useWal==0 then this routine calls walIndexReadHdr() 
                   45611: ** to make a copy of the wal-index header into pWal->hdr.  If the 
                   45612: ** wal-index header has changed, *pChanged is set to 1 (as an indication 
                   45613: ** to the caller that the local paget cache is obsolete and needs to be 
                   45614: ** flushed.)  When useWal==1, the wal-index header is assumed to already
                   45615: ** be loaded and the pChanged parameter is unused.
                   45616: **
                   45617: ** The caller must set the cnt parameter to the number of prior calls to
                   45618: ** this routine during the current read attempt that returned WAL_RETRY.
                   45619: ** This routine will start taking more aggressive measures to clear the
                   45620: ** race conditions after multiple WAL_RETRY returns, and after an excessive
                   45621: ** number of errors will ultimately return SQLITE_PROTOCOL.  The
                   45622: ** SQLITE_PROTOCOL return indicates that some other process has gone rogue
                   45623: ** and is not honoring the locking protocol.  There is a vanishingly small
                   45624: ** chance that SQLITE_PROTOCOL could be returned because of a run of really
                   45625: ** bad luck when there is lots of contention for the wal-index, but that
                   45626: ** possibility is so small that it can be safely neglected, we believe.
                   45627: **
                   45628: ** On success, this routine obtains a read lock on 
                   45629: ** WAL_READ_LOCK(pWal->readLock).  The pWal->readLock integer is
                   45630: ** in the range 0 <= pWal->readLock < WAL_NREADER.  If pWal->readLock==(-1)
                   45631: ** that means the Wal does not hold any read lock.  The reader must not
                   45632: ** access any database page that is modified by a WAL frame up to and
                   45633: ** including frame number aReadMark[pWal->readLock].  The reader will
                   45634: ** use WAL frames up to and including pWal->hdr.mxFrame if pWal->readLock>0
                   45635: ** Or if pWal->readLock==0, then the reader will ignore the WAL
                   45636: ** completely and get all content directly from the database file.
                   45637: ** If the useWal parameter is 1 then the WAL will never be ignored and
                   45638: ** this routine will always set pWal->readLock>0 on success.
                   45639: ** When the read transaction is completed, the caller must release the
                   45640: ** lock on WAL_READ_LOCK(pWal->readLock) and set pWal->readLock to -1.
                   45641: **
                   45642: ** This routine uses the nBackfill and aReadMark[] fields of the header
                   45643: ** to select a particular WAL_READ_LOCK() that strives to let the
                   45644: ** checkpoint process do as much work as possible.  This routine might
                   45645: ** update values of the aReadMark[] array in the header, but if it does
                   45646: ** so it takes care to hold an exclusive lock on the corresponding
                   45647: ** WAL_READ_LOCK() while changing values.
                   45648: */
                   45649: static int walTryBeginRead(Wal *pWal, int *pChanged, int useWal, int cnt){
                   45650:   volatile WalCkptInfo *pInfo;    /* Checkpoint information in wal-index */
                   45651:   u32 mxReadMark;                 /* Largest aReadMark[] value */
                   45652:   int mxI;                        /* Index of largest aReadMark[] value */
                   45653:   int i;                          /* Loop counter */
                   45654:   int rc = SQLITE_OK;             /* Return code  */
                   45655: 
                   45656:   assert( pWal->readLock<0 );     /* Not currently locked */
                   45657: 
                   45658:   /* Take steps to avoid spinning forever if there is a protocol error.
                   45659:   **
                   45660:   ** Circumstances that cause a RETRY should only last for the briefest
                   45661:   ** instances of time.  No I/O or other system calls are done while the
                   45662:   ** locks are held, so the locks should not be held for very long. But 
                   45663:   ** if we are unlucky, another process that is holding a lock might get
                   45664:   ** paged out or take a page-fault that is time-consuming to resolve, 
                   45665:   ** during the few nanoseconds that it is holding the lock.  In that case,
                   45666:   ** it might take longer than normal for the lock to free.
                   45667:   **
                   45668:   ** After 5 RETRYs, we begin calling sqlite3OsSleep().  The first few
                   45669:   ** calls to sqlite3OsSleep() have a delay of 1 microsecond.  Really this
                   45670:   ** is more of a scheduler yield than an actual delay.  But on the 10th
                   45671:   ** an subsequent retries, the delays start becoming longer and longer, 
                   45672:   ** so that on the 100th (and last) RETRY we delay for 21 milliseconds.
                   45673:   ** The total delay time before giving up is less than 1 second.
                   45674:   */
                   45675:   if( cnt>5 ){
                   45676:     int nDelay = 1;                      /* Pause time in microseconds */
                   45677:     if( cnt>100 ){
                   45678:       VVA_ONLY( pWal->lockError = 1; )
                   45679:       return SQLITE_PROTOCOL;
                   45680:     }
                   45681:     if( cnt>=10 ) nDelay = (cnt-9)*238;  /* Max delay 21ms. Total delay 996ms */
                   45682:     sqlite3OsSleep(pWal->pVfs, nDelay);
                   45683:   }
                   45684: 
                   45685:   if( !useWal ){
                   45686:     rc = walIndexReadHdr(pWal, pChanged);
                   45687:     if( rc==SQLITE_BUSY ){
                   45688:       /* If there is not a recovery running in another thread or process
                   45689:       ** then convert BUSY errors to WAL_RETRY.  If recovery is known to
                   45690:       ** be running, convert BUSY to BUSY_RECOVERY.  There is a race here
                   45691:       ** which might cause WAL_RETRY to be returned even if BUSY_RECOVERY
                   45692:       ** would be technically correct.  But the race is benign since with
                   45693:       ** WAL_RETRY this routine will be called again and will probably be
                   45694:       ** right on the second iteration.
                   45695:       */
                   45696:       if( pWal->apWiData[0]==0 ){
                   45697:         /* This branch is taken when the xShmMap() method returns SQLITE_BUSY.
                   45698:         ** We assume this is a transient condition, so return WAL_RETRY. The
                   45699:         ** xShmMap() implementation used by the default unix and win32 VFS 
                   45700:         ** modules may return SQLITE_BUSY due to a race condition in the 
                   45701:         ** code that determines whether or not the shared-memory region 
                   45702:         ** must be zeroed before the requested page is returned.
                   45703:         */
                   45704:         rc = WAL_RETRY;
                   45705:       }else if( SQLITE_OK==(rc = walLockShared(pWal, WAL_RECOVER_LOCK)) ){
                   45706:         walUnlockShared(pWal, WAL_RECOVER_LOCK);
                   45707:         rc = WAL_RETRY;
                   45708:       }else if( rc==SQLITE_BUSY ){
                   45709:         rc = SQLITE_BUSY_RECOVERY;
                   45710:       }
                   45711:     }
                   45712:     if( rc!=SQLITE_OK ){
                   45713:       return rc;
                   45714:     }
                   45715:   }
                   45716: 
                   45717:   pInfo = walCkptInfo(pWal);
                   45718:   if( !useWal && pInfo->nBackfill==pWal->hdr.mxFrame ){
                   45719:     /* The WAL has been completely backfilled (or it is empty).
                   45720:     ** and can be safely ignored.
                   45721:     */
                   45722:     rc = walLockShared(pWal, WAL_READ_LOCK(0));
                   45723:     walShmBarrier(pWal);
                   45724:     if( rc==SQLITE_OK ){
                   45725:       if( memcmp((void *)walIndexHdr(pWal), &pWal->hdr, sizeof(WalIndexHdr)) ){
                   45726:         /* It is not safe to allow the reader to continue here if frames
                   45727:         ** may have been appended to the log before READ_LOCK(0) was obtained.
                   45728:         ** When holding READ_LOCK(0), the reader ignores the entire log file,
                   45729:         ** which implies that the database file contains a trustworthy
                   45730:         ** snapshoT. Since holding READ_LOCK(0) prevents a checkpoint from
                   45731:         ** happening, this is usually correct.
                   45732:         **
                   45733:         ** However, if frames have been appended to the log (or if the log 
                   45734:         ** is wrapped and written for that matter) before the READ_LOCK(0)
                   45735:         ** is obtained, that is not necessarily true. A checkpointer may
                   45736:         ** have started to backfill the appended frames but crashed before
                   45737:         ** it finished. Leaving a corrupt image in the database file.
                   45738:         */
                   45739:         walUnlockShared(pWal, WAL_READ_LOCK(0));
                   45740:         return WAL_RETRY;
                   45741:       }
                   45742:       pWal->readLock = 0;
                   45743:       return SQLITE_OK;
                   45744:     }else if( rc!=SQLITE_BUSY ){
                   45745:       return rc;
                   45746:     }
                   45747:   }
                   45748: 
                   45749:   /* If we get this far, it means that the reader will want to use
                   45750:   ** the WAL to get at content from recent commits.  The job now is
                   45751:   ** to select one of the aReadMark[] entries that is closest to
                   45752:   ** but not exceeding pWal->hdr.mxFrame and lock that entry.
                   45753:   */
                   45754:   mxReadMark = 0;
                   45755:   mxI = 0;
                   45756:   for(i=1; i<WAL_NREADER; i++){
                   45757:     u32 thisMark = pInfo->aReadMark[i];
                   45758:     if( mxReadMark<=thisMark && thisMark<=pWal->hdr.mxFrame ){
                   45759:       assert( thisMark!=READMARK_NOT_USED );
                   45760:       mxReadMark = thisMark;
                   45761:       mxI = i;
                   45762:     }
                   45763:   }
                   45764:   /* There was once an "if" here. The extra "{" is to preserve indentation. */
                   45765:   {
                   45766:     if( (pWal->readOnly & WAL_SHM_RDONLY)==0
                   45767:      && (mxReadMark<pWal->hdr.mxFrame || mxI==0)
                   45768:     ){
                   45769:       for(i=1; i<WAL_NREADER; i++){
                   45770:         rc = walLockExclusive(pWal, WAL_READ_LOCK(i), 1);
                   45771:         if( rc==SQLITE_OK ){
                   45772:           mxReadMark = pInfo->aReadMark[i] = pWal->hdr.mxFrame;
                   45773:           mxI = i;
                   45774:           walUnlockExclusive(pWal, WAL_READ_LOCK(i), 1);
                   45775:           break;
                   45776:         }else if( rc!=SQLITE_BUSY ){
                   45777:           return rc;
                   45778:         }
                   45779:       }
                   45780:     }
                   45781:     if( mxI==0 ){
                   45782:       assert( rc==SQLITE_BUSY || (pWal->readOnly & WAL_SHM_RDONLY)!=0 );
                   45783:       return rc==SQLITE_BUSY ? WAL_RETRY : SQLITE_READONLY_CANTLOCK;
                   45784:     }
                   45785: 
                   45786:     rc = walLockShared(pWal, WAL_READ_LOCK(mxI));
                   45787:     if( rc ){
                   45788:       return rc==SQLITE_BUSY ? WAL_RETRY : rc;
                   45789:     }
                   45790:     /* Now that the read-lock has been obtained, check that neither the
                   45791:     ** value in the aReadMark[] array or the contents of the wal-index
                   45792:     ** header have changed.
                   45793:     **
                   45794:     ** It is necessary to check that the wal-index header did not change
                   45795:     ** between the time it was read and when the shared-lock was obtained
                   45796:     ** on WAL_READ_LOCK(mxI) was obtained to account for the possibility
                   45797:     ** that the log file may have been wrapped by a writer, or that frames
                   45798:     ** that occur later in the log than pWal->hdr.mxFrame may have been
                   45799:     ** copied into the database by a checkpointer. If either of these things
                   45800:     ** happened, then reading the database with the current value of
                   45801:     ** pWal->hdr.mxFrame risks reading a corrupted snapshot. So, retry
                   45802:     ** instead.
                   45803:     **
                   45804:     ** This does not guarantee that the copy of the wal-index header is up to
                   45805:     ** date before proceeding. That would not be possible without somehow
                   45806:     ** blocking writers. It only guarantees that a dangerous checkpoint or 
                   45807:     ** log-wrap (either of which would require an exclusive lock on
                   45808:     ** WAL_READ_LOCK(mxI)) has not occurred since the snapshot was valid.
                   45809:     */
                   45810:     walShmBarrier(pWal);
                   45811:     if( pInfo->aReadMark[mxI]!=mxReadMark
                   45812:      || memcmp((void *)walIndexHdr(pWal), &pWal->hdr, sizeof(WalIndexHdr))
                   45813:     ){
                   45814:       walUnlockShared(pWal, WAL_READ_LOCK(mxI));
                   45815:       return WAL_RETRY;
                   45816:     }else{
                   45817:       assert( mxReadMark<=pWal->hdr.mxFrame );
                   45818:       pWal->readLock = (i16)mxI;
                   45819:     }
                   45820:   }
                   45821:   return rc;
                   45822: }
                   45823: 
                   45824: /*
                   45825: ** Begin a read transaction on the database.
                   45826: **
                   45827: ** This routine used to be called sqlite3OpenSnapshot() and with good reason:
                   45828: ** it takes a snapshot of the state of the WAL and wal-index for the current
                   45829: ** instant in time.  The current thread will continue to use this snapshot.
                   45830: ** Other threads might append new content to the WAL and wal-index but
                   45831: ** that extra content is ignored by the current thread.
                   45832: **
                   45833: ** If the database contents have changes since the previous read
                   45834: ** transaction, then *pChanged is set to 1 before returning.  The
                   45835: ** Pager layer will use this to know that is cache is stale and
                   45836: ** needs to be flushed.
                   45837: */
                   45838: SQLITE_PRIVATE int sqlite3WalBeginReadTransaction(Wal *pWal, int *pChanged){
                   45839:   int rc;                         /* Return code */
                   45840:   int cnt = 0;                    /* Number of TryBeginRead attempts */
                   45841: 
                   45842:   do{
                   45843:     rc = walTryBeginRead(pWal, pChanged, 0, ++cnt);
                   45844:   }while( rc==WAL_RETRY );
                   45845:   testcase( (rc&0xff)==SQLITE_BUSY );
                   45846:   testcase( (rc&0xff)==SQLITE_IOERR );
                   45847:   testcase( rc==SQLITE_PROTOCOL );
                   45848:   testcase( rc==SQLITE_OK );
                   45849:   return rc;
                   45850: }
                   45851: 
                   45852: /*
                   45853: ** Finish with a read transaction.  All this does is release the
                   45854: ** read-lock.
                   45855: */
                   45856: SQLITE_PRIVATE void sqlite3WalEndReadTransaction(Wal *pWal){
                   45857:   sqlite3WalEndWriteTransaction(pWal);
                   45858:   if( pWal->readLock>=0 ){
                   45859:     walUnlockShared(pWal, WAL_READ_LOCK(pWal->readLock));
                   45860:     pWal->readLock = -1;
                   45861:   }
                   45862: }
                   45863: 
                   45864: /*
                   45865: ** Read a page from the WAL, if it is present in the WAL and if the 
                   45866: ** current read transaction is configured to use the WAL.  
                   45867: **
                   45868: ** The *pInWal is set to 1 if the requested page is in the WAL and
                   45869: ** has been loaded.  Or *pInWal is set to 0 if the page was not in 
                   45870: ** the WAL and needs to be read out of the database.
                   45871: */
                   45872: SQLITE_PRIVATE int sqlite3WalRead(
                   45873:   Wal *pWal,                      /* WAL handle */
                   45874:   Pgno pgno,                      /* Database page number to read data for */
                   45875:   int *pInWal,                    /* OUT: True if data is read from WAL */
                   45876:   int nOut,                       /* Size of buffer pOut in bytes */
                   45877:   u8 *pOut                        /* Buffer to write page data to */
                   45878: ){
                   45879:   u32 iRead = 0;                  /* If !=0, WAL frame to return data from */
                   45880:   u32 iLast = pWal->hdr.mxFrame;  /* Last page in WAL for this reader */
                   45881:   int iHash;                      /* Used to loop through N hash tables */
                   45882: 
                   45883:   /* This routine is only be called from within a read transaction. */
                   45884:   assert( pWal->readLock>=0 || pWal->lockError );
                   45885: 
                   45886:   /* If the "last page" field of the wal-index header snapshot is 0, then
                   45887:   ** no data will be read from the wal under any circumstances. Return early
                   45888:   ** in this case as an optimization.  Likewise, if pWal->readLock==0, 
                   45889:   ** then the WAL is ignored by the reader so return early, as if the 
                   45890:   ** WAL were empty.
                   45891:   */
                   45892:   if( iLast==0 || pWal->readLock==0 ){
                   45893:     *pInWal = 0;
                   45894:     return SQLITE_OK;
                   45895:   }
                   45896: 
                   45897:   /* Search the hash table or tables for an entry matching page number
                   45898:   ** pgno. Each iteration of the following for() loop searches one
                   45899:   ** hash table (each hash table indexes up to HASHTABLE_NPAGE frames).
                   45900:   **
                   45901:   ** This code might run concurrently to the code in walIndexAppend()
                   45902:   ** that adds entries to the wal-index (and possibly to this hash 
                   45903:   ** table). This means the value just read from the hash 
                   45904:   ** slot (aHash[iKey]) may have been added before or after the 
                   45905:   ** current read transaction was opened. Values added after the
                   45906:   ** read transaction was opened may have been written incorrectly -
                   45907:   ** i.e. these slots may contain garbage data. However, we assume
                   45908:   ** that any slots written before the current read transaction was
                   45909:   ** opened remain unmodified.
                   45910:   **
                   45911:   ** For the reasons above, the if(...) condition featured in the inner
                   45912:   ** loop of the following block is more stringent that would be required 
                   45913:   ** if we had exclusive access to the hash-table:
                   45914:   **
                   45915:   **   (aPgno[iFrame]==pgno): 
                   45916:   **     This condition filters out normal hash-table collisions.
                   45917:   **
                   45918:   **   (iFrame<=iLast): 
                   45919:   **     This condition filters out entries that were added to the hash
                   45920:   **     table after the current read-transaction had started.
                   45921:   */
                   45922:   for(iHash=walFramePage(iLast); iHash>=0 && iRead==0; iHash--){
                   45923:     volatile ht_slot *aHash;      /* Pointer to hash table */
                   45924:     volatile u32 *aPgno;          /* Pointer to array of page numbers */
                   45925:     u32 iZero;                    /* Frame number corresponding to aPgno[0] */
                   45926:     int iKey;                     /* Hash slot index */
                   45927:     int nCollide;                 /* Number of hash collisions remaining */
                   45928:     int rc;                       /* Error code */
                   45929: 
                   45930:     rc = walHashGet(pWal, iHash, &aHash, &aPgno, &iZero);
                   45931:     if( rc!=SQLITE_OK ){
                   45932:       return rc;
                   45933:     }
                   45934:     nCollide = HASHTABLE_NSLOT;
                   45935:     for(iKey=walHash(pgno); aHash[iKey]; iKey=walNextHash(iKey)){
                   45936:       u32 iFrame = aHash[iKey] + iZero;
                   45937:       if( iFrame<=iLast && aPgno[aHash[iKey]]==pgno ){
                   45938:         assert( iFrame>iRead );
                   45939:         iRead = iFrame;
                   45940:       }
                   45941:       if( (nCollide--)==0 ){
                   45942:         return SQLITE_CORRUPT_BKPT;
                   45943:       }
                   45944:     }
                   45945:   }
                   45946: 
                   45947: #ifdef SQLITE_ENABLE_EXPENSIVE_ASSERT
                   45948:   /* If expensive assert() statements are available, do a linear search
                   45949:   ** of the wal-index file content. Make sure the results agree with the
                   45950:   ** result obtained using the hash indexes above.  */
                   45951:   {
                   45952:     u32 iRead2 = 0;
                   45953:     u32 iTest;
                   45954:     for(iTest=iLast; iTest>0; iTest--){
                   45955:       if( walFramePgno(pWal, iTest)==pgno ){
                   45956:         iRead2 = iTest;
                   45957:         break;
                   45958:       }
                   45959:     }
                   45960:     assert( iRead==iRead2 );
                   45961:   }
                   45962: #endif
                   45963: 
                   45964:   /* If iRead is non-zero, then it is the log frame number that contains the
                   45965:   ** required page. Read and return data from the log file.
                   45966:   */
                   45967:   if( iRead ){
                   45968:     int sz;
                   45969:     i64 iOffset;
                   45970:     sz = pWal->hdr.szPage;
                   45971:     sz = (pWal->hdr.szPage&0xfe00) + ((pWal->hdr.szPage&0x0001)<<16);
                   45972:     testcase( sz<=32768 );
                   45973:     testcase( sz>=65536 );
                   45974:     iOffset = walFrameOffset(iRead, sz) + WAL_FRAME_HDRSIZE;
                   45975:     *pInWal = 1;
                   45976:     /* testcase( IS_BIG_INT(iOffset) ); // requires a 4GiB WAL */
                   45977:     return sqlite3OsRead(pWal->pWalFd, pOut, nOut, iOffset);
                   45978:   }
                   45979: 
                   45980:   *pInWal = 0;
                   45981:   return SQLITE_OK;
                   45982: }
                   45983: 
                   45984: 
                   45985: /* 
                   45986: ** Return the size of the database in pages (or zero, if unknown).
                   45987: */
                   45988: SQLITE_PRIVATE Pgno sqlite3WalDbsize(Wal *pWal){
                   45989:   if( pWal && ALWAYS(pWal->readLock>=0) ){
                   45990:     return pWal->hdr.nPage;
                   45991:   }
                   45992:   return 0;
                   45993: }
                   45994: 
                   45995: 
                   45996: /* 
                   45997: ** This function starts a write transaction on the WAL.
                   45998: **
                   45999: ** A read transaction must have already been started by a prior call
                   46000: ** to sqlite3WalBeginReadTransaction().
                   46001: **
                   46002: ** If another thread or process has written into the database since
                   46003: ** the read transaction was started, then it is not possible for this
                   46004: ** thread to write as doing so would cause a fork.  So this routine
                   46005: ** returns SQLITE_BUSY in that case and no write transaction is started.
                   46006: **
                   46007: ** There can only be a single writer active at a time.
                   46008: */
                   46009: SQLITE_PRIVATE int sqlite3WalBeginWriteTransaction(Wal *pWal){
                   46010:   int rc;
                   46011: 
                   46012:   /* Cannot start a write transaction without first holding a read
                   46013:   ** transaction. */
                   46014:   assert( pWal->readLock>=0 );
                   46015: 
                   46016:   if( pWal->readOnly ){
                   46017:     return SQLITE_READONLY;
                   46018:   }
                   46019: 
                   46020:   /* Only one writer allowed at a time.  Get the write lock.  Return
                   46021:   ** SQLITE_BUSY if unable.
                   46022:   */
                   46023:   rc = walLockExclusive(pWal, WAL_WRITE_LOCK, 1);
                   46024:   if( rc ){
                   46025:     return rc;
                   46026:   }
                   46027:   pWal->writeLock = 1;
                   46028: 
                   46029:   /* If another connection has written to the database file since the
                   46030:   ** time the read transaction on this connection was started, then
                   46031:   ** the write is disallowed.
                   46032:   */
                   46033:   if( memcmp(&pWal->hdr, (void *)walIndexHdr(pWal), sizeof(WalIndexHdr))!=0 ){
                   46034:     walUnlockExclusive(pWal, WAL_WRITE_LOCK, 1);
                   46035:     pWal->writeLock = 0;
                   46036:     rc = SQLITE_BUSY;
                   46037:   }
                   46038: 
                   46039:   return rc;
                   46040: }
                   46041: 
                   46042: /*
                   46043: ** End a write transaction.  The commit has already been done.  This
                   46044: ** routine merely releases the lock.
                   46045: */
                   46046: SQLITE_PRIVATE int sqlite3WalEndWriteTransaction(Wal *pWal){
                   46047:   if( pWal->writeLock ){
                   46048:     walUnlockExclusive(pWal, WAL_WRITE_LOCK, 1);
                   46049:     pWal->writeLock = 0;
                   46050:   }
                   46051:   return SQLITE_OK;
                   46052: }
                   46053: 
                   46054: /*
                   46055: ** If any data has been written (but not committed) to the log file, this
                   46056: ** function moves the write-pointer back to the start of the transaction.
                   46057: **
                   46058: ** Additionally, the callback function is invoked for each frame written
                   46059: ** to the WAL since the start of the transaction. If the callback returns
                   46060: ** other than SQLITE_OK, it is not invoked again and the error code is
                   46061: ** returned to the caller.
                   46062: **
                   46063: ** Otherwise, if the callback function does not return an error, this
                   46064: ** function returns SQLITE_OK.
                   46065: */
                   46066: SQLITE_PRIVATE int sqlite3WalUndo(Wal *pWal, int (*xUndo)(void *, Pgno), void *pUndoCtx){
                   46067:   int rc = SQLITE_OK;
                   46068:   if( ALWAYS(pWal->writeLock) ){
                   46069:     Pgno iMax = pWal->hdr.mxFrame;
                   46070:     Pgno iFrame;
                   46071:   
                   46072:     /* Restore the clients cache of the wal-index header to the state it
                   46073:     ** was in before the client began writing to the database. 
                   46074:     */
                   46075:     memcpy(&pWal->hdr, (void *)walIndexHdr(pWal), sizeof(WalIndexHdr));
                   46076: 
                   46077:     for(iFrame=pWal->hdr.mxFrame+1; 
                   46078:         ALWAYS(rc==SQLITE_OK) && iFrame<=iMax; 
                   46079:         iFrame++
                   46080:     ){
                   46081:       /* This call cannot fail. Unless the page for which the page number
                   46082:       ** is passed as the second argument is (a) in the cache and 
                   46083:       ** (b) has an outstanding reference, then xUndo is either a no-op
                   46084:       ** (if (a) is false) or simply expels the page from the cache (if (b)
                   46085:       ** is false).
                   46086:       **
                   46087:       ** If the upper layer is doing a rollback, it is guaranteed that there
                   46088:       ** are no outstanding references to any page other than page 1. And
                   46089:       ** page 1 is never written to the log until the transaction is
                   46090:       ** committed. As a result, the call to xUndo may not fail.
                   46091:       */
                   46092:       assert( walFramePgno(pWal, iFrame)!=1 );
                   46093:       rc = xUndo(pUndoCtx, walFramePgno(pWal, iFrame));
                   46094:     }
                   46095:     walCleanupHash(pWal);
                   46096:   }
                   46097:   assert( rc==SQLITE_OK );
                   46098:   return rc;
                   46099: }
                   46100: 
                   46101: /* 
                   46102: ** Argument aWalData must point to an array of WAL_SAVEPOINT_NDATA u32 
                   46103: ** values. This function populates the array with values required to 
                   46104: ** "rollback" the write position of the WAL handle back to the current 
                   46105: ** point in the event of a savepoint rollback (via WalSavepointUndo()).
                   46106: */
                   46107: SQLITE_PRIVATE void sqlite3WalSavepoint(Wal *pWal, u32 *aWalData){
                   46108:   assert( pWal->writeLock );
                   46109:   aWalData[0] = pWal->hdr.mxFrame;
                   46110:   aWalData[1] = pWal->hdr.aFrameCksum[0];
                   46111:   aWalData[2] = pWal->hdr.aFrameCksum[1];
                   46112:   aWalData[3] = pWal->nCkpt;
                   46113: }
                   46114: 
                   46115: /* 
                   46116: ** Move the write position of the WAL back to the point identified by
                   46117: ** the values in the aWalData[] array. aWalData must point to an array
                   46118: ** of WAL_SAVEPOINT_NDATA u32 values that has been previously populated
                   46119: ** by a call to WalSavepoint().
                   46120: */
                   46121: SQLITE_PRIVATE int sqlite3WalSavepointUndo(Wal *pWal, u32 *aWalData){
                   46122:   int rc = SQLITE_OK;
                   46123: 
                   46124:   assert( pWal->writeLock );
                   46125:   assert( aWalData[3]!=pWal->nCkpt || aWalData[0]<=pWal->hdr.mxFrame );
                   46126: 
                   46127:   if( aWalData[3]!=pWal->nCkpt ){
                   46128:     /* This savepoint was opened immediately after the write-transaction
                   46129:     ** was started. Right after that, the writer decided to wrap around
                   46130:     ** to the start of the log. Update the savepoint values to match.
                   46131:     */
                   46132:     aWalData[0] = 0;
                   46133:     aWalData[3] = pWal->nCkpt;
                   46134:   }
                   46135: 
                   46136:   if( aWalData[0]<pWal->hdr.mxFrame ){
                   46137:     pWal->hdr.mxFrame = aWalData[0];
                   46138:     pWal->hdr.aFrameCksum[0] = aWalData[1];
                   46139:     pWal->hdr.aFrameCksum[1] = aWalData[2];
                   46140:     walCleanupHash(pWal);
                   46141:   }
                   46142: 
                   46143:   return rc;
                   46144: }
                   46145: 
                   46146: /*
                   46147: ** This function is called just before writing a set of frames to the log
                   46148: ** file (see sqlite3WalFrames()). It checks to see if, instead of appending
                   46149: ** to the current log file, it is possible to overwrite the start of the
                   46150: ** existing log file with the new frames (i.e. "reset" the log). If so,
                   46151: ** it sets pWal->hdr.mxFrame to 0. Otherwise, pWal->hdr.mxFrame is left
                   46152: ** unchanged.
                   46153: **
                   46154: ** SQLITE_OK is returned if no error is encountered (regardless of whether
                   46155: ** or not pWal->hdr.mxFrame is modified). An SQLite error code is returned
                   46156: ** if an error occurs.
                   46157: */
                   46158: static int walRestartLog(Wal *pWal){
                   46159:   int rc = SQLITE_OK;
                   46160:   int cnt;
                   46161: 
                   46162:   if( pWal->readLock==0 ){
                   46163:     volatile WalCkptInfo *pInfo = walCkptInfo(pWal);
                   46164:     assert( pInfo->nBackfill==pWal->hdr.mxFrame );
                   46165:     if( pInfo->nBackfill>0 ){
                   46166:       u32 salt1;
                   46167:       sqlite3_randomness(4, &salt1);
                   46168:       rc = walLockExclusive(pWal, WAL_READ_LOCK(1), WAL_NREADER-1);
                   46169:       if( rc==SQLITE_OK ){
                   46170:         /* If all readers are using WAL_READ_LOCK(0) (in other words if no
                   46171:         ** readers are currently using the WAL), then the transactions
                   46172:         ** frames will overwrite the start of the existing log. Update the
                   46173:         ** wal-index header to reflect this.
                   46174:         **
                   46175:         ** In theory it would be Ok to update the cache of the header only
                   46176:         ** at this point. But updating the actual wal-index header is also
                   46177:         ** safe and means there is no special case for sqlite3WalUndo()
                   46178:         ** to handle if this transaction is rolled back.
                   46179:         */
                   46180:         int i;                    /* Loop counter */
                   46181:         u32 *aSalt = pWal->hdr.aSalt;       /* Big-endian salt values */
                   46182: 
                   46183:         /* Limit the size of WAL file if the journal_size_limit PRAGMA is
                   46184:         ** set to a non-negative value.  Log errors encountered
                   46185:         ** during the truncation attempt. */
                   46186:         if( pWal->mxWalSize>=0 ){
                   46187:           i64 sz;
                   46188:           int rx;
                   46189:           sqlite3BeginBenignMalloc();
                   46190:           rx = sqlite3OsFileSize(pWal->pWalFd, &sz);
                   46191:           if( rx==SQLITE_OK && (sz > pWal->mxWalSize) ){
                   46192:             rx = sqlite3OsTruncate(pWal->pWalFd, pWal->mxWalSize);
                   46193:           }
                   46194:           sqlite3EndBenignMalloc();
                   46195:           if( rx ){
                   46196:             sqlite3_log(rx, "cannot limit WAL size: %s", pWal->zWalName);
                   46197:           }
                   46198:         }
                   46199: 
                   46200:         pWal->nCkpt++;
                   46201:         pWal->hdr.mxFrame = 0;
                   46202:         sqlite3Put4byte((u8*)&aSalt[0], 1 + sqlite3Get4byte((u8*)&aSalt[0]));
                   46203:         aSalt[1] = salt1;
                   46204:         walIndexWriteHdr(pWal);
                   46205:         pInfo->nBackfill = 0;
                   46206:         for(i=1; i<WAL_NREADER; i++) pInfo->aReadMark[i] = READMARK_NOT_USED;
                   46207:         assert( pInfo->aReadMark[0]==0 );
                   46208:         walUnlockExclusive(pWal, WAL_READ_LOCK(1), WAL_NREADER-1);
                   46209:       }else if( rc!=SQLITE_BUSY ){
                   46210:         return rc;
                   46211:       }
                   46212:     }
                   46213:     walUnlockShared(pWal, WAL_READ_LOCK(0));
                   46214:     pWal->readLock = -1;
                   46215:     cnt = 0;
                   46216:     do{
                   46217:       int notUsed;
                   46218:       rc = walTryBeginRead(pWal, &notUsed, 1, ++cnt);
                   46219:     }while( rc==WAL_RETRY );
                   46220:     assert( (rc&0xff)!=SQLITE_BUSY ); /* BUSY not possible when useWal==1 */
                   46221:     testcase( (rc&0xff)==SQLITE_IOERR );
                   46222:     testcase( rc==SQLITE_PROTOCOL );
                   46223:     testcase( rc==SQLITE_OK );
                   46224:   }
                   46225:   return rc;
                   46226: }
                   46227: 
                   46228: /* 
                   46229: ** Write a set of frames to the log. The caller must hold the write-lock
                   46230: ** on the log file (obtained using sqlite3WalBeginWriteTransaction()).
                   46231: */
                   46232: SQLITE_PRIVATE int sqlite3WalFrames(
                   46233:   Wal *pWal,                      /* Wal handle to write to */
                   46234:   int szPage,                     /* Database page-size in bytes */
                   46235:   PgHdr *pList,                   /* List of dirty pages to write */
                   46236:   Pgno nTruncate,                 /* Database size after this commit */
                   46237:   int isCommit,                   /* True if this is a commit */
                   46238:   int sync_flags                  /* Flags to pass to OsSync() (or 0) */
                   46239: ){
                   46240:   int rc;                         /* Used to catch return codes */
                   46241:   u32 iFrame;                     /* Next frame address */
                   46242:   u8 aFrame[WAL_FRAME_HDRSIZE];   /* Buffer to assemble frame-header in */
                   46243:   PgHdr *p;                       /* Iterator to run through pList with. */
                   46244:   PgHdr *pLast = 0;               /* Last frame in list */
                   46245:   int nLast = 0;                  /* Number of extra copies of last page */
                   46246: 
                   46247:   assert( pList );
                   46248:   assert( pWal->writeLock );
                   46249: 
                   46250: #if defined(SQLITE_TEST) && defined(SQLITE_DEBUG)
                   46251:   { int cnt; for(cnt=0, p=pList; p; p=p->pDirty, cnt++){}
                   46252:     WALTRACE(("WAL%p: frame write begin. %d frames. mxFrame=%d. %s\n",
                   46253:               pWal, cnt, pWal->hdr.mxFrame, isCommit ? "Commit" : "Spill"));
                   46254:   }
                   46255: #endif
                   46256: 
                   46257:   /* See if it is possible to write these frames into the start of the
                   46258:   ** log file, instead of appending to it at pWal->hdr.mxFrame.
                   46259:   */
                   46260:   if( SQLITE_OK!=(rc = walRestartLog(pWal)) ){
                   46261:     return rc;
                   46262:   }
                   46263: 
                   46264:   /* If this is the first frame written into the log, write the WAL
                   46265:   ** header to the start of the WAL file. See comments at the top of
                   46266:   ** this source file for a description of the WAL header format.
                   46267:   */
                   46268:   iFrame = pWal->hdr.mxFrame;
                   46269:   if( iFrame==0 ){
                   46270:     u8 aWalHdr[WAL_HDRSIZE];      /* Buffer to assemble wal-header in */
                   46271:     u32 aCksum[2];                /* Checksum for wal-header */
                   46272: 
                   46273:     sqlite3Put4byte(&aWalHdr[0], (WAL_MAGIC | SQLITE_BIGENDIAN));
                   46274:     sqlite3Put4byte(&aWalHdr[4], WAL_MAX_VERSION);
                   46275:     sqlite3Put4byte(&aWalHdr[8], szPage);
                   46276:     sqlite3Put4byte(&aWalHdr[12], pWal->nCkpt);
                   46277:     sqlite3_randomness(8, pWal->hdr.aSalt);
                   46278:     memcpy(&aWalHdr[16], pWal->hdr.aSalt, 8);
                   46279:     walChecksumBytes(1, aWalHdr, WAL_HDRSIZE-2*4, 0, aCksum);
                   46280:     sqlite3Put4byte(&aWalHdr[24], aCksum[0]);
                   46281:     sqlite3Put4byte(&aWalHdr[28], aCksum[1]);
                   46282:     
                   46283:     pWal->szPage = szPage;
                   46284:     pWal->hdr.bigEndCksum = SQLITE_BIGENDIAN;
                   46285:     pWal->hdr.aFrameCksum[0] = aCksum[0];
                   46286:     pWal->hdr.aFrameCksum[1] = aCksum[1];
                   46287: 
                   46288:     rc = sqlite3OsWrite(pWal->pWalFd, aWalHdr, sizeof(aWalHdr), 0);
                   46289:     WALTRACE(("WAL%p: wal-header write %s\n", pWal, rc ? "failed" : "ok"));
                   46290:     if( rc!=SQLITE_OK ){
                   46291:       return rc;
                   46292:     }
                   46293:   }
                   46294:   assert( (int)pWal->szPage==szPage );
                   46295: 
                   46296:   /* Write the log file. */
                   46297:   for(p=pList; p; p=p->pDirty){
                   46298:     u32 nDbsize;                  /* Db-size field for frame header */
                   46299:     i64 iOffset;                  /* Write offset in log file */
                   46300:     void *pData;
                   46301:    
                   46302:     iOffset = walFrameOffset(++iFrame, szPage);
                   46303:     /* testcase( IS_BIG_INT(iOffset) ); // requires a 4GiB WAL */
                   46304:     
                   46305:     /* Populate and write the frame header */
                   46306:     nDbsize = (isCommit && p->pDirty==0) ? nTruncate : 0;
                   46307: #if defined(SQLITE_HAS_CODEC)
                   46308:     if( (pData = sqlite3PagerCodec(p))==0 ) return SQLITE_NOMEM;
                   46309: #else
                   46310:     pData = p->pData;
                   46311: #endif
                   46312:     walEncodeFrame(pWal, p->pgno, nDbsize, pData, aFrame);
                   46313:     rc = sqlite3OsWrite(pWal->pWalFd, aFrame, sizeof(aFrame), iOffset);
                   46314:     if( rc!=SQLITE_OK ){
                   46315:       return rc;
                   46316:     }
                   46317: 
                   46318:     /* Write the page data */
                   46319:     rc = sqlite3OsWrite(pWal->pWalFd, pData, szPage, iOffset+sizeof(aFrame));
                   46320:     if( rc!=SQLITE_OK ){
                   46321:       return rc;
                   46322:     }
                   46323:     pLast = p;
                   46324:   }
                   46325: 
                   46326:   /* Sync the log file if the 'isSync' flag was specified. */
                   46327:   if( sync_flags ){
                   46328:     i64 iSegment = sqlite3OsSectorSize(pWal->pWalFd);
                   46329:     i64 iOffset = walFrameOffset(iFrame+1, szPage);
                   46330: 
                   46331:     assert( isCommit );
                   46332:     assert( iSegment>0 );
                   46333: 
                   46334:     iSegment = (((iOffset+iSegment-1)/iSegment) * iSegment);
                   46335:     while( iOffset<iSegment ){
                   46336:       void *pData;
                   46337: #if defined(SQLITE_HAS_CODEC)
                   46338:       if( (pData = sqlite3PagerCodec(pLast))==0 ) return SQLITE_NOMEM;
                   46339: #else
                   46340:       pData = pLast->pData;
                   46341: #endif
                   46342:       walEncodeFrame(pWal, pLast->pgno, nTruncate, pData, aFrame);
                   46343:       /* testcase( IS_BIG_INT(iOffset) ); // requires a 4GiB WAL */
                   46344:       rc = sqlite3OsWrite(pWal->pWalFd, aFrame, sizeof(aFrame), iOffset);
                   46345:       if( rc!=SQLITE_OK ){
                   46346:         return rc;
                   46347:       }
                   46348:       iOffset += WAL_FRAME_HDRSIZE;
                   46349:       rc = sqlite3OsWrite(pWal->pWalFd, pData, szPage, iOffset); 
                   46350:       if( rc!=SQLITE_OK ){
                   46351:         return rc;
                   46352:       }
                   46353:       nLast++;
                   46354:       iOffset += szPage;
                   46355:     }
                   46356: 
                   46357:     rc = sqlite3OsSync(pWal->pWalFd, sync_flags);
                   46358:   }
                   46359: 
                   46360:   /* Append data to the wal-index. It is not necessary to lock the 
                   46361:   ** wal-index to do this as the SQLITE_SHM_WRITE lock held on the wal-index
                   46362:   ** guarantees that there are no other writers, and no data that may
                   46363:   ** be in use by existing readers is being overwritten.
                   46364:   */
                   46365:   iFrame = pWal->hdr.mxFrame;
                   46366:   for(p=pList; p && rc==SQLITE_OK; p=p->pDirty){
                   46367:     iFrame++;
                   46368:     rc = walIndexAppend(pWal, iFrame, p->pgno);
                   46369:   }
                   46370:   while( nLast>0 && rc==SQLITE_OK ){
                   46371:     iFrame++;
                   46372:     nLast--;
                   46373:     rc = walIndexAppend(pWal, iFrame, pLast->pgno);
                   46374:   }
                   46375: 
                   46376:   if( rc==SQLITE_OK ){
                   46377:     /* Update the private copy of the header. */
                   46378:     pWal->hdr.szPage = (u16)((szPage&0xff00) | (szPage>>16));
                   46379:     testcase( szPage<=32768 );
                   46380:     testcase( szPage>=65536 );
                   46381:     pWal->hdr.mxFrame = iFrame;
                   46382:     if( isCommit ){
                   46383:       pWal->hdr.iChange++;
                   46384:       pWal->hdr.nPage = nTruncate;
                   46385:     }
                   46386:     /* If this is a commit, update the wal-index header too. */
                   46387:     if( isCommit ){
                   46388:       walIndexWriteHdr(pWal);
                   46389:       pWal->iCallback = iFrame;
                   46390:     }
                   46391:   }
                   46392: 
                   46393:   WALTRACE(("WAL%p: frame write %s\n", pWal, rc ? "failed" : "ok"));
                   46394:   return rc;
                   46395: }
                   46396: 
                   46397: /* 
                   46398: ** This routine is called to implement sqlite3_wal_checkpoint() and
                   46399: ** related interfaces.
                   46400: **
                   46401: ** Obtain a CHECKPOINT lock and then backfill as much information as
                   46402: ** we can from WAL into the database.
                   46403: **
                   46404: ** If parameter xBusy is not NULL, it is a pointer to a busy-handler
                   46405: ** callback. In this case this function runs a blocking checkpoint.
                   46406: */
                   46407: SQLITE_PRIVATE int sqlite3WalCheckpoint(
                   46408:   Wal *pWal,                      /* Wal connection */
                   46409:   int eMode,                      /* PASSIVE, FULL or RESTART */
                   46410:   int (*xBusy)(void*),            /* Function to call when busy */
                   46411:   void *pBusyArg,                 /* Context argument for xBusyHandler */
                   46412:   int sync_flags,                 /* Flags to sync db file with (or 0) */
                   46413:   int nBuf,                       /* Size of temporary buffer */
                   46414:   u8 *zBuf,                       /* Temporary buffer to use */
                   46415:   int *pnLog,                     /* OUT: Number of frames in WAL */
                   46416:   int *pnCkpt                     /* OUT: Number of backfilled frames in WAL */
                   46417: ){
                   46418:   int rc;                         /* Return code */
                   46419:   int isChanged = 0;              /* True if a new wal-index header is loaded */
                   46420:   int eMode2 = eMode;             /* Mode to pass to walCheckpoint() */
                   46421: 
                   46422:   assert( pWal->ckptLock==0 );
                   46423:   assert( pWal->writeLock==0 );
                   46424: 
                   46425:   if( pWal->readOnly ) return SQLITE_READONLY;
                   46426:   WALTRACE(("WAL%p: checkpoint begins\n", pWal));
                   46427:   rc = walLockExclusive(pWal, WAL_CKPT_LOCK, 1);
                   46428:   if( rc ){
                   46429:     /* Usually this is SQLITE_BUSY meaning that another thread or process
                   46430:     ** is already running a checkpoint, or maybe a recovery.  But it might
                   46431:     ** also be SQLITE_IOERR. */
                   46432:     return rc;
                   46433:   }
                   46434:   pWal->ckptLock = 1;
                   46435: 
                   46436:   /* If this is a blocking-checkpoint, then obtain the write-lock as well
                   46437:   ** to prevent any writers from running while the checkpoint is underway.
                   46438:   ** This has to be done before the call to walIndexReadHdr() below.
                   46439:   **
                   46440:   ** If the writer lock cannot be obtained, then a passive checkpoint is
                   46441:   ** run instead. Since the checkpointer is not holding the writer lock,
                   46442:   ** there is no point in blocking waiting for any readers. Assuming no 
                   46443:   ** other error occurs, this function will return SQLITE_BUSY to the caller.
                   46444:   */
                   46445:   if( eMode!=SQLITE_CHECKPOINT_PASSIVE ){
                   46446:     rc = walBusyLock(pWal, xBusy, pBusyArg, WAL_WRITE_LOCK, 1);
                   46447:     if( rc==SQLITE_OK ){
                   46448:       pWal->writeLock = 1;
                   46449:     }else if( rc==SQLITE_BUSY ){
                   46450:       eMode2 = SQLITE_CHECKPOINT_PASSIVE;
                   46451:       rc = SQLITE_OK;
                   46452:     }
                   46453:   }
                   46454: 
                   46455:   /* Read the wal-index header. */
                   46456:   if( rc==SQLITE_OK ){
                   46457:     rc = walIndexReadHdr(pWal, &isChanged);
                   46458:   }
                   46459: 
                   46460:   /* Copy data from the log to the database file. */
                   46461:   if( rc==SQLITE_OK ){
                   46462:     if( pWal->hdr.mxFrame && walPagesize(pWal)!=nBuf ){
                   46463:       rc = SQLITE_CORRUPT_BKPT;
                   46464:     }else{
                   46465:       rc = walCheckpoint(pWal, eMode2, xBusy, pBusyArg, sync_flags, zBuf);
                   46466:     }
                   46467: 
                   46468:     /* If no error occurred, set the output variables. */
                   46469:     if( rc==SQLITE_OK || rc==SQLITE_BUSY ){
                   46470:       if( pnLog ) *pnLog = (int)pWal->hdr.mxFrame;
                   46471:       if( pnCkpt ) *pnCkpt = (int)(walCkptInfo(pWal)->nBackfill);
                   46472:     }
                   46473:   }
                   46474: 
                   46475:   if( isChanged ){
                   46476:     /* If a new wal-index header was loaded before the checkpoint was 
                   46477:     ** performed, then the pager-cache associated with pWal is now
                   46478:     ** out of date. So zero the cached wal-index header to ensure that
                   46479:     ** next time the pager opens a snapshot on this database it knows that
                   46480:     ** the cache needs to be reset.
                   46481:     */
                   46482:     memset(&pWal->hdr, 0, sizeof(WalIndexHdr));
                   46483:   }
                   46484: 
                   46485:   /* Release the locks. */
                   46486:   sqlite3WalEndWriteTransaction(pWal);
                   46487:   walUnlockExclusive(pWal, WAL_CKPT_LOCK, 1);
                   46488:   pWal->ckptLock = 0;
                   46489:   WALTRACE(("WAL%p: checkpoint %s\n", pWal, rc ? "failed" : "ok"));
                   46490:   return (rc==SQLITE_OK && eMode!=eMode2 ? SQLITE_BUSY : rc);
                   46491: }
                   46492: 
                   46493: /* Return the value to pass to a sqlite3_wal_hook callback, the
                   46494: ** number of frames in the WAL at the point of the last commit since
                   46495: ** sqlite3WalCallback() was called.  If no commits have occurred since
                   46496: ** the last call, then return 0.
                   46497: */
                   46498: SQLITE_PRIVATE int sqlite3WalCallback(Wal *pWal){
                   46499:   u32 ret = 0;
                   46500:   if( pWal ){
                   46501:     ret = pWal->iCallback;
                   46502:     pWal->iCallback = 0;
                   46503:   }
                   46504:   return (int)ret;
                   46505: }
                   46506: 
                   46507: /*
                   46508: ** This function is called to change the WAL subsystem into or out
                   46509: ** of locking_mode=EXCLUSIVE.
                   46510: **
                   46511: ** If op is zero, then attempt to change from locking_mode=EXCLUSIVE
                   46512: ** into locking_mode=NORMAL.  This means that we must acquire a lock
                   46513: ** on the pWal->readLock byte.  If the WAL is already in locking_mode=NORMAL
                   46514: ** or if the acquisition of the lock fails, then return 0.  If the
                   46515: ** transition out of exclusive-mode is successful, return 1.  This
                   46516: ** operation must occur while the pager is still holding the exclusive
                   46517: ** lock on the main database file.
                   46518: **
                   46519: ** If op is one, then change from locking_mode=NORMAL into 
                   46520: ** locking_mode=EXCLUSIVE.  This means that the pWal->readLock must
                   46521: ** be released.  Return 1 if the transition is made and 0 if the
                   46522: ** WAL is already in exclusive-locking mode - meaning that this
                   46523: ** routine is a no-op.  The pager must already hold the exclusive lock
                   46524: ** on the main database file before invoking this operation.
                   46525: **
                   46526: ** If op is negative, then do a dry-run of the op==1 case but do
                   46527: ** not actually change anything. The pager uses this to see if it
                   46528: ** should acquire the database exclusive lock prior to invoking
                   46529: ** the op==1 case.
                   46530: */
                   46531: SQLITE_PRIVATE int sqlite3WalExclusiveMode(Wal *pWal, int op){
                   46532:   int rc;
                   46533:   assert( pWal->writeLock==0 );
                   46534:   assert( pWal->exclusiveMode!=WAL_HEAPMEMORY_MODE || op==-1 );
                   46535: 
                   46536:   /* pWal->readLock is usually set, but might be -1 if there was a 
                   46537:   ** prior error while attempting to acquire are read-lock. This cannot 
                   46538:   ** happen if the connection is actually in exclusive mode (as no xShmLock
                   46539:   ** locks are taken in this case). Nor should the pager attempt to
                   46540:   ** upgrade to exclusive-mode following such an error.
                   46541:   */
                   46542:   assert( pWal->readLock>=0 || pWal->lockError );
                   46543:   assert( pWal->readLock>=0 || (op<=0 && pWal->exclusiveMode==0) );
                   46544: 
                   46545:   if( op==0 ){
                   46546:     if( pWal->exclusiveMode ){
                   46547:       pWal->exclusiveMode = 0;
                   46548:       if( walLockShared(pWal, WAL_READ_LOCK(pWal->readLock))!=SQLITE_OK ){
                   46549:         pWal->exclusiveMode = 1;
                   46550:       }
                   46551:       rc = pWal->exclusiveMode==0;
                   46552:     }else{
                   46553:       /* Already in locking_mode=NORMAL */
                   46554:       rc = 0;
                   46555:     }
                   46556:   }else if( op>0 ){
                   46557:     assert( pWal->exclusiveMode==0 );
                   46558:     assert( pWal->readLock>=0 );
                   46559:     walUnlockShared(pWal, WAL_READ_LOCK(pWal->readLock));
                   46560:     pWal->exclusiveMode = 1;
                   46561:     rc = 1;
                   46562:   }else{
                   46563:     rc = pWal->exclusiveMode==0;
                   46564:   }
                   46565:   return rc;
                   46566: }
                   46567: 
                   46568: /* 
                   46569: ** Return true if the argument is non-NULL and the WAL module is using
                   46570: ** heap-memory for the wal-index. Otherwise, if the argument is NULL or the
                   46571: ** WAL module is using shared-memory, return false. 
                   46572: */
                   46573: SQLITE_PRIVATE int sqlite3WalHeapMemory(Wal *pWal){
                   46574:   return (pWal && pWal->exclusiveMode==WAL_HEAPMEMORY_MODE );
                   46575: }
                   46576: 
                   46577: #endif /* #ifndef SQLITE_OMIT_WAL */
                   46578: 
                   46579: /************** End of wal.c *************************************************/
                   46580: /************** Begin file btmutex.c *****************************************/
                   46581: /*
                   46582: ** 2007 August 27
                   46583: **
                   46584: ** The author disclaims copyright to this source code.  In place of
                   46585: ** a legal notice, here is a blessing:
                   46586: **
                   46587: **    May you do good and not evil.
                   46588: **    May you find forgiveness for yourself and forgive others.
                   46589: **    May you share freely, never taking more than you give.
                   46590: **
                   46591: *************************************************************************
                   46592: **
                   46593: ** This file contains code used to implement mutexes on Btree objects.
                   46594: ** This code really belongs in btree.c.  But btree.c is getting too
                   46595: ** big and we want to break it down some.  This packaged seemed like
                   46596: ** a good breakout.
                   46597: */
                   46598: /************** Include btreeInt.h in the middle of btmutex.c ****************/
                   46599: /************** Begin file btreeInt.h ****************************************/
                   46600: /*
                   46601: ** 2004 April 6
                   46602: **
                   46603: ** The author disclaims copyright to this source code.  In place of
                   46604: ** a legal notice, here is a blessing:
                   46605: **
                   46606: **    May you do good and not evil.
                   46607: **    May you find forgiveness for yourself and forgive others.
                   46608: **    May you share freely, never taking more than you give.
                   46609: **
                   46610: *************************************************************************
                   46611: ** This file implements a external (disk-based) database using BTrees.
                   46612: ** For a detailed discussion of BTrees, refer to
                   46613: **
                   46614: **     Donald E. Knuth, THE ART OF COMPUTER PROGRAMMING, Volume 3:
                   46615: **     "Sorting And Searching", pages 473-480. Addison-Wesley
                   46616: **     Publishing Company, Reading, Massachusetts.
                   46617: **
                   46618: ** The basic idea is that each page of the file contains N database
                   46619: ** entries and N+1 pointers to subpages.
                   46620: **
                   46621: **   ----------------------------------------------------------------
                   46622: **   |  Ptr(0) | Key(0) | Ptr(1) | Key(1) | ... | Key(N-1) | Ptr(N) |
                   46623: **   ----------------------------------------------------------------
                   46624: **
                   46625: ** All of the keys on the page that Ptr(0) points to have values less
                   46626: ** than Key(0).  All of the keys on page Ptr(1) and its subpages have
                   46627: ** values greater than Key(0) and less than Key(1).  All of the keys
                   46628: ** on Ptr(N) and its subpages have values greater than Key(N-1).  And
                   46629: ** so forth.
                   46630: **
                   46631: ** Finding a particular key requires reading O(log(M)) pages from the 
                   46632: ** disk where M is the number of entries in the tree.
                   46633: **
                   46634: ** In this implementation, a single file can hold one or more separate 
                   46635: ** BTrees.  Each BTree is identified by the index of its root page.  The
                   46636: ** key and data for any entry are combined to form the "payload".  A
                   46637: ** fixed amount of payload can be carried directly on the database
                   46638: ** page.  If the payload is larger than the preset amount then surplus
                   46639: ** bytes are stored on overflow pages.  The payload for an entry
                   46640: ** and the preceding pointer are combined to form a "Cell".  Each 
                   46641: ** page has a small header which contains the Ptr(N) pointer and other
                   46642: ** information such as the size of key and data.
                   46643: **
                   46644: ** FORMAT DETAILS
                   46645: **
                   46646: ** The file is divided into pages.  The first page is called page 1,
                   46647: ** the second is page 2, and so forth.  A page number of zero indicates
                   46648: ** "no such page".  The page size can be any power of 2 between 512 and 65536.
                   46649: ** Each page can be either a btree page, a freelist page, an overflow
                   46650: ** page, or a pointer-map page.
                   46651: **
                   46652: ** The first page is always a btree page.  The first 100 bytes of the first
                   46653: ** page contain a special header (the "file header") that describes the file.
                   46654: ** The format of the file header is as follows:
                   46655: **
                   46656: **   OFFSET   SIZE    DESCRIPTION
                   46657: **      0      16     Header string: "SQLite format 3\000"
                   46658: **     16       2     Page size in bytes.  
                   46659: **     18       1     File format write version
                   46660: **     19       1     File format read version
                   46661: **     20       1     Bytes of unused space at the end of each page
                   46662: **     21       1     Max embedded payload fraction
                   46663: **     22       1     Min embedded payload fraction
                   46664: **     23       1     Min leaf payload fraction
                   46665: **     24       4     File change counter
                   46666: **     28       4     Reserved for future use
                   46667: **     32       4     First freelist page
                   46668: **     36       4     Number of freelist pages in the file
                   46669: **     40      60     15 4-byte meta values passed to higher layers
                   46670: **
                   46671: **     40       4     Schema cookie
                   46672: **     44       4     File format of schema layer
                   46673: **     48       4     Size of page cache
                   46674: **     52       4     Largest root-page (auto/incr_vacuum)
                   46675: **     56       4     1=UTF-8 2=UTF16le 3=UTF16be
                   46676: **     60       4     User version
                   46677: **     64       4     Incremental vacuum mode
                   46678: **     68       4     unused
                   46679: **     72       4     unused
                   46680: **     76       4     unused
                   46681: **
                   46682: ** All of the integer values are big-endian (most significant byte first).
                   46683: **
                   46684: ** The file change counter is incremented when the database is changed
                   46685: ** This counter allows other processes to know when the file has changed
                   46686: ** and thus when they need to flush their cache.
                   46687: **
                   46688: ** The max embedded payload fraction is the amount of the total usable
                   46689: ** space in a page that can be consumed by a single cell for standard
                   46690: ** B-tree (non-LEAFDATA) tables.  A value of 255 means 100%.  The default
                   46691: ** is to limit the maximum cell size so that at least 4 cells will fit
                   46692: ** on one page.  Thus the default max embedded payload fraction is 64.
                   46693: **
                   46694: ** If the payload for a cell is larger than the max payload, then extra
                   46695: ** payload is spilled to overflow pages.  Once an overflow page is allocated,
                   46696: ** as many bytes as possible are moved into the overflow pages without letting
                   46697: ** the cell size drop below the min embedded payload fraction.
                   46698: **
                   46699: ** The min leaf payload fraction is like the min embedded payload fraction
                   46700: ** except that it applies to leaf nodes in a LEAFDATA tree.  The maximum
                   46701: ** payload fraction for a LEAFDATA tree is always 100% (or 255) and it
                   46702: ** not specified in the header.
                   46703: **
                   46704: ** Each btree pages is divided into three sections:  The header, the
                   46705: ** cell pointer array, and the cell content area.  Page 1 also has a 100-byte
                   46706: ** file header that occurs before the page header.
                   46707: **
                   46708: **      |----------------|
                   46709: **      | file header    |   100 bytes.  Page 1 only.
                   46710: **      |----------------|
                   46711: **      | page header    |   8 bytes for leaves.  12 bytes for interior nodes
                   46712: **      |----------------|
                   46713: **      | cell pointer   |   |  2 bytes per cell.  Sorted order.
                   46714: **      | array          |   |  Grows downward
                   46715: **      |                |   v
                   46716: **      |----------------|
                   46717: **      | unallocated    |
                   46718: **      | space          |
                   46719: **      |----------------|   ^  Grows upwards
                   46720: **      | cell content   |   |  Arbitrary order interspersed with freeblocks.
                   46721: **      | area           |   |  and free space fragments.
                   46722: **      |----------------|
                   46723: **
                   46724: ** The page headers looks like this:
                   46725: **
                   46726: **   OFFSET   SIZE     DESCRIPTION
                   46727: **      0       1      Flags. 1: intkey, 2: zerodata, 4: leafdata, 8: leaf
                   46728: **      1       2      byte offset to the first freeblock
                   46729: **      3       2      number of cells on this page
                   46730: **      5       2      first byte of the cell content area
                   46731: **      7       1      number of fragmented free bytes
                   46732: **      8       4      Right child (the Ptr(N) value).  Omitted on leaves.
                   46733: **
                   46734: ** The flags define the format of this btree page.  The leaf flag means that
                   46735: ** this page has no children.  The zerodata flag means that this page carries
                   46736: ** only keys and no data.  The intkey flag means that the key is a integer
                   46737: ** which is stored in the key size entry of the cell header rather than in
                   46738: ** the payload area.
                   46739: **
                   46740: ** The cell pointer array begins on the first byte after the page header.
                   46741: ** The cell pointer array contains zero or more 2-byte numbers which are
                   46742: ** offsets from the beginning of the page to the cell content in the cell
                   46743: ** content area.  The cell pointers occur in sorted order.  The system strives
                   46744: ** to keep free space after the last cell pointer so that new cells can
                   46745: ** be easily added without having to defragment the page.
                   46746: **
                   46747: ** Cell content is stored at the very end of the page and grows toward the
                   46748: ** beginning of the page.
                   46749: **
                   46750: ** Unused space within the cell content area is collected into a linked list of
                   46751: ** freeblocks.  Each freeblock is at least 4 bytes in size.  The byte offset
                   46752: ** to the first freeblock is given in the header.  Freeblocks occur in
                   46753: ** increasing order.  Because a freeblock must be at least 4 bytes in size,
                   46754: ** any group of 3 or fewer unused bytes in the cell content area cannot
                   46755: ** exist on the freeblock chain.  A group of 3 or fewer free bytes is called
                   46756: ** a fragment.  The total number of bytes in all fragments is recorded.
                   46757: ** in the page header at offset 7.
                   46758: **
                   46759: **    SIZE    DESCRIPTION
                   46760: **      2     Byte offset of the next freeblock
                   46761: **      2     Bytes in this freeblock
                   46762: **
                   46763: ** Cells are of variable length.  Cells are stored in the cell content area at
                   46764: ** the end of the page.  Pointers to the cells are in the cell pointer array
                   46765: ** that immediately follows the page header.  Cells is not necessarily
                   46766: ** contiguous or in order, but cell pointers are contiguous and in order.
                   46767: **
                   46768: ** Cell content makes use of variable length integers.  A variable
                   46769: ** length integer is 1 to 9 bytes where the lower 7 bits of each 
                   46770: ** byte are used.  The integer consists of all bytes that have bit 8 set and
                   46771: ** the first byte with bit 8 clear.  The most significant byte of the integer
                   46772: ** appears first.  A variable-length integer may not be more than 9 bytes long.
                   46773: ** As a special case, all 8 bytes of the 9th byte are used as data.  This
                   46774: ** allows a 64-bit integer to be encoded in 9 bytes.
                   46775: **
                   46776: **    0x00                      becomes  0x00000000
                   46777: **    0x7f                      becomes  0x0000007f
                   46778: **    0x81 0x00                 becomes  0x00000080
                   46779: **    0x82 0x00                 becomes  0x00000100
                   46780: **    0x80 0x7f                 becomes  0x0000007f
                   46781: **    0x8a 0x91 0xd1 0xac 0x78  becomes  0x12345678
                   46782: **    0x81 0x81 0x81 0x81 0x01  becomes  0x10204081
                   46783: **
                   46784: ** Variable length integers are used for rowids and to hold the number of
                   46785: ** bytes of key and data in a btree cell.
                   46786: **
                   46787: ** The content of a cell looks like this:
                   46788: **
                   46789: **    SIZE    DESCRIPTION
                   46790: **      4     Page number of the left child. Omitted if leaf flag is set.
                   46791: **     var    Number of bytes of data. Omitted if the zerodata flag is set.
                   46792: **     var    Number of bytes of key. Or the key itself if intkey flag is set.
                   46793: **      *     Payload
                   46794: **      4     First page of the overflow chain.  Omitted if no overflow
                   46795: **
                   46796: ** Overflow pages form a linked list.  Each page except the last is completely
                   46797: ** filled with data (pagesize - 4 bytes).  The last page can have as little
                   46798: ** as 1 byte of data.
                   46799: **
                   46800: **    SIZE    DESCRIPTION
                   46801: **      4     Page number of next overflow page
                   46802: **      *     Data
                   46803: **
                   46804: ** Freelist pages come in two subtypes: trunk pages and leaf pages.  The
                   46805: ** file header points to the first in a linked list of trunk page.  Each trunk
                   46806: ** page points to multiple leaf pages.  The content of a leaf page is
                   46807: ** unspecified.  A trunk page looks like this:
                   46808: **
                   46809: **    SIZE    DESCRIPTION
                   46810: **      4     Page number of next trunk page
                   46811: **      4     Number of leaf pointers on this page
                   46812: **      *     zero or more pages numbers of leaves
                   46813: */
                   46814: 
                   46815: 
                   46816: /* The following value is the maximum cell size assuming a maximum page
                   46817: ** size give above.
                   46818: */
                   46819: #define MX_CELL_SIZE(pBt)  ((int)(pBt->pageSize-8))
                   46820: 
                   46821: /* The maximum number of cells on a single page of the database.  This
                   46822: ** assumes a minimum cell size of 6 bytes  (4 bytes for the cell itself
                   46823: ** plus 2 bytes for the index to the cell in the page header).  Such
                   46824: ** small cells will be rare, but they are possible.
                   46825: */
                   46826: #define MX_CELL(pBt) ((pBt->pageSize-8)/6)
                   46827: 
                   46828: /* Forward declarations */
                   46829: typedef struct MemPage MemPage;
                   46830: typedef struct BtLock BtLock;
                   46831: 
                   46832: /*
                   46833: ** This is a magic string that appears at the beginning of every
                   46834: ** SQLite database in order to identify the file as a real database.
                   46835: **
                   46836: ** You can change this value at compile-time by specifying a
                   46837: ** -DSQLITE_FILE_HEADER="..." on the compiler command-line.  The
                   46838: ** header must be exactly 16 bytes including the zero-terminator so
                   46839: ** the string itself should be 15 characters long.  If you change
                   46840: ** the header, then your custom library will not be able to read 
                   46841: ** databases generated by the standard tools and the standard tools
                   46842: ** will not be able to read databases created by your custom library.
                   46843: */
                   46844: #ifndef SQLITE_FILE_HEADER /* 123456789 123456 */
                   46845: #  define SQLITE_FILE_HEADER "SQLite format 3"
                   46846: #endif
                   46847: 
                   46848: /*
                   46849: ** Page type flags.  An ORed combination of these flags appear as the
                   46850: ** first byte of on-disk image of every BTree page.
                   46851: */
                   46852: #define PTF_INTKEY    0x01
                   46853: #define PTF_ZERODATA  0x02
                   46854: #define PTF_LEAFDATA  0x04
                   46855: #define PTF_LEAF      0x08
                   46856: 
                   46857: /*
                   46858: ** As each page of the file is loaded into memory, an instance of the following
                   46859: ** structure is appended and initialized to zero.  This structure stores
                   46860: ** information about the page that is decoded from the raw file page.
                   46861: **
                   46862: ** The pParent field points back to the parent page.  This allows us to
                   46863: ** walk up the BTree from any leaf to the root.  Care must be taken to
                   46864: ** unref() the parent page pointer when this page is no longer referenced.
                   46865: ** The pageDestructor() routine handles that chore.
                   46866: **
                   46867: ** Access to all fields of this structure is controlled by the mutex
                   46868: ** stored in MemPage.pBt->mutex.
                   46869: */
                   46870: struct MemPage {
                   46871:   u8 isInit;           /* True if previously initialized. MUST BE FIRST! */
                   46872:   u8 nOverflow;        /* Number of overflow cell bodies in aCell[] */
                   46873:   u8 intKey;           /* True if intkey flag is set */
                   46874:   u8 leaf;             /* True if leaf flag is set */
                   46875:   u8 hasData;          /* True if this page stores data */
                   46876:   u8 hdrOffset;        /* 100 for page 1.  0 otherwise */
                   46877:   u8 childPtrSize;     /* 0 if leaf==1.  4 if leaf==0 */
                   46878:   u16 maxLocal;        /* Copy of BtShared.maxLocal or BtShared.maxLeaf */
                   46879:   u16 minLocal;        /* Copy of BtShared.minLocal or BtShared.minLeaf */
                   46880:   u16 cellOffset;      /* Index in aData of first cell pointer */
                   46881:   u16 nFree;           /* Number of free bytes on the page */
                   46882:   u16 nCell;           /* Number of cells on this page, local and ovfl */
                   46883:   u16 maskPage;        /* Mask for page offset */
                   46884:   struct _OvflCell {   /* Cells that will not fit on aData[] */
                   46885:     u8 *pCell;          /* Pointers to the body of the overflow cell */
                   46886:     u16 idx;            /* Insert this cell before idx-th non-overflow cell */
                   46887:   } aOvfl[5];
                   46888:   BtShared *pBt;       /* Pointer to BtShared that this page is part of */
                   46889:   u8 *aData;           /* Pointer to disk image of the page data */
                   46890:   DbPage *pDbPage;     /* Pager page handle */
                   46891:   Pgno pgno;           /* Page number for this page */
                   46892: };
                   46893: 
                   46894: /*
                   46895: ** The in-memory image of a disk page has the auxiliary information appended
                   46896: ** to the end.  EXTRA_SIZE is the number of bytes of space needed to hold
                   46897: ** that extra information.
                   46898: */
                   46899: #define EXTRA_SIZE sizeof(MemPage)
                   46900: 
                   46901: /*
                   46902: ** A linked list of the following structures is stored at BtShared.pLock.
                   46903: ** Locks are added (or upgraded from READ_LOCK to WRITE_LOCK) when a cursor 
                   46904: ** is opened on the table with root page BtShared.iTable. Locks are removed
                   46905: ** from this list when a transaction is committed or rolled back, or when
                   46906: ** a btree handle is closed.
                   46907: */
                   46908: struct BtLock {
                   46909:   Btree *pBtree;        /* Btree handle holding this lock */
                   46910:   Pgno iTable;          /* Root page of table */
                   46911:   u8 eLock;             /* READ_LOCK or WRITE_LOCK */
                   46912:   BtLock *pNext;        /* Next in BtShared.pLock list */
                   46913: };
                   46914: 
                   46915: /* Candidate values for BtLock.eLock */
                   46916: #define READ_LOCK     1
                   46917: #define WRITE_LOCK    2
                   46918: 
                   46919: /* A Btree handle
                   46920: **
                   46921: ** A database connection contains a pointer to an instance of
                   46922: ** this object for every database file that it has open.  This structure
                   46923: ** is opaque to the database connection.  The database connection cannot
                   46924: ** see the internals of this structure and only deals with pointers to
                   46925: ** this structure.
                   46926: **
                   46927: ** For some database files, the same underlying database cache might be 
                   46928: ** shared between multiple connections.  In that case, each connection
                   46929: ** has it own instance of this object.  But each instance of this object
                   46930: ** points to the same BtShared object.  The database cache and the
                   46931: ** schema associated with the database file are all contained within
                   46932: ** the BtShared object.
                   46933: **
                   46934: ** All fields in this structure are accessed under sqlite3.mutex.
                   46935: ** The pBt pointer itself may not be changed while there exists cursors 
                   46936: ** in the referenced BtShared that point back to this Btree since those
                   46937: ** cursors have to go through this Btree to find their BtShared and
                   46938: ** they often do so without holding sqlite3.mutex.
                   46939: */
                   46940: struct Btree {
                   46941:   sqlite3 *db;       /* The database connection holding this btree */
                   46942:   BtShared *pBt;     /* Sharable content of this btree */
                   46943:   u8 inTrans;        /* TRANS_NONE, TRANS_READ or TRANS_WRITE */
                   46944:   u8 sharable;       /* True if we can share pBt with another db */
                   46945:   u8 locked;         /* True if db currently has pBt locked */
                   46946:   int wantToLock;    /* Number of nested calls to sqlite3BtreeEnter() */
                   46947:   int nBackup;       /* Number of backup operations reading this btree */
                   46948:   Btree *pNext;      /* List of other sharable Btrees from the same db */
                   46949:   Btree *pPrev;      /* Back pointer of the same list */
                   46950: #ifndef SQLITE_OMIT_SHARED_CACHE
                   46951:   BtLock lock;       /* Object used to lock page 1 */
                   46952: #endif
                   46953: };
                   46954: 
                   46955: /*
                   46956: ** Btree.inTrans may take one of the following values.
                   46957: **
                   46958: ** If the shared-data extension is enabled, there may be multiple users
                   46959: ** of the Btree structure. At most one of these may open a write transaction,
                   46960: ** but any number may have active read transactions.
                   46961: */
                   46962: #define TRANS_NONE  0
                   46963: #define TRANS_READ  1
                   46964: #define TRANS_WRITE 2
                   46965: 
                   46966: /*
                   46967: ** An instance of this object represents a single database file.
                   46968: ** 
                   46969: ** A single database file can be in use as the same time by two
                   46970: ** or more database connections.  When two or more connections are
                   46971: ** sharing the same database file, each connection has it own
                   46972: ** private Btree object for the file and each of those Btrees points
                   46973: ** to this one BtShared object.  BtShared.nRef is the number of
                   46974: ** connections currently sharing this database file.
                   46975: **
                   46976: ** Fields in this structure are accessed under the BtShared.mutex
                   46977: ** mutex, except for nRef and pNext which are accessed under the
                   46978: ** global SQLITE_MUTEX_STATIC_MASTER mutex.  The pPager field
                   46979: ** may not be modified once it is initially set as long as nRef>0.
                   46980: ** The pSchema field may be set once under BtShared.mutex and
                   46981: ** thereafter is unchanged as long as nRef>0.
                   46982: **
                   46983: ** isPending:
                   46984: **
                   46985: **   If a BtShared client fails to obtain a write-lock on a database
                   46986: **   table (because there exists one or more read-locks on the table),
                   46987: **   the shared-cache enters 'pending-lock' state and isPending is
                   46988: **   set to true.
                   46989: **
                   46990: **   The shared-cache leaves the 'pending lock' state when either of
                   46991: **   the following occur:
                   46992: **
                   46993: **     1) The current writer (BtShared.pWriter) concludes its transaction, OR
                   46994: **     2) The number of locks held by other connections drops to zero.
                   46995: **
                   46996: **   while in the 'pending-lock' state, no connection may start a new
                   46997: **   transaction.
                   46998: **
                   46999: **   This feature is included to help prevent writer-starvation.
                   47000: */
                   47001: struct BtShared {
                   47002:   Pager *pPager;        /* The page cache */
                   47003:   sqlite3 *db;          /* Database connection currently using this Btree */
                   47004:   BtCursor *pCursor;    /* A list of all open cursors */
                   47005:   MemPage *pPage1;      /* First page of the database */
                   47006:   u8 readOnly;          /* True if the underlying file is readonly */
                   47007:   u8 pageSizeFixed;     /* True if the page size can no longer be changed */
                   47008:   u8 secureDelete;      /* True if secure_delete is enabled */
                   47009:   u8 initiallyEmpty;    /* Database is empty at start of transaction */
                   47010:   u8 openFlags;         /* Flags to sqlite3BtreeOpen() */
                   47011: #ifndef SQLITE_OMIT_AUTOVACUUM
                   47012:   u8 autoVacuum;        /* True if auto-vacuum is enabled */
                   47013:   u8 incrVacuum;        /* True if incr-vacuum is enabled */
                   47014: #endif
                   47015:   u8 inTransaction;     /* Transaction state */
                   47016:   u8 doNotUseWAL;       /* If true, do not open write-ahead-log file */
                   47017:   u16 maxLocal;         /* Maximum local payload in non-LEAFDATA tables */
                   47018:   u16 minLocal;         /* Minimum local payload in non-LEAFDATA tables */
                   47019:   u16 maxLeaf;          /* Maximum local payload in a LEAFDATA table */
                   47020:   u16 minLeaf;          /* Minimum local payload in a LEAFDATA table */
                   47021:   u32 pageSize;         /* Total number of bytes on a page */
                   47022:   u32 usableSize;       /* Number of usable bytes on each page */
                   47023:   int nTransaction;     /* Number of open transactions (read + write) */
                   47024:   u32 nPage;            /* Number of pages in the database */
                   47025:   void *pSchema;        /* Pointer to space allocated by sqlite3BtreeSchema() */
                   47026:   void (*xFreeSchema)(void*);  /* Destructor for BtShared.pSchema */
                   47027:   sqlite3_mutex *mutex; /* Non-recursive mutex required to access this object */
                   47028:   Bitvec *pHasContent;  /* Set of pages moved to free-list this transaction */
                   47029: #ifndef SQLITE_OMIT_SHARED_CACHE
                   47030:   int nRef;             /* Number of references to this structure */
                   47031:   BtShared *pNext;      /* Next on a list of sharable BtShared structs */
                   47032:   BtLock *pLock;        /* List of locks held on this shared-btree struct */
                   47033:   Btree *pWriter;       /* Btree with currently open write transaction */
                   47034:   u8 isExclusive;       /* True if pWriter has an EXCLUSIVE lock on the db */
                   47035:   u8 isPending;         /* If waiting for read-locks to clear */
                   47036: #endif
                   47037:   u8 *pTmpSpace;        /* BtShared.pageSize bytes of space for tmp use */
                   47038: };
                   47039: 
                   47040: /*
                   47041: ** An instance of the following structure is used to hold information
                   47042: ** about a cell.  The parseCellPtr() function fills in this structure
                   47043: ** based on information extract from the raw disk page.
                   47044: */
                   47045: typedef struct CellInfo CellInfo;
                   47046: struct CellInfo {
                   47047:   i64 nKey;      /* The key for INTKEY tables, or number of bytes in key */
                   47048:   u8 *pCell;     /* Pointer to the start of cell content */
                   47049:   u32 nData;     /* Number of bytes of data */
                   47050:   u32 nPayload;  /* Total amount of payload */
                   47051:   u16 nHeader;   /* Size of the cell content header in bytes */
                   47052:   u16 nLocal;    /* Amount of payload held locally */
                   47053:   u16 iOverflow; /* Offset to overflow page number.  Zero if no overflow */
                   47054:   u16 nSize;     /* Size of the cell content on the main b-tree page */
                   47055: };
                   47056: 
                   47057: /*
                   47058: ** Maximum depth of an SQLite B-Tree structure. Any B-Tree deeper than
                   47059: ** this will be declared corrupt. This value is calculated based on a
                   47060: ** maximum database size of 2^31 pages a minimum fanout of 2 for a
                   47061: ** root-node and 3 for all other internal nodes.
                   47062: **
                   47063: ** If a tree that appears to be taller than this is encountered, it is
                   47064: ** assumed that the database is corrupt.
                   47065: */
                   47066: #define BTCURSOR_MAX_DEPTH 20
                   47067: 
                   47068: /*
                   47069: ** A cursor is a pointer to a particular entry within a particular
                   47070: ** b-tree within a database file.
                   47071: **
                   47072: ** The entry is identified by its MemPage and the index in
                   47073: ** MemPage.aCell[] of the entry.
                   47074: **
                   47075: ** A single database file can shared by two more database connections,
                   47076: ** but cursors cannot be shared.  Each cursor is associated with a
                   47077: ** particular database connection identified BtCursor.pBtree.db.
                   47078: **
                   47079: ** Fields in this structure are accessed under the BtShared.mutex
                   47080: ** found at self->pBt->mutex. 
                   47081: */
                   47082: struct BtCursor {
                   47083:   Btree *pBtree;            /* The Btree to which this cursor belongs */
                   47084:   BtShared *pBt;            /* The BtShared this cursor points to */
                   47085:   BtCursor *pNext, *pPrev;  /* Forms a linked list of all cursors */
                   47086:   struct KeyInfo *pKeyInfo; /* Argument passed to comparison function */
                   47087:   Pgno pgnoRoot;            /* The root page of this tree */
                   47088:   sqlite3_int64 cachedRowid; /* Next rowid cache.  0 means not valid */
                   47089:   CellInfo info;            /* A parse of the cell we are pointing at */
                   47090:   i64 nKey;        /* Size of pKey, or last integer key */
                   47091:   void *pKey;      /* Saved key that was cursor's last known position */
                   47092:   int skipNext;    /* Prev() is noop if negative. Next() is noop if positive */
                   47093:   u8 wrFlag;                /* True if writable */
                   47094:   u8 atLast;                /* Cursor pointing to the last entry */
                   47095:   u8 validNKey;             /* True if info.nKey is valid */
                   47096:   u8 eState;                /* One of the CURSOR_XXX constants (see below) */
                   47097: #ifndef SQLITE_OMIT_INCRBLOB
                   47098:   Pgno *aOverflow;          /* Cache of overflow page locations */
                   47099:   u8 isIncrblobHandle;      /* True if this cursor is an incr. io handle */
                   47100: #endif
                   47101:   i16 iPage;                            /* Index of current page in apPage */
                   47102:   u16 aiIdx[BTCURSOR_MAX_DEPTH];        /* Current index in apPage[i] */
                   47103:   MemPage *apPage[BTCURSOR_MAX_DEPTH];  /* Pages from root to current page */
                   47104: };
                   47105: 
                   47106: /*
                   47107: ** Potential values for BtCursor.eState.
                   47108: **
                   47109: ** CURSOR_VALID:
                   47110: **   Cursor points to a valid entry. getPayload() etc. may be called.
                   47111: **
                   47112: ** CURSOR_INVALID:
                   47113: **   Cursor does not point to a valid entry. This can happen (for example) 
                   47114: **   because the table is empty or because BtreeCursorFirst() has not been
                   47115: **   called.
                   47116: **
                   47117: ** CURSOR_REQUIRESEEK:
                   47118: **   The table that this cursor was opened on still exists, but has been 
                   47119: **   modified since the cursor was last used. The cursor position is saved
                   47120: **   in variables BtCursor.pKey and BtCursor.nKey. When a cursor is in 
                   47121: **   this state, restoreCursorPosition() can be called to attempt to
                   47122: **   seek the cursor to the saved position.
                   47123: **
                   47124: ** CURSOR_FAULT:
                   47125: **   A unrecoverable error (an I/O error or a malloc failure) has occurred
                   47126: **   on a different connection that shares the BtShared cache with this
                   47127: **   cursor.  The error has left the cache in an inconsistent state.
                   47128: **   Do nothing else with this cursor.  Any attempt to use the cursor
                   47129: **   should return the error code stored in BtCursor.skip
                   47130: */
                   47131: #define CURSOR_INVALID           0
                   47132: #define CURSOR_VALID             1
                   47133: #define CURSOR_REQUIRESEEK       2
                   47134: #define CURSOR_FAULT             3
                   47135: 
                   47136: /* 
                   47137: ** The database page the PENDING_BYTE occupies. This page is never used.
                   47138: */
                   47139: # define PENDING_BYTE_PAGE(pBt) PAGER_MJ_PGNO(pBt)
                   47140: 
                   47141: /*
                   47142: ** These macros define the location of the pointer-map entry for a 
                   47143: ** database page. The first argument to each is the number of usable
                   47144: ** bytes on each page of the database (often 1024). The second is the
                   47145: ** page number to look up in the pointer map.
                   47146: **
                   47147: ** PTRMAP_PAGENO returns the database page number of the pointer-map
                   47148: ** page that stores the required pointer. PTRMAP_PTROFFSET returns
                   47149: ** the offset of the requested map entry.
                   47150: **
                   47151: ** If the pgno argument passed to PTRMAP_PAGENO is a pointer-map page,
                   47152: ** then pgno is returned. So (pgno==PTRMAP_PAGENO(pgsz, pgno)) can be
                   47153: ** used to test if pgno is a pointer-map page. PTRMAP_ISPAGE implements
                   47154: ** this test.
                   47155: */
                   47156: #define PTRMAP_PAGENO(pBt, pgno) ptrmapPageno(pBt, pgno)
                   47157: #define PTRMAP_PTROFFSET(pgptrmap, pgno) (5*(pgno-pgptrmap-1))
                   47158: #define PTRMAP_ISPAGE(pBt, pgno) (PTRMAP_PAGENO((pBt),(pgno))==(pgno))
                   47159: 
                   47160: /*
                   47161: ** The pointer map is a lookup table that identifies the parent page for
                   47162: ** each child page in the database file.  The parent page is the page that
                   47163: ** contains a pointer to the child.  Every page in the database contains
                   47164: ** 0 or 1 parent pages.  (In this context 'database page' refers
                   47165: ** to any page that is not part of the pointer map itself.)  Each pointer map
                   47166: ** entry consists of a single byte 'type' and a 4 byte parent page number.
                   47167: ** The PTRMAP_XXX identifiers below are the valid types.
                   47168: **
                   47169: ** The purpose of the pointer map is to facility moving pages from one
                   47170: ** position in the file to another as part of autovacuum.  When a page
                   47171: ** is moved, the pointer in its parent must be updated to point to the
                   47172: ** new location.  The pointer map is used to locate the parent page quickly.
                   47173: **
                   47174: ** PTRMAP_ROOTPAGE: The database page is a root-page. The page-number is not
                   47175: **                  used in this case.
                   47176: **
                   47177: ** PTRMAP_FREEPAGE: The database page is an unused (free) page. The page-number 
                   47178: **                  is not used in this case.
                   47179: **
                   47180: ** PTRMAP_OVERFLOW1: The database page is the first page in a list of 
                   47181: **                   overflow pages. The page number identifies the page that
                   47182: **                   contains the cell with a pointer to this overflow page.
                   47183: **
                   47184: ** PTRMAP_OVERFLOW2: The database page is the second or later page in a list of
                   47185: **                   overflow pages. The page-number identifies the previous
                   47186: **                   page in the overflow page list.
                   47187: **
                   47188: ** PTRMAP_BTREE: The database page is a non-root btree page. The page number
                   47189: **               identifies the parent page in the btree.
                   47190: */
                   47191: #define PTRMAP_ROOTPAGE 1
                   47192: #define PTRMAP_FREEPAGE 2
                   47193: #define PTRMAP_OVERFLOW1 3
                   47194: #define PTRMAP_OVERFLOW2 4
                   47195: #define PTRMAP_BTREE 5
                   47196: 
                   47197: /* A bunch of assert() statements to check the transaction state variables
                   47198: ** of handle p (type Btree*) are internally consistent.
                   47199: */
                   47200: #define btreeIntegrity(p) \
                   47201:   assert( p->pBt->inTransaction!=TRANS_NONE || p->pBt->nTransaction==0 ); \
                   47202:   assert( p->pBt->inTransaction>=p->inTrans ); 
                   47203: 
                   47204: 
                   47205: /*
                   47206: ** The ISAUTOVACUUM macro is used within balance_nonroot() to determine
                   47207: ** if the database supports auto-vacuum or not. Because it is used
                   47208: ** within an expression that is an argument to another macro 
                   47209: ** (sqliteMallocRaw), it is not possible to use conditional compilation.
                   47210: ** So, this macro is defined instead.
                   47211: */
                   47212: #ifndef SQLITE_OMIT_AUTOVACUUM
                   47213: #define ISAUTOVACUUM (pBt->autoVacuum)
                   47214: #else
                   47215: #define ISAUTOVACUUM 0
                   47216: #endif
                   47217: 
                   47218: 
                   47219: /*
                   47220: ** This structure is passed around through all the sanity checking routines
                   47221: ** in order to keep track of some global state information.
                   47222: */
                   47223: typedef struct IntegrityCk IntegrityCk;
                   47224: struct IntegrityCk {
                   47225:   BtShared *pBt;    /* The tree being checked out */
                   47226:   Pager *pPager;    /* The associated pager.  Also accessible by pBt->pPager */
                   47227:   Pgno nPage;       /* Number of pages in the database */
                   47228:   int *anRef;       /* Number of times each page is referenced */
                   47229:   int mxErr;        /* Stop accumulating errors when this reaches zero */
                   47230:   int nErr;         /* Number of messages written to zErrMsg so far */
                   47231:   int mallocFailed; /* A memory allocation error has occurred */
                   47232:   StrAccum errMsg;  /* Accumulate the error message text here */
                   47233: };
                   47234: 
                   47235: /*
                   47236: ** Read or write a two- and four-byte big-endian integer values.
                   47237: */
                   47238: #define get2byte(x)   ((x)[0]<<8 | (x)[1])
                   47239: #define put2byte(p,v) ((p)[0] = (u8)((v)>>8), (p)[1] = (u8)(v))
                   47240: #define get4byte sqlite3Get4byte
                   47241: #define put4byte sqlite3Put4byte
                   47242: 
                   47243: /************** End of btreeInt.h ********************************************/
                   47244: /************** Continuing where we left off in btmutex.c ********************/
                   47245: #ifndef SQLITE_OMIT_SHARED_CACHE
                   47246: #if SQLITE_THREADSAFE
                   47247: 
                   47248: /*
                   47249: ** Obtain the BtShared mutex associated with B-Tree handle p. Also,
                   47250: ** set BtShared.db to the database handle associated with p and the
                   47251: ** p->locked boolean to true.
                   47252: */
                   47253: static void lockBtreeMutex(Btree *p){
                   47254:   assert( p->locked==0 );
                   47255:   assert( sqlite3_mutex_notheld(p->pBt->mutex) );
                   47256:   assert( sqlite3_mutex_held(p->db->mutex) );
                   47257: 
                   47258:   sqlite3_mutex_enter(p->pBt->mutex);
                   47259:   p->pBt->db = p->db;
                   47260:   p->locked = 1;
                   47261: }
                   47262: 
                   47263: /*
                   47264: ** Release the BtShared mutex associated with B-Tree handle p and
                   47265: ** clear the p->locked boolean.
                   47266: */
                   47267: static void unlockBtreeMutex(Btree *p){
                   47268:   BtShared *pBt = p->pBt;
                   47269:   assert( p->locked==1 );
                   47270:   assert( sqlite3_mutex_held(pBt->mutex) );
                   47271:   assert( sqlite3_mutex_held(p->db->mutex) );
                   47272:   assert( p->db==pBt->db );
                   47273: 
                   47274:   sqlite3_mutex_leave(pBt->mutex);
                   47275:   p->locked = 0;
                   47276: }
                   47277: 
                   47278: /*
                   47279: ** Enter a mutex on the given BTree object.
                   47280: **
                   47281: ** If the object is not sharable, then no mutex is ever required
                   47282: ** and this routine is a no-op.  The underlying mutex is non-recursive.
                   47283: ** But we keep a reference count in Btree.wantToLock so the behavior
                   47284: ** of this interface is recursive.
                   47285: **
                   47286: ** To avoid deadlocks, multiple Btrees are locked in the same order
                   47287: ** by all database connections.  The p->pNext is a list of other
                   47288: ** Btrees belonging to the same database connection as the p Btree
                   47289: ** which need to be locked after p.  If we cannot get a lock on
                   47290: ** p, then first unlock all of the others on p->pNext, then wait
                   47291: ** for the lock to become available on p, then relock all of the
                   47292: ** subsequent Btrees that desire a lock.
                   47293: */
                   47294: SQLITE_PRIVATE void sqlite3BtreeEnter(Btree *p){
                   47295:   Btree *pLater;
                   47296: 
                   47297:   /* Some basic sanity checking on the Btree.  The list of Btrees
                   47298:   ** connected by pNext and pPrev should be in sorted order by
                   47299:   ** Btree.pBt value. All elements of the list should belong to
                   47300:   ** the same connection. Only shared Btrees are on the list. */
                   47301:   assert( p->pNext==0 || p->pNext->pBt>p->pBt );
                   47302:   assert( p->pPrev==0 || p->pPrev->pBt<p->pBt );
                   47303:   assert( p->pNext==0 || p->pNext->db==p->db );
                   47304:   assert( p->pPrev==0 || p->pPrev->db==p->db );
                   47305:   assert( p->sharable || (p->pNext==0 && p->pPrev==0) );
                   47306: 
                   47307:   /* Check for locking consistency */
                   47308:   assert( !p->locked || p->wantToLock>0 );
                   47309:   assert( p->sharable || p->wantToLock==0 );
                   47310: 
                   47311:   /* We should already hold a lock on the database connection */
                   47312:   assert( sqlite3_mutex_held(p->db->mutex) );
                   47313: 
                   47314:   /* Unless the database is sharable and unlocked, then BtShared.db
                   47315:   ** should already be set correctly. */
                   47316:   assert( (p->locked==0 && p->sharable) || p->pBt->db==p->db );
                   47317: 
                   47318:   if( !p->sharable ) return;
                   47319:   p->wantToLock++;
                   47320:   if( p->locked ) return;
                   47321: 
                   47322:   /* In most cases, we should be able to acquire the lock we
                   47323:   ** want without having to go throught the ascending lock
                   47324:   ** procedure that follows.  Just be sure not to block.
                   47325:   */
                   47326:   if( sqlite3_mutex_try(p->pBt->mutex)==SQLITE_OK ){
                   47327:     p->pBt->db = p->db;
                   47328:     p->locked = 1;
                   47329:     return;
                   47330:   }
                   47331: 
                   47332:   /* To avoid deadlock, first release all locks with a larger
                   47333:   ** BtShared address.  Then acquire our lock.  Then reacquire
                   47334:   ** the other BtShared locks that we used to hold in ascending
                   47335:   ** order.
                   47336:   */
                   47337:   for(pLater=p->pNext; pLater; pLater=pLater->pNext){
                   47338:     assert( pLater->sharable );
                   47339:     assert( pLater->pNext==0 || pLater->pNext->pBt>pLater->pBt );
                   47340:     assert( !pLater->locked || pLater->wantToLock>0 );
                   47341:     if( pLater->locked ){
                   47342:       unlockBtreeMutex(pLater);
                   47343:     }
                   47344:   }
                   47345:   lockBtreeMutex(p);
                   47346:   for(pLater=p->pNext; pLater; pLater=pLater->pNext){
                   47347:     if( pLater->wantToLock ){
                   47348:       lockBtreeMutex(pLater);
                   47349:     }
                   47350:   }
                   47351: }
                   47352: 
                   47353: /*
                   47354: ** Exit the recursive mutex on a Btree.
                   47355: */
                   47356: SQLITE_PRIVATE void sqlite3BtreeLeave(Btree *p){
                   47357:   if( p->sharable ){
                   47358:     assert( p->wantToLock>0 );
                   47359:     p->wantToLock--;
                   47360:     if( p->wantToLock==0 ){
                   47361:       unlockBtreeMutex(p);
                   47362:     }
                   47363:   }
                   47364: }
                   47365: 
                   47366: #ifndef NDEBUG
                   47367: /*
                   47368: ** Return true if the BtShared mutex is held on the btree, or if the
                   47369: ** B-Tree is not marked as sharable.
                   47370: **
                   47371: ** This routine is used only from within assert() statements.
                   47372: */
                   47373: SQLITE_PRIVATE int sqlite3BtreeHoldsMutex(Btree *p){
                   47374:   assert( p->sharable==0 || p->locked==0 || p->wantToLock>0 );
                   47375:   assert( p->sharable==0 || p->locked==0 || p->db==p->pBt->db );
                   47376:   assert( p->sharable==0 || p->locked==0 || sqlite3_mutex_held(p->pBt->mutex) );
                   47377:   assert( p->sharable==0 || p->locked==0 || sqlite3_mutex_held(p->db->mutex) );
                   47378: 
                   47379:   return (p->sharable==0 || p->locked);
                   47380: }
                   47381: #endif
                   47382: 
                   47383: 
                   47384: #ifndef SQLITE_OMIT_INCRBLOB
                   47385: /*
                   47386: ** Enter and leave a mutex on a Btree given a cursor owned by that
                   47387: ** Btree.  These entry points are used by incremental I/O and can be
                   47388: ** omitted if that module is not used.
                   47389: */
                   47390: SQLITE_PRIVATE void sqlite3BtreeEnterCursor(BtCursor *pCur){
                   47391:   sqlite3BtreeEnter(pCur->pBtree);
                   47392: }
                   47393: SQLITE_PRIVATE void sqlite3BtreeLeaveCursor(BtCursor *pCur){
                   47394:   sqlite3BtreeLeave(pCur->pBtree);
                   47395: }
                   47396: #endif /* SQLITE_OMIT_INCRBLOB */
                   47397: 
                   47398: 
                   47399: /*
                   47400: ** Enter the mutex on every Btree associated with a database
                   47401: ** connection.  This is needed (for example) prior to parsing
                   47402: ** a statement since we will be comparing table and column names
                   47403: ** against all schemas and we do not want those schemas being
                   47404: ** reset out from under us.
                   47405: **
                   47406: ** There is a corresponding leave-all procedures.
                   47407: **
                   47408: ** Enter the mutexes in accending order by BtShared pointer address
                   47409: ** to avoid the possibility of deadlock when two threads with
                   47410: ** two or more btrees in common both try to lock all their btrees
                   47411: ** at the same instant.
                   47412: */
                   47413: SQLITE_PRIVATE void sqlite3BtreeEnterAll(sqlite3 *db){
                   47414:   int i;
                   47415:   Btree *p;
                   47416:   assert( sqlite3_mutex_held(db->mutex) );
                   47417:   for(i=0; i<db->nDb; i++){
                   47418:     p = db->aDb[i].pBt;
                   47419:     if( p ) sqlite3BtreeEnter(p);
                   47420:   }
                   47421: }
                   47422: SQLITE_PRIVATE void sqlite3BtreeLeaveAll(sqlite3 *db){
                   47423:   int i;
                   47424:   Btree *p;
                   47425:   assert( sqlite3_mutex_held(db->mutex) );
                   47426:   for(i=0; i<db->nDb; i++){
                   47427:     p = db->aDb[i].pBt;
                   47428:     if( p ) sqlite3BtreeLeave(p);
                   47429:   }
                   47430: }
                   47431: 
                   47432: /*
                   47433: ** Return true if a particular Btree requires a lock.  Return FALSE if
                   47434: ** no lock is ever required since it is not sharable.
                   47435: */
                   47436: SQLITE_PRIVATE int sqlite3BtreeSharable(Btree *p){
                   47437:   return p->sharable;
                   47438: }
                   47439: 
                   47440: #ifndef NDEBUG
                   47441: /*
                   47442: ** Return true if the current thread holds the database connection
                   47443: ** mutex and all required BtShared mutexes.
                   47444: **
                   47445: ** This routine is used inside assert() statements only.
                   47446: */
                   47447: SQLITE_PRIVATE int sqlite3BtreeHoldsAllMutexes(sqlite3 *db){
                   47448:   int i;
                   47449:   if( !sqlite3_mutex_held(db->mutex) ){
                   47450:     return 0;
                   47451:   }
                   47452:   for(i=0; i<db->nDb; i++){
                   47453:     Btree *p;
                   47454:     p = db->aDb[i].pBt;
                   47455:     if( p && p->sharable &&
                   47456:          (p->wantToLock==0 || !sqlite3_mutex_held(p->pBt->mutex)) ){
                   47457:       return 0;
                   47458:     }
                   47459:   }
                   47460:   return 1;
                   47461: }
                   47462: #endif /* NDEBUG */
                   47463: 
                   47464: #ifndef NDEBUG
                   47465: /*
                   47466: ** Return true if the correct mutexes are held for accessing the
                   47467: ** db->aDb[iDb].pSchema structure.  The mutexes required for schema
                   47468: ** access are:
                   47469: **
                   47470: **   (1) The mutex on db
                   47471: **   (2) if iDb!=1, then the mutex on db->aDb[iDb].pBt.
                   47472: **
                   47473: ** If pSchema is not NULL, then iDb is computed from pSchema and
                   47474: ** db using sqlite3SchemaToIndex().
                   47475: */
                   47476: SQLITE_PRIVATE int sqlite3SchemaMutexHeld(sqlite3 *db, int iDb, Schema *pSchema){
                   47477:   Btree *p;
                   47478:   assert( db!=0 );
                   47479:   if( pSchema ) iDb = sqlite3SchemaToIndex(db, pSchema);
                   47480:   assert( iDb>=0 && iDb<db->nDb );
                   47481:   if( !sqlite3_mutex_held(db->mutex) ) return 0;
                   47482:   if( iDb==1 ) return 1;
                   47483:   p = db->aDb[iDb].pBt;
                   47484:   assert( p!=0 );
                   47485:   return p->sharable==0 || p->locked==1;
                   47486: }
                   47487: #endif /* NDEBUG */
                   47488: 
                   47489: #else /* SQLITE_THREADSAFE>0 above.  SQLITE_THREADSAFE==0 below */
                   47490: /*
                   47491: ** The following are special cases for mutex enter routines for use
                   47492: ** in single threaded applications that use shared cache.  Except for
                   47493: ** these two routines, all mutex operations are no-ops in that case and
                   47494: ** are null #defines in btree.h.
                   47495: **
                   47496: ** If shared cache is disabled, then all btree mutex routines, including
                   47497: ** the ones below, are no-ops and are null #defines in btree.h.
                   47498: */
                   47499: 
                   47500: SQLITE_PRIVATE void sqlite3BtreeEnter(Btree *p){
                   47501:   p->pBt->db = p->db;
                   47502: }
                   47503: SQLITE_PRIVATE void sqlite3BtreeEnterAll(sqlite3 *db){
                   47504:   int i;
                   47505:   for(i=0; i<db->nDb; i++){
                   47506:     Btree *p = db->aDb[i].pBt;
                   47507:     if( p ){
                   47508:       p->pBt->db = p->db;
                   47509:     }
                   47510:   }
                   47511: }
                   47512: #endif /* if SQLITE_THREADSAFE */
                   47513: #endif /* ifndef SQLITE_OMIT_SHARED_CACHE */
                   47514: 
                   47515: /************** End of btmutex.c *********************************************/
                   47516: /************** Begin file btree.c *******************************************/
                   47517: /*
                   47518: ** 2004 April 6
                   47519: **
                   47520: ** The author disclaims copyright to this source code.  In place of
                   47521: ** a legal notice, here is a blessing:
                   47522: **
                   47523: **    May you do good and not evil.
                   47524: **    May you find forgiveness for yourself and forgive others.
                   47525: **    May you share freely, never taking more than you give.
                   47526: **
                   47527: *************************************************************************
                   47528: ** This file implements a external (disk-based) database using BTrees.
                   47529: ** See the header comment on "btreeInt.h" for additional information.
                   47530: ** Including a description of file format and an overview of operation.
                   47531: */
                   47532: 
                   47533: /*
                   47534: ** The header string that appears at the beginning of every
                   47535: ** SQLite database.
                   47536: */
                   47537: static const char zMagicHeader[] = SQLITE_FILE_HEADER;
                   47538: 
                   47539: /*
                   47540: ** Set this global variable to 1 to enable tracing using the TRACE
                   47541: ** macro.
                   47542: */
                   47543: #if 0
                   47544: int sqlite3BtreeTrace=1;  /* True to enable tracing */
                   47545: # define TRACE(X)  if(sqlite3BtreeTrace){printf X;fflush(stdout);}
                   47546: #else
                   47547: # define TRACE(X)
                   47548: #endif
                   47549: 
                   47550: /*
                   47551: ** Extract a 2-byte big-endian integer from an array of unsigned bytes.
                   47552: ** But if the value is zero, make it 65536.
                   47553: **
                   47554: ** This routine is used to extract the "offset to cell content area" value
                   47555: ** from the header of a btree page.  If the page size is 65536 and the page
                   47556: ** is empty, the offset should be 65536, but the 2-byte value stores zero.
                   47557: ** This routine makes the necessary adjustment to 65536.
                   47558: */
                   47559: #define get2byteNotZero(X)  (((((int)get2byte(X))-1)&0xffff)+1)
                   47560: 
                   47561: #ifndef SQLITE_OMIT_SHARED_CACHE
                   47562: /*
                   47563: ** A list of BtShared objects that are eligible for participation
                   47564: ** in shared cache.  This variable has file scope during normal builds,
                   47565: ** but the test harness needs to access it so we make it global for 
                   47566: ** test builds.
                   47567: **
                   47568: ** Access to this variable is protected by SQLITE_MUTEX_STATIC_MASTER.
                   47569: */
                   47570: #ifdef SQLITE_TEST
                   47571: SQLITE_PRIVATE BtShared *SQLITE_WSD sqlite3SharedCacheList = 0;
                   47572: #else
                   47573: static BtShared *SQLITE_WSD sqlite3SharedCacheList = 0;
                   47574: #endif
                   47575: #endif /* SQLITE_OMIT_SHARED_CACHE */
                   47576: 
                   47577: #ifndef SQLITE_OMIT_SHARED_CACHE
                   47578: /*
                   47579: ** Enable or disable the shared pager and schema features.
                   47580: **
                   47581: ** This routine has no effect on existing database connections.
                   47582: ** The shared cache setting effects only future calls to
                   47583: ** sqlite3_open(), sqlite3_open16(), or sqlite3_open_v2().
                   47584: */
                   47585: SQLITE_API int sqlite3_enable_shared_cache(int enable){
                   47586:   sqlite3GlobalConfig.sharedCacheEnabled = enable;
                   47587:   return SQLITE_OK;
                   47588: }
                   47589: #endif
                   47590: 
                   47591: 
                   47592: 
                   47593: #ifdef SQLITE_OMIT_SHARED_CACHE
                   47594:   /*
                   47595:   ** The functions querySharedCacheTableLock(), setSharedCacheTableLock(),
                   47596:   ** and clearAllSharedCacheTableLocks()
                   47597:   ** manipulate entries in the BtShared.pLock linked list used to store
                   47598:   ** shared-cache table level locks. If the library is compiled with the
                   47599:   ** shared-cache feature disabled, then there is only ever one user
                   47600:   ** of each BtShared structure and so this locking is not necessary. 
                   47601:   ** So define the lock related functions as no-ops.
                   47602:   */
                   47603:   #define querySharedCacheTableLock(a,b,c) SQLITE_OK
                   47604:   #define setSharedCacheTableLock(a,b,c) SQLITE_OK
                   47605:   #define clearAllSharedCacheTableLocks(a)
                   47606:   #define downgradeAllSharedCacheTableLocks(a)
                   47607:   #define hasSharedCacheTableLock(a,b,c,d) 1
                   47608:   #define hasReadConflicts(a, b) 0
                   47609: #endif
                   47610: 
                   47611: #ifndef SQLITE_OMIT_SHARED_CACHE
                   47612: 
                   47613: #ifdef SQLITE_DEBUG
                   47614: /*
                   47615: **** This function is only used as part of an assert() statement. ***
                   47616: **
                   47617: ** Check to see if pBtree holds the required locks to read or write to the 
                   47618: ** table with root page iRoot.   Return 1 if it does and 0 if not.
                   47619: **
                   47620: ** For example, when writing to a table with root-page iRoot via 
                   47621: ** Btree connection pBtree:
                   47622: **
                   47623: **    assert( hasSharedCacheTableLock(pBtree, iRoot, 0, WRITE_LOCK) );
                   47624: **
                   47625: ** When writing to an index that resides in a sharable database, the 
                   47626: ** caller should have first obtained a lock specifying the root page of
                   47627: ** the corresponding table. This makes things a bit more complicated,
                   47628: ** as this module treats each table as a separate structure. To determine
                   47629: ** the table corresponding to the index being written, this
                   47630: ** function has to search through the database schema.
                   47631: **
                   47632: ** Instead of a lock on the table/index rooted at page iRoot, the caller may
                   47633: ** hold a write-lock on the schema table (root page 1). This is also
                   47634: ** acceptable.
                   47635: */
                   47636: static int hasSharedCacheTableLock(
                   47637:   Btree *pBtree,         /* Handle that must hold lock */
                   47638:   Pgno iRoot,            /* Root page of b-tree */
                   47639:   int isIndex,           /* True if iRoot is the root of an index b-tree */
                   47640:   int eLockType          /* Required lock type (READ_LOCK or WRITE_LOCK) */
                   47641: ){
                   47642:   Schema *pSchema = (Schema *)pBtree->pBt->pSchema;
                   47643:   Pgno iTab = 0;
                   47644:   BtLock *pLock;
                   47645: 
                   47646:   /* If this database is not shareable, or if the client is reading
                   47647:   ** and has the read-uncommitted flag set, then no lock is required. 
                   47648:   ** Return true immediately.
                   47649:   */
                   47650:   if( (pBtree->sharable==0)
                   47651:    || (eLockType==READ_LOCK && (pBtree->db->flags & SQLITE_ReadUncommitted))
                   47652:   ){
                   47653:     return 1;
                   47654:   }
                   47655: 
                   47656:   /* If the client is reading  or writing an index and the schema is
                   47657:   ** not loaded, then it is too difficult to actually check to see if
                   47658:   ** the correct locks are held.  So do not bother - just return true.
                   47659:   ** This case does not come up very often anyhow.
                   47660:   */
                   47661:   if( isIndex && (!pSchema || (pSchema->flags&DB_SchemaLoaded)==0) ){
                   47662:     return 1;
                   47663:   }
                   47664: 
                   47665:   /* Figure out the root-page that the lock should be held on. For table
                   47666:   ** b-trees, this is just the root page of the b-tree being read or
                   47667:   ** written. For index b-trees, it is the root page of the associated
                   47668:   ** table.  */
                   47669:   if( isIndex ){
                   47670:     HashElem *p;
                   47671:     for(p=sqliteHashFirst(&pSchema->idxHash); p; p=sqliteHashNext(p)){
                   47672:       Index *pIdx = (Index *)sqliteHashData(p);
                   47673:       if( pIdx->tnum==(int)iRoot ){
                   47674:         iTab = pIdx->pTable->tnum;
                   47675:       }
                   47676:     }
                   47677:   }else{
                   47678:     iTab = iRoot;
                   47679:   }
                   47680: 
                   47681:   /* Search for the required lock. Either a write-lock on root-page iTab, a 
                   47682:   ** write-lock on the schema table, or (if the client is reading) a
                   47683:   ** read-lock on iTab will suffice. Return 1 if any of these are found.  */
                   47684:   for(pLock=pBtree->pBt->pLock; pLock; pLock=pLock->pNext){
                   47685:     if( pLock->pBtree==pBtree 
                   47686:      && (pLock->iTable==iTab || (pLock->eLock==WRITE_LOCK && pLock->iTable==1))
                   47687:      && pLock->eLock>=eLockType 
                   47688:     ){
                   47689:       return 1;
                   47690:     }
                   47691:   }
                   47692: 
                   47693:   /* Failed to find the required lock. */
                   47694:   return 0;
                   47695: }
                   47696: #endif /* SQLITE_DEBUG */
                   47697: 
                   47698: #ifdef SQLITE_DEBUG
                   47699: /*
                   47700: **** This function may be used as part of assert() statements only. ****
                   47701: **
                   47702: ** Return true if it would be illegal for pBtree to write into the
                   47703: ** table or index rooted at iRoot because other shared connections are
                   47704: ** simultaneously reading that same table or index.
                   47705: **
                   47706: ** It is illegal for pBtree to write if some other Btree object that
                   47707: ** shares the same BtShared object is currently reading or writing
                   47708: ** the iRoot table.  Except, if the other Btree object has the
                   47709: ** read-uncommitted flag set, then it is OK for the other object to
                   47710: ** have a read cursor.
                   47711: **
                   47712: ** For example, before writing to any part of the table or index
                   47713: ** rooted at page iRoot, one should call:
                   47714: **
                   47715: **    assert( !hasReadConflicts(pBtree, iRoot) );
                   47716: */
                   47717: static int hasReadConflicts(Btree *pBtree, Pgno iRoot){
                   47718:   BtCursor *p;
                   47719:   for(p=pBtree->pBt->pCursor; p; p=p->pNext){
                   47720:     if( p->pgnoRoot==iRoot 
                   47721:      && p->pBtree!=pBtree
                   47722:      && 0==(p->pBtree->db->flags & SQLITE_ReadUncommitted)
                   47723:     ){
                   47724:       return 1;
                   47725:     }
                   47726:   }
                   47727:   return 0;
                   47728: }
                   47729: #endif    /* #ifdef SQLITE_DEBUG */
                   47730: 
                   47731: /*
                   47732: ** Query to see if Btree handle p may obtain a lock of type eLock 
                   47733: ** (READ_LOCK or WRITE_LOCK) on the table with root-page iTab. Return
                   47734: ** SQLITE_OK if the lock may be obtained (by calling
                   47735: ** setSharedCacheTableLock()), or SQLITE_LOCKED if not.
                   47736: */
                   47737: static int querySharedCacheTableLock(Btree *p, Pgno iTab, u8 eLock){
                   47738:   BtShared *pBt = p->pBt;
                   47739:   BtLock *pIter;
                   47740: 
                   47741:   assert( sqlite3BtreeHoldsMutex(p) );
                   47742:   assert( eLock==READ_LOCK || eLock==WRITE_LOCK );
                   47743:   assert( p->db!=0 );
                   47744:   assert( !(p->db->flags&SQLITE_ReadUncommitted)||eLock==WRITE_LOCK||iTab==1 );
                   47745:   
                   47746:   /* If requesting a write-lock, then the Btree must have an open write
                   47747:   ** transaction on this file. And, obviously, for this to be so there 
                   47748:   ** must be an open write transaction on the file itself.
                   47749:   */
                   47750:   assert( eLock==READ_LOCK || (p==pBt->pWriter && p->inTrans==TRANS_WRITE) );
                   47751:   assert( eLock==READ_LOCK || pBt->inTransaction==TRANS_WRITE );
                   47752:   
                   47753:   /* This routine is a no-op if the shared-cache is not enabled */
                   47754:   if( !p->sharable ){
                   47755:     return SQLITE_OK;
                   47756:   }
                   47757: 
                   47758:   /* If some other connection is holding an exclusive lock, the
                   47759:   ** requested lock may not be obtained.
                   47760:   */
                   47761:   if( pBt->pWriter!=p && pBt->isExclusive ){
                   47762:     sqlite3ConnectionBlocked(p->db, pBt->pWriter->db);
                   47763:     return SQLITE_LOCKED_SHAREDCACHE;
                   47764:   }
                   47765: 
                   47766:   for(pIter=pBt->pLock; pIter; pIter=pIter->pNext){
                   47767:     /* The condition (pIter->eLock!=eLock) in the following if(...) 
                   47768:     ** statement is a simplification of:
                   47769:     **
                   47770:     **   (eLock==WRITE_LOCK || pIter->eLock==WRITE_LOCK)
                   47771:     **
                   47772:     ** since we know that if eLock==WRITE_LOCK, then no other connection
                   47773:     ** may hold a WRITE_LOCK on any table in this file (since there can
                   47774:     ** only be a single writer).
                   47775:     */
                   47776:     assert( pIter->eLock==READ_LOCK || pIter->eLock==WRITE_LOCK );
                   47777:     assert( eLock==READ_LOCK || pIter->pBtree==p || pIter->eLock==READ_LOCK);
                   47778:     if( pIter->pBtree!=p && pIter->iTable==iTab && pIter->eLock!=eLock ){
                   47779:       sqlite3ConnectionBlocked(p->db, pIter->pBtree->db);
                   47780:       if( eLock==WRITE_LOCK ){
                   47781:         assert( p==pBt->pWriter );
                   47782:         pBt->isPending = 1;
                   47783:       }
                   47784:       return SQLITE_LOCKED_SHAREDCACHE;
                   47785:     }
                   47786:   }
                   47787:   return SQLITE_OK;
                   47788: }
                   47789: #endif /* !SQLITE_OMIT_SHARED_CACHE */
                   47790: 
                   47791: #ifndef SQLITE_OMIT_SHARED_CACHE
                   47792: /*
                   47793: ** Add a lock on the table with root-page iTable to the shared-btree used
                   47794: ** by Btree handle p. Parameter eLock must be either READ_LOCK or 
                   47795: ** WRITE_LOCK.
                   47796: **
                   47797: ** This function assumes the following:
                   47798: **
                   47799: **   (a) The specified Btree object p is connected to a sharable
                   47800: **       database (one with the BtShared.sharable flag set), and
                   47801: **
                   47802: **   (b) No other Btree objects hold a lock that conflicts
                   47803: **       with the requested lock (i.e. querySharedCacheTableLock() has
                   47804: **       already been called and returned SQLITE_OK).
                   47805: **
                   47806: ** SQLITE_OK is returned if the lock is added successfully. SQLITE_NOMEM 
                   47807: ** is returned if a malloc attempt fails.
                   47808: */
                   47809: static int setSharedCacheTableLock(Btree *p, Pgno iTable, u8 eLock){
                   47810:   BtShared *pBt = p->pBt;
                   47811:   BtLock *pLock = 0;
                   47812:   BtLock *pIter;
                   47813: 
                   47814:   assert( sqlite3BtreeHoldsMutex(p) );
                   47815:   assert( eLock==READ_LOCK || eLock==WRITE_LOCK );
                   47816:   assert( p->db!=0 );
                   47817: 
                   47818:   /* A connection with the read-uncommitted flag set will never try to
                   47819:   ** obtain a read-lock using this function. The only read-lock obtained
                   47820:   ** by a connection in read-uncommitted mode is on the sqlite_master 
                   47821:   ** table, and that lock is obtained in BtreeBeginTrans().  */
                   47822:   assert( 0==(p->db->flags&SQLITE_ReadUncommitted) || eLock==WRITE_LOCK );
                   47823: 
                   47824:   /* This function should only be called on a sharable b-tree after it 
                   47825:   ** has been determined that no other b-tree holds a conflicting lock.  */
                   47826:   assert( p->sharable );
                   47827:   assert( SQLITE_OK==querySharedCacheTableLock(p, iTable, eLock) );
                   47828: 
                   47829:   /* First search the list for an existing lock on this table. */
                   47830:   for(pIter=pBt->pLock; pIter; pIter=pIter->pNext){
                   47831:     if( pIter->iTable==iTable && pIter->pBtree==p ){
                   47832:       pLock = pIter;
                   47833:       break;
                   47834:     }
                   47835:   }
                   47836: 
                   47837:   /* If the above search did not find a BtLock struct associating Btree p
                   47838:   ** with table iTable, allocate one and link it into the list.
                   47839:   */
                   47840:   if( !pLock ){
                   47841:     pLock = (BtLock *)sqlite3MallocZero(sizeof(BtLock));
                   47842:     if( !pLock ){
                   47843:       return SQLITE_NOMEM;
                   47844:     }
                   47845:     pLock->iTable = iTable;
                   47846:     pLock->pBtree = p;
                   47847:     pLock->pNext = pBt->pLock;
                   47848:     pBt->pLock = pLock;
                   47849:   }
                   47850: 
                   47851:   /* Set the BtLock.eLock variable to the maximum of the current lock
                   47852:   ** and the requested lock. This means if a write-lock was already held
                   47853:   ** and a read-lock requested, we don't incorrectly downgrade the lock.
                   47854:   */
                   47855:   assert( WRITE_LOCK>READ_LOCK );
                   47856:   if( eLock>pLock->eLock ){
                   47857:     pLock->eLock = eLock;
                   47858:   }
                   47859: 
                   47860:   return SQLITE_OK;
                   47861: }
                   47862: #endif /* !SQLITE_OMIT_SHARED_CACHE */
                   47863: 
                   47864: #ifndef SQLITE_OMIT_SHARED_CACHE
                   47865: /*
                   47866: ** Release all the table locks (locks obtained via calls to
                   47867: ** the setSharedCacheTableLock() procedure) held by Btree object p.
                   47868: **
                   47869: ** This function assumes that Btree p has an open read or write 
                   47870: ** transaction. If it does not, then the BtShared.isPending variable
                   47871: ** may be incorrectly cleared.
                   47872: */
                   47873: static void clearAllSharedCacheTableLocks(Btree *p){
                   47874:   BtShared *pBt = p->pBt;
                   47875:   BtLock **ppIter = &pBt->pLock;
                   47876: 
                   47877:   assert( sqlite3BtreeHoldsMutex(p) );
                   47878:   assert( p->sharable || 0==*ppIter );
                   47879:   assert( p->inTrans>0 );
                   47880: 
                   47881:   while( *ppIter ){
                   47882:     BtLock *pLock = *ppIter;
                   47883:     assert( pBt->isExclusive==0 || pBt->pWriter==pLock->pBtree );
                   47884:     assert( pLock->pBtree->inTrans>=pLock->eLock );
                   47885:     if( pLock->pBtree==p ){
                   47886:       *ppIter = pLock->pNext;
                   47887:       assert( pLock->iTable!=1 || pLock==&p->lock );
                   47888:       if( pLock->iTable!=1 ){
                   47889:         sqlite3_free(pLock);
                   47890:       }
                   47891:     }else{
                   47892:       ppIter = &pLock->pNext;
                   47893:     }
                   47894:   }
                   47895: 
                   47896:   assert( pBt->isPending==0 || pBt->pWriter );
                   47897:   if( pBt->pWriter==p ){
                   47898:     pBt->pWriter = 0;
                   47899:     pBt->isExclusive = 0;
                   47900:     pBt->isPending = 0;
                   47901:   }else if( pBt->nTransaction==2 ){
                   47902:     /* This function is called when Btree p is concluding its 
                   47903:     ** transaction. If there currently exists a writer, and p is not
                   47904:     ** that writer, then the number of locks held by connections other
                   47905:     ** than the writer must be about to drop to zero. In this case
                   47906:     ** set the isPending flag to 0.
                   47907:     **
                   47908:     ** If there is not currently a writer, then BtShared.isPending must
                   47909:     ** be zero already. So this next line is harmless in that case.
                   47910:     */
                   47911:     pBt->isPending = 0;
                   47912:   }
                   47913: }
                   47914: 
                   47915: /*
                   47916: ** This function changes all write-locks held by Btree p into read-locks.
                   47917: */
                   47918: static void downgradeAllSharedCacheTableLocks(Btree *p){
                   47919:   BtShared *pBt = p->pBt;
                   47920:   if( pBt->pWriter==p ){
                   47921:     BtLock *pLock;
                   47922:     pBt->pWriter = 0;
                   47923:     pBt->isExclusive = 0;
                   47924:     pBt->isPending = 0;
                   47925:     for(pLock=pBt->pLock; pLock; pLock=pLock->pNext){
                   47926:       assert( pLock->eLock==READ_LOCK || pLock->pBtree==p );
                   47927:       pLock->eLock = READ_LOCK;
                   47928:     }
                   47929:   }
                   47930: }
                   47931: 
                   47932: #endif /* SQLITE_OMIT_SHARED_CACHE */
                   47933: 
                   47934: static void releasePage(MemPage *pPage);  /* Forward reference */
                   47935: 
                   47936: /*
                   47937: ***** This routine is used inside of assert() only ****
                   47938: **
                   47939: ** Verify that the cursor holds the mutex on its BtShared
                   47940: */
                   47941: #ifdef SQLITE_DEBUG
                   47942: static int cursorHoldsMutex(BtCursor *p){
                   47943:   return sqlite3_mutex_held(p->pBt->mutex);
                   47944: }
                   47945: #endif
                   47946: 
                   47947: 
                   47948: #ifndef SQLITE_OMIT_INCRBLOB
                   47949: /*
                   47950: ** Invalidate the overflow page-list cache for cursor pCur, if any.
                   47951: */
                   47952: static void invalidateOverflowCache(BtCursor *pCur){
                   47953:   assert( cursorHoldsMutex(pCur) );
                   47954:   sqlite3_free(pCur->aOverflow);
                   47955:   pCur->aOverflow = 0;
                   47956: }
                   47957: 
                   47958: /*
                   47959: ** Invalidate the overflow page-list cache for all cursors opened
                   47960: ** on the shared btree structure pBt.
                   47961: */
                   47962: static void invalidateAllOverflowCache(BtShared *pBt){
                   47963:   BtCursor *p;
                   47964:   assert( sqlite3_mutex_held(pBt->mutex) );
                   47965:   for(p=pBt->pCursor; p; p=p->pNext){
                   47966:     invalidateOverflowCache(p);
                   47967:   }
                   47968: }
                   47969: 
                   47970: /*
                   47971: ** This function is called before modifying the contents of a table
                   47972: ** to invalidate any incrblob cursors that are open on the
                   47973: ** row or one of the rows being modified.
                   47974: **
                   47975: ** If argument isClearTable is true, then the entire contents of the
                   47976: ** table is about to be deleted. In this case invalidate all incrblob
                   47977: ** cursors open on any row within the table with root-page pgnoRoot.
                   47978: **
                   47979: ** Otherwise, if argument isClearTable is false, then the row with
                   47980: ** rowid iRow is being replaced or deleted. In this case invalidate
                   47981: ** only those incrblob cursors open on that specific row.
                   47982: */
                   47983: static void invalidateIncrblobCursors(
                   47984:   Btree *pBtree,          /* The database file to check */
                   47985:   i64 iRow,               /* The rowid that might be changing */
                   47986:   int isClearTable        /* True if all rows are being deleted */
                   47987: ){
                   47988:   BtCursor *p;
                   47989:   BtShared *pBt = pBtree->pBt;
                   47990:   assert( sqlite3BtreeHoldsMutex(pBtree) );
                   47991:   for(p=pBt->pCursor; p; p=p->pNext){
                   47992:     if( p->isIncrblobHandle && (isClearTable || p->info.nKey==iRow) ){
                   47993:       p->eState = CURSOR_INVALID;
                   47994:     }
                   47995:   }
                   47996: }
                   47997: 
                   47998: #else
                   47999:   /* Stub functions when INCRBLOB is omitted */
                   48000:   #define invalidateOverflowCache(x)
                   48001:   #define invalidateAllOverflowCache(x)
                   48002:   #define invalidateIncrblobCursors(x,y,z)
                   48003: #endif /* SQLITE_OMIT_INCRBLOB */
                   48004: 
                   48005: /*
                   48006: ** Set bit pgno of the BtShared.pHasContent bitvec. This is called 
                   48007: ** when a page that previously contained data becomes a free-list leaf 
                   48008: ** page.
                   48009: **
                   48010: ** The BtShared.pHasContent bitvec exists to work around an obscure
                   48011: ** bug caused by the interaction of two useful IO optimizations surrounding
                   48012: ** free-list leaf pages:
                   48013: **
                   48014: **   1) When all data is deleted from a page and the page becomes
                   48015: **      a free-list leaf page, the page is not written to the database
                   48016: **      (as free-list leaf pages contain no meaningful data). Sometimes
                   48017: **      such a page is not even journalled (as it will not be modified,
                   48018: **      why bother journalling it?).
                   48019: **
                   48020: **   2) When a free-list leaf page is reused, its content is not read
                   48021: **      from the database or written to the journal file (why should it
                   48022: **      be, if it is not at all meaningful?).
                   48023: **
                   48024: ** By themselves, these optimizations work fine and provide a handy
                   48025: ** performance boost to bulk delete or insert operations. However, if
                   48026: ** a page is moved to the free-list and then reused within the same
                   48027: ** transaction, a problem comes up. If the page is not journalled when
                   48028: ** it is moved to the free-list and it is also not journalled when it
                   48029: ** is extracted from the free-list and reused, then the original data
                   48030: ** may be lost. In the event of a rollback, it may not be possible
                   48031: ** to restore the database to its original configuration.
                   48032: **
                   48033: ** The solution is the BtShared.pHasContent bitvec. Whenever a page is 
                   48034: ** moved to become a free-list leaf page, the corresponding bit is
                   48035: ** set in the bitvec. Whenever a leaf page is extracted from the free-list,
                   48036: ** optimization 2 above is omitted if the corresponding bit is already
                   48037: ** set in BtShared.pHasContent. The contents of the bitvec are cleared
                   48038: ** at the end of every transaction.
                   48039: */
                   48040: static int btreeSetHasContent(BtShared *pBt, Pgno pgno){
                   48041:   int rc = SQLITE_OK;
                   48042:   if( !pBt->pHasContent ){
                   48043:     assert( pgno<=pBt->nPage );
                   48044:     pBt->pHasContent = sqlite3BitvecCreate(pBt->nPage);
                   48045:     if( !pBt->pHasContent ){
                   48046:       rc = SQLITE_NOMEM;
                   48047:     }
                   48048:   }
                   48049:   if( rc==SQLITE_OK && pgno<=sqlite3BitvecSize(pBt->pHasContent) ){
                   48050:     rc = sqlite3BitvecSet(pBt->pHasContent, pgno);
                   48051:   }
                   48052:   return rc;
                   48053: }
                   48054: 
                   48055: /*
                   48056: ** Query the BtShared.pHasContent vector.
                   48057: **
                   48058: ** This function is called when a free-list leaf page is removed from the
                   48059: ** free-list for reuse. It returns false if it is safe to retrieve the
                   48060: ** page from the pager layer with the 'no-content' flag set. True otherwise.
                   48061: */
                   48062: static int btreeGetHasContent(BtShared *pBt, Pgno pgno){
                   48063:   Bitvec *p = pBt->pHasContent;
                   48064:   return (p && (pgno>sqlite3BitvecSize(p) || sqlite3BitvecTest(p, pgno)));
                   48065: }
                   48066: 
                   48067: /*
                   48068: ** Clear (destroy) the BtShared.pHasContent bitvec. This should be
                   48069: ** invoked at the conclusion of each write-transaction.
                   48070: */
                   48071: static void btreeClearHasContent(BtShared *pBt){
                   48072:   sqlite3BitvecDestroy(pBt->pHasContent);
                   48073:   pBt->pHasContent = 0;
                   48074: }
                   48075: 
                   48076: /*
                   48077: ** Save the current cursor position in the variables BtCursor.nKey 
                   48078: ** and BtCursor.pKey. The cursor's state is set to CURSOR_REQUIRESEEK.
                   48079: **
                   48080: ** The caller must ensure that the cursor is valid (has eState==CURSOR_VALID)
                   48081: ** prior to calling this routine.  
                   48082: */
                   48083: static int saveCursorPosition(BtCursor *pCur){
                   48084:   int rc;
                   48085: 
                   48086:   assert( CURSOR_VALID==pCur->eState );
                   48087:   assert( 0==pCur->pKey );
                   48088:   assert( cursorHoldsMutex(pCur) );
                   48089: 
                   48090:   rc = sqlite3BtreeKeySize(pCur, &pCur->nKey);
                   48091:   assert( rc==SQLITE_OK );  /* KeySize() cannot fail */
                   48092: 
                   48093:   /* If this is an intKey table, then the above call to BtreeKeySize()
                   48094:   ** stores the integer key in pCur->nKey. In this case this value is
                   48095:   ** all that is required. Otherwise, if pCur is not open on an intKey
                   48096:   ** table, then malloc space for and store the pCur->nKey bytes of key 
                   48097:   ** data.
                   48098:   */
                   48099:   if( 0==pCur->apPage[0]->intKey ){
                   48100:     void *pKey = sqlite3Malloc( (int)pCur->nKey );
                   48101:     if( pKey ){
                   48102:       rc = sqlite3BtreeKey(pCur, 0, (int)pCur->nKey, pKey);
                   48103:       if( rc==SQLITE_OK ){
                   48104:         pCur->pKey = pKey;
                   48105:       }else{
                   48106:         sqlite3_free(pKey);
                   48107:       }
                   48108:     }else{
                   48109:       rc = SQLITE_NOMEM;
                   48110:     }
                   48111:   }
                   48112:   assert( !pCur->apPage[0]->intKey || !pCur->pKey );
                   48113: 
                   48114:   if( rc==SQLITE_OK ){
                   48115:     int i;
                   48116:     for(i=0; i<=pCur->iPage; i++){
                   48117:       releasePage(pCur->apPage[i]);
                   48118:       pCur->apPage[i] = 0;
                   48119:     }
                   48120:     pCur->iPage = -1;
                   48121:     pCur->eState = CURSOR_REQUIRESEEK;
                   48122:   }
                   48123: 
                   48124:   invalidateOverflowCache(pCur);
                   48125:   return rc;
                   48126: }
                   48127: 
                   48128: /*
                   48129: ** Save the positions of all cursors (except pExcept) that are open on
                   48130: ** the table  with root-page iRoot. Usually, this is called just before cursor
                   48131: ** pExcept is used to modify the table (BtreeDelete() or BtreeInsert()).
                   48132: */
                   48133: static int saveAllCursors(BtShared *pBt, Pgno iRoot, BtCursor *pExcept){
                   48134:   BtCursor *p;
                   48135:   assert( sqlite3_mutex_held(pBt->mutex) );
                   48136:   assert( pExcept==0 || pExcept->pBt==pBt );
                   48137:   for(p=pBt->pCursor; p; p=p->pNext){
                   48138:     if( p!=pExcept && (0==iRoot || p->pgnoRoot==iRoot) && 
                   48139:         p->eState==CURSOR_VALID ){
                   48140:       int rc = saveCursorPosition(p);
                   48141:       if( SQLITE_OK!=rc ){
                   48142:         return rc;
                   48143:       }
                   48144:     }
                   48145:   }
                   48146:   return SQLITE_OK;
                   48147: }
                   48148: 
                   48149: /*
                   48150: ** Clear the current cursor position.
                   48151: */
                   48152: SQLITE_PRIVATE void sqlite3BtreeClearCursor(BtCursor *pCur){
                   48153:   assert( cursorHoldsMutex(pCur) );
                   48154:   sqlite3_free(pCur->pKey);
                   48155:   pCur->pKey = 0;
                   48156:   pCur->eState = CURSOR_INVALID;
                   48157: }
                   48158: 
                   48159: /*
                   48160: ** In this version of BtreeMoveto, pKey is a packed index record
                   48161: ** such as is generated by the OP_MakeRecord opcode.  Unpack the
                   48162: ** record and then call BtreeMovetoUnpacked() to do the work.
                   48163: */
                   48164: static int btreeMoveto(
                   48165:   BtCursor *pCur,     /* Cursor open on the btree to be searched */
                   48166:   const void *pKey,   /* Packed key if the btree is an index */
                   48167:   i64 nKey,           /* Integer key for tables.  Size of pKey for indices */
                   48168:   int bias,           /* Bias search to the high end */
                   48169:   int *pRes           /* Write search results here */
                   48170: ){
                   48171:   int rc;                    /* Status code */
                   48172:   UnpackedRecord *pIdxKey;   /* Unpacked index key */
                   48173:   char aSpace[150];          /* Temp space for pIdxKey - to avoid a malloc */
                   48174: 
                   48175:   if( pKey ){
                   48176:     assert( nKey==(i64)(int)nKey );
                   48177:     pIdxKey = sqlite3VdbeRecordUnpack(pCur->pKeyInfo, (int)nKey, pKey,
                   48178:                                       aSpace, sizeof(aSpace));
                   48179:     if( pIdxKey==0 ) return SQLITE_NOMEM;
                   48180:   }else{
                   48181:     pIdxKey = 0;
                   48182:   }
                   48183:   rc = sqlite3BtreeMovetoUnpacked(pCur, pIdxKey, nKey, bias, pRes);
                   48184:   if( pKey ){
                   48185:     sqlite3VdbeDeleteUnpackedRecord(pIdxKey);
                   48186:   }
                   48187:   return rc;
                   48188: }
                   48189: 
                   48190: /*
                   48191: ** Restore the cursor to the position it was in (or as close to as possible)
                   48192: ** when saveCursorPosition() was called. Note that this call deletes the 
                   48193: ** saved position info stored by saveCursorPosition(), so there can be
                   48194: ** at most one effective restoreCursorPosition() call after each 
                   48195: ** saveCursorPosition().
                   48196: */
                   48197: static int btreeRestoreCursorPosition(BtCursor *pCur){
                   48198:   int rc;
                   48199:   assert( cursorHoldsMutex(pCur) );
                   48200:   assert( pCur->eState>=CURSOR_REQUIRESEEK );
                   48201:   if( pCur->eState==CURSOR_FAULT ){
                   48202:     return pCur->skipNext;
                   48203:   }
                   48204:   pCur->eState = CURSOR_INVALID;
                   48205:   rc = btreeMoveto(pCur, pCur->pKey, pCur->nKey, 0, &pCur->skipNext);
                   48206:   if( rc==SQLITE_OK ){
                   48207:     sqlite3_free(pCur->pKey);
                   48208:     pCur->pKey = 0;
                   48209:     assert( pCur->eState==CURSOR_VALID || pCur->eState==CURSOR_INVALID );
                   48210:   }
                   48211:   return rc;
                   48212: }
                   48213: 
                   48214: #define restoreCursorPosition(p) \
                   48215:   (p->eState>=CURSOR_REQUIRESEEK ? \
                   48216:          btreeRestoreCursorPosition(p) : \
                   48217:          SQLITE_OK)
                   48218: 
                   48219: /*
                   48220: ** Determine whether or not a cursor has moved from the position it
                   48221: ** was last placed at.  Cursors can move when the row they are pointing
                   48222: ** at is deleted out from under them.
                   48223: **
                   48224: ** This routine returns an error code if something goes wrong.  The
                   48225: ** integer *pHasMoved is set to one if the cursor has moved and 0 if not.
                   48226: */
                   48227: SQLITE_PRIVATE int sqlite3BtreeCursorHasMoved(BtCursor *pCur, int *pHasMoved){
                   48228:   int rc;
                   48229: 
                   48230:   rc = restoreCursorPosition(pCur);
                   48231:   if( rc ){
                   48232:     *pHasMoved = 1;
                   48233:     return rc;
                   48234:   }
                   48235:   if( pCur->eState!=CURSOR_VALID || pCur->skipNext!=0 ){
                   48236:     *pHasMoved = 1;
                   48237:   }else{
                   48238:     *pHasMoved = 0;
                   48239:   }
                   48240:   return SQLITE_OK;
                   48241: }
                   48242: 
                   48243: #ifndef SQLITE_OMIT_AUTOVACUUM
                   48244: /*
                   48245: ** Given a page number of a regular database page, return the page
                   48246: ** number for the pointer-map page that contains the entry for the
                   48247: ** input page number.
                   48248: **
                   48249: ** Return 0 (not a valid page) for pgno==1 since there is
                   48250: ** no pointer map associated with page 1.  The integrity_check logic
                   48251: ** requires that ptrmapPageno(*,1)!=1.
                   48252: */
                   48253: static Pgno ptrmapPageno(BtShared *pBt, Pgno pgno){
                   48254:   int nPagesPerMapPage;
                   48255:   Pgno iPtrMap, ret;
                   48256:   assert( sqlite3_mutex_held(pBt->mutex) );
                   48257:   if( pgno<2 ) return 0;
                   48258:   nPagesPerMapPage = (pBt->usableSize/5)+1;
                   48259:   iPtrMap = (pgno-2)/nPagesPerMapPage;
                   48260:   ret = (iPtrMap*nPagesPerMapPage) + 2; 
                   48261:   if( ret==PENDING_BYTE_PAGE(pBt) ){
                   48262:     ret++;
                   48263:   }
                   48264:   return ret;
                   48265: }
                   48266: 
                   48267: /*
                   48268: ** Write an entry into the pointer map.
                   48269: **
                   48270: ** This routine updates the pointer map entry for page number 'key'
                   48271: ** so that it maps to type 'eType' and parent page number 'pgno'.
                   48272: **
                   48273: ** If *pRC is initially non-zero (non-SQLITE_OK) then this routine is
                   48274: ** a no-op.  If an error occurs, the appropriate error code is written
                   48275: ** into *pRC.
                   48276: */
                   48277: static void ptrmapPut(BtShared *pBt, Pgno key, u8 eType, Pgno parent, int *pRC){
                   48278:   DbPage *pDbPage;  /* The pointer map page */
                   48279:   u8 *pPtrmap;      /* The pointer map data */
                   48280:   Pgno iPtrmap;     /* The pointer map page number */
                   48281:   int offset;       /* Offset in pointer map page */
                   48282:   int rc;           /* Return code from subfunctions */
                   48283: 
                   48284:   if( *pRC ) return;
                   48285: 
                   48286:   assert( sqlite3_mutex_held(pBt->mutex) );
                   48287:   /* The master-journal page number must never be used as a pointer map page */
                   48288:   assert( 0==PTRMAP_ISPAGE(pBt, PENDING_BYTE_PAGE(pBt)) );
                   48289: 
                   48290:   assert( pBt->autoVacuum );
                   48291:   if( key==0 ){
                   48292:     *pRC = SQLITE_CORRUPT_BKPT;
                   48293:     return;
                   48294:   }
                   48295:   iPtrmap = PTRMAP_PAGENO(pBt, key);
                   48296:   rc = sqlite3PagerGet(pBt->pPager, iPtrmap, &pDbPage);
                   48297:   if( rc!=SQLITE_OK ){
                   48298:     *pRC = rc;
                   48299:     return;
                   48300:   }
                   48301:   offset = PTRMAP_PTROFFSET(iPtrmap, key);
                   48302:   if( offset<0 ){
                   48303:     *pRC = SQLITE_CORRUPT_BKPT;
                   48304:     goto ptrmap_exit;
                   48305:   }
                   48306:   assert( offset <= (int)pBt->usableSize-5 );
                   48307:   pPtrmap = (u8 *)sqlite3PagerGetData(pDbPage);
                   48308: 
                   48309:   if( eType!=pPtrmap[offset] || get4byte(&pPtrmap[offset+1])!=parent ){
                   48310:     TRACE(("PTRMAP_UPDATE: %d->(%d,%d)\n", key, eType, parent));
                   48311:     *pRC= rc = sqlite3PagerWrite(pDbPage);
                   48312:     if( rc==SQLITE_OK ){
                   48313:       pPtrmap[offset] = eType;
                   48314:       put4byte(&pPtrmap[offset+1], parent);
                   48315:     }
                   48316:   }
                   48317: 
                   48318: ptrmap_exit:
                   48319:   sqlite3PagerUnref(pDbPage);
                   48320: }
                   48321: 
                   48322: /*
                   48323: ** Read an entry from the pointer map.
                   48324: **
                   48325: ** This routine retrieves the pointer map entry for page 'key', writing
                   48326: ** the type and parent page number to *pEType and *pPgno respectively.
                   48327: ** An error code is returned if something goes wrong, otherwise SQLITE_OK.
                   48328: */
                   48329: static int ptrmapGet(BtShared *pBt, Pgno key, u8 *pEType, Pgno *pPgno){
                   48330:   DbPage *pDbPage;   /* The pointer map page */
                   48331:   int iPtrmap;       /* Pointer map page index */
                   48332:   u8 *pPtrmap;       /* Pointer map page data */
                   48333:   int offset;        /* Offset of entry in pointer map */
                   48334:   int rc;
                   48335: 
                   48336:   assert( sqlite3_mutex_held(pBt->mutex) );
                   48337: 
                   48338:   iPtrmap = PTRMAP_PAGENO(pBt, key);
                   48339:   rc = sqlite3PagerGet(pBt->pPager, iPtrmap, &pDbPage);
                   48340:   if( rc!=0 ){
                   48341:     return rc;
                   48342:   }
                   48343:   pPtrmap = (u8 *)sqlite3PagerGetData(pDbPage);
                   48344: 
                   48345:   offset = PTRMAP_PTROFFSET(iPtrmap, key);
                   48346:   if( offset<0 ){
                   48347:     sqlite3PagerUnref(pDbPage);
                   48348:     return SQLITE_CORRUPT_BKPT;
                   48349:   }
                   48350:   assert( offset <= (int)pBt->usableSize-5 );
                   48351:   assert( pEType!=0 );
                   48352:   *pEType = pPtrmap[offset];
                   48353:   if( pPgno ) *pPgno = get4byte(&pPtrmap[offset+1]);
                   48354: 
                   48355:   sqlite3PagerUnref(pDbPage);
                   48356:   if( *pEType<1 || *pEType>5 ) return SQLITE_CORRUPT_BKPT;
                   48357:   return SQLITE_OK;
                   48358: }
                   48359: 
                   48360: #else /* if defined SQLITE_OMIT_AUTOVACUUM */
                   48361:   #define ptrmapPut(w,x,y,z,rc)
                   48362:   #define ptrmapGet(w,x,y,z) SQLITE_OK
                   48363:   #define ptrmapPutOvflPtr(x, y, rc)
                   48364: #endif
                   48365: 
                   48366: /*
                   48367: ** Given a btree page and a cell index (0 means the first cell on
                   48368: ** the page, 1 means the second cell, and so forth) return a pointer
                   48369: ** to the cell content.
                   48370: **
                   48371: ** This routine works only for pages that do not contain overflow cells.
                   48372: */
                   48373: #define findCell(P,I) \
                   48374:   ((P)->aData + ((P)->maskPage & get2byte(&(P)->aData[(P)->cellOffset+2*(I)])))
                   48375: #define findCellv2(D,M,O,I) (D+(M&get2byte(D+(O+2*(I)))))
                   48376: 
                   48377: 
                   48378: /*
                   48379: ** This a more complex version of findCell() that works for
                   48380: ** pages that do contain overflow cells.
                   48381: */
                   48382: static u8 *findOverflowCell(MemPage *pPage, int iCell){
                   48383:   int i;
                   48384:   assert( sqlite3_mutex_held(pPage->pBt->mutex) );
                   48385:   for(i=pPage->nOverflow-1; i>=0; i--){
                   48386:     int k;
                   48387:     struct _OvflCell *pOvfl;
                   48388:     pOvfl = &pPage->aOvfl[i];
                   48389:     k = pOvfl->idx;
                   48390:     if( k<=iCell ){
                   48391:       if( k==iCell ){
                   48392:         return pOvfl->pCell;
                   48393:       }
                   48394:       iCell--;
                   48395:     }
                   48396:   }
                   48397:   return findCell(pPage, iCell);
                   48398: }
                   48399: 
                   48400: /*
                   48401: ** Parse a cell content block and fill in the CellInfo structure.  There
                   48402: ** are two versions of this function.  btreeParseCell() takes a 
                   48403: ** cell index as the second argument and btreeParseCellPtr() 
                   48404: ** takes a pointer to the body of the cell as its second argument.
                   48405: **
                   48406: ** Within this file, the parseCell() macro can be called instead of
                   48407: ** btreeParseCellPtr(). Using some compilers, this will be faster.
                   48408: */
                   48409: static void btreeParseCellPtr(
                   48410:   MemPage *pPage,         /* Page containing the cell */
                   48411:   u8 *pCell,              /* Pointer to the cell text. */
                   48412:   CellInfo *pInfo         /* Fill in this structure */
                   48413: ){
                   48414:   u16 n;                  /* Number bytes in cell content header */
                   48415:   u32 nPayload;           /* Number of bytes of cell payload */
                   48416: 
                   48417:   assert( sqlite3_mutex_held(pPage->pBt->mutex) );
                   48418: 
                   48419:   pInfo->pCell = pCell;
                   48420:   assert( pPage->leaf==0 || pPage->leaf==1 );
                   48421:   n = pPage->childPtrSize;
                   48422:   assert( n==4-4*pPage->leaf );
                   48423:   if( pPage->intKey ){
                   48424:     if( pPage->hasData ){
                   48425:       n += getVarint32(&pCell[n], nPayload);
                   48426:     }else{
                   48427:       nPayload = 0;
                   48428:     }
                   48429:     n += getVarint(&pCell[n], (u64*)&pInfo->nKey);
                   48430:     pInfo->nData = nPayload;
                   48431:   }else{
                   48432:     pInfo->nData = 0;
                   48433:     n += getVarint32(&pCell[n], nPayload);
                   48434:     pInfo->nKey = nPayload;
                   48435:   }
                   48436:   pInfo->nPayload = nPayload;
                   48437:   pInfo->nHeader = n;
                   48438:   testcase( nPayload==pPage->maxLocal );
                   48439:   testcase( nPayload==pPage->maxLocal+1 );
                   48440:   if( likely(nPayload<=pPage->maxLocal) ){
                   48441:     /* This is the (easy) common case where the entire payload fits
                   48442:     ** on the local page.  No overflow is required.
                   48443:     */
                   48444:     if( (pInfo->nSize = (u16)(n+nPayload))<4 ) pInfo->nSize = 4;
                   48445:     pInfo->nLocal = (u16)nPayload;
                   48446:     pInfo->iOverflow = 0;
                   48447:   }else{
                   48448:     /* If the payload will not fit completely on the local page, we have
                   48449:     ** to decide how much to store locally and how much to spill onto
                   48450:     ** overflow pages.  The strategy is to minimize the amount of unused
                   48451:     ** space on overflow pages while keeping the amount of local storage
                   48452:     ** in between minLocal and maxLocal.
                   48453:     **
                   48454:     ** Warning:  changing the way overflow payload is distributed in any
                   48455:     ** way will result in an incompatible file format.
                   48456:     */
                   48457:     int minLocal;  /* Minimum amount of payload held locally */
                   48458:     int maxLocal;  /* Maximum amount of payload held locally */
                   48459:     int surplus;   /* Overflow payload available for local storage */
                   48460: 
                   48461:     minLocal = pPage->minLocal;
                   48462:     maxLocal = pPage->maxLocal;
                   48463:     surplus = minLocal + (nPayload - minLocal)%(pPage->pBt->usableSize - 4);
                   48464:     testcase( surplus==maxLocal );
                   48465:     testcase( surplus==maxLocal+1 );
                   48466:     if( surplus <= maxLocal ){
                   48467:       pInfo->nLocal = (u16)surplus;
                   48468:     }else{
                   48469:       pInfo->nLocal = (u16)minLocal;
                   48470:     }
                   48471:     pInfo->iOverflow = (u16)(pInfo->nLocal + n);
                   48472:     pInfo->nSize = pInfo->iOverflow + 4;
                   48473:   }
                   48474: }
                   48475: #define parseCell(pPage, iCell, pInfo) \
                   48476:   btreeParseCellPtr((pPage), findCell((pPage), (iCell)), (pInfo))
                   48477: static void btreeParseCell(
                   48478:   MemPage *pPage,         /* Page containing the cell */
                   48479:   int iCell,              /* The cell index.  First cell is 0 */
                   48480:   CellInfo *pInfo         /* Fill in this structure */
                   48481: ){
                   48482:   parseCell(pPage, iCell, pInfo);
                   48483: }
                   48484: 
                   48485: /*
                   48486: ** Compute the total number of bytes that a Cell needs in the cell
                   48487: ** data area of the btree-page.  The return number includes the cell
                   48488: ** data header and the local payload, but not any overflow page or
                   48489: ** the space used by the cell pointer.
                   48490: */
                   48491: static u16 cellSizePtr(MemPage *pPage, u8 *pCell){
                   48492:   u8 *pIter = &pCell[pPage->childPtrSize];
                   48493:   u32 nSize;
                   48494: 
                   48495: #ifdef SQLITE_DEBUG
                   48496:   /* The value returned by this function should always be the same as
                   48497:   ** the (CellInfo.nSize) value found by doing a full parse of the
                   48498:   ** cell. If SQLITE_DEBUG is defined, an assert() at the bottom of
                   48499:   ** this function verifies that this invariant is not violated. */
                   48500:   CellInfo debuginfo;
                   48501:   btreeParseCellPtr(pPage, pCell, &debuginfo);
                   48502: #endif
                   48503: 
                   48504:   if( pPage->intKey ){
                   48505:     u8 *pEnd;
                   48506:     if( pPage->hasData ){
                   48507:       pIter += getVarint32(pIter, nSize);
                   48508:     }else{
                   48509:       nSize = 0;
                   48510:     }
                   48511: 
                   48512:     /* pIter now points at the 64-bit integer key value, a variable length 
                   48513:     ** integer. The following block moves pIter to point at the first byte
                   48514:     ** past the end of the key value. */
                   48515:     pEnd = &pIter[9];
                   48516:     while( (*pIter++)&0x80 && pIter<pEnd );
                   48517:   }else{
                   48518:     pIter += getVarint32(pIter, nSize);
                   48519:   }
                   48520: 
                   48521:   testcase( nSize==pPage->maxLocal );
                   48522:   testcase( nSize==pPage->maxLocal+1 );
                   48523:   if( nSize>pPage->maxLocal ){
                   48524:     int minLocal = pPage->minLocal;
                   48525:     nSize = minLocal + (nSize - minLocal) % (pPage->pBt->usableSize - 4);
                   48526:     testcase( nSize==pPage->maxLocal );
                   48527:     testcase( nSize==pPage->maxLocal+1 );
                   48528:     if( nSize>pPage->maxLocal ){
                   48529:       nSize = minLocal;
                   48530:     }
                   48531:     nSize += 4;
                   48532:   }
                   48533:   nSize += (u32)(pIter - pCell);
                   48534: 
                   48535:   /* The minimum size of any cell is 4 bytes. */
                   48536:   if( nSize<4 ){
                   48537:     nSize = 4;
                   48538:   }
                   48539: 
                   48540:   assert( nSize==debuginfo.nSize );
                   48541:   return (u16)nSize;
                   48542: }
                   48543: 
                   48544: #ifdef SQLITE_DEBUG
                   48545: /* This variation on cellSizePtr() is used inside of assert() statements
                   48546: ** only. */
                   48547: static u16 cellSize(MemPage *pPage, int iCell){
                   48548:   return cellSizePtr(pPage, findCell(pPage, iCell));
                   48549: }
                   48550: #endif
                   48551: 
                   48552: #ifndef SQLITE_OMIT_AUTOVACUUM
                   48553: /*
                   48554: ** If the cell pCell, part of page pPage contains a pointer
                   48555: ** to an overflow page, insert an entry into the pointer-map
                   48556: ** for the overflow page.
                   48557: */
                   48558: static void ptrmapPutOvflPtr(MemPage *pPage, u8 *pCell, int *pRC){
                   48559:   CellInfo info;
                   48560:   if( *pRC ) return;
                   48561:   assert( pCell!=0 );
                   48562:   btreeParseCellPtr(pPage, pCell, &info);
                   48563:   assert( (info.nData+(pPage->intKey?0:info.nKey))==info.nPayload );
                   48564:   if( info.iOverflow ){
                   48565:     Pgno ovfl = get4byte(&pCell[info.iOverflow]);
                   48566:     ptrmapPut(pPage->pBt, ovfl, PTRMAP_OVERFLOW1, pPage->pgno, pRC);
                   48567:   }
                   48568: }
                   48569: #endif
                   48570: 
                   48571: 
                   48572: /*
                   48573: ** Defragment the page given.  All Cells are moved to the
                   48574: ** end of the page and all free space is collected into one
                   48575: ** big FreeBlk that occurs in between the header and cell
                   48576: ** pointer array and the cell content area.
                   48577: */
                   48578: static int defragmentPage(MemPage *pPage){
                   48579:   int i;                     /* Loop counter */
                   48580:   int pc;                    /* Address of a i-th cell */
                   48581:   int hdr;                   /* Offset to the page header */
                   48582:   int size;                  /* Size of a cell */
                   48583:   int usableSize;            /* Number of usable bytes on a page */
                   48584:   int cellOffset;            /* Offset to the cell pointer array */
                   48585:   int cbrk;                  /* Offset to the cell content area */
                   48586:   int nCell;                 /* Number of cells on the page */
                   48587:   unsigned char *data;       /* The page data */
                   48588:   unsigned char *temp;       /* Temp area for cell content */
                   48589:   int iCellFirst;            /* First allowable cell index */
                   48590:   int iCellLast;             /* Last possible cell index */
                   48591: 
                   48592: 
                   48593:   assert( sqlite3PagerIswriteable(pPage->pDbPage) );
                   48594:   assert( pPage->pBt!=0 );
                   48595:   assert( pPage->pBt->usableSize <= SQLITE_MAX_PAGE_SIZE );
                   48596:   assert( pPage->nOverflow==0 );
                   48597:   assert( sqlite3_mutex_held(pPage->pBt->mutex) );
                   48598:   temp = sqlite3PagerTempSpace(pPage->pBt->pPager);
                   48599:   data = pPage->aData;
                   48600:   hdr = pPage->hdrOffset;
                   48601:   cellOffset = pPage->cellOffset;
                   48602:   nCell = pPage->nCell;
                   48603:   assert( nCell==get2byte(&data[hdr+3]) );
                   48604:   usableSize = pPage->pBt->usableSize;
                   48605:   cbrk = get2byte(&data[hdr+5]);
                   48606:   memcpy(&temp[cbrk], &data[cbrk], usableSize - cbrk);
                   48607:   cbrk = usableSize;
                   48608:   iCellFirst = cellOffset + 2*nCell;
                   48609:   iCellLast = usableSize - 4;
                   48610:   for(i=0; i<nCell; i++){
                   48611:     u8 *pAddr;     /* The i-th cell pointer */
                   48612:     pAddr = &data[cellOffset + i*2];
                   48613:     pc = get2byte(pAddr);
                   48614:     testcase( pc==iCellFirst );
                   48615:     testcase( pc==iCellLast );
                   48616: #if !defined(SQLITE_ENABLE_OVERSIZE_CELL_CHECK)
                   48617:     /* These conditions have already been verified in btreeInitPage()
                   48618:     ** if SQLITE_ENABLE_OVERSIZE_CELL_CHECK is defined 
                   48619:     */
                   48620:     if( pc<iCellFirst || pc>iCellLast ){
                   48621:       return SQLITE_CORRUPT_BKPT;
                   48622:     }
                   48623: #endif
                   48624:     assert( pc>=iCellFirst && pc<=iCellLast );
                   48625:     size = cellSizePtr(pPage, &temp[pc]);
                   48626:     cbrk -= size;
                   48627: #if defined(SQLITE_ENABLE_OVERSIZE_CELL_CHECK)
                   48628:     if( cbrk<iCellFirst ){
                   48629:       return SQLITE_CORRUPT_BKPT;
                   48630:     }
                   48631: #else
                   48632:     if( cbrk<iCellFirst || pc+size>usableSize ){
                   48633:       return SQLITE_CORRUPT_BKPT;
                   48634:     }
                   48635: #endif
                   48636:     assert( cbrk+size<=usableSize && cbrk>=iCellFirst );
                   48637:     testcase( cbrk+size==usableSize );
                   48638:     testcase( pc+size==usableSize );
                   48639:     memcpy(&data[cbrk], &temp[pc], size);
                   48640:     put2byte(pAddr, cbrk);
                   48641:   }
                   48642:   assert( cbrk>=iCellFirst );
                   48643:   put2byte(&data[hdr+5], cbrk);
                   48644:   data[hdr+1] = 0;
                   48645:   data[hdr+2] = 0;
                   48646:   data[hdr+7] = 0;
                   48647:   memset(&data[iCellFirst], 0, cbrk-iCellFirst);
                   48648:   assert( sqlite3PagerIswriteable(pPage->pDbPage) );
                   48649:   if( cbrk-iCellFirst!=pPage->nFree ){
                   48650:     return SQLITE_CORRUPT_BKPT;
                   48651:   }
                   48652:   return SQLITE_OK;
                   48653: }
                   48654: 
                   48655: /*
                   48656: ** Allocate nByte bytes of space from within the B-Tree page passed
                   48657: ** as the first argument. Write into *pIdx the index into pPage->aData[]
                   48658: ** of the first byte of allocated space. Return either SQLITE_OK or
                   48659: ** an error code (usually SQLITE_CORRUPT).
                   48660: **
                   48661: ** The caller guarantees that there is sufficient space to make the
                   48662: ** allocation.  This routine might need to defragment in order to bring
                   48663: ** all the space together, however.  This routine will avoid using
                   48664: ** the first two bytes past the cell pointer area since presumably this
                   48665: ** allocation is being made in order to insert a new cell, so we will
                   48666: ** also end up needing a new cell pointer.
                   48667: */
                   48668: static int allocateSpace(MemPage *pPage, int nByte, int *pIdx){
                   48669:   const int hdr = pPage->hdrOffset;    /* Local cache of pPage->hdrOffset */
                   48670:   u8 * const data = pPage->aData;      /* Local cache of pPage->aData */
                   48671:   int nFrag;                           /* Number of fragmented bytes on pPage */
                   48672:   int top;                             /* First byte of cell content area */
                   48673:   int gap;        /* First byte of gap between cell pointers and cell content */
                   48674:   int rc;         /* Integer return code */
                   48675:   int usableSize; /* Usable size of the page */
                   48676:   
                   48677:   assert( sqlite3PagerIswriteable(pPage->pDbPage) );
                   48678:   assert( pPage->pBt );
                   48679:   assert( sqlite3_mutex_held(pPage->pBt->mutex) );
                   48680:   assert( nByte>=0 );  /* Minimum cell size is 4 */
                   48681:   assert( pPage->nFree>=nByte );
                   48682:   assert( pPage->nOverflow==0 );
                   48683:   usableSize = pPage->pBt->usableSize;
                   48684:   assert( nByte < usableSize-8 );
                   48685: 
                   48686:   nFrag = data[hdr+7];
                   48687:   assert( pPage->cellOffset == hdr + 12 - 4*pPage->leaf );
                   48688:   gap = pPage->cellOffset + 2*pPage->nCell;
                   48689:   top = get2byteNotZero(&data[hdr+5]);
                   48690:   if( gap>top ) return SQLITE_CORRUPT_BKPT;
                   48691:   testcase( gap+2==top );
                   48692:   testcase( gap+1==top );
                   48693:   testcase( gap==top );
                   48694: 
                   48695:   if( nFrag>=60 ){
                   48696:     /* Always defragment highly fragmented pages */
                   48697:     rc = defragmentPage(pPage);
                   48698:     if( rc ) return rc;
                   48699:     top = get2byteNotZero(&data[hdr+5]);
                   48700:   }else if( gap+2<=top ){
                   48701:     /* Search the freelist looking for a free slot big enough to satisfy 
                   48702:     ** the request. The allocation is made from the first free slot in 
1.1.1.3 ! misho    48703:     ** the list that is large enough to accommodate it.
1.1       misho    48704:     */
                   48705:     int pc, addr;
                   48706:     for(addr=hdr+1; (pc = get2byte(&data[addr]))>0; addr=pc){
                   48707:       int size;            /* Size of the free slot */
                   48708:       if( pc>usableSize-4 || pc<addr+4 ){
                   48709:         return SQLITE_CORRUPT_BKPT;
                   48710:       }
                   48711:       size = get2byte(&data[pc+2]);
                   48712:       if( size>=nByte ){
                   48713:         int x = size - nByte;
                   48714:         testcase( x==4 );
                   48715:         testcase( x==3 );
                   48716:         if( x<4 ){
                   48717:           /* Remove the slot from the free-list. Update the number of
                   48718:           ** fragmented bytes within the page. */
                   48719:           memcpy(&data[addr], &data[pc], 2);
                   48720:           data[hdr+7] = (u8)(nFrag + x);
                   48721:         }else if( size+pc > usableSize ){
                   48722:           return SQLITE_CORRUPT_BKPT;
                   48723:         }else{
                   48724:           /* The slot remains on the free-list. Reduce its size to account
                   48725:           ** for the portion used by the new allocation. */
                   48726:           put2byte(&data[pc+2], x);
                   48727:         }
                   48728:         *pIdx = pc + x;
                   48729:         return SQLITE_OK;
                   48730:       }
                   48731:     }
                   48732:   }
                   48733: 
                   48734:   /* Check to make sure there is enough space in the gap to satisfy
                   48735:   ** the allocation.  If not, defragment.
                   48736:   */
                   48737:   testcase( gap+2+nByte==top );
                   48738:   if( gap+2+nByte>top ){
                   48739:     rc = defragmentPage(pPage);
                   48740:     if( rc ) return rc;
                   48741:     top = get2byteNotZero(&data[hdr+5]);
                   48742:     assert( gap+nByte<=top );
                   48743:   }
                   48744: 
                   48745: 
                   48746:   /* Allocate memory from the gap in between the cell pointer array
                   48747:   ** and the cell content area.  The btreeInitPage() call has already
                   48748:   ** validated the freelist.  Given that the freelist is valid, there
                   48749:   ** is no way that the allocation can extend off the end of the page.
                   48750:   ** The assert() below verifies the previous sentence.
                   48751:   */
                   48752:   top -= nByte;
                   48753:   put2byte(&data[hdr+5], top);
                   48754:   assert( top+nByte <= (int)pPage->pBt->usableSize );
                   48755:   *pIdx = top;
                   48756:   return SQLITE_OK;
                   48757: }
                   48758: 
                   48759: /*
                   48760: ** Return a section of the pPage->aData to the freelist.
                   48761: ** The first byte of the new free block is pPage->aDisk[start]
                   48762: ** and the size of the block is "size" bytes.
                   48763: **
                   48764: ** Most of the effort here is involved in coalesing adjacent
                   48765: ** free blocks into a single big free block.
                   48766: */
                   48767: static int freeSpace(MemPage *pPage, int start, int size){
                   48768:   int addr, pbegin, hdr;
                   48769:   int iLast;                        /* Largest possible freeblock offset */
                   48770:   unsigned char *data = pPage->aData;
                   48771: 
                   48772:   assert( pPage->pBt!=0 );
                   48773:   assert( sqlite3PagerIswriteable(pPage->pDbPage) );
                   48774:   assert( start>=pPage->hdrOffset+6+pPage->childPtrSize );
                   48775:   assert( (start + size) <= (int)pPage->pBt->usableSize );
                   48776:   assert( sqlite3_mutex_held(pPage->pBt->mutex) );
                   48777:   assert( size>=0 );   /* Minimum cell size is 4 */
                   48778: 
                   48779:   if( pPage->pBt->secureDelete ){
                   48780:     /* Overwrite deleted information with zeros when the secure_delete
                   48781:     ** option is enabled */
                   48782:     memset(&data[start], 0, size);
                   48783:   }
                   48784: 
                   48785:   /* Add the space back into the linked list of freeblocks.  Note that
                   48786:   ** even though the freeblock list was checked by btreeInitPage(),
                   48787:   ** btreeInitPage() did not detect overlapping cells or
                   48788:   ** freeblocks that overlapped cells.   Nor does it detect when the
                   48789:   ** cell content area exceeds the value in the page header.  If these
                   48790:   ** situations arise, then subsequent insert operations might corrupt
                   48791:   ** the freelist.  So we do need to check for corruption while scanning
                   48792:   ** the freelist.
                   48793:   */
                   48794:   hdr = pPage->hdrOffset;
                   48795:   addr = hdr + 1;
                   48796:   iLast = pPage->pBt->usableSize - 4;
                   48797:   assert( start<=iLast );
                   48798:   while( (pbegin = get2byte(&data[addr]))<start && pbegin>0 ){
                   48799:     if( pbegin<addr+4 ){
                   48800:       return SQLITE_CORRUPT_BKPT;
                   48801:     }
                   48802:     addr = pbegin;
                   48803:   }
                   48804:   if( pbegin>iLast ){
                   48805:     return SQLITE_CORRUPT_BKPT;
                   48806:   }
                   48807:   assert( pbegin>addr || pbegin==0 );
                   48808:   put2byte(&data[addr], start);
                   48809:   put2byte(&data[start], pbegin);
                   48810:   put2byte(&data[start+2], size);
                   48811:   pPage->nFree = pPage->nFree + (u16)size;
                   48812: 
                   48813:   /* Coalesce adjacent free blocks */
                   48814:   addr = hdr + 1;
                   48815:   while( (pbegin = get2byte(&data[addr]))>0 ){
                   48816:     int pnext, psize, x;
                   48817:     assert( pbegin>addr );
                   48818:     assert( pbegin <= (int)pPage->pBt->usableSize-4 );
                   48819:     pnext = get2byte(&data[pbegin]);
                   48820:     psize = get2byte(&data[pbegin+2]);
                   48821:     if( pbegin + psize + 3 >= pnext && pnext>0 ){
                   48822:       int frag = pnext - (pbegin+psize);
                   48823:       if( (frag<0) || (frag>(int)data[hdr+7]) ){
                   48824:         return SQLITE_CORRUPT_BKPT;
                   48825:       }
                   48826:       data[hdr+7] -= (u8)frag;
                   48827:       x = get2byte(&data[pnext]);
                   48828:       put2byte(&data[pbegin], x);
                   48829:       x = pnext + get2byte(&data[pnext+2]) - pbegin;
                   48830:       put2byte(&data[pbegin+2], x);
                   48831:     }else{
                   48832:       addr = pbegin;
                   48833:     }
                   48834:   }
                   48835: 
                   48836:   /* If the cell content area begins with a freeblock, remove it. */
                   48837:   if( data[hdr+1]==data[hdr+5] && data[hdr+2]==data[hdr+6] ){
                   48838:     int top;
                   48839:     pbegin = get2byte(&data[hdr+1]);
                   48840:     memcpy(&data[hdr+1], &data[pbegin], 2);
                   48841:     top = get2byte(&data[hdr+5]) + get2byte(&data[pbegin+2]);
                   48842:     put2byte(&data[hdr+5], top);
                   48843:   }
                   48844:   assert( sqlite3PagerIswriteable(pPage->pDbPage) );
                   48845:   return SQLITE_OK;
                   48846: }
                   48847: 
                   48848: /*
                   48849: ** Decode the flags byte (the first byte of the header) for a page
                   48850: ** and initialize fields of the MemPage structure accordingly.
                   48851: **
                   48852: ** Only the following combinations are supported.  Anything different
                   48853: ** indicates a corrupt database files:
                   48854: **
                   48855: **         PTF_ZERODATA
                   48856: **         PTF_ZERODATA | PTF_LEAF
                   48857: **         PTF_LEAFDATA | PTF_INTKEY
                   48858: **         PTF_LEAFDATA | PTF_INTKEY | PTF_LEAF
                   48859: */
                   48860: static int decodeFlags(MemPage *pPage, int flagByte){
                   48861:   BtShared *pBt;     /* A copy of pPage->pBt */
                   48862: 
                   48863:   assert( pPage->hdrOffset==(pPage->pgno==1 ? 100 : 0) );
                   48864:   assert( sqlite3_mutex_held(pPage->pBt->mutex) );
                   48865:   pPage->leaf = (u8)(flagByte>>3);  assert( PTF_LEAF == 1<<3 );
                   48866:   flagByte &= ~PTF_LEAF;
                   48867:   pPage->childPtrSize = 4-4*pPage->leaf;
                   48868:   pBt = pPage->pBt;
                   48869:   if( flagByte==(PTF_LEAFDATA | PTF_INTKEY) ){
                   48870:     pPage->intKey = 1;
                   48871:     pPage->hasData = pPage->leaf;
                   48872:     pPage->maxLocal = pBt->maxLeaf;
                   48873:     pPage->minLocal = pBt->minLeaf;
                   48874:   }else if( flagByte==PTF_ZERODATA ){
                   48875:     pPage->intKey = 0;
                   48876:     pPage->hasData = 0;
                   48877:     pPage->maxLocal = pBt->maxLocal;
                   48878:     pPage->minLocal = pBt->minLocal;
                   48879:   }else{
                   48880:     return SQLITE_CORRUPT_BKPT;
                   48881:   }
                   48882:   return SQLITE_OK;
                   48883: }
                   48884: 
                   48885: /*
                   48886: ** Initialize the auxiliary information for a disk block.
                   48887: **
                   48888: ** Return SQLITE_OK on success.  If we see that the page does
                   48889: ** not contain a well-formed database page, then return 
                   48890: ** SQLITE_CORRUPT.  Note that a return of SQLITE_OK does not
                   48891: ** guarantee that the page is well-formed.  It only shows that
                   48892: ** we failed to detect any corruption.
                   48893: */
                   48894: static int btreeInitPage(MemPage *pPage){
                   48895: 
                   48896:   assert( pPage->pBt!=0 );
                   48897:   assert( sqlite3_mutex_held(pPage->pBt->mutex) );
                   48898:   assert( pPage->pgno==sqlite3PagerPagenumber(pPage->pDbPage) );
                   48899:   assert( pPage == sqlite3PagerGetExtra(pPage->pDbPage) );
                   48900:   assert( pPage->aData == sqlite3PagerGetData(pPage->pDbPage) );
                   48901: 
                   48902:   if( !pPage->isInit ){
                   48903:     u16 pc;            /* Address of a freeblock within pPage->aData[] */
                   48904:     u8 hdr;            /* Offset to beginning of page header */
                   48905:     u8 *data;          /* Equal to pPage->aData */
                   48906:     BtShared *pBt;        /* The main btree structure */
                   48907:     int usableSize;    /* Amount of usable space on each page */
                   48908:     u16 cellOffset;    /* Offset from start of page to first cell pointer */
                   48909:     int nFree;         /* Number of unused bytes on the page */
                   48910:     int top;           /* First byte of the cell content area */
                   48911:     int iCellFirst;    /* First allowable cell or freeblock offset */
                   48912:     int iCellLast;     /* Last possible cell or freeblock offset */
                   48913: 
                   48914:     pBt = pPage->pBt;
                   48915: 
                   48916:     hdr = pPage->hdrOffset;
                   48917:     data = pPage->aData;
                   48918:     if( decodeFlags(pPage, data[hdr]) ) return SQLITE_CORRUPT_BKPT;
                   48919:     assert( pBt->pageSize>=512 && pBt->pageSize<=65536 );
                   48920:     pPage->maskPage = (u16)(pBt->pageSize - 1);
                   48921:     pPage->nOverflow = 0;
                   48922:     usableSize = pBt->usableSize;
                   48923:     pPage->cellOffset = cellOffset = hdr + 12 - 4*pPage->leaf;
                   48924:     top = get2byteNotZero(&data[hdr+5]);
                   48925:     pPage->nCell = get2byte(&data[hdr+3]);
                   48926:     if( pPage->nCell>MX_CELL(pBt) ){
                   48927:       /* To many cells for a single page.  The page must be corrupt */
                   48928:       return SQLITE_CORRUPT_BKPT;
                   48929:     }
                   48930:     testcase( pPage->nCell==MX_CELL(pBt) );
                   48931: 
                   48932:     /* A malformed database page might cause us to read past the end
                   48933:     ** of page when parsing a cell.  
                   48934:     **
                   48935:     ** The following block of code checks early to see if a cell extends
                   48936:     ** past the end of a page boundary and causes SQLITE_CORRUPT to be 
                   48937:     ** returned if it does.
                   48938:     */
                   48939:     iCellFirst = cellOffset + 2*pPage->nCell;
                   48940:     iCellLast = usableSize - 4;
                   48941: #if defined(SQLITE_ENABLE_OVERSIZE_CELL_CHECK)
                   48942:     {
                   48943:       int i;            /* Index into the cell pointer array */
                   48944:       int sz;           /* Size of a cell */
                   48945: 
                   48946:       if( !pPage->leaf ) iCellLast--;
                   48947:       for(i=0; i<pPage->nCell; i++){
                   48948:         pc = get2byte(&data[cellOffset+i*2]);
                   48949:         testcase( pc==iCellFirst );
                   48950:         testcase( pc==iCellLast );
                   48951:         if( pc<iCellFirst || pc>iCellLast ){
                   48952:           return SQLITE_CORRUPT_BKPT;
                   48953:         }
                   48954:         sz = cellSizePtr(pPage, &data[pc]);
                   48955:         testcase( pc+sz==usableSize );
                   48956:         if( pc+sz>usableSize ){
                   48957:           return SQLITE_CORRUPT_BKPT;
                   48958:         }
                   48959:       }
                   48960:       if( !pPage->leaf ) iCellLast++;
                   48961:     }  
                   48962: #endif
                   48963: 
                   48964:     /* Compute the total free space on the page */
                   48965:     pc = get2byte(&data[hdr+1]);
                   48966:     nFree = data[hdr+7] + top;
                   48967:     while( pc>0 ){
                   48968:       u16 next, size;
                   48969:       if( pc<iCellFirst || pc>iCellLast ){
                   48970:         /* Start of free block is off the page */
                   48971:         return SQLITE_CORRUPT_BKPT; 
                   48972:       }
                   48973:       next = get2byte(&data[pc]);
                   48974:       size = get2byte(&data[pc+2]);
                   48975:       if( (next>0 && next<=pc+size+3) || pc+size>usableSize ){
                   48976:         /* Free blocks must be in ascending order. And the last byte of
                   48977:        ** the free-block must lie on the database page.  */
                   48978:         return SQLITE_CORRUPT_BKPT; 
                   48979:       }
                   48980:       nFree = nFree + size;
                   48981:       pc = next;
                   48982:     }
                   48983: 
                   48984:     /* At this point, nFree contains the sum of the offset to the start
                   48985:     ** of the cell-content area plus the number of free bytes within
                   48986:     ** the cell-content area. If this is greater than the usable-size
                   48987:     ** of the page, then the page must be corrupted. This check also
                   48988:     ** serves to verify that the offset to the start of the cell-content
                   48989:     ** area, according to the page header, lies within the page.
                   48990:     */
                   48991:     if( nFree>usableSize ){
                   48992:       return SQLITE_CORRUPT_BKPT; 
                   48993:     }
                   48994:     pPage->nFree = (u16)(nFree - iCellFirst);
                   48995:     pPage->isInit = 1;
                   48996:   }
                   48997:   return SQLITE_OK;
                   48998: }
                   48999: 
                   49000: /*
                   49001: ** Set up a raw page so that it looks like a database page holding
                   49002: ** no entries.
                   49003: */
                   49004: static void zeroPage(MemPage *pPage, int flags){
                   49005:   unsigned char *data = pPage->aData;
                   49006:   BtShared *pBt = pPage->pBt;
                   49007:   u8 hdr = pPage->hdrOffset;
                   49008:   u16 first;
                   49009: 
                   49010:   assert( sqlite3PagerPagenumber(pPage->pDbPage)==pPage->pgno );
                   49011:   assert( sqlite3PagerGetExtra(pPage->pDbPage) == (void*)pPage );
                   49012:   assert( sqlite3PagerGetData(pPage->pDbPage) == data );
                   49013:   assert( sqlite3PagerIswriteable(pPage->pDbPage) );
                   49014:   assert( sqlite3_mutex_held(pBt->mutex) );
                   49015:   if( pBt->secureDelete ){
                   49016:     memset(&data[hdr], 0, pBt->usableSize - hdr);
                   49017:   }
                   49018:   data[hdr] = (char)flags;
                   49019:   first = hdr + 8 + 4*((flags&PTF_LEAF)==0 ?1:0);
                   49020:   memset(&data[hdr+1], 0, 4);
                   49021:   data[hdr+7] = 0;
                   49022:   put2byte(&data[hdr+5], pBt->usableSize);
                   49023:   pPage->nFree = (u16)(pBt->usableSize - first);
                   49024:   decodeFlags(pPage, flags);
                   49025:   pPage->hdrOffset = hdr;
                   49026:   pPage->cellOffset = first;
                   49027:   pPage->nOverflow = 0;
                   49028:   assert( pBt->pageSize>=512 && pBt->pageSize<=65536 );
                   49029:   pPage->maskPage = (u16)(pBt->pageSize - 1);
                   49030:   pPage->nCell = 0;
                   49031:   pPage->isInit = 1;
                   49032: }
                   49033: 
                   49034: 
                   49035: /*
                   49036: ** Convert a DbPage obtained from the pager into a MemPage used by
                   49037: ** the btree layer.
                   49038: */
                   49039: static MemPage *btreePageFromDbPage(DbPage *pDbPage, Pgno pgno, BtShared *pBt){
                   49040:   MemPage *pPage = (MemPage*)sqlite3PagerGetExtra(pDbPage);
                   49041:   pPage->aData = sqlite3PagerGetData(pDbPage);
                   49042:   pPage->pDbPage = pDbPage;
                   49043:   pPage->pBt = pBt;
                   49044:   pPage->pgno = pgno;
                   49045:   pPage->hdrOffset = pPage->pgno==1 ? 100 : 0;
                   49046:   return pPage; 
                   49047: }
                   49048: 
                   49049: /*
                   49050: ** Get a page from the pager.  Initialize the MemPage.pBt and
                   49051: ** MemPage.aData elements if needed.
                   49052: **
                   49053: ** If the noContent flag is set, it means that we do not care about
                   49054: ** the content of the page at this time.  So do not go to the disk
                   49055: ** to fetch the content.  Just fill in the content with zeros for now.
                   49056: ** If in the future we call sqlite3PagerWrite() on this page, that
                   49057: ** means we have started to be concerned about content and the disk
                   49058: ** read should occur at that point.
                   49059: */
                   49060: static int btreeGetPage(
                   49061:   BtShared *pBt,       /* The btree */
                   49062:   Pgno pgno,           /* Number of the page to fetch */
                   49063:   MemPage **ppPage,    /* Return the page in this parameter */
                   49064:   int noContent        /* Do not load page content if true */
                   49065: ){
                   49066:   int rc;
                   49067:   DbPage *pDbPage;
                   49068: 
                   49069:   assert( sqlite3_mutex_held(pBt->mutex) );
                   49070:   rc = sqlite3PagerAcquire(pBt->pPager, pgno, (DbPage**)&pDbPage, noContent);
                   49071:   if( rc ) return rc;
                   49072:   *ppPage = btreePageFromDbPage(pDbPage, pgno, pBt);
                   49073:   return SQLITE_OK;
                   49074: }
                   49075: 
                   49076: /*
                   49077: ** Retrieve a page from the pager cache. If the requested page is not
                   49078: ** already in the pager cache return NULL. Initialize the MemPage.pBt and
                   49079: ** MemPage.aData elements if needed.
                   49080: */
                   49081: static MemPage *btreePageLookup(BtShared *pBt, Pgno pgno){
                   49082:   DbPage *pDbPage;
                   49083:   assert( sqlite3_mutex_held(pBt->mutex) );
                   49084:   pDbPage = sqlite3PagerLookup(pBt->pPager, pgno);
                   49085:   if( pDbPage ){
                   49086:     return btreePageFromDbPage(pDbPage, pgno, pBt);
                   49087:   }
                   49088:   return 0;
                   49089: }
                   49090: 
                   49091: /*
                   49092: ** Return the size of the database file in pages. If there is any kind of
                   49093: ** error, return ((unsigned int)-1).
                   49094: */
                   49095: static Pgno btreePagecount(BtShared *pBt){
                   49096:   return pBt->nPage;
                   49097: }
                   49098: SQLITE_PRIVATE u32 sqlite3BtreeLastPage(Btree *p){
                   49099:   assert( sqlite3BtreeHoldsMutex(p) );
                   49100:   assert( ((p->pBt->nPage)&0x8000000)==0 );
                   49101:   return (int)btreePagecount(p->pBt);
                   49102: }
                   49103: 
                   49104: /*
                   49105: ** Get a page from the pager and initialize it.  This routine is just a
                   49106: ** convenience wrapper around separate calls to btreeGetPage() and 
                   49107: ** btreeInitPage().
                   49108: **
                   49109: ** If an error occurs, then the value *ppPage is set to is undefined. It
                   49110: ** may remain unchanged, or it may be set to an invalid value.
                   49111: */
                   49112: static int getAndInitPage(
                   49113:   BtShared *pBt,          /* The database file */
                   49114:   Pgno pgno,           /* Number of the page to get */
                   49115:   MemPage **ppPage     /* Write the page pointer here */
                   49116: ){
                   49117:   int rc;
                   49118:   assert( sqlite3_mutex_held(pBt->mutex) );
                   49119: 
                   49120:   if( pgno>btreePagecount(pBt) ){
                   49121:     rc = SQLITE_CORRUPT_BKPT;
                   49122:   }else{
                   49123:     rc = btreeGetPage(pBt, pgno, ppPage, 0);
                   49124:     if( rc==SQLITE_OK ){
                   49125:       rc = btreeInitPage(*ppPage);
                   49126:       if( rc!=SQLITE_OK ){
                   49127:         releasePage(*ppPage);
                   49128:       }
                   49129:     }
                   49130:   }
                   49131: 
                   49132:   testcase( pgno==0 );
                   49133:   assert( pgno!=0 || rc==SQLITE_CORRUPT );
                   49134:   return rc;
                   49135: }
                   49136: 
                   49137: /*
                   49138: ** Release a MemPage.  This should be called once for each prior
                   49139: ** call to btreeGetPage.
                   49140: */
                   49141: static void releasePage(MemPage *pPage){
                   49142:   if( pPage ){
                   49143:     assert( pPage->aData );
                   49144:     assert( pPage->pBt );
                   49145:     assert( sqlite3PagerGetExtra(pPage->pDbPage) == (void*)pPage );
                   49146:     assert( sqlite3PagerGetData(pPage->pDbPage)==pPage->aData );
                   49147:     assert( sqlite3_mutex_held(pPage->pBt->mutex) );
                   49148:     sqlite3PagerUnref(pPage->pDbPage);
                   49149:   }
                   49150: }
                   49151: 
                   49152: /*
                   49153: ** During a rollback, when the pager reloads information into the cache
                   49154: ** so that the cache is restored to its original state at the start of
                   49155: ** the transaction, for each page restored this routine is called.
                   49156: **
                   49157: ** This routine needs to reset the extra data section at the end of the
                   49158: ** page to agree with the restored data.
                   49159: */
                   49160: static void pageReinit(DbPage *pData){
                   49161:   MemPage *pPage;
                   49162:   pPage = (MemPage *)sqlite3PagerGetExtra(pData);
                   49163:   assert( sqlite3PagerPageRefcount(pData)>0 );
                   49164:   if( pPage->isInit ){
                   49165:     assert( sqlite3_mutex_held(pPage->pBt->mutex) );
                   49166:     pPage->isInit = 0;
                   49167:     if( sqlite3PagerPageRefcount(pData)>1 ){
                   49168:       /* pPage might not be a btree page;  it might be an overflow page
                   49169:       ** or ptrmap page or a free page.  In those cases, the following
                   49170:       ** call to btreeInitPage() will likely return SQLITE_CORRUPT.
                   49171:       ** But no harm is done by this.  And it is very important that
                   49172:       ** btreeInitPage() be called on every btree page so we make
                   49173:       ** the call for every page that comes in for re-initing. */
                   49174:       btreeInitPage(pPage);
                   49175:     }
                   49176:   }
                   49177: }
                   49178: 
                   49179: /*
                   49180: ** Invoke the busy handler for a btree.
                   49181: */
                   49182: static int btreeInvokeBusyHandler(void *pArg){
                   49183:   BtShared *pBt = (BtShared*)pArg;
                   49184:   assert( pBt->db );
                   49185:   assert( sqlite3_mutex_held(pBt->db->mutex) );
                   49186:   return sqlite3InvokeBusyHandler(&pBt->db->busyHandler);
                   49187: }
                   49188: 
                   49189: /*
                   49190: ** Open a database file.
                   49191: ** 
                   49192: ** zFilename is the name of the database file.  If zFilename is NULL
                   49193: ** then an ephemeral database is created.  The ephemeral database might
                   49194: ** be exclusively in memory, or it might use a disk-based memory cache.
                   49195: ** Either way, the ephemeral database will be automatically deleted 
                   49196: ** when sqlite3BtreeClose() is called.
                   49197: **
                   49198: ** If zFilename is ":memory:" then an in-memory database is created
                   49199: ** that is automatically destroyed when it is closed.
                   49200: **
                   49201: ** The "flags" parameter is a bitmask that might contain bits
                   49202: ** BTREE_OMIT_JOURNAL and/or BTREE_NO_READLOCK.  The BTREE_NO_READLOCK
                   49203: ** bit is also set if the SQLITE_NoReadlock flags is set in db->flags.
                   49204: ** These flags are passed through into sqlite3PagerOpen() and must
                   49205: ** be the same values as PAGER_OMIT_JOURNAL and PAGER_NO_READLOCK.
                   49206: **
                   49207: ** If the database is already opened in the same database connection
                   49208: ** and we are in shared cache mode, then the open will fail with an
                   49209: ** SQLITE_CONSTRAINT error.  We cannot allow two or more BtShared
                   49210: ** objects in the same database connection since doing so will lead
                   49211: ** to problems with locking.
                   49212: */
                   49213: SQLITE_PRIVATE int sqlite3BtreeOpen(
                   49214:   sqlite3_vfs *pVfs,      /* VFS to use for this b-tree */
                   49215:   const char *zFilename,  /* Name of the file containing the BTree database */
                   49216:   sqlite3 *db,            /* Associated database handle */
                   49217:   Btree **ppBtree,        /* Pointer to new Btree object written here */
                   49218:   int flags,              /* Options */
                   49219:   int vfsFlags            /* Flags passed through to sqlite3_vfs.xOpen() */
                   49220: ){
                   49221:   BtShared *pBt = 0;             /* Shared part of btree structure */
                   49222:   Btree *p;                      /* Handle to return */
                   49223:   sqlite3_mutex *mutexOpen = 0;  /* Prevents a race condition. Ticket #3537 */
                   49224:   int rc = SQLITE_OK;            /* Result code from this function */
                   49225:   u8 nReserve;                   /* Byte of unused space on each page */
                   49226:   unsigned char zDbHeader[100];  /* Database header content */
                   49227: 
                   49228:   /* True if opening an ephemeral, temporary database */
                   49229:   const int isTempDb = zFilename==0 || zFilename[0]==0;
                   49230: 
                   49231:   /* Set the variable isMemdb to true for an in-memory database, or 
                   49232:   ** false for a file-based database.
                   49233:   */
                   49234: #ifdef SQLITE_OMIT_MEMORYDB
                   49235:   const int isMemdb = 0;
                   49236: #else
                   49237:   const int isMemdb = (zFilename && strcmp(zFilename, ":memory:")==0)
                   49238:                        || (isTempDb && sqlite3TempInMemory(db));
                   49239: #endif
                   49240: 
                   49241:   assert( db!=0 );
                   49242:   assert( pVfs!=0 );
                   49243:   assert( sqlite3_mutex_held(db->mutex) );
                   49244:   assert( (flags&0xff)==flags );   /* flags fit in 8 bits */
                   49245: 
                   49246:   /* Only a BTREE_SINGLE database can be BTREE_UNORDERED */
                   49247:   assert( (flags & BTREE_UNORDERED)==0 || (flags & BTREE_SINGLE)!=0 );
                   49248: 
                   49249:   /* A BTREE_SINGLE database is always a temporary and/or ephemeral */
                   49250:   assert( (flags & BTREE_SINGLE)==0 || isTempDb );
                   49251: 
                   49252:   if( db->flags & SQLITE_NoReadlock ){
                   49253:     flags |= BTREE_NO_READLOCK;
                   49254:   }
                   49255:   if( isMemdb ){
                   49256:     flags |= BTREE_MEMORY;
                   49257:   }
                   49258:   if( (vfsFlags & SQLITE_OPEN_MAIN_DB)!=0 && (isMemdb || isTempDb) ){
                   49259:     vfsFlags = (vfsFlags & ~SQLITE_OPEN_MAIN_DB) | SQLITE_OPEN_TEMP_DB;
                   49260:   }
                   49261:   p = sqlite3MallocZero(sizeof(Btree));
                   49262:   if( !p ){
                   49263:     return SQLITE_NOMEM;
                   49264:   }
                   49265:   p->inTrans = TRANS_NONE;
                   49266:   p->db = db;
                   49267: #ifndef SQLITE_OMIT_SHARED_CACHE
                   49268:   p->lock.pBtree = p;
                   49269:   p->lock.iTable = 1;
                   49270: #endif
                   49271: 
                   49272: #if !defined(SQLITE_OMIT_SHARED_CACHE) && !defined(SQLITE_OMIT_DISKIO)
                   49273:   /*
                   49274:   ** If this Btree is a candidate for shared cache, try to find an
                   49275:   ** existing BtShared object that we can share with
                   49276:   */
                   49277:   if( isMemdb==0 && isTempDb==0 ){
                   49278:     if( vfsFlags & SQLITE_OPEN_SHAREDCACHE ){
                   49279:       int nFullPathname = pVfs->mxPathname+1;
                   49280:       char *zFullPathname = sqlite3Malloc(nFullPathname);
                   49281:       sqlite3_mutex *mutexShared;
                   49282:       p->sharable = 1;
                   49283:       if( !zFullPathname ){
                   49284:         sqlite3_free(p);
                   49285:         return SQLITE_NOMEM;
                   49286:       }
                   49287:       sqlite3OsFullPathname(pVfs, zFilename, nFullPathname, zFullPathname);
                   49288:       mutexOpen = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_OPEN);
                   49289:       sqlite3_mutex_enter(mutexOpen);
                   49290:       mutexShared = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER);
                   49291:       sqlite3_mutex_enter(mutexShared);
                   49292:       for(pBt=GLOBAL(BtShared*,sqlite3SharedCacheList); pBt; pBt=pBt->pNext){
                   49293:         assert( pBt->nRef>0 );
                   49294:         if( 0==strcmp(zFullPathname, sqlite3PagerFilename(pBt->pPager))
                   49295:                  && sqlite3PagerVfs(pBt->pPager)==pVfs ){
                   49296:           int iDb;
                   49297:           for(iDb=db->nDb-1; iDb>=0; iDb--){
                   49298:             Btree *pExisting = db->aDb[iDb].pBt;
                   49299:             if( pExisting && pExisting->pBt==pBt ){
                   49300:               sqlite3_mutex_leave(mutexShared);
                   49301:               sqlite3_mutex_leave(mutexOpen);
                   49302:               sqlite3_free(zFullPathname);
                   49303:               sqlite3_free(p);
                   49304:               return SQLITE_CONSTRAINT;
                   49305:             }
                   49306:           }
                   49307:           p->pBt = pBt;
                   49308:           pBt->nRef++;
                   49309:           break;
                   49310:         }
                   49311:       }
                   49312:       sqlite3_mutex_leave(mutexShared);
                   49313:       sqlite3_free(zFullPathname);
                   49314:     }
                   49315: #ifdef SQLITE_DEBUG
                   49316:     else{
                   49317:       /* In debug mode, we mark all persistent databases as sharable
                   49318:       ** even when they are not.  This exercises the locking code and
                   49319:       ** gives more opportunity for asserts(sqlite3_mutex_held())
                   49320:       ** statements to find locking problems.
                   49321:       */
                   49322:       p->sharable = 1;
                   49323:     }
                   49324: #endif
                   49325:   }
                   49326: #endif
                   49327:   if( pBt==0 ){
                   49328:     /*
                   49329:     ** The following asserts make sure that structures used by the btree are
                   49330:     ** the right size.  This is to guard against size changes that result
                   49331:     ** when compiling on a different architecture.
                   49332:     */
                   49333:     assert( sizeof(i64)==8 || sizeof(i64)==4 );
                   49334:     assert( sizeof(u64)==8 || sizeof(u64)==4 );
                   49335:     assert( sizeof(u32)==4 );
                   49336:     assert( sizeof(u16)==2 );
                   49337:     assert( sizeof(Pgno)==4 );
                   49338:   
                   49339:     pBt = sqlite3MallocZero( sizeof(*pBt) );
                   49340:     if( pBt==0 ){
                   49341:       rc = SQLITE_NOMEM;
                   49342:       goto btree_open_out;
                   49343:     }
                   49344:     rc = sqlite3PagerOpen(pVfs, &pBt->pPager, zFilename,
                   49345:                           EXTRA_SIZE, flags, vfsFlags, pageReinit);
                   49346:     if( rc==SQLITE_OK ){
                   49347:       rc = sqlite3PagerReadFileheader(pBt->pPager,sizeof(zDbHeader),zDbHeader);
                   49348:     }
                   49349:     if( rc!=SQLITE_OK ){
                   49350:       goto btree_open_out;
                   49351:     }
                   49352:     pBt->openFlags = (u8)flags;
                   49353:     pBt->db = db;
                   49354:     sqlite3PagerSetBusyhandler(pBt->pPager, btreeInvokeBusyHandler, pBt);
                   49355:     p->pBt = pBt;
                   49356:   
                   49357:     pBt->pCursor = 0;
                   49358:     pBt->pPage1 = 0;
                   49359:     pBt->readOnly = sqlite3PagerIsreadonly(pBt->pPager);
                   49360: #ifdef SQLITE_SECURE_DELETE
                   49361:     pBt->secureDelete = 1;
                   49362: #endif
                   49363:     pBt->pageSize = (zDbHeader[16]<<8) | (zDbHeader[17]<<16);
                   49364:     if( pBt->pageSize<512 || pBt->pageSize>SQLITE_MAX_PAGE_SIZE
                   49365:          || ((pBt->pageSize-1)&pBt->pageSize)!=0 ){
                   49366:       pBt->pageSize = 0;
                   49367: #ifndef SQLITE_OMIT_AUTOVACUUM
                   49368:       /* If the magic name ":memory:" will create an in-memory database, then
                   49369:       ** leave the autoVacuum mode at 0 (do not auto-vacuum), even if
                   49370:       ** SQLITE_DEFAULT_AUTOVACUUM is true. On the other hand, if
                   49371:       ** SQLITE_OMIT_MEMORYDB has been defined, then ":memory:" is just a
                   49372:       ** regular file-name. In this case the auto-vacuum applies as per normal.
                   49373:       */
                   49374:       if( zFilename && !isMemdb ){
                   49375:         pBt->autoVacuum = (SQLITE_DEFAULT_AUTOVACUUM ? 1 : 0);
                   49376:         pBt->incrVacuum = (SQLITE_DEFAULT_AUTOVACUUM==2 ? 1 : 0);
                   49377:       }
                   49378: #endif
                   49379:       nReserve = 0;
                   49380:     }else{
                   49381:       nReserve = zDbHeader[20];
                   49382:       pBt->pageSizeFixed = 1;
                   49383: #ifndef SQLITE_OMIT_AUTOVACUUM
                   49384:       pBt->autoVacuum = (get4byte(&zDbHeader[36 + 4*4])?1:0);
                   49385:       pBt->incrVacuum = (get4byte(&zDbHeader[36 + 7*4])?1:0);
                   49386: #endif
                   49387:     }
                   49388:     rc = sqlite3PagerSetPagesize(pBt->pPager, &pBt->pageSize, nReserve);
                   49389:     if( rc ) goto btree_open_out;
                   49390:     pBt->usableSize = pBt->pageSize - nReserve;
                   49391:     assert( (pBt->pageSize & 7)==0 );  /* 8-byte alignment of pageSize */
                   49392:    
                   49393: #if !defined(SQLITE_OMIT_SHARED_CACHE) && !defined(SQLITE_OMIT_DISKIO)
                   49394:     /* Add the new BtShared object to the linked list sharable BtShareds.
                   49395:     */
                   49396:     if( p->sharable ){
                   49397:       sqlite3_mutex *mutexShared;
                   49398:       pBt->nRef = 1;
                   49399:       mutexShared = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER);
                   49400:       if( SQLITE_THREADSAFE && sqlite3GlobalConfig.bCoreMutex ){
                   49401:         pBt->mutex = sqlite3MutexAlloc(SQLITE_MUTEX_FAST);
                   49402:         if( pBt->mutex==0 ){
                   49403:           rc = SQLITE_NOMEM;
                   49404:           db->mallocFailed = 0;
                   49405:           goto btree_open_out;
                   49406:         }
                   49407:       }
                   49408:       sqlite3_mutex_enter(mutexShared);
                   49409:       pBt->pNext = GLOBAL(BtShared*,sqlite3SharedCacheList);
                   49410:       GLOBAL(BtShared*,sqlite3SharedCacheList) = pBt;
                   49411:       sqlite3_mutex_leave(mutexShared);
                   49412:     }
                   49413: #endif
                   49414:   }
                   49415: 
                   49416: #if !defined(SQLITE_OMIT_SHARED_CACHE) && !defined(SQLITE_OMIT_DISKIO)
                   49417:   /* If the new Btree uses a sharable pBtShared, then link the new
                   49418:   ** Btree into the list of all sharable Btrees for the same connection.
                   49419:   ** The list is kept in ascending order by pBt address.
                   49420:   */
                   49421:   if( p->sharable ){
                   49422:     int i;
                   49423:     Btree *pSib;
                   49424:     for(i=0; i<db->nDb; i++){
                   49425:       if( (pSib = db->aDb[i].pBt)!=0 && pSib->sharable ){
                   49426:         while( pSib->pPrev ){ pSib = pSib->pPrev; }
                   49427:         if( p->pBt<pSib->pBt ){
                   49428:           p->pNext = pSib;
                   49429:           p->pPrev = 0;
                   49430:           pSib->pPrev = p;
                   49431:         }else{
                   49432:           while( pSib->pNext && pSib->pNext->pBt<p->pBt ){
                   49433:             pSib = pSib->pNext;
                   49434:           }
                   49435:           p->pNext = pSib->pNext;
                   49436:           p->pPrev = pSib;
                   49437:           if( p->pNext ){
                   49438:             p->pNext->pPrev = p;
                   49439:           }
                   49440:           pSib->pNext = p;
                   49441:         }
                   49442:         break;
                   49443:       }
                   49444:     }
                   49445:   }
                   49446: #endif
                   49447:   *ppBtree = p;
                   49448: 
                   49449: btree_open_out:
                   49450:   if( rc!=SQLITE_OK ){
                   49451:     if( pBt && pBt->pPager ){
                   49452:       sqlite3PagerClose(pBt->pPager);
                   49453:     }
                   49454:     sqlite3_free(pBt);
                   49455:     sqlite3_free(p);
                   49456:     *ppBtree = 0;
                   49457:   }else{
                   49458:     /* If the B-Tree was successfully opened, set the pager-cache size to the
                   49459:     ** default value. Except, when opening on an existing shared pager-cache,
                   49460:     ** do not change the pager-cache size.
                   49461:     */
                   49462:     if( sqlite3BtreeSchema(p, 0, 0)==0 ){
                   49463:       sqlite3PagerSetCachesize(p->pBt->pPager, SQLITE_DEFAULT_CACHE_SIZE);
                   49464:     }
                   49465:   }
                   49466:   if( mutexOpen ){
                   49467:     assert( sqlite3_mutex_held(mutexOpen) );
                   49468:     sqlite3_mutex_leave(mutexOpen);
                   49469:   }
                   49470:   return rc;
                   49471: }
                   49472: 
                   49473: /*
                   49474: ** Decrement the BtShared.nRef counter.  When it reaches zero,
                   49475: ** remove the BtShared structure from the sharing list.  Return
                   49476: ** true if the BtShared.nRef counter reaches zero and return
                   49477: ** false if it is still positive.
                   49478: */
                   49479: static int removeFromSharingList(BtShared *pBt){
                   49480: #ifndef SQLITE_OMIT_SHARED_CACHE
                   49481:   sqlite3_mutex *pMaster;
                   49482:   BtShared *pList;
                   49483:   int removed = 0;
                   49484: 
                   49485:   assert( sqlite3_mutex_notheld(pBt->mutex) );
                   49486:   pMaster = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER);
                   49487:   sqlite3_mutex_enter(pMaster);
                   49488:   pBt->nRef--;
                   49489:   if( pBt->nRef<=0 ){
                   49490:     if( GLOBAL(BtShared*,sqlite3SharedCacheList)==pBt ){
                   49491:       GLOBAL(BtShared*,sqlite3SharedCacheList) = pBt->pNext;
                   49492:     }else{
                   49493:       pList = GLOBAL(BtShared*,sqlite3SharedCacheList);
                   49494:       while( ALWAYS(pList) && pList->pNext!=pBt ){
                   49495:         pList=pList->pNext;
                   49496:       }
                   49497:       if( ALWAYS(pList) ){
                   49498:         pList->pNext = pBt->pNext;
                   49499:       }
                   49500:     }
                   49501:     if( SQLITE_THREADSAFE ){
                   49502:       sqlite3_mutex_free(pBt->mutex);
                   49503:     }
                   49504:     removed = 1;
                   49505:   }
                   49506:   sqlite3_mutex_leave(pMaster);
                   49507:   return removed;
                   49508: #else
                   49509:   return 1;
                   49510: #endif
                   49511: }
                   49512: 
                   49513: /*
                   49514: ** Make sure pBt->pTmpSpace points to an allocation of 
                   49515: ** MX_CELL_SIZE(pBt) bytes.
                   49516: */
                   49517: static void allocateTempSpace(BtShared *pBt){
                   49518:   if( !pBt->pTmpSpace ){
                   49519:     pBt->pTmpSpace = sqlite3PageMalloc( pBt->pageSize );
                   49520:   }
                   49521: }
                   49522: 
                   49523: /*
                   49524: ** Free the pBt->pTmpSpace allocation
                   49525: */
                   49526: static void freeTempSpace(BtShared *pBt){
                   49527:   sqlite3PageFree( pBt->pTmpSpace);
                   49528:   pBt->pTmpSpace = 0;
                   49529: }
                   49530: 
                   49531: /*
                   49532: ** Close an open database and invalidate all cursors.
                   49533: */
                   49534: SQLITE_PRIVATE int sqlite3BtreeClose(Btree *p){
                   49535:   BtShared *pBt = p->pBt;
                   49536:   BtCursor *pCur;
                   49537: 
                   49538:   /* Close all cursors opened via this handle.  */
                   49539:   assert( sqlite3_mutex_held(p->db->mutex) );
                   49540:   sqlite3BtreeEnter(p);
                   49541:   pCur = pBt->pCursor;
                   49542:   while( pCur ){
                   49543:     BtCursor *pTmp = pCur;
                   49544:     pCur = pCur->pNext;
                   49545:     if( pTmp->pBtree==p ){
                   49546:       sqlite3BtreeCloseCursor(pTmp);
                   49547:     }
                   49548:   }
                   49549: 
                   49550:   /* Rollback any active transaction and free the handle structure.
                   49551:   ** The call to sqlite3BtreeRollback() drops any table-locks held by
                   49552:   ** this handle.
                   49553:   */
                   49554:   sqlite3BtreeRollback(p);
                   49555:   sqlite3BtreeLeave(p);
                   49556: 
                   49557:   /* If there are still other outstanding references to the shared-btree
                   49558:   ** structure, return now. The remainder of this procedure cleans 
                   49559:   ** up the shared-btree.
                   49560:   */
                   49561:   assert( p->wantToLock==0 && p->locked==0 );
                   49562:   if( !p->sharable || removeFromSharingList(pBt) ){
                   49563:     /* The pBt is no longer on the sharing list, so we can access
                   49564:     ** it without having to hold the mutex.
                   49565:     **
                   49566:     ** Clean out and delete the BtShared object.
                   49567:     */
                   49568:     assert( !pBt->pCursor );
                   49569:     sqlite3PagerClose(pBt->pPager);
                   49570:     if( pBt->xFreeSchema && pBt->pSchema ){
                   49571:       pBt->xFreeSchema(pBt->pSchema);
                   49572:     }
                   49573:     sqlite3DbFree(0, pBt->pSchema);
                   49574:     freeTempSpace(pBt);
                   49575:     sqlite3_free(pBt);
                   49576:   }
                   49577: 
                   49578: #ifndef SQLITE_OMIT_SHARED_CACHE
                   49579:   assert( p->wantToLock==0 );
                   49580:   assert( p->locked==0 );
                   49581:   if( p->pPrev ) p->pPrev->pNext = p->pNext;
                   49582:   if( p->pNext ) p->pNext->pPrev = p->pPrev;
                   49583: #endif
                   49584: 
                   49585:   sqlite3_free(p);
                   49586:   return SQLITE_OK;
                   49587: }
                   49588: 
                   49589: /*
                   49590: ** Change the limit on the number of pages allowed in the cache.
                   49591: **
                   49592: ** The maximum number of cache pages is set to the absolute
                   49593: ** value of mxPage.  If mxPage is negative, the pager will
                   49594: ** operate asynchronously - it will not stop to do fsync()s
                   49595: ** to insure data is written to the disk surface before
                   49596: ** continuing.  Transactions still work if synchronous is off,
                   49597: ** and the database cannot be corrupted if this program
                   49598: ** crashes.  But if the operating system crashes or there is
                   49599: ** an abrupt power failure when synchronous is off, the database
                   49600: ** could be left in an inconsistent and unrecoverable state.
                   49601: ** Synchronous is on by default so database corruption is not
                   49602: ** normally a worry.
                   49603: */
                   49604: SQLITE_PRIVATE int sqlite3BtreeSetCacheSize(Btree *p, int mxPage){
                   49605:   BtShared *pBt = p->pBt;
                   49606:   assert( sqlite3_mutex_held(p->db->mutex) );
                   49607:   sqlite3BtreeEnter(p);
                   49608:   sqlite3PagerSetCachesize(pBt->pPager, mxPage);
                   49609:   sqlite3BtreeLeave(p);
                   49610:   return SQLITE_OK;
                   49611: }
                   49612: 
                   49613: /*
                   49614: ** Change the way data is synced to disk in order to increase or decrease
                   49615: ** how well the database resists damage due to OS crashes and power
                   49616: ** failures.  Level 1 is the same as asynchronous (no syncs() occur and
                   49617: ** there is a high probability of damage)  Level 2 is the default.  There
                   49618: ** is a very low but non-zero probability of damage.  Level 3 reduces the
                   49619: ** probability of damage to near zero but with a write performance reduction.
                   49620: */
                   49621: #ifndef SQLITE_OMIT_PAGER_PRAGMAS
                   49622: SQLITE_PRIVATE int sqlite3BtreeSetSafetyLevel(
                   49623:   Btree *p,              /* The btree to set the safety level on */
                   49624:   int level,             /* PRAGMA synchronous.  1=OFF, 2=NORMAL, 3=FULL */
                   49625:   int fullSync,          /* PRAGMA fullfsync. */
                   49626:   int ckptFullSync       /* PRAGMA checkpoint_fullfync */
                   49627: ){
                   49628:   BtShared *pBt = p->pBt;
                   49629:   assert( sqlite3_mutex_held(p->db->mutex) );
                   49630:   assert( level>=1 && level<=3 );
                   49631:   sqlite3BtreeEnter(p);
                   49632:   sqlite3PagerSetSafetyLevel(pBt->pPager, level, fullSync, ckptFullSync);
                   49633:   sqlite3BtreeLeave(p);
                   49634:   return SQLITE_OK;
                   49635: }
                   49636: #endif
                   49637: 
                   49638: /*
                   49639: ** Return TRUE if the given btree is set to safety level 1.  In other
                   49640: ** words, return TRUE if no sync() occurs on the disk files.
                   49641: */
                   49642: SQLITE_PRIVATE int sqlite3BtreeSyncDisabled(Btree *p){
                   49643:   BtShared *pBt = p->pBt;
                   49644:   int rc;
                   49645:   assert( sqlite3_mutex_held(p->db->mutex) );  
                   49646:   sqlite3BtreeEnter(p);
                   49647:   assert( pBt && pBt->pPager );
                   49648:   rc = sqlite3PagerNosync(pBt->pPager);
                   49649:   sqlite3BtreeLeave(p);
                   49650:   return rc;
                   49651: }
                   49652: 
                   49653: /*
                   49654: ** Change the default pages size and the number of reserved bytes per page.
                   49655: ** Or, if the page size has already been fixed, return SQLITE_READONLY 
                   49656: ** without changing anything.
                   49657: **
                   49658: ** The page size must be a power of 2 between 512 and 65536.  If the page
                   49659: ** size supplied does not meet this constraint then the page size is not
                   49660: ** changed.
                   49661: **
                   49662: ** Page sizes are constrained to be a power of two so that the region
                   49663: ** of the database file used for locking (beginning at PENDING_BYTE,
                   49664: ** the first byte past the 1GB boundary, 0x40000000) needs to occur
                   49665: ** at the beginning of a page.
                   49666: **
                   49667: ** If parameter nReserve is less than zero, then the number of reserved
                   49668: ** bytes per page is left unchanged.
                   49669: **
                   49670: ** If the iFix!=0 then the pageSizeFixed flag is set so that the page size
                   49671: ** and autovacuum mode can no longer be changed.
                   49672: */
                   49673: SQLITE_PRIVATE int sqlite3BtreeSetPageSize(Btree *p, int pageSize, int nReserve, int iFix){
                   49674:   int rc = SQLITE_OK;
                   49675:   BtShared *pBt = p->pBt;
                   49676:   assert( nReserve>=-1 && nReserve<=255 );
                   49677:   sqlite3BtreeEnter(p);
                   49678:   if( pBt->pageSizeFixed ){
                   49679:     sqlite3BtreeLeave(p);
                   49680:     return SQLITE_READONLY;
                   49681:   }
                   49682:   if( nReserve<0 ){
                   49683:     nReserve = pBt->pageSize - pBt->usableSize;
                   49684:   }
                   49685:   assert( nReserve>=0 && nReserve<=255 );
                   49686:   if( pageSize>=512 && pageSize<=SQLITE_MAX_PAGE_SIZE &&
                   49687:         ((pageSize-1)&pageSize)==0 ){
                   49688:     assert( (pageSize & 7)==0 );
                   49689:     assert( !pBt->pPage1 && !pBt->pCursor );
                   49690:     pBt->pageSize = (u32)pageSize;
                   49691:     freeTempSpace(pBt);
                   49692:   }
                   49693:   rc = sqlite3PagerSetPagesize(pBt->pPager, &pBt->pageSize, nReserve);
                   49694:   pBt->usableSize = pBt->pageSize - (u16)nReserve;
                   49695:   if( iFix ) pBt->pageSizeFixed = 1;
                   49696:   sqlite3BtreeLeave(p);
                   49697:   return rc;
                   49698: }
                   49699: 
                   49700: /*
                   49701: ** Return the currently defined page size
                   49702: */
                   49703: SQLITE_PRIVATE int sqlite3BtreeGetPageSize(Btree *p){
                   49704:   return p->pBt->pageSize;
                   49705: }
                   49706: 
                   49707: #if !defined(SQLITE_OMIT_PAGER_PRAGMAS) || !defined(SQLITE_OMIT_VACUUM)
                   49708: /*
                   49709: ** Return the number of bytes of space at the end of every page that
                   49710: ** are intentually left unused.  This is the "reserved" space that is
                   49711: ** sometimes used by extensions.
                   49712: */
                   49713: SQLITE_PRIVATE int sqlite3BtreeGetReserve(Btree *p){
                   49714:   int n;
                   49715:   sqlite3BtreeEnter(p);
                   49716:   n = p->pBt->pageSize - p->pBt->usableSize;
                   49717:   sqlite3BtreeLeave(p);
                   49718:   return n;
                   49719: }
                   49720: 
                   49721: /*
                   49722: ** Set the maximum page count for a database if mxPage is positive.
                   49723: ** No changes are made if mxPage is 0 or negative.
                   49724: ** Regardless of the value of mxPage, return the maximum page count.
                   49725: */
                   49726: SQLITE_PRIVATE int sqlite3BtreeMaxPageCount(Btree *p, int mxPage){
                   49727:   int n;
                   49728:   sqlite3BtreeEnter(p);
                   49729:   n = sqlite3PagerMaxPageCount(p->pBt->pPager, mxPage);
                   49730:   sqlite3BtreeLeave(p);
                   49731:   return n;
                   49732: }
                   49733: 
                   49734: /*
                   49735: ** Set the secureDelete flag if newFlag is 0 or 1.  If newFlag is -1,
                   49736: ** then make no changes.  Always return the value of the secureDelete
                   49737: ** setting after the change.
                   49738: */
                   49739: SQLITE_PRIVATE int sqlite3BtreeSecureDelete(Btree *p, int newFlag){
                   49740:   int b;
                   49741:   if( p==0 ) return 0;
                   49742:   sqlite3BtreeEnter(p);
                   49743:   if( newFlag>=0 ){
                   49744:     p->pBt->secureDelete = (newFlag!=0) ? 1 : 0;
                   49745:   } 
                   49746:   b = p->pBt->secureDelete;
                   49747:   sqlite3BtreeLeave(p);
                   49748:   return b;
                   49749: }
                   49750: #endif /* !defined(SQLITE_OMIT_PAGER_PRAGMAS) || !defined(SQLITE_OMIT_VACUUM) */
                   49751: 
                   49752: /*
                   49753: ** Change the 'auto-vacuum' property of the database. If the 'autoVacuum'
                   49754: ** parameter is non-zero, then auto-vacuum mode is enabled. If zero, it
                   49755: ** is disabled. The default value for the auto-vacuum property is 
                   49756: ** determined by the SQLITE_DEFAULT_AUTOVACUUM macro.
                   49757: */
                   49758: SQLITE_PRIVATE int sqlite3BtreeSetAutoVacuum(Btree *p, int autoVacuum){
                   49759: #ifdef SQLITE_OMIT_AUTOVACUUM
                   49760:   return SQLITE_READONLY;
                   49761: #else
                   49762:   BtShared *pBt = p->pBt;
                   49763:   int rc = SQLITE_OK;
                   49764:   u8 av = (u8)autoVacuum;
                   49765: 
                   49766:   sqlite3BtreeEnter(p);
                   49767:   if( pBt->pageSizeFixed && (av ?1:0)!=pBt->autoVacuum ){
                   49768:     rc = SQLITE_READONLY;
                   49769:   }else{
                   49770:     pBt->autoVacuum = av ?1:0;
                   49771:     pBt->incrVacuum = av==2 ?1:0;
                   49772:   }
                   49773:   sqlite3BtreeLeave(p);
                   49774:   return rc;
                   49775: #endif
                   49776: }
                   49777: 
                   49778: /*
                   49779: ** Return the value of the 'auto-vacuum' property. If auto-vacuum is 
                   49780: ** enabled 1 is returned. Otherwise 0.
                   49781: */
                   49782: SQLITE_PRIVATE int sqlite3BtreeGetAutoVacuum(Btree *p){
                   49783: #ifdef SQLITE_OMIT_AUTOVACUUM
                   49784:   return BTREE_AUTOVACUUM_NONE;
                   49785: #else
                   49786:   int rc;
                   49787:   sqlite3BtreeEnter(p);
                   49788:   rc = (
                   49789:     (!p->pBt->autoVacuum)?BTREE_AUTOVACUUM_NONE:
                   49790:     (!p->pBt->incrVacuum)?BTREE_AUTOVACUUM_FULL:
                   49791:     BTREE_AUTOVACUUM_INCR
                   49792:   );
                   49793:   sqlite3BtreeLeave(p);
                   49794:   return rc;
                   49795: #endif
                   49796: }
                   49797: 
                   49798: 
                   49799: /*
                   49800: ** Get a reference to pPage1 of the database file.  This will
                   49801: ** also acquire a readlock on that file.
                   49802: **
                   49803: ** SQLITE_OK is returned on success.  If the file is not a
                   49804: ** well-formed database file, then SQLITE_CORRUPT is returned.
                   49805: ** SQLITE_BUSY is returned if the database is locked.  SQLITE_NOMEM
                   49806: ** is returned if we run out of memory. 
                   49807: */
                   49808: static int lockBtree(BtShared *pBt){
                   49809:   int rc;              /* Result code from subfunctions */
                   49810:   MemPage *pPage1;     /* Page 1 of the database file */
                   49811:   int nPage;           /* Number of pages in the database */
                   49812:   int nPageFile = 0;   /* Number of pages in the database file */
                   49813:   int nPageHeader;     /* Number of pages in the database according to hdr */
                   49814: 
                   49815:   assert( sqlite3_mutex_held(pBt->mutex) );
                   49816:   assert( pBt->pPage1==0 );
                   49817:   rc = sqlite3PagerSharedLock(pBt->pPager);
                   49818:   if( rc!=SQLITE_OK ) return rc;
                   49819:   rc = btreeGetPage(pBt, 1, &pPage1, 0);
                   49820:   if( rc!=SQLITE_OK ) return rc;
                   49821: 
                   49822:   /* Do some checking to help insure the file we opened really is
                   49823:   ** a valid database file. 
                   49824:   */
                   49825:   nPage = nPageHeader = get4byte(28+(u8*)pPage1->aData);
                   49826:   sqlite3PagerPagecount(pBt->pPager, &nPageFile);
                   49827:   if( nPage==0 || memcmp(24+(u8*)pPage1->aData, 92+(u8*)pPage1->aData,4)!=0 ){
                   49828:     nPage = nPageFile;
                   49829:   }
                   49830:   if( nPage>0 ){
                   49831:     u32 pageSize;
                   49832:     u32 usableSize;
                   49833:     u8 *page1 = pPage1->aData;
                   49834:     rc = SQLITE_NOTADB;
                   49835:     if( memcmp(page1, zMagicHeader, 16)!=0 ){
                   49836:       goto page1_init_failed;
                   49837:     }
                   49838: 
                   49839: #ifdef SQLITE_OMIT_WAL
                   49840:     if( page1[18]>1 ){
                   49841:       pBt->readOnly = 1;
                   49842:     }
                   49843:     if( page1[19]>1 ){
                   49844:       goto page1_init_failed;
                   49845:     }
                   49846: #else
                   49847:     if( page1[18]>2 ){
                   49848:       pBt->readOnly = 1;
                   49849:     }
                   49850:     if( page1[19]>2 ){
                   49851:       goto page1_init_failed;
                   49852:     }
                   49853: 
                   49854:     /* If the write version is set to 2, this database should be accessed
                   49855:     ** in WAL mode. If the log is not already open, open it now. Then 
                   49856:     ** return SQLITE_OK and return without populating BtShared.pPage1.
                   49857:     ** The caller detects this and calls this function again. This is
                   49858:     ** required as the version of page 1 currently in the page1 buffer
                   49859:     ** may not be the latest version - there may be a newer one in the log
                   49860:     ** file.
                   49861:     */
                   49862:     if( page1[19]==2 && pBt->doNotUseWAL==0 ){
                   49863:       int isOpen = 0;
                   49864:       rc = sqlite3PagerOpenWal(pBt->pPager, &isOpen);
                   49865:       if( rc!=SQLITE_OK ){
                   49866:         goto page1_init_failed;
                   49867:       }else if( isOpen==0 ){
                   49868:         releasePage(pPage1);
                   49869:         return SQLITE_OK;
                   49870:       }
                   49871:       rc = SQLITE_NOTADB;
                   49872:     }
                   49873: #endif
                   49874: 
                   49875:     /* The maximum embedded fraction must be exactly 25%.  And the minimum
                   49876:     ** embedded fraction must be 12.5% for both leaf-data and non-leaf-data.
                   49877:     ** The original design allowed these amounts to vary, but as of
                   49878:     ** version 3.6.0, we require them to be fixed.
                   49879:     */
                   49880:     if( memcmp(&page1[21], "\100\040\040",3)!=0 ){
                   49881:       goto page1_init_failed;
                   49882:     }
                   49883:     pageSize = (page1[16]<<8) | (page1[17]<<16);
                   49884:     if( ((pageSize-1)&pageSize)!=0
                   49885:      || pageSize>SQLITE_MAX_PAGE_SIZE 
                   49886:      || pageSize<=256 
                   49887:     ){
                   49888:       goto page1_init_failed;
                   49889:     }
                   49890:     assert( (pageSize & 7)==0 );
                   49891:     usableSize = pageSize - page1[20];
                   49892:     if( (u32)pageSize!=pBt->pageSize ){
                   49893:       /* After reading the first page of the database assuming a page size
                   49894:       ** of BtShared.pageSize, we have discovered that the page-size is
                   49895:       ** actually pageSize. Unlock the database, leave pBt->pPage1 at
                   49896:       ** zero and return SQLITE_OK. The caller will call this function
                   49897:       ** again with the correct page-size.
                   49898:       */
                   49899:       releasePage(pPage1);
                   49900:       pBt->usableSize = usableSize;
                   49901:       pBt->pageSize = pageSize;
                   49902:       freeTempSpace(pBt);
                   49903:       rc = sqlite3PagerSetPagesize(pBt->pPager, &pBt->pageSize,
                   49904:                                    pageSize-usableSize);
                   49905:       return rc;
                   49906:     }
                   49907:     if( (pBt->db->flags & SQLITE_RecoveryMode)==0 && nPage>nPageFile ){
                   49908:       rc = SQLITE_CORRUPT_BKPT;
                   49909:       goto page1_init_failed;
                   49910:     }
                   49911:     if( usableSize<480 ){
                   49912:       goto page1_init_failed;
                   49913:     }
                   49914:     pBt->pageSize = pageSize;
                   49915:     pBt->usableSize = usableSize;
                   49916: #ifndef SQLITE_OMIT_AUTOVACUUM
                   49917:     pBt->autoVacuum = (get4byte(&page1[36 + 4*4])?1:0);
                   49918:     pBt->incrVacuum = (get4byte(&page1[36 + 7*4])?1:0);
                   49919: #endif
                   49920:   }
                   49921: 
                   49922:   /* maxLocal is the maximum amount of payload to store locally for
                   49923:   ** a cell.  Make sure it is small enough so that at least minFanout
                   49924:   ** cells can will fit on one page.  We assume a 10-byte page header.
                   49925:   ** Besides the payload, the cell must store:
                   49926:   **     2-byte pointer to the cell
                   49927:   **     4-byte child pointer
                   49928:   **     9-byte nKey value
                   49929:   **     4-byte nData value
                   49930:   **     4-byte overflow page pointer
                   49931:   ** So a cell consists of a 2-byte pointer, a header which is as much as
                   49932:   ** 17 bytes long, 0 to N bytes of payload, and an optional 4 byte overflow
                   49933:   ** page pointer.
                   49934:   */
                   49935:   pBt->maxLocal = (u16)((pBt->usableSize-12)*64/255 - 23);
                   49936:   pBt->minLocal = (u16)((pBt->usableSize-12)*32/255 - 23);
                   49937:   pBt->maxLeaf = (u16)(pBt->usableSize - 35);
                   49938:   pBt->minLeaf = (u16)((pBt->usableSize-12)*32/255 - 23);
                   49939:   assert( pBt->maxLeaf + 23 <= MX_CELL_SIZE(pBt) );
                   49940:   pBt->pPage1 = pPage1;
                   49941:   pBt->nPage = nPage;
                   49942:   return SQLITE_OK;
                   49943: 
                   49944: page1_init_failed:
                   49945:   releasePage(pPage1);
                   49946:   pBt->pPage1 = 0;
                   49947:   return rc;
                   49948: }
                   49949: 
                   49950: /*
                   49951: ** If there are no outstanding cursors and we are not in the middle
                   49952: ** of a transaction but there is a read lock on the database, then
                   49953: ** this routine unrefs the first page of the database file which 
                   49954: ** has the effect of releasing the read lock.
                   49955: **
                   49956: ** If there is a transaction in progress, this routine is a no-op.
                   49957: */
                   49958: static void unlockBtreeIfUnused(BtShared *pBt){
                   49959:   assert( sqlite3_mutex_held(pBt->mutex) );
                   49960:   assert( pBt->pCursor==0 || pBt->inTransaction>TRANS_NONE );
                   49961:   if( pBt->inTransaction==TRANS_NONE && pBt->pPage1!=0 ){
                   49962:     assert( pBt->pPage1->aData );
                   49963:     assert( sqlite3PagerRefcount(pBt->pPager)==1 );
                   49964:     assert( pBt->pPage1->aData );
                   49965:     releasePage(pBt->pPage1);
                   49966:     pBt->pPage1 = 0;
                   49967:   }
                   49968: }
                   49969: 
                   49970: /*
                   49971: ** If pBt points to an empty file then convert that empty file
                   49972: ** into a new empty database by initializing the first page of
                   49973: ** the database.
                   49974: */
                   49975: static int newDatabase(BtShared *pBt){
                   49976:   MemPage *pP1;
                   49977:   unsigned char *data;
                   49978:   int rc;
                   49979: 
                   49980:   assert( sqlite3_mutex_held(pBt->mutex) );
                   49981:   if( pBt->nPage>0 ){
                   49982:     return SQLITE_OK;
                   49983:   }
                   49984:   pP1 = pBt->pPage1;
                   49985:   assert( pP1!=0 );
                   49986:   data = pP1->aData;
                   49987:   rc = sqlite3PagerWrite(pP1->pDbPage);
                   49988:   if( rc ) return rc;
                   49989:   memcpy(data, zMagicHeader, sizeof(zMagicHeader));
                   49990:   assert( sizeof(zMagicHeader)==16 );
                   49991:   data[16] = (u8)((pBt->pageSize>>8)&0xff);
                   49992:   data[17] = (u8)((pBt->pageSize>>16)&0xff);
                   49993:   data[18] = 1;
                   49994:   data[19] = 1;
                   49995:   assert( pBt->usableSize<=pBt->pageSize && pBt->usableSize+255>=pBt->pageSize);
                   49996:   data[20] = (u8)(pBt->pageSize - pBt->usableSize);
                   49997:   data[21] = 64;
                   49998:   data[22] = 32;
                   49999:   data[23] = 32;
                   50000:   memset(&data[24], 0, 100-24);
                   50001:   zeroPage(pP1, PTF_INTKEY|PTF_LEAF|PTF_LEAFDATA );
                   50002:   pBt->pageSizeFixed = 1;
                   50003: #ifndef SQLITE_OMIT_AUTOVACUUM
                   50004:   assert( pBt->autoVacuum==1 || pBt->autoVacuum==0 );
                   50005:   assert( pBt->incrVacuum==1 || pBt->incrVacuum==0 );
                   50006:   put4byte(&data[36 + 4*4], pBt->autoVacuum);
                   50007:   put4byte(&data[36 + 7*4], pBt->incrVacuum);
                   50008: #endif
                   50009:   pBt->nPage = 1;
                   50010:   data[31] = 1;
                   50011:   return SQLITE_OK;
                   50012: }
                   50013: 
                   50014: /*
                   50015: ** Attempt to start a new transaction. A write-transaction
                   50016: ** is started if the second argument is nonzero, otherwise a read-
                   50017: ** transaction.  If the second argument is 2 or more and exclusive
                   50018: ** transaction is started, meaning that no other process is allowed
                   50019: ** to access the database.  A preexisting transaction may not be
                   50020: ** upgraded to exclusive by calling this routine a second time - the
                   50021: ** exclusivity flag only works for a new transaction.
                   50022: **
                   50023: ** A write-transaction must be started before attempting any 
                   50024: ** changes to the database.  None of the following routines 
                   50025: ** will work unless a transaction is started first:
                   50026: **
                   50027: **      sqlite3BtreeCreateTable()
                   50028: **      sqlite3BtreeCreateIndex()
                   50029: **      sqlite3BtreeClearTable()
                   50030: **      sqlite3BtreeDropTable()
                   50031: **      sqlite3BtreeInsert()
                   50032: **      sqlite3BtreeDelete()
                   50033: **      sqlite3BtreeUpdateMeta()
                   50034: **
                   50035: ** If an initial attempt to acquire the lock fails because of lock contention
                   50036: ** and the database was previously unlocked, then invoke the busy handler
                   50037: ** if there is one.  But if there was previously a read-lock, do not
                   50038: ** invoke the busy handler - just return SQLITE_BUSY.  SQLITE_BUSY is 
                   50039: ** returned when there is already a read-lock in order to avoid a deadlock.
                   50040: **
                   50041: ** Suppose there are two processes A and B.  A has a read lock and B has
                   50042: ** a reserved lock.  B tries to promote to exclusive but is blocked because
                   50043: ** of A's read lock.  A tries to promote to reserved but is blocked by B.
                   50044: ** One or the other of the two processes must give way or there can be
                   50045: ** no progress.  By returning SQLITE_BUSY and not invoking the busy callback
                   50046: ** when A already has a read lock, we encourage A to give up and let B
                   50047: ** proceed.
                   50048: */
                   50049: SQLITE_PRIVATE int sqlite3BtreeBeginTrans(Btree *p, int wrflag){
                   50050:   sqlite3 *pBlock = 0;
                   50051:   BtShared *pBt = p->pBt;
                   50052:   int rc = SQLITE_OK;
                   50053: 
                   50054:   sqlite3BtreeEnter(p);
                   50055:   btreeIntegrity(p);
                   50056: 
                   50057:   /* If the btree is already in a write-transaction, or it
                   50058:   ** is already in a read-transaction and a read-transaction
                   50059:   ** is requested, this is a no-op.
                   50060:   */
                   50061:   if( p->inTrans==TRANS_WRITE || (p->inTrans==TRANS_READ && !wrflag) ){
                   50062:     goto trans_begun;
                   50063:   }
                   50064: 
                   50065:   /* Write transactions are not possible on a read-only database */
                   50066:   if( pBt->readOnly && wrflag ){
                   50067:     rc = SQLITE_READONLY;
                   50068:     goto trans_begun;
                   50069:   }
                   50070: 
                   50071: #ifndef SQLITE_OMIT_SHARED_CACHE
                   50072:   /* If another database handle has already opened a write transaction 
                   50073:   ** on this shared-btree structure and a second write transaction is
                   50074:   ** requested, return SQLITE_LOCKED.
                   50075:   */
                   50076:   if( (wrflag && pBt->inTransaction==TRANS_WRITE) || pBt->isPending ){
                   50077:     pBlock = pBt->pWriter->db;
                   50078:   }else if( wrflag>1 ){
                   50079:     BtLock *pIter;
                   50080:     for(pIter=pBt->pLock; pIter; pIter=pIter->pNext){
                   50081:       if( pIter->pBtree!=p ){
                   50082:         pBlock = pIter->pBtree->db;
                   50083:         break;
                   50084:       }
                   50085:     }
                   50086:   }
                   50087:   if( pBlock ){
                   50088:     sqlite3ConnectionBlocked(p->db, pBlock);
                   50089:     rc = SQLITE_LOCKED_SHAREDCACHE;
                   50090:     goto trans_begun;
                   50091:   }
                   50092: #endif
                   50093: 
                   50094:   /* Any read-only or read-write transaction implies a read-lock on 
                   50095:   ** page 1. So if some other shared-cache client already has a write-lock 
                   50096:   ** on page 1, the transaction cannot be opened. */
                   50097:   rc = querySharedCacheTableLock(p, MASTER_ROOT, READ_LOCK);
                   50098:   if( SQLITE_OK!=rc ) goto trans_begun;
                   50099: 
                   50100:   pBt->initiallyEmpty = (u8)(pBt->nPage==0);
                   50101:   do {
                   50102:     /* Call lockBtree() until either pBt->pPage1 is populated or
                   50103:     ** lockBtree() returns something other than SQLITE_OK. lockBtree()
                   50104:     ** may return SQLITE_OK but leave pBt->pPage1 set to 0 if after
                   50105:     ** reading page 1 it discovers that the page-size of the database 
                   50106:     ** file is not pBt->pageSize. In this case lockBtree() will update
                   50107:     ** pBt->pageSize to the page-size of the file on disk.
                   50108:     */
                   50109:     while( pBt->pPage1==0 && SQLITE_OK==(rc = lockBtree(pBt)) );
                   50110: 
                   50111:     if( rc==SQLITE_OK && wrflag ){
                   50112:       if( pBt->readOnly ){
                   50113:         rc = SQLITE_READONLY;
                   50114:       }else{
                   50115:         rc = sqlite3PagerBegin(pBt->pPager,wrflag>1,sqlite3TempInMemory(p->db));
                   50116:         if( rc==SQLITE_OK ){
                   50117:           rc = newDatabase(pBt);
                   50118:         }
                   50119:       }
                   50120:     }
                   50121:   
                   50122:     if( rc!=SQLITE_OK ){
                   50123:       unlockBtreeIfUnused(pBt);
                   50124:     }
                   50125:   }while( (rc&0xFF)==SQLITE_BUSY && pBt->inTransaction==TRANS_NONE &&
                   50126:           btreeInvokeBusyHandler(pBt) );
                   50127: 
                   50128:   if( rc==SQLITE_OK ){
                   50129:     if( p->inTrans==TRANS_NONE ){
                   50130:       pBt->nTransaction++;
                   50131: #ifndef SQLITE_OMIT_SHARED_CACHE
                   50132:       if( p->sharable ){
                   50133:        assert( p->lock.pBtree==p && p->lock.iTable==1 );
                   50134:         p->lock.eLock = READ_LOCK;
                   50135:         p->lock.pNext = pBt->pLock;
                   50136:         pBt->pLock = &p->lock;
                   50137:       }
                   50138: #endif
                   50139:     }
                   50140:     p->inTrans = (wrflag?TRANS_WRITE:TRANS_READ);
                   50141:     if( p->inTrans>pBt->inTransaction ){
                   50142:       pBt->inTransaction = p->inTrans;
                   50143:     }
                   50144:     if( wrflag ){
                   50145:       MemPage *pPage1 = pBt->pPage1;
                   50146: #ifndef SQLITE_OMIT_SHARED_CACHE
                   50147:       assert( !pBt->pWriter );
                   50148:       pBt->pWriter = p;
                   50149:       pBt->isExclusive = (u8)(wrflag>1);
                   50150: #endif
                   50151: 
                   50152:       /* If the db-size header field is incorrect (as it may be if an old
                   50153:       ** client has been writing the database file), update it now. Doing
                   50154:       ** this sooner rather than later means the database size can safely 
                   50155:       ** re-read the database size from page 1 if a savepoint or transaction
                   50156:       ** rollback occurs within the transaction.
                   50157:       */
                   50158:       if( pBt->nPage!=get4byte(&pPage1->aData[28]) ){
                   50159:         rc = sqlite3PagerWrite(pPage1->pDbPage);
                   50160:         if( rc==SQLITE_OK ){
                   50161:           put4byte(&pPage1->aData[28], pBt->nPage);
                   50162:         }
                   50163:       }
                   50164:     }
                   50165:   }
                   50166: 
                   50167: 
                   50168: trans_begun:
                   50169:   if( rc==SQLITE_OK && wrflag ){
                   50170:     /* This call makes sure that the pager has the correct number of
                   50171:     ** open savepoints. If the second parameter is greater than 0 and
                   50172:     ** the sub-journal is not already open, then it will be opened here.
                   50173:     */
                   50174:     rc = sqlite3PagerOpenSavepoint(pBt->pPager, p->db->nSavepoint);
                   50175:   }
                   50176: 
                   50177:   btreeIntegrity(p);
                   50178:   sqlite3BtreeLeave(p);
                   50179:   return rc;
                   50180: }
                   50181: 
                   50182: #ifndef SQLITE_OMIT_AUTOVACUUM
                   50183: 
                   50184: /*
                   50185: ** Set the pointer-map entries for all children of page pPage. Also, if
                   50186: ** pPage contains cells that point to overflow pages, set the pointer
                   50187: ** map entries for the overflow pages as well.
                   50188: */
                   50189: static int setChildPtrmaps(MemPage *pPage){
                   50190:   int i;                             /* Counter variable */
                   50191:   int nCell;                         /* Number of cells in page pPage */
                   50192:   int rc;                            /* Return code */
                   50193:   BtShared *pBt = pPage->pBt;
                   50194:   u8 isInitOrig = pPage->isInit;
                   50195:   Pgno pgno = pPage->pgno;
                   50196: 
                   50197:   assert( sqlite3_mutex_held(pPage->pBt->mutex) );
                   50198:   rc = btreeInitPage(pPage);
                   50199:   if( rc!=SQLITE_OK ){
                   50200:     goto set_child_ptrmaps_out;
                   50201:   }
                   50202:   nCell = pPage->nCell;
                   50203: 
                   50204:   for(i=0; i<nCell; i++){
                   50205:     u8 *pCell = findCell(pPage, i);
                   50206: 
                   50207:     ptrmapPutOvflPtr(pPage, pCell, &rc);
                   50208: 
                   50209:     if( !pPage->leaf ){
                   50210:       Pgno childPgno = get4byte(pCell);
                   50211:       ptrmapPut(pBt, childPgno, PTRMAP_BTREE, pgno, &rc);
                   50212:     }
                   50213:   }
                   50214: 
                   50215:   if( !pPage->leaf ){
                   50216:     Pgno childPgno = get4byte(&pPage->aData[pPage->hdrOffset+8]);
                   50217:     ptrmapPut(pBt, childPgno, PTRMAP_BTREE, pgno, &rc);
                   50218:   }
                   50219: 
                   50220: set_child_ptrmaps_out:
                   50221:   pPage->isInit = isInitOrig;
                   50222:   return rc;
                   50223: }
                   50224: 
                   50225: /*
                   50226: ** Somewhere on pPage is a pointer to page iFrom.  Modify this pointer so
                   50227: ** that it points to iTo. Parameter eType describes the type of pointer to
                   50228: ** be modified, as  follows:
                   50229: **
                   50230: ** PTRMAP_BTREE:     pPage is a btree-page. The pointer points at a child 
                   50231: **                   page of pPage.
                   50232: **
                   50233: ** PTRMAP_OVERFLOW1: pPage is a btree-page. The pointer points at an overflow
                   50234: **                   page pointed to by one of the cells on pPage.
                   50235: **
                   50236: ** PTRMAP_OVERFLOW2: pPage is an overflow-page. The pointer points at the next
                   50237: **                   overflow page in the list.
                   50238: */
                   50239: static int modifyPagePointer(MemPage *pPage, Pgno iFrom, Pgno iTo, u8 eType){
                   50240:   assert( sqlite3_mutex_held(pPage->pBt->mutex) );
                   50241:   assert( sqlite3PagerIswriteable(pPage->pDbPage) );
                   50242:   if( eType==PTRMAP_OVERFLOW2 ){
                   50243:     /* The pointer is always the first 4 bytes of the page in this case.  */
                   50244:     if( get4byte(pPage->aData)!=iFrom ){
                   50245:       return SQLITE_CORRUPT_BKPT;
                   50246:     }
                   50247:     put4byte(pPage->aData, iTo);
                   50248:   }else{
                   50249:     u8 isInitOrig = pPage->isInit;
                   50250:     int i;
                   50251:     int nCell;
                   50252: 
                   50253:     btreeInitPage(pPage);
                   50254:     nCell = pPage->nCell;
                   50255: 
                   50256:     for(i=0; i<nCell; i++){
                   50257:       u8 *pCell = findCell(pPage, i);
                   50258:       if( eType==PTRMAP_OVERFLOW1 ){
                   50259:         CellInfo info;
                   50260:         btreeParseCellPtr(pPage, pCell, &info);
                   50261:         if( info.iOverflow ){
                   50262:           if( iFrom==get4byte(&pCell[info.iOverflow]) ){
                   50263:             put4byte(&pCell[info.iOverflow], iTo);
                   50264:             break;
                   50265:           }
                   50266:         }
                   50267:       }else{
                   50268:         if( get4byte(pCell)==iFrom ){
                   50269:           put4byte(pCell, iTo);
                   50270:           break;
                   50271:         }
                   50272:       }
                   50273:     }
                   50274:   
                   50275:     if( i==nCell ){
                   50276:       if( eType!=PTRMAP_BTREE || 
                   50277:           get4byte(&pPage->aData[pPage->hdrOffset+8])!=iFrom ){
                   50278:         return SQLITE_CORRUPT_BKPT;
                   50279:       }
                   50280:       put4byte(&pPage->aData[pPage->hdrOffset+8], iTo);
                   50281:     }
                   50282: 
                   50283:     pPage->isInit = isInitOrig;
                   50284:   }
                   50285:   return SQLITE_OK;
                   50286: }
                   50287: 
                   50288: 
                   50289: /*
                   50290: ** Move the open database page pDbPage to location iFreePage in the 
                   50291: ** database. The pDbPage reference remains valid.
                   50292: **
                   50293: ** The isCommit flag indicates that there is no need to remember that
                   50294: ** the journal needs to be sync()ed before database page pDbPage->pgno 
                   50295: ** can be written to. The caller has already promised not to write to that
                   50296: ** page.
                   50297: */
                   50298: static int relocatePage(
                   50299:   BtShared *pBt,           /* Btree */
                   50300:   MemPage *pDbPage,        /* Open page to move */
                   50301:   u8 eType,                /* Pointer map 'type' entry for pDbPage */
                   50302:   Pgno iPtrPage,           /* Pointer map 'page-no' entry for pDbPage */
                   50303:   Pgno iFreePage,          /* The location to move pDbPage to */
                   50304:   int isCommit             /* isCommit flag passed to sqlite3PagerMovepage */
                   50305: ){
                   50306:   MemPage *pPtrPage;   /* The page that contains a pointer to pDbPage */
                   50307:   Pgno iDbPage = pDbPage->pgno;
                   50308:   Pager *pPager = pBt->pPager;
                   50309:   int rc;
                   50310: 
                   50311:   assert( eType==PTRMAP_OVERFLOW2 || eType==PTRMAP_OVERFLOW1 || 
                   50312:       eType==PTRMAP_BTREE || eType==PTRMAP_ROOTPAGE );
                   50313:   assert( sqlite3_mutex_held(pBt->mutex) );
                   50314:   assert( pDbPage->pBt==pBt );
                   50315: 
                   50316:   /* Move page iDbPage from its current location to page number iFreePage */
                   50317:   TRACE(("AUTOVACUUM: Moving %d to free page %d (ptr page %d type %d)\n", 
                   50318:       iDbPage, iFreePage, iPtrPage, eType));
                   50319:   rc = sqlite3PagerMovepage(pPager, pDbPage->pDbPage, iFreePage, isCommit);
                   50320:   if( rc!=SQLITE_OK ){
                   50321:     return rc;
                   50322:   }
                   50323:   pDbPage->pgno = iFreePage;
                   50324: 
                   50325:   /* If pDbPage was a btree-page, then it may have child pages and/or cells
                   50326:   ** that point to overflow pages. The pointer map entries for all these
                   50327:   ** pages need to be changed.
                   50328:   **
                   50329:   ** If pDbPage is an overflow page, then the first 4 bytes may store a
                   50330:   ** pointer to a subsequent overflow page. If this is the case, then
                   50331:   ** the pointer map needs to be updated for the subsequent overflow page.
                   50332:   */
                   50333:   if( eType==PTRMAP_BTREE || eType==PTRMAP_ROOTPAGE ){
                   50334:     rc = setChildPtrmaps(pDbPage);
                   50335:     if( rc!=SQLITE_OK ){
                   50336:       return rc;
                   50337:     }
                   50338:   }else{
                   50339:     Pgno nextOvfl = get4byte(pDbPage->aData);
                   50340:     if( nextOvfl!=0 ){
                   50341:       ptrmapPut(pBt, nextOvfl, PTRMAP_OVERFLOW2, iFreePage, &rc);
                   50342:       if( rc!=SQLITE_OK ){
                   50343:         return rc;
                   50344:       }
                   50345:     }
                   50346:   }
                   50347: 
                   50348:   /* Fix the database pointer on page iPtrPage that pointed at iDbPage so
                   50349:   ** that it points at iFreePage. Also fix the pointer map entry for
                   50350:   ** iPtrPage.
                   50351:   */
                   50352:   if( eType!=PTRMAP_ROOTPAGE ){
                   50353:     rc = btreeGetPage(pBt, iPtrPage, &pPtrPage, 0);
                   50354:     if( rc!=SQLITE_OK ){
                   50355:       return rc;
                   50356:     }
                   50357:     rc = sqlite3PagerWrite(pPtrPage->pDbPage);
                   50358:     if( rc!=SQLITE_OK ){
                   50359:       releasePage(pPtrPage);
                   50360:       return rc;
                   50361:     }
                   50362:     rc = modifyPagePointer(pPtrPage, iDbPage, iFreePage, eType);
                   50363:     releasePage(pPtrPage);
                   50364:     if( rc==SQLITE_OK ){
                   50365:       ptrmapPut(pBt, iFreePage, eType, iPtrPage, &rc);
                   50366:     }
                   50367:   }
                   50368:   return rc;
                   50369: }
                   50370: 
                   50371: /* Forward declaration required by incrVacuumStep(). */
                   50372: static int allocateBtreePage(BtShared *, MemPage **, Pgno *, Pgno, u8);
                   50373: 
                   50374: /*
                   50375: ** Perform a single step of an incremental-vacuum. If successful,
                   50376: ** return SQLITE_OK. If there is no work to do (and therefore no
                   50377: ** point in calling this function again), return SQLITE_DONE.
                   50378: **
                   50379: ** More specificly, this function attempts to re-organize the 
                   50380: ** database so that the last page of the file currently in use
                   50381: ** is no longer in use.
                   50382: **
                   50383: ** If the nFin parameter is non-zero, this function assumes
                   50384: ** that the caller will keep calling incrVacuumStep() until
                   50385: ** it returns SQLITE_DONE or an error, and that nFin is the
                   50386: ** number of pages the database file will contain after this 
                   50387: ** process is complete.  If nFin is zero, it is assumed that
                   50388: ** incrVacuumStep() will be called a finite amount of times
                   50389: ** which may or may not empty the freelist.  A full autovacuum
                   50390: ** has nFin>0.  A "PRAGMA incremental_vacuum" has nFin==0.
                   50391: */
                   50392: static int incrVacuumStep(BtShared *pBt, Pgno nFin, Pgno iLastPg){
                   50393:   Pgno nFreeList;           /* Number of pages still on the free-list */
                   50394:   int rc;
                   50395: 
                   50396:   assert( sqlite3_mutex_held(pBt->mutex) );
                   50397:   assert( iLastPg>nFin );
                   50398: 
                   50399:   if( !PTRMAP_ISPAGE(pBt, iLastPg) && iLastPg!=PENDING_BYTE_PAGE(pBt) ){
                   50400:     u8 eType;
                   50401:     Pgno iPtrPage;
                   50402: 
                   50403:     nFreeList = get4byte(&pBt->pPage1->aData[36]);
                   50404:     if( nFreeList==0 ){
                   50405:       return SQLITE_DONE;
                   50406:     }
                   50407: 
                   50408:     rc = ptrmapGet(pBt, iLastPg, &eType, &iPtrPage);
                   50409:     if( rc!=SQLITE_OK ){
                   50410:       return rc;
                   50411:     }
                   50412:     if( eType==PTRMAP_ROOTPAGE ){
                   50413:       return SQLITE_CORRUPT_BKPT;
                   50414:     }
                   50415: 
                   50416:     if( eType==PTRMAP_FREEPAGE ){
                   50417:       if( nFin==0 ){
                   50418:         /* Remove the page from the files free-list. This is not required
                   50419:         ** if nFin is non-zero. In that case, the free-list will be
                   50420:         ** truncated to zero after this function returns, so it doesn't 
                   50421:         ** matter if it still contains some garbage entries.
                   50422:         */
                   50423:         Pgno iFreePg;
                   50424:         MemPage *pFreePg;
                   50425:         rc = allocateBtreePage(pBt, &pFreePg, &iFreePg, iLastPg, 1);
                   50426:         if( rc!=SQLITE_OK ){
                   50427:           return rc;
                   50428:         }
                   50429:         assert( iFreePg==iLastPg );
                   50430:         releasePage(pFreePg);
                   50431:       }
                   50432:     } else {
                   50433:       Pgno iFreePg;             /* Index of free page to move pLastPg to */
                   50434:       MemPage *pLastPg;
                   50435: 
                   50436:       rc = btreeGetPage(pBt, iLastPg, &pLastPg, 0);
                   50437:       if( rc!=SQLITE_OK ){
                   50438:         return rc;
                   50439:       }
                   50440: 
                   50441:       /* If nFin is zero, this loop runs exactly once and page pLastPg
                   50442:       ** is swapped with the first free page pulled off the free list.
                   50443:       **
                   50444:       ** On the other hand, if nFin is greater than zero, then keep
                   50445:       ** looping until a free-page located within the first nFin pages
                   50446:       ** of the file is found.
                   50447:       */
                   50448:       do {
                   50449:         MemPage *pFreePg;
                   50450:         rc = allocateBtreePage(pBt, &pFreePg, &iFreePg, 0, 0);
                   50451:         if( rc!=SQLITE_OK ){
                   50452:           releasePage(pLastPg);
                   50453:           return rc;
                   50454:         }
                   50455:         releasePage(pFreePg);
                   50456:       }while( nFin!=0 && iFreePg>nFin );
                   50457:       assert( iFreePg<iLastPg );
                   50458:       
                   50459:       rc = sqlite3PagerWrite(pLastPg->pDbPage);
                   50460:       if( rc==SQLITE_OK ){
                   50461:         rc = relocatePage(pBt, pLastPg, eType, iPtrPage, iFreePg, nFin!=0);
                   50462:       }
                   50463:       releasePage(pLastPg);
                   50464:       if( rc!=SQLITE_OK ){
                   50465:         return rc;
                   50466:       }
                   50467:     }
                   50468:   }
                   50469: 
                   50470:   if( nFin==0 ){
                   50471:     iLastPg--;
                   50472:     while( iLastPg==PENDING_BYTE_PAGE(pBt)||PTRMAP_ISPAGE(pBt, iLastPg) ){
                   50473:       if( PTRMAP_ISPAGE(pBt, iLastPg) ){
                   50474:         MemPage *pPg;
                   50475:         rc = btreeGetPage(pBt, iLastPg, &pPg, 0);
                   50476:         if( rc!=SQLITE_OK ){
                   50477:           return rc;
                   50478:         }
                   50479:         rc = sqlite3PagerWrite(pPg->pDbPage);
                   50480:         releasePage(pPg);
                   50481:         if( rc!=SQLITE_OK ){
                   50482:           return rc;
                   50483:         }
                   50484:       }
                   50485:       iLastPg--;
                   50486:     }
                   50487:     sqlite3PagerTruncateImage(pBt->pPager, iLastPg);
                   50488:     pBt->nPage = iLastPg;
                   50489:   }
                   50490:   return SQLITE_OK;
                   50491: }
                   50492: 
                   50493: /*
                   50494: ** A write-transaction must be opened before calling this function.
                   50495: ** It performs a single unit of work towards an incremental vacuum.
                   50496: **
                   50497: ** If the incremental vacuum is finished after this function has run,
                   50498: ** SQLITE_DONE is returned. If it is not finished, but no error occurred,
                   50499: ** SQLITE_OK is returned. Otherwise an SQLite error code. 
                   50500: */
                   50501: SQLITE_PRIVATE int sqlite3BtreeIncrVacuum(Btree *p){
                   50502:   int rc;
                   50503:   BtShared *pBt = p->pBt;
                   50504: 
                   50505:   sqlite3BtreeEnter(p);
                   50506:   assert( pBt->inTransaction==TRANS_WRITE && p->inTrans==TRANS_WRITE );
                   50507:   if( !pBt->autoVacuum ){
                   50508:     rc = SQLITE_DONE;
                   50509:   }else{
                   50510:     invalidateAllOverflowCache(pBt);
                   50511:     rc = incrVacuumStep(pBt, 0, btreePagecount(pBt));
                   50512:     if( rc==SQLITE_OK ){
                   50513:       rc = sqlite3PagerWrite(pBt->pPage1->pDbPage);
                   50514:       put4byte(&pBt->pPage1->aData[28], pBt->nPage);
                   50515:     }
                   50516:   }
                   50517:   sqlite3BtreeLeave(p);
                   50518:   return rc;
                   50519: }
                   50520: 
                   50521: /*
                   50522: ** This routine is called prior to sqlite3PagerCommit when a transaction
1.1.1.3 ! misho    50523: ** is committed for an auto-vacuum database.
1.1       misho    50524: **
                   50525: ** If SQLITE_OK is returned, then *pnTrunc is set to the number of pages
                   50526: ** the database file should be truncated to during the commit process. 
                   50527: ** i.e. the database has been reorganized so that only the first *pnTrunc
                   50528: ** pages are in use.
                   50529: */
                   50530: static int autoVacuumCommit(BtShared *pBt){
                   50531:   int rc = SQLITE_OK;
                   50532:   Pager *pPager = pBt->pPager;
                   50533:   VVA_ONLY( int nRef = sqlite3PagerRefcount(pPager) );
                   50534: 
                   50535:   assert( sqlite3_mutex_held(pBt->mutex) );
                   50536:   invalidateAllOverflowCache(pBt);
                   50537:   assert(pBt->autoVacuum);
                   50538:   if( !pBt->incrVacuum ){
                   50539:     Pgno nFin;         /* Number of pages in database after autovacuuming */
                   50540:     Pgno nFree;        /* Number of pages on the freelist initially */
                   50541:     Pgno nPtrmap;      /* Number of PtrMap pages to be freed */
                   50542:     Pgno iFree;        /* The next page to be freed */
                   50543:     int nEntry;        /* Number of entries on one ptrmap page */
                   50544:     Pgno nOrig;        /* Database size before freeing */
                   50545: 
                   50546:     nOrig = btreePagecount(pBt);
                   50547:     if( PTRMAP_ISPAGE(pBt, nOrig) || nOrig==PENDING_BYTE_PAGE(pBt) ){
                   50548:       /* It is not possible to create a database for which the final page
                   50549:       ** is either a pointer-map page or the pending-byte page. If one
                   50550:       ** is encountered, this indicates corruption.
                   50551:       */
                   50552:       return SQLITE_CORRUPT_BKPT;
                   50553:     }
                   50554: 
                   50555:     nFree = get4byte(&pBt->pPage1->aData[36]);
                   50556:     nEntry = pBt->usableSize/5;
                   50557:     nPtrmap = (nFree-nOrig+PTRMAP_PAGENO(pBt, nOrig)+nEntry)/nEntry;
                   50558:     nFin = nOrig - nFree - nPtrmap;
                   50559:     if( nOrig>PENDING_BYTE_PAGE(pBt) && nFin<PENDING_BYTE_PAGE(pBt) ){
                   50560:       nFin--;
                   50561:     }
                   50562:     while( PTRMAP_ISPAGE(pBt, nFin) || nFin==PENDING_BYTE_PAGE(pBt) ){
                   50563:       nFin--;
                   50564:     }
                   50565:     if( nFin>nOrig ) return SQLITE_CORRUPT_BKPT;
                   50566: 
                   50567:     for(iFree=nOrig; iFree>nFin && rc==SQLITE_OK; iFree--){
                   50568:       rc = incrVacuumStep(pBt, nFin, iFree);
                   50569:     }
                   50570:     if( (rc==SQLITE_DONE || rc==SQLITE_OK) && nFree>0 ){
                   50571:       rc = sqlite3PagerWrite(pBt->pPage1->pDbPage);
                   50572:       put4byte(&pBt->pPage1->aData[32], 0);
                   50573:       put4byte(&pBt->pPage1->aData[36], 0);
                   50574:       put4byte(&pBt->pPage1->aData[28], nFin);
                   50575:       sqlite3PagerTruncateImage(pBt->pPager, nFin);
                   50576:       pBt->nPage = nFin;
                   50577:     }
                   50578:     if( rc!=SQLITE_OK ){
                   50579:       sqlite3PagerRollback(pPager);
                   50580:     }
                   50581:   }
                   50582: 
                   50583:   assert( nRef==sqlite3PagerRefcount(pPager) );
                   50584:   return rc;
                   50585: }
                   50586: 
                   50587: #else /* ifndef SQLITE_OMIT_AUTOVACUUM */
                   50588: # define setChildPtrmaps(x) SQLITE_OK
                   50589: #endif
                   50590: 
                   50591: /*
                   50592: ** This routine does the first phase of a two-phase commit.  This routine
                   50593: ** causes a rollback journal to be created (if it does not already exist)
                   50594: ** and populated with enough information so that if a power loss occurs
                   50595: ** the database can be restored to its original state by playing back
                   50596: ** the journal.  Then the contents of the journal are flushed out to
                   50597: ** the disk.  After the journal is safely on oxide, the changes to the
                   50598: ** database are written into the database file and flushed to oxide.
                   50599: ** At the end of this call, the rollback journal still exists on the
                   50600: ** disk and we are still holding all locks, so the transaction has not
                   50601: ** committed.  See sqlite3BtreeCommitPhaseTwo() for the second phase of the
                   50602: ** commit process.
                   50603: **
                   50604: ** This call is a no-op if no write-transaction is currently active on pBt.
                   50605: **
                   50606: ** Otherwise, sync the database file for the btree pBt. zMaster points to
                   50607: ** the name of a master journal file that should be written into the
                   50608: ** individual journal file, or is NULL, indicating no master journal file 
                   50609: ** (single database transaction).
                   50610: **
                   50611: ** When this is called, the master journal should already have been
                   50612: ** created, populated with this journal pointer and synced to disk.
                   50613: **
                   50614: ** Once this is routine has returned, the only thing required to commit
                   50615: ** the write-transaction for this database file is to delete the journal.
                   50616: */
                   50617: SQLITE_PRIVATE int sqlite3BtreeCommitPhaseOne(Btree *p, const char *zMaster){
                   50618:   int rc = SQLITE_OK;
                   50619:   if( p->inTrans==TRANS_WRITE ){
                   50620:     BtShared *pBt = p->pBt;
                   50621:     sqlite3BtreeEnter(p);
                   50622: #ifndef SQLITE_OMIT_AUTOVACUUM
                   50623:     if( pBt->autoVacuum ){
                   50624:       rc = autoVacuumCommit(pBt);
                   50625:       if( rc!=SQLITE_OK ){
                   50626:         sqlite3BtreeLeave(p);
                   50627:         return rc;
                   50628:       }
                   50629:     }
                   50630: #endif
                   50631:     rc = sqlite3PagerCommitPhaseOne(pBt->pPager, zMaster, 0);
                   50632:     sqlite3BtreeLeave(p);
                   50633:   }
                   50634:   return rc;
                   50635: }
                   50636: 
                   50637: /*
                   50638: ** This function is called from both BtreeCommitPhaseTwo() and BtreeRollback()
                   50639: ** at the conclusion of a transaction.
                   50640: */
                   50641: static void btreeEndTransaction(Btree *p){
                   50642:   BtShared *pBt = p->pBt;
                   50643:   assert( sqlite3BtreeHoldsMutex(p) );
                   50644: 
                   50645:   btreeClearHasContent(pBt);
                   50646:   if( p->inTrans>TRANS_NONE && p->db->activeVdbeCnt>1 ){
                   50647:     /* If there are other active statements that belong to this database
                   50648:     ** handle, downgrade to a read-only transaction. The other statements
                   50649:     ** may still be reading from the database.  */
                   50650:     downgradeAllSharedCacheTableLocks(p);
                   50651:     p->inTrans = TRANS_READ;
                   50652:   }else{
                   50653:     /* If the handle had any kind of transaction open, decrement the 
                   50654:     ** transaction count of the shared btree. If the transaction count 
                   50655:     ** reaches 0, set the shared state to TRANS_NONE. The unlockBtreeIfUnused()
                   50656:     ** call below will unlock the pager.  */
                   50657:     if( p->inTrans!=TRANS_NONE ){
                   50658:       clearAllSharedCacheTableLocks(p);
                   50659:       pBt->nTransaction--;
                   50660:       if( 0==pBt->nTransaction ){
                   50661:         pBt->inTransaction = TRANS_NONE;
                   50662:       }
                   50663:     }
                   50664: 
                   50665:     /* Set the current transaction state to TRANS_NONE and unlock the 
                   50666:     ** pager if this call closed the only read or write transaction.  */
                   50667:     p->inTrans = TRANS_NONE;
                   50668:     unlockBtreeIfUnused(pBt);
                   50669:   }
                   50670: 
                   50671:   btreeIntegrity(p);
                   50672: }
                   50673: 
                   50674: /*
                   50675: ** Commit the transaction currently in progress.
                   50676: **
                   50677: ** This routine implements the second phase of a 2-phase commit.  The
                   50678: ** sqlite3BtreeCommitPhaseOne() routine does the first phase and should
                   50679: ** be invoked prior to calling this routine.  The sqlite3BtreeCommitPhaseOne()
                   50680: ** routine did all the work of writing information out to disk and flushing the
                   50681: ** contents so that they are written onto the disk platter.  All this
                   50682: ** routine has to do is delete or truncate or zero the header in the
                   50683: ** the rollback journal (which causes the transaction to commit) and
                   50684: ** drop locks.
                   50685: **
                   50686: ** Normally, if an error occurs while the pager layer is attempting to 
                   50687: ** finalize the underlying journal file, this function returns an error and
                   50688: ** the upper layer will attempt a rollback. However, if the second argument
                   50689: ** is non-zero then this b-tree transaction is part of a multi-file 
                   50690: ** transaction. In this case, the transaction has already been committed 
                   50691: ** (by deleting a master journal file) and the caller will ignore this 
                   50692: ** functions return code. So, even if an error occurs in the pager layer,
                   50693: ** reset the b-tree objects internal state to indicate that the write
                   50694: ** transaction has been closed. This is quite safe, as the pager will have
                   50695: ** transitioned to the error state.
                   50696: **
                   50697: ** This will release the write lock on the database file.  If there
                   50698: ** are no active cursors, it also releases the read lock.
                   50699: */
                   50700: SQLITE_PRIVATE int sqlite3BtreeCommitPhaseTwo(Btree *p, int bCleanup){
                   50701: 
                   50702:   if( p->inTrans==TRANS_NONE ) return SQLITE_OK;
                   50703:   sqlite3BtreeEnter(p);
                   50704:   btreeIntegrity(p);
                   50705: 
                   50706:   /* If the handle has a write-transaction open, commit the shared-btrees 
                   50707:   ** transaction and set the shared state to TRANS_READ.
                   50708:   */
                   50709:   if( p->inTrans==TRANS_WRITE ){
                   50710:     int rc;
                   50711:     BtShared *pBt = p->pBt;
                   50712:     assert( pBt->inTransaction==TRANS_WRITE );
                   50713:     assert( pBt->nTransaction>0 );
                   50714:     rc = sqlite3PagerCommitPhaseTwo(pBt->pPager);
                   50715:     if( rc!=SQLITE_OK && bCleanup==0 ){
                   50716:       sqlite3BtreeLeave(p);
                   50717:       return rc;
                   50718:     }
                   50719:     pBt->inTransaction = TRANS_READ;
                   50720:   }
                   50721: 
                   50722:   btreeEndTransaction(p);
                   50723:   sqlite3BtreeLeave(p);
                   50724:   return SQLITE_OK;
                   50725: }
                   50726: 
                   50727: /*
                   50728: ** Do both phases of a commit.
                   50729: */
                   50730: SQLITE_PRIVATE int sqlite3BtreeCommit(Btree *p){
                   50731:   int rc;
                   50732:   sqlite3BtreeEnter(p);
                   50733:   rc = sqlite3BtreeCommitPhaseOne(p, 0);
                   50734:   if( rc==SQLITE_OK ){
                   50735:     rc = sqlite3BtreeCommitPhaseTwo(p, 0);
                   50736:   }
                   50737:   sqlite3BtreeLeave(p);
                   50738:   return rc;
                   50739: }
                   50740: 
                   50741: #ifndef NDEBUG
                   50742: /*
                   50743: ** Return the number of write-cursors open on this handle. This is for use
                   50744: ** in assert() expressions, so it is only compiled if NDEBUG is not
                   50745: ** defined.
                   50746: **
                   50747: ** For the purposes of this routine, a write-cursor is any cursor that
                   50748: ** is capable of writing to the databse.  That means the cursor was
                   50749: ** originally opened for writing and the cursor has not be disabled
                   50750: ** by having its state changed to CURSOR_FAULT.
                   50751: */
                   50752: static int countWriteCursors(BtShared *pBt){
                   50753:   BtCursor *pCur;
                   50754:   int r = 0;
                   50755:   for(pCur=pBt->pCursor; pCur; pCur=pCur->pNext){
                   50756:     if( pCur->wrFlag && pCur->eState!=CURSOR_FAULT ) r++; 
                   50757:   }
                   50758:   return r;
                   50759: }
                   50760: #endif
                   50761: 
                   50762: /*
                   50763: ** This routine sets the state to CURSOR_FAULT and the error
                   50764: ** code to errCode for every cursor on BtShared that pBtree
                   50765: ** references.
                   50766: **
                   50767: ** Every cursor is tripped, including cursors that belong
                   50768: ** to other database connections that happen to be sharing
                   50769: ** the cache with pBtree.
                   50770: **
                   50771: ** This routine gets called when a rollback occurs.
                   50772: ** All cursors using the same cache must be tripped
                   50773: ** to prevent them from trying to use the btree after
                   50774: ** the rollback.  The rollback may have deleted tables
                   50775: ** or moved root pages, so it is not sufficient to
                   50776: ** save the state of the cursor.  The cursor must be
                   50777: ** invalidated.
                   50778: */
                   50779: SQLITE_PRIVATE void sqlite3BtreeTripAllCursors(Btree *pBtree, int errCode){
                   50780:   BtCursor *p;
                   50781:   sqlite3BtreeEnter(pBtree);
                   50782:   for(p=pBtree->pBt->pCursor; p; p=p->pNext){
                   50783:     int i;
                   50784:     sqlite3BtreeClearCursor(p);
                   50785:     p->eState = CURSOR_FAULT;
                   50786:     p->skipNext = errCode;
                   50787:     for(i=0; i<=p->iPage; i++){
                   50788:       releasePage(p->apPage[i]);
                   50789:       p->apPage[i] = 0;
                   50790:     }
                   50791:   }
                   50792:   sqlite3BtreeLeave(pBtree);
                   50793: }
                   50794: 
                   50795: /*
                   50796: ** Rollback the transaction in progress.  All cursors will be
                   50797: ** invalided by this operation.  Any attempt to use a cursor
                   50798: ** that was open at the beginning of this operation will result
                   50799: ** in an error.
                   50800: **
                   50801: ** This will release the write lock on the database file.  If there
                   50802: ** are no active cursors, it also releases the read lock.
                   50803: */
                   50804: SQLITE_PRIVATE int sqlite3BtreeRollback(Btree *p){
                   50805:   int rc;
                   50806:   BtShared *pBt = p->pBt;
                   50807:   MemPage *pPage1;
                   50808: 
                   50809:   sqlite3BtreeEnter(p);
                   50810:   rc = saveAllCursors(pBt, 0, 0);
                   50811: #ifndef SQLITE_OMIT_SHARED_CACHE
                   50812:   if( rc!=SQLITE_OK ){
                   50813:     /* This is a horrible situation. An IO or malloc() error occurred whilst
                   50814:     ** trying to save cursor positions. If this is an automatic rollback (as
                   50815:     ** the result of a constraint, malloc() failure or IO error) then 
                   50816:     ** the cache may be internally inconsistent (not contain valid trees) so
                   50817:     ** we cannot simply return the error to the caller. Instead, abort 
                   50818:     ** all queries that may be using any of the cursors that failed to save.
                   50819:     */
                   50820:     sqlite3BtreeTripAllCursors(p, rc);
                   50821:   }
                   50822: #endif
                   50823:   btreeIntegrity(p);
                   50824: 
                   50825:   if( p->inTrans==TRANS_WRITE ){
                   50826:     int rc2;
                   50827: 
                   50828:     assert( TRANS_WRITE==pBt->inTransaction );
                   50829:     rc2 = sqlite3PagerRollback(pBt->pPager);
                   50830:     if( rc2!=SQLITE_OK ){
                   50831:       rc = rc2;
                   50832:     }
                   50833: 
                   50834:     /* The rollback may have destroyed the pPage1->aData value.  So
                   50835:     ** call btreeGetPage() on page 1 again to make
                   50836:     ** sure pPage1->aData is set correctly. */
                   50837:     if( btreeGetPage(pBt, 1, &pPage1, 0)==SQLITE_OK ){
                   50838:       int nPage = get4byte(28+(u8*)pPage1->aData);
                   50839:       testcase( nPage==0 );
                   50840:       if( nPage==0 ) sqlite3PagerPagecount(pBt->pPager, &nPage);
                   50841:       testcase( pBt->nPage!=nPage );
                   50842:       pBt->nPage = nPage;
                   50843:       releasePage(pPage1);
                   50844:     }
                   50845:     assert( countWriteCursors(pBt)==0 );
                   50846:     pBt->inTransaction = TRANS_READ;
                   50847:   }
                   50848: 
                   50849:   btreeEndTransaction(p);
                   50850:   sqlite3BtreeLeave(p);
                   50851:   return rc;
                   50852: }
                   50853: 
                   50854: /*
                   50855: ** Start a statement subtransaction. The subtransaction can can be rolled
                   50856: ** back independently of the main transaction. You must start a transaction 
                   50857: ** before starting a subtransaction. The subtransaction is ended automatically 
                   50858: ** if the main transaction commits or rolls back.
                   50859: **
                   50860: ** Statement subtransactions are used around individual SQL statements
                   50861: ** that are contained within a BEGIN...COMMIT block.  If a constraint
                   50862: ** error occurs within the statement, the effect of that one statement
                   50863: ** can be rolled back without having to rollback the entire transaction.
                   50864: **
                   50865: ** A statement sub-transaction is implemented as an anonymous savepoint. The
                   50866: ** value passed as the second parameter is the total number of savepoints,
                   50867: ** including the new anonymous savepoint, open on the B-Tree. i.e. if there
                   50868: ** are no active savepoints and no other statement-transactions open,
                   50869: ** iStatement is 1. This anonymous savepoint can be released or rolled back
                   50870: ** using the sqlite3BtreeSavepoint() function.
                   50871: */
                   50872: SQLITE_PRIVATE int sqlite3BtreeBeginStmt(Btree *p, int iStatement){
                   50873:   int rc;
                   50874:   BtShared *pBt = p->pBt;
                   50875:   sqlite3BtreeEnter(p);
                   50876:   assert( p->inTrans==TRANS_WRITE );
                   50877:   assert( pBt->readOnly==0 );
                   50878:   assert( iStatement>0 );
                   50879:   assert( iStatement>p->db->nSavepoint );
                   50880:   assert( pBt->inTransaction==TRANS_WRITE );
                   50881:   /* At the pager level, a statement transaction is a savepoint with
                   50882:   ** an index greater than all savepoints created explicitly using
                   50883:   ** SQL statements. It is illegal to open, release or rollback any
                   50884:   ** such savepoints while the statement transaction savepoint is active.
                   50885:   */
                   50886:   rc = sqlite3PagerOpenSavepoint(pBt->pPager, iStatement);
                   50887:   sqlite3BtreeLeave(p);
                   50888:   return rc;
                   50889: }
                   50890: 
                   50891: /*
                   50892: ** The second argument to this function, op, is always SAVEPOINT_ROLLBACK
                   50893: ** or SAVEPOINT_RELEASE. This function either releases or rolls back the
                   50894: ** savepoint identified by parameter iSavepoint, depending on the value 
                   50895: ** of op.
                   50896: **
                   50897: ** Normally, iSavepoint is greater than or equal to zero. However, if op is
                   50898: ** SAVEPOINT_ROLLBACK, then iSavepoint may also be -1. In this case the 
                   50899: ** contents of the entire transaction are rolled back. This is different
                   50900: ** from a normal transaction rollback, as no locks are released and the
                   50901: ** transaction remains open.
                   50902: */
                   50903: SQLITE_PRIVATE int sqlite3BtreeSavepoint(Btree *p, int op, int iSavepoint){
                   50904:   int rc = SQLITE_OK;
                   50905:   if( p && p->inTrans==TRANS_WRITE ){
                   50906:     BtShared *pBt = p->pBt;
                   50907:     assert( op==SAVEPOINT_RELEASE || op==SAVEPOINT_ROLLBACK );
                   50908:     assert( iSavepoint>=0 || (iSavepoint==-1 && op==SAVEPOINT_ROLLBACK) );
                   50909:     sqlite3BtreeEnter(p);
                   50910:     rc = sqlite3PagerSavepoint(pBt->pPager, op, iSavepoint);
                   50911:     if( rc==SQLITE_OK ){
                   50912:       if( iSavepoint<0 && pBt->initiallyEmpty ) pBt->nPage = 0;
                   50913:       rc = newDatabase(pBt);
                   50914:       pBt->nPage = get4byte(28 + pBt->pPage1->aData);
                   50915: 
                   50916:       /* The database size was written into the offset 28 of the header
                   50917:       ** when the transaction started, so we know that the value at offset
                   50918:       ** 28 is nonzero. */
                   50919:       assert( pBt->nPage>0 );
                   50920:     }
                   50921:     sqlite3BtreeLeave(p);
                   50922:   }
                   50923:   return rc;
                   50924: }
                   50925: 
                   50926: /*
                   50927: ** Create a new cursor for the BTree whose root is on the page
                   50928: ** iTable. If a read-only cursor is requested, it is assumed that
                   50929: ** the caller already has at least a read-only transaction open
                   50930: ** on the database already. If a write-cursor is requested, then
                   50931: ** the caller is assumed to have an open write transaction.
                   50932: **
                   50933: ** If wrFlag==0, then the cursor can only be used for reading.
                   50934: ** If wrFlag==1, then the cursor can be used for reading or for
                   50935: ** writing if other conditions for writing are also met.  These
                   50936: ** are the conditions that must be met in order for writing to
                   50937: ** be allowed:
                   50938: **
                   50939: ** 1:  The cursor must have been opened with wrFlag==1
                   50940: **
                   50941: ** 2:  Other database connections that share the same pager cache
                   50942: **     but which are not in the READ_UNCOMMITTED state may not have
                   50943: **     cursors open with wrFlag==0 on the same table.  Otherwise
                   50944: **     the changes made by this write cursor would be visible to
                   50945: **     the read cursors in the other database connection.
                   50946: **
                   50947: ** 3:  The database must be writable (not on read-only media)
                   50948: **
                   50949: ** 4:  There must be an active transaction.
                   50950: **
                   50951: ** No checking is done to make sure that page iTable really is the
                   50952: ** root page of a b-tree.  If it is not, then the cursor acquired
                   50953: ** will not work correctly.
                   50954: **
                   50955: ** It is assumed that the sqlite3BtreeCursorZero() has been called
                   50956: ** on pCur to initialize the memory space prior to invoking this routine.
                   50957: */
                   50958: static int btreeCursor(
                   50959:   Btree *p,                              /* The btree */
                   50960:   int iTable,                            /* Root page of table to open */
                   50961:   int wrFlag,                            /* 1 to write. 0 read-only */
                   50962:   struct KeyInfo *pKeyInfo,              /* First arg to comparison function */
                   50963:   BtCursor *pCur                         /* Space for new cursor */
                   50964: ){
                   50965:   BtShared *pBt = p->pBt;                /* Shared b-tree handle */
                   50966: 
                   50967:   assert( sqlite3BtreeHoldsMutex(p) );
                   50968:   assert( wrFlag==0 || wrFlag==1 );
                   50969: 
                   50970:   /* The following assert statements verify that if this is a sharable 
                   50971:   ** b-tree database, the connection is holding the required table locks, 
                   50972:   ** and that no other connection has any open cursor that conflicts with 
                   50973:   ** this lock.  */
                   50974:   assert( hasSharedCacheTableLock(p, iTable, pKeyInfo!=0, wrFlag+1) );
                   50975:   assert( wrFlag==0 || !hasReadConflicts(p, iTable) );
                   50976: 
                   50977:   /* Assert that the caller has opened the required transaction. */
                   50978:   assert( p->inTrans>TRANS_NONE );
                   50979:   assert( wrFlag==0 || p->inTrans==TRANS_WRITE );
                   50980:   assert( pBt->pPage1 && pBt->pPage1->aData );
                   50981: 
                   50982:   if( NEVER(wrFlag && pBt->readOnly) ){
                   50983:     return SQLITE_READONLY;
                   50984:   }
                   50985:   if( iTable==1 && btreePagecount(pBt)==0 ){
                   50986:     return SQLITE_EMPTY;
                   50987:   }
                   50988: 
                   50989:   /* Now that no other errors can occur, finish filling in the BtCursor
                   50990:   ** variables and link the cursor into the BtShared list.  */
                   50991:   pCur->pgnoRoot = (Pgno)iTable;
                   50992:   pCur->iPage = -1;
                   50993:   pCur->pKeyInfo = pKeyInfo;
                   50994:   pCur->pBtree = p;
                   50995:   pCur->pBt = pBt;
                   50996:   pCur->wrFlag = (u8)wrFlag;
                   50997:   pCur->pNext = pBt->pCursor;
                   50998:   if( pCur->pNext ){
                   50999:     pCur->pNext->pPrev = pCur;
                   51000:   }
                   51001:   pBt->pCursor = pCur;
                   51002:   pCur->eState = CURSOR_INVALID;
                   51003:   pCur->cachedRowid = 0;
                   51004:   return SQLITE_OK;
                   51005: }
                   51006: SQLITE_PRIVATE int sqlite3BtreeCursor(
                   51007:   Btree *p,                                   /* The btree */
                   51008:   int iTable,                                 /* Root page of table to open */
                   51009:   int wrFlag,                                 /* 1 to write. 0 read-only */
                   51010:   struct KeyInfo *pKeyInfo,                   /* First arg to xCompare() */
                   51011:   BtCursor *pCur                              /* Write new cursor here */
                   51012: ){
                   51013:   int rc;
                   51014:   sqlite3BtreeEnter(p);
                   51015:   rc = btreeCursor(p, iTable, wrFlag, pKeyInfo, pCur);
                   51016:   sqlite3BtreeLeave(p);
                   51017:   return rc;
                   51018: }
                   51019: 
                   51020: /*
                   51021: ** Return the size of a BtCursor object in bytes.
                   51022: **
                   51023: ** This interfaces is needed so that users of cursors can preallocate
                   51024: ** sufficient storage to hold a cursor.  The BtCursor object is opaque
                   51025: ** to users so they cannot do the sizeof() themselves - they must call
                   51026: ** this routine.
                   51027: */
                   51028: SQLITE_PRIVATE int sqlite3BtreeCursorSize(void){
                   51029:   return ROUND8(sizeof(BtCursor));
                   51030: }
                   51031: 
                   51032: /*
                   51033: ** Initialize memory that will be converted into a BtCursor object.
                   51034: **
                   51035: ** The simple approach here would be to memset() the entire object
                   51036: ** to zero.  But it turns out that the apPage[] and aiIdx[] arrays
                   51037: ** do not need to be zeroed and they are large, so we can save a lot
                   51038: ** of run-time by skipping the initialization of those elements.
                   51039: */
                   51040: SQLITE_PRIVATE void sqlite3BtreeCursorZero(BtCursor *p){
                   51041:   memset(p, 0, offsetof(BtCursor, iPage));
                   51042: }
                   51043: 
                   51044: /*
                   51045: ** Set the cached rowid value of every cursor in the same database file
                   51046: ** as pCur and having the same root page number as pCur.  The value is
                   51047: ** set to iRowid.
                   51048: **
                   51049: ** Only positive rowid values are considered valid for this cache.
                   51050: ** The cache is initialized to zero, indicating an invalid cache.
                   51051: ** A btree will work fine with zero or negative rowids.  We just cannot
                   51052: ** cache zero or negative rowids, which means tables that use zero or
                   51053: ** negative rowids might run a little slower.  But in practice, zero
                   51054: ** or negative rowids are very uncommon so this should not be a problem.
                   51055: */
                   51056: SQLITE_PRIVATE void sqlite3BtreeSetCachedRowid(BtCursor *pCur, sqlite3_int64 iRowid){
                   51057:   BtCursor *p;
                   51058:   for(p=pCur->pBt->pCursor; p; p=p->pNext){
                   51059:     if( p->pgnoRoot==pCur->pgnoRoot ) p->cachedRowid = iRowid;
                   51060:   }
                   51061:   assert( pCur->cachedRowid==iRowid );
                   51062: }
                   51063: 
                   51064: /*
                   51065: ** Return the cached rowid for the given cursor.  A negative or zero
                   51066: ** return value indicates that the rowid cache is invalid and should be
                   51067: ** ignored.  If the rowid cache has never before been set, then a
                   51068: ** zero is returned.
                   51069: */
                   51070: SQLITE_PRIVATE sqlite3_int64 sqlite3BtreeGetCachedRowid(BtCursor *pCur){
                   51071:   return pCur->cachedRowid;
                   51072: }
                   51073: 
                   51074: /*
                   51075: ** Close a cursor.  The read lock on the database file is released
                   51076: ** when the last cursor is closed.
                   51077: */
                   51078: SQLITE_PRIVATE int sqlite3BtreeCloseCursor(BtCursor *pCur){
                   51079:   Btree *pBtree = pCur->pBtree;
                   51080:   if( pBtree ){
                   51081:     int i;
                   51082:     BtShared *pBt = pCur->pBt;
                   51083:     sqlite3BtreeEnter(pBtree);
                   51084:     sqlite3BtreeClearCursor(pCur);
                   51085:     if( pCur->pPrev ){
                   51086:       pCur->pPrev->pNext = pCur->pNext;
                   51087:     }else{
                   51088:       pBt->pCursor = pCur->pNext;
                   51089:     }
                   51090:     if( pCur->pNext ){
                   51091:       pCur->pNext->pPrev = pCur->pPrev;
                   51092:     }
                   51093:     for(i=0; i<=pCur->iPage; i++){
                   51094:       releasePage(pCur->apPage[i]);
                   51095:     }
                   51096:     unlockBtreeIfUnused(pBt);
                   51097:     invalidateOverflowCache(pCur);
                   51098:     /* sqlite3_free(pCur); */
                   51099:     sqlite3BtreeLeave(pBtree);
                   51100:   }
                   51101:   return SQLITE_OK;
                   51102: }
                   51103: 
                   51104: /*
                   51105: ** Make sure the BtCursor* given in the argument has a valid
                   51106: ** BtCursor.info structure.  If it is not already valid, call
                   51107: ** btreeParseCell() to fill it in.
                   51108: **
                   51109: ** BtCursor.info is a cache of the information in the current cell.
                   51110: ** Using this cache reduces the number of calls to btreeParseCell().
                   51111: **
                   51112: ** 2007-06-25:  There is a bug in some versions of MSVC that cause the
                   51113: ** compiler to crash when getCellInfo() is implemented as a macro.
                   51114: ** But there is a measureable speed advantage to using the macro on gcc
                   51115: ** (when less compiler optimizations like -Os or -O0 are used and the
                   51116: ** compiler is not doing agressive inlining.)  So we use a real function
                   51117: ** for MSVC and a macro for everything else.  Ticket #2457.
                   51118: */
                   51119: #ifndef NDEBUG
                   51120:   static void assertCellInfo(BtCursor *pCur){
                   51121:     CellInfo info;
                   51122:     int iPage = pCur->iPage;
                   51123:     memset(&info, 0, sizeof(info));
                   51124:     btreeParseCell(pCur->apPage[iPage], pCur->aiIdx[iPage], &info);
                   51125:     assert( memcmp(&info, &pCur->info, sizeof(info))==0 );
                   51126:   }
                   51127: #else
                   51128:   #define assertCellInfo(x)
                   51129: #endif
                   51130: #ifdef _MSC_VER
                   51131:   /* Use a real function in MSVC to work around bugs in that compiler. */
                   51132:   static void getCellInfo(BtCursor *pCur){
                   51133:     if( pCur->info.nSize==0 ){
                   51134:       int iPage = pCur->iPage;
                   51135:       btreeParseCell(pCur->apPage[iPage],pCur->aiIdx[iPage],&pCur->info);
                   51136:       pCur->validNKey = 1;
                   51137:     }else{
                   51138:       assertCellInfo(pCur);
                   51139:     }
                   51140:   }
                   51141: #else /* if not _MSC_VER */
                   51142:   /* Use a macro in all other compilers so that the function is inlined */
                   51143: #define getCellInfo(pCur)                                                      \
                   51144:   if( pCur->info.nSize==0 ){                                                   \
                   51145:     int iPage = pCur->iPage;                                                   \
                   51146:     btreeParseCell(pCur->apPage[iPage],pCur->aiIdx[iPage],&pCur->info); \
                   51147:     pCur->validNKey = 1;                                                       \
                   51148:   }else{                                                                       \
                   51149:     assertCellInfo(pCur);                                                      \
                   51150:   }
                   51151: #endif /* _MSC_VER */
                   51152: 
                   51153: #ifndef NDEBUG  /* The next routine used only within assert() statements */
                   51154: /*
                   51155: ** Return true if the given BtCursor is valid.  A valid cursor is one
                   51156: ** that is currently pointing to a row in a (non-empty) table.
                   51157: ** This is a verification routine is used only within assert() statements.
                   51158: */
                   51159: SQLITE_PRIVATE int sqlite3BtreeCursorIsValid(BtCursor *pCur){
                   51160:   return pCur && pCur->eState==CURSOR_VALID;
                   51161: }
                   51162: #endif /* NDEBUG */
                   51163: 
                   51164: /*
                   51165: ** Set *pSize to the size of the buffer needed to hold the value of
                   51166: ** the key for the current entry.  If the cursor is not pointing
                   51167: ** to a valid entry, *pSize is set to 0. 
                   51168: **
                   51169: ** For a table with the INTKEY flag set, this routine returns the key
                   51170: ** itself, not the number of bytes in the key.
                   51171: **
                   51172: ** The caller must position the cursor prior to invoking this routine.
                   51173: ** 
                   51174: ** This routine cannot fail.  It always returns SQLITE_OK.  
                   51175: */
                   51176: SQLITE_PRIVATE int sqlite3BtreeKeySize(BtCursor *pCur, i64 *pSize){
                   51177:   assert( cursorHoldsMutex(pCur) );
                   51178:   assert( pCur->eState==CURSOR_INVALID || pCur->eState==CURSOR_VALID );
                   51179:   if( pCur->eState!=CURSOR_VALID ){
                   51180:     *pSize = 0;
                   51181:   }else{
                   51182:     getCellInfo(pCur);
                   51183:     *pSize = pCur->info.nKey;
                   51184:   }
                   51185:   return SQLITE_OK;
                   51186: }
                   51187: 
                   51188: /*
                   51189: ** Set *pSize to the number of bytes of data in the entry the
                   51190: ** cursor currently points to.
                   51191: **
                   51192: ** The caller must guarantee that the cursor is pointing to a non-NULL
                   51193: ** valid entry.  In other words, the calling procedure must guarantee
                   51194: ** that the cursor has Cursor.eState==CURSOR_VALID.
                   51195: **
                   51196: ** Failure is not possible.  This function always returns SQLITE_OK.
                   51197: ** It might just as well be a procedure (returning void) but we continue
                   51198: ** to return an integer result code for historical reasons.
                   51199: */
                   51200: SQLITE_PRIVATE int sqlite3BtreeDataSize(BtCursor *pCur, u32 *pSize){
                   51201:   assert( cursorHoldsMutex(pCur) );
                   51202:   assert( pCur->eState==CURSOR_VALID );
                   51203:   getCellInfo(pCur);
                   51204:   *pSize = pCur->info.nData;
                   51205:   return SQLITE_OK;
                   51206: }
                   51207: 
                   51208: /*
                   51209: ** Given the page number of an overflow page in the database (parameter
                   51210: ** ovfl), this function finds the page number of the next page in the 
                   51211: ** linked list of overflow pages. If possible, it uses the auto-vacuum
                   51212: ** pointer-map data instead of reading the content of page ovfl to do so. 
                   51213: **
                   51214: ** If an error occurs an SQLite error code is returned. Otherwise:
                   51215: **
                   51216: ** The page number of the next overflow page in the linked list is 
                   51217: ** written to *pPgnoNext. If page ovfl is the last page in its linked 
                   51218: ** list, *pPgnoNext is set to zero. 
                   51219: **
                   51220: ** If ppPage is not NULL, and a reference to the MemPage object corresponding
                   51221: ** to page number pOvfl was obtained, then *ppPage is set to point to that
                   51222: ** reference. It is the responsibility of the caller to call releasePage()
                   51223: ** on *ppPage to free the reference. In no reference was obtained (because
                   51224: ** the pointer-map was used to obtain the value for *pPgnoNext), then
                   51225: ** *ppPage is set to zero.
                   51226: */
                   51227: static int getOverflowPage(
                   51228:   BtShared *pBt,               /* The database file */
                   51229:   Pgno ovfl,                   /* Current overflow page number */
                   51230:   MemPage **ppPage,            /* OUT: MemPage handle (may be NULL) */
                   51231:   Pgno *pPgnoNext              /* OUT: Next overflow page number */
                   51232: ){
                   51233:   Pgno next = 0;
                   51234:   MemPage *pPage = 0;
                   51235:   int rc = SQLITE_OK;
                   51236: 
                   51237:   assert( sqlite3_mutex_held(pBt->mutex) );
                   51238:   assert(pPgnoNext);
                   51239: 
                   51240: #ifndef SQLITE_OMIT_AUTOVACUUM
                   51241:   /* Try to find the next page in the overflow list using the
                   51242:   ** autovacuum pointer-map pages. Guess that the next page in 
                   51243:   ** the overflow list is page number (ovfl+1). If that guess turns 
                   51244:   ** out to be wrong, fall back to loading the data of page 
                   51245:   ** number ovfl to determine the next page number.
                   51246:   */
                   51247:   if( pBt->autoVacuum ){
                   51248:     Pgno pgno;
                   51249:     Pgno iGuess = ovfl+1;
                   51250:     u8 eType;
                   51251: 
                   51252:     while( PTRMAP_ISPAGE(pBt, iGuess) || iGuess==PENDING_BYTE_PAGE(pBt) ){
                   51253:       iGuess++;
                   51254:     }
                   51255: 
                   51256:     if( iGuess<=btreePagecount(pBt) ){
                   51257:       rc = ptrmapGet(pBt, iGuess, &eType, &pgno);
                   51258:       if( rc==SQLITE_OK && eType==PTRMAP_OVERFLOW2 && pgno==ovfl ){
                   51259:         next = iGuess;
                   51260:         rc = SQLITE_DONE;
                   51261:       }
                   51262:     }
                   51263:   }
                   51264: #endif
                   51265: 
                   51266:   assert( next==0 || rc==SQLITE_DONE );
                   51267:   if( rc==SQLITE_OK ){
                   51268:     rc = btreeGetPage(pBt, ovfl, &pPage, 0);
                   51269:     assert( rc==SQLITE_OK || pPage==0 );
                   51270:     if( rc==SQLITE_OK ){
                   51271:       next = get4byte(pPage->aData);
                   51272:     }
                   51273:   }
                   51274: 
                   51275:   *pPgnoNext = next;
                   51276:   if( ppPage ){
                   51277:     *ppPage = pPage;
                   51278:   }else{
                   51279:     releasePage(pPage);
                   51280:   }
                   51281:   return (rc==SQLITE_DONE ? SQLITE_OK : rc);
                   51282: }
                   51283: 
                   51284: /*
                   51285: ** Copy data from a buffer to a page, or from a page to a buffer.
                   51286: **
                   51287: ** pPayload is a pointer to data stored on database page pDbPage.
                   51288: ** If argument eOp is false, then nByte bytes of data are copied
                   51289: ** from pPayload to the buffer pointed at by pBuf. If eOp is true,
                   51290: ** then sqlite3PagerWrite() is called on pDbPage and nByte bytes
                   51291: ** of data are copied from the buffer pBuf to pPayload.
                   51292: **
                   51293: ** SQLITE_OK is returned on success, otherwise an error code.
                   51294: */
                   51295: static int copyPayload(
                   51296:   void *pPayload,           /* Pointer to page data */
                   51297:   void *pBuf,               /* Pointer to buffer */
                   51298:   int nByte,                /* Number of bytes to copy */
                   51299:   int eOp,                  /* 0 -> copy from page, 1 -> copy to page */
                   51300:   DbPage *pDbPage           /* Page containing pPayload */
                   51301: ){
                   51302:   if( eOp ){
                   51303:     /* Copy data from buffer to page (a write operation) */
                   51304:     int rc = sqlite3PagerWrite(pDbPage);
                   51305:     if( rc!=SQLITE_OK ){
                   51306:       return rc;
                   51307:     }
                   51308:     memcpy(pPayload, pBuf, nByte);
                   51309:   }else{
                   51310:     /* Copy data from page to buffer (a read operation) */
                   51311:     memcpy(pBuf, pPayload, nByte);
                   51312:   }
                   51313:   return SQLITE_OK;
                   51314: }
                   51315: 
                   51316: /*
                   51317: ** This function is used to read or overwrite payload information
                   51318: ** for the entry that the pCur cursor is pointing to. If the eOp
                   51319: ** parameter is 0, this is a read operation (data copied into
                   51320: ** buffer pBuf). If it is non-zero, a write (data copied from
                   51321: ** buffer pBuf).
                   51322: **
                   51323: ** A total of "amt" bytes are read or written beginning at "offset".
                   51324: ** Data is read to or from the buffer pBuf.
                   51325: **
                   51326: ** The content being read or written might appear on the main page
                   51327: ** or be scattered out on multiple overflow pages.
                   51328: **
                   51329: ** If the BtCursor.isIncrblobHandle flag is set, and the current
                   51330: ** cursor entry uses one or more overflow pages, this function
                   51331: ** allocates space for and lazily popluates the overflow page-list 
                   51332: ** cache array (BtCursor.aOverflow). Subsequent calls use this
                   51333: ** cache to make seeking to the supplied offset more efficient.
                   51334: **
                   51335: ** Once an overflow page-list cache has been allocated, it may be
                   51336: ** invalidated if some other cursor writes to the same table, or if
                   51337: ** the cursor is moved to a different row. Additionally, in auto-vacuum
                   51338: ** mode, the following events may invalidate an overflow page-list cache.
                   51339: **
                   51340: **   * An incremental vacuum,
                   51341: **   * A commit in auto_vacuum="full" mode,
                   51342: **   * Creating a table (may require moving an overflow page).
                   51343: */
                   51344: static int accessPayload(
                   51345:   BtCursor *pCur,      /* Cursor pointing to entry to read from */
                   51346:   u32 offset,          /* Begin reading this far into payload */
                   51347:   u32 amt,             /* Read this many bytes */
                   51348:   unsigned char *pBuf, /* Write the bytes into this buffer */ 
                   51349:   int eOp              /* zero to read. non-zero to write. */
                   51350: ){
                   51351:   unsigned char *aPayload;
                   51352:   int rc = SQLITE_OK;
                   51353:   u32 nKey;
                   51354:   int iIdx = 0;
                   51355:   MemPage *pPage = pCur->apPage[pCur->iPage]; /* Btree page of current entry */
                   51356:   BtShared *pBt = pCur->pBt;                  /* Btree this cursor belongs to */
                   51357: 
                   51358:   assert( pPage );
                   51359:   assert( pCur->eState==CURSOR_VALID );
                   51360:   assert( pCur->aiIdx[pCur->iPage]<pPage->nCell );
                   51361:   assert( cursorHoldsMutex(pCur) );
                   51362: 
                   51363:   getCellInfo(pCur);
                   51364:   aPayload = pCur->info.pCell + pCur->info.nHeader;
                   51365:   nKey = (pPage->intKey ? 0 : (int)pCur->info.nKey);
                   51366: 
                   51367:   if( NEVER(offset+amt > nKey+pCur->info.nData) 
                   51368:    || &aPayload[pCur->info.nLocal] > &pPage->aData[pBt->usableSize]
                   51369:   ){
                   51370:     /* Trying to read or write past the end of the data is an error */
                   51371:     return SQLITE_CORRUPT_BKPT;
                   51372:   }
                   51373: 
                   51374:   /* Check if data must be read/written to/from the btree page itself. */
                   51375:   if( offset<pCur->info.nLocal ){
                   51376:     int a = amt;
                   51377:     if( a+offset>pCur->info.nLocal ){
                   51378:       a = pCur->info.nLocal - offset;
                   51379:     }
                   51380:     rc = copyPayload(&aPayload[offset], pBuf, a, eOp, pPage->pDbPage);
                   51381:     offset = 0;
                   51382:     pBuf += a;
                   51383:     amt -= a;
                   51384:   }else{
                   51385:     offset -= pCur->info.nLocal;
                   51386:   }
                   51387: 
                   51388:   if( rc==SQLITE_OK && amt>0 ){
                   51389:     const u32 ovflSize = pBt->usableSize - 4;  /* Bytes content per ovfl page */
                   51390:     Pgno nextPage;
                   51391: 
                   51392:     nextPage = get4byte(&aPayload[pCur->info.nLocal]);
                   51393: 
                   51394: #ifndef SQLITE_OMIT_INCRBLOB
                   51395:     /* If the isIncrblobHandle flag is set and the BtCursor.aOverflow[]
                   51396:     ** has not been allocated, allocate it now. The array is sized at
                   51397:     ** one entry for each overflow page in the overflow chain. The
                   51398:     ** page number of the first overflow page is stored in aOverflow[0],
                   51399:     ** etc. A value of 0 in the aOverflow[] array means "not yet known"
                   51400:     ** (the cache is lazily populated).
                   51401:     */
                   51402:     if( pCur->isIncrblobHandle && !pCur->aOverflow ){
                   51403:       int nOvfl = (pCur->info.nPayload-pCur->info.nLocal+ovflSize-1)/ovflSize;
                   51404:       pCur->aOverflow = (Pgno *)sqlite3MallocZero(sizeof(Pgno)*nOvfl);
                   51405:       /* nOvfl is always positive.  If it were zero, fetchPayload would have
                   51406:       ** been used instead of this routine. */
                   51407:       if( ALWAYS(nOvfl) && !pCur->aOverflow ){
                   51408:         rc = SQLITE_NOMEM;
                   51409:       }
                   51410:     }
                   51411: 
                   51412:     /* If the overflow page-list cache has been allocated and the
                   51413:     ** entry for the first required overflow page is valid, skip
                   51414:     ** directly to it.
                   51415:     */
                   51416:     if( pCur->aOverflow && pCur->aOverflow[offset/ovflSize] ){
                   51417:       iIdx = (offset/ovflSize);
                   51418:       nextPage = pCur->aOverflow[iIdx];
                   51419:       offset = (offset%ovflSize);
                   51420:     }
                   51421: #endif
                   51422: 
                   51423:     for( ; rc==SQLITE_OK && amt>0 && nextPage; iIdx++){
                   51424: 
                   51425: #ifndef SQLITE_OMIT_INCRBLOB
                   51426:       /* If required, populate the overflow page-list cache. */
                   51427:       if( pCur->aOverflow ){
                   51428:         assert(!pCur->aOverflow[iIdx] || pCur->aOverflow[iIdx]==nextPage);
                   51429:         pCur->aOverflow[iIdx] = nextPage;
                   51430:       }
                   51431: #endif
                   51432: 
                   51433:       if( offset>=ovflSize ){
                   51434:         /* The only reason to read this page is to obtain the page
                   51435:         ** number for the next page in the overflow chain. The page
                   51436:         ** data is not required. So first try to lookup the overflow
                   51437:         ** page-list cache, if any, then fall back to the getOverflowPage()
                   51438:         ** function.
                   51439:         */
                   51440: #ifndef SQLITE_OMIT_INCRBLOB
                   51441:         if( pCur->aOverflow && pCur->aOverflow[iIdx+1] ){
                   51442:           nextPage = pCur->aOverflow[iIdx+1];
                   51443:         } else 
                   51444: #endif
                   51445:           rc = getOverflowPage(pBt, nextPage, 0, &nextPage);
                   51446:         offset -= ovflSize;
                   51447:       }else{
                   51448:         /* Need to read this page properly. It contains some of the
                   51449:         ** range of data that is being read (eOp==0) or written (eOp!=0).
                   51450:         */
                   51451:         DbPage *pDbPage;
                   51452:         int a = amt;
                   51453:         rc = sqlite3PagerGet(pBt->pPager, nextPage, &pDbPage);
                   51454:         if( rc==SQLITE_OK ){
                   51455:           aPayload = sqlite3PagerGetData(pDbPage);
                   51456:           nextPage = get4byte(aPayload);
                   51457:           if( a + offset > ovflSize ){
                   51458:             a = ovflSize - offset;
                   51459:           }
                   51460:           rc = copyPayload(&aPayload[offset+4], pBuf, a, eOp, pDbPage);
                   51461:           sqlite3PagerUnref(pDbPage);
                   51462:           offset = 0;
                   51463:           amt -= a;
                   51464:           pBuf += a;
                   51465:         }
                   51466:       }
                   51467:     }
                   51468:   }
                   51469: 
                   51470:   if( rc==SQLITE_OK && amt>0 ){
                   51471:     return SQLITE_CORRUPT_BKPT;
                   51472:   }
                   51473:   return rc;
                   51474: }
                   51475: 
                   51476: /*
                   51477: ** Read part of the key associated with cursor pCur.  Exactly
                   51478: ** "amt" bytes will be transfered into pBuf[].  The transfer
                   51479: ** begins at "offset".
                   51480: **
                   51481: ** The caller must ensure that pCur is pointing to a valid row
                   51482: ** in the table.
                   51483: **
                   51484: ** Return SQLITE_OK on success or an error code if anything goes
                   51485: ** wrong.  An error is returned if "offset+amt" is larger than
                   51486: ** the available payload.
                   51487: */
                   51488: SQLITE_PRIVATE int sqlite3BtreeKey(BtCursor *pCur, u32 offset, u32 amt, void *pBuf){
                   51489:   assert( cursorHoldsMutex(pCur) );
                   51490:   assert( pCur->eState==CURSOR_VALID );
                   51491:   assert( pCur->iPage>=0 && pCur->apPage[pCur->iPage] );
                   51492:   assert( pCur->aiIdx[pCur->iPage]<pCur->apPage[pCur->iPage]->nCell );
                   51493:   return accessPayload(pCur, offset, amt, (unsigned char*)pBuf, 0);
                   51494: }
                   51495: 
                   51496: /*
                   51497: ** Read part of the data associated with cursor pCur.  Exactly
                   51498: ** "amt" bytes will be transfered into pBuf[].  The transfer
                   51499: ** begins at "offset".
                   51500: **
                   51501: ** Return SQLITE_OK on success or an error code if anything goes
                   51502: ** wrong.  An error is returned if "offset+amt" is larger than
                   51503: ** the available payload.
                   51504: */
                   51505: SQLITE_PRIVATE int sqlite3BtreeData(BtCursor *pCur, u32 offset, u32 amt, void *pBuf){
                   51506:   int rc;
                   51507: 
                   51508: #ifndef SQLITE_OMIT_INCRBLOB
                   51509:   if ( pCur->eState==CURSOR_INVALID ){
                   51510:     return SQLITE_ABORT;
                   51511:   }
                   51512: #endif
                   51513: 
                   51514:   assert( cursorHoldsMutex(pCur) );
                   51515:   rc = restoreCursorPosition(pCur);
                   51516:   if( rc==SQLITE_OK ){
                   51517:     assert( pCur->eState==CURSOR_VALID );
                   51518:     assert( pCur->iPage>=0 && pCur->apPage[pCur->iPage] );
                   51519:     assert( pCur->aiIdx[pCur->iPage]<pCur->apPage[pCur->iPage]->nCell );
                   51520:     rc = accessPayload(pCur, offset, amt, pBuf, 0);
                   51521:   }
                   51522:   return rc;
                   51523: }
                   51524: 
                   51525: /*
                   51526: ** Return a pointer to payload information from the entry that the 
                   51527: ** pCur cursor is pointing to.  The pointer is to the beginning of
                   51528: ** the key if skipKey==0 and it points to the beginning of data if
                   51529: ** skipKey==1.  The number of bytes of available key/data is written
                   51530: ** into *pAmt.  If *pAmt==0, then the value returned will not be
                   51531: ** a valid pointer.
                   51532: **
                   51533: ** This routine is an optimization.  It is common for the entire key
                   51534: ** and data to fit on the local page and for there to be no overflow
                   51535: ** pages.  When that is so, this routine can be used to access the
                   51536: ** key and data without making a copy.  If the key and/or data spills
                   51537: ** onto overflow pages, then accessPayload() must be used to reassemble
                   51538: ** the key/data and copy it into a preallocated buffer.
                   51539: **
                   51540: ** The pointer returned by this routine looks directly into the cached
                   51541: ** page of the database.  The data might change or move the next time
                   51542: ** any btree routine is called.
                   51543: */
                   51544: static const unsigned char *fetchPayload(
                   51545:   BtCursor *pCur,      /* Cursor pointing to entry to read from */
                   51546:   int *pAmt,           /* Write the number of available bytes here */
                   51547:   int skipKey          /* read beginning at data if this is true */
                   51548: ){
                   51549:   unsigned char *aPayload;
                   51550:   MemPage *pPage;
                   51551:   u32 nKey;
                   51552:   u32 nLocal;
                   51553: 
                   51554:   assert( pCur!=0 && pCur->iPage>=0 && pCur->apPage[pCur->iPage]);
                   51555:   assert( pCur->eState==CURSOR_VALID );
                   51556:   assert( cursorHoldsMutex(pCur) );
                   51557:   pPage = pCur->apPage[pCur->iPage];
                   51558:   assert( pCur->aiIdx[pCur->iPage]<pPage->nCell );
                   51559:   if( NEVER(pCur->info.nSize==0) ){
                   51560:     btreeParseCell(pCur->apPage[pCur->iPage], pCur->aiIdx[pCur->iPage],
                   51561:                    &pCur->info);
                   51562:   }
                   51563:   aPayload = pCur->info.pCell;
                   51564:   aPayload += pCur->info.nHeader;
                   51565:   if( pPage->intKey ){
                   51566:     nKey = 0;
                   51567:   }else{
                   51568:     nKey = (int)pCur->info.nKey;
                   51569:   }
                   51570:   if( skipKey ){
                   51571:     aPayload += nKey;
                   51572:     nLocal = pCur->info.nLocal - nKey;
                   51573:   }else{
                   51574:     nLocal = pCur->info.nLocal;
                   51575:     assert( nLocal<=nKey );
                   51576:   }
                   51577:   *pAmt = nLocal;
                   51578:   return aPayload;
                   51579: }
                   51580: 
                   51581: 
                   51582: /*
                   51583: ** For the entry that cursor pCur is point to, return as
                   51584: ** many bytes of the key or data as are available on the local
                   51585: ** b-tree page.  Write the number of available bytes into *pAmt.
                   51586: **
                   51587: ** The pointer returned is ephemeral.  The key/data may move
                   51588: ** or be destroyed on the next call to any Btree routine,
                   51589: ** including calls from other threads against the same cache.
                   51590: ** Hence, a mutex on the BtShared should be held prior to calling
                   51591: ** this routine.
                   51592: **
                   51593: ** These routines is used to get quick access to key and data
                   51594: ** in the common case where no overflow pages are used.
                   51595: */
                   51596: SQLITE_PRIVATE const void *sqlite3BtreeKeyFetch(BtCursor *pCur, int *pAmt){
                   51597:   const void *p = 0;
                   51598:   assert( sqlite3_mutex_held(pCur->pBtree->db->mutex) );
                   51599:   assert( cursorHoldsMutex(pCur) );
                   51600:   if( ALWAYS(pCur->eState==CURSOR_VALID) ){
                   51601:     p = (const void*)fetchPayload(pCur, pAmt, 0);
                   51602:   }
                   51603:   return p;
                   51604: }
                   51605: SQLITE_PRIVATE const void *sqlite3BtreeDataFetch(BtCursor *pCur, int *pAmt){
                   51606:   const void *p = 0;
                   51607:   assert( sqlite3_mutex_held(pCur->pBtree->db->mutex) );
                   51608:   assert( cursorHoldsMutex(pCur) );
                   51609:   if( ALWAYS(pCur->eState==CURSOR_VALID) ){
                   51610:     p = (const void*)fetchPayload(pCur, pAmt, 1);
                   51611:   }
                   51612:   return p;
                   51613: }
                   51614: 
                   51615: 
                   51616: /*
                   51617: ** Move the cursor down to a new child page.  The newPgno argument is the
                   51618: ** page number of the child page to move to.
                   51619: **
                   51620: ** This function returns SQLITE_CORRUPT if the page-header flags field of
                   51621: ** the new child page does not match the flags field of the parent (i.e.
                   51622: ** if an intkey page appears to be the parent of a non-intkey page, or
                   51623: ** vice-versa).
                   51624: */
                   51625: static int moveToChild(BtCursor *pCur, u32 newPgno){
                   51626:   int rc;
                   51627:   int i = pCur->iPage;
                   51628:   MemPage *pNewPage;
                   51629:   BtShared *pBt = pCur->pBt;
                   51630: 
                   51631:   assert( cursorHoldsMutex(pCur) );
                   51632:   assert( pCur->eState==CURSOR_VALID );
                   51633:   assert( pCur->iPage<BTCURSOR_MAX_DEPTH );
                   51634:   if( pCur->iPage>=(BTCURSOR_MAX_DEPTH-1) ){
                   51635:     return SQLITE_CORRUPT_BKPT;
                   51636:   }
                   51637:   rc = getAndInitPage(pBt, newPgno, &pNewPage);
                   51638:   if( rc ) return rc;
                   51639:   pCur->apPage[i+1] = pNewPage;
                   51640:   pCur->aiIdx[i+1] = 0;
                   51641:   pCur->iPage++;
                   51642: 
                   51643:   pCur->info.nSize = 0;
                   51644:   pCur->validNKey = 0;
                   51645:   if( pNewPage->nCell<1 || pNewPage->intKey!=pCur->apPage[i]->intKey ){
                   51646:     return SQLITE_CORRUPT_BKPT;
                   51647:   }
                   51648:   return SQLITE_OK;
                   51649: }
                   51650: 
                   51651: #ifndef NDEBUG
                   51652: /*
                   51653: ** Page pParent is an internal (non-leaf) tree page. This function 
                   51654: ** asserts that page number iChild is the left-child if the iIdx'th
                   51655: ** cell in page pParent. Or, if iIdx is equal to the total number of
                   51656: ** cells in pParent, that page number iChild is the right-child of
                   51657: ** the page.
                   51658: */
                   51659: static void assertParentIndex(MemPage *pParent, int iIdx, Pgno iChild){
                   51660:   assert( iIdx<=pParent->nCell );
                   51661:   if( iIdx==pParent->nCell ){
                   51662:     assert( get4byte(&pParent->aData[pParent->hdrOffset+8])==iChild );
                   51663:   }else{
                   51664:     assert( get4byte(findCell(pParent, iIdx))==iChild );
                   51665:   }
                   51666: }
                   51667: #else
                   51668: #  define assertParentIndex(x,y,z) 
                   51669: #endif
                   51670: 
                   51671: /*
                   51672: ** Move the cursor up to the parent page.
                   51673: **
                   51674: ** pCur->idx is set to the cell index that contains the pointer
                   51675: ** to the page we are coming from.  If we are coming from the
                   51676: ** right-most child page then pCur->idx is set to one more than
                   51677: ** the largest cell index.
                   51678: */
                   51679: static void moveToParent(BtCursor *pCur){
                   51680:   assert( cursorHoldsMutex(pCur) );
                   51681:   assert( pCur->eState==CURSOR_VALID );
                   51682:   assert( pCur->iPage>0 );
                   51683:   assert( pCur->apPage[pCur->iPage] );
                   51684:   assertParentIndex(
                   51685:     pCur->apPage[pCur->iPage-1], 
                   51686:     pCur->aiIdx[pCur->iPage-1], 
                   51687:     pCur->apPage[pCur->iPage]->pgno
                   51688:   );
                   51689:   releasePage(pCur->apPage[pCur->iPage]);
                   51690:   pCur->iPage--;
                   51691:   pCur->info.nSize = 0;
                   51692:   pCur->validNKey = 0;
                   51693: }
                   51694: 
                   51695: /*
                   51696: ** Move the cursor to point to the root page of its b-tree structure.
                   51697: **
                   51698: ** If the table has a virtual root page, then the cursor is moved to point
                   51699: ** to the virtual root page instead of the actual root page. A table has a
                   51700: ** virtual root page when the actual root page contains no cells and a 
                   51701: ** single child page. This can only happen with the table rooted at page 1.
                   51702: **
                   51703: ** If the b-tree structure is empty, the cursor state is set to 
                   51704: ** CURSOR_INVALID. Otherwise, the cursor is set to point to the first
                   51705: ** cell located on the root (or virtual root) page and the cursor state
                   51706: ** is set to CURSOR_VALID.
                   51707: **
                   51708: ** If this function returns successfully, it may be assumed that the
                   51709: ** page-header flags indicate that the [virtual] root-page is the expected 
                   51710: ** kind of b-tree page (i.e. if when opening the cursor the caller did not
                   51711: ** specify a KeyInfo structure the flags byte is set to 0x05 or 0x0D,
                   51712: ** indicating a table b-tree, or if the caller did specify a KeyInfo 
                   51713: ** structure the flags byte is set to 0x02 or 0x0A, indicating an index
                   51714: ** b-tree).
                   51715: */
                   51716: static int moveToRoot(BtCursor *pCur){
                   51717:   MemPage *pRoot;
                   51718:   int rc = SQLITE_OK;
                   51719:   Btree *p = pCur->pBtree;
                   51720:   BtShared *pBt = p->pBt;
                   51721: 
                   51722:   assert( cursorHoldsMutex(pCur) );
                   51723:   assert( CURSOR_INVALID < CURSOR_REQUIRESEEK );
                   51724:   assert( CURSOR_VALID   < CURSOR_REQUIRESEEK );
                   51725:   assert( CURSOR_FAULT   > CURSOR_REQUIRESEEK );
                   51726:   if( pCur->eState>=CURSOR_REQUIRESEEK ){
                   51727:     if( pCur->eState==CURSOR_FAULT ){
                   51728:       assert( pCur->skipNext!=SQLITE_OK );
                   51729:       return pCur->skipNext;
                   51730:     }
                   51731:     sqlite3BtreeClearCursor(pCur);
                   51732:   }
                   51733: 
                   51734:   if( pCur->iPage>=0 ){
                   51735:     int i;
                   51736:     for(i=1; i<=pCur->iPage; i++){
                   51737:       releasePage(pCur->apPage[i]);
                   51738:     }
                   51739:     pCur->iPage = 0;
                   51740:   }else{
                   51741:     rc = getAndInitPage(pBt, pCur->pgnoRoot, &pCur->apPage[0]);
                   51742:     if( rc!=SQLITE_OK ){
                   51743:       pCur->eState = CURSOR_INVALID;
                   51744:       return rc;
                   51745:     }
                   51746:     pCur->iPage = 0;
                   51747: 
                   51748:     /* If pCur->pKeyInfo is not NULL, then the caller that opened this cursor
                   51749:     ** expected to open it on an index b-tree. Otherwise, if pKeyInfo is
                   51750:     ** NULL, the caller expects a table b-tree. If this is not the case,
                   51751:     ** return an SQLITE_CORRUPT error.  */
                   51752:     assert( pCur->apPage[0]->intKey==1 || pCur->apPage[0]->intKey==0 );
                   51753:     if( (pCur->pKeyInfo==0)!=pCur->apPage[0]->intKey ){
                   51754:       return SQLITE_CORRUPT_BKPT;
                   51755:     }
                   51756:   }
                   51757: 
                   51758:   /* Assert that the root page is of the correct type. This must be the
                   51759:   ** case as the call to this function that loaded the root-page (either
                   51760:   ** this call or a previous invocation) would have detected corruption 
                   51761:   ** if the assumption were not true, and it is not possible for the flags 
                   51762:   ** byte to have been modified while this cursor is holding a reference
                   51763:   ** to the page.  */
                   51764:   pRoot = pCur->apPage[0];
                   51765:   assert( pRoot->pgno==pCur->pgnoRoot );
                   51766:   assert( pRoot->isInit && (pCur->pKeyInfo==0)==pRoot->intKey );
                   51767: 
                   51768:   pCur->aiIdx[0] = 0;
                   51769:   pCur->info.nSize = 0;
                   51770:   pCur->atLast = 0;
                   51771:   pCur->validNKey = 0;
                   51772: 
                   51773:   if( pRoot->nCell==0 && !pRoot->leaf ){
                   51774:     Pgno subpage;
                   51775:     if( pRoot->pgno!=1 ) return SQLITE_CORRUPT_BKPT;
                   51776:     subpage = get4byte(&pRoot->aData[pRoot->hdrOffset+8]);
                   51777:     pCur->eState = CURSOR_VALID;
                   51778:     rc = moveToChild(pCur, subpage);
                   51779:   }else{
                   51780:     pCur->eState = ((pRoot->nCell>0)?CURSOR_VALID:CURSOR_INVALID);
                   51781:   }
                   51782:   return rc;
                   51783: }
                   51784: 
                   51785: /*
                   51786: ** Move the cursor down to the left-most leaf entry beneath the
                   51787: ** entry to which it is currently pointing.
                   51788: **
                   51789: ** The left-most leaf is the one with the smallest key - the first
                   51790: ** in ascending order.
                   51791: */
                   51792: static int moveToLeftmost(BtCursor *pCur){
                   51793:   Pgno pgno;
                   51794:   int rc = SQLITE_OK;
                   51795:   MemPage *pPage;
                   51796: 
                   51797:   assert( cursorHoldsMutex(pCur) );
                   51798:   assert( pCur->eState==CURSOR_VALID );
                   51799:   while( rc==SQLITE_OK && !(pPage = pCur->apPage[pCur->iPage])->leaf ){
                   51800:     assert( pCur->aiIdx[pCur->iPage]<pPage->nCell );
                   51801:     pgno = get4byte(findCell(pPage, pCur->aiIdx[pCur->iPage]));
                   51802:     rc = moveToChild(pCur, pgno);
                   51803:   }
                   51804:   return rc;
                   51805: }
                   51806: 
                   51807: /*
                   51808: ** Move the cursor down to the right-most leaf entry beneath the
                   51809: ** page to which it is currently pointing.  Notice the difference
                   51810: ** between moveToLeftmost() and moveToRightmost().  moveToLeftmost()
                   51811: ** finds the left-most entry beneath the *entry* whereas moveToRightmost()
                   51812: ** finds the right-most entry beneath the *page*.
                   51813: **
                   51814: ** The right-most entry is the one with the largest key - the last
                   51815: ** key in ascending order.
                   51816: */
                   51817: static int moveToRightmost(BtCursor *pCur){
                   51818:   Pgno pgno;
                   51819:   int rc = SQLITE_OK;
                   51820:   MemPage *pPage = 0;
                   51821: 
                   51822:   assert( cursorHoldsMutex(pCur) );
                   51823:   assert( pCur->eState==CURSOR_VALID );
                   51824:   while( rc==SQLITE_OK && !(pPage = pCur->apPage[pCur->iPage])->leaf ){
                   51825:     pgno = get4byte(&pPage->aData[pPage->hdrOffset+8]);
                   51826:     pCur->aiIdx[pCur->iPage] = pPage->nCell;
                   51827:     rc = moveToChild(pCur, pgno);
                   51828:   }
                   51829:   if( rc==SQLITE_OK ){
                   51830:     pCur->aiIdx[pCur->iPage] = pPage->nCell-1;
                   51831:     pCur->info.nSize = 0;
                   51832:     pCur->validNKey = 0;
                   51833:   }
                   51834:   return rc;
                   51835: }
                   51836: 
                   51837: /* Move the cursor to the first entry in the table.  Return SQLITE_OK
                   51838: ** on success.  Set *pRes to 0 if the cursor actually points to something
                   51839: ** or set *pRes to 1 if the table is empty.
                   51840: */
                   51841: SQLITE_PRIVATE int sqlite3BtreeFirst(BtCursor *pCur, int *pRes){
                   51842:   int rc;
                   51843: 
                   51844:   assert( cursorHoldsMutex(pCur) );
                   51845:   assert( sqlite3_mutex_held(pCur->pBtree->db->mutex) );
                   51846:   rc = moveToRoot(pCur);
                   51847:   if( rc==SQLITE_OK ){
                   51848:     if( pCur->eState==CURSOR_INVALID ){
                   51849:       assert( pCur->apPage[pCur->iPage]->nCell==0 );
                   51850:       *pRes = 1;
                   51851:     }else{
                   51852:       assert( pCur->apPage[pCur->iPage]->nCell>0 );
                   51853:       *pRes = 0;
                   51854:       rc = moveToLeftmost(pCur);
                   51855:     }
                   51856:   }
                   51857:   return rc;
                   51858: }
                   51859: 
                   51860: /* Move the cursor to the last entry in the table.  Return SQLITE_OK
                   51861: ** on success.  Set *pRes to 0 if the cursor actually points to something
                   51862: ** or set *pRes to 1 if the table is empty.
                   51863: */
                   51864: SQLITE_PRIVATE int sqlite3BtreeLast(BtCursor *pCur, int *pRes){
                   51865:   int rc;
                   51866:  
                   51867:   assert( cursorHoldsMutex(pCur) );
                   51868:   assert( sqlite3_mutex_held(pCur->pBtree->db->mutex) );
                   51869: 
                   51870:   /* If the cursor already points to the last entry, this is a no-op. */
                   51871:   if( CURSOR_VALID==pCur->eState && pCur->atLast ){
                   51872: #ifdef SQLITE_DEBUG
                   51873:     /* This block serves to assert() that the cursor really does point 
                   51874:     ** to the last entry in the b-tree. */
                   51875:     int ii;
                   51876:     for(ii=0; ii<pCur->iPage; ii++){
                   51877:       assert( pCur->aiIdx[ii]==pCur->apPage[ii]->nCell );
                   51878:     }
                   51879:     assert( pCur->aiIdx[pCur->iPage]==pCur->apPage[pCur->iPage]->nCell-1 );
                   51880:     assert( pCur->apPage[pCur->iPage]->leaf );
                   51881: #endif
                   51882:     return SQLITE_OK;
                   51883:   }
                   51884: 
                   51885:   rc = moveToRoot(pCur);
                   51886:   if( rc==SQLITE_OK ){
                   51887:     if( CURSOR_INVALID==pCur->eState ){
                   51888:       assert( pCur->apPage[pCur->iPage]->nCell==0 );
                   51889:       *pRes = 1;
                   51890:     }else{
                   51891:       assert( pCur->eState==CURSOR_VALID );
                   51892:       *pRes = 0;
                   51893:       rc = moveToRightmost(pCur);
                   51894:       pCur->atLast = rc==SQLITE_OK ?1:0;
                   51895:     }
                   51896:   }
                   51897:   return rc;
                   51898: }
                   51899: 
                   51900: /* Move the cursor so that it points to an entry near the key 
                   51901: ** specified by pIdxKey or intKey.   Return a success code.
                   51902: **
                   51903: ** For INTKEY tables, the intKey parameter is used.  pIdxKey 
                   51904: ** must be NULL.  For index tables, pIdxKey is used and intKey
                   51905: ** is ignored.
                   51906: **
                   51907: ** If an exact match is not found, then the cursor is always
                   51908: ** left pointing at a leaf page which would hold the entry if it
                   51909: ** were present.  The cursor might point to an entry that comes
                   51910: ** before or after the key.
                   51911: **
                   51912: ** An integer is written into *pRes which is the result of
                   51913: ** comparing the key with the entry to which the cursor is 
                   51914: ** pointing.  The meaning of the integer written into
                   51915: ** *pRes is as follows:
                   51916: **
                   51917: **     *pRes<0      The cursor is left pointing at an entry that
                   51918: **                  is smaller than intKey/pIdxKey or if the table is empty
                   51919: **                  and the cursor is therefore left point to nothing.
                   51920: **
                   51921: **     *pRes==0     The cursor is left pointing at an entry that
                   51922: **                  exactly matches intKey/pIdxKey.
                   51923: **
                   51924: **     *pRes>0      The cursor is left pointing at an entry that
                   51925: **                  is larger than intKey/pIdxKey.
                   51926: **
                   51927: */
                   51928: SQLITE_PRIVATE int sqlite3BtreeMovetoUnpacked(
                   51929:   BtCursor *pCur,          /* The cursor to be moved */
                   51930:   UnpackedRecord *pIdxKey, /* Unpacked index key */
                   51931:   i64 intKey,              /* The table key */
                   51932:   int biasRight,           /* If true, bias the search to the high end */
                   51933:   int *pRes                /* Write search results here */
                   51934: ){
                   51935:   int rc;
                   51936: 
                   51937:   assert( cursorHoldsMutex(pCur) );
                   51938:   assert( sqlite3_mutex_held(pCur->pBtree->db->mutex) );
                   51939:   assert( pRes );
                   51940:   assert( (pIdxKey==0)==(pCur->pKeyInfo==0) );
                   51941: 
                   51942:   /* If the cursor is already positioned at the point we are trying
                   51943:   ** to move to, then just return without doing any work */
                   51944:   if( pCur->eState==CURSOR_VALID && pCur->validNKey 
                   51945:    && pCur->apPage[0]->intKey 
                   51946:   ){
                   51947:     if( pCur->info.nKey==intKey ){
                   51948:       *pRes = 0;
                   51949:       return SQLITE_OK;
                   51950:     }
                   51951:     if( pCur->atLast && pCur->info.nKey<intKey ){
                   51952:       *pRes = -1;
                   51953:       return SQLITE_OK;
                   51954:     }
                   51955:   }
                   51956: 
                   51957:   rc = moveToRoot(pCur);
                   51958:   if( rc ){
                   51959:     return rc;
                   51960:   }
                   51961:   assert( pCur->apPage[pCur->iPage] );
                   51962:   assert( pCur->apPage[pCur->iPage]->isInit );
                   51963:   assert( pCur->apPage[pCur->iPage]->nCell>0 || pCur->eState==CURSOR_INVALID );
                   51964:   if( pCur->eState==CURSOR_INVALID ){
                   51965:     *pRes = -1;
                   51966:     assert( pCur->apPage[pCur->iPage]->nCell==0 );
                   51967:     return SQLITE_OK;
                   51968:   }
                   51969:   assert( pCur->apPage[0]->intKey || pIdxKey );
                   51970:   for(;;){
                   51971:     int lwr, upr, idx;
                   51972:     Pgno chldPg;
                   51973:     MemPage *pPage = pCur->apPage[pCur->iPage];
                   51974:     int c;
                   51975: 
                   51976:     /* pPage->nCell must be greater than zero. If this is the root-page
                   51977:     ** the cursor would have been INVALID above and this for(;;) loop
                   51978:     ** not run. If this is not the root-page, then the moveToChild() routine
                   51979:     ** would have already detected db corruption. Similarly, pPage must
                   51980:     ** be the right kind (index or table) of b-tree page. Otherwise
                   51981:     ** a moveToChild() or moveToRoot() call would have detected corruption.  */
                   51982:     assert( pPage->nCell>0 );
                   51983:     assert( pPage->intKey==(pIdxKey==0) );
                   51984:     lwr = 0;
                   51985:     upr = pPage->nCell-1;
                   51986:     if( biasRight ){
                   51987:       pCur->aiIdx[pCur->iPage] = (u16)(idx = upr);
                   51988:     }else{
                   51989:       pCur->aiIdx[pCur->iPage] = (u16)(idx = (upr+lwr)/2);
                   51990:     }
                   51991:     for(;;){
                   51992:       u8 *pCell;                          /* Pointer to current cell in pPage */
                   51993: 
                   51994:       assert( idx==pCur->aiIdx[pCur->iPage] );
                   51995:       pCur->info.nSize = 0;
                   51996:       pCell = findCell(pPage, idx) + pPage->childPtrSize;
                   51997:       if( pPage->intKey ){
                   51998:         i64 nCellKey;
                   51999:         if( pPage->hasData ){
                   52000:           u32 dummy;
                   52001:           pCell += getVarint32(pCell, dummy);
                   52002:         }
                   52003:         getVarint(pCell, (u64*)&nCellKey);
                   52004:         if( nCellKey==intKey ){
                   52005:           c = 0;
                   52006:         }else if( nCellKey<intKey ){
                   52007:           c = -1;
                   52008:         }else{
                   52009:           assert( nCellKey>intKey );
                   52010:           c = +1;
                   52011:         }
                   52012:         pCur->validNKey = 1;
                   52013:         pCur->info.nKey = nCellKey;
                   52014:       }else{
                   52015:         /* The maximum supported page-size is 65536 bytes. This means that
                   52016:         ** the maximum number of record bytes stored on an index B-Tree
                   52017:         ** page is less than 16384 bytes and may be stored as a 2-byte
                   52018:         ** varint. This information is used to attempt to avoid parsing 
                   52019:         ** the entire cell by checking for the cases where the record is 
                   52020:         ** stored entirely within the b-tree page by inspecting the first 
                   52021:         ** 2 bytes of the cell.
                   52022:         */
                   52023:         int nCell = pCell[0];
                   52024:         if( !(nCell & 0x80) && nCell<=pPage->maxLocal ){
                   52025:           /* This branch runs if the record-size field of the cell is a
                   52026:           ** single byte varint and the record fits entirely on the main
                   52027:           ** b-tree page.  */
                   52028:           c = sqlite3VdbeRecordCompare(nCell, (void*)&pCell[1], pIdxKey);
                   52029:         }else if( !(pCell[1] & 0x80) 
                   52030:           && (nCell = ((nCell&0x7f)<<7) + pCell[1])<=pPage->maxLocal
                   52031:         ){
                   52032:           /* The record-size field is a 2 byte varint and the record 
                   52033:           ** fits entirely on the main b-tree page.  */
                   52034:           c = sqlite3VdbeRecordCompare(nCell, (void*)&pCell[2], pIdxKey);
                   52035:         }else{
                   52036:           /* The record flows over onto one or more overflow pages. In
                   52037:           ** this case the whole cell needs to be parsed, a buffer allocated
                   52038:           ** and accessPayload() used to retrieve the record into the
                   52039:           ** buffer before VdbeRecordCompare() can be called. */
                   52040:           void *pCellKey;
                   52041:           u8 * const pCellBody = pCell - pPage->childPtrSize;
                   52042:           btreeParseCellPtr(pPage, pCellBody, &pCur->info);
                   52043:           nCell = (int)pCur->info.nKey;
                   52044:           pCellKey = sqlite3Malloc( nCell );
                   52045:           if( pCellKey==0 ){
                   52046:             rc = SQLITE_NOMEM;
                   52047:             goto moveto_finish;
                   52048:           }
                   52049:           rc = accessPayload(pCur, 0, nCell, (unsigned char*)pCellKey, 0);
                   52050:           if( rc ){
                   52051:             sqlite3_free(pCellKey);
                   52052:             goto moveto_finish;
                   52053:           }
                   52054:           c = sqlite3VdbeRecordCompare(nCell, pCellKey, pIdxKey);
                   52055:           sqlite3_free(pCellKey);
                   52056:         }
                   52057:       }
                   52058:       if( c==0 ){
                   52059:         if( pPage->intKey && !pPage->leaf ){
                   52060:           lwr = idx;
                   52061:           upr = lwr - 1;
                   52062:           break;
                   52063:         }else{
                   52064:           *pRes = 0;
                   52065:           rc = SQLITE_OK;
                   52066:           goto moveto_finish;
                   52067:         }
                   52068:       }
                   52069:       if( c<0 ){
                   52070:         lwr = idx+1;
                   52071:       }else{
                   52072:         upr = idx-1;
                   52073:       }
                   52074:       if( lwr>upr ){
                   52075:         break;
                   52076:       }
                   52077:       pCur->aiIdx[pCur->iPage] = (u16)(idx = (lwr+upr)/2);
                   52078:     }
                   52079:     assert( lwr==upr+1 );
                   52080:     assert( pPage->isInit );
                   52081:     if( pPage->leaf ){
                   52082:       chldPg = 0;
                   52083:     }else if( lwr>=pPage->nCell ){
                   52084:       chldPg = get4byte(&pPage->aData[pPage->hdrOffset+8]);
                   52085:     }else{
                   52086:       chldPg = get4byte(findCell(pPage, lwr));
                   52087:     }
                   52088:     if( chldPg==0 ){
                   52089:       assert( pCur->aiIdx[pCur->iPage]<pCur->apPage[pCur->iPage]->nCell );
                   52090:       *pRes = c;
                   52091:       rc = SQLITE_OK;
                   52092:       goto moveto_finish;
                   52093:     }
                   52094:     pCur->aiIdx[pCur->iPage] = (u16)lwr;
                   52095:     pCur->info.nSize = 0;
                   52096:     pCur->validNKey = 0;
                   52097:     rc = moveToChild(pCur, chldPg);
                   52098:     if( rc ) goto moveto_finish;
                   52099:   }
                   52100: moveto_finish:
                   52101:   return rc;
                   52102: }
                   52103: 
                   52104: 
                   52105: /*
                   52106: ** Return TRUE if the cursor is not pointing at an entry of the table.
                   52107: **
                   52108: ** TRUE will be returned after a call to sqlite3BtreeNext() moves
                   52109: ** past the last entry in the table or sqlite3BtreePrev() moves past
                   52110: ** the first entry.  TRUE is also returned if the table is empty.
                   52111: */
                   52112: SQLITE_PRIVATE int sqlite3BtreeEof(BtCursor *pCur){
                   52113:   /* TODO: What if the cursor is in CURSOR_REQUIRESEEK but all table entries
                   52114:   ** have been deleted? This API will need to change to return an error code
                   52115:   ** as well as the boolean result value.
                   52116:   */
                   52117:   return (CURSOR_VALID!=pCur->eState);
                   52118: }
                   52119: 
                   52120: /*
                   52121: ** Advance the cursor to the next entry in the database.  If
                   52122: ** successful then set *pRes=0.  If the cursor
                   52123: ** was already pointing to the last entry in the database before
                   52124: ** this routine was called, then set *pRes=1.
                   52125: */
                   52126: SQLITE_PRIVATE int sqlite3BtreeNext(BtCursor *pCur, int *pRes){
                   52127:   int rc;
                   52128:   int idx;
                   52129:   MemPage *pPage;
                   52130: 
                   52131:   assert( cursorHoldsMutex(pCur) );
                   52132:   rc = restoreCursorPosition(pCur);
                   52133:   if( rc!=SQLITE_OK ){
                   52134:     return rc;
                   52135:   }
                   52136:   assert( pRes!=0 );
                   52137:   if( CURSOR_INVALID==pCur->eState ){
                   52138:     *pRes = 1;
                   52139:     return SQLITE_OK;
                   52140:   }
                   52141:   if( pCur->skipNext>0 ){
                   52142:     pCur->skipNext = 0;
                   52143:     *pRes = 0;
                   52144:     return SQLITE_OK;
                   52145:   }
                   52146:   pCur->skipNext = 0;
                   52147: 
                   52148:   pPage = pCur->apPage[pCur->iPage];
                   52149:   idx = ++pCur->aiIdx[pCur->iPage];
                   52150:   assert( pPage->isInit );
                   52151:   assert( idx<=pPage->nCell );
                   52152: 
                   52153:   pCur->info.nSize = 0;
                   52154:   pCur->validNKey = 0;
                   52155:   if( idx>=pPage->nCell ){
                   52156:     if( !pPage->leaf ){
                   52157:       rc = moveToChild(pCur, get4byte(&pPage->aData[pPage->hdrOffset+8]));
                   52158:       if( rc ) return rc;
                   52159:       rc = moveToLeftmost(pCur);
                   52160:       *pRes = 0;
                   52161:       return rc;
                   52162:     }
                   52163:     do{
                   52164:       if( pCur->iPage==0 ){
                   52165:         *pRes = 1;
                   52166:         pCur->eState = CURSOR_INVALID;
                   52167:         return SQLITE_OK;
                   52168:       }
                   52169:       moveToParent(pCur);
                   52170:       pPage = pCur->apPage[pCur->iPage];
                   52171:     }while( pCur->aiIdx[pCur->iPage]>=pPage->nCell );
                   52172:     *pRes = 0;
                   52173:     if( pPage->intKey ){
                   52174:       rc = sqlite3BtreeNext(pCur, pRes);
                   52175:     }else{
                   52176:       rc = SQLITE_OK;
                   52177:     }
                   52178:     return rc;
                   52179:   }
                   52180:   *pRes = 0;
                   52181:   if( pPage->leaf ){
                   52182:     return SQLITE_OK;
                   52183:   }
                   52184:   rc = moveToLeftmost(pCur);
                   52185:   return rc;
                   52186: }
                   52187: 
                   52188: 
                   52189: /*
                   52190: ** Step the cursor to the back to the previous entry in the database.  If
                   52191: ** successful then set *pRes=0.  If the cursor
                   52192: ** was already pointing to the first entry in the database before
                   52193: ** this routine was called, then set *pRes=1.
                   52194: */
                   52195: SQLITE_PRIVATE int sqlite3BtreePrevious(BtCursor *pCur, int *pRes){
                   52196:   int rc;
                   52197:   MemPage *pPage;
                   52198: 
                   52199:   assert( cursorHoldsMutex(pCur) );
                   52200:   rc = restoreCursorPosition(pCur);
                   52201:   if( rc!=SQLITE_OK ){
                   52202:     return rc;
                   52203:   }
                   52204:   pCur->atLast = 0;
                   52205:   if( CURSOR_INVALID==pCur->eState ){
                   52206:     *pRes = 1;
                   52207:     return SQLITE_OK;
                   52208:   }
                   52209:   if( pCur->skipNext<0 ){
                   52210:     pCur->skipNext = 0;
                   52211:     *pRes = 0;
                   52212:     return SQLITE_OK;
                   52213:   }
                   52214:   pCur->skipNext = 0;
                   52215: 
                   52216:   pPage = pCur->apPage[pCur->iPage];
                   52217:   assert( pPage->isInit );
                   52218:   if( !pPage->leaf ){
                   52219:     int idx = pCur->aiIdx[pCur->iPage];
                   52220:     rc = moveToChild(pCur, get4byte(findCell(pPage, idx)));
                   52221:     if( rc ){
                   52222:       return rc;
                   52223:     }
                   52224:     rc = moveToRightmost(pCur);
                   52225:   }else{
                   52226:     while( pCur->aiIdx[pCur->iPage]==0 ){
                   52227:       if( pCur->iPage==0 ){
                   52228:         pCur->eState = CURSOR_INVALID;
                   52229:         *pRes = 1;
                   52230:         return SQLITE_OK;
                   52231:       }
                   52232:       moveToParent(pCur);
                   52233:     }
                   52234:     pCur->info.nSize = 0;
                   52235:     pCur->validNKey = 0;
                   52236: 
                   52237:     pCur->aiIdx[pCur->iPage]--;
                   52238:     pPage = pCur->apPage[pCur->iPage];
                   52239:     if( pPage->intKey && !pPage->leaf ){
                   52240:       rc = sqlite3BtreePrevious(pCur, pRes);
                   52241:     }else{
                   52242:       rc = SQLITE_OK;
                   52243:     }
                   52244:   }
                   52245:   *pRes = 0;
                   52246:   return rc;
                   52247: }
                   52248: 
                   52249: /*
                   52250: ** Allocate a new page from the database file.
                   52251: **
                   52252: ** The new page is marked as dirty.  (In other words, sqlite3PagerWrite()
                   52253: ** has already been called on the new page.)  The new page has also
                   52254: ** been referenced and the calling routine is responsible for calling
                   52255: ** sqlite3PagerUnref() on the new page when it is done.
                   52256: **
                   52257: ** SQLITE_OK is returned on success.  Any other return value indicates
                   52258: ** an error.  *ppPage and *pPgno are undefined in the event of an error.
                   52259: ** Do not invoke sqlite3PagerUnref() on *ppPage if an error is returned.
                   52260: **
                   52261: ** If the "nearby" parameter is not 0, then a (feeble) effort is made to 
                   52262: ** locate a page close to the page number "nearby".  This can be used in an
                   52263: ** attempt to keep related pages close to each other in the database file,
                   52264: ** which in turn can make database access faster.
                   52265: **
                   52266: ** If the "exact" parameter is not 0, and the page-number nearby exists 
1.1.1.3 ! misho    52267: ** anywhere on the free-list, then it is guaranteed to be returned. This
1.1       misho    52268: ** is only used by auto-vacuum databases when allocating a new table.
                   52269: */
                   52270: static int allocateBtreePage(
                   52271:   BtShared *pBt, 
                   52272:   MemPage **ppPage, 
                   52273:   Pgno *pPgno, 
                   52274:   Pgno nearby,
                   52275:   u8 exact
                   52276: ){
                   52277:   MemPage *pPage1;
                   52278:   int rc;
                   52279:   u32 n;     /* Number of pages on the freelist */
                   52280:   u32 k;     /* Number of leaves on the trunk of the freelist */
                   52281:   MemPage *pTrunk = 0;
                   52282:   MemPage *pPrevTrunk = 0;
                   52283:   Pgno mxPage;     /* Total size of the database file */
                   52284: 
                   52285:   assert( sqlite3_mutex_held(pBt->mutex) );
                   52286:   pPage1 = pBt->pPage1;
                   52287:   mxPage = btreePagecount(pBt);
                   52288:   n = get4byte(&pPage1->aData[36]);
                   52289:   testcase( n==mxPage-1 );
                   52290:   if( n>=mxPage ){
                   52291:     return SQLITE_CORRUPT_BKPT;
                   52292:   }
                   52293:   if( n>0 ){
                   52294:     /* There are pages on the freelist.  Reuse one of those pages. */
                   52295:     Pgno iTrunk;
                   52296:     u8 searchList = 0; /* If the free-list must be searched for 'nearby' */
                   52297:     
                   52298:     /* If the 'exact' parameter was true and a query of the pointer-map
                   52299:     ** shows that the page 'nearby' is somewhere on the free-list, then
                   52300:     ** the entire-list will be searched for that page.
                   52301:     */
                   52302: #ifndef SQLITE_OMIT_AUTOVACUUM
                   52303:     if( exact && nearby<=mxPage ){
                   52304:       u8 eType;
                   52305:       assert( nearby>0 );
                   52306:       assert( pBt->autoVacuum );
                   52307:       rc = ptrmapGet(pBt, nearby, &eType, 0);
                   52308:       if( rc ) return rc;
                   52309:       if( eType==PTRMAP_FREEPAGE ){
                   52310:         searchList = 1;
                   52311:       }
                   52312:       *pPgno = nearby;
                   52313:     }
                   52314: #endif
                   52315: 
                   52316:     /* Decrement the free-list count by 1. Set iTrunk to the index of the
                   52317:     ** first free-list trunk page. iPrevTrunk is initially 1.
                   52318:     */
                   52319:     rc = sqlite3PagerWrite(pPage1->pDbPage);
                   52320:     if( rc ) return rc;
                   52321:     put4byte(&pPage1->aData[36], n-1);
                   52322: 
                   52323:     /* The code within this loop is run only once if the 'searchList' variable
                   52324:     ** is not true. Otherwise, it runs once for each trunk-page on the
                   52325:     ** free-list until the page 'nearby' is located.
                   52326:     */
                   52327:     do {
                   52328:       pPrevTrunk = pTrunk;
                   52329:       if( pPrevTrunk ){
                   52330:         iTrunk = get4byte(&pPrevTrunk->aData[0]);
                   52331:       }else{
                   52332:         iTrunk = get4byte(&pPage1->aData[32]);
                   52333:       }
                   52334:       testcase( iTrunk==mxPage );
                   52335:       if( iTrunk>mxPage ){
                   52336:         rc = SQLITE_CORRUPT_BKPT;
                   52337:       }else{
                   52338:         rc = btreeGetPage(pBt, iTrunk, &pTrunk, 0);
                   52339:       }
                   52340:       if( rc ){
                   52341:         pTrunk = 0;
                   52342:         goto end_allocate_page;
                   52343:       }
                   52344: 
                   52345:       k = get4byte(&pTrunk->aData[4]); /* # of leaves on this trunk page */
                   52346:       if( k==0 && !searchList ){
                   52347:         /* The trunk has no leaves and the list is not being searched. 
                   52348:         ** So extract the trunk page itself and use it as the newly 
                   52349:         ** allocated page */
                   52350:         assert( pPrevTrunk==0 );
                   52351:         rc = sqlite3PagerWrite(pTrunk->pDbPage);
                   52352:         if( rc ){
                   52353:           goto end_allocate_page;
                   52354:         }
                   52355:         *pPgno = iTrunk;
                   52356:         memcpy(&pPage1->aData[32], &pTrunk->aData[0], 4);
                   52357:         *ppPage = pTrunk;
                   52358:         pTrunk = 0;
                   52359:         TRACE(("ALLOCATE: %d trunk - %d free pages left\n", *pPgno, n-1));
                   52360:       }else if( k>(u32)(pBt->usableSize/4 - 2) ){
                   52361:         /* Value of k is out of range.  Database corruption */
                   52362:         rc = SQLITE_CORRUPT_BKPT;
                   52363:         goto end_allocate_page;
                   52364: #ifndef SQLITE_OMIT_AUTOVACUUM
                   52365:       }else if( searchList && nearby==iTrunk ){
                   52366:         /* The list is being searched and this trunk page is the page
                   52367:         ** to allocate, regardless of whether it has leaves.
                   52368:         */
                   52369:         assert( *pPgno==iTrunk );
                   52370:         *ppPage = pTrunk;
                   52371:         searchList = 0;
                   52372:         rc = sqlite3PagerWrite(pTrunk->pDbPage);
                   52373:         if( rc ){
                   52374:           goto end_allocate_page;
                   52375:         }
                   52376:         if( k==0 ){
                   52377:           if( !pPrevTrunk ){
                   52378:             memcpy(&pPage1->aData[32], &pTrunk->aData[0], 4);
                   52379:           }else{
                   52380:             rc = sqlite3PagerWrite(pPrevTrunk->pDbPage);
                   52381:             if( rc!=SQLITE_OK ){
                   52382:               goto end_allocate_page;
                   52383:             }
                   52384:             memcpy(&pPrevTrunk->aData[0], &pTrunk->aData[0], 4);
                   52385:           }
                   52386:         }else{
                   52387:           /* The trunk page is required by the caller but it contains 
                   52388:           ** pointers to free-list leaves. The first leaf becomes a trunk
                   52389:           ** page in this case.
                   52390:           */
                   52391:           MemPage *pNewTrunk;
                   52392:           Pgno iNewTrunk = get4byte(&pTrunk->aData[8]);
                   52393:           if( iNewTrunk>mxPage ){ 
                   52394:             rc = SQLITE_CORRUPT_BKPT;
                   52395:             goto end_allocate_page;
                   52396:           }
                   52397:           testcase( iNewTrunk==mxPage );
                   52398:           rc = btreeGetPage(pBt, iNewTrunk, &pNewTrunk, 0);
                   52399:           if( rc!=SQLITE_OK ){
                   52400:             goto end_allocate_page;
                   52401:           }
                   52402:           rc = sqlite3PagerWrite(pNewTrunk->pDbPage);
                   52403:           if( rc!=SQLITE_OK ){
                   52404:             releasePage(pNewTrunk);
                   52405:             goto end_allocate_page;
                   52406:           }
                   52407:           memcpy(&pNewTrunk->aData[0], &pTrunk->aData[0], 4);
                   52408:           put4byte(&pNewTrunk->aData[4], k-1);
                   52409:           memcpy(&pNewTrunk->aData[8], &pTrunk->aData[12], (k-1)*4);
                   52410:           releasePage(pNewTrunk);
                   52411:           if( !pPrevTrunk ){
                   52412:             assert( sqlite3PagerIswriteable(pPage1->pDbPage) );
                   52413:             put4byte(&pPage1->aData[32], iNewTrunk);
                   52414:           }else{
                   52415:             rc = sqlite3PagerWrite(pPrevTrunk->pDbPage);
                   52416:             if( rc ){
                   52417:               goto end_allocate_page;
                   52418:             }
                   52419:             put4byte(&pPrevTrunk->aData[0], iNewTrunk);
                   52420:           }
                   52421:         }
                   52422:         pTrunk = 0;
                   52423:         TRACE(("ALLOCATE: %d trunk - %d free pages left\n", *pPgno, n-1));
                   52424: #endif
                   52425:       }else if( k>0 ){
                   52426:         /* Extract a leaf from the trunk */
                   52427:         u32 closest;
                   52428:         Pgno iPage;
                   52429:         unsigned char *aData = pTrunk->aData;
                   52430:         if( nearby>0 ){
                   52431:           u32 i;
                   52432:           int dist;
                   52433:           closest = 0;
                   52434:           dist = sqlite3AbsInt32(get4byte(&aData[8]) - nearby);
                   52435:           for(i=1; i<k; i++){
                   52436:             int d2 = sqlite3AbsInt32(get4byte(&aData[8+i*4]) - nearby);
                   52437:             if( d2<dist ){
                   52438:               closest = i;
                   52439:               dist = d2;
                   52440:             }
                   52441:           }
                   52442:         }else{
                   52443:           closest = 0;
                   52444:         }
                   52445: 
                   52446:         iPage = get4byte(&aData[8+closest*4]);
                   52447:         testcase( iPage==mxPage );
                   52448:         if( iPage>mxPage ){
                   52449:           rc = SQLITE_CORRUPT_BKPT;
                   52450:           goto end_allocate_page;
                   52451:         }
                   52452:         testcase( iPage==mxPage );
                   52453:         if( !searchList || iPage==nearby ){
                   52454:           int noContent;
                   52455:           *pPgno = iPage;
                   52456:           TRACE(("ALLOCATE: %d was leaf %d of %d on trunk %d"
                   52457:                  ": %d more free pages\n",
                   52458:                  *pPgno, closest+1, k, pTrunk->pgno, n-1));
                   52459:           rc = sqlite3PagerWrite(pTrunk->pDbPage);
                   52460:           if( rc ) goto end_allocate_page;
                   52461:           if( closest<k-1 ){
                   52462:             memcpy(&aData[8+closest*4], &aData[4+k*4], 4);
                   52463:           }
                   52464:           put4byte(&aData[4], k-1);
                   52465:           noContent = !btreeGetHasContent(pBt, *pPgno);
                   52466:           rc = btreeGetPage(pBt, *pPgno, ppPage, noContent);
                   52467:           if( rc==SQLITE_OK ){
                   52468:             rc = sqlite3PagerWrite((*ppPage)->pDbPage);
                   52469:             if( rc!=SQLITE_OK ){
                   52470:               releasePage(*ppPage);
                   52471:             }
                   52472:           }
                   52473:           searchList = 0;
                   52474:         }
                   52475:       }
                   52476:       releasePage(pPrevTrunk);
                   52477:       pPrevTrunk = 0;
                   52478:     }while( searchList );
                   52479:   }else{
                   52480:     /* There are no pages on the freelist, so create a new page at the
                   52481:     ** end of the file */
                   52482:     rc = sqlite3PagerWrite(pBt->pPage1->pDbPage);
                   52483:     if( rc ) return rc;
                   52484:     pBt->nPage++;
                   52485:     if( pBt->nPage==PENDING_BYTE_PAGE(pBt) ) pBt->nPage++;
                   52486: 
                   52487: #ifndef SQLITE_OMIT_AUTOVACUUM
                   52488:     if( pBt->autoVacuum && PTRMAP_ISPAGE(pBt, pBt->nPage) ){
                   52489:       /* If *pPgno refers to a pointer-map page, allocate two new pages
                   52490:       ** at the end of the file instead of one. The first allocated page
                   52491:       ** becomes a new pointer-map page, the second is used by the caller.
                   52492:       */
                   52493:       MemPage *pPg = 0;
                   52494:       TRACE(("ALLOCATE: %d from end of file (pointer-map page)\n", pBt->nPage));
                   52495:       assert( pBt->nPage!=PENDING_BYTE_PAGE(pBt) );
                   52496:       rc = btreeGetPage(pBt, pBt->nPage, &pPg, 1);
                   52497:       if( rc==SQLITE_OK ){
                   52498:         rc = sqlite3PagerWrite(pPg->pDbPage);
                   52499:         releasePage(pPg);
                   52500:       }
                   52501:       if( rc ) return rc;
                   52502:       pBt->nPage++;
                   52503:       if( pBt->nPage==PENDING_BYTE_PAGE(pBt) ){ pBt->nPage++; }
                   52504:     }
                   52505: #endif
                   52506:     put4byte(28 + (u8*)pBt->pPage1->aData, pBt->nPage);
                   52507:     *pPgno = pBt->nPage;
                   52508: 
                   52509:     assert( *pPgno!=PENDING_BYTE_PAGE(pBt) );
                   52510:     rc = btreeGetPage(pBt, *pPgno, ppPage, 1);
                   52511:     if( rc ) return rc;
                   52512:     rc = sqlite3PagerWrite((*ppPage)->pDbPage);
                   52513:     if( rc!=SQLITE_OK ){
                   52514:       releasePage(*ppPage);
                   52515:     }
                   52516:     TRACE(("ALLOCATE: %d from end of file\n", *pPgno));
                   52517:   }
                   52518: 
                   52519:   assert( *pPgno!=PENDING_BYTE_PAGE(pBt) );
                   52520: 
                   52521: end_allocate_page:
                   52522:   releasePage(pTrunk);
                   52523:   releasePage(pPrevTrunk);
                   52524:   if( rc==SQLITE_OK ){
                   52525:     if( sqlite3PagerPageRefcount((*ppPage)->pDbPage)>1 ){
                   52526:       releasePage(*ppPage);
                   52527:       return SQLITE_CORRUPT_BKPT;
                   52528:     }
                   52529:     (*ppPage)->isInit = 0;
                   52530:   }else{
                   52531:     *ppPage = 0;
                   52532:   }
                   52533:   assert( rc!=SQLITE_OK || sqlite3PagerIswriteable((*ppPage)->pDbPage) );
                   52534:   return rc;
                   52535: }
                   52536: 
                   52537: /*
                   52538: ** This function is used to add page iPage to the database file free-list. 
                   52539: ** It is assumed that the page is not already a part of the free-list.
                   52540: **
                   52541: ** The value passed as the second argument to this function is optional.
                   52542: ** If the caller happens to have a pointer to the MemPage object 
                   52543: ** corresponding to page iPage handy, it may pass it as the second value. 
                   52544: ** Otherwise, it may pass NULL.
                   52545: **
                   52546: ** If a pointer to a MemPage object is passed as the second argument,
                   52547: ** its reference count is not altered by this function.
                   52548: */
                   52549: static int freePage2(BtShared *pBt, MemPage *pMemPage, Pgno iPage){
                   52550:   MemPage *pTrunk = 0;                /* Free-list trunk page */
                   52551:   Pgno iTrunk = 0;                    /* Page number of free-list trunk page */ 
                   52552:   MemPage *pPage1 = pBt->pPage1;      /* Local reference to page 1 */
                   52553:   MemPage *pPage;                     /* Page being freed. May be NULL. */
                   52554:   int rc;                             /* Return Code */
                   52555:   int nFree;                          /* Initial number of pages on free-list */
                   52556: 
                   52557:   assert( sqlite3_mutex_held(pBt->mutex) );
                   52558:   assert( iPage>1 );
                   52559:   assert( !pMemPage || pMemPage->pgno==iPage );
                   52560: 
                   52561:   if( pMemPage ){
                   52562:     pPage = pMemPage;
                   52563:     sqlite3PagerRef(pPage->pDbPage);
                   52564:   }else{
                   52565:     pPage = btreePageLookup(pBt, iPage);
                   52566:   }
                   52567: 
                   52568:   /* Increment the free page count on pPage1 */
                   52569:   rc = sqlite3PagerWrite(pPage1->pDbPage);
                   52570:   if( rc ) goto freepage_out;
                   52571:   nFree = get4byte(&pPage1->aData[36]);
                   52572:   put4byte(&pPage1->aData[36], nFree+1);
                   52573: 
                   52574:   if( pBt->secureDelete ){
                   52575:     /* If the secure_delete option is enabled, then
                   52576:     ** always fully overwrite deleted information with zeros.
                   52577:     */
                   52578:     if( (!pPage && ((rc = btreeGetPage(pBt, iPage, &pPage, 0))!=0) )
                   52579:      ||            ((rc = sqlite3PagerWrite(pPage->pDbPage))!=0)
                   52580:     ){
                   52581:       goto freepage_out;
                   52582:     }
                   52583:     memset(pPage->aData, 0, pPage->pBt->pageSize);
                   52584:   }
                   52585: 
                   52586:   /* If the database supports auto-vacuum, write an entry in the pointer-map
                   52587:   ** to indicate that the page is free.
                   52588:   */
                   52589:   if( ISAUTOVACUUM ){
                   52590:     ptrmapPut(pBt, iPage, PTRMAP_FREEPAGE, 0, &rc);
                   52591:     if( rc ) goto freepage_out;
                   52592:   }
                   52593: 
                   52594:   /* Now manipulate the actual database free-list structure. There are two
                   52595:   ** possibilities. If the free-list is currently empty, or if the first
                   52596:   ** trunk page in the free-list is full, then this page will become a
                   52597:   ** new free-list trunk page. Otherwise, it will become a leaf of the
                   52598:   ** first trunk page in the current free-list. This block tests if it
                   52599:   ** is possible to add the page as a new free-list leaf.
                   52600:   */
                   52601:   if( nFree!=0 ){
                   52602:     u32 nLeaf;                /* Initial number of leaf cells on trunk page */
                   52603: 
                   52604:     iTrunk = get4byte(&pPage1->aData[32]);
                   52605:     rc = btreeGetPage(pBt, iTrunk, &pTrunk, 0);
                   52606:     if( rc!=SQLITE_OK ){
                   52607:       goto freepage_out;
                   52608:     }
                   52609: 
                   52610:     nLeaf = get4byte(&pTrunk->aData[4]);
                   52611:     assert( pBt->usableSize>32 );
                   52612:     if( nLeaf > (u32)pBt->usableSize/4 - 2 ){
                   52613:       rc = SQLITE_CORRUPT_BKPT;
                   52614:       goto freepage_out;
                   52615:     }
                   52616:     if( nLeaf < (u32)pBt->usableSize/4 - 8 ){
                   52617:       /* In this case there is room on the trunk page to insert the page
                   52618:       ** being freed as a new leaf.
                   52619:       **
                   52620:       ** Note that the trunk page is not really full until it contains
                   52621:       ** usableSize/4 - 2 entries, not usableSize/4 - 8 entries as we have
                   52622:       ** coded.  But due to a coding error in versions of SQLite prior to
                   52623:       ** 3.6.0, databases with freelist trunk pages holding more than
                   52624:       ** usableSize/4 - 8 entries will be reported as corrupt.  In order
                   52625:       ** to maintain backwards compatibility with older versions of SQLite,
                   52626:       ** we will continue to restrict the number of entries to usableSize/4 - 8
                   52627:       ** for now.  At some point in the future (once everyone has upgraded
                   52628:       ** to 3.6.0 or later) we should consider fixing the conditional above
                   52629:       ** to read "usableSize/4-2" instead of "usableSize/4-8".
                   52630:       */
                   52631:       rc = sqlite3PagerWrite(pTrunk->pDbPage);
                   52632:       if( rc==SQLITE_OK ){
                   52633:         put4byte(&pTrunk->aData[4], nLeaf+1);
                   52634:         put4byte(&pTrunk->aData[8+nLeaf*4], iPage);
                   52635:         if( pPage && !pBt->secureDelete ){
                   52636:           sqlite3PagerDontWrite(pPage->pDbPage);
                   52637:         }
                   52638:         rc = btreeSetHasContent(pBt, iPage);
                   52639:       }
                   52640:       TRACE(("FREE-PAGE: %d leaf on trunk page %d\n",pPage->pgno,pTrunk->pgno));
                   52641:       goto freepage_out;
                   52642:     }
                   52643:   }
                   52644: 
                   52645:   /* If control flows to this point, then it was not possible to add the
                   52646:   ** the page being freed as a leaf page of the first trunk in the free-list.
                   52647:   ** Possibly because the free-list is empty, or possibly because the 
                   52648:   ** first trunk in the free-list is full. Either way, the page being freed
                   52649:   ** will become the new first trunk page in the free-list.
                   52650:   */
                   52651:   if( pPage==0 && SQLITE_OK!=(rc = btreeGetPage(pBt, iPage, &pPage, 0)) ){
                   52652:     goto freepage_out;
                   52653:   }
                   52654:   rc = sqlite3PagerWrite(pPage->pDbPage);
                   52655:   if( rc!=SQLITE_OK ){
                   52656:     goto freepage_out;
                   52657:   }
                   52658:   put4byte(pPage->aData, iTrunk);
                   52659:   put4byte(&pPage->aData[4], 0);
                   52660:   put4byte(&pPage1->aData[32], iPage);
                   52661:   TRACE(("FREE-PAGE: %d new trunk page replacing %d\n", pPage->pgno, iTrunk));
                   52662: 
                   52663: freepage_out:
                   52664:   if( pPage ){
                   52665:     pPage->isInit = 0;
                   52666:   }
                   52667:   releasePage(pPage);
                   52668:   releasePage(pTrunk);
                   52669:   return rc;
                   52670: }
                   52671: static void freePage(MemPage *pPage, int *pRC){
                   52672:   if( (*pRC)==SQLITE_OK ){
                   52673:     *pRC = freePage2(pPage->pBt, pPage, pPage->pgno);
                   52674:   }
                   52675: }
                   52676: 
                   52677: /*
                   52678: ** Free any overflow pages associated with the given Cell.
                   52679: */
                   52680: static int clearCell(MemPage *pPage, unsigned char *pCell){
                   52681:   BtShared *pBt = pPage->pBt;
                   52682:   CellInfo info;
                   52683:   Pgno ovflPgno;
                   52684:   int rc;
                   52685:   int nOvfl;
                   52686:   u32 ovflPageSize;
                   52687: 
                   52688:   assert( sqlite3_mutex_held(pPage->pBt->mutex) );
                   52689:   btreeParseCellPtr(pPage, pCell, &info);
                   52690:   if( info.iOverflow==0 ){
                   52691:     return SQLITE_OK;  /* No overflow pages. Return without doing anything */
                   52692:   }
                   52693:   ovflPgno = get4byte(&pCell[info.iOverflow]);
                   52694:   assert( pBt->usableSize > 4 );
                   52695:   ovflPageSize = pBt->usableSize - 4;
                   52696:   nOvfl = (info.nPayload - info.nLocal + ovflPageSize - 1)/ovflPageSize;
                   52697:   assert( ovflPgno==0 || nOvfl>0 );
                   52698:   while( nOvfl-- ){
                   52699:     Pgno iNext = 0;
                   52700:     MemPage *pOvfl = 0;
                   52701:     if( ovflPgno<2 || ovflPgno>btreePagecount(pBt) ){
                   52702:       /* 0 is not a legal page number and page 1 cannot be an 
                   52703:       ** overflow page. Therefore if ovflPgno<2 or past the end of the 
                   52704:       ** file the database must be corrupt. */
                   52705:       return SQLITE_CORRUPT_BKPT;
                   52706:     }
                   52707:     if( nOvfl ){
                   52708:       rc = getOverflowPage(pBt, ovflPgno, &pOvfl, &iNext);
                   52709:       if( rc ) return rc;
                   52710:     }
                   52711: 
                   52712:     if( ( pOvfl || ((pOvfl = btreePageLookup(pBt, ovflPgno))!=0) )
                   52713:      && sqlite3PagerPageRefcount(pOvfl->pDbPage)!=1
                   52714:     ){
                   52715:       /* There is no reason any cursor should have an outstanding reference 
                   52716:       ** to an overflow page belonging to a cell that is being deleted/updated.
                   52717:       ** So if there exists more than one reference to this page, then it 
                   52718:       ** must not really be an overflow page and the database must be corrupt. 
                   52719:       ** It is helpful to detect this before calling freePage2(), as 
                   52720:       ** freePage2() may zero the page contents if secure-delete mode is
                   52721:       ** enabled. If this 'overflow' page happens to be a page that the
                   52722:       ** caller is iterating through or using in some other way, this
                   52723:       ** can be problematic.
                   52724:       */
                   52725:       rc = SQLITE_CORRUPT_BKPT;
                   52726:     }else{
                   52727:       rc = freePage2(pBt, pOvfl, ovflPgno);
                   52728:     }
                   52729: 
                   52730:     if( pOvfl ){
                   52731:       sqlite3PagerUnref(pOvfl->pDbPage);
                   52732:     }
                   52733:     if( rc ) return rc;
                   52734:     ovflPgno = iNext;
                   52735:   }
                   52736:   return SQLITE_OK;
                   52737: }
                   52738: 
                   52739: /*
                   52740: ** Create the byte sequence used to represent a cell on page pPage
                   52741: ** and write that byte sequence into pCell[].  Overflow pages are
                   52742: ** allocated and filled in as necessary.  The calling procedure
                   52743: ** is responsible for making sure sufficient space has been allocated
                   52744: ** for pCell[].
                   52745: **
                   52746: ** Note that pCell does not necessary need to point to the pPage->aData
                   52747: ** area.  pCell might point to some temporary storage.  The cell will
                   52748: ** be constructed in this temporary area then copied into pPage->aData
                   52749: ** later.
                   52750: */
                   52751: static int fillInCell(
                   52752:   MemPage *pPage,                /* The page that contains the cell */
                   52753:   unsigned char *pCell,          /* Complete text of the cell */
                   52754:   const void *pKey, i64 nKey,    /* The key */
                   52755:   const void *pData,int nData,   /* The data */
                   52756:   int nZero,                     /* Extra zero bytes to append to pData */
                   52757:   int *pnSize                    /* Write cell size here */
                   52758: ){
                   52759:   int nPayload;
                   52760:   const u8 *pSrc;
                   52761:   int nSrc, n, rc;
                   52762:   int spaceLeft;
                   52763:   MemPage *pOvfl = 0;
                   52764:   MemPage *pToRelease = 0;
                   52765:   unsigned char *pPrior;
                   52766:   unsigned char *pPayload;
                   52767:   BtShared *pBt = pPage->pBt;
                   52768:   Pgno pgnoOvfl = 0;
                   52769:   int nHeader;
                   52770:   CellInfo info;
                   52771: 
                   52772:   assert( sqlite3_mutex_held(pPage->pBt->mutex) );
                   52773: 
                   52774:   /* pPage is not necessarily writeable since pCell might be auxiliary
                   52775:   ** buffer space that is separate from the pPage buffer area */
                   52776:   assert( pCell<pPage->aData || pCell>=&pPage->aData[pBt->pageSize]
                   52777:             || sqlite3PagerIswriteable(pPage->pDbPage) );
                   52778: 
                   52779:   /* Fill in the header. */
                   52780:   nHeader = 0;
                   52781:   if( !pPage->leaf ){
                   52782:     nHeader += 4;
                   52783:   }
                   52784:   if( pPage->hasData ){
                   52785:     nHeader += putVarint(&pCell[nHeader], nData+nZero);
                   52786:   }else{
                   52787:     nData = nZero = 0;
                   52788:   }
                   52789:   nHeader += putVarint(&pCell[nHeader], *(u64*)&nKey);
                   52790:   btreeParseCellPtr(pPage, pCell, &info);
                   52791:   assert( info.nHeader==nHeader );
                   52792:   assert( info.nKey==nKey );
                   52793:   assert( info.nData==(u32)(nData+nZero) );
                   52794:   
                   52795:   /* Fill in the payload */
                   52796:   nPayload = nData + nZero;
                   52797:   if( pPage->intKey ){
                   52798:     pSrc = pData;
                   52799:     nSrc = nData;
                   52800:     nData = 0;
                   52801:   }else{ 
                   52802:     if( NEVER(nKey>0x7fffffff || pKey==0) ){
                   52803:       return SQLITE_CORRUPT_BKPT;
                   52804:     }
                   52805:     nPayload += (int)nKey;
                   52806:     pSrc = pKey;
                   52807:     nSrc = (int)nKey;
                   52808:   }
                   52809:   *pnSize = info.nSize;
                   52810:   spaceLeft = info.nLocal;
                   52811:   pPayload = &pCell[nHeader];
                   52812:   pPrior = &pCell[info.iOverflow];
                   52813: 
                   52814:   while( nPayload>0 ){
                   52815:     if( spaceLeft==0 ){
                   52816: #ifndef SQLITE_OMIT_AUTOVACUUM
                   52817:       Pgno pgnoPtrmap = pgnoOvfl; /* Overflow page pointer-map entry page */
                   52818:       if( pBt->autoVacuum ){
                   52819:         do{
                   52820:           pgnoOvfl++;
                   52821:         } while( 
                   52822:           PTRMAP_ISPAGE(pBt, pgnoOvfl) || pgnoOvfl==PENDING_BYTE_PAGE(pBt) 
                   52823:         );
                   52824:       }
                   52825: #endif
                   52826:       rc = allocateBtreePage(pBt, &pOvfl, &pgnoOvfl, pgnoOvfl, 0);
                   52827: #ifndef SQLITE_OMIT_AUTOVACUUM
                   52828:       /* If the database supports auto-vacuum, and the second or subsequent
                   52829:       ** overflow page is being allocated, add an entry to the pointer-map
                   52830:       ** for that page now. 
                   52831:       **
                   52832:       ** If this is the first overflow page, then write a partial entry 
                   52833:       ** to the pointer-map. If we write nothing to this pointer-map slot,
                   52834:       ** then the optimistic overflow chain processing in clearCell()
                   52835:       ** may misinterpret the uninitialised values and delete the
                   52836:       ** wrong pages from the database.
                   52837:       */
                   52838:       if( pBt->autoVacuum && rc==SQLITE_OK ){
                   52839:         u8 eType = (pgnoPtrmap?PTRMAP_OVERFLOW2:PTRMAP_OVERFLOW1);
                   52840:         ptrmapPut(pBt, pgnoOvfl, eType, pgnoPtrmap, &rc);
                   52841:         if( rc ){
                   52842:           releasePage(pOvfl);
                   52843:         }
                   52844:       }
                   52845: #endif
                   52846:       if( rc ){
                   52847:         releasePage(pToRelease);
                   52848:         return rc;
                   52849:       }
                   52850: 
                   52851:       /* If pToRelease is not zero than pPrior points into the data area
                   52852:       ** of pToRelease.  Make sure pToRelease is still writeable. */
                   52853:       assert( pToRelease==0 || sqlite3PagerIswriteable(pToRelease->pDbPage) );
                   52854: 
                   52855:       /* If pPrior is part of the data area of pPage, then make sure pPage
                   52856:       ** is still writeable */
                   52857:       assert( pPrior<pPage->aData || pPrior>=&pPage->aData[pBt->pageSize]
                   52858:             || sqlite3PagerIswriteable(pPage->pDbPage) );
                   52859: 
                   52860:       put4byte(pPrior, pgnoOvfl);
                   52861:       releasePage(pToRelease);
                   52862:       pToRelease = pOvfl;
                   52863:       pPrior = pOvfl->aData;
                   52864:       put4byte(pPrior, 0);
                   52865:       pPayload = &pOvfl->aData[4];
                   52866:       spaceLeft = pBt->usableSize - 4;
                   52867:     }
                   52868:     n = nPayload;
                   52869:     if( n>spaceLeft ) n = spaceLeft;
                   52870: 
                   52871:     /* If pToRelease is not zero than pPayload points into the data area
                   52872:     ** of pToRelease.  Make sure pToRelease is still writeable. */
                   52873:     assert( pToRelease==0 || sqlite3PagerIswriteable(pToRelease->pDbPage) );
                   52874: 
                   52875:     /* If pPayload is part of the data area of pPage, then make sure pPage
                   52876:     ** is still writeable */
                   52877:     assert( pPayload<pPage->aData || pPayload>=&pPage->aData[pBt->pageSize]
                   52878:             || sqlite3PagerIswriteable(pPage->pDbPage) );
                   52879: 
                   52880:     if( nSrc>0 ){
                   52881:       if( n>nSrc ) n = nSrc;
                   52882:       assert( pSrc );
                   52883:       memcpy(pPayload, pSrc, n);
                   52884:     }else{
                   52885:       memset(pPayload, 0, n);
                   52886:     }
                   52887:     nPayload -= n;
                   52888:     pPayload += n;
                   52889:     pSrc += n;
                   52890:     nSrc -= n;
                   52891:     spaceLeft -= n;
                   52892:     if( nSrc==0 ){
                   52893:       nSrc = nData;
                   52894:       pSrc = pData;
                   52895:     }
                   52896:   }
                   52897:   releasePage(pToRelease);
                   52898:   return SQLITE_OK;
                   52899: }
                   52900: 
                   52901: /*
                   52902: ** Remove the i-th cell from pPage.  This routine effects pPage only.
                   52903: ** The cell content is not freed or deallocated.  It is assumed that
                   52904: ** the cell content has been copied someplace else.  This routine just
                   52905: ** removes the reference to the cell from pPage.
                   52906: **
                   52907: ** "sz" must be the number of bytes in the cell.
                   52908: */
                   52909: static void dropCell(MemPage *pPage, int idx, int sz, int *pRC){
                   52910:   u32 pc;         /* Offset to cell content of cell being deleted */
                   52911:   u8 *data;       /* pPage->aData */
                   52912:   u8 *ptr;        /* Used to move bytes around within data[] */
                   52913:   u8 *endPtr;     /* End of loop */
                   52914:   int rc;         /* The return code */
                   52915:   int hdr;        /* Beginning of the header.  0 most pages.  100 page 1 */
                   52916: 
                   52917:   if( *pRC ) return;
                   52918: 
                   52919:   assert( idx>=0 && idx<pPage->nCell );
                   52920:   assert( sz==cellSize(pPage, idx) );
                   52921:   assert( sqlite3PagerIswriteable(pPage->pDbPage) );
                   52922:   assert( sqlite3_mutex_held(pPage->pBt->mutex) );
                   52923:   data = pPage->aData;
                   52924:   ptr = &data[pPage->cellOffset + 2*idx];
                   52925:   pc = get2byte(ptr);
                   52926:   hdr = pPage->hdrOffset;
                   52927:   testcase( pc==get2byte(&data[hdr+5]) );
                   52928:   testcase( pc+sz==pPage->pBt->usableSize );
                   52929:   if( pc < (u32)get2byte(&data[hdr+5]) || pc+sz > pPage->pBt->usableSize ){
                   52930:     *pRC = SQLITE_CORRUPT_BKPT;
                   52931:     return;
                   52932:   }
                   52933:   rc = freeSpace(pPage, pc, sz);
                   52934:   if( rc ){
                   52935:     *pRC = rc;
                   52936:     return;
                   52937:   }
                   52938:   endPtr = &data[pPage->cellOffset + 2*pPage->nCell - 2];
                   52939:   assert( (SQLITE_PTR_TO_INT(ptr)&1)==0 );  /* ptr is always 2-byte aligned */
                   52940:   while( ptr<endPtr ){
                   52941:     *(u16*)ptr = *(u16*)&ptr[2];
                   52942:     ptr += 2;
                   52943:   }
                   52944:   pPage->nCell--;
                   52945:   put2byte(&data[hdr+3], pPage->nCell);
                   52946:   pPage->nFree += 2;
                   52947: }
                   52948: 
                   52949: /*
                   52950: ** Insert a new cell on pPage at cell index "i".  pCell points to the
                   52951: ** content of the cell.
                   52952: **
                   52953: ** If the cell content will fit on the page, then put it there.  If it
                   52954: ** will not fit, then make a copy of the cell content into pTemp if
                   52955: ** pTemp is not null.  Regardless of pTemp, allocate a new entry
                   52956: ** in pPage->aOvfl[] and make it point to the cell content (either
                   52957: ** in pTemp or the original pCell) and also record its index. 
                   52958: ** Allocating a new entry in pPage->aCell[] implies that 
                   52959: ** pPage->nOverflow is incremented.
                   52960: **
                   52961: ** If nSkip is non-zero, then do not copy the first nSkip bytes of the
                   52962: ** cell. The caller will overwrite them after this function returns. If
                   52963: ** nSkip is non-zero, then pCell may not point to an invalid memory location 
                   52964: ** (but pCell+nSkip is always valid).
                   52965: */
                   52966: static void insertCell(
                   52967:   MemPage *pPage,   /* Page into which we are copying */
                   52968:   int i,            /* New cell becomes the i-th cell of the page */
                   52969:   u8 *pCell,        /* Content of the new cell */
                   52970:   int sz,           /* Bytes of content in pCell */
                   52971:   u8 *pTemp,        /* Temp storage space for pCell, if needed */
                   52972:   Pgno iChild,      /* If non-zero, replace first 4 bytes with this value */
                   52973:   int *pRC          /* Read and write return code from here */
                   52974: ){
                   52975:   int idx = 0;      /* Where to write new cell content in data[] */
                   52976:   int j;            /* Loop counter */
                   52977:   int end;          /* First byte past the last cell pointer in data[] */
                   52978:   int ins;          /* Index in data[] where new cell pointer is inserted */
                   52979:   int cellOffset;   /* Address of first cell pointer in data[] */
                   52980:   u8 *data;         /* The content of the whole page */
                   52981:   u8 *ptr;          /* Used for moving information around in data[] */
                   52982:   u8 *endPtr;       /* End of the loop */
                   52983: 
                   52984:   int nSkip = (iChild ? 4 : 0);
                   52985: 
                   52986:   if( *pRC ) return;
                   52987: 
                   52988:   assert( i>=0 && i<=pPage->nCell+pPage->nOverflow );
                   52989:   assert( pPage->nCell<=MX_CELL(pPage->pBt) && MX_CELL(pPage->pBt)<=10921 );
                   52990:   assert( pPage->nOverflow<=ArraySize(pPage->aOvfl) );
                   52991:   assert( sqlite3_mutex_held(pPage->pBt->mutex) );
                   52992:   /* The cell should normally be sized correctly.  However, when moving a
                   52993:   ** malformed cell from a leaf page to an interior page, if the cell size
                   52994:   ** wanted to be less than 4 but got rounded up to 4 on the leaf, then size
                   52995:   ** might be less than 8 (leaf-size + pointer) on the interior node.  Hence
                   52996:   ** the term after the || in the following assert(). */
                   52997:   assert( sz==cellSizePtr(pPage, pCell) || (sz==8 && iChild>0) );
                   52998:   if( pPage->nOverflow || sz+2>pPage->nFree ){
                   52999:     if( pTemp ){
                   53000:       memcpy(pTemp+nSkip, pCell+nSkip, sz-nSkip);
                   53001:       pCell = pTemp;
                   53002:     }
                   53003:     if( iChild ){
                   53004:       put4byte(pCell, iChild);
                   53005:     }
                   53006:     j = pPage->nOverflow++;
                   53007:     assert( j<(int)(sizeof(pPage->aOvfl)/sizeof(pPage->aOvfl[0])) );
                   53008:     pPage->aOvfl[j].pCell = pCell;
                   53009:     pPage->aOvfl[j].idx = (u16)i;
                   53010:   }else{
                   53011:     int rc = sqlite3PagerWrite(pPage->pDbPage);
                   53012:     if( rc!=SQLITE_OK ){
                   53013:       *pRC = rc;
                   53014:       return;
                   53015:     }
                   53016:     assert( sqlite3PagerIswriteable(pPage->pDbPage) );
                   53017:     data = pPage->aData;
                   53018:     cellOffset = pPage->cellOffset;
                   53019:     end = cellOffset + 2*pPage->nCell;
                   53020:     ins = cellOffset + 2*i;
                   53021:     rc = allocateSpace(pPage, sz, &idx);
                   53022:     if( rc ){ *pRC = rc; return; }
                   53023:     /* The allocateSpace() routine guarantees the following two properties
                   53024:     ** if it returns success */
                   53025:     assert( idx >= end+2 );
                   53026:     assert( idx+sz <= (int)pPage->pBt->usableSize );
                   53027:     pPage->nCell++;
                   53028:     pPage->nFree -= (u16)(2 + sz);
                   53029:     memcpy(&data[idx+nSkip], pCell+nSkip, sz-nSkip);
                   53030:     if( iChild ){
                   53031:       put4byte(&data[idx], iChild);
                   53032:     }
                   53033:     ptr = &data[end];
                   53034:     endPtr = &data[ins];
                   53035:     assert( (SQLITE_PTR_TO_INT(ptr)&1)==0 );  /* ptr is always 2-byte aligned */
                   53036:     while( ptr>endPtr ){
                   53037:       *(u16*)ptr = *(u16*)&ptr[-2];
                   53038:       ptr -= 2;
                   53039:     }
                   53040:     put2byte(&data[ins], idx);
                   53041:     put2byte(&data[pPage->hdrOffset+3], pPage->nCell);
                   53042: #ifndef SQLITE_OMIT_AUTOVACUUM
                   53043:     if( pPage->pBt->autoVacuum ){
                   53044:       /* The cell may contain a pointer to an overflow page. If so, write
                   53045:       ** the entry for the overflow page into the pointer map.
                   53046:       */
                   53047:       ptrmapPutOvflPtr(pPage, pCell, pRC);
                   53048:     }
                   53049: #endif
                   53050:   }
                   53051: }
                   53052: 
                   53053: /*
                   53054: ** Add a list of cells to a page.  The page should be initially empty.
                   53055: ** The cells are guaranteed to fit on the page.
                   53056: */
                   53057: static void assemblePage(
                   53058:   MemPage *pPage,   /* The page to be assemblied */
                   53059:   int nCell,        /* The number of cells to add to this page */
                   53060:   u8 **apCell,      /* Pointers to cell bodies */
                   53061:   u16 *aSize        /* Sizes of the cells */
                   53062: ){
                   53063:   int i;            /* Loop counter */
                   53064:   u8 *pCellptr;     /* Address of next cell pointer */
                   53065:   int cellbody;     /* Address of next cell body */
                   53066:   u8 * const data = pPage->aData;             /* Pointer to data for pPage */
                   53067:   const int hdr = pPage->hdrOffset;           /* Offset of header on pPage */
                   53068:   const int nUsable = pPage->pBt->usableSize; /* Usable size of page */
                   53069: 
                   53070:   assert( pPage->nOverflow==0 );
                   53071:   assert( sqlite3_mutex_held(pPage->pBt->mutex) );
                   53072:   assert( nCell>=0 && nCell<=(int)MX_CELL(pPage->pBt)
                   53073:             && (int)MX_CELL(pPage->pBt)<=10921);
                   53074:   assert( sqlite3PagerIswriteable(pPage->pDbPage) );
                   53075: 
                   53076:   /* Check that the page has just been zeroed by zeroPage() */
                   53077:   assert( pPage->nCell==0 );
                   53078:   assert( get2byteNotZero(&data[hdr+5])==nUsable );
                   53079: 
                   53080:   pCellptr = &data[pPage->cellOffset + nCell*2];
                   53081:   cellbody = nUsable;
                   53082:   for(i=nCell-1; i>=0; i--){
                   53083:     u16 sz = aSize[i];
                   53084:     pCellptr -= 2;
                   53085:     cellbody -= sz;
                   53086:     put2byte(pCellptr, cellbody);
                   53087:     memcpy(&data[cellbody], apCell[i], sz);
                   53088:   }
                   53089:   put2byte(&data[hdr+3], nCell);
                   53090:   put2byte(&data[hdr+5], cellbody);
                   53091:   pPage->nFree -= (nCell*2 + nUsable - cellbody);
                   53092:   pPage->nCell = (u16)nCell;
                   53093: }
                   53094: 
                   53095: /*
                   53096: ** The following parameters determine how many adjacent pages get involved
                   53097: ** in a balancing operation.  NN is the number of neighbors on either side
                   53098: ** of the page that participate in the balancing operation.  NB is the
                   53099: ** total number of pages that participate, including the target page and
                   53100: ** NN neighbors on either side.
                   53101: **
                   53102: ** The minimum value of NN is 1 (of course).  Increasing NN above 1
                   53103: ** (to 2 or 3) gives a modest improvement in SELECT and DELETE performance
                   53104: ** in exchange for a larger degradation in INSERT and UPDATE performance.
                   53105: ** The value of NN appears to give the best results overall.
                   53106: */
                   53107: #define NN 1             /* Number of neighbors on either side of pPage */
                   53108: #define NB (NN*2+1)      /* Total pages involved in the balance */
                   53109: 
                   53110: 
                   53111: #ifndef SQLITE_OMIT_QUICKBALANCE
                   53112: /*
                   53113: ** This version of balance() handles the common special case where
                   53114: ** a new entry is being inserted on the extreme right-end of the
                   53115: ** tree, in other words, when the new entry will become the largest
                   53116: ** entry in the tree.
                   53117: **
                   53118: ** Instead of trying to balance the 3 right-most leaf pages, just add
                   53119: ** a new page to the right-hand side and put the one new entry in
                   53120: ** that page.  This leaves the right side of the tree somewhat
                   53121: ** unbalanced.  But odds are that we will be inserting new entries
                   53122: ** at the end soon afterwards so the nearly empty page will quickly
                   53123: ** fill up.  On average.
                   53124: **
                   53125: ** pPage is the leaf page which is the right-most page in the tree.
                   53126: ** pParent is its parent.  pPage must have a single overflow entry
                   53127: ** which is also the right-most entry on the page.
                   53128: **
                   53129: ** The pSpace buffer is used to store a temporary copy of the divider
                   53130: ** cell that will be inserted into pParent. Such a cell consists of a 4
                   53131: ** byte page number followed by a variable length integer. In other
                   53132: ** words, at most 13 bytes. Hence the pSpace buffer must be at
                   53133: ** least 13 bytes in size.
                   53134: */
                   53135: static int balance_quick(MemPage *pParent, MemPage *pPage, u8 *pSpace){
                   53136:   BtShared *const pBt = pPage->pBt;    /* B-Tree Database */
                   53137:   MemPage *pNew;                       /* Newly allocated page */
                   53138:   int rc;                              /* Return Code */
                   53139:   Pgno pgnoNew;                        /* Page number of pNew */
                   53140: 
                   53141:   assert( sqlite3_mutex_held(pPage->pBt->mutex) );
                   53142:   assert( sqlite3PagerIswriteable(pParent->pDbPage) );
                   53143:   assert( pPage->nOverflow==1 );
                   53144: 
                   53145:   /* This error condition is now caught prior to reaching this function */
                   53146:   if( pPage->nCell<=0 ) return SQLITE_CORRUPT_BKPT;
                   53147: 
                   53148:   /* Allocate a new page. This page will become the right-sibling of 
                   53149:   ** pPage. Make the parent page writable, so that the new divider cell
                   53150:   ** may be inserted. If both these operations are successful, proceed.
                   53151:   */
                   53152:   rc = allocateBtreePage(pBt, &pNew, &pgnoNew, 0, 0);
                   53153: 
                   53154:   if( rc==SQLITE_OK ){
                   53155: 
                   53156:     u8 *pOut = &pSpace[4];
                   53157:     u8 *pCell = pPage->aOvfl[0].pCell;
                   53158:     u16 szCell = cellSizePtr(pPage, pCell);
                   53159:     u8 *pStop;
                   53160: 
                   53161:     assert( sqlite3PagerIswriteable(pNew->pDbPage) );
                   53162:     assert( pPage->aData[0]==(PTF_INTKEY|PTF_LEAFDATA|PTF_LEAF) );
                   53163:     zeroPage(pNew, PTF_INTKEY|PTF_LEAFDATA|PTF_LEAF);
                   53164:     assemblePage(pNew, 1, &pCell, &szCell);
                   53165: 
                   53166:     /* If this is an auto-vacuum database, update the pointer map
                   53167:     ** with entries for the new page, and any pointer from the 
                   53168:     ** cell on the page to an overflow page. If either of these
                   53169:     ** operations fails, the return code is set, but the contents
                   53170:     ** of the parent page are still manipulated by thh code below.
                   53171:     ** That is Ok, at this point the parent page is guaranteed to
                   53172:     ** be marked as dirty. Returning an error code will cause a
                   53173:     ** rollback, undoing any changes made to the parent page.
                   53174:     */
                   53175:     if( ISAUTOVACUUM ){
                   53176:       ptrmapPut(pBt, pgnoNew, PTRMAP_BTREE, pParent->pgno, &rc);
                   53177:       if( szCell>pNew->minLocal ){
                   53178:         ptrmapPutOvflPtr(pNew, pCell, &rc);
                   53179:       }
                   53180:     }
                   53181:   
                   53182:     /* Create a divider cell to insert into pParent. The divider cell
                   53183:     ** consists of a 4-byte page number (the page number of pPage) and
                   53184:     ** a variable length key value (which must be the same value as the
                   53185:     ** largest key on pPage).
                   53186:     **
                   53187:     ** To find the largest key value on pPage, first find the right-most 
                   53188:     ** cell on pPage. The first two fields of this cell are the 
                   53189:     ** record-length (a variable length integer at most 32-bits in size)
                   53190:     ** and the key value (a variable length integer, may have any value).
                   53191:     ** The first of the while(...) loops below skips over the record-length
                   53192:     ** field. The second while(...) loop copies the key value from the
                   53193:     ** cell on pPage into the pSpace buffer.
                   53194:     */
                   53195:     pCell = findCell(pPage, pPage->nCell-1);
                   53196:     pStop = &pCell[9];
                   53197:     while( (*(pCell++)&0x80) && pCell<pStop );
                   53198:     pStop = &pCell[9];
                   53199:     while( ((*(pOut++) = *(pCell++))&0x80) && pCell<pStop );
                   53200: 
                   53201:     /* Insert the new divider cell into pParent. */
                   53202:     insertCell(pParent, pParent->nCell, pSpace, (int)(pOut-pSpace),
                   53203:                0, pPage->pgno, &rc);
                   53204: 
                   53205:     /* Set the right-child pointer of pParent to point to the new page. */
                   53206:     put4byte(&pParent->aData[pParent->hdrOffset+8], pgnoNew);
                   53207:   
                   53208:     /* Release the reference to the new page. */
                   53209:     releasePage(pNew);
                   53210:   }
                   53211: 
                   53212:   return rc;
                   53213: }
                   53214: #endif /* SQLITE_OMIT_QUICKBALANCE */
                   53215: 
                   53216: #if 0
                   53217: /*
                   53218: ** This function does not contribute anything to the operation of SQLite.
                   53219: ** it is sometimes activated temporarily while debugging code responsible 
                   53220: ** for setting pointer-map entries.
                   53221: */
                   53222: static int ptrmapCheckPages(MemPage **apPage, int nPage){
                   53223:   int i, j;
                   53224:   for(i=0; i<nPage; i++){
                   53225:     Pgno n;
                   53226:     u8 e;
                   53227:     MemPage *pPage = apPage[i];
                   53228:     BtShared *pBt = pPage->pBt;
                   53229:     assert( pPage->isInit );
                   53230: 
                   53231:     for(j=0; j<pPage->nCell; j++){
                   53232:       CellInfo info;
                   53233:       u8 *z;
                   53234:      
                   53235:       z = findCell(pPage, j);
                   53236:       btreeParseCellPtr(pPage, z, &info);
                   53237:       if( info.iOverflow ){
                   53238:         Pgno ovfl = get4byte(&z[info.iOverflow]);
                   53239:         ptrmapGet(pBt, ovfl, &e, &n);
                   53240:         assert( n==pPage->pgno && e==PTRMAP_OVERFLOW1 );
                   53241:       }
                   53242:       if( !pPage->leaf ){
                   53243:         Pgno child = get4byte(z);
                   53244:         ptrmapGet(pBt, child, &e, &n);
                   53245:         assert( n==pPage->pgno && e==PTRMAP_BTREE );
                   53246:       }
                   53247:     }
                   53248:     if( !pPage->leaf ){
                   53249:       Pgno child = get4byte(&pPage->aData[pPage->hdrOffset+8]);
                   53250:       ptrmapGet(pBt, child, &e, &n);
                   53251:       assert( n==pPage->pgno && e==PTRMAP_BTREE );
                   53252:     }
                   53253:   }
                   53254:   return 1;
                   53255: }
                   53256: #endif
                   53257: 
                   53258: /*
                   53259: ** This function is used to copy the contents of the b-tree node stored 
                   53260: ** on page pFrom to page pTo. If page pFrom was not a leaf page, then
                   53261: ** the pointer-map entries for each child page are updated so that the
                   53262: ** parent page stored in the pointer map is page pTo. If pFrom contained
                   53263: ** any cells with overflow page pointers, then the corresponding pointer
                   53264: ** map entries are also updated so that the parent page is page pTo.
                   53265: **
                   53266: ** If pFrom is currently carrying any overflow cells (entries in the
                   53267: ** MemPage.aOvfl[] array), they are not copied to pTo. 
                   53268: **
                   53269: ** Before returning, page pTo is reinitialized using btreeInitPage().
                   53270: **
                   53271: ** The performance of this function is not critical. It is only used by 
                   53272: ** the balance_shallower() and balance_deeper() procedures, neither of
                   53273: ** which are called often under normal circumstances.
                   53274: */
                   53275: static void copyNodeContent(MemPage *pFrom, MemPage *pTo, int *pRC){
                   53276:   if( (*pRC)==SQLITE_OK ){
                   53277:     BtShared * const pBt = pFrom->pBt;
                   53278:     u8 * const aFrom = pFrom->aData;
                   53279:     u8 * const aTo = pTo->aData;
                   53280:     int const iFromHdr = pFrom->hdrOffset;
                   53281:     int const iToHdr = ((pTo->pgno==1) ? 100 : 0);
                   53282:     int rc;
                   53283:     int iData;
                   53284:   
                   53285:   
                   53286:     assert( pFrom->isInit );
                   53287:     assert( pFrom->nFree>=iToHdr );
                   53288:     assert( get2byte(&aFrom[iFromHdr+5]) <= (int)pBt->usableSize );
                   53289:   
                   53290:     /* Copy the b-tree node content from page pFrom to page pTo. */
                   53291:     iData = get2byte(&aFrom[iFromHdr+5]);
                   53292:     memcpy(&aTo[iData], &aFrom[iData], pBt->usableSize-iData);
                   53293:     memcpy(&aTo[iToHdr], &aFrom[iFromHdr], pFrom->cellOffset + 2*pFrom->nCell);
                   53294:   
                   53295:     /* Reinitialize page pTo so that the contents of the MemPage structure
                   53296:     ** match the new data. The initialization of pTo can actually fail under
                   53297:     ** fairly obscure circumstances, even though it is a copy of initialized 
                   53298:     ** page pFrom.
                   53299:     */
                   53300:     pTo->isInit = 0;
                   53301:     rc = btreeInitPage(pTo);
                   53302:     if( rc!=SQLITE_OK ){
                   53303:       *pRC = rc;
                   53304:       return;
                   53305:     }
                   53306:   
                   53307:     /* If this is an auto-vacuum database, update the pointer-map entries
                   53308:     ** for any b-tree or overflow pages that pTo now contains the pointers to.
                   53309:     */
                   53310:     if( ISAUTOVACUUM ){
                   53311:       *pRC = setChildPtrmaps(pTo);
                   53312:     }
                   53313:   }
                   53314: }
                   53315: 
                   53316: /*
                   53317: ** This routine redistributes cells on the iParentIdx'th child of pParent
                   53318: ** (hereafter "the page") and up to 2 siblings so that all pages have about the
                   53319: ** same amount of free space. Usually a single sibling on either side of the
                   53320: ** page are used in the balancing, though both siblings might come from one
                   53321: ** side if the page is the first or last child of its parent. If the page 
                   53322: ** has fewer than 2 siblings (something which can only happen if the page
                   53323: ** is a root page or a child of a root page) then all available siblings
                   53324: ** participate in the balancing.
                   53325: **
                   53326: ** The number of siblings of the page might be increased or decreased by 
                   53327: ** one or two in an effort to keep pages nearly full but not over full. 
                   53328: **
                   53329: ** Note that when this routine is called, some of the cells on the page
                   53330: ** might not actually be stored in MemPage.aData[]. This can happen
                   53331: ** if the page is overfull. This routine ensures that all cells allocated
                   53332: ** to the page and its siblings fit into MemPage.aData[] before returning.
                   53333: **
                   53334: ** In the course of balancing the page and its siblings, cells may be
                   53335: ** inserted into or removed from the parent page (pParent). Doing so
                   53336: ** may cause the parent page to become overfull or underfull. If this
                   53337: ** happens, it is the responsibility of the caller to invoke the correct
                   53338: ** balancing routine to fix this problem (see the balance() routine). 
                   53339: **
                   53340: ** If this routine fails for any reason, it might leave the database
                   53341: ** in a corrupted state. So if this routine fails, the database should
                   53342: ** be rolled back.
                   53343: **
                   53344: ** The third argument to this function, aOvflSpace, is a pointer to a
                   53345: ** buffer big enough to hold one page. If while inserting cells into the parent
                   53346: ** page (pParent) the parent page becomes overfull, this buffer is
                   53347: ** used to store the parent's overflow cells. Because this function inserts
                   53348: ** a maximum of four divider cells into the parent page, and the maximum
                   53349: ** size of a cell stored within an internal node is always less than 1/4
                   53350: ** of the page-size, the aOvflSpace[] buffer is guaranteed to be large
                   53351: ** enough for all overflow cells.
                   53352: **
                   53353: ** If aOvflSpace is set to a null pointer, this function returns 
                   53354: ** SQLITE_NOMEM.
                   53355: */
                   53356: static int balance_nonroot(
                   53357:   MemPage *pParent,               /* Parent page of siblings being balanced */
                   53358:   int iParentIdx,                 /* Index of "the page" in pParent */
                   53359:   u8 *aOvflSpace,                 /* page-size bytes of space for parent ovfl */
                   53360:   int isRoot                      /* True if pParent is a root-page */
                   53361: ){
                   53362:   BtShared *pBt;               /* The whole database */
                   53363:   int nCell = 0;               /* Number of cells in apCell[] */
                   53364:   int nMaxCells = 0;           /* Allocated size of apCell, szCell, aFrom. */
                   53365:   int nNew = 0;                /* Number of pages in apNew[] */
                   53366:   int nOld;                    /* Number of pages in apOld[] */
                   53367:   int i, j, k;                 /* Loop counters */
                   53368:   int nxDiv;                   /* Next divider slot in pParent->aCell[] */
                   53369:   int rc = SQLITE_OK;          /* The return code */
                   53370:   u16 leafCorrection;          /* 4 if pPage is a leaf.  0 if not */
                   53371:   int leafData;                /* True if pPage is a leaf of a LEAFDATA tree */
                   53372:   int usableSpace;             /* Bytes in pPage beyond the header */
                   53373:   int pageFlags;               /* Value of pPage->aData[0] */
                   53374:   int subtotal;                /* Subtotal of bytes in cells on one page */
                   53375:   int iSpace1 = 0;             /* First unused byte of aSpace1[] */
                   53376:   int iOvflSpace = 0;          /* First unused byte of aOvflSpace[] */
                   53377:   int szScratch;               /* Size of scratch memory requested */
                   53378:   MemPage *apOld[NB];          /* pPage and up to two siblings */
                   53379:   MemPage *apCopy[NB];         /* Private copies of apOld[] pages */
                   53380:   MemPage *apNew[NB+2];        /* pPage and up to NB siblings after balancing */
                   53381:   u8 *pRight;                  /* Location in parent of right-sibling pointer */
                   53382:   u8 *apDiv[NB-1];             /* Divider cells in pParent */
                   53383:   int cntNew[NB+2];            /* Index in aCell[] of cell after i-th page */
                   53384:   int szNew[NB+2];             /* Combined size of cells place on i-th page */
                   53385:   u8 **apCell = 0;             /* All cells begin balanced */
                   53386:   u16 *szCell;                 /* Local size of all cells in apCell[] */
                   53387:   u8 *aSpace1;                 /* Space for copies of dividers cells */
                   53388:   Pgno pgno;                   /* Temp var to store a page number in */
                   53389: 
                   53390:   pBt = pParent->pBt;
                   53391:   assert( sqlite3_mutex_held(pBt->mutex) );
                   53392:   assert( sqlite3PagerIswriteable(pParent->pDbPage) );
                   53393: 
                   53394: #if 0
                   53395:   TRACE(("BALANCE: begin page %d child of %d\n", pPage->pgno, pParent->pgno));
                   53396: #endif
                   53397: 
                   53398:   /* At this point pParent may have at most one overflow cell. And if
                   53399:   ** this overflow cell is present, it must be the cell with 
                   53400:   ** index iParentIdx. This scenario comes about when this function
                   53401:   ** is called (indirectly) from sqlite3BtreeDelete().
                   53402:   */
                   53403:   assert( pParent->nOverflow==0 || pParent->nOverflow==1 );
                   53404:   assert( pParent->nOverflow==0 || pParent->aOvfl[0].idx==iParentIdx );
                   53405: 
                   53406:   if( !aOvflSpace ){
                   53407:     return SQLITE_NOMEM;
                   53408:   }
                   53409: 
                   53410:   /* Find the sibling pages to balance. Also locate the cells in pParent 
                   53411:   ** that divide the siblings. An attempt is made to find NN siblings on 
                   53412:   ** either side of pPage. More siblings are taken from one side, however, 
                   53413:   ** if there are fewer than NN siblings on the other side. If pParent
                   53414:   ** has NB or fewer children then all children of pParent are taken.  
                   53415:   **
                   53416:   ** This loop also drops the divider cells from the parent page. This
                   53417:   ** way, the remainder of the function does not have to deal with any
                   53418:   ** overflow cells in the parent page, since if any existed they will
                   53419:   ** have already been removed.
                   53420:   */
                   53421:   i = pParent->nOverflow + pParent->nCell;
                   53422:   if( i<2 ){
                   53423:     nxDiv = 0;
                   53424:     nOld = i+1;
                   53425:   }else{
                   53426:     nOld = 3;
                   53427:     if( iParentIdx==0 ){                 
                   53428:       nxDiv = 0;
                   53429:     }else if( iParentIdx==i ){
                   53430:       nxDiv = i-2;
                   53431:     }else{
                   53432:       nxDiv = iParentIdx-1;
                   53433:     }
                   53434:     i = 2;
                   53435:   }
                   53436:   if( (i+nxDiv-pParent->nOverflow)==pParent->nCell ){
                   53437:     pRight = &pParent->aData[pParent->hdrOffset+8];
                   53438:   }else{
                   53439:     pRight = findCell(pParent, i+nxDiv-pParent->nOverflow);
                   53440:   }
                   53441:   pgno = get4byte(pRight);
                   53442:   while( 1 ){
                   53443:     rc = getAndInitPage(pBt, pgno, &apOld[i]);
                   53444:     if( rc ){
                   53445:       memset(apOld, 0, (i+1)*sizeof(MemPage*));
                   53446:       goto balance_cleanup;
                   53447:     }
                   53448:     nMaxCells += 1+apOld[i]->nCell+apOld[i]->nOverflow;
                   53449:     if( (i--)==0 ) break;
                   53450: 
                   53451:     if( i+nxDiv==pParent->aOvfl[0].idx && pParent->nOverflow ){
                   53452:       apDiv[i] = pParent->aOvfl[0].pCell;
                   53453:       pgno = get4byte(apDiv[i]);
                   53454:       szNew[i] = cellSizePtr(pParent, apDiv[i]);
                   53455:       pParent->nOverflow = 0;
                   53456:     }else{
                   53457:       apDiv[i] = findCell(pParent, i+nxDiv-pParent->nOverflow);
                   53458:       pgno = get4byte(apDiv[i]);
                   53459:       szNew[i] = cellSizePtr(pParent, apDiv[i]);
                   53460: 
                   53461:       /* Drop the cell from the parent page. apDiv[i] still points to
                   53462:       ** the cell within the parent, even though it has been dropped.
                   53463:       ** This is safe because dropping a cell only overwrites the first
                   53464:       ** four bytes of it, and this function does not need the first
                   53465:       ** four bytes of the divider cell. So the pointer is safe to use
                   53466:       ** later on.  
                   53467:       **
                   53468:       ** Unless SQLite is compiled in secure-delete mode. In this case,
                   53469:       ** the dropCell() routine will overwrite the entire cell with zeroes.
                   53470:       ** In this case, temporarily copy the cell into the aOvflSpace[]
                   53471:       ** buffer. It will be copied out again as soon as the aSpace[] buffer
                   53472:       ** is allocated.  */
                   53473:       if( pBt->secureDelete ){
                   53474:         int iOff = SQLITE_PTR_TO_INT(apDiv[i]) - SQLITE_PTR_TO_INT(pParent->aData);
                   53475:         if( (iOff+szNew[i])>(int)pBt->usableSize ){
                   53476:           rc = SQLITE_CORRUPT_BKPT;
                   53477:           memset(apOld, 0, (i+1)*sizeof(MemPage*));
                   53478:           goto balance_cleanup;
                   53479:         }else{
                   53480:           memcpy(&aOvflSpace[iOff], apDiv[i], szNew[i]);
                   53481:           apDiv[i] = &aOvflSpace[apDiv[i]-pParent->aData];
                   53482:         }
                   53483:       }
                   53484:       dropCell(pParent, i+nxDiv-pParent->nOverflow, szNew[i], &rc);
                   53485:     }
                   53486:   }
                   53487: 
                   53488:   /* Make nMaxCells a multiple of 4 in order to preserve 8-byte
                   53489:   ** alignment */
                   53490:   nMaxCells = (nMaxCells + 3)&~3;
                   53491: 
                   53492:   /*
                   53493:   ** Allocate space for memory structures
                   53494:   */
                   53495:   k = pBt->pageSize + ROUND8(sizeof(MemPage));
                   53496:   szScratch =
                   53497:        nMaxCells*sizeof(u8*)                       /* apCell */
                   53498:      + nMaxCells*sizeof(u16)                       /* szCell */
                   53499:      + pBt->pageSize                               /* aSpace1 */
                   53500:      + k*nOld;                                     /* Page copies (apCopy) */
                   53501:   apCell = sqlite3ScratchMalloc( szScratch ); 
                   53502:   if( apCell==0 ){
                   53503:     rc = SQLITE_NOMEM;
                   53504:     goto balance_cleanup;
                   53505:   }
                   53506:   szCell = (u16*)&apCell[nMaxCells];
                   53507:   aSpace1 = (u8*)&szCell[nMaxCells];
                   53508:   assert( EIGHT_BYTE_ALIGNMENT(aSpace1) );
                   53509: 
                   53510:   /*
                   53511:   ** Load pointers to all cells on sibling pages and the divider cells
                   53512:   ** into the local apCell[] array.  Make copies of the divider cells
                   53513:   ** into space obtained from aSpace1[] and remove the the divider Cells
                   53514:   ** from pParent.
                   53515:   **
                   53516:   ** If the siblings are on leaf pages, then the child pointers of the
                   53517:   ** divider cells are stripped from the cells before they are copied
                   53518:   ** into aSpace1[].  In this way, all cells in apCell[] are without
                   53519:   ** child pointers.  If siblings are not leaves, then all cell in
                   53520:   ** apCell[] include child pointers.  Either way, all cells in apCell[]
                   53521:   ** are alike.
                   53522:   **
                   53523:   ** leafCorrection:  4 if pPage is a leaf.  0 if pPage is not a leaf.
                   53524:   **       leafData:  1 if pPage holds key+data and pParent holds only keys.
                   53525:   */
                   53526:   leafCorrection = apOld[0]->leaf*4;
                   53527:   leafData = apOld[0]->hasData;
                   53528:   for(i=0; i<nOld; i++){
                   53529:     int limit;
                   53530:     
                   53531:     /* Before doing anything else, take a copy of the i'th original sibling
                   53532:     ** The rest of this function will use data from the copies rather
                   53533:     ** that the original pages since the original pages will be in the
                   53534:     ** process of being overwritten.  */
                   53535:     MemPage *pOld = apCopy[i] = (MemPage*)&aSpace1[pBt->pageSize + k*i];
                   53536:     memcpy(pOld, apOld[i], sizeof(MemPage));
                   53537:     pOld->aData = (void*)&pOld[1];
                   53538:     memcpy(pOld->aData, apOld[i]->aData, pBt->pageSize);
                   53539: 
                   53540:     limit = pOld->nCell+pOld->nOverflow;
                   53541:     if( pOld->nOverflow>0 ){
                   53542:       for(j=0; j<limit; j++){
                   53543:         assert( nCell<nMaxCells );
                   53544:         apCell[nCell] = findOverflowCell(pOld, j);
                   53545:         szCell[nCell] = cellSizePtr(pOld, apCell[nCell]);
                   53546:         nCell++;
                   53547:       }
                   53548:     }else{
                   53549:       u8 *aData = pOld->aData;
                   53550:       u16 maskPage = pOld->maskPage;
                   53551:       u16 cellOffset = pOld->cellOffset;
                   53552:       for(j=0; j<limit; j++){
                   53553:         assert( nCell<nMaxCells );
                   53554:         apCell[nCell] = findCellv2(aData, maskPage, cellOffset, j);
                   53555:         szCell[nCell] = cellSizePtr(pOld, apCell[nCell]);
                   53556:         nCell++;
                   53557:       }
                   53558:     }       
                   53559:     if( i<nOld-1 && !leafData){
                   53560:       u16 sz = (u16)szNew[i];
                   53561:       u8 *pTemp;
                   53562:       assert( nCell<nMaxCells );
                   53563:       szCell[nCell] = sz;
                   53564:       pTemp = &aSpace1[iSpace1];
                   53565:       iSpace1 += sz;
                   53566:       assert( sz<=pBt->maxLocal+23 );
                   53567:       assert( iSpace1 <= (int)pBt->pageSize );
                   53568:       memcpy(pTemp, apDiv[i], sz);
                   53569:       apCell[nCell] = pTemp+leafCorrection;
                   53570:       assert( leafCorrection==0 || leafCorrection==4 );
                   53571:       szCell[nCell] = szCell[nCell] - leafCorrection;
                   53572:       if( !pOld->leaf ){
                   53573:         assert( leafCorrection==0 );
                   53574:         assert( pOld->hdrOffset==0 );
                   53575:         /* The right pointer of the child page pOld becomes the left
                   53576:         ** pointer of the divider cell */
                   53577:         memcpy(apCell[nCell], &pOld->aData[8], 4);
                   53578:       }else{
                   53579:         assert( leafCorrection==4 );
                   53580:         if( szCell[nCell]<4 ){
                   53581:           /* Do not allow any cells smaller than 4 bytes. */
                   53582:           szCell[nCell] = 4;
                   53583:         }
                   53584:       }
                   53585:       nCell++;
                   53586:     }
                   53587:   }
                   53588: 
                   53589:   /*
                   53590:   ** Figure out the number of pages needed to hold all nCell cells.
                   53591:   ** Store this number in "k".  Also compute szNew[] which is the total
                   53592:   ** size of all cells on the i-th page and cntNew[] which is the index
                   53593:   ** in apCell[] of the cell that divides page i from page i+1.  
                   53594:   ** cntNew[k] should equal nCell.
                   53595:   **
                   53596:   ** Values computed by this block:
                   53597:   **
                   53598:   **           k: The total number of sibling pages
                   53599:   **    szNew[i]: Spaced used on the i-th sibling page.
                   53600:   **   cntNew[i]: Index in apCell[] and szCell[] for the first cell to
                   53601:   **              the right of the i-th sibling page.
                   53602:   ** usableSpace: Number of bytes of space available on each sibling.
                   53603:   ** 
                   53604:   */
                   53605:   usableSpace = pBt->usableSize - 12 + leafCorrection;
                   53606:   for(subtotal=k=i=0; i<nCell; i++){
                   53607:     assert( i<nMaxCells );
                   53608:     subtotal += szCell[i] + 2;
                   53609:     if( subtotal > usableSpace ){
                   53610:       szNew[k] = subtotal - szCell[i];
                   53611:       cntNew[k] = i;
                   53612:       if( leafData ){ i--; }
                   53613:       subtotal = 0;
                   53614:       k++;
                   53615:       if( k>NB+1 ){ rc = SQLITE_CORRUPT_BKPT; goto balance_cleanup; }
                   53616:     }
                   53617:   }
                   53618:   szNew[k] = subtotal;
                   53619:   cntNew[k] = nCell;
                   53620:   k++;
                   53621: 
                   53622:   /*
                   53623:   ** The packing computed by the previous block is biased toward the siblings
                   53624:   ** on the left side.  The left siblings are always nearly full, while the
                   53625:   ** right-most sibling might be nearly empty.  This block of code attempts
                   53626:   ** to adjust the packing of siblings to get a better balance.
                   53627:   **
                   53628:   ** This adjustment is more than an optimization.  The packing above might
                   53629:   ** be so out of balance as to be illegal.  For example, the right-most
                   53630:   ** sibling might be completely empty.  This adjustment is not optional.
                   53631:   */
                   53632:   for(i=k-1; i>0; i--){
                   53633:     int szRight = szNew[i];  /* Size of sibling on the right */
                   53634:     int szLeft = szNew[i-1]; /* Size of sibling on the left */
                   53635:     int r;              /* Index of right-most cell in left sibling */
                   53636:     int d;              /* Index of first cell to the left of right sibling */
                   53637: 
                   53638:     r = cntNew[i-1] - 1;
                   53639:     d = r + 1 - leafData;
                   53640:     assert( d<nMaxCells );
                   53641:     assert( r<nMaxCells );
                   53642:     while( szRight==0 || szRight+szCell[d]+2<=szLeft-(szCell[r]+2) ){
                   53643:       szRight += szCell[d] + 2;
                   53644:       szLeft -= szCell[r] + 2;
                   53645:       cntNew[i-1]--;
                   53646:       r = cntNew[i-1] - 1;
                   53647:       d = r + 1 - leafData;
                   53648:     }
                   53649:     szNew[i] = szRight;
                   53650:     szNew[i-1] = szLeft;
                   53651:   }
                   53652: 
                   53653:   /* Either we found one or more cells (cntnew[0])>0) or pPage is
                   53654:   ** a virtual root page.  A virtual root page is when the real root
                   53655:   ** page is page 1 and we are the only child of that page.
                   53656:   */
                   53657:   assert( cntNew[0]>0 || (pParent->pgno==1 && pParent->nCell==0) );
                   53658: 
                   53659:   TRACE(("BALANCE: old: %d %d %d  ",
                   53660:     apOld[0]->pgno, 
                   53661:     nOld>=2 ? apOld[1]->pgno : 0,
                   53662:     nOld>=3 ? apOld[2]->pgno : 0
                   53663:   ));
                   53664: 
                   53665:   /*
                   53666:   ** Allocate k new pages.  Reuse old pages where possible.
                   53667:   */
                   53668:   if( apOld[0]->pgno<=1 ){
                   53669:     rc = SQLITE_CORRUPT_BKPT;
                   53670:     goto balance_cleanup;
                   53671:   }
                   53672:   pageFlags = apOld[0]->aData[0];
                   53673:   for(i=0; i<k; i++){
                   53674:     MemPage *pNew;
                   53675:     if( i<nOld ){
                   53676:       pNew = apNew[i] = apOld[i];
                   53677:       apOld[i] = 0;
                   53678:       rc = sqlite3PagerWrite(pNew->pDbPage);
                   53679:       nNew++;
                   53680:       if( rc ) goto balance_cleanup;
                   53681:     }else{
                   53682:       assert( i>0 );
                   53683:       rc = allocateBtreePage(pBt, &pNew, &pgno, pgno, 0);
                   53684:       if( rc ) goto balance_cleanup;
                   53685:       apNew[i] = pNew;
                   53686:       nNew++;
                   53687: 
                   53688:       /* Set the pointer-map entry for the new sibling page. */
                   53689:       if( ISAUTOVACUUM ){
                   53690:         ptrmapPut(pBt, pNew->pgno, PTRMAP_BTREE, pParent->pgno, &rc);
                   53691:         if( rc!=SQLITE_OK ){
                   53692:           goto balance_cleanup;
                   53693:         }
                   53694:       }
                   53695:     }
                   53696:   }
                   53697: 
                   53698:   /* Free any old pages that were not reused as new pages.
                   53699:   */
                   53700:   while( i<nOld ){
                   53701:     freePage(apOld[i], &rc);
                   53702:     if( rc ) goto balance_cleanup;
                   53703:     releasePage(apOld[i]);
                   53704:     apOld[i] = 0;
                   53705:     i++;
                   53706:   }
                   53707: 
                   53708:   /*
                   53709:   ** Put the new pages in accending order.  This helps to
                   53710:   ** keep entries in the disk file in order so that a scan
                   53711:   ** of the table is a linear scan through the file.  That
                   53712:   ** in turn helps the operating system to deliver pages
                   53713:   ** from the disk more rapidly.
                   53714:   **
                   53715:   ** An O(n^2) insertion sort algorithm is used, but since
                   53716:   ** n is never more than NB (a small constant), that should
                   53717:   ** not be a problem.
                   53718:   **
                   53719:   ** When NB==3, this one optimization makes the database
                   53720:   ** about 25% faster for large insertions and deletions.
                   53721:   */
                   53722:   for(i=0; i<k-1; i++){
                   53723:     int minV = apNew[i]->pgno;
                   53724:     int minI = i;
                   53725:     for(j=i+1; j<k; j++){
                   53726:       if( apNew[j]->pgno<(unsigned)minV ){
                   53727:         minI = j;
                   53728:         minV = apNew[j]->pgno;
                   53729:       }
                   53730:     }
                   53731:     if( minI>i ){
                   53732:       MemPage *pT;
                   53733:       pT = apNew[i];
                   53734:       apNew[i] = apNew[minI];
                   53735:       apNew[minI] = pT;
                   53736:     }
                   53737:   }
                   53738:   TRACE(("new: %d(%d) %d(%d) %d(%d) %d(%d) %d(%d)\n",
                   53739:     apNew[0]->pgno, szNew[0],
                   53740:     nNew>=2 ? apNew[1]->pgno : 0, nNew>=2 ? szNew[1] : 0,
                   53741:     nNew>=3 ? apNew[2]->pgno : 0, nNew>=3 ? szNew[2] : 0,
                   53742:     nNew>=4 ? apNew[3]->pgno : 0, nNew>=4 ? szNew[3] : 0,
                   53743:     nNew>=5 ? apNew[4]->pgno : 0, nNew>=5 ? szNew[4] : 0));
                   53744: 
                   53745:   assert( sqlite3PagerIswriteable(pParent->pDbPage) );
                   53746:   put4byte(pRight, apNew[nNew-1]->pgno);
                   53747: 
                   53748:   /*
                   53749:   ** Evenly distribute the data in apCell[] across the new pages.
                   53750:   ** Insert divider cells into pParent as necessary.
                   53751:   */
                   53752:   j = 0;
                   53753:   for(i=0; i<nNew; i++){
                   53754:     /* Assemble the new sibling page. */
                   53755:     MemPage *pNew = apNew[i];
                   53756:     assert( j<nMaxCells );
                   53757:     zeroPage(pNew, pageFlags);
                   53758:     assemblePage(pNew, cntNew[i]-j, &apCell[j], &szCell[j]);
                   53759:     assert( pNew->nCell>0 || (nNew==1 && cntNew[0]==0) );
                   53760:     assert( pNew->nOverflow==0 );
                   53761: 
                   53762:     j = cntNew[i];
                   53763: 
                   53764:     /* If the sibling page assembled above was not the right-most sibling,
                   53765:     ** insert a divider cell into the parent page.
                   53766:     */
                   53767:     assert( i<nNew-1 || j==nCell );
                   53768:     if( j<nCell ){
                   53769:       u8 *pCell;
                   53770:       u8 *pTemp;
                   53771:       int sz;
                   53772: 
                   53773:       assert( j<nMaxCells );
                   53774:       pCell = apCell[j];
                   53775:       sz = szCell[j] + leafCorrection;
                   53776:       pTemp = &aOvflSpace[iOvflSpace];
                   53777:       if( !pNew->leaf ){
                   53778:         memcpy(&pNew->aData[8], pCell, 4);
                   53779:       }else if( leafData ){
                   53780:         /* If the tree is a leaf-data tree, and the siblings are leaves, 
                   53781:         ** then there is no divider cell in apCell[]. Instead, the divider 
                   53782:         ** cell consists of the integer key for the right-most cell of 
                   53783:         ** the sibling-page assembled above only.
                   53784:         */
                   53785:         CellInfo info;
                   53786:         j--;
                   53787:         btreeParseCellPtr(pNew, apCell[j], &info);
                   53788:         pCell = pTemp;
                   53789:         sz = 4 + putVarint(&pCell[4], info.nKey);
                   53790:         pTemp = 0;
                   53791:       }else{
                   53792:         pCell -= 4;
                   53793:         /* Obscure case for non-leaf-data trees: If the cell at pCell was
                   53794:         ** previously stored on a leaf node, and its reported size was 4
                   53795:         ** bytes, then it may actually be smaller than this 
                   53796:         ** (see btreeParseCellPtr(), 4 bytes is the minimum size of
                   53797:         ** any cell). But it is important to pass the correct size to 
                   53798:         ** insertCell(), so reparse the cell now.
                   53799:         **
                   53800:         ** Note that this can never happen in an SQLite data file, as all
                   53801:         ** cells are at least 4 bytes. It only happens in b-trees used
                   53802:         ** to evaluate "IN (SELECT ...)" and similar clauses.
                   53803:         */
                   53804:         if( szCell[j]==4 ){
                   53805:           assert(leafCorrection==4);
                   53806:           sz = cellSizePtr(pParent, pCell);
                   53807:         }
                   53808:       }
                   53809:       iOvflSpace += sz;
                   53810:       assert( sz<=pBt->maxLocal+23 );
                   53811:       assert( iOvflSpace <= (int)pBt->pageSize );
                   53812:       insertCell(pParent, nxDiv, pCell, sz, pTemp, pNew->pgno, &rc);
                   53813:       if( rc!=SQLITE_OK ) goto balance_cleanup;
                   53814:       assert( sqlite3PagerIswriteable(pParent->pDbPage) );
                   53815: 
                   53816:       j++;
                   53817:       nxDiv++;
                   53818:     }
                   53819:   }
                   53820:   assert( j==nCell );
                   53821:   assert( nOld>0 );
                   53822:   assert( nNew>0 );
                   53823:   if( (pageFlags & PTF_LEAF)==0 ){
                   53824:     u8 *zChild = &apCopy[nOld-1]->aData[8];
                   53825:     memcpy(&apNew[nNew-1]->aData[8], zChild, 4);
                   53826:   }
                   53827: 
                   53828:   if( isRoot && pParent->nCell==0 && pParent->hdrOffset<=apNew[0]->nFree ){
                   53829:     /* The root page of the b-tree now contains no cells. The only sibling
                   53830:     ** page is the right-child of the parent. Copy the contents of the
                   53831:     ** child page into the parent, decreasing the overall height of the
                   53832:     ** b-tree structure by one. This is described as the "balance-shallower"
                   53833:     ** sub-algorithm in some documentation.
                   53834:     **
                   53835:     ** If this is an auto-vacuum database, the call to copyNodeContent() 
                   53836:     ** sets all pointer-map entries corresponding to database image pages 
                   53837:     ** for which the pointer is stored within the content being copied.
                   53838:     **
                   53839:     ** The second assert below verifies that the child page is defragmented
                   53840:     ** (it must be, as it was just reconstructed using assemblePage()). This
                   53841:     ** is important if the parent page happens to be page 1 of the database
                   53842:     ** image.  */
                   53843:     assert( nNew==1 );
                   53844:     assert( apNew[0]->nFree == 
                   53845:         (get2byte(&apNew[0]->aData[5])-apNew[0]->cellOffset-apNew[0]->nCell*2) 
                   53846:     );
                   53847:     copyNodeContent(apNew[0], pParent, &rc);
                   53848:     freePage(apNew[0], &rc);
                   53849:   }else if( ISAUTOVACUUM ){
                   53850:     /* Fix the pointer-map entries for all the cells that were shifted around. 
                   53851:     ** There are several different types of pointer-map entries that need to
                   53852:     ** be dealt with by this routine. Some of these have been set already, but
                   53853:     ** many have not. The following is a summary:
                   53854:     **
                   53855:     **   1) The entries associated with new sibling pages that were not
                   53856:     **      siblings when this function was called. These have already
                   53857:     **      been set. We don't need to worry about old siblings that were
                   53858:     **      moved to the free-list - the freePage() code has taken care
                   53859:     **      of those.
                   53860:     **
                   53861:     **   2) The pointer-map entries associated with the first overflow
                   53862:     **      page in any overflow chains used by new divider cells. These 
                   53863:     **      have also already been taken care of by the insertCell() code.
                   53864:     **
                   53865:     **   3) If the sibling pages are not leaves, then the child pages of
                   53866:     **      cells stored on the sibling pages may need to be updated.
                   53867:     **
                   53868:     **   4) If the sibling pages are not internal intkey nodes, then any
                   53869:     **      overflow pages used by these cells may need to be updated
                   53870:     **      (internal intkey nodes never contain pointers to overflow pages).
                   53871:     **
                   53872:     **   5) If the sibling pages are not leaves, then the pointer-map
                   53873:     **      entries for the right-child pages of each sibling may need
                   53874:     **      to be updated.
                   53875:     **
                   53876:     ** Cases 1 and 2 are dealt with above by other code. The next
                   53877:     ** block deals with cases 3 and 4 and the one after that, case 5. Since
                   53878:     ** setting a pointer map entry is a relatively expensive operation, this
                   53879:     ** code only sets pointer map entries for child or overflow pages that have
                   53880:     ** actually moved between pages.  */
                   53881:     MemPage *pNew = apNew[0];
                   53882:     MemPage *pOld = apCopy[0];
                   53883:     int nOverflow = pOld->nOverflow;
                   53884:     int iNextOld = pOld->nCell + nOverflow;
                   53885:     int iOverflow = (nOverflow ? pOld->aOvfl[0].idx : -1);
                   53886:     j = 0;                             /* Current 'old' sibling page */
                   53887:     k = 0;                             /* Current 'new' sibling page */
                   53888:     for(i=0; i<nCell; i++){
                   53889:       int isDivider = 0;
                   53890:       while( i==iNextOld ){
                   53891:         /* Cell i is the cell immediately following the last cell on old
                   53892:         ** sibling page j. If the siblings are not leaf pages of an
                   53893:         ** intkey b-tree, then cell i was a divider cell. */
                   53894:         pOld = apCopy[++j];
                   53895:         iNextOld = i + !leafData + pOld->nCell + pOld->nOverflow;
                   53896:         if( pOld->nOverflow ){
                   53897:           nOverflow = pOld->nOverflow;
                   53898:           iOverflow = i + !leafData + pOld->aOvfl[0].idx;
                   53899:         }
                   53900:         isDivider = !leafData;  
                   53901:       }
                   53902: 
                   53903:       assert(nOverflow>0 || iOverflow<i );
                   53904:       assert(nOverflow<2 || pOld->aOvfl[0].idx==pOld->aOvfl[1].idx-1);
                   53905:       assert(nOverflow<3 || pOld->aOvfl[1].idx==pOld->aOvfl[2].idx-1);
                   53906:       if( i==iOverflow ){
                   53907:         isDivider = 1;
                   53908:         if( (--nOverflow)>0 ){
                   53909:           iOverflow++;
                   53910:         }
                   53911:       }
                   53912: 
                   53913:       if( i==cntNew[k] ){
                   53914:         /* Cell i is the cell immediately following the last cell on new
                   53915:         ** sibling page k. If the siblings are not leaf pages of an
                   53916:         ** intkey b-tree, then cell i is a divider cell.  */
                   53917:         pNew = apNew[++k];
                   53918:         if( !leafData ) continue;
                   53919:       }
                   53920:       assert( j<nOld );
                   53921:       assert( k<nNew );
                   53922: 
                   53923:       /* If the cell was originally divider cell (and is not now) or
                   53924:       ** an overflow cell, or if the cell was located on a different sibling
                   53925:       ** page before the balancing, then the pointer map entries associated
                   53926:       ** with any child or overflow pages need to be updated.  */
                   53927:       if( isDivider || pOld->pgno!=pNew->pgno ){
                   53928:         if( !leafCorrection ){
                   53929:           ptrmapPut(pBt, get4byte(apCell[i]), PTRMAP_BTREE, pNew->pgno, &rc);
                   53930:         }
                   53931:         if( szCell[i]>pNew->minLocal ){
                   53932:           ptrmapPutOvflPtr(pNew, apCell[i], &rc);
                   53933:         }
                   53934:       }
                   53935:     }
                   53936: 
                   53937:     if( !leafCorrection ){
                   53938:       for(i=0; i<nNew; i++){
                   53939:         u32 key = get4byte(&apNew[i]->aData[8]);
                   53940:         ptrmapPut(pBt, key, PTRMAP_BTREE, apNew[i]->pgno, &rc);
                   53941:       }
                   53942:     }
                   53943: 
                   53944: #if 0
                   53945:     /* The ptrmapCheckPages() contains assert() statements that verify that
                   53946:     ** all pointer map pages are set correctly. This is helpful while 
                   53947:     ** debugging. This is usually disabled because a corrupt database may
                   53948:     ** cause an assert() statement to fail.  */
                   53949:     ptrmapCheckPages(apNew, nNew);
                   53950:     ptrmapCheckPages(&pParent, 1);
                   53951: #endif
                   53952:   }
                   53953: 
                   53954:   assert( pParent->isInit );
                   53955:   TRACE(("BALANCE: finished: old=%d new=%d cells=%d\n",
                   53956:           nOld, nNew, nCell));
                   53957: 
                   53958:   /*
                   53959:   ** Cleanup before returning.
                   53960:   */
                   53961: balance_cleanup:
                   53962:   sqlite3ScratchFree(apCell);
                   53963:   for(i=0; i<nOld; i++){
                   53964:     releasePage(apOld[i]);
                   53965:   }
                   53966:   for(i=0; i<nNew; i++){
                   53967:     releasePage(apNew[i]);
                   53968:   }
                   53969: 
                   53970:   return rc;
                   53971: }
                   53972: 
                   53973: 
                   53974: /*
                   53975: ** This function is called when the root page of a b-tree structure is
                   53976: ** overfull (has one or more overflow pages).
                   53977: **
                   53978: ** A new child page is allocated and the contents of the current root
                   53979: ** page, including overflow cells, are copied into the child. The root
                   53980: ** page is then overwritten to make it an empty page with the right-child 
                   53981: ** pointer pointing to the new page.
                   53982: **
                   53983: ** Before returning, all pointer-map entries corresponding to pages 
                   53984: ** that the new child-page now contains pointers to are updated. The
                   53985: ** entry corresponding to the new right-child pointer of the root
                   53986: ** page is also updated.
                   53987: **
                   53988: ** If successful, *ppChild is set to contain a reference to the child 
                   53989: ** page and SQLITE_OK is returned. In this case the caller is required
                   53990: ** to call releasePage() on *ppChild exactly once. If an error occurs,
                   53991: ** an error code is returned and *ppChild is set to 0.
                   53992: */
                   53993: static int balance_deeper(MemPage *pRoot, MemPage **ppChild){
                   53994:   int rc;                        /* Return value from subprocedures */
                   53995:   MemPage *pChild = 0;           /* Pointer to a new child page */
                   53996:   Pgno pgnoChild = 0;            /* Page number of the new child page */
                   53997:   BtShared *pBt = pRoot->pBt;    /* The BTree */
                   53998: 
                   53999:   assert( pRoot->nOverflow>0 );
                   54000:   assert( sqlite3_mutex_held(pBt->mutex) );
                   54001: 
                   54002:   /* Make pRoot, the root page of the b-tree, writable. Allocate a new 
                   54003:   ** page that will become the new right-child of pPage. Copy the contents
                   54004:   ** of the node stored on pRoot into the new child page.
                   54005:   */
                   54006:   rc = sqlite3PagerWrite(pRoot->pDbPage);
                   54007:   if( rc==SQLITE_OK ){
                   54008:     rc = allocateBtreePage(pBt,&pChild,&pgnoChild,pRoot->pgno,0);
                   54009:     copyNodeContent(pRoot, pChild, &rc);
                   54010:     if( ISAUTOVACUUM ){
                   54011:       ptrmapPut(pBt, pgnoChild, PTRMAP_BTREE, pRoot->pgno, &rc);
                   54012:     }
                   54013:   }
                   54014:   if( rc ){
                   54015:     *ppChild = 0;
                   54016:     releasePage(pChild);
                   54017:     return rc;
                   54018:   }
                   54019:   assert( sqlite3PagerIswriteable(pChild->pDbPage) );
                   54020:   assert( sqlite3PagerIswriteable(pRoot->pDbPage) );
                   54021:   assert( pChild->nCell==pRoot->nCell );
                   54022: 
                   54023:   TRACE(("BALANCE: copy root %d into %d\n", pRoot->pgno, pChild->pgno));
                   54024: 
                   54025:   /* Copy the overflow cells from pRoot to pChild */
                   54026:   memcpy(pChild->aOvfl, pRoot->aOvfl, pRoot->nOverflow*sizeof(pRoot->aOvfl[0]));
                   54027:   pChild->nOverflow = pRoot->nOverflow;
                   54028: 
                   54029:   /* Zero the contents of pRoot. Then install pChild as the right-child. */
                   54030:   zeroPage(pRoot, pChild->aData[0] & ~PTF_LEAF);
                   54031:   put4byte(&pRoot->aData[pRoot->hdrOffset+8], pgnoChild);
                   54032: 
                   54033:   *ppChild = pChild;
                   54034:   return SQLITE_OK;
                   54035: }
                   54036: 
                   54037: /*
                   54038: ** The page that pCur currently points to has just been modified in
                   54039: ** some way. This function figures out if this modification means the
                   54040: ** tree needs to be balanced, and if so calls the appropriate balancing 
                   54041: ** routine. Balancing routines are:
                   54042: **
                   54043: **   balance_quick()
                   54044: **   balance_deeper()
                   54045: **   balance_nonroot()
                   54046: */
                   54047: static int balance(BtCursor *pCur){
                   54048:   int rc = SQLITE_OK;
                   54049:   const int nMin = pCur->pBt->usableSize * 2 / 3;
                   54050:   u8 aBalanceQuickSpace[13];
                   54051:   u8 *pFree = 0;
                   54052: 
                   54053:   TESTONLY( int balance_quick_called = 0 );
                   54054:   TESTONLY( int balance_deeper_called = 0 );
                   54055: 
                   54056:   do {
                   54057:     int iPage = pCur->iPage;
                   54058:     MemPage *pPage = pCur->apPage[iPage];
                   54059: 
                   54060:     if( iPage==0 ){
                   54061:       if( pPage->nOverflow ){
                   54062:         /* The root page of the b-tree is overfull. In this case call the
                   54063:         ** balance_deeper() function to create a new child for the root-page
                   54064:         ** and copy the current contents of the root-page to it. The
                   54065:         ** next iteration of the do-loop will balance the child page.
                   54066:         */ 
                   54067:         assert( (balance_deeper_called++)==0 );
                   54068:         rc = balance_deeper(pPage, &pCur->apPage[1]);
                   54069:         if( rc==SQLITE_OK ){
                   54070:           pCur->iPage = 1;
                   54071:           pCur->aiIdx[0] = 0;
                   54072:           pCur->aiIdx[1] = 0;
                   54073:           assert( pCur->apPage[1]->nOverflow );
                   54074:         }
                   54075:       }else{
                   54076:         break;
                   54077:       }
                   54078:     }else if( pPage->nOverflow==0 && pPage->nFree<=nMin ){
                   54079:       break;
                   54080:     }else{
                   54081:       MemPage * const pParent = pCur->apPage[iPage-1];
                   54082:       int const iIdx = pCur->aiIdx[iPage-1];
                   54083: 
                   54084:       rc = sqlite3PagerWrite(pParent->pDbPage);
                   54085:       if( rc==SQLITE_OK ){
                   54086: #ifndef SQLITE_OMIT_QUICKBALANCE
                   54087:         if( pPage->hasData
                   54088:          && pPage->nOverflow==1
                   54089:          && pPage->aOvfl[0].idx==pPage->nCell
                   54090:          && pParent->pgno!=1
                   54091:          && pParent->nCell==iIdx
                   54092:         ){
                   54093:           /* Call balance_quick() to create a new sibling of pPage on which
                   54094:           ** to store the overflow cell. balance_quick() inserts a new cell
                   54095:           ** into pParent, which may cause pParent overflow. If this
                   54096:           ** happens, the next interation of the do-loop will balance pParent 
                   54097:           ** use either balance_nonroot() or balance_deeper(). Until this
                   54098:           ** happens, the overflow cell is stored in the aBalanceQuickSpace[]
                   54099:           ** buffer. 
                   54100:           **
                   54101:           ** The purpose of the following assert() is to check that only a
                   54102:           ** single call to balance_quick() is made for each call to this
                   54103:           ** function. If this were not verified, a subtle bug involving reuse
                   54104:           ** of the aBalanceQuickSpace[] might sneak in.
                   54105:           */
                   54106:           assert( (balance_quick_called++)==0 );
                   54107:           rc = balance_quick(pParent, pPage, aBalanceQuickSpace);
                   54108:         }else
                   54109: #endif
                   54110:         {
                   54111:           /* In this case, call balance_nonroot() to redistribute cells
                   54112:           ** between pPage and up to 2 of its sibling pages. This involves
                   54113:           ** modifying the contents of pParent, which may cause pParent to
                   54114:           ** become overfull or underfull. The next iteration of the do-loop
                   54115:           ** will balance the parent page to correct this.
                   54116:           ** 
                   54117:           ** If the parent page becomes overfull, the overflow cell or cells
                   54118:           ** are stored in the pSpace buffer allocated immediately below. 
                   54119:           ** A subsequent iteration of the do-loop will deal with this by
                   54120:           ** calling balance_nonroot() (balance_deeper() may be called first,
                   54121:           ** but it doesn't deal with overflow cells - just moves them to a
                   54122:           ** different page). Once this subsequent call to balance_nonroot() 
                   54123:           ** has completed, it is safe to release the pSpace buffer used by
                   54124:           ** the previous call, as the overflow cell data will have been 
                   54125:           ** copied either into the body of a database page or into the new
                   54126:           ** pSpace buffer passed to the latter call to balance_nonroot().
                   54127:           */
                   54128:           u8 *pSpace = sqlite3PageMalloc(pCur->pBt->pageSize);
                   54129:           rc = balance_nonroot(pParent, iIdx, pSpace, iPage==1);
                   54130:           if( pFree ){
                   54131:             /* If pFree is not NULL, it points to the pSpace buffer used 
                   54132:             ** by a previous call to balance_nonroot(). Its contents are
                   54133:             ** now stored either on real database pages or within the 
                   54134:             ** new pSpace buffer, so it may be safely freed here. */
                   54135:             sqlite3PageFree(pFree);
                   54136:           }
                   54137: 
                   54138:           /* The pSpace buffer will be freed after the next call to
                   54139:           ** balance_nonroot(), or just before this function returns, whichever
                   54140:           ** comes first. */
                   54141:           pFree = pSpace;
                   54142:         }
                   54143:       }
                   54144: 
                   54145:       pPage->nOverflow = 0;
                   54146: 
                   54147:       /* The next iteration of the do-loop balances the parent page. */
                   54148:       releasePage(pPage);
                   54149:       pCur->iPage--;
                   54150:     }
                   54151:   }while( rc==SQLITE_OK );
                   54152: 
                   54153:   if( pFree ){
                   54154:     sqlite3PageFree(pFree);
                   54155:   }
                   54156:   return rc;
                   54157: }
                   54158: 
                   54159: 
                   54160: /*
                   54161: ** Insert a new record into the BTree.  The key is given by (pKey,nKey)
                   54162: ** and the data is given by (pData,nData).  The cursor is used only to
                   54163: ** define what table the record should be inserted into.  The cursor
                   54164: ** is left pointing at a random location.
                   54165: **
                   54166: ** For an INTKEY table, only the nKey value of the key is used.  pKey is
                   54167: ** ignored.  For a ZERODATA table, the pData and nData are both ignored.
                   54168: **
                   54169: ** If the seekResult parameter is non-zero, then a successful call to
                   54170: ** MovetoUnpacked() to seek cursor pCur to (pKey, nKey) has already
                   54171: ** been performed. seekResult is the search result returned (a negative
                   54172: ** number if pCur points at an entry that is smaller than (pKey, nKey), or
                   54173: ** a positive value if pCur points at an etry that is larger than 
                   54174: ** (pKey, nKey)). 
                   54175: **
                   54176: ** If the seekResult parameter is non-zero, then the caller guarantees that
                   54177: ** cursor pCur is pointing at the existing copy of a row that is to be
                   54178: ** overwritten.  If the seekResult parameter is 0, then cursor pCur may
                   54179: ** point to any entry or to no entry at all and so this function has to seek
                   54180: ** the cursor before the new key can be inserted.
                   54181: */
                   54182: SQLITE_PRIVATE int sqlite3BtreeInsert(
                   54183:   BtCursor *pCur,                /* Insert data into the table of this cursor */
                   54184:   const void *pKey, i64 nKey,    /* The key of the new record */
                   54185:   const void *pData, int nData,  /* The data of the new record */
                   54186:   int nZero,                     /* Number of extra 0 bytes to append to data */
                   54187:   int appendBias,                /* True if this is likely an append */
                   54188:   int seekResult                 /* Result of prior MovetoUnpacked() call */
                   54189: ){
                   54190:   int rc;
                   54191:   int loc = seekResult;          /* -1: before desired location  +1: after */
                   54192:   int szNew = 0;
                   54193:   int idx;
                   54194:   MemPage *pPage;
                   54195:   Btree *p = pCur->pBtree;
                   54196:   BtShared *pBt = p->pBt;
                   54197:   unsigned char *oldCell;
                   54198:   unsigned char *newCell = 0;
                   54199: 
                   54200:   if( pCur->eState==CURSOR_FAULT ){
                   54201:     assert( pCur->skipNext!=SQLITE_OK );
                   54202:     return pCur->skipNext;
                   54203:   }
                   54204: 
                   54205:   assert( cursorHoldsMutex(pCur) );
                   54206:   assert( pCur->wrFlag && pBt->inTransaction==TRANS_WRITE && !pBt->readOnly );
                   54207:   assert( hasSharedCacheTableLock(p, pCur->pgnoRoot, pCur->pKeyInfo!=0, 2) );
                   54208: 
                   54209:   /* Assert that the caller has been consistent. If this cursor was opened
                   54210:   ** expecting an index b-tree, then the caller should be inserting blob
                   54211:   ** keys with no associated data. If the cursor was opened expecting an
                   54212:   ** intkey table, the caller should be inserting integer keys with a
                   54213:   ** blob of associated data.  */
                   54214:   assert( (pKey==0)==(pCur->pKeyInfo==0) );
                   54215: 
                   54216:   /* If this is an insert into a table b-tree, invalidate any incrblob 
                   54217:   ** cursors open on the row being replaced (assuming this is a replace
                   54218:   ** operation - if it is not, the following is a no-op).  */
                   54219:   if( pCur->pKeyInfo==0 ){
                   54220:     invalidateIncrblobCursors(p, nKey, 0);
                   54221:   }
                   54222: 
                   54223:   /* Save the positions of any other cursors open on this table.
                   54224:   **
                   54225:   ** In some cases, the call to btreeMoveto() below is a no-op. For
                   54226:   ** example, when inserting data into a table with auto-generated integer
                   54227:   ** keys, the VDBE layer invokes sqlite3BtreeLast() to figure out the 
                   54228:   ** integer key to use. It then calls this function to actually insert the 
                   54229:   ** data into the intkey B-Tree. In this case btreeMoveto() recognizes
                   54230:   ** that the cursor is already where it needs to be and returns without
                   54231:   ** doing any work. To avoid thwarting these optimizations, it is important
                   54232:   ** not to clear the cursor here.
                   54233:   */
                   54234:   rc = saveAllCursors(pBt, pCur->pgnoRoot, pCur);
                   54235:   if( rc ) return rc;
                   54236:   if( !loc ){
                   54237:     rc = btreeMoveto(pCur, pKey, nKey, appendBias, &loc);
                   54238:     if( rc ) return rc;
                   54239:   }
                   54240:   assert( pCur->eState==CURSOR_VALID || (pCur->eState==CURSOR_INVALID && loc) );
                   54241: 
                   54242:   pPage = pCur->apPage[pCur->iPage];
                   54243:   assert( pPage->intKey || nKey>=0 );
                   54244:   assert( pPage->leaf || !pPage->intKey );
                   54245: 
                   54246:   TRACE(("INSERT: table=%d nkey=%lld ndata=%d page=%d %s\n",
                   54247:           pCur->pgnoRoot, nKey, nData, pPage->pgno,
                   54248:           loc==0 ? "overwrite" : "new entry"));
                   54249:   assert( pPage->isInit );
                   54250:   allocateTempSpace(pBt);
                   54251:   newCell = pBt->pTmpSpace;
                   54252:   if( newCell==0 ) return SQLITE_NOMEM;
                   54253:   rc = fillInCell(pPage, newCell, pKey, nKey, pData, nData, nZero, &szNew);
                   54254:   if( rc ) goto end_insert;
                   54255:   assert( szNew==cellSizePtr(pPage, newCell) );
                   54256:   assert( szNew <= MX_CELL_SIZE(pBt) );
                   54257:   idx = pCur->aiIdx[pCur->iPage];
                   54258:   if( loc==0 ){
                   54259:     u16 szOld;
                   54260:     assert( idx<pPage->nCell );
                   54261:     rc = sqlite3PagerWrite(pPage->pDbPage);
                   54262:     if( rc ){
                   54263:       goto end_insert;
                   54264:     }
                   54265:     oldCell = findCell(pPage, idx);
                   54266:     if( !pPage->leaf ){
                   54267:       memcpy(newCell, oldCell, 4);
                   54268:     }
                   54269:     szOld = cellSizePtr(pPage, oldCell);
                   54270:     rc = clearCell(pPage, oldCell);
                   54271:     dropCell(pPage, idx, szOld, &rc);
                   54272:     if( rc ) goto end_insert;
                   54273:   }else if( loc<0 && pPage->nCell>0 ){
                   54274:     assert( pPage->leaf );
                   54275:     idx = ++pCur->aiIdx[pCur->iPage];
                   54276:   }else{
                   54277:     assert( pPage->leaf );
                   54278:   }
                   54279:   insertCell(pPage, idx, newCell, szNew, 0, 0, &rc);
                   54280:   assert( rc!=SQLITE_OK || pPage->nCell>0 || pPage->nOverflow>0 );
                   54281: 
1.1.1.3 ! misho    54282:   /* If no error has occurred and pPage has an overflow cell, call balance() 
1.1       misho    54283:   ** to redistribute the cells within the tree. Since balance() may move
                   54284:   ** the cursor, zero the BtCursor.info.nSize and BtCursor.validNKey
                   54285:   ** variables.
                   54286:   **
                   54287:   ** Previous versions of SQLite called moveToRoot() to move the cursor
                   54288:   ** back to the root page as balance() used to invalidate the contents
                   54289:   ** of BtCursor.apPage[] and BtCursor.aiIdx[]. Instead of doing that,
                   54290:   ** set the cursor state to "invalid". This makes common insert operations
                   54291:   ** slightly faster.
                   54292:   **
                   54293:   ** There is a subtle but important optimization here too. When inserting
                   54294:   ** multiple records into an intkey b-tree using a single cursor (as can
                   54295:   ** happen while processing an "INSERT INTO ... SELECT" statement), it
                   54296:   ** is advantageous to leave the cursor pointing to the last entry in
                   54297:   ** the b-tree if possible. If the cursor is left pointing to the last
                   54298:   ** entry in the table, and the next row inserted has an integer key
                   54299:   ** larger than the largest existing key, it is possible to insert the
                   54300:   ** row without seeking the cursor. This can be a big performance boost.
                   54301:   */
                   54302:   pCur->info.nSize = 0;
                   54303:   pCur->validNKey = 0;
                   54304:   if( rc==SQLITE_OK && pPage->nOverflow ){
                   54305:     rc = balance(pCur);
                   54306: 
                   54307:     /* Must make sure nOverflow is reset to zero even if the balance()
                   54308:     ** fails. Internal data structure corruption will result otherwise. 
                   54309:     ** Also, set the cursor state to invalid. This stops saveCursorPosition()
                   54310:     ** from trying to save the current position of the cursor.  */
                   54311:     pCur->apPage[pCur->iPage]->nOverflow = 0;
                   54312:     pCur->eState = CURSOR_INVALID;
                   54313:   }
                   54314:   assert( pCur->apPage[pCur->iPage]->nOverflow==0 );
                   54315: 
                   54316: end_insert:
                   54317:   return rc;
                   54318: }
                   54319: 
                   54320: /*
                   54321: ** Delete the entry that the cursor is pointing to.  The cursor
                   54322: ** is left pointing at a arbitrary location.
                   54323: */
                   54324: SQLITE_PRIVATE int sqlite3BtreeDelete(BtCursor *pCur){
                   54325:   Btree *p = pCur->pBtree;
                   54326:   BtShared *pBt = p->pBt;              
                   54327:   int rc;                              /* Return code */
                   54328:   MemPage *pPage;                      /* Page to delete cell from */
                   54329:   unsigned char *pCell;                /* Pointer to cell to delete */
                   54330:   int iCellIdx;                        /* Index of cell to delete */
                   54331:   int iCellDepth;                      /* Depth of node containing pCell */ 
                   54332: 
                   54333:   assert( cursorHoldsMutex(pCur) );
                   54334:   assert( pBt->inTransaction==TRANS_WRITE );
                   54335:   assert( !pBt->readOnly );
                   54336:   assert( pCur->wrFlag );
                   54337:   assert( hasSharedCacheTableLock(p, pCur->pgnoRoot, pCur->pKeyInfo!=0, 2) );
                   54338:   assert( !hasReadConflicts(p, pCur->pgnoRoot) );
                   54339: 
                   54340:   if( NEVER(pCur->aiIdx[pCur->iPage]>=pCur->apPage[pCur->iPage]->nCell) 
                   54341:    || NEVER(pCur->eState!=CURSOR_VALID)
                   54342:   ){
                   54343:     return SQLITE_ERROR;  /* Something has gone awry. */
                   54344:   }
                   54345: 
                   54346:   /* If this is a delete operation to remove a row from a table b-tree,
                   54347:   ** invalidate any incrblob cursors open on the row being deleted.  */
                   54348:   if( pCur->pKeyInfo==0 ){
                   54349:     invalidateIncrblobCursors(p, pCur->info.nKey, 0);
                   54350:   }
                   54351: 
                   54352:   iCellDepth = pCur->iPage;
                   54353:   iCellIdx = pCur->aiIdx[iCellDepth];
                   54354:   pPage = pCur->apPage[iCellDepth];
                   54355:   pCell = findCell(pPage, iCellIdx);
                   54356: 
                   54357:   /* If the page containing the entry to delete is not a leaf page, move
                   54358:   ** the cursor to the largest entry in the tree that is smaller than
                   54359:   ** the entry being deleted. This cell will replace the cell being deleted
                   54360:   ** from the internal node. The 'previous' entry is used for this instead
                   54361:   ** of the 'next' entry, as the previous entry is always a part of the
                   54362:   ** sub-tree headed by the child page of the cell being deleted. This makes
                   54363:   ** balancing the tree following the delete operation easier.  */
                   54364:   if( !pPage->leaf ){
                   54365:     int notUsed;
                   54366:     rc = sqlite3BtreePrevious(pCur, &notUsed);
                   54367:     if( rc ) return rc;
                   54368:   }
                   54369: 
                   54370:   /* Save the positions of any other cursors open on this table before
                   54371:   ** making any modifications. Make the page containing the entry to be 
                   54372:   ** deleted writable. Then free any overflow pages associated with the 
                   54373:   ** entry and finally remove the cell itself from within the page.  
                   54374:   */
                   54375:   rc = saveAllCursors(pBt, pCur->pgnoRoot, pCur);
                   54376:   if( rc ) return rc;
                   54377:   rc = sqlite3PagerWrite(pPage->pDbPage);
                   54378:   if( rc ) return rc;
                   54379:   rc = clearCell(pPage, pCell);
                   54380:   dropCell(pPage, iCellIdx, cellSizePtr(pPage, pCell), &rc);
                   54381:   if( rc ) return rc;
                   54382: 
                   54383:   /* If the cell deleted was not located on a leaf page, then the cursor
                   54384:   ** is currently pointing to the largest entry in the sub-tree headed
                   54385:   ** by the child-page of the cell that was just deleted from an internal
                   54386:   ** node. The cell from the leaf node needs to be moved to the internal
                   54387:   ** node to replace the deleted cell.  */
                   54388:   if( !pPage->leaf ){
                   54389:     MemPage *pLeaf = pCur->apPage[pCur->iPage];
                   54390:     int nCell;
                   54391:     Pgno n = pCur->apPage[iCellDepth+1]->pgno;
                   54392:     unsigned char *pTmp;
                   54393: 
                   54394:     pCell = findCell(pLeaf, pLeaf->nCell-1);
                   54395:     nCell = cellSizePtr(pLeaf, pCell);
                   54396:     assert( MX_CELL_SIZE(pBt) >= nCell );
                   54397: 
                   54398:     allocateTempSpace(pBt);
                   54399:     pTmp = pBt->pTmpSpace;
                   54400: 
                   54401:     rc = sqlite3PagerWrite(pLeaf->pDbPage);
                   54402:     insertCell(pPage, iCellIdx, pCell-4, nCell+4, pTmp, n, &rc);
                   54403:     dropCell(pLeaf, pLeaf->nCell-1, nCell, &rc);
                   54404:     if( rc ) return rc;
                   54405:   }
                   54406: 
                   54407:   /* Balance the tree. If the entry deleted was located on a leaf page,
                   54408:   ** then the cursor still points to that page. In this case the first
                   54409:   ** call to balance() repairs the tree, and the if(...) condition is
                   54410:   ** never true.
                   54411:   **
                   54412:   ** Otherwise, if the entry deleted was on an internal node page, then
                   54413:   ** pCur is pointing to the leaf page from which a cell was removed to
                   54414:   ** replace the cell deleted from the internal node. This is slightly
                   54415:   ** tricky as the leaf node may be underfull, and the internal node may
                   54416:   ** be either under or overfull. In this case run the balancing algorithm
                   54417:   ** on the leaf node first. If the balance proceeds far enough up the
                   54418:   ** tree that we can be sure that any problem in the internal node has
                   54419:   ** been corrected, so be it. Otherwise, after balancing the leaf node,
                   54420:   ** walk the cursor up the tree to the internal node and balance it as 
                   54421:   ** well.  */
                   54422:   rc = balance(pCur);
                   54423:   if( rc==SQLITE_OK && pCur->iPage>iCellDepth ){
                   54424:     while( pCur->iPage>iCellDepth ){
                   54425:       releasePage(pCur->apPage[pCur->iPage--]);
                   54426:     }
                   54427:     rc = balance(pCur);
                   54428:   }
                   54429: 
                   54430:   if( rc==SQLITE_OK ){
                   54431:     moveToRoot(pCur);
                   54432:   }
                   54433:   return rc;
                   54434: }
                   54435: 
                   54436: /*
                   54437: ** Create a new BTree table.  Write into *piTable the page
                   54438: ** number for the root page of the new table.
                   54439: **
                   54440: ** The type of type is determined by the flags parameter.  Only the
                   54441: ** following values of flags are currently in use.  Other values for
                   54442: ** flags might not work:
                   54443: **
                   54444: **     BTREE_INTKEY|BTREE_LEAFDATA     Used for SQL tables with rowid keys
                   54445: **     BTREE_ZERODATA                  Used for SQL indices
                   54446: */
                   54447: static int btreeCreateTable(Btree *p, int *piTable, int createTabFlags){
                   54448:   BtShared *pBt = p->pBt;
                   54449:   MemPage *pRoot;
                   54450:   Pgno pgnoRoot;
                   54451:   int rc;
                   54452:   int ptfFlags;          /* Page-type flage for the root page of new table */
                   54453: 
                   54454:   assert( sqlite3BtreeHoldsMutex(p) );
                   54455:   assert( pBt->inTransaction==TRANS_WRITE );
                   54456:   assert( !pBt->readOnly );
                   54457: 
                   54458: #ifdef SQLITE_OMIT_AUTOVACUUM
                   54459:   rc = allocateBtreePage(pBt, &pRoot, &pgnoRoot, 1, 0);
                   54460:   if( rc ){
                   54461:     return rc;
                   54462:   }
                   54463: #else
                   54464:   if( pBt->autoVacuum ){
                   54465:     Pgno pgnoMove;      /* Move a page here to make room for the root-page */
                   54466:     MemPage *pPageMove; /* The page to move to. */
                   54467: 
                   54468:     /* Creating a new table may probably require moving an existing database
                   54469:     ** to make room for the new tables root page. In case this page turns
                   54470:     ** out to be an overflow page, delete all overflow page-map caches
                   54471:     ** held by open cursors.
                   54472:     */
                   54473:     invalidateAllOverflowCache(pBt);
                   54474: 
                   54475:     /* Read the value of meta[3] from the database to determine where the
                   54476:     ** root page of the new table should go. meta[3] is the largest root-page
                   54477:     ** created so far, so the new root-page is (meta[3]+1).
                   54478:     */
                   54479:     sqlite3BtreeGetMeta(p, BTREE_LARGEST_ROOT_PAGE, &pgnoRoot);
                   54480:     pgnoRoot++;
                   54481: 
                   54482:     /* The new root-page may not be allocated on a pointer-map page, or the
                   54483:     ** PENDING_BYTE page.
                   54484:     */
                   54485:     while( pgnoRoot==PTRMAP_PAGENO(pBt, pgnoRoot) ||
                   54486:         pgnoRoot==PENDING_BYTE_PAGE(pBt) ){
                   54487:       pgnoRoot++;
                   54488:     }
                   54489:     assert( pgnoRoot>=3 );
                   54490: 
                   54491:     /* Allocate a page. The page that currently resides at pgnoRoot will
                   54492:     ** be moved to the allocated page (unless the allocated page happens
                   54493:     ** to reside at pgnoRoot).
                   54494:     */
                   54495:     rc = allocateBtreePage(pBt, &pPageMove, &pgnoMove, pgnoRoot, 1);
                   54496:     if( rc!=SQLITE_OK ){
                   54497:       return rc;
                   54498:     }
                   54499: 
                   54500:     if( pgnoMove!=pgnoRoot ){
                   54501:       /* pgnoRoot is the page that will be used for the root-page of
                   54502:       ** the new table (assuming an error did not occur). But we were
                   54503:       ** allocated pgnoMove. If required (i.e. if it was not allocated
                   54504:       ** by extending the file), the current page at position pgnoMove
                   54505:       ** is already journaled.
                   54506:       */
                   54507:       u8 eType = 0;
                   54508:       Pgno iPtrPage = 0;
                   54509: 
                   54510:       releasePage(pPageMove);
                   54511: 
                   54512:       /* Move the page currently at pgnoRoot to pgnoMove. */
                   54513:       rc = btreeGetPage(pBt, pgnoRoot, &pRoot, 0);
                   54514:       if( rc!=SQLITE_OK ){
                   54515:         return rc;
                   54516:       }
                   54517:       rc = ptrmapGet(pBt, pgnoRoot, &eType, &iPtrPage);
                   54518:       if( eType==PTRMAP_ROOTPAGE || eType==PTRMAP_FREEPAGE ){
                   54519:         rc = SQLITE_CORRUPT_BKPT;
                   54520:       }
                   54521:       if( rc!=SQLITE_OK ){
                   54522:         releasePage(pRoot);
                   54523:         return rc;
                   54524:       }
                   54525:       assert( eType!=PTRMAP_ROOTPAGE );
                   54526:       assert( eType!=PTRMAP_FREEPAGE );
                   54527:       rc = relocatePage(pBt, pRoot, eType, iPtrPage, pgnoMove, 0);
                   54528:       releasePage(pRoot);
                   54529: 
                   54530:       /* Obtain the page at pgnoRoot */
                   54531:       if( rc!=SQLITE_OK ){
                   54532:         return rc;
                   54533:       }
                   54534:       rc = btreeGetPage(pBt, pgnoRoot, &pRoot, 0);
                   54535:       if( rc!=SQLITE_OK ){
                   54536:         return rc;
                   54537:       }
                   54538:       rc = sqlite3PagerWrite(pRoot->pDbPage);
                   54539:       if( rc!=SQLITE_OK ){
                   54540:         releasePage(pRoot);
                   54541:         return rc;
                   54542:       }
                   54543:     }else{
                   54544:       pRoot = pPageMove;
                   54545:     } 
                   54546: 
                   54547:     /* Update the pointer-map and meta-data with the new root-page number. */
                   54548:     ptrmapPut(pBt, pgnoRoot, PTRMAP_ROOTPAGE, 0, &rc);
                   54549:     if( rc ){
                   54550:       releasePage(pRoot);
                   54551:       return rc;
                   54552:     }
                   54553: 
                   54554:     /* When the new root page was allocated, page 1 was made writable in
                   54555:     ** order either to increase the database filesize, or to decrement the
                   54556:     ** freelist count.  Hence, the sqlite3BtreeUpdateMeta() call cannot fail.
                   54557:     */
                   54558:     assert( sqlite3PagerIswriteable(pBt->pPage1->pDbPage) );
                   54559:     rc = sqlite3BtreeUpdateMeta(p, 4, pgnoRoot);
                   54560:     if( NEVER(rc) ){
                   54561:       releasePage(pRoot);
                   54562:       return rc;
                   54563:     }
                   54564: 
                   54565:   }else{
                   54566:     rc = allocateBtreePage(pBt, &pRoot, &pgnoRoot, 1, 0);
                   54567:     if( rc ) return rc;
                   54568:   }
                   54569: #endif
                   54570:   assert( sqlite3PagerIswriteable(pRoot->pDbPage) );
                   54571:   if( createTabFlags & BTREE_INTKEY ){
                   54572:     ptfFlags = PTF_INTKEY | PTF_LEAFDATA | PTF_LEAF;
                   54573:   }else{
                   54574:     ptfFlags = PTF_ZERODATA | PTF_LEAF;
                   54575:   }
                   54576:   zeroPage(pRoot, ptfFlags);
                   54577:   sqlite3PagerUnref(pRoot->pDbPage);
                   54578:   assert( (pBt->openFlags & BTREE_SINGLE)==0 || pgnoRoot==2 );
                   54579:   *piTable = (int)pgnoRoot;
                   54580:   return SQLITE_OK;
                   54581: }
                   54582: SQLITE_PRIVATE int sqlite3BtreeCreateTable(Btree *p, int *piTable, int flags){
                   54583:   int rc;
                   54584:   sqlite3BtreeEnter(p);
                   54585:   rc = btreeCreateTable(p, piTable, flags);
                   54586:   sqlite3BtreeLeave(p);
                   54587:   return rc;
                   54588: }
                   54589: 
                   54590: /*
                   54591: ** Erase the given database page and all its children.  Return
                   54592: ** the page to the freelist.
                   54593: */
                   54594: static int clearDatabasePage(
                   54595:   BtShared *pBt,           /* The BTree that contains the table */
                   54596:   Pgno pgno,               /* Page number to clear */
                   54597:   int freePageFlag,        /* Deallocate page if true */
                   54598:   int *pnChange            /* Add number of Cells freed to this counter */
                   54599: ){
                   54600:   MemPage *pPage;
                   54601:   int rc;
                   54602:   unsigned char *pCell;
                   54603:   int i;
                   54604: 
                   54605:   assert( sqlite3_mutex_held(pBt->mutex) );
                   54606:   if( pgno>btreePagecount(pBt) ){
                   54607:     return SQLITE_CORRUPT_BKPT;
                   54608:   }
                   54609: 
                   54610:   rc = getAndInitPage(pBt, pgno, &pPage);
                   54611:   if( rc ) return rc;
                   54612:   for(i=0; i<pPage->nCell; i++){
                   54613:     pCell = findCell(pPage, i);
                   54614:     if( !pPage->leaf ){
                   54615:       rc = clearDatabasePage(pBt, get4byte(pCell), 1, pnChange);
                   54616:       if( rc ) goto cleardatabasepage_out;
                   54617:     }
                   54618:     rc = clearCell(pPage, pCell);
                   54619:     if( rc ) goto cleardatabasepage_out;
                   54620:   }
                   54621:   if( !pPage->leaf ){
                   54622:     rc = clearDatabasePage(pBt, get4byte(&pPage->aData[8]), 1, pnChange);
                   54623:     if( rc ) goto cleardatabasepage_out;
                   54624:   }else if( pnChange ){
                   54625:     assert( pPage->intKey );
                   54626:     *pnChange += pPage->nCell;
                   54627:   }
                   54628:   if( freePageFlag ){
                   54629:     freePage(pPage, &rc);
                   54630:   }else if( (rc = sqlite3PagerWrite(pPage->pDbPage))==0 ){
                   54631:     zeroPage(pPage, pPage->aData[0] | PTF_LEAF);
                   54632:   }
                   54633: 
                   54634: cleardatabasepage_out:
                   54635:   releasePage(pPage);
                   54636:   return rc;
                   54637: }
                   54638: 
                   54639: /*
                   54640: ** Delete all information from a single table in the database.  iTable is
                   54641: ** the page number of the root of the table.  After this routine returns,
                   54642: ** the root page is empty, but still exists.
                   54643: **
                   54644: ** This routine will fail with SQLITE_LOCKED if there are any open
                   54645: ** read cursors on the table.  Open write cursors are moved to the
                   54646: ** root of the table.
                   54647: **
                   54648: ** If pnChange is not NULL, then table iTable must be an intkey table. The
                   54649: ** integer value pointed to by pnChange is incremented by the number of
                   54650: ** entries in the table.
                   54651: */
                   54652: SQLITE_PRIVATE int sqlite3BtreeClearTable(Btree *p, int iTable, int *pnChange){
                   54653:   int rc;
                   54654:   BtShared *pBt = p->pBt;
                   54655:   sqlite3BtreeEnter(p);
                   54656:   assert( p->inTrans==TRANS_WRITE );
                   54657: 
                   54658:   /* Invalidate all incrblob cursors open on table iTable (assuming iTable
                   54659:   ** is the root of a table b-tree - if it is not, the following call is
                   54660:   ** a no-op).  */
                   54661:   invalidateIncrblobCursors(p, 0, 1);
                   54662: 
                   54663:   rc = saveAllCursors(pBt, (Pgno)iTable, 0);
                   54664:   if( SQLITE_OK==rc ){
                   54665:     rc = clearDatabasePage(pBt, (Pgno)iTable, 0, pnChange);
                   54666:   }
                   54667:   sqlite3BtreeLeave(p);
                   54668:   return rc;
                   54669: }
                   54670: 
                   54671: /*
                   54672: ** Erase all information in a table and add the root of the table to
                   54673: ** the freelist.  Except, the root of the principle table (the one on
                   54674: ** page 1) is never added to the freelist.
                   54675: **
                   54676: ** This routine will fail with SQLITE_LOCKED if there are any open
                   54677: ** cursors on the table.
                   54678: **
                   54679: ** If AUTOVACUUM is enabled and the page at iTable is not the last
                   54680: ** root page in the database file, then the last root page 
                   54681: ** in the database file is moved into the slot formerly occupied by
                   54682: ** iTable and that last slot formerly occupied by the last root page
                   54683: ** is added to the freelist instead of iTable.  In this say, all
                   54684: ** root pages are kept at the beginning of the database file, which
                   54685: ** is necessary for AUTOVACUUM to work right.  *piMoved is set to the 
                   54686: ** page number that used to be the last root page in the file before
                   54687: ** the move.  If no page gets moved, *piMoved is set to 0.
                   54688: ** The last root page is recorded in meta[3] and the value of
                   54689: ** meta[3] is updated by this procedure.
                   54690: */
                   54691: static int btreeDropTable(Btree *p, Pgno iTable, int *piMoved){
                   54692:   int rc;
                   54693:   MemPage *pPage = 0;
                   54694:   BtShared *pBt = p->pBt;
                   54695: 
                   54696:   assert( sqlite3BtreeHoldsMutex(p) );
                   54697:   assert( p->inTrans==TRANS_WRITE );
                   54698: 
                   54699:   /* It is illegal to drop a table if any cursors are open on the
                   54700:   ** database. This is because in auto-vacuum mode the backend may
                   54701:   ** need to move another root-page to fill a gap left by the deleted
                   54702:   ** root page. If an open cursor was using this page a problem would 
                   54703:   ** occur.
                   54704:   **
                   54705:   ** This error is caught long before control reaches this point.
                   54706:   */
                   54707:   if( NEVER(pBt->pCursor) ){
                   54708:     sqlite3ConnectionBlocked(p->db, pBt->pCursor->pBtree->db);
                   54709:     return SQLITE_LOCKED_SHAREDCACHE;
                   54710:   }
                   54711: 
                   54712:   rc = btreeGetPage(pBt, (Pgno)iTable, &pPage, 0);
                   54713:   if( rc ) return rc;
                   54714:   rc = sqlite3BtreeClearTable(p, iTable, 0);
                   54715:   if( rc ){
                   54716:     releasePage(pPage);
                   54717:     return rc;
                   54718:   }
                   54719: 
                   54720:   *piMoved = 0;
                   54721: 
                   54722:   if( iTable>1 ){
                   54723: #ifdef SQLITE_OMIT_AUTOVACUUM
                   54724:     freePage(pPage, &rc);
                   54725:     releasePage(pPage);
                   54726: #else
                   54727:     if( pBt->autoVacuum ){
                   54728:       Pgno maxRootPgno;
                   54729:       sqlite3BtreeGetMeta(p, BTREE_LARGEST_ROOT_PAGE, &maxRootPgno);
                   54730: 
                   54731:       if( iTable==maxRootPgno ){
                   54732:         /* If the table being dropped is the table with the largest root-page
                   54733:         ** number in the database, put the root page on the free list. 
                   54734:         */
                   54735:         freePage(pPage, &rc);
                   54736:         releasePage(pPage);
                   54737:         if( rc!=SQLITE_OK ){
                   54738:           return rc;
                   54739:         }
                   54740:       }else{
                   54741:         /* The table being dropped does not have the largest root-page
                   54742:         ** number in the database. So move the page that does into the 
                   54743:         ** gap left by the deleted root-page.
                   54744:         */
                   54745:         MemPage *pMove;
                   54746:         releasePage(pPage);
                   54747:         rc = btreeGetPage(pBt, maxRootPgno, &pMove, 0);
                   54748:         if( rc!=SQLITE_OK ){
                   54749:           return rc;
                   54750:         }
                   54751:         rc = relocatePage(pBt, pMove, PTRMAP_ROOTPAGE, 0, iTable, 0);
                   54752:         releasePage(pMove);
                   54753:         if( rc!=SQLITE_OK ){
                   54754:           return rc;
                   54755:         }
                   54756:         pMove = 0;
                   54757:         rc = btreeGetPage(pBt, maxRootPgno, &pMove, 0);
                   54758:         freePage(pMove, &rc);
                   54759:         releasePage(pMove);
                   54760:         if( rc!=SQLITE_OK ){
                   54761:           return rc;
                   54762:         }
                   54763:         *piMoved = maxRootPgno;
                   54764:       }
                   54765: 
                   54766:       /* Set the new 'max-root-page' value in the database header. This
                   54767:       ** is the old value less one, less one more if that happens to
                   54768:       ** be a root-page number, less one again if that is the
                   54769:       ** PENDING_BYTE_PAGE.
                   54770:       */
                   54771:       maxRootPgno--;
                   54772:       while( maxRootPgno==PENDING_BYTE_PAGE(pBt)
                   54773:              || PTRMAP_ISPAGE(pBt, maxRootPgno) ){
                   54774:         maxRootPgno--;
                   54775:       }
                   54776:       assert( maxRootPgno!=PENDING_BYTE_PAGE(pBt) );
                   54777: 
                   54778:       rc = sqlite3BtreeUpdateMeta(p, 4, maxRootPgno);
                   54779:     }else{
                   54780:       freePage(pPage, &rc);
                   54781:       releasePage(pPage);
                   54782:     }
                   54783: #endif
                   54784:   }else{
                   54785:     /* If sqlite3BtreeDropTable was called on page 1.
                   54786:     ** This really never should happen except in a corrupt
                   54787:     ** database. 
                   54788:     */
                   54789:     zeroPage(pPage, PTF_INTKEY|PTF_LEAF );
                   54790:     releasePage(pPage);
                   54791:   }
                   54792:   return rc;  
                   54793: }
                   54794: SQLITE_PRIVATE int sqlite3BtreeDropTable(Btree *p, int iTable, int *piMoved){
                   54795:   int rc;
                   54796:   sqlite3BtreeEnter(p);
                   54797:   rc = btreeDropTable(p, iTable, piMoved);
                   54798:   sqlite3BtreeLeave(p);
                   54799:   return rc;
                   54800: }
                   54801: 
                   54802: 
                   54803: /*
                   54804: ** This function may only be called if the b-tree connection already
                   54805: ** has a read or write transaction open on the database.
                   54806: **
                   54807: ** Read the meta-information out of a database file.  Meta[0]
                   54808: ** is the number of free pages currently in the database.  Meta[1]
                   54809: ** through meta[15] are available for use by higher layers.  Meta[0]
                   54810: ** is read-only, the others are read/write.
                   54811: ** 
                   54812: ** The schema layer numbers meta values differently.  At the schema
                   54813: ** layer (and the SetCookie and ReadCookie opcodes) the number of
                   54814: ** free pages is not visible.  So Cookie[0] is the same as Meta[1].
                   54815: */
                   54816: SQLITE_PRIVATE void sqlite3BtreeGetMeta(Btree *p, int idx, u32 *pMeta){
                   54817:   BtShared *pBt = p->pBt;
                   54818: 
                   54819:   sqlite3BtreeEnter(p);
                   54820:   assert( p->inTrans>TRANS_NONE );
                   54821:   assert( SQLITE_OK==querySharedCacheTableLock(p, MASTER_ROOT, READ_LOCK) );
                   54822:   assert( pBt->pPage1 );
                   54823:   assert( idx>=0 && idx<=15 );
                   54824: 
                   54825:   *pMeta = get4byte(&pBt->pPage1->aData[36 + idx*4]);
                   54826: 
                   54827:   /* If auto-vacuum is disabled in this build and this is an auto-vacuum
                   54828:   ** database, mark the database as read-only.  */
                   54829: #ifdef SQLITE_OMIT_AUTOVACUUM
                   54830:   if( idx==BTREE_LARGEST_ROOT_PAGE && *pMeta>0 ) pBt->readOnly = 1;
                   54831: #endif
                   54832: 
                   54833:   sqlite3BtreeLeave(p);
                   54834: }
                   54835: 
                   54836: /*
                   54837: ** Write meta-information back into the database.  Meta[0] is
                   54838: ** read-only and may not be written.
                   54839: */
                   54840: SQLITE_PRIVATE int sqlite3BtreeUpdateMeta(Btree *p, int idx, u32 iMeta){
                   54841:   BtShared *pBt = p->pBt;
                   54842:   unsigned char *pP1;
                   54843:   int rc;
                   54844:   assert( idx>=1 && idx<=15 );
                   54845:   sqlite3BtreeEnter(p);
                   54846:   assert( p->inTrans==TRANS_WRITE );
                   54847:   assert( pBt->pPage1!=0 );
                   54848:   pP1 = pBt->pPage1->aData;
                   54849:   rc = sqlite3PagerWrite(pBt->pPage1->pDbPage);
                   54850:   if( rc==SQLITE_OK ){
                   54851:     put4byte(&pP1[36 + idx*4], iMeta);
                   54852: #ifndef SQLITE_OMIT_AUTOVACUUM
                   54853:     if( idx==BTREE_INCR_VACUUM ){
                   54854:       assert( pBt->autoVacuum || iMeta==0 );
                   54855:       assert( iMeta==0 || iMeta==1 );
                   54856:       pBt->incrVacuum = (u8)iMeta;
                   54857:     }
                   54858: #endif
                   54859:   }
                   54860:   sqlite3BtreeLeave(p);
                   54861:   return rc;
                   54862: }
                   54863: 
                   54864: #ifndef SQLITE_OMIT_BTREECOUNT
                   54865: /*
                   54866: ** The first argument, pCur, is a cursor opened on some b-tree. Count the
                   54867: ** number of entries in the b-tree and write the result to *pnEntry.
                   54868: **
                   54869: ** SQLITE_OK is returned if the operation is successfully executed. 
                   54870: ** Otherwise, if an error is encountered (i.e. an IO error or database
                   54871: ** corruption) an SQLite error code is returned.
                   54872: */
                   54873: SQLITE_PRIVATE int sqlite3BtreeCount(BtCursor *pCur, i64 *pnEntry){
                   54874:   i64 nEntry = 0;                      /* Value to return in *pnEntry */
                   54875:   int rc;                              /* Return code */
                   54876:   rc = moveToRoot(pCur);
                   54877: 
                   54878:   /* Unless an error occurs, the following loop runs one iteration for each
                   54879:   ** page in the B-Tree structure (not including overflow pages). 
                   54880:   */
                   54881:   while( rc==SQLITE_OK ){
                   54882:     int iIdx;                          /* Index of child node in parent */
                   54883:     MemPage *pPage;                    /* Current page of the b-tree */
                   54884: 
                   54885:     /* If this is a leaf page or the tree is not an int-key tree, then 
                   54886:     ** this page contains countable entries. Increment the entry counter
                   54887:     ** accordingly.
                   54888:     */
                   54889:     pPage = pCur->apPage[pCur->iPage];
                   54890:     if( pPage->leaf || !pPage->intKey ){
                   54891:       nEntry += pPage->nCell;
                   54892:     }
                   54893: 
                   54894:     /* pPage is a leaf node. This loop navigates the cursor so that it 
                   54895:     ** points to the first interior cell that it points to the parent of
                   54896:     ** the next page in the tree that has not yet been visited. The
                   54897:     ** pCur->aiIdx[pCur->iPage] value is set to the index of the parent cell
                   54898:     ** of the page, or to the number of cells in the page if the next page
                   54899:     ** to visit is the right-child of its parent.
                   54900:     **
                   54901:     ** If all pages in the tree have been visited, return SQLITE_OK to the
                   54902:     ** caller.
                   54903:     */
                   54904:     if( pPage->leaf ){
                   54905:       do {
                   54906:         if( pCur->iPage==0 ){
                   54907:           /* All pages of the b-tree have been visited. Return successfully. */
                   54908:           *pnEntry = nEntry;
                   54909:           return SQLITE_OK;
                   54910:         }
                   54911:         moveToParent(pCur);
                   54912:       }while ( pCur->aiIdx[pCur->iPage]>=pCur->apPage[pCur->iPage]->nCell );
                   54913: 
                   54914:       pCur->aiIdx[pCur->iPage]++;
                   54915:       pPage = pCur->apPage[pCur->iPage];
                   54916:     }
                   54917: 
                   54918:     /* Descend to the child node of the cell that the cursor currently 
                   54919:     ** points at. This is the right-child if (iIdx==pPage->nCell).
                   54920:     */
                   54921:     iIdx = pCur->aiIdx[pCur->iPage];
                   54922:     if( iIdx==pPage->nCell ){
                   54923:       rc = moveToChild(pCur, get4byte(&pPage->aData[pPage->hdrOffset+8]));
                   54924:     }else{
                   54925:       rc = moveToChild(pCur, get4byte(findCell(pPage, iIdx)));
                   54926:     }
                   54927:   }
                   54928: 
                   54929:   /* An error has occurred. Return an error code. */
                   54930:   return rc;
                   54931: }
                   54932: #endif
                   54933: 
                   54934: /*
                   54935: ** Return the pager associated with a BTree.  This routine is used for
                   54936: ** testing and debugging only.
                   54937: */
                   54938: SQLITE_PRIVATE Pager *sqlite3BtreePager(Btree *p){
                   54939:   return p->pBt->pPager;
                   54940: }
                   54941: 
                   54942: #ifndef SQLITE_OMIT_INTEGRITY_CHECK
                   54943: /*
                   54944: ** Append a message to the error message string.
                   54945: */
                   54946: static void checkAppendMsg(
                   54947:   IntegrityCk *pCheck,
                   54948:   char *zMsg1,
                   54949:   const char *zFormat,
                   54950:   ...
                   54951: ){
                   54952:   va_list ap;
                   54953:   if( !pCheck->mxErr ) return;
                   54954:   pCheck->mxErr--;
                   54955:   pCheck->nErr++;
                   54956:   va_start(ap, zFormat);
                   54957:   if( pCheck->errMsg.nChar ){
                   54958:     sqlite3StrAccumAppend(&pCheck->errMsg, "\n", 1);
                   54959:   }
                   54960:   if( zMsg1 ){
                   54961:     sqlite3StrAccumAppend(&pCheck->errMsg, zMsg1, -1);
                   54962:   }
                   54963:   sqlite3VXPrintf(&pCheck->errMsg, 1, zFormat, ap);
                   54964:   va_end(ap);
                   54965:   if( pCheck->errMsg.mallocFailed ){
                   54966:     pCheck->mallocFailed = 1;
                   54967:   }
                   54968: }
                   54969: #endif /* SQLITE_OMIT_INTEGRITY_CHECK */
                   54970: 
                   54971: #ifndef SQLITE_OMIT_INTEGRITY_CHECK
                   54972: /*
                   54973: ** Add 1 to the reference count for page iPage.  If this is the second
                   54974: ** reference to the page, add an error message to pCheck->zErrMsg.
                   54975: ** Return 1 if there are 2 ore more references to the page and 0 if
                   54976: ** if this is the first reference to the page.
                   54977: **
                   54978: ** Also check that the page number is in bounds.
                   54979: */
                   54980: static int checkRef(IntegrityCk *pCheck, Pgno iPage, char *zContext){
                   54981:   if( iPage==0 ) return 1;
                   54982:   if( iPage>pCheck->nPage ){
                   54983:     checkAppendMsg(pCheck, zContext, "invalid page number %d", iPage);
                   54984:     return 1;
                   54985:   }
                   54986:   if( pCheck->anRef[iPage]==1 ){
                   54987:     checkAppendMsg(pCheck, zContext, "2nd reference to page %d", iPage);
                   54988:     return 1;
                   54989:   }
                   54990:   return  (pCheck->anRef[iPage]++)>1;
                   54991: }
                   54992: 
                   54993: #ifndef SQLITE_OMIT_AUTOVACUUM
                   54994: /*
                   54995: ** Check that the entry in the pointer-map for page iChild maps to 
                   54996: ** page iParent, pointer type ptrType. If not, append an error message
                   54997: ** to pCheck.
                   54998: */
                   54999: static void checkPtrmap(
                   55000:   IntegrityCk *pCheck,   /* Integrity check context */
                   55001:   Pgno iChild,           /* Child page number */
                   55002:   u8 eType,              /* Expected pointer map type */
                   55003:   Pgno iParent,          /* Expected pointer map parent page number */
                   55004:   char *zContext         /* Context description (used for error msg) */
                   55005: ){
                   55006:   int rc;
                   55007:   u8 ePtrmapType;
                   55008:   Pgno iPtrmapParent;
                   55009: 
                   55010:   rc = ptrmapGet(pCheck->pBt, iChild, &ePtrmapType, &iPtrmapParent);
                   55011:   if( rc!=SQLITE_OK ){
                   55012:     if( rc==SQLITE_NOMEM || rc==SQLITE_IOERR_NOMEM ) pCheck->mallocFailed = 1;
                   55013:     checkAppendMsg(pCheck, zContext, "Failed to read ptrmap key=%d", iChild);
                   55014:     return;
                   55015:   }
                   55016: 
                   55017:   if( ePtrmapType!=eType || iPtrmapParent!=iParent ){
                   55018:     checkAppendMsg(pCheck, zContext, 
                   55019:       "Bad ptr map entry key=%d expected=(%d,%d) got=(%d,%d)", 
                   55020:       iChild, eType, iParent, ePtrmapType, iPtrmapParent);
                   55021:   }
                   55022: }
                   55023: #endif
                   55024: 
                   55025: /*
                   55026: ** Check the integrity of the freelist or of an overflow page list.
                   55027: ** Verify that the number of pages on the list is N.
                   55028: */
                   55029: static void checkList(
                   55030:   IntegrityCk *pCheck,  /* Integrity checking context */
                   55031:   int isFreeList,       /* True for a freelist.  False for overflow page list */
                   55032:   int iPage,            /* Page number for first page in the list */
                   55033:   int N,                /* Expected number of pages in the list */
                   55034:   char *zContext        /* Context for error messages */
                   55035: ){
                   55036:   int i;
                   55037:   int expected = N;
                   55038:   int iFirst = iPage;
                   55039:   while( N-- > 0 && pCheck->mxErr ){
                   55040:     DbPage *pOvflPage;
                   55041:     unsigned char *pOvflData;
                   55042:     if( iPage<1 ){
                   55043:       checkAppendMsg(pCheck, zContext,
                   55044:          "%d of %d pages missing from overflow list starting at %d",
                   55045:           N+1, expected, iFirst);
                   55046:       break;
                   55047:     }
                   55048:     if( checkRef(pCheck, iPage, zContext) ) break;
                   55049:     if( sqlite3PagerGet(pCheck->pPager, (Pgno)iPage, &pOvflPage) ){
                   55050:       checkAppendMsg(pCheck, zContext, "failed to get page %d", iPage);
                   55051:       break;
                   55052:     }
                   55053:     pOvflData = (unsigned char *)sqlite3PagerGetData(pOvflPage);
                   55054:     if( isFreeList ){
                   55055:       int n = get4byte(&pOvflData[4]);
                   55056: #ifndef SQLITE_OMIT_AUTOVACUUM
                   55057:       if( pCheck->pBt->autoVacuum ){
                   55058:         checkPtrmap(pCheck, iPage, PTRMAP_FREEPAGE, 0, zContext);
                   55059:       }
                   55060: #endif
                   55061:       if( n>(int)pCheck->pBt->usableSize/4-2 ){
                   55062:         checkAppendMsg(pCheck, zContext,
                   55063:            "freelist leaf count too big on page %d", iPage);
                   55064:         N--;
                   55065:       }else{
                   55066:         for(i=0; i<n; i++){
                   55067:           Pgno iFreePage = get4byte(&pOvflData[8+i*4]);
                   55068: #ifndef SQLITE_OMIT_AUTOVACUUM
                   55069:           if( pCheck->pBt->autoVacuum ){
                   55070:             checkPtrmap(pCheck, iFreePage, PTRMAP_FREEPAGE, 0, zContext);
                   55071:           }
                   55072: #endif
                   55073:           checkRef(pCheck, iFreePage, zContext);
                   55074:         }
                   55075:         N -= n;
                   55076:       }
                   55077:     }
                   55078: #ifndef SQLITE_OMIT_AUTOVACUUM
                   55079:     else{
                   55080:       /* If this database supports auto-vacuum and iPage is not the last
                   55081:       ** page in this overflow list, check that the pointer-map entry for
                   55082:       ** the following page matches iPage.
                   55083:       */
                   55084:       if( pCheck->pBt->autoVacuum && N>0 ){
                   55085:         i = get4byte(pOvflData);
                   55086:         checkPtrmap(pCheck, i, PTRMAP_OVERFLOW2, iPage, zContext);
                   55087:       }
                   55088:     }
                   55089: #endif
                   55090:     iPage = get4byte(pOvflData);
                   55091:     sqlite3PagerUnref(pOvflPage);
                   55092:   }
                   55093: }
                   55094: #endif /* SQLITE_OMIT_INTEGRITY_CHECK */
                   55095: 
                   55096: #ifndef SQLITE_OMIT_INTEGRITY_CHECK
                   55097: /*
                   55098: ** Do various sanity checks on a single page of a tree.  Return
                   55099: ** the tree depth.  Root pages return 0.  Parents of root pages
                   55100: ** return 1, and so forth.
                   55101: ** 
                   55102: ** These checks are done:
                   55103: **
                   55104: **      1.  Make sure that cells and freeblocks do not overlap
                   55105: **          but combine to completely cover the page.
                   55106: **  NO  2.  Make sure cell keys are in order.
                   55107: **  NO  3.  Make sure no key is less than or equal to zLowerBound.
                   55108: **  NO  4.  Make sure no key is greater than or equal to zUpperBound.
                   55109: **      5.  Check the integrity of overflow pages.
                   55110: **      6.  Recursively call checkTreePage on all children.
                   55111: **      7.  Verify that the depth of all children is the same.
                   55112: **      8.  Make sure this page is at least 33% full or else it is
                   55113: **          the root of the tree.
                   55114: */
                   55115: static int checkTreePage(
                   55116:   IntegrityCk *pCheck,  /* Context for the sanity check */
                   55117:   int iPage,            /* Page number of the page to check */
                   55118:   char *zParentContext, /* Parent context */
                   55119:   i64 *pnParentMinKey, 
                   55120:   i64 *pnParentMaxKey
                   55121: ){
                   55122:   MemPage *pPage;
                   55123:   int i, rc, depth, d2, pgno, cnt;
                   55124:   int hdr, cellStart;
                   55125:   int nCell;
                   55126:   u8 *data;
                   55127:   BtShared *pBt;
                   55128:   int usableSize;
                   55129:   char zContext[100];
                   55130:   char *hit = 0;
                   55131:   i64 nMinKey = 0;
                   55132:   i64 nMaxKey = 0;
                   55133: 
                   55134:   sqlite3_snprintf(sizeof(zContext), zContext, "Page %d: ", iPage);
                   55135: 
                   55136:   /* Check that the page exists
                   55137:   */
                   55138:   pBt = pCheck->pBt;
                   55139:   usableSize = pBt->usableSize;
                   55140:   if( iPage==0 ) return 0;
                   55141:   if( checkRef(pCheck, iPage, zParentContext) ) return 0;
                   55142:   if( (rc = btreeGetPage(pBt, (Pgno)iPage, &pPage, 0))!=0 ){
                   55143:     checkAppendMsg(pCheck, zContext,
                   55144:        "unable to get the page. error code=%d", rc);
                   55145:     return 0;
                   55146:   }
                   55147: 
                   55148:   /* Clear MemPage.isInit to make sure the corruption detection code in
                   55149:   ** btreeInitPage() is executed.  */
                   55150:   pPage->isInit = 0;
                   55151:   if( (rc = btreeInitPage(pPage))!=0 ){
                   55152:     assert( rc==SQLITE_CORRUPT );  /* The only possible error from InitPage */
                   55153:     checkAppendMsg(pCheck, zContext, 
                   55154:                    "btreeInitPage() returns error code %d", rc);
                   55155:     releasePage(pPage);
                   55156:     return 0;
                   55157:   }
                   55158: 
                   55159:   /* Check out all the cells.
                   55160:   */
                   55161:   depth = 0;
                   55162:   for(i=0; i<pPage->nCell && pCheck->mxErr; i++){
                   55163:     u8 *pCell;
                   55164:     u32 sz;
                   55165:     CellInfo info;
                   55166: 
                   55167:     /* Check payload overflow pages
                   55168:     */
                   55169:     sqlite3_snprintf(sizeof(zContext), zContext,
                   55170:              "On tree page %d cell %d: ", iPage, i);
                   55171:     pCell = findCell(pPage,i);
                   55172:     btreeParseCellPtr(pPage, pCell, &info);
                   55173:     sz = info.nData;
                   55174:     if( !pPage->intKey ) sz += (int)info.nKey;
                   55175:     /* For intKey pages, check that the keys are in order.
                   55176:     */
                   55177:     else if( i==0 ) nMinKey = nMaxKey = info.nKey;
                   55178:     else{
                   55179:       if( info.nKey <= nMaxKey ){
                   55180:         checkAppendMsg(pCheck, zContext, 
                   55181:             "Rowid %lld out of order (previous was %lld)", info.nKey, nMaxKey);
                   55182:       }
                   55183:       nMaxKey = info.nKey;
                   55184:     }
                   55185:     assert( sz==info.nPayload );
                   55186:     if( (sz>info.nLocal) 
                   55187:      && (&pCell[info.iOverflow]<=&pPage->aData[pBt->usableSize])
                   55188:     ){
                   55189:       int nPage = (sz - info.nLocal + usableSize - 5)/(usableSize - 4);
                   55190:       Pgno pgnoOvfl = get4byte(&pCell[info.iOverflow]);
                   55191: #ifndef SQLITE_OMIT_AUTOVACUUM
                   55192:       if( pBt->autoVacuum ){
                   55193:         checkPtrmap(pCheck, pgnoOvfl, PTRMAP_OVERFLOW1, iPage, zContext);
                   55194:       }
                   55195: #endif
                   55196:       checkList(pCheck, 0, pgnoOvfl, nPage, zContext);
                   55197:     }
                   55198: 
                   55199:     /* Check sanity of left child page.
                   55200:     */
                   55201:     if( !pPage->leaf ){
                   55202:       pgno = get4byte(pCell);
                   55203: #ifndef SQLITE_OMIT_AUTOVACUUM
                   55204:       if( pBt->autoVacuum ){
                   55205:         checkPtrmap(pCheck, pgno, PTRMAP_BTREE, iPage, zContext);
                   55206:       }
                   55207: #endif
                   55208:       d2 = checkTreePage(pCheck, pgno, zContext, &nMinKey, i==0 ? NULL : &nMaxKey);
                   55209:       if( i>0 && d2!=depth ){
                   55210:         checkAppendMsg(pCheck, zContext, "Child page depth differs");
                   55211:       }
                   55212:       depth = d2;
                   55213:     }
                   55214:   }
                   55215: 
                   55216:   if( !pPage->leaf ){
                   55217:     pgno = get4byte(&pPage->aData[pPage->hdrOffset+8]);
                   55218:     sqlite3_snprintf(sizeof(zContext), zContext, 
                   55219:                      "On page %d at right child: ", iPage);
                   55220: #ifndef SQLITE_OMIT_AUTOVACUUM
                   55221:     if( pBt->autoVacuum ){
                   55222:       checkPtrmap(pCheck, pgno, PTRMAP_BTREE, iPage, zContext);
                   55223:     }
                   55224: #endif
                   55225:     checkTreePage(pCheck, pgno, zContext, NULL, !pPage->nCell ? NULL : &nMaxKey);
                   55226:   }
                   55227:  
                   55228:   /* For intKey leaf pages, check that the min/max keys are in order
                   55229:   ** with any left/parent/right pages.
                   55230:   */
                   55231:   if( pPage->leaf && pPage->intKey ){
                   55232:     /* if we are a left child page */
                   55233:     if( pnParentMinKey ){
                   55234:       /* if we are the left most child page */
                   55235:       if( !pnParentMaxKey ){
                   55236:         if( nMaxKey > *pnParentMinKey ){
                   55237:           checkAppendMsg(pCheck, zContext, 
                   55238:               "Rowid %lld out of order (max larger than parent min of %lld)",
                   55239:               nMaxKey, *pnParentMinKey);
                   55240:         }
                   55241:       }else{
                   55242:         if( nMinKey <= *pnParentMinKey ){
                   55243:           checkAppendMsg(pCheck, zContext, 
                   55244:               "Rowid %lld out of order (min less than parent min of %lld)",
                   55245:               nMinKey, *pnParentMinKey);
                   55246:         }
                   55247:         if( nMaxKey > *pnParentMaxKey ){
                   55248:           checkAppendMsg(pCheck, zContext, 
                   55249:               "Rowid %lld out of order (max larger than parent max of %lld)",
                   55250:               nMaxKey, *pnParentMaxKey);
                   55251:         }
                   55252:         *pnParentMinKey = nMaxKey;
                   55253:       }
                   55254:     /* else if we're a right child page */
                   55255:     } else if( pnParentMaxKey ){
                   55256:       if( nMinKey <= *pnParentMaxKey ){
                   55257:         checkAppendMsg(pCheck, zContext, 
                   55258:             "Rowid %lld out of order (min less than parent max of %lld)",
                   55259:             nMinKey, *pnParentMaxKey);
                   55260:       }
                   55261:     }
                   55262:   }
                   55263: 
                   55264:   /* Check for complete coverage of the page
                   55265:   */
                   55266:   data = pPage->aData;
                   55267:   hdr = pPage->hdrOffset;
                   55268:   hit = sqlite3PageMalloc( pBt->pageSize );
                   55269:   if( hit==0 ){
                   55270:     pCheck->mallocFailed = 1;
                   55271:   }else{
                   55272:     int contentOffset = get2byteNotZero(&data[hdr+5]);
                   55273:     assert( contentOffset<=usableSize );  /* Enforced by btreeInitPage() */
                   55274:     memset(hit+contentOffset, 0, usableSize-contentOffset);
                   55275:     memset(hit, 1, contentOffset);
                   55276:     nCell = get2byte(&data[hdr+3]);
                   55277:     cellStart = hdr + 12 - 4*pPage->leaf;
                   55278:     for(i=0; i<nCell; i++){
                   55279:       int pc = get2byte(&data[cellStart+i*2]);
                   55280:       u32 size = 65536;
                   55281:       int j;
                   55282:       if( pc<=usableSize-4 ){
                   55283:         size = cellSizePtr(pPage, &data[pc]);
                   55284:       }
                   55285:       if( (int)(pc+size-1)>=usableSize ){
                   55286:         checkAppendMsg(pCheck, 0, 
                   55287:             "Corruption detected in cell %d on page %d",i,iPage);
                   55288:       }else{
                   55289:         for(j=pc+size-1; j>=pc; j--) hit[j]++;
                   55290:       }
                   55291:     }
                   55292:     i = get2byte(&data[hdr+1]);
                   55293:     while( i>0 ){
                   55294:       int size, j;
                   55295:       assert( i<=usableSize-4 );     /* Enforced by btreeInitPage() */
                   55296:       size = get2byte(&data[i+2]);
                   55297:       assert( i+size<=usableSize );  /* Enforced by btreeInitPage() */
                   55298:       for(j=i+size-1; j>=i; j--) hit[j]++;
                   55299:       j = get2byte(&data[i]);
                   55300:       assert( j==0 || j>i+size );  /* Enforced by btreeInitPage() */
                   55301:       assert( j<=usableSize-4 );   /* Enforced by btreeInitPage() */
                   55302:       i = j;
                   55303:     }
                   55304:     for(i=cnt=0; i<usableSize; i++){
                   55305:       if( hit[i]==0 ){
                   55306:         cnt++;
                   55307:       }else if( hit[i]>1 ){
                   55308:         checkAppendMsg(pCheck, 0,
                   55309:           "Multiple uses for byte %d of page %d", i, iPage);
                   55310:         break;
                   55311:       }
                   55312:     }
                   55313:     if( cnt!=data[hdr+7] ){
                   55314:       checkAppendMsg(pCheck, 0, 
                   55315:           "Fragmentation of %d bytes reported as %d on page %d",
                   55316:           cnt, data[hdr+7], iPage);
                   55317:     }
                   55318:   }
                   55319:   sqlite3PageFree(hit);
                   55320:   releasePage(pPage);
                   55321:   return depth+1;
                   55322: }
                   55323: #endif /* SQLITE_OMIT_INTEGRITY_CHECK */
                   55324: 
                   55325: #ifndef SQLITE_OMIT_INTEGRITY_CHECK
                   55326: /*
                   55327: ** This routine does a complete check of the given BTree file.  aRoot[] is
                   55328: ** an array of pages numbers were each page number is the root page of
                   55329: ** a table.  nRoot is the number of entries in aRoot.
                   55330: **
                   55331: ** A read-only or read-write transaction must be opened before calling
                   55332: ** this function.
                   55333: **
                   55334: ** Write the number of error seen in *pnErr.  Except for some memory
                   55335: ** allocation errors,  an error message held in memory obtained from
                   55336: ** malloc is returned if *pnErr is non-zero.  If *pnErr==0 then NULL is
                   55337: ** returned.  If a memory allocation error occurs, NULL is returned.
                   55338: */
                   55339: SQLITE_PRIVATE char *sqlite3BtreeIntegrityCheck(
                   55340:   Btree *p,     /* The btree to be checked */
                   55341:   int *aRoot,   /* An array of root pages numbers for individual trees */
                   55342:   int nRoot,    /* Number of entries in aRoot[] */
                   55343:   int mxErr,    /* Stop reporting errors after this many */
                   55344:   int *pnErr    /* Write number of errors seen to this variable */
                   55345: ){
                   55346:   Pgno i;
                   55347:   int nRef;
                   55348:   IntegrityCk sCheck;
                   55349:   BtShared *pBt = p->pBt;
                   55350:   char zErr[100];
                   55351: 
                   55352:   sqlite3BtreeEnter(p);
                   55353:   assert( p->inTrans>TRANS_NONE && pBt->inTransaction>TRANS_NONE );
                   55354:   nRef = sqlite3PagerRefcount(pBt->pPager);
                   55355:   sCheck.pBt = pBt;
                   55356:   sCheck.pPager = pBt->pPager;
                   55357:   sCheck.nPage = btreePagecount(sCheck.pBt);
                   55358:   sCheck.mxErr = mxErr;
                   55359:   sCheck.nErr = 0;
                   55360:   sCheck.mallocFailed = 0;
                   55361:   *pnErr = 0;
                   55362:   if( sCheck.nPage==0 ){
                   55363:     sqlite3BtreeLeave(p);
                   55364:     return 0;
                   55365:   }
                   55366:   sCheck.anRef = sqlite3Malloc( (sCheck.nPage+1)*sizeof(sCheck.anRef[0]) );
                   55367:   if( !sCheck.anRef ){
                   55368:     *pnErr = 1;
                   55369:     sqlite3BtreeLeave(p);
                   55370:     return 0;
                   55371:   }
                   55372:   for(i=0; i<=sCheck.nPage; i++){ sCheck.anRef[i] = 0; }
                   55373:   i = PENDING_BYTE_PAGE(pBt);
                   55374:   if( i<=sCheck.nPage ){
                   55375:     sCheck.anRef[i] = 1;
                   55376:   }
                   55377:   sqlite3StrAccumInit(&sCheck.errMsg, zErr, sizeof(zErr), 20000);
                   55378:   sCheck.errMsg.useMalloc = 2;
                   55379: 
                   55380:   /* Check the integrity of the freelist
                   55381:   */
                   55382:   checkList(&sCheck, 1, get4byte(&pBt->pPage1->aData[32]),
                   55383:             get4byte(&pBt->pPage1->aData[36]), "Main freelist: ");
                   55384: 
                   55385:   /* Check all the tables.
                   55386:   */
                   55387:   for(i=0; (int)i<nRoot && sCheck.mxErr; i++){
                   55388:     if( aRoot[i]==0 ) continue;
                   55389: #ifndef SQLITE_OMIT_AUTOVACUUM
                   55390:     if( pBt->autoVacuum && aRoot[i]>1 ){
                   55391:       checkPtrmap(&sCheck, aRoot[i], PTRMAP_ROOTPAGE, 0, 0);
                   55392:     }
                   55393: #endif
                   55394:     checkTreePage(&sCheck, aRoot[i], "List of tree roots: ", NULL, NULL);
                   55395:   }
                   55396: 
                   55397:   /* Make sure every page in the file is referenced
                   55398:   */
                   55399:   for(i=1; i<=sCheck.nPage && sCheck.mxErr; i++){
                   55400: #ifdef SQLITE_OMIT_AUTOVACUUM
                   55401:     if( sCheck.anRef[i]==0 ){
                   55402:       checkAppendMsg(&sCheck, 0, "Page %d is never used", i);
                   55403:     }
                   55404: #else
                   55405:     /* If the database supports auto-vacuum, make sure no tables contain
                   55406:     ** references to pointer-map pages.
                   55407:     */
                   55408:     if( sCheck.anRef[i]==0 && 
                   55409:        (PTRMAP_PAGENO(pBt, i)!=i || !pBt->autoVacuum) ){
                   55410:       checkAppendMsg(&sCheck, 0, "Page %d is never used", i);
                   55411:     }
                   55412:     if( sCheck.anRef[i]!=0 && 
                   55413:        (PTRMAP_PAGENO(pBt, i)==i && pBt->autoVacuum) ){
                   55414:       checkAppendMsg(&sCheck, 0, "Pointer map page %d is referenced", i);
                   55415:     }
                   55416: #endif
                   55417:   }
                   55418: 
                   55419:   /* Make sure this analysis did not leave any unref() pages.
                   55420:   ** This is an internal consistency check; an integrity check
                   55421:   ** of the integrity check.
                   55422:   */
                   55423:   if( NEVER(nRef != sqlite3PagerRefcount(pBt->pPager)) ){
                   55424:     checkAppendMsg(&sCheck, 0, 
                   55425:       "Outstanding page count goes from %d to %d during this analysis",
                   55426:       nRef, sqlite3PagerRefcount(pBt->pPager)
                   55427:     );
                   55428:   }
                   55429: 
                   55430:   /* Clean  up and report errors.
                   55431:   */
                   55432:   sqlite3BtreeLeave(p);
                   55433:   sqlite3_free(sCheck.anRef);
                   55434:   if( sCheck.mallocFailed ){
                   55435:     sqlite3StrAccumReset(&sCheck.errMsg);
                   55436:     *pnErr = sCheck.nErr+1;
                   55437:     return 0;
                   55438:   }
                   55439:   *pnErr = sCheck.nErr;
                   55440:   if( sCheck.nErr==0 ) sqlite3StrAccumReset(&sCheck.errMsg);
                   55441:   return sqlite3StrAccumFinish(&sCheck.errMsg);
                   55442: }
                   55443: #endif /* SQLITE_OMIT_INTEGRITY_CHECK */
                   55444: 
                   55445: /*
                   55446: ** Return the full pathname of the underlying database file.
                   55447: **
                   55448: ** The pager filename is invariant as long as the pager is
                   55449: ** open so it is safe to access without the BtShared mutex.
                   55450: */
                   55451: SQLITE_PRIVATE const char *sqlite3BtreeGetFilename(Btree *p){
                   55452:   assert( p->pBt->pPager!=0 );
                   55453:   return sqlite3PagerFilename(p->pBt->pPager);
                   55454: }
                   55455: 
                   55456: /*
                   55457: ** Return the pathname of the journal file for this database. The return
                   55458: ** value of this routine is the same regardless of whether the journal file
                   55459: ** has been created or not.
                   55460: **
                   55461: ** The pager journal filename is invariant as long as the pager is
                   55462: ** open so it is safe to access without the BtShared mutex.
                   55463: */
                   55464: SQLITE_PRIVATE const char *sqlite3BtreeGetJournalname(Btree *p){
                   55465:   assert( p->pBt->pPager!=0 );
                   55466:   return sqlite3PagerJournalname(p->pBt->pPager);
                   55467: }
                   55468: 
                   55469: /*
                   55470: ** Return non-zero if a transaction is active.
                   55471: */
                   55472: SQLITE_PRIVATE int sqlite3BtreeIsInTrans(Btree *p){
                   55473:   assert( p==0 || sqlite3_mutex_held(p->db->mutex) );
                   55474:   return (p && (p->inTrans==TRANS_WRITE));
                   55475: }
                   55476: 
                   55477: #ifndef SQLITE_OMIT_WAL
                   55478: /*
                   55479: ** Run a checkpoint on the Btree passed as the first argument.
                   55480: **
                   55481: ** Return SQLITE_LOCKED if this or any other connection has an open 
                   55482: ** transaction on the shared-cache the argument Btree is connected to.
                   55483: **
                   55484: ** Parameter eMode is one of SQLITE_CHECKPOINT_PASSIVE, FULL or RESTART.
                   55485: */
                   55486: SQLITE_PRIVATE int sqlite3BtreeCheckpoint(Btree *p, int eMode, int *pnLog, int *pnCkpt){
                   55487:   int rc = SQLITE_OK;
                   55488:   if( p ){
                   55489:     BtShared *pBt = p->pBt;
                   55490:     sqlite3BtreeEnter(p);
                   55491:     if( pBt->inTransaction!=TRANS_NONE ){
                   55492:       rc = SQLITE_LOCKED;
                   55493:     }else{
                   55494:       rc = sqlite3PagerCheckpoint(pBt->pPager, eMode, pnLog, pnCkpt);
                   55495:     }
                   55496:     sqlite3BtreeLeave(p);
                   55497:   }
                   55498:   return rc;
                   55499: }
                   55500: #endif
                   55501: 
                   55502: /*
                   55503: ** Return non-zero if a read (or write) transaction is active.
                   55504: */
                   55505: SQLITE_PRIVATE int sqlite3BtreeIsInReadTrans(Btree *p){
                   55506:   assert( p );
                   55507:   assert( sqlite3_mutex_held(p->db->mutex) );
                   55508:   return p->inTrans!=TRANS_NONE;
                   55509: }
                   55510: 
                   55511: SQLITE_PRIVATE int sqlite3BtreeIsInBackup(Btree *p){
                   55512:   assert( p );
                   55513:   assert( sqlite3_mutex_held(p->db->mutex) );
                   55514:   return p->nBackup!=0;
                   55515: }
                   55516: 
                   55517: /*
                   55518: ** This function returns a pointer to a blob of memory associated with
                   55519: ** a single shared-btree. The memory is used by client code for its own
                   55520: ** purposes (for example, to store a high-level schema associated with 
                   55521: ** the shared-btree). The btree layer manages reference counting issues.
                   55522: **
                   55523: ** The first time this is called on a shared-btree, nBytes bytes of memory
                   55524: ** are allocated, zeroed, and returned to the caller. For each subsequent 
                   55525: ** call the nBytes parameter is ignored and a pointer to the same blob
                   55526: ** of memory returned. 
                   55527: **
                   55528: ** If the nBytes parameter is 0 and the blob of memory has not yet been
                   55529: ** allocated, a null pointer is returned. If the blob has already been
                   55530: ** allocated, it is returned as normal.
                   55531: **
                   55532: ** Just before the shared-btree is closed, the function passed as the 
                   55533: ** xFree argument when the memory allocation was made is invoked on the 
                   55534: ** blob of allocated memory. The xFree function should not call sqlite3_free()
                   55535: ** on the memory, the btree layer does that.
                   55536: */
                   55537: SQLITE_PRIVATE void *sqlite3BtreeSchema(Btree *p, int nBytes, void(*xFree)(void *)){
                   55538:   BtShared *pBt = p->pBt;
                   55539:   sqlite3BtreeEnter(p);
                   55540:   if( !pBt->pSchema && nBytes ){
                   55541:     pBt->pSchema = sqlite3DbMallocZero(0, nBytes);
                   55542:     pBt->xFreeSchema = xFree;
                   55543:   }
                   55544:   sqlite3BtreeLeave(p);
                   55545:   return pBt->pSchema;
                   55546: }
                   55547: 
                   55548: /*
                   55549: ** Return SQLITE_LOCKED_SHAREDCACHE if another user of the same shared 
                   55550: ** btree as the argument handle holds an exclusive lock on the 
                   55551: ** sqlite_master table. Otherwise SQLITE_OK.
                   55552: */
                   55553: SQLITE_PRIVATE int sqlite3BtreeSchemaLocked(Btree *p){
                   55554:   int rc;
                   55555:   assert( sqlite3_mutex_held(p->db->mutex) );
                   55556:   sqlite3BtreeEnter(p);
                   55557:   rc = querySharedCacheTableLock(p, MASTER_ROOT, READ_LOCK);
                   55558:   assert( rc==SQLITE_OK || rc==SQLITE_LOCKED_SHAREDCACHE );
                   55559:   sqlite3BtreeLeave(p);
                   55560:   return rc;
                   55561: }
                   55562: 
                   55563: 
                   55564: #ifndef SQLITE_OMIT_SHARED_CACHE
                   55565: /*
                   55566: ** Obtain a lock on the table whose root page is iTab.  The
                   55567: ** lock is a write lock if isWritelock is true or a read lock
                   55568: ** if it is false.
                   55569: */
                   55570: SQLITE_PRIVATE int sqlite3BtreeLockTable(Btree *p, int iTab, u8 isWriteLock){
                   55571:   int rc = SQLITE_OK;
                   55572:   assert( p->inTrans!=TRANS_NONE );
                   55573:   if( p->sharable ){
                   55574:     u8 lockType = READ_LOCK + isWriteLock;
                   55575:     assert( READ_LOCK+1==WRITE_LOCK );
                   55576:     assert( isWriteLock==0 || isWriteLock==1 );
                   55577: 
                   55578:     sqlite3BtreeEnter(p);
                   55579:     rc = querySharedCacheTableLock(p, iTab, lockType);
                   55580:     if( rc==SQLITE_OK ){
                   55581:       rc = setSharedCacheTableLock(p, iTab, lockType);
                   55582:     }
                   55583:     sqlite3BtreeLeave(p);
                   55584:   }
                   55585:   return rc;
                   55586: }
                   55587: #endif
                   55588: 
                   55589: #ifndef SQLITE_OMIT_INCRBLOB
                   55590: /*
                   55591: ** Argument pCsr must be a cursor opened for writing on an 
                   55592: ** INTKEY table currently pointing at a valid table entry. 
                   55593: ** This function modifies the data stored as part of that entry.
                   55594: **
                   55595: ** Only the data content may only be modified, it is not possible to 
                   55596: ** change the length of the data stored. If this function is called with
                   55597: ** parameters that attempt to write past the end of the existing data,
                   55598: ** no modifications are made and SQLITE_CORRUPT is returned.
                   55599: */
                   55600: SQLITE_PRIVATE int sqlite3BtreePutData(BtCursor *pCsr, u32 offset, u32 amt, void *z){
                   55601:   int rc;
                   55602:   assert( cursorHoldsMutex(pCsr) );
                   55603:   assert( sqlite3_mutex_held(pCsr->pBtree->db->mutex) );
                   55604:   assert( pCsr->isIncrblobHandle );
                   55605: 
                   55606:   rc = restoreCursorPosition(pCsr);
                   55607:   if( rc!=SQLITE_OK ){
                   55608:     return rc;
                   55609:   }
                   55610:   assert( pCsr->eState!=CURSOR_REQUIRESEEK );
                   55611:   if( pCsr->eState!=CURSOR_VALID ){
                   55612:     return SQLITE_ABORT;
                   55613:   }
                   55614: 
                   55615:   /* Check some assumptions: 
                   55616:   **   (a) the cursor is open for writing,
                   55617:   **   (b) there is a read/write transaction open,
                   55618:   **   (c) the connection holds a write-lock on the table (if required),
                   55619:   **   (d) there are no conflicting read-locks, and
                   55620:   **   (e) the cursor points at a valid row of an intKey table.
                   55621:   */
                   55622:   if( !pCsr->wrFlag ){
                   55623:     return SQLITE_READONLY;
                   55624:   }
                   55625:   assert( !pCsr->pBt->readOnly && pCsr->pBt->inTransaction==TRANS_WRITE );
                   55626:   assert( hasSharedCacheTableLock(pCsr->pBtree, pCsr->pgnoRoot, 0, 2) );
                   55627:   assert( !hasReadConflicts(pCsr->pBtree, pCsr->pgnoRoot) );
                   55628:   assert( pCsr->apPage[pCsr->iPage]->intKey );
                   55629: 
                   55630:   return accessPayload(pCsr, offset, amt, (unsigned char *)z, 1);
                   55631: }
                   55632: 
                   55633: /* 
                   55634: ** Set a flag on this cursor to cache the locations of pages from the 
                   55635: ** overflow list for the current row. This is used by cursors opened
                   55636: ** for incremental blob IO only.
                   55637: **
                   55638: ** This function sets a flag only. The actual page location cache
                   55639: ** (stored in BtCursor.aOverflow[]) is allocated and used by function
                   55640: ** accessPayload() (the worker function for sqlite3BtreeData() and
                   55641: ** sqlite3BtreePutData()).
                   55642: */
                   55643: SQLITE_PRIVATE void sqlite3BtreeCacheOverflow(BtCursor *pCur){
                   55644:   assert( cursorHoldsMutex(pCur) );
                   55645:   assert( sqlite3_mutex_held(pCur->pBtree->db->mutex) );
                   55646:   invalidateOverflowCache(pCur);
                   55647:   pCur->isIncrblobHandle = 1;
                   55648: }
                   55649: #endif
                   55650: 
                   55651: /*
                   55652: ** Set both the "read version" (single byte at byte offset 18) and 
                   55653: ** "write version" (single byte at byte offset 19) fields in the database
                   55654: ** header to iVersion.
                   55655: */
                   55656: SQLITE_PRIVATE int sqlite3BtreeSetVersion(Btree *pBtree, int iVersion){
                   55657:   BtShared *pBt = pBtree->pBt;
                   55658:   int rc;                         /* Return code */
                   55659:  
                   55660:   assert( pBtree->inTrans==TRANS_NONE );
                   55661:   assert( iVersion==1 || iVersion==2 );
                   55662: 
                   55663:   /* If setting the version fields to 1, do not automatically open the
                   55664:   ** WAL connection, even if the version fields are currently set to 2.
                   55665:   */
                   55666:   pBt->doNotUseWAL = (u8)(iVersion==1);
                   55667: 
                   55668:   rc = sqlite3BtreeBeginTrans(pBtree, 0);
                   55669:   if( rc==SQLITE_OK ){
                   55670:     u8 *aData = pBt->pPage1->aData;
                   55671:     if( aData[18]!=(u8)iVersion || aData[19]!=(u8)iVersion ){
                   55672:       rc = sqlite3BtreeBeginTrans(pBtree, 2);
                   55673:       if( rc==SQLITE_OK ){
                   55674:         rc = sqlite3PagerWrite(pBt->pPage1->pDbPage);
                   55675:         if( rc==SQLITE_OK ){
                   55676:           aData[18] = (u8)iVersion;
                   55677:           aData[19] = (u8)iVersion;
                   55678:         }
                   55679:       }
                   55680:     }
                   55681:   }
                   55682: 
                   55683:   pBt->doNotUseWAL = 0;
                   55684:   return rc;
                   55685: }
                   55686: 
                   55687: /************** End of btree.c ***********************************************/
                   55688: /************** Begin file backup.c ******************************************/
                   55689: /*
                   55690: ** 2009 January 28
                   55691: **
                   55692: ** The author disclaims copyright to this source code.  In place of
                   55693: ** a legal notice, here is a blessing:
                   55694: **
                   55695: **    May you do good and not evil.
                   55696: **    May you find forgiveness for yourself and forgive others.
                   55697: **    May you share freely, never taking more than you give.
                   55698: **
                   55699: *************************************************************************
                   55700: ** This file contains the implementation of the sqlite3_backup_XXX() 
                   55701: ** API functions and the related features.
                   55702: */
                   55703: 
                   55704: /* Macro to find the minimum of two numeric values.
                   55705: */
                   55706: #ifndef MIN
                   55707: # define MIN(x,y) ((x)<(y)?(x):(y))
                   55708: #endif
                   55709: 
                   55710: /*
                   55711: ** Structure allocated for each backup operation.
                   55712: */
                   55713: struct sqlite3_backup {
                   55714:   sqlite3* pDestDb;        /* Destination database handle */
                   55715:   Btree *pDest;            /* Destination b-tree file */
                   55716:   u32 iDestSchema;         /* Original schema cookie in destination */
                   55717:   int bDestLocked;         /* True once a write-transaction is open on pDest */
                   55718: 
                   55719:   Pgno iNext;              /* Page number of the next source page to copy */
                   55720:   sqlite3* pSrcDb;         /* Source database handle */
                   55721:   Btree *pSrc;             /* Source b-tree file */
                   55722: 
                   55723:   int rc;                  /* Backup process error code */
                   55724: 
                   55725:   /* These two variables are set by every call to backup_step(). They are
                   55726:   ** read by calls to backup_remaining() and backup_pagecount().
                   55727:   */
                   55728:   Pgno nRemaining;         /* Number of pages left to copy */
                   55729:   Pgno nPagecount;         /* Total number of pages to copy */
                   55730: 
                   55731:   int isAttached;          /* True once backup has been registered with pager */
                   55732:   sqlite3_backup *pNext;   /* Next backup associated with source pager */
                   55733: };
                   55734: 
                   55735: /*
                   55736: ** THREAD SAFETY NOTES:
                   55737: **
                   55738: **   Once it has been created using backup_init(), a single sqlite3_backup
                   55739: **   structure may be accessed via two groups of thread-safe entry points:
                   55740: **
                   55741: **     * Via the sqlite3_backup_XXX() API function backup_step() and 
                   55742: **       backup_finish(). Both these functions obtain the source database
                   55743: **       handle mutex and the mutex associated with the source BtShared 
                   55744: **       structure, in that order.
                   55745: **
                   55746: **     * Via the BackupUpdate() and BackupRestart() functions, which are
                   55747: **       invoked by the pager layer to report various state changes in
                   55748: **       the page cache associated with the source database. The mutex
                   55749: **       associated with the source database BtShared structure will always 
                   55750: **       be held when either of these functions are invoked.
                   55751: **
                   55752: **   The other sqlite3_backup_XXX() API functions, backup_remaining() and
                   55753: **   backup_pagecount() are not thread-safe functions. If they are called
                   55754: **   while some other thread is calling backup_step() or backup_finish(),
                   55755: **   the values returned may be invalid. There is no way for a call to
                   55756: **   BackupUpdate() or BackupRestart() to interfere with backup_remaining()
                   55757: **   or backup_pagecount().
                   55758: **
                   55759: **   Depending on the SQLite configuration, the database handles and/or
                   55760: **   the Btree objects may have their own mutexes that require locking.
                   55761: **   Non-sharable Btrees (in-memory databases for example), do not have
                   55762: **   associated mutexes.
                   55763: */
                   55764: 
                   55765: /*
                   55766: ** Return a pointer corresponding to database zDb (i.e. "main", "temp")
                   55767: ** in connection handle pDb. If such a database cannot be found, return
                   55768: ** a NULL pointer and write an error message to pErrorDb.
                   55769: **
                   55770: ** If the "temp" database is requested, it may need to be opened by this 
                   55771: ** function. If an error occurs while doing so, return 0 and write an 
                   55772: ** error message to pErrorDb.
                   55773: */
                   55774: static Btree *findBtree(sqlite3 *pErrorDb, sqlite3 *pDb, const char *zDb){
                   55775:   int i = sqlite3FindDbName(pDb, zDb);
                   55776: 
                   55777:   if( i==1 ){
                   55778:     Parse *pParse;
                   55779:     int rc = 0;
                   55780:     pParse = sqlite3StackAllocZero(pErrorDb, sizeof(*pParse));
                   55781:     if( pParse==0 ){
                   55782:       sqlite3Error(pErrorDb, SQLITE_NOMEM, "out of memory");
                   55783:       rc = SQLITE_NOMEM;
                   55784:     }else{
                   55785:       pParse->db = pDb;
                   55786:       if( sqlite3OpenTempDatabase(pParse) ){
                   55787:         sqlite3Error(pErrorDb, pParse->rc, "%s", pParse->zErrMsg);
                   55788:         rc = SQLITE_ERROR;
                   55789:       }
                   55790:       sqlite3DbFree(pErrorDb, pParse->zErrMsg);
                   55791:       sqlite3StackFree(pErrorDb, pParse);
                   55792:     }
                   55793:     if( rc ){
                   55794:       return 0;
                   55795:     }
                   55796:   }
                   55797: 
                   55798:   if( i<0 ){
                   55799:     sqlite3Error(pErrorDb, SQLITE_ERROR, "unknown database %s", zDb);
                   55800:     return 0;
                   55801:   }
                   55802: 
                   55803:   return pDb->aDb[i].pBt;
                   55804: }
                   55805: 
                   55806: /*
                   55807: ** Attempt to set the page size of the destination to match the page size
                   55808: ** of the source.
                   55809: */
                   55810: static int setDestPgsz(sqlite3_backup *p){
                   55811:   int rc;
                   55812:   rc = sqlite3BtreeSetPageSize(p->pDest,sqlite3BtreeGetPageSize(p->pSrc),-1,0);
                   55813:   return rc;
                   55814: }
                   55815: 
                   55816: /*
                   55817: ** Create an sqlite3_backup process to copy the contents of zSrcDb from
                   55818: ** connection handle pSrcDb to zDestDb in pDestDb. If successful, return
                   55819: ** a pointer to the new sqlite3_backup object.
                   55820: **
                   55821: ** If an error occurs, NULL is returned and an error code and error message
                   55822: ** stored in database handle pDestDb.
                   55823: */
                   55824: SQLITE_API sqlite3_backup *sqlite3_backup_init(
                   55825:   sqlite3* pDestDb,                     /* Database to write to */
                   55826:   const char *zDestDb,                  /* Name of database within pDestDb */
                   55827:   sqlite3* pSrcDb,                      /* Database connection to read from */
                   55828:   const char *zSrcDb                    /* Name of database within pSrcDb */
                   55829: ){
                   55830:   sqlite3_backup *p;                    /* Value to return */
                   55831: 
                   55832:   /* Lock the source database handle. The destination database
                   55833:   ** handle is not locked in this routine, but it is locked in
                   55834:   ** sqlite3_backup_step(). The user is required to ensure that no
                   55835:   ** other thread accesses the destination handle for the duration
                   55836:   ** of the backup operation.  Any attempt to use the destination
                   55837:   ** database connection while a backup is in progress may cause
                   55838:   ** a malfunction or a deadlock.
                   55839:   */
                   55840:   sqlite3_mutex_enter(pSrcDb->mutex);
                   55841:   sqlite3_mutex_enter(pDestDb->mutex);
                   55842: 
                   55843:   if( pSrcDb==pDestDb ){
                   55844:     sqlite3Error(
                   55845:         pDestDb, SQLITE_ERROR, "source and destination must be distinct"
                   55846:     );
                   55847:     p = 0;
                   55848:   }else {
                   55849:     /* Allocate space for a new sqlite3_backup object...
                   55850:     ** EVIDENCE-OF: R-64852-21591 The sqlite3_backup object is created by a
                   55851:     ** call to sqlite3_backup_init() and is destroyed by a call to
                   55852:     ** sqlite3_backup_finish(). */
                   55853:     p = (sqlite3_backup *)sqlite3_malloc(sizeof(sqlite3_backup));
                   55854:     if( !p ){
                   55855:       sqlite3Error(pDestDb, SQLITE_NOMEM, 0);
                   55856:     }
                   55857:   }
                   55858: 
                   55859:   /* If the allocation succeeded, populate the new object. */
                   55860:   if( p ){
                   55861:     memset(p, 0, sizeof(sqlite3_backup));
                   55862:     p->pSrc = findBtree(pDestDb, pSrcDb, zSrcDb);
                   55863:     p->pDest = findBtree(pDestDb, pDestDb, zDestDb);
                   55864:     p->pDestDb = pDestDb;
                   55865:     p->pSrcDb = pSrcDb;
                   55866:     p->iNext = 1;
                   55867:     p->isAttached = 0;
                   55868: 
                   55869:     if( 0==p->pSrc || 0==p->pDest || setDestPgsz(p)==SQLITE_NOMEM ){
                   55870:       /* One (or both) of the named databases did not exist or an OOM
                   55871:       ** error was hit.  The error has already been written into the
                   55872:       ** pDestDb handle.  All that is left to do here is free the
                   55873:       ** sqlite3_backup structure.
                   55874:       */
                   55875:       sqlite3_free(p);
                   55876:       p = 0;
                   55877:     }
                   55878:   }
                   55879:   if( p ){
                   55880:     p->pSrc->nBackup++;
                   55881:   }
                   55882: 
                   55883:   sqlite3_mutex_leave(pDestDb->mutex);
                   55884:   sqlite3_mutex_leave(pSrcDb->mutex);
                   55885:   return p;
                   55886: }
                   55887: 
                   55888: /*
                   55889: ** Argument rc is an SQLite error code. Return true if this error is 
                   55890: ** considered fatal if encountered during a backup operation. All errors
                   55891: ** are considered fatal except for SQLITE_BUSY and SQLITE_LOCKED.
                   55892: */
                   55893: static int isFatalError(int rc){
                   55894:   return (rc!=SQLITE_OK && rc!=SQLITE_BUSY && ALWAYS(rc!=SQLITE_LOCKED));
                   55895: }
                   55896: 
                   55897: /*
                   55898: ** Parameter zSrcData points to a buffer containing the data for 
                   55899: ** page iSrcPg from the source database. Copy this data into the 
                   55900: ** destination database.
                   55901: */
                   55902: static int backupOnePage(sqlite3_backup *p, Pgno iSrcPg, const u8 *zSrcData){
                   55903:   Pager * const pDestPager = sqlite3BtreePager(p->pDest);
                   55904:   const int nSrcPgsz = sqlite3BtreeGetPageSize(p->pSrc);
                   55905:   int nDestPgsz = sqlite3BtreeGetPageSize(p->pDest);
                   55906:   const int nCopy = MIN(nSrcPgsz, nDestPgsz);
                   55907:   const i64 iEnd = (i64)iSrcPg*(i64)nSrcPgsz;
                   55908: #ifdef SQLITE_HAS_CODEC
                   55909:   int nSrcReserve = sqlite3BtreeGetReserve(p->pSrc);
                   55910:   int nDestReserve = sqlite3BtreeGetReserve(p->pDest);
                   55911: #endif
                   55912: 
                   55913:   int rc = SQLITE_OK;
                   55914:   i64 iOff;
                   55915: 
                   55916:   assert( p->bDestLocked );
                   55917:   assert( !isFatalError(p->rc) );
                   55918:   assert( iSrcPg!=PENDING_BYTE_PAGE(p->pSrc->pBt) );
                   55919:   assert( zSrcData );
                   55920: 
                   55921:   /* Catch the case where the destination is an in-memory database and the
                   55922:   ** page sizes of the source and destination differ. 
                   55923:   */
                   55924:   if( nSrcPgsz!=nDestPgsz && sqlite3PagerIsMemdb(pDestPager) ){
                   55925:     rc = SQLITE_READONLY;
                   55926:   }
                   55927: 
                   55928: #ifdef SQLITE_HAS_CODEC
                   55929:   /* Backup is not possible if the page size of the destination is changing
                   55930:   ** and a codec is in use.
                   55931:   */
                   55932:   if( nSrcPgsz!=nDestPgsz && sqlite3PagerGetCodec(pDestPager)!=0 ){
                   55933:     rc = SQLITE_READONLY;
                   55934:   }
                   55935: 
                   55936:   /* Backup is not possible if the number of bytes of reserve space differ
                   55937:   ** between source and destination.  If there is a difference, try to
                   55938:   ** fix the destination to agree with the source.  If that is not possible,
                   55939:   ** then the backup cannot proceed.
                   55940:   */
                   55941:   if( nSrcReserve!=nDestReserve ){
                   55942:     u32 newPgsz = nSrcPgsz;
                   55943:     rc = sqlite3PagerSetPagesize(pDestPager, &newPgsz, nSrcReserve);
                   55944:     if( rc==SQLITE_OK && newPgsz!=nSrcPgsz ) rc = SQLITE_READONLY;
                   55945:   }
                   55946: #endif
                   55947: 
                   55948:   /* This loop runs once for each destination page spanned by the source 
                   55949:   ** page. For each iteration, variable iOff is set to the byte offset
                   55950:   ** of the destination page.
                   55951:   */
                   55952:   for(iOff=iEnd-(i64)nSrcPgsz; rc==SQLITE_OK && iOff<iEnd; iOff+=nDestPgsz){
                   55953:     DbPage *pDestPg = 0;
                   55954:     Pgno iDest = (Pgno)(iOff/nDestPgsz)+1;
                   55955:     if( iDest==PENDING_BYTE_PAGE(p->pDest->pBt) ) continue;
                   55956:     if( SQLITE_OK==(rc = sqlite3PagerGet(pDestPager, iDest, &pDestPg))
                   55957:      && SQLITE_OK==(rc = sqlite3PagerWrite(pDestPg))
                   55958:     ){
                   55959:       const u8 *zIn = &zSrcData[iOff%nSrcPgsz];
                   55960:       u8 *zDestData = sqlite3PagerGetData(pDestPg);
                   55961:       u8 *zOut = &zDestData[iOff%nDestPgsz];
                   55962: 
                   55963:       /* Copy the data from the source page into the destination page.
                   55964:       ** Then clear the Btree layer MemPage.isInit flag. Both this module
                   55965:       ** and the pager code use this trick (clearing the first byte
                   55966:       ** of the page 'extra' space to invalidate the Btree layers
                   55967:       ** cached parse of the page). MemPage.isInit is marked 
                   55968:       ** "MUST BE FIRST" for this purpose.
                   55969:       */
                   55970:       memcpy(zOut, zIn, nCopy);
                   55971:       ((u8 *)sqlite3PagerGetExtra(pDestPg))[0] = 0;
                   55972:     }
                   55973:     sqlite3PagerUnref(pDestPg);
                   55974:   }
                   55975: 
                   55976:   return rc;
                   55977: }
                   55978: 
                   55979: /*
                   55980: ** If pFile is currently larger than iSize bytes, then truncate it to
                   55981: ** exactly iSize bytes. If pFile is not larger than iSize bytes, then
                   55982: ** this function is a no-op.
                   55983: **
                   55984: ** Return SQLITE_OK if everything is successful, or an SQLite error 
                   55985: ** code if an error occurs.
                   55986: */
                   55987: static int backupTruncateFile(sqlite3_file *pFile, i64 iSize){
                   55988:   i64 iCurrent;
                   55989:   int rc = sqlite3OsFileSize(pFile, &iCurrent);
                   55990:   if( rc==SQLITE_OK && iCurrent>iSize ){
                   55991:     rc = sqlite3OsTruncate(pFile, iSize);
                   55992:   }
                   55993:   return rc;
                   55994: }
                   55995: 
                   55996: /*
                   55997: ** Register this backup object with the associated source pager for
                   55998: ** callbacks when pages are changed or the cache invalidated.
                   55999: */
                   56000: static void attachBackupObject(sqlite3_backup *p){
                   56001:   sqlite3_backup **pp;
                   56002:   assert( sqlite3BtreeHoldsMutex(p->pSrc) );
                   56003:   pp = sqlite3PagerBackupPtr(sqlite3BtreePager(p->pSrc));
                   56004:   p->pNext = *pp;
                   56005:   *pp = p;
                   56006:   p->isAttached = 1;
                   56007: }
                   56008: 
                   56009: /*
                   56010: ** Copy nPage pages from the source b-tree to the destination.
                   56011: */
                   56012: SQLITE_API int sqlite3_backup_step(sqlite3_backup *p, int nPage){
                   56013:   int rc;
                   56014:   int destMode;       /* Destination journal mode */
                   56015:   int pgszSrc = 0;    /* Source page size */
                   56016:   int pgszDest = 0;   /* Destination page size */
                   56017: 
                   56018:   sqlite3_mutex_enter(p->pSrcDb->mutex);
                   56019:   sqlite3BtreeEnter(p->pSrc);
                   56020:   if( p->pDestDb ){
                   56021:     sqlite3_mutex_enter(p->pDestDb->mutex);
                   56022:   }
                   56023: 
                   56024:   rc = p->rc;
                   56025:   if( !isFatalError(rc) ){
                   56026:     Pager * const pSrcPager = sqlite3BtreePager(p->pSrc);     /* Source pager */
                   56027:     Pager * const pDestPager = sqlite3BtreePager(p->pDest);   /* Dest pager */
                   56028:     int ii;                            /* Iterator variable */
                   56029:     int nSrcPage = -1;                 /* Size of source db in pages */
                   56030:     int bCloseTrans = 0;               /* True if src db requires unlocking */
                   56031: 
                   56032:     /* If the source pager is currently in a write-transaction, return
                   56033:     ** SQLITE_BUSY immediately.
                   56034:     */
                   56035:     if( p->pDestDb && p->pSrc->pBt->inTransaction==TRANS_WRITE ){
                   56036:       rc = SQLITE_BUSY;
                   56037:     }else{
                   56038:       rc = SQLITE_OK;
                   56039:     }
                   56040: 
                   56041:     /* Lock the destination database, if it is not locked already. */
                   56042:     if( SQLITE_OK==rc && p->bDestLocked==0
                   56043:      && SQLITE_OK==(rc = sqlite3BtreeBeginTrans(p->pDest, 2)) 
                   56044:     ){
                   56045:       p->bDestLocked = 1;
                   56046:       sqlite3BtreeGetMeta(p->pDest, BTREE_SCHEMA_VERSION, &p->iDestSchema);
                   56047:     }
                   56048: 
                   56049:     /* If there is no open read-transaction on the source database, open
                   56050:     ** one now. If a transaction is opened here, then it will be closed
                   56051:     ** before this function exits.
                   56052:     */
                   56053:     if( rc==SQLITE_OK && 0==sqlite3BtreeIsInReadTrans(p->pSrc) ){
                   56054:       rc = sqlite3BtreeBeginTrans(p->pSrc, 0);
                   56055:       bCloseTrans = 1;
                   56056:     }
                   56057: 
                   56058:     /* Do not allow backup if the destination database is in WAL mode
                   56059:     ** and the page sizes are different between source and destination */
                   56060:     pgszSrc = sqlite3BtreeGetPageSize(p->pSrc);
                   56061:     pgszDest = sqlite3BtreeGetPageSize(p->pDest);
                   56062:     destMode = sqlite3PagerGetJournalMode(sqlite3BtreePager(p->pDest));
                   56063:     if( SQLITE_OK==rc && destMode==PAGER_JOURNALMODE_WAL && pgszSrc!=pgszDest ){
                   56064:       rc = SQLITE_READONLY;
                   56065:     }
                   56066:   
                   56067:     /* Now that there is a read-lock on the source database, query the
                   56068:     ** source pager for the number of pages in the database.
                   56069:     */
                   56070:     nSrcPage = (int)sqlite3BtreeLastPage(p->pSrc);
                   56071:     assert( nSrcPage>=0 );
                   56072:     for(ii=0; (nPage<0 || ii<nPage) && p->iNext<=(Pgno)nSrcPage && !rc; ii++){
                   56073:       const Pgno iSrcPg = p->iNext;                 /* Source page number */
                   56074:       if( iSrcPg!=PENDING_BYTE_PAGE(p->pSrc->pBt) ){
                   56075:         DbPage *pSrcPg;                             /* Source page object */
                   56076:         rc = sqlite3PagerGet(pSrcPager, iSrcPg, &pSrcPg);
                   56077:         if( rc==SQLITE_OK ){
                   56078:           rc = backupOnePage(p, iSrcPg, sqlite3PagerGetData(pSrcPg));
                   56079:           sqlite3PagerUnref(pSrcPg);
                   56080:         }
                   56081:       }
                   56082:       p->iNext++;
                   56083:     }
                   56084:     if( rc==SQLITE_OK ){
                   56085:       p->nPagecount = nSrcPage;
                   56086:       p->nRemaining = nSrcPage+1-p->iNext;
                   56087:       if( p->iNext>(Pgno)nSrcPage ){
                   56088:         rc = SQLITE_DONE;
                   56089:       }else if( !p->isAttached ){
                   56090:         attachBackupObject(p);
                   56091:       }
                   56092:     }
                   56093:   
                   56094:     /* Update the schema version field in the destination database. This
                   56095:     ** is to make sure that the schema-version really does change in
                   56096:     ** the case where the source and destination databases have the
                   56097:     ** same schema version.
                   56098:     */
                   56099:     if( rc==SQLITE_DONE 
                   56100:      && (rc = sqlite3BtreeUpdateMeta(p->pDest,1,p->iDestSchema+1))==SQLITE_OK
                   56101:     ){
                   56102:       int nDestTruncate;
                   56103:   
                   56104:       if( p->pDestDb ){
                   56105:         sqlite3ResetInternalSchema(p->pDestDb, -1);
                   56106:       }
                   56107: 
                   56108:       /* Set nDestTruncate to the final number of pages in the destination
                   56109:       ** database. The complication here is that the destination page
                   56110:       ** size may be different to the source page size. 
                   56111:       **
                   56112:       ** If the source page size is smaller than the destination page size, 
                   56113:       ** round up. In this case the call to sqlite3OsTruncate() below will
                   56114:       ** fix the size of the file. However it is important to call
                   56115:       ** sqlite3PagerTruncateImage() here so that any pages in the 
                   56116:       ** destination file that lie beyond the nDestTruncate page mark are
                   56117:       ** journalled by PagerCommitPhaseOne() before they are destroyed
                   56118:       ** by the file truncation.
                   56119:       */
                   56120:       assert( pgszSrc==sqlite3BtreeGetPageSize(p->pSrc) );
                   56121:       assert( pgszDest==sqlite3BtreeGetPageSize(p->pDest) );
                   56122:       if( pgszSrc<pgszDest ){
                   56123:         int ratio = pgszDest/pgszSrc;
                   56124:         nDestTruncate = (nSrcPage+ratio-1)/ratio;
                   56125:         if( nDestTruncate==(int)PENDING_BYTE_PAGE(p->pDest->pBt) ){
                   56126:           nDestTruncate--;
                   56127:         }
                   56128:       }else{
                   56129:         nDestTruncate = nSrcPage * (pgszSrc/pgszDest);
                   56130:       }
                   56131:       sqlite3PagerTruncateImage(pDestPager, nDestTruncate);
                   56132: 
                   56133:       if( pgszSrc<pgszDest ){
                   56134:         /* If the source page-size is smaller than the destination page-size,
                   56135:         ** two extra things may need to happen:
                   56136:         **
                   56137:         **   * The destination may need to be truncated, and
                   56138:         **
                   56139:         **   * Data stored on the pages immediately following the 
                   56140:         **     pending-byte page in the source database may need to be
                   56141:         **     copied into the destination database.
                   56142:         */
                   56143:         const i64 iSize = (i64)pgszSrc * (i64)nSrcPage;
                   56144:         sqlite3_file * const pFile = sqlite3PagerFile(pDestPager);
                   56145:         i64 iOff;
                   56146:         i64 iEnd;
                   56147: 
                   56148:         assert( pFile );
                   56149:         assert( (i64)nDestTruncate*(i64)pgszDest >= iSize || (
                   56150:               nDestTruncate==(int)(PENDING_BYTE_PAGE(p->pDest->pBt)-1)
                   56151:            && iSize>=PENDING_BYTE && iSize<=PENDING_BYTE+pgszDest
                   56152:         ));
                   56153: 
                   56154:         /* This call ensures that all data required to recreate the original
                   56155:         ** database has been stored in the journal for pDestPager and the
                   56156:         ** journal synced to disk. So at this point we may safely modify
                   56157:         ** the database file in any way, knowing that if a power failure
                   56158:         ** occurs, the original database will be reconstructed from the 
                   56159:         ** journal file.  */
                   56160:         rc = sqlite3PagerCommitPhaseOne(pDestPager, 0, 1);
                   56161: 
                   56162:         /* Write the extra pages and truncate the database file as required. */
                   56163:         iEnd = MIN(PENDING_BYTE + pgszDest, iSize);
                   56164:         for(
                   56165:           iOff=PENDING_BYTE+pgszSrc; 
                   56166:           rc==SQLITE_OK && iOff<iEnd; 
                   56167:           iOff+=pgszSrc
                   56168:         ){
                   56169:           PgHdr *pSrcPg = 0;
                   56170:           const Pgno iSrcPg = (Pgno)((iOff/pgszSrc)+1);
                   56171:           rc = sqlite3PagerGet(pSrcPager, iSrcPg, &pSrcPg);
                   56172:           if( rc==SQLITE_OK ){
                   56173:             u8 *zData = sqlite3PagerGetData(pSrcPg);
                   56174:             rc = sqlite3OsWrite(pFile, zData, pgszSrc, iOff);
                   56175:           }
                   56176:           sqlite3PagerUnref(pSrcPg);
                   56177:         }
                   56178:         if( rc==SQLITE_OK ){
                   56179:           rc = backupTruncateFile(pFile, iSize);
                   56180:         }
                   56181: 
                   56182:         /* Sync the database file to disk. */
                   56183:         if( rc==SQLITE_OK ){
                   56184:           rc = sqlite3PagerSync(pDestPager);
                   56185:         }
                   56186:       }else{
                   56187:         rc = sqlite3PagerCommitPhaseOne(pDestPager, 0, 0);
                   56188:       }
                   56189:   
                   56190:       /* Finish committing the transaction to the destination database. */
                   56191:       if( SQLITE_OK==rc
                   56192:        && SQLITE_OK==(rc = sqlite3BtreeCommitPhaseTwo(p->pDest, 0))
                   56193:       ){
                   56194:         rc = SQLITE_DONE;
                   56195:       }
                   56196:     }
                   56197:   
                   56198:     /* If bCloseTrans is true, then this function opened a read transaction
                   56199:     ** on the source database. Close the read transaction here. There is
                   56200:     ** no need to check the return values of the btree methods here, as
                   56201:     ** "committing" a read-only transaction cannot fail.
                   56202:     */
                   56203:     if( bCloseTrans ){
                   56204:       TESTONLY( int rc2 );
                   56205:       TESTONLY( rc2  = ) sqlite3BtreeCommitPhaseOne(p->pSrc, 0);
                   56206:       TESTONLY( rc2 |= ) sqlite3BtreeCommitPhaseTwo(p->pSrc, 0);
                   56207:       assert( rc2==SQLITE_OK );
                   56208:     }
                   56209:   
                   56210:     if( rc==SQLITE_IOERR_NOMEM ){
                   56211:       rc = SQLITE_NOMEM;
                   56212:     }
                   56213:     p->rc = rc;
                   56214:   }
                   56215:   if( p->pDestDb ){
                   56216:     sqlite3_mutex_leave(p->pDestDb->mutex);
                   56217:   }
                   56218:   sqlite3BtreeLeave(p->pSrc);
                   56219:   sqlite3_mutex_leave(p->pSrcDb->mutex);
                   56220:   return rc;
                   56221: }
                   56222: 
                   56223: /*
                   56224: ** Release all resources associated with an sqlite3_backup* handle.
                   56225: */
                   56226: SQLITE_API int sqlite3_backup_finish(sqlite3_backup *p){
                   56227:   sqlite3_backup **pp;                 /* Ptr to head of pagers backup list */
                   56228:   sqlite3_mutex *mutex;                /* Mutex to protect source database */
                   56229:   int rc;                              /* Value to return */
                   56230: 
                   56231:   /* Enter the mutexes */
                   56232:   if( p==0 ) return SQLITE_OK;
                   56233:   sqlite3_mutex_enter(p->pSrcDb->mutex);
                   56234:   sqlite3BtreeEnter(p->pSrc);
                   56235:   mutex = p->pSrcDb->mutex;
                   56236:   if( p->pDestDb ){
                   56237:     sqlite3_mutex_enter(p->pDestDb->mutex);
                   56238:   }
                   56239: 
                   56240:   /* Detach this backup from the source pager. */
                   56241:   if( p->pDestDb ){
                   56242:     p->pSrc->nBackup--;
                   56243:   }
                   56244:   if( p->isAttached ){
                   56245:     pp = sqlite3PagerBackupPtr(sqlite3BtreePager(p->pSrc));
                   56246:     while( *pp!=p ){
                   56247:       pp = &(*pp)->pNext;
                   56248:     }
                   56249:     *pp = p->pNext;
                   56250:   }
                   56251: 
                   56252:   /* If a transaction is still open on the Btree, roll it back. */
                   56253:   sqlite3BtreeRollback(p->pDest);
                   56254: 
                   56255:   /* Set the error code of the destination database handle. */
                   56256:   rc = (p->rc==SQLITE_DONE) ? SQLITE_OK : p->rc;
                   56257:   sqlite3Error(p->pDestDb, rc, 0);
                   56258: 
                   56259:   /* Exit the mutexes and free the backup context structure. */
                   56260:   if( p->pDestDb ){
                   56261:     sqlite3_mutex_leave(p->pDestDb->mutex);
                   56262:   }
                   56263:   sqlite3BtreeLeave(p->pSrc);
                   56264:   if( p->pDestDb ){
                   56265:     /* EVIDENCE-OF: R-64852-21591 The sqlite3_backup object is created by a
                   56266:     ** call to sqlite3_backup_init() and is destroyed by a call to
                   56267:     ** sqlite3_backup_finish(). */
                   56268:     sqlite3_free(p);
                   56269:   }
                   56270:   sqlite3_mutex_leave(mutex);
                   56271:   return rc;
                   56272: }
                   56273: 
                   56274: /*
                   56275: ** Return the number of pages still to be backed up as of the most recent
                   56276: ** call to sqlite3_backup_step().
                   56277: */
                   56278: SQLITE_API int sqlite3_backup_remaining(sqlite3_backup *p){
                   56279:   return p->nRemaining;
                   56280: }
                   56281: 
                   56282: /*
                   56283: ** Return the total number of pages in the source database as of the most 
                   56284: ** recent call to sqlite3_backup_step().
                   56285: */
                   56286: SQLITE_API int sqlite3_backup_pagecount(sqlite3_backup *p){
                   56287:   return p->nPagecount;
                   56288: }
                   56289: 
                   56290: /*
                   56291: ** This function is called after the contents of page iPage of the
                   56292: ** source database have been modified. If page iPage has already been 
                   56293: ** copied into the destination database, then the data written to the
                   56294: ** destination is now invalidated. The destination copy of iPage needs
                   56295: ** to be updated with the new data before the backup operation is
                   56296: ** complete.
                   56297: **
                   56298: ** It is assumed that the mutex associated with the BtShared object
                   56299: ** corresponding to the source database is held when this function is
                   56300: ** called.
                   56301: */
                   56302: SQLITE_PRIVATE void sqlite3BackupUpdate(sqlite3_backup *pBackup, Pgno iPage, const u8 *aData){
                   56303:   sqlite3_backup *p;                   /* Iterator variable */
                   56304:   for(p=pBackup; p; p=p->pNext){
                   56305:     assert( sqlite3_mutex_held(p->pSrc->pBt->mutex) );
                   56306:     if( !isFatalError(p->rc) && iPage<p->iNext ){
                   56307:       /* The backup process p has already copied page iPage. But now it
                   56308:       ** has been modified by a transaction on the source pager. Copy
                   56309:       ** the new data into the backup.
                   56310:       */
                   56311:       int rc;
                   56312:       assert( p->pDestDb );
                   56313:       sqlite3_mutex_enter(p->pDestDb->mutex);
                   56314:       rc = backupOnePage(p, iPage, aData);
                   56315:       sqlite3_mutex_leave(p->pDestDb->mutex);
                   56316:       assert( rc!=SQLITE_BUSY && rc!=SQLITE_LOCKED );
                   56317:       if( rc!=SQLITE_OK ){
                   56318:         p->rc = rc;
                   56319:       }
                   56320:     }
                   56321:   }
                   56322: }
                   56323: 
                   56324: /*
                   56325: ** Restart the backup process. This is called when the pager layer
                   56326: ** detects that the database has been modified by an external database
                   56327: ** connection. In this case there is no way of knowing which of the
                   56328: ** pages that have been copied into the destination database are still 
                   56329: ** valid and which are not, so the entire process needs to be restarted.
                   56330: **
                   56331: ** It is assumed that the mutex associated with the BtShared object
                   56332: ** corresponding to the source database is held when this function is
                   56333: ** called.
                   56334: */
                   56335: SQLITE_PRIVATE void sqlite3BackupRestart(sqlite3_backup *pBackup){
                   56336:   sqlite3_backup *p;                   /* Iterator variable */
                   56337:   for(p=pBackup; p; p=p->pNext){
                   56338:     assert( sqlite3_mutex_held(p->pSrc->pBt->mutex) );
                   56339:     p->iNext = 1;
                   56340:   }
                   56341: }
                   56342: 
                   56343: #ifndef SQLITE_OMIT_VACUUM
                   56344: /*
                   56345: ** Copy the complete content of pBtFrom into pBtTo.  A transaction
                   56346: ** must be active for both files.
                   56347: **
                   56348: ** The size of file pTo may be reduced by this operation. If anything 
                   56349: ** goes wrong, the transaction on pTo is rolled back. If successful, the 
                   56350: ** transaction is committed before returning.
                   56351: */
                   56352: SQLITE_PRIVATE int sqlite3BtreeCopyFile(Btree *pTo, Btree *pFrom){
                   56353:   int rc;
                   56354:   sqlite3_backup b;
                   56355:   sqlite3BtreeEnter(pTo);
                   56356:   sqlite3BtreeEnter(pFrom);
                   56357: 
                   56358:   /* Set up an sqlite3_backup object. sqlite3_backup.pDestDb must be set
                   56359:   ** to 0. This is used by the implementations of sqlite3_backup_step()
                   56360:   ** and sqlite3_backup_finish() to detect that they are being called
                   56361:   ** from this function, not directly by the user.
                   56362:   */
                   56363:   memset(&b, 0, sizeof(b));
                   56364:   b.pSrcDb = pFrom->db;
                   56365:   b.pSrc = pFrom;
                   56366:   b.pDest = pTo;
                   56367:   b.iNext = 1;
                   56368: 
                   56369:   /* 0x7FFFFFFF is the hard limit for the number of pages in a database
                   56370:   ** file. By passing this as the number of pages to copy to
                   56371:   ** sqlite3_backup_step(), we can guarantee that the copy finishes 
                   56372:   ** within a single call (unless an error occurs). The assert() statement
                   56373:   ** checks this assumption - (p->rc) should be set to either SQLITE_DONE 
                   56374:   ** or an error code.
                   56375:   */
                   56376:   sqlite3_backup_step(&b, 0x7FFFFFFF);
                   56377:   assert( b.rc!=SQLITE_OK );
                   56378:   rc = sqlite3_backup_finish(&b);
                   56379:   if( rc==SQLITE_OK ){
                   56380:     pTo->pBt->pageSizeFixed = 0;
                   56381:   }
                   56382: 
                   56383:   sqlite3BtreeLeave(pFrom);
                   56384:   sqlite3BtreeLeave(pTo);
                   56385:   return rc;
                   56386: }
                   56387: #endif /* SQLITE_OMIT_VACUUM */
                   56388: 
                   56389: /************** End of backup.c **********************************************/
                   56390: /************** Begin file vdbemem.c *****************************************/
                   56391: /*
                   56392: ** 2004 May 26
                   56393: **
                   56394: ** The author disclaims copyright to this source code.  In place of
                   56395: ** a legal notice, here is a blessing:
                   56396: **
                   56397: **    May you do good and not evil.
                   56398: **    May you find forgiveness for yourself and forgive others.
                   56399: **    May you share freely, never taking more than you give.
                   56400: **
                   56401: *************************************************************************
                   56402: **
                   56403: ** This file contains code use to manipulate "Mem" structure.  A "Mem"
                   56404: ** stores a single value in the VDBE.  Mem is an opaque structure visible
                   56405: ** only within the VDBE.  Interface routines refer to a Mem using the
                   56406: ** name sqlite_value
                   56407: */
                   56408: 
                   56409: /*
                   56410: ** Call sqlite3VdbeMemExpandBlob() on the supplied value (type Mem*)
                   56411: ** P if required.
                   56412: */
                   56413: #define expandBlob(P) (((P)->flags&MEM_Zero)?sqlite3VdbeMemExpandBlob(P):0)
                   56414: 
                   56415: /*
                   56416: ** If pMem is an object with a valid string representation, this routine
                   56417: ** ensures the internal encoding for the string representation is
                   56418: ** 'desiredEnc', one of SQLITE_UTF8, SQLITE_UTF16LE or SQLITE_UTF16BE.
                   56419: **
                   56420: ** If pMem is not a string object, or the encoding of the string
                   56421: ** representation is already stored using the requested encoding, then this
                   56422: ** routine is a no-op.
                   56423: **
                   56424: ** SQLITE_OK is returned if the conversion is successful (or not required).
                   56425: ** SQLITE_NOMEM may be returned if a malloc() fails during conversion
                   56426: ** between formats.
                   56427: */
                   56428: SQLITE_PRIVATE int sqlite3VdbeChangeEncoding(Mem *pMem, int desiredEnc){
                   56429:   int rc;
                   56430:   assert( (pMem->flags&MEM_RowSet)==0 );
                   56431:   assert( desiredEnc==SQLITE_UTF8 || desiredEnc==SQLITE_UTF16LE
                   56432:            || desiredEnc==SQLITE_UTF16BE );
                   56433:   if( !(pMem->flags&MEM_Str) || pMem->enc==desiredEnc ){
                   56434:     return SQLITE_OK;
                   56435:   }
                   56436:   assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
                   56437: #ifdef SQLITE_OMIT_UTF16
                   56438:   return SQLITE_ERROR;
                   56439: #else
                   56440: 
                   56441:   /* MemTranslate() may return SQLITE_OK or SQLITE_NOMEM. If NOMEM is returned,
                   56442:   ** then the encoding of the value may not have changed.
                   56443:   */
                   56444:   rc = sqlite3VdbeMemTranslate(pMem, (u8)desiredEnc);
                   56445:   assert(rc==SQLITE_OK    || rc==SQLITE_NOMEM);
                   56446:   assert(rc==SQLITE_OK    || pMem->enc!=desiredEnc);
                   56447:   assert(rc==SQLITE_NOMEM || pMem->enc==desiredEnc);
                   56448:   return rc;
                   56449: #endif
                   56450: }
                   56451: 
                   56452: /*
                   56453: ** Make sure pMem->z points to a writable allocation of at least 
                   56454: ** n bytes.
                   56455: **
                   56456: ** If the memory cell currently contains string or blob data
                   56457: ** and the third argument passed to this function is true, the 
                   56458: ** current content of the cell is preserved. Otherwise, it may
                   56459: ** be discarded.  
                   56460: **
                   56461: ** This function sets the MEM_Dyn flag and clears any xDel callback.
                   56462: ** It also clears MEM_Ephem and MEM_Static. If the preserve flag is 
                   56463: ** not set, Mem.n is zeroed.
                   56464: */
                   56465: SQLITE_PRIVATE int sqlite3VdbeMemGrow(Mem *pMem, int n, int preserve){
                   56466:   assert( 1 >=
                   56467:     ((pMem->zMalloc && pMem->zMalloc==pMem->z) ? 1 : 0) +
                   56468:     (((pMem->flags&MEM_Dyn)&&pMem->xDel) ? 1 : 0) + 
                   56469:     ((pMem->flags&MEM_Ephem) ? 1 : 0) + 
                   56470:     ((pMem->flags&MEM_Static) ? 1 : 0)
                   56471:   );
                   56472:   assert( (pMem->flags&MEM_RowSet)==0 );
                   56473: 
                   56474:   if( n<32 ) n = 32;
                   56475:   if( sqlite3DbMallocSize(pMem->db, pMem->zMalloc)<n ){
                   56476:     if( preserve && pMem->z==pMem->zMalloc ){
                   56477:       pMem->z = pMem->zMalloc = sqlite3DbReallocOrFree(pMem->db, pMem->z, n);
                   56478:       preserve = 0;
                   56479:     }else{
                   56480:       sqlite3DbFree(pMem->db, pMem->zMalloc);
                   56481:       pMem->zMalloc = sqlite3DbMallocRaw(pMem->db, n);
                   56482:     }
                   56483:   }
                   56484: 
                   56485:   if( pMem->z && preserve && pMem->zMalloc && pMem->z!=pMem->zMalloc ){
                   56486:     memcpy(pMem->zMalloc, pMem->z, pMem->n);
                   56487:   }
                   56488:   if( pMem->flags&MEM_Dyn && pMem->xDel ){
                   56489:     pMem->xDel((void *)(pMem->z));
                   56490:   }
                   56491: 
                   56492:   pMem->z = pMem->zMalloc;
                   56493:   if( pMem->z==0 ){
                   56494:     pMem->flags = MEM_Null;
                   56495:   }else{
                   56496:     pMem->flags &= ~(MEM_Ephem|MEM_Static);
                   56497:   }
                   56498:   pMem->xDel = 0;
                   56499:   return (pMem->z ? SQLITE_OK : SQLITE_NOMEM);
                   56500: }
                   56501: 
                   56502: /*
                   56503: ** Make the given Mem object MEM_Dyn.  In other words, make it so
                   56504: ** that any TEXT or BLOB content is stored in memory obtained from
                   56505: ** malloc().  In this way, we know that the memory is safe to be
                   56506: ** overwritten or altered.
                   56507: **
                   56508: ** Return SQLITE_OK on success or SQLITE_NOMEM if malloc fails.
                   56509: */
                   56510: SQLITE_PRIVATE int sqlite3VdbeMemMakeWriteable(Mem *pMem){
                   56511:   int f;
                   56512:   assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
                   56513:   assert( (pMem->flags&MEM_RowSet)==0 );
                   56514:   expandBlob(pMem);
                   56515:   f = pMem->flags;
                   56516:   if( (f&(MEM_Str|MEM_Blob)) && pMem->z!=pMem->zMalloc ){
                   56517:     if( sqlite3VdbeMemGrow(pMem, pMem->n + 2, 1) ){
                   56518:       return SQLITE_NOMEM;
                   56519:     }
                   56520:     pMem->z[pMem->n] = 0;
                   56521:     pMem->z[pMem->n+1] = 0;
                   56522:     pMem->flags |= MEM_Term;
                   56523: #ifdef SQLITE_DEBUG
                   56524:     pMem->pScopyFrom = 0;
                   56525: #endif
                   56526:   }
                   56527: 
                   56528:   return SQLITE_OK;
                   56529: }
                   56530: 
                   56531: /*
                   56532: ** If the given Mem* has a zero-filled tail, turn it into an ordinary
                   56533: ** blob stored in dynamically allocated space.
                   56534: */
                   56535: #ifndef SQLITE_OMIT_INCRBLOB
                   56536: SQLITE_PRIVATE int sqlite3VdbeMemExpandBlob(Mem *pMem){
                   56537:   if( pMem->flags & MEM_Zero ){
                   56538:     int nByte;
                   56539:     assert( pMem->flags&MEM_Blob );
                   56540:     assert( (pMem->flags&MEM_RowSet)==0 );
                   56541:     assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
                   56542: 
                   56543:     /* Set nByte to the number of bytes required to store the expanded blob. */
                   56544:     nByte = pMem->n + pMem->u.nZero;
                   56545:     if( nByte<=0 ){
                   56546:       nByte = 1;
                   56547:     }
                   56548:     if( sqlite3VdbeMemGrow(pMem, nByte, 1) ){
                   56549:       return SQLITE_NOMEM;
                   56550:     }
                   56551: 
                   56552:     memset(&pMem->z[pMem->n], 0, pMem->u.nZero);
                   56553:     pMem->n += pMem->u.nZero;
                   56554:     pMem->flags &= ~(MEM_Zero|MEM_Term);
                   56555:   }
                   56556:   return SQLITE_OK;
                   56557: }
                   56558: #endif
                   56559: 
                   56560: 
                   56561: /*
                   56562: ** Make sure the given Mem is \u0000 terminated.
                   56563: */
                   56564: SQLITE_PRIVATE int sqlite3VdbeMemNulTerminate(Mem *pMem){
                   56565:   assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
                   56566:   if( (pMem->flags & MEM_Term)!=0 || (pMem->flags & MEM_Str)==0 ){
                   56567:     return SQLITE_OK;   /* Nothing to do */
                   56568:   }
                   56569:   if( sqlite3VdbeMemGrow(pMem, pMem->n+2, 1) ){
                   56570:     return SQLITE_NOMEM;
                   56571:   }
                   56572:   pMem->z[pMem->n] = 0;
                   56573:   pMem->z[pMem->n+1] = 0;
                   56574:   pMem->flags |= MEM_Term;
                   56575:   return SQLITE_OK;
                   56576: }
                   56577: 
                   56578: /*
                   56579: ** Add MEM_Str to the set of representations for the given Mem.  Numbers
                   56580: ** are converted using sqlite3_snprintf().  Converting a BLOB to a string
                   56581: ** is a no-op.
                   56582: **
                   56583: ** Existing representations MEM_Int and MEM_Real are *not* invalidated.
                   56584: **
                   56585: ** A MEM_Null value will never be passed to this function. This function is
                   56586: ** used for converting values to text for returning to the user (i.e. via
                   56587: ** sqlite3_value_text()), or for ensuring that values to be used as btree
                   56588: ** keys are strings. In the former case a NULL pointer is returned the
                   56589: ** user and the later is an internal programming error.
                   56590: */
                   56591: SQLITE_PRIVATE int sqlite3VdbeMemStringify(Mem *pMem, int enc){
                   56592:   int rc = SQLITE_OK;
                   56593:   int fg = pMem->flags;
                   56594:   const int nByte = 32;
                   56595: 
                   56596:   assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
                   56597:   assert( !(fg&MEM_Zero) );
                   56598:   assert( !(fg&(MEM_Str|MEM_Blob)) );
                   56599:   assert( fg&(MEM_Int|MEM_Real) );
                   56600:   assert( (pMem->flags&MEM_RowSet)==0 );
                   56601:   assert( EIGHT_BYTE_ALIGNMENT(pMem) );
                   56602: 
                   56603: 
                   56604:   if( sqlite3VdbeMemGrow(pMem, nByte, 0) ){
                   56605:     return SQLITE_NOMEM;
                   56606:   }
                   56607: 
                   56608:   /* For a Real or Integer, use sqlite3_mprintf() to produce the UTF-8
                   56609:   ** string representation of the value. Then, if the required encoding
                   56610:   ** is UTF-16le or UTF-16be do a translation.
                   56611:   ** 
                   56612:   ** FIX ME: It would be better if sqlite3_snprintf() could do UTF-16.
                   56613:   */
                   56614:   if( fg & MEM_Int ){
                   56615:     sqlite3_snprintf(nByte, pMem->z, "%lld", pMem->u.i);
                   56616:   }else{
                   56617:     assert( fg & MEM_Real );
                   56618:     sqlite3_snprintf(nByte, pMem->z, "%!.15g", pMem->r);
                   56619:   }
                   56620:   pMem->n = sqlite3Strlen30(pMem->z);
                   56621:   pMem->enc = SQLITE_UTF8;
                   56622:   pMem->flags |= MEM_Str|MEM_Term;
                   56623:   sqlite3VdbeChangeEncoding(pMem, enc);
                   56624:   return rc;
                   56625: }
                   56626: 
                   56627: /*
                   56628: ** Memory cell pMem contains the context of an aggregate function.
                   56629: ** This routine calls the finalize method for that function.  The
                   56630: ** result of the aggregate is stored back into pMem.
                   56631: **
                   56632: ** Return SQLITE_ERROR if the finalizer reports an error.  SQLITE_OK
                   56633: ** otherwise.
                   56634: */
                   56635: SQLITE_PRIVATE int sqlite3VdbeMemFinalize(Mem *pMem, FuncDef *pFunc){
                   56636:   int rc = SQLITE_OK;
                   56637:   if( ALWAYS(pFunc && pFunc->xFinalize) ){
                   56638:     sqlite3_context ctx;
                   56639:     assert( (pMem->flags & MEM_Null)!=0 || pFunc==pMem->u.pDef );
                   56640:     assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
                   56641:     memset(&ctx, 0, sizeof(ctx));
                   56642:     ctx.s.flags = MEM_Null;
                   56643:     ctx.s.db = pMem->db;
                   56644:     ctx.pMem = pMem;
                   56645:     ctx.pFunc = pFunc;
                   56646:     pFunc->xFinalize(&ctx); /* IMP: R-24505-23230 */
                   56647:     assert( 0==(pMem->flags&MEM_Dyn) && !pMem->xDel );
                   56648:     sqlite3DbFree(pMem->db, pMem->zMalloc);
                   56649:     memcpy(pMem, &ctx.s, sizeof(ctx.s));
                   56650:     rc = ctx.isError;
                   56651:   }
                   56652:   return rc;
                   56653: }
                   56654: 
                   56655: /*
                   56656: ** If the memory cell contains a string value that must be freed by
                   56657: ** invoking an external callback, free it now. Calling this function
                   56658: ** does not free any Mem.zMalloc buffer.
                   56659: */
                   56660: SQLITE_PRIVATE void sqlite3VdbeMemReleaseExternal(Mem *p){
                   56661:   assert( p->db==0 || sqlite3_mutex_held(p->db->mutex) );
                   56662:   testcase( p->flags & MEM_Agg );
                   56663:   testcase( p->flags & MEM_Dyn );
                   56664:   testcase( p->flags & MEM_RowSet );
                   56665:   testcase( p->flags & MEM_Frame );
                   56666:   if( p->flags&(MEM_Agg|MEM_Dyn|MEM_RowSet|MEM_Frame) ){
                   56667:     if( p->flags&MEM_Agg ){
                   56668:       sqlite3VdbeMemFinalize(p, p->u.pDef);
                   56669:       assert( (p->flags & MEM_Agg)==0 );
                   56670:       sqlite3VdbeMemRelease(p);
                   56671:     }else if( p->flags&MEM_Dyn && p->xDel ){
                   56672:       assert( (p->flags&MEM_RowSet)==0 );
                   56673:       p->xDel((void *)p->z);
                   56674:       p->xDel = 0;
                   56675:     }else if( p->flags&MEM_RowSet ){
                   56676:       sqlite3RowSetClear(p->u.pRowSet);
                   56677:     }else if( p->flags&MEM_Frame ){
                   56678:       sqlite3VdbeMemSetNull(p);
                   56679:     }
                   56680:   }
                   56681: }
                   56682: 
                   56683: /*
                   56684: ** Release any memory held by the Mem. This may leave the Mem in an
                   56685: ** inconsistent state, for example with (Mem.z==0) and
                   56686: ** (Mem.type==SQLITE_TEXT).
                   56687: */
                   56688: SQLITE_PRIVATE void sqlite3VdbeMemRelease(Mem *p){
                   56689:   sqlite3VdbeMemReleaseExternal(p);
                   56690:   sqlite3DbFree(p->db, p->zMalloc);
                   56691:   p->z = 0;
                   56692:   p->zMalloc = 0;
                   56693:   p->xDel = 0;
                   56694: }
                   56695: 
                   56696: /*
                   56697: ** Convert a 64-bit IEEE double into a 64-bit signed integer.
                   56698: ** If the double is too large, return 0x8000000000000000.
                   56699: **
                   56700: ** Most systems appear to do this simply by assigning
                   56701: ** variables and without the extra range tests.  But
                   56702: ** there are reports that windows throws an expection
                   56703: ** if the floating point value is out of range. (See ticket #2880.)
                   56704: ** Because we do not completely understand the problem, we will
                   56705: ** take the conservative approach and always do range tests
                   56706: ** before attempting the conversion.
                   56707: */
                   56708: static i64 doubleToInt64(double r){
                   56709: #ifdef SQLITE_OMIT_FLOATING_POINT
                   56710:   /* When floating-point is omitted, double and int64 are the same thing */
                   56711:   return r;
                   56712: #else
                   56713:   /*
                   56714:   ** Many compilers we encounter do not define constants for the
                   56715:   ** minimum and maximum 64-bit integers, or they define them
                   56716:   ** inconsistently.  And many do not understand the "LL" notation.
                   56717:   ** So we define our own static constants here using nothing
                   56718:   ** larger than a 32-bit integer constant.
                   56719:   */
                   56720:   static const i64 maxInt = LARGEST_INT64;
                   56721:   static const i64 minInt = SMALLEST_INT64;
                   56722: 
                   56723:   if( r<(double)minInt ){
                   56724:     return minInt;
                   56725:   }else if( r>(double)maxInt ){
                   56726:     /* minInt is correct here - not maxInt.  It turns out that assigning
                   56727:     ** a very large positive number to an integer results in a very large
                   56728:     ** negative integer.  This makes no sense, but it is what x86 hardware
                   56729:     ** does so for compatibility we will do the same in software. */
                   56730:     return minInt;
                   56731:   }else{
                   56732:     return (i64)r;
                   56733:   }
                   56734: #endif
                   56735: }
                   56736: 
                   56737: /*
                   56738: ** Return some kind of integer value which is the best we can do
                   56739: ** at representing the value that *pMem describes as an integer.
                   56740: ** If pMem is an integer, then the value is exact.  If pMem is
                   56741: ** a floating-point then the value returned is the integer part.
                   56742: ** If pMem is a string or blob, then we make an attempt to convert
                   56743: ** it into a integer and return that.  If pMem represents an
                   56744: ** an SQL-NULL value, return 0.
                   56745: **
                   56746: ** If pMem represents a string value, its encoding might be changed.
                   56747: */
                   56748: SQLITE_PRIVATE i64 sqlite3VdbeIntValue(Mem *pMem){
                   56749:   int flags;
                   56750:   assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
                   56751:   assert( EIGHT_BYTE_ALIGNMENT(pMem) );
                   56752:   flags = pMem->flags;
                   56753:   if( flags & MEM_Int ){
                   56754:     return pMem->u.i;
                   56755:   }else if( flags & MEM_Real ){
                   56756:     return doubleToInt64(pMem->r);
                   56757:   }else if( flags & (MEM_Str|MEM_Blob) ){
                   56758:     i64 value = 0;
                   56759:     assert( pMem->z || pMem->n==0 );
                   56760:     testcase( pMem->z==0 );
                   56761:     sqlite3Atoi64(pMem->z, &value, pMem->n, pMem->enc);
                   56762:     return value;
                   56763:   }else{
                   56764:     return 0;
                   56765:   }
                   56766: }
                   56767: 
                   56768: /*
                   56769: ** Return the best representation of pMem that we can get into a
                   56770: ** double.  If pMem is already a double or an integer, return its
                   56771: ** value.  If it is a string or blob, try to convert it to a double.
                   56772: ** If it is a NULL, return 0.0.
                   56773: */
                   56774: SQLITE_PRIVATE double sqlite3VdbeRealValue(Mem *pMem){
                   56775:   assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
                   56776:   assert( EIGHT_BYTE_ALIGNMENT(pMem) );
                   56777:   if( pMem->flags & MEM_Real ){
                   56778:     return pMem->r;
                   56779:   }else if( pMem->flags & MEM_Int ){
                   56780:     return (double)pMem->u.i;
                   56781:   }else if( pMem->flags & (MEM_Str|MEM_Blob) ){
                   56782:     /* (double)0 In case of SQLITE_OMIT_FLOATING_POINT... */
                   56783:     double val = (double)0;
                   56784:     sqlite3AtoF(pMem->z, &val, pMem->n, pMem->enc);
                   56785:     return val;
                   56786:   }else{
                   56787:     /* (double)0 In case of SQLITE_OMIT_FLOATING_POINT... */
                   56788:     return (double)0;
                   56789:   }
                   56790: }
                   56791: 
                   56792: /*
                   56793: ** The MEM structure is already a MEM_Real.  Try to also make it a
                   56794: ** MEM_Int if we can.
                   56795: */
                   56796: SQLITE_PRIVATE void sqlite3VdbeIntegerAffinity(Mem *pMem){
                   56797:   assert( pMem->flags & MEM_Real );
                   56798:   assert( (pMem->flags & MEM_RowSet)==0 );
                   56799:   assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
                   56800:   assert( EIGHT_BYTE_ALIGNMENT(pMem) );
                   56801: 
                   56802:   pMem->u.i = doubleToInt64(pMem->r);
                   56803: 
                   56804:   /* Only mark the value as an integer if
                   56805:   **
                   56806:   **    (1) the round-trip conversion real->int->real is a no-op, and
                   56807:   **    (2) The integer is neither the largest nor the smallest
                   56808:   **        possible integer (ticket #3922)
                   56809:   **
                   56810:   ** The second and third terms in the following conditional enforces
                   56811:   ** the second condition under the assumption that addition overflow causes
                   56812:   ** values to wrap around.  On x86 hardware, the third term is always
                   56813:   ** true and could be omitted.  But we leave it in because other
                   56814:   ** architectures might behave differently.
                   56815:   */
                   56816:   if( pMem->r==(double)pMem->u.i && pMem->u.i>SMALLEST_INT64
                   56817:       && ALWAYS(pMem->u.i<LARGEST_INT64) ){
                   56818:     pMem->flags |= MEM_Int;
                   56819:   }
                   56820: }
                   56821: 
                   56822: /*
                   56823: ** Convert pMem to type integer.  Invalidate any prior representations.
                   56824: */
                   56825: SQLITE_PRIVATE int sqlite3VdbeMemIntegerify(Mem *pMem){
                   56826:   assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
                   56827:   assert( (pMem->flags & MEM_RowSet)==0 );
                   56828:   assert( EIGHT_BYTE_ALIGNMENT(pMem) );
                   56829: 
                   56830:   pMem->u.i = sqlite3VdbeIntValue(pMem);
                   56831:   MemSetTypeFlag(pMem, MEM_Int);
                   56832:   return SQLITE_OK;
                   56833: }
                   56834: 
                   56835: /*
                   56836: ** Convert pMem so that it is of type MEM_Real.
                   56837: ** Invalidate any prior representations.
                   56838: */
                   56839: SQLITE_PRIVATE int sqlite3VdbeMemRealify(Mem *pMem){
                   56840:   assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
                   56841:   assert( EIGHT_BYTE_ALIGNMENT(pMem) );
                   56842: 
                   56843:   pMem->r = sqlite3VdbeRealValue(pMem);
                   56844:   MemSetTypeFlag(pMem, MEM_Real);
                   56845:   return SQLITE_OK;
                   56846: }
                   56847: 
                   56848: /*
                   56849: ** Convert pMem so that it has types MEM_Real or MEM_Int or both.
                   56850: ** Invalidate any prior representations.
                   56851: **
                   56852: ** Every effort is made to force the conversion, even if the input
                   56853: ** is a string that does not look completely like a number.  Convert
                   56854: ** as much of the string as we can and ignore the rest.
                   56855: */
                   56856: SQLITE_PRIVATE int sqlite3VdbeMemNumerify(Mem *pMem){
                   56857:   if( (pMem->flags & (MEM_Int|MEM_Real|MEM_Null))==0 ){
                   56858:     assert( (pMem->flags & (MEM_Blob|MEM_Str))!=0 );
                   56859:     assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
                   56860:     if( 0==sqlite3Atoi64(pMem->z, &pMem->u.i, pMem->n, pMem->enc) ){
                   56861:       MemSetTypeFlag(pMem, MEM_Int);
                   56862:     }else{
                   56863:       pMem->r = sqlite3VdbeRealValue(pMem);
                   56864:       MemSetTypeFlag(pMem, MEM_Real);
                   56865:       sqlite3VdbeIntegerAffinity(pMem);
                   56866:     }
                   56867:   }
                   56868:   assert( (pMem->flags & (MEM_Int|MEM_Real|MEM_Null))!=0 );
                   56869:   pMem->flags &= ~(MEM_Str|MEM_Blob);
                   56870:   return SQLITE_OK;
                   56871: }
                   56872: 
                   56873: /*
                   56874: ** Delete any previous value and set the value stored in *pMem to NULL.
                   56875: */
                   56876: SQLITE_PRIVATE void sqlite3VdbeMemSetNull(Mem *pMem){
                   56877:   if( pMem->flags & MEM_Frame ){
                   56878:     VdbeFrame *pFrame = pMem->u.pFrame;
                   56879:     pFrame->pParent = pFrame->v->pDelFrame;
                   56880:     pFrame->v->pDelFrame = pFrame;
                   56881:   }
                   56882:   if( pMem->flags & MEM_RowSet ){
                   56883:     sqlite3RowSetClear(pMem->u.pRowSet);
                   56884:   }
                   56885:   MemSetTypeFlag(pMem, MEM_Null);
                   56886:   pMem->type = SQLITE_NULL;
                   56887: }
                   56888: 
                   56889: /*
                   56890: ** Delete any previous value and set the value to be a BLOB of length
                   56891: ** n containing all zeros.
                   56892: */
                   56893: SQLITE_PRIVATE void sqlite3VdbeMemSetZeroBlob(Mem *pMem, int n){
                   56894:   sqlite3VdbeMemRelease(pMem);
                   56895:   pMem->flags = MEM_Blob|MEM_Zero;
                   56896:   pMem->type = SQLITE_BLOB;
                   56897:   pMem->n = 0;
                   56898:   if( n<0 ) n = 0;
                   56899:   pMem->u.nZero = n;
                   56900:   pMem->enc = SQLITE_UTF8;
                   56901: 
                   56902: #ifdef SQLITE_OMIT_INCRBLOB
                   56903:   sqlite3VdbeMemGrow(pMem, n, 0);
                   56904:   if( pMem->z ){
                   56905:     pMem->n = n;
                   56906:     memset(pMem->z, 0, n);
                   56907:   }
                   56908: #endif
                   56909: }
                   56910: 
                   56911: /*
                   56912: ** Delete any previous value and set the value stored in *pMem to val,
                   56913: ** manifest type INTEGER.
                   56914: */
                   56915: SQLITE_PRIVATE void sqlite3VdbeMemSetInt64(Mem *pMem, i64 val){
                   56916:   sqlite3VdbeMemRelease(pMem);
                   56917:   pMem->u.i = val;
                   56918:   pMem->flags = MEM_Int;
                   56919:   pMem->type = SQLITE_INTEGER;
                   56920: }
                   56921: 
                   56922: #ifndef SQLITE_OMIT_FLOATING_POINT
                   56923: /*
                   56924: ** Delete any previous value and set the value stored in *pMem to val,
                   56925: ** manifest type REAL.
                   56926: */
                   56927: SQLITE_PRIVATE void sqlite3VdbeMemSetDouble(Mem *pMem, double val){
                   56928:   if( sqlite3IsNaN(val) ){
                   56929:     sqlite3VdbeMemSetNull(pMem);
                   56930:   }else{
                   56931:     sqlite3VdbeMemRelease(pMem);
                   56932:     pMem->r = val;
                   56933:     pMem->flags = MEM_Real;
                   56934:     pMem->type = SQLITE_FLOAT;
                   56935:   }
                   56936: }
                   56937: #endif
                   56938: 
                   56939: /*
                   56940: ** Delete any previous value and set the value of pMem to be an
                   56941: ** empty boolean index.
                   56942: */
                   56943: SQLITE_PRIVATE void sqlite3VdbeMemSetRowSet(Mem *pMem){
                   56944:   sqlite3 *db = pMem->db;
                   56945:   assert( db!=0 );
                   56946:   assert( (pMem->flags & MEM_RowSet)==0 );
                   56947:   sqlite3VdbeMemRelease(pMem);
                   56948:   pMem->zMalloc = sqlite3DbMallocRaw(db, 64);
                   56949:   if( db->mallocFailed ){
                   56950:     pMem->flags = MEM_Null;
                   56951:   }else{
                   56952:     assert( pMem->zMalloc );
                   56953:     pMem->u.pRowSet = sqlite3RowSetInit(db, pMem->zMalloc, 
                   56954:                                        sqlite3DbMallocSize(db, pMem->zMalloc));
                   56955:     assert( pMem->u.pRowSet!=0 );
                   56956:     pMem->flags = MEM_RowSet;
                   56957:   }
                   56958: }
                   56959: 
                   56960: /*
                   56961: ** Return true if the Mem object contains a TEXT or BLOB that is
                   56962: ** too large - whose size exceeds SQLITE_MAX_LENGTH.
                   56963: */
                   56964: SQLITE_PRIVATE int sqlite3VdbeMemTooBig(Mem *p){
                   56965:   assert( p->db!=0 );
                   56966:   if( p->flags & (MEM_Str|MEM_Blob) ){
                   56967:     int n = p->n;
                   56968:     if( p->flags & MEM_Zero ){
                   56969:       n += p->u.nZero;
                   56970:     }
                   56971:     return n>p->db->aLimit[SQLITE_LIMIT_LENGTH];
                   56972:   }
                   56973:   return 0; 
                   56974: }
                   56975: 
                   56976: #ifdef SQLITE_DEBUG
                   56977: /*
                   56978: ** This routine prepares a memory cell for modication by breaking
                   56979: ** its link to a shallow copy and by marking any current shallow
                   56980: ** copies of this cell as invalid.
                   56981: **
                   56982: ** This is used for testing and debugging only - to make sure shallow
                   56983: ** copies are not misused.
                   56984: */
                   56985: SQLITE_PRIVATE void sqlite3VdbeMemPrepareToChange(Vdbe *pVdbe, Mem *pMem){
                   56986:   int i;
                   56987:   Mem *pX;
                   56988:   for(i=1, pX=&pVdbe->aMem[1]; i<=pVdbe->nMem; i++, pX++){
                   56989:     if( pX->pScopyFrom==pMem ){
                   56990:       pX->flags |= MEM_Invalid;
                   56991:       pX->pScopyFrom = 0;
                   56992:     }
                   56993:   }
                   56994:   pMem->pScopyFrom = 0;
                   56995: }
                   56996: #endif /* SQLITE_DEBUG */
                   56997: 
                   56998: /*
                   56999: ** Size of struct Mem not including the Mem.zMalloc member.
                   57000: */
                   57001: #define MEMCELLSIZE (size_t)(&(((Mem *)0)->zMalloc))
                   57002: 
                   57003: /*
                   57004: ** Make an shallow copy of pFrom into pTo.  Prior contents of
                   57005: ** pTo are freed.  The pFrom->z field is not duplicated.  If
                   57006: ** pFrom->z is used, then pTo->z points to the same thing as pFrom->z
                   57007: ** and flags gets srcType (either MEM_Ephem or MEM_Static).
                   57008: */
                   57009: SQLITE_PRIVATE void sqlite3VdbeMemShallowCopy(Mem *pTo, const Mem *pFrom, int srcType){
                   57010:   assert( (pFrom->flags & MEM_RowSet)==0 );
                   57011:   sqlite3VdbeMemReleaseExternal(pTo);
                   57012:   memcpy(pTo, pFrom, MEMCELLSIZE);
                   57013:   pTo->xDel = 0;
                   57014:   if( (pFrom->flags&MEM_Static)==0 ){
                   57015:     pTo->flags &= ~(MEM_Dyn|MEM_Static|MEM_Ephem);
                   57016:     assert( srcType==MEM_Ephem || srcType==MEM_Static );
                   57017:     pTo->flags |= srcType;
                   57018:   }
                   57019: }
                   57020: 
                   57021: /*
                   57022: ** Make a full copy of pFrom into pTo.  Prior contents of pTo are
                   57023: ** freed before the copy is made.
                   57024: */
                   57025: SQLITE_PRIVATE int sqlite3VdbeMemCopy(Mem *pTo, const Mem *pFrom){
                   57026:   int rc = SQLITE_OK;
                   57027: 
                   57028:   assert( (pFrom->flags & MEM_RowSet)==0 );
                   57029:   sqlite3VdbeMemReleaseExternal(pTo);
                   57030:   memcpy(pTo, pFrom, MEMCELLSIZE);
                   57031:   pTo->flags &= ~MEM_Dyn;
                   57032: 
                   57033:   if( pTo->flags&(MEM_Str|MEM_Blob) ){
                   57034:     if( 0==(pFrom->flags&MEM_Static) ){
                   57035:       pTo->flags |= MEM_Ephem;
                   57036:       rc = sqlite3VdbeMemMakeWriteable(pTo);
                   57037:     }
                   57038:   }
                   57039: 
                   57040:   return rc;
                   57041: }
                   57042: 
                   57043: /*
                   57044: ** Transfer the contents of pFrom to pTo. Any existing value in pTo is
                   57045: ** freed. If pFrom contains ephemeral data, a copy is made.
                   57046: **
                   57047: ** pFrom contains an SQL NULL when this routine returns.
                   57048: */
                   57049: SQLITE_PRIVATE void sqlite3VdbeMemMove(Mem *pTo, Mem *pFrom){
                   57050:   assert( pFrom->db==0 || sqlite3_mutex_held(pFrom->db->mutex) );
                   57051:   assert( pTo->db==0 || sqlite3_mutex_held(pTo->db->mutex) );
                   57052:   assert( pFrom->db==0 || pTo->db==0 || pFrom->db==pTo->db );
                   57053: 
                   57054:   sqlite3VdbeMemRelease(pTo);
                   57055:   memcpy(pTo, pFrom, sizeof(Mem));
                   57056:   pFrom->flags = MEM_Null;
                   57057:   pFrom->xDel = 0;
                   57058:   pFrom->zMalloc = 0;
                   57059: }
                   57060: 
                   57061: /*
                   57062: ** Change the value of a Mem to be a string or a BLOB.
                   57063: **
                   57064: ** The memory management strategy depends on the value of the xDel
                   57065: ** parameter. If the value passed is SQLITE_TRANSIENT, then the 
                   57066: ** string is copied into a (possibly existing) buffer managed by the 
                   57067: ** Mem structure. Otherwise, any existing buffer is freed and the
                   57068: ** pointer copied.
                   57069: **
                   57070: ** If the string is too large (if it exceeds the SQLITE_LIMIT_LENGTH
                   57071: ** size limit) then no memory allocation occurs.  If the string can be
                   57072: ** stored without allocating memory, then it is.  If a memory allocation
                   57073: ** is required to store the string, then value of pMem is unchanged.  In
                   57074: ** either case, SQLITE_TOOBIG is returned.
                   57075: */
                   57076: SQLITE_PRIVATE int sqlite3VdbeMemSetStr(
                   57077:   Mem *pMem,          /* Memory cell to set to string value */
                   57078:   const char *z,      /* String pointer */
                   57079:   int n,              /* Bytes in string, or negative */
                   57080:   u8 enc,             /* Encoding of z.  0 for BLOBs */
                   57081:   void (*xDel)(void*) /* Destructor function */
                   57082: ){
                   57083:   int nByte = n;      /* New value for pMem->n */
                   57084:   int iLimit;         /* Maximum allowed string or blob size */
                   57085:   u16 flags = 0;      /* New value for pMem->flags */
                   57086: 
                   57087:   assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
                   57088:   assert( (pMem->flags & MEM_RowSet)==0 );
                   57089: 
                   57090:   /* If z is a NULL pointer, set pMem to contain an SQL NULL. */
                   57091:   if( !z ){
                   57092:     sqlite3VdbeMemSetNull(pMem);
                   57093:     return SQLITE_OK;
                   57094:   }
                   57095: 
                   57096:   if( pMem->db ){
                   57097:     iLimit = pMem->db->aLimit[SQLITE_LIMIT_LENGTH];
                   57098:   }else{
                   57099:     iLimit = SQLITE_MAX_LENGTH;
                   57100:   }
                   57101:   flags = (enc==0?MEM_Blob:MEM_Str);
                   57102:   if( nByte<0 ){
                   57103:     assert( enc!=0 );
                   57104:     if( enc==SQLITE_UTF8 ){
                   57105:       for(nByte=0; nByte<=iLimit && z[nByte]; nByte++){}
                   57106:     }else{
                   57107:       for(nByte=0; nByte<=iLimit && (z[nByte] | z[nByte+1]); nByte+=2){}
                   57108:     }
                   57109:     flags |= MEM_Term;
                   57110:   }
                   57111: 
                   57112:   /* The following block sets the new values of Mem.z and Mem.xDel. It
                   57113:   ** also sets a flag in local variable "flags" to indicate the memory
                   57114:   ** management (one of MEM_Dyn or MEM_Static).
                   57115:   */
                   57116:   if( xDel==SQLITE_TRANSIENT ){
                   57117:     int nAlloc = nByte;
                   57118:     if( flags&MEM_Term ){
                   57119:       nAlloc += (enc==SQLITE_UTF8?1:2);
                   57120:     }
                   57121:     if( nByte>iLimit ){
                   57122:       return SQLITE_TOOBIG;
                   57123:     }
                   57124:     if( sqlite3VdbeMemGrow(pMem, nAlloc, 0) ){
                   57125:       return SQLITE_NOMEM;
                   57126:     }
                   57127:     memcpy(pMem->z, z, nAlloc);
                   57128:   }else if( xDel==SQLITE_DYNAMIC ){
                   57129:     sqlite3VdbeMemRelease(pMem);
                   57130:     pMem->zMalloc = pMem->z = (char *)z;
                   57131:     pMem->xDel = 0;
                   57132:   }else{
                   57133:     sqlite3VdbeMemRelease(pMem);
                   57134:     pMem->z = (char *)z;
                   57135:     pMem->xDel = xDel;
                   57136:     flags |= ((xDel==SQLITE_STATIC)?MEM_Static:MEM_Dyn);
                   57137:   }
                   57138: 
                   57139:   pMem->n = nByte;
                   57140:   pMem->flags = flags;
                   57141:   pMem->enc = (enc==0 ? SQLITE_UTF8 : enc);
                   57142:   pMem->type = (enc==0 ? SQLITE_BLOB : SQLITE_TEXT);
                   57143: 
                   57144: #ifndef SQLITE_OMIT_UTF16
                   57145:   if( pMem->enc!=SQLITE_UTF8 && sqlite3VdbeMemHandleBom(pMem) ){
                   57146:     return SQLITE_NOMEM;
                   57147:   }
                   57148: #endif
                   57149: 
                   57150:   if( nByte>iLimit ){
                   57151:     return SQLITE_TOOBIG;
                   57152:   }
                   57153: 
                   57154:   return SQLITE_OK;
                   57155: }
                   57156: 
                   57157: /*
                   57158: ** Compare the values contained by the two memory cells, returning
                   57159: ** negative, zero or positive if pMem1 is less than, equal to, or greater
                   57160: ** than pMem2. Sorting order is NULL's first, followed by numbers (integers
                   57161: ** and reals) sorted numerically, followed by text ordered by the collating
                   57162: ** sequence pColl and finally blob's ordered by memcmp().
                   57163: **
                   57164: ** Two NULL values are considered equal by this function.
                   57165: */
                   57166: SQLITE_PRIVATE int sqlite3MemCompare(const Mem *pMem1, const Mem *pMem2, const CollSeq *pColl){
                   57167:   int rc;
                   57168:   int f1, f2;
                   57169:   int combined_flags;
                   57170: 
                   57171:   f1 = pMem1->flags;
                   57172:   f2 = pMem2->flags;
                   57173:   combined_flags = f1|f2;
                   57174:   assert( (combined_flags & MEM_RowSet)==0 );
                   57175:  
                   57176:   /* If one value is NULL, it is less than the other. If both values
                   57177:   ** are NULL, return 0.
                   57178:   */
                   57179:   if( combined_flags&MEM_Null ){
                   57180:     return (f2&MEM_Null) - (f1&MEM_Null);
                   57181:   }
                   57182: 
                   57183:   /* If one value is a number and the other is not, the number is less.
                   57184:   ** If both are numbers, compare as reals if one is a real, or as integers
                   57185:   ** if both values are integers.
                   57186:   */
                   57187:   if( combined_flags&(MEM_Int|MEM_Real) ){
                   57188:     if( !(f1&(MEM_Int|MEM_Real)) ){
                   57189:       return 1;
                   57190:     }
                   57191:     if( !(f2&(MEM_Int|MEM_Real)) ){
                   57192:       return -1;
                   57193:     }
                   57194:     if( (f1 & f2 & MEM_Int)==0 ){
                   57195:       double r1, r2;
                   57196:       if( (f1&MEM_Real)==0 ){
                   57197:         r1 = (double)pMem1->u.i;
                   57198:       }else{
                   57199:         r1 = pMem1->r;
                   57200:       }
                   57201:       if( (f2&MEM_Real)==0 ){
                   57202:         r2 = (double)pMem2->u.i;
                   57203:       }else{
                   57204:         r2 = pMem2->r;
                   57205:       }
                   57206:       if( r1<r2 ) return -1;
                   57207:       if( r1>r2 ) return 1;
                   57208:       return 0;
                   57209:     }else{
                   57210:       assert( f1&MEM_Int );
                   57211:       assert( f2&MEM_Int );
                   57212:       if( pMem1->u.i < pMem2->u.i ) return -1;
                   57213:       if( pMem1->u.i > pMem2->u.i ) return 1;
                   57214:       return 0;
                   57215:     }
                   57216:   }
                   57217: 
                   57218:   /* If one value is a string and the other is a blob, the string is less.
                   57219:   ** If both are strings, compare using the collating functions.
                   57220:   */
                   57221:   if( combined_flags&MEM_Str ){
                   57222:     if( (f1 & MEM_Str)==0 ){
                   57223:       return 1;
                   57224:     }
                   57225:     if( (f2 & MEM_Str)==0 ){
                   57226:       return -1;
                   57227:     }
                   57228: 
                   57229:     assert( pMem1->enc==pMem2->enc );
                   57230:     assert( pMem1->enc==SQLITE_UTF8 || 
                   57231:             pMem1->enc==SQLITE_UTF16LE || pMem1->enc==SQLITE_UTF16BE );
                   57232: 
                   57233:     /* The collation sequence must be defined at this point, even if
                   57234:     ** the user deletes the collation sequence after the vdbe program is
                   57235:     ** compiled (this was not always the case).
                   57236:     */
                   57237:     assert( !pColl || pColl->xCmp );
                   57238: 
                   57239:     if( pColl ){
                   57240:       if( pMem1->enc==pColl->enc ){
                   57241:         /* The strings are already in the correct encoding.  Call the
                   57242:         ** comparison function directly */
                   57243:         return pColl->xCmp(pColl->pUser,pMem1->n,pMem1->z,pMem2->n,pMem2->z);
                   57244:       }else{
                   57245:         const void *v1, *v2;
                   57246:         int n1, n2;
                   57247:         Mem c1;
                   57248:         Mem c2;
                   57249:         memset(&c1, 0, sizeof(c1));
                   57250:         memset(&c2, 0, sizeof(c2));
                   57251:         sqlite3VdbeMemShallowCopy(&c1, pMem1, MEM_Ephem);
                   57252:         sqlite3VdbeMemShallowCopy(&c2, pMem2, MEM_Ephem);
                   57253:         v1 = sqlite3ValueText((sqlite3_value*)&c1, pColl->enc);
                   57254:         n1 = v1==0 ? 0 : c1.n;
                   57255:         v2 = sqlite3ValueText((sqlite3_value*)&c2, pColl->enc);
                   57256:         n2 = v2==0 ? 0 : c2.n;
                   57257:         rc = pColl->xCmp(pColl->pUser, n1, v1, n2, v2);
                   57258:         sqlite3VdbeMemRelease(&c1);
                   57259:         sqlite3VdbeMemRelease(&c2);
                   57260:         return rc;
                   57261:       }
                   57262:     }
                   57263:     /* If a NULL pointer was passed as the collate function, fall through
                   57264:     ** to the blob case and use memcmp().  */
                   57265:   }
                   57266:  
                   57267:   /* Both values must be blobs.  Compare using memcmp().  */
                   57268:   rc = memcmp(pMem1->z, pMem2->z, (pMem1->n>pMem2->n)?pMem2->n:pMem1->n);
                   57269:   if( rc==0 ){
                   57270:     rc = pMem1->n - pMem2->n;
                   57271:   }
                   57272:   return rc;
                   57273: }
                   57274: 
                   57275: /*
                   57276: ** Move data out of a btree key or data field and into a Mem structure.
                   57277: ** The data or key is taken from the entry that pCur is currently pointing
                   57278: ** to.  offset and amt determine what portion of the data or key to retrieve.
                   57279: ** key is true to get the key or false to get data.  The result is written
                   57280: ** into the pMem element.
                   57281: **
                   57282: ** The pMem structure is assumed to be uninitialized.  Any prior content
                   57283: ** is overwritten without being freed.
                   57284: **
                   57285: ** If this routine fails for any reason (malloc returns NULL or unable
                   57286: ** to read from the disk) then the pMem is left in an inconsistent state.
                   57287: */
                   57288: SQLITE_PRIVATE int sqlite3VdbeMemFromBtree(
                   57289:   BtCursor *pCur,   /* Cursor pointing at record to retrieve. */
                   57290:   int offset,       /* Offset from the start of data to return bytes from. */
                   57291:   int amt,          /* Number of bytes to return. */
                   57292:   int key,          /* If true, retrieve from the btree key, not data. */
                   57293:   Mem *pMem         /* OUT: Return data in this Mem structure. */
                   57294: ){
                   57295:   char *zData;        /* Data from the btree layer */
                   57296:   int available = 0;  /* Number of bytes available on the local btree page */
                   57297:   int rc = SQLITE_OK; /* Return code */
                   57298: 
                   57299:   assert( sqlite3BtreeCursorIsValid(pCur) );
                   57300: 
                   57301:   /* Note: the calls to BtreeKeyFetch() and DataFetch() below assert() 
                   57302:   ** that both the BtShared and database handle mutexes are held. */
                   57303:   assert( (pMem->flags & MEM_RowSet)==0 );
                   57304:   if( key ){
                   57305:     zData = (char *)sqlite3BtreeKeyFetch(pCur, &available);
                   57306:   }else{
                   57307:     zData = (char *)sqlite3BtreeDataFetch(pCur, &available);
                   57308:   }
                   57309:   assert( zData!=0 );
                   57310: 
                   57311:   if( offset+amt<=available && (pMem->flags&MEM_Dyn)==0 ){
                   57312:     sqlite3VdbeMemRelease(pMem);
                   57313:     pMem->z = &zData[offset];
                   57314:     pMem->flags = MEM_Blob|MEM_Ephem;
                   57315:   }else if( SQLITE_OK==(rc = sqlite3VdbeMemGrow(pMem, amt+2, 0)) ){
                   57316:     pMem->flags = MEM_Blob|MEM_Dyn|MEM_Term;
                   57317:     pMem->enc = 0;
                   57318:     pMem->type = SQLITE_BLOB;
                   57319:     if( key ){
                   57320:       rc = sqlite3BtreeKey(pCur, offset, amt, pMem->z);
                   57321:     }else{
                   57322:       rc = sqlite3BtreeData(pCur, offset, amt, pMem->z);
                   57323:     }
                   57324:     pMem->z[amt] = 0;
                   57325:     pMem->z[amt+1] = 0;
                   57326:     if( rc!=SQLITE_OK ){
                   57327:       sqlite3VdbeMemRelease(pMem);
                   57328:     }
                   57329:   }
                   57330:   pMem->n = amt;
                   57331: 
                   57332:   return rc;
                   57333: }
                   57334: 
                   57335: /* This function is only available internally, it is not part of the
                   57336: ** external API. It works in a similar way to sqlite3_value_text(),
                   57337: ** except the data returned is in the encoding specified by the second
                   57338: ** parameter, which must be one of SQLITE_UTF16BE, SQLITE_UTF16LE or
                   57339: ** SQLITE_UTF8.
                   57340: **
                   57341: ** (2006-02-16:)  The enc value can be or-ed with SQLITE_UTF16_ALIGNED.
                   57342: ** If that is the case, then the result must be aligned on an even byte
                   57343: ** boundary.
                   57344: */
                   57345: SQLITE_PRIVATE const void *sqlite3ValueText(sqlite3_value* pVal, u8 enc){
                   57346:   if( !pVal ) return 0;
                   57347: 
                   57348:   assert( pVal->db==0 || sqlite3_mutex_held(pVal->db->mutex) );
                   57349:   assert( (enc&3)==(enc&~SQLITE_UTF16_ALIGNED) );
                   57350:   assert( (pVal->flags & MEM_RowSet)==0 );
                   57351: 
                   57352:   if( pVal->flags&MEM_Null ){
                   57353:     return 0;
                   57354:   }
                   57355:   assert( (MEM_Blob>>3) == MEM_Str );
                   57356:   pVal->flags |= (pVal->flags & MEM_Blob)>>3;
                   57357:   expandBlob(pVal);
                   57358:   if( pVal->flags&MEM_Str ){
                   57359:     sqlite3VdbeChangeEncoding(pVal, enc & ~SQLITE_UTF16_ALIGNED);
                   57360:     if( (enc & SQLITE_UTF16_ALIGNED)!=0 && 1==(1&SQLITE_PTR_TO_INT(pVal->z)) ){
                   57361:       assert( (pVal->flags & (MEM_Ephem|MEM_Static))!=0 );
                   57362:       if( sqlite3VdbeMemMakeWriteable(pVal)!=SQLITE_OK ){
                   57363:         return 0;
                   57364:       }
                   57365:     }
                   57366:     sqlite3VdbeMemNulTerminate(pVal); /* IMP: R-59893-45467 */
                   57367:   }else{
                   57368:     assert( (pVal->flags&MEM_Blob)==0 );
                   57369:     sqlite3VdbeMemStringify(pVal, enc);
                   57370:     assert( 0==(1&SQLITE_PTR_TO_INT(pVal->z)) );
                   57371:   }
                   57372:   assert(pVal->enc==(enc & ~SQLITE_UTF16_ALIGNED) || pVal->db==0
                   57373:               || pVal->db->mallocFailed );
                   57374:   if( pVal->enc==(enc & ~SQLITE_UTF16_ALIGNED) ){
                   57375:     return pVal->z;
                   57376:   }else{
                   57377:     return 0;
                   57378:   }
                   57379: }
                   57380: 
                   57381: /*
                   57382: ** Create a new sqlite3_value object.
                   57383: */
                   57384: SQLITE_PRIVATE sqlite3_value *sqlite3ValueNew(sqlite3 *db){
                   57385:   Mem *p = sqlite3DbMallocZero(db, sizeof(*p));
                   57386:   if( p ){
                   57387:     p->flags = MEM_Null;
                   57388:     p->type = SQLITE_NULL;
                   57389:     p->db = db;
                   57390:   }
                   57391:   return p;
                   57392: }
                   57393: 
                   57394: /*
                   57395: ** Create a new sqlite3_value object, containing the value of pExpr.
                   57396: **
                   57397: ** This only works for very simple expressions that consist of one constant
                   57398: ** token (i.e. "5", "5.1", "'a string'"). If the expression can
                   57399: ** be converted directly into a value, then the value is allocated and
                   57400: ** a pointer written to *ppVal. The caller is responsible for deallocating
                   57401: ** the value by passing it to sqlite3ValueFree() later on. If the expression
                   57402: ** cannot be converted to a value, then *ppVal is set to NULL.
                   57403: */
                   57404: SQLITE_PRIVATE int sqlite3ValueFromExpr(
                   57405:   sqlite3 *db,              /* The database connection */
                   57406:   Expr *pExpr,              /* The expression to evaluate */
                   57407:   u8 enc,                   /* Encoding to use */
                   57408:   u8 affinity,              /* Affinity to use */
                   57409:   sqlite3_value **ppVal     /* Write the new value here */
                   57410: ){
                   57411:   int op;
                   57412:   char *zVal = 0;
                   57413:   sqlite3_value *pVal = 0;
                   57414:   int negInt = 1;
                   57415:   const char *zNeg = "";
                   57416: 
                   57417:   if( !pExpr ){
                   57418:     *ppVal = 0;
                   57419:     return SQLITE_OK;
                   57420:   }
                   57421:   op = pExpr->op;
                   57422: 
                   57423:   /* op can only be TK_REGISTER if we have compiled with SQLITE_ENABLE_STAT2.
                   57424:   ** The ifdef here is to enable us to achieve 100% branch test coverage even
                   57425:   ** when SQLITE_ENABLE_STAT2 is omitted.
                   57426:   */
                   57427: #ifdef SQLITE_ENABLE_STAT2
                   57428:   if( op==TK_REGISTER ) op = pExpr->op2;
                   57429: #else
                   57430:   if( NEVER(op==TK_REGISTER) ) op = pExpr->op2;
                   57431: #endif
                   57432: 
                   57433:   /* Handle negative integers in a single step.  This is needed in the
                   57434:   ** case when the value is -9223372036854775808.
                   57435:   */
                   57436:   if( op==TK_UMINUS
                   57437:    && (pExpr->pLeft->op==TK_INTEGER || pExpr->pLeft->op==TK_FLOAT) ){
                   57438:     pExpr = pExpr->pLeft;
                   57439:     op = pExpr->op;
                   57440:     negInt = -1;
                   57441:     zNeg = "-";
                   57442:   }
                   57443: 
                   57444:   if( op==TK_STRING || op==TK_FLOAT || op==TK_INTEGER ){
                   57445:     pVal = sqlite3ValueNew(db);
                   57446:     if( pVal==0 ) goto no_mem;
                   57447:     if( ExprHasProperty(pExpr, EP_IntValue) ){
                   57448:       sqlite3VdbeMemSetInt64(pVal, (i64)pExpr->u.iValue*negInt);
                   57449:     }else{
                   57450:       zVal = sqlite3MPrintf(db, "%s%s", zNeg, pExpr->u.zToken);
                   57451:       if( zVal==0 ) goto no_mem;
                   57452:       sqlite3ValueSetStr(pVal, -1, zVal, SQLITE_UTF8, SQLITE_DYNAMIC);
                   57453:       if( op==TK_FLOAT ) pVal->type = SQLITE_FLOAT;
                   57454:     }
                   57455:     if( (op==TK_INTEGER || op==TK_FLOAT ) && affinity==SQLITE_AFF_NONE ){
                   57456:       sqlite3ValueApplyAffinity(pVal, SQLITE_AFF_NUMERIC, SQLITE_UTF8);
                   57457:     }else{
                   57458:       sqlite3ValueApplyAffinity(pVal, affinity, SQLITE_UTF8);
                   57459:     }
                   57460:     if( pVal->flags & (MEM_Int|MEM_Real) ) pVal->flags &= ~MEM_Str;
                   57461:     if( enc!=SQLITE_UTF8 ){
                   57462:       sqlite3VdbeChangeEncoding(pVal, enc);
                   57463:     }
                   57464:   }else if( op==TK_UMINUS ) {
                   57465:     /* This branch happens for multiple negative signs.  Ex: -(-5) */
                   57466:     if( SQLITE_OK==sqlite3ValueFromExpr(db,pExpr->pLeft,enc,affinity,&pVal) ){
                   57467:       sqlite3VdbeMemNumerify(pVal);
                   57468:       if( pVal->u.i==SMALLEST_INT64 ){
                   57469:         pVal->flags &= MEM_Int;
                   57470:         pVal->flags |= MEM_Real;
                   57471:         pVal->r = (double)LARGEST_INT64;
                   57472:       }else{
                   57473:         pVal->u.i = -pVal->u.i;
                   57474:       }
                   57475:       pVal->r = -pVal->r;
                   57476:       sqlite3ValueApplyAffinity(pVal, affinity, enc);
                   57477:     }
                   57478:   }else if( op==TK_NULL ){
                   57479:     pVal = sqlite3ValueNew(db);
                   57480:     if( pVal==0 ) goto no_mem;
                   57481:   }
                   57482: #ifndef SQLITE_OMIT_BLOB_LITERAL
                   57483:   else if( op==TK_BLOB ){
                   57484:     int nVal;
                   57485:     assert( pExpr->u.zToken[0]=='x' || pExpr->u.zToken[0]=='X' );
                   57486:     assert( pExpr->u.zToken[1]=='\'' );
                   57487:     pVal = sqlite3ValueNew(db);
                   57488:     if( !pVal ) goto no_mem;
                   57489:     zVal = &pExpr->u.zToken[2];
                   57490:     nVal = sqlite3Strlen30(zVal)-1;
                   57491:     assert( zVal[nVal]=='\'' );
                   57492:     sqlite3VdbeMemSetStr(pVal, sqlite3HexToBlob(db, zVal, nVal), nVal/2,
                   57493:                          0, SQLITE_DYNAMIC);
                   57494:   }
                   57495: #endif
                   57496: 
                   57497:   if( pVal ){
                   57498:     sqlite3VdbeMemStoreType(pVal);
                   57499:   }
                   57500:   *ppVal = pVal;
                   57501:   return SQLITE_OK;
                   57502: 
                   57503: no_mem:
                   57504:   db->mallocFailed = 1;
                   57505:   sqlite3DbFree(db, zVal);
                   57506:   sqlite3ValueFree(pVal);
                   57507:   *ppVal = 0;
                   57508:   return SQLITE_NOMEM;
                   57509: }
                   57510: 
                   57511: /*
                   57512: ** Change the string value of an sqlite3_value object
                   57513: */
                   57514: SQLITE_PRIVATE void sqlite3ValueSetStr(
                   57515:   sqlite3_value *v,     /* Value to be set */
                   57516:   int n,                /* Length of string z */
                   57517:   const void *z,        /* Text of the new string */
                   57518:   u8 enc,               /* Encoding to use */
                   57519:   void (*xDel)(void*)   /* Destructor for the string */
                   57520: ){
                   57521:   if( v ) sqlite3VdbeMemSetStr((Mem *)v, z, n, enc, xDel);
                   57522: }
                   57523: 
                   57524: /*
                   57525: ** Free an sqlite3_value object
                   57526: */
                   57527: SQLITE_PRIVATE void sqlite3ValueFree(sqlite3_value *v){
                   57528:   if( !v ) return;
                   57529:   sqlite3VdbeMemRelease((Mem *)v);
                   57530:   sqlite3DbFree(((Mem*)v)->db, v);
                   57531: }
                   57532: 
                   57533: /*
                   57534: ** Return the number of bytes in the sqlite3_value object assuming
                   57535: ** that it uses the encoding "enc"
                   57536: */
                   57537: SQLITE_PRIVATE int sqlite3ValueBytes(sqlite3_value *pVal, u8 enc){
                   57538:   Mem *p = (Mem*)pVal;
                   57539:   if( (p->flags & MEM_Blob)!=0 || sqlite3ValueText(pVal, enc) ){
                   57540:     if( p->flags & MEM_Zero ){
                   57541:       return p->n + p->u.nZero;
                   57542:     }else{
                   57543:       return p->n;
                   57544:     }
                   57545:   }
                   57546:   return 0;
                   57547: }
                   57548: 
                   57549: /************** End of vdbemem.c *********************************************/
                   57550: /************** Begin file vdbeaux.c *****************************************/
                   57551: /*
                   57552: ** 2003 September 6
                   57553: **
                   57554: ** The author disclaims copyright to this source code.  In place of
                   57555: ** a legal notice, here is a blessing:
                   57556: **
                   57557: **    May you do good and not evil.
                   57558: **    May you find forgiveness for yourself and forgive others.
                   57559: **    May you share freely, never taking more than you give.
                   57560: **
                   57561: *************************************************************************
                   57562: ** This file contains code used for creating, destroying, and populating
                   57563: ** a VDBE (or an "sqlite3_stmt" as it is known to the outside world.)  Prior
                   57564: ** to version 2.8.7, all this code was combined into the vdbe.c source file.
                   57565: ** But that file was getting too big so this subroutines were split out.
                   57566: */
                   57567: 
                   57568: 
                   57569: 
                   57570: /*
                   57571: ** When debugging the code generator in a symbolic debugger, one can
                   57572: ** set the sqlite3VdbeAddopTrace to 1 and all opcodes will be printed
                   57573: ** as they are added to the instruction stream.
                   57574: */
                   57575: #ifdef SQLITE_DEBUG
                   57576: SQLITE_PRIVATE int sqlite3VdbeAddopTrace = 0;
                   57577: #endif
                   57578: 
                   57579: 
                   57580: /*
                   57581: ** Create a new virtual database engine.
                   57582: */
                   57583: SQLITE_PRIVATE Vdbe *sqlite3VdbeCreate(sqlite3 *db){
                   57584:   Vdbe *p;
                   57585:   p = sqlite3DbMallocZero(db, sizeof(Vdbe) );
                   57586:   if( p==0 ) return 0;
                   57587:   p->db = db;
                   57588:   if( db->pVdbe ){
                   57589:     db->pVdbe->pPrev = p;
                   57590:   }
                   57591:   p->pNext = db->pVdbe;
                   57592:   p->pPrev = 0;
                   57593:   db->pVdbe = p;
                   57594:   p->magic = VDBE_MAGIC_INIT;
                   57595:   return p;
                   57596: }
                   57597: 
                   57598: /*
                   57599: ** Remember the SQL string for a prepared statement.
                   57600: */
                   57601: SQLITE_PRIVATE void sqlite3VdbeSetSql(Vdbe *p, const char *z, int n, int isPrepareV2){
                   57602:   assert( isPrepareV2==1 || isPrepareV2==0 );
                   57603:   if( p==0 ) return;
                   57604: #ifdef SQLITE_OMIT_TRACE
                   57605:   if( !isPrepareV2 ) return;
                   57606: #endif
                   57607:   assert( p->zSql==0 );
                   57608:   p->zSql = sqlite3DbStrNDup(p->db, z, n);
                   57609:   p->isPrepareV2 = (u8)isPrepareV2;
                   57610: }
                   57611: 
                   57612: /*
                   57613: ** Return the SQL associated with a prepared statement
                   57614: */
                   57615: SQLITE_API const char *sqlite3_sql(sqlite3_stmt *pStmt){
                   57616:   Vdbe *p = (Vdbe *)pStmt;
                   57617:   return (p && p->isPrepareV2) ? p->zSql : 0;
                   57618: }
                   57619: 
                   57620: /*
                   57621: ** Swap all content between two VDBE structures.
                   57622: */
                   57623: SQLITE_PRIVATE void sqlite3VdbeSwap(Vdbe *pA, Vdbe *pB){
                   57624:   Vdbe tmp, *pTmp;
                   57625:   char *zTmp;
                   57626:   tmp = *pA;
                   57627:   *pA = *pB;
                   57628:   *pB = tmp;
                   57629:   pTmp = pA->pNext;
                   57630:   pA->pNext = pB->pNext;
                   57631:   pB->pNext = pTmp;
                   57632:   pTmp = pA->pPrev;
                   57633:   pA->pPrev = pB->pPrev;
                   57634:   pB->pPrev = pTmp;
                   57635:   zTmp = pA->zSql;
                   57636:   pA->zSql = pB->zSql;
                   57637:   pB->zSql = zTmp;
                   57638:   pB->isPrepareV2 = pA->isPrepareV2;
                   57639: }
                   57640: 
                   57641: #ifdef SQLITE_DEBUG
                   57642: /*
                   57643: ** Turn tracing on or off
                   57644: */
                   57645: SQLITE_PRIVATE void sqlite3VdbeTrace(Vdbe *p, FILE *trace){
                   57646:   p->trace = trace;
                   57647: }
                   57648: #endif
                   57649: 
                   57650: /*
                   57651: ** Resize the Vdbe.aOp array so that it is at least one op larger than 
                   57652: ** it was.
                   57653: **
                   57654: ** If an out-of-memory error occurs while resizing the array, return
                   57655: ** SQLITE_NOMEM. In this case Vdbe.aOp and Vdbe.nOpAlloc remain 
                   57656: ** unchanged (this is so that any opcodes already allocated can be 
                   57657: ** correctly deallocated along with the rest of the Vdbe).
                   57658: */
                   57659: static int growOpArray(Vdbe *p){
                   57660:   VdbeOp *pNew;
                   57661:   int nNew = (p->nOpAlloc ? p->nOpAlloc*2 : (int)(1024/sizeof(Op)));
                   57662:   pNew = sqlite3DbRealloc(p->db, p->aOp, nNew*sizeof(Op));
                   57663:   if( pNew ){
                   57664:     p->nOpAlloc = sqlite3DbMallocSize(p->db, pNew)/sizeof(Op);
                   57665:     p->aOp = pNew;
                   57666:   }
                   57667:   return (pNew ? SQLITE_OK : SQLITE_NOMEM);
                   57668: }
                   57669: 
                   57670: /*
                   57671: ** Add a new instruction to the list of instructions current in the
                   57672: ** VDBE.  Return the address of the new instruction.
                   57673: **
                   57674: ** Parameters:
                   57675: **
                   57676: **    p               Pointer to the VDBE
                   57677: **
                   57678: **    op              The opcode for this instruction
                   57679: **
                   57680: **    p1, p2, p3      Operands
                   57681: **
                   57682: ** Use the sqlite3VdbeResolveLabel() function to fix an address and
                   57683: ** the sqlite3VdbeChangeP4() function to change the value of the P4
                   57684: ** operand.
                   57685: */
                   57686: SQLITE_PRIVATE int sqlite3VdbeAddOp3(Vdbe *p, int op, int p1, int p2, int p3){
                   57687:   int i;
                   57688:   VdbeOp *pOp;
                   57689: 
                   57690:   i = p->nOp;
                   57691:   assert( p->magic==VDBE_MAGIC_INIT );
                   57692:   assert( op>0 && op<0xff );
                   57693:   if( p->nOpAlloc<=i ){
                   57694:     if( growOpArray(p) ){
                   57695:       return 1;
                   57696:     }
                   57697:   }
                   57698:   p->nOp++;
                   57699:   pOp = &p->aOp[i];
                   57700:   pOp->opcode = (u8)op;
                   57701:   pOp->p5 = 0;
                   57702:   pOp->p1 = p1;
                   57703:   pOp->p2 = p2;
                   57704:   pOp->p3 = p3;
                   57705:   pOp->p4.p = 0;
                   57706:   pOp->p4type = P4_NOTUSED;
                   57707: #ifdef SQLITE_DEBUG
                   57708:   pOp->zComment = 0;
                   57709:   if( sqlite3VdbeAddopTrace ) sqlite3VdbePrintOp(0, i, &p->aOp[i]);
                   57710: #endif
                   57711: #ifdef VDBE_PROFILE
                   57712:   pOp->cycles = 0;
                   57713:   pOp->cnt = 0;
                   57714: #endif
                   57715:   return i;
                   57716: }
                   57717: SQLITE_PRIVATE int sqlite3VdbeAddOp0(Vdbe *p, int op){
                   57718:   return sqlite3VdbeAddOp3(p, op, 0, 0, 0);
                   57719: }
                   57720: SQLITE_PRIVATE int sqlite3VdbeAddOp1(Vdbe *p, int op, int p1){
                   57721:   return sqlite3VdbeAddOp3(p, op, p1, 0, 0);
                   57722: }
                   57723: SQLITE_PRIVATE int sqlite3VdbeAddOp2(Vdbe *p, int op, int p1, int p2){
                   57724:   return sqlite3VdbeAddOp3(p, op, p1, p2, 0);
                   57725: }
                   57726: 
                   57727: 
                   57728: /*
                   57729: ** Add an opcode that includes the p4 value as a pointer.
                   57730: */
                   57731: SQLITE_PRIVATE int sqlite3VdbeAddOp4(
                   57732:   Vdbe *p,            /* Add the opcode to this VM */
                   57733:   int op,             /* The new opcode */
                   57734:   int p1,             /* The P1 operand */
                   57735:   int p2,             /* The P2 operand */
                   57736:   int p3,             /* The P3 operand */
                   57737:   const char *zP4,    /* The P4 operand */
                   57738:   int p4type          /* P4 operand type */
                   57739: ){
                   57740:   int addr = sqlite3VdbeAddOp3(p, op, p1, p2, p3);
                   57741:   sqlite3VdbeChangeP4(p, addr, zP4, p4type);
                   57742:   return addr;
                   57743: }
                   57744: 
                   57745: /*
                   57746: ** Add an OP_ParseSchema opcode.  This routine is broken out from
                   57747: ** sqlite3VdbeAddOp4() since it needs to also local all btrees.
                   57748: **
                   57749: ** The zWhere string must have been obtained from sqlite3_malloc().
                   57750: ** This routine will take ownership of the allocated memory.
                   57751: */
                   57752: SQLITE_PRIVATE void sqlite3VdbeAddParseSchemaOp(Vdbe *p, int iDb, char *zWhere){
                   57753:   int j;
                   57754:   int addr = sqlite3VdbeAddOp3(p, OP_ParseSchema, iDb, 0, 0);
                   57755:   sqlite3VdbeChangeP4(p, addr, zWhere, P4_DYNAMIC);
                   57756:   for(j=0; j<p->db->nDb; j++) sqlite3VdbeUsesBtree(p, j);
                   57757: }
                   57758: 
                   57759: /*
                   57760: ** Add an opcode that includes the p4 value as an integer.
                   57761: */
                   57762: SQLITE_PRIVATE int sqlite3VdbeAddOp4Int(
                   57763:   Vdbe *p,            /* Add the opcode to this VM */
                   57764:   int op,             /* The new opcode */
                   57765:   int p1,             /* The P1 operand */
                   57766:   int p2,             /* The P2 operand */
                   57767:   int p3,             /* The P3 operand */
                   57768:   int p4              /* The P4 operand as an integer */
                   57769: ){
                   57770:   int addr = sqlite3VdbeAddOp3(p, op, p1, p2, p3);
                   57771:   sqlite3VdbeChangeP4(p, addr, SQLITE_INT_TO_PTR(p4), P4_INT32);
                   57772:   return addr;
                   57773: }
                   57774: 
                   57775: /*
                   57776: ** Create a new symbolic label for an instruction that has yet to be
                   57777: ** coded.  The symbolic label is really just a negative number.  The
                   57778: ** label can be used as the P2 value of an operation.  Later, when
                   57779: ** the label is resolved to a specific address, the VDBE will scan
                   57780: ** through its operation list and change all values of P2 which match
                   57781: ** the label into the resolved address.
                   57782: **
                   57783: ** The VDBE knows that a P2 value is a label because labels are
                   57784: ** always negative and P2 values are suppose to be non-negative.
                   57785: ** Hence, a negative P2 value is a label that has yet to be resolved.
                   57786: **
                   57787: ** Zero is returned if a malloc() fails.
                   57788: */
                   57789: SQLITE_PRIVATE int sqlite3VdbeMakeLabel(Vdbe *p){
                   57790:   int i;
                   57791:   i = p->nLabel++;
                   57792:   assert( p->magic==VDBE_MAGIC_INIT );
                   57793:   if( i>=p->nLabelAlloc ){
                   57794:     int n = p->nLabelAlloc*2 + 5;
                   57795:     p->aLabel = sqlite3DbReallocOrFree(p->db, p->aLabel,
                   57796:                                        n*sizeof(p->aLabel[0]));
                   57797:     p->nLabelAlloc = sqlite3DbMallocSize(p->db, p->aLabel)/sizeof(p->aLabel[0]);
                   57798:   }
                   57799:   if( p->aLabel ){
                   57800:     p->aLabel[i] = -1;
                   57801:   }
                   57802:   return -1-i;
                   57803: }
                   57804: 
                   57805: /*
                   57806: ** Resolve label "x" to be the address of the next instruction to
                   57807: ** be inserted.  The parameter "x" must have been obtained from
                   57808: ** a prior call to sqlite3VdbeMakeLabel().
                   57809: */
                   57810: SQLITE_PRIVATE void sqlite3VdbeResolveLabel(Vdbe *p, int x){
                   57811:   int j = -1-x;
                   57812:   assert( p->magic==VDBE_MAGIC_INIT );
                   57813:   assert( j>=0 && j<p->nLabel );
                   57814:   if( p->aLabel ){
                   57815:     p->aLabel[j] = p->nOp;
                   57816:   }
                   57817: }
                   57818: 
                   57819: /*
                   57820: ** Mark the VDBE as one that can only be run one time.
                   57821: */
                   57822: SQLITE_PRIVATE void sqlite3VdbeRunOnlyOnce(Vdbe *p){
                   57823:   p->runOnlyOnce = 1;
                   57824: }
                   57825: 
                   57826: #ifdef SQLITE_DEBUG /* sqlite3AssertMayAbort() logic */
                   57827: 
                   57828: /*
                   57829: ** The following type and function are used to iterate through all opcodes
                   57830: ** in a Vdbe main program and each of the sub-programs (triggers) it may 
                   57831: ** invoke directly or indirectly. It should be used as follows:
                   57832: **
                   57833: **   Op *pOp;
                   57834: **   VdbeOpIter sIter;
                   57835: **
                   57836: **   memset(&sIter, 0, sizeof(sIter));
                   57837: **   sIter.v = v;                            // v is of type Vdbe* 
                   57838: **   while( (pOp = opIterNext(&sIter)) ){
                   57839: **     // Do something with pOp
                   57840: **   }
                   57841: **   sqlite3DbFree(v->db, sIter.apSub);
                   57842: ** 
                   57843: */
                   57844: typedef struct VdbeOpIter VdbeOpIter;
                   57845: struct VdbeOpIter {
                   57846:   Vdbe *v;                   /* Vdbe to iterate through the opcodes of */
                   57847:   SubProgram **apSub;        /* Array of subprograms */
                   57848:   int nSub;                  /* Number of entries in apSub */
                   57849:   int iAddr;                 /* Address of next instruction to return */
                   57850:   int iSub;                  /* 0 = main program, 1 = first sub-program etc. */
                   57851: };
                   57852: static Op *opIterNext(VdbeOpIter *p){
                   57853:   Vdbe *v = p->v;
                   57854:   Op *pRet = 0;
                   57855:   Op *aOp;
                   57856:   int nOp;
                   57857: 
                   57858:   if( p->iSub<=p->nSub ){
                   57859: 
                   57860:     if( p->iSub==0 ){
                   57861:       aOp = v->aOp;
                   57862:       nOp = v->nOp;
                   57863:     }else{
                   57864:       aOp = p->apSub[p->iSub-1]->aOp;
                   57865:       nOp = p->apSub[p->iSub-1]->nOp;
                   57866:     }
                   57867:     assert( p->iAddr<nOp );
                   57868: 
                   57869:     pRet = &aOp[p->iAddr];
                   57870:     p->iAddr++;
                   57871:     if( p->iAddr==nOp ){
                   57872:       p->iSub++;
                   57873:       p->iAddr = 0;
                   57874:     }
                   57875:   
                   57876:     if( pRet->p4type==P4_SUBPROGRAM ){
                   57877:       int nByte = (p->nSub+1)*sizeof(SubProgram*);
                   57878:       int j;
                   57879:       for(j=0; j<p->nSub; j++){
                   57880:         if( p->apSub[j]==pRet->p4.pProgram ) break;
                   57881:       }
                   57882:       if( j==p->nSub ){
                   57883:         p->apSub = sqlite3DbReallocOrFree(v->db, p->apSub, nByte);
                   57884:         if( !p->apSub ){
                   57885:           pRet = 0;
                   57886:         }else{
                   57887:           p->apSub[p->nSub++] = pRet->p4.pProgram;
                   57888:         }
                   57889:       }
                   57890:     }
                   57891:   }
                   57892: 
                   57893:   return pRet;
                   57894: }
                   57895: 
                   57896: /*
                   57897: ** Check if the program stored in the VM associated with pParse may
                   57898: ** throw an ABORT exception (causing the statement, but not entire transaction
                   57899: ** to be rolled back). This condition is true if the main program or any
                   57900: ** sub-programs contains any of the following:
                   57901: **
                   57902: **   *  OP_Halt with P1=SQLITE_CONSTRAINT and P2=OE_Abort.
                   57903: **   *  OP_HaltIfNull with P1=SQLITE_CONSTRAINT and P2=OE_Abort.
                   57904: **   *  OP_Destroy
                   57905: **   *  OP_VUpdate
                   57906: **   *  OP_VRename
                   57907: **   *  OP_FkCounter with P2==0 (immediate foreign key constraint)
                   57908: **
                   57909: ** Then check that the value of Parse.mayAbort is true if an
                   57910: ** ABORT may be thrown, or false otherwise. Return true if it does
                   57911: ** match, or false otherwise. This function is intended to be used as
                   57912: ** part of an assert statement in the compiler. Similar to:
                   57913: **
                   57914: **   assert( sqlite3VdbeAssertMayAbort(pParse->pVdbe, pParse->mayAbort) );
                   57915: */
                   57916: SQLITE_PRIVATE int sqlite3VdbeAssertMayAbort(Vdbe *v, int mayAbort){
                   57917:   int hasAbort = 0;
                   57918:   Op *pOp;
                   57919:   VdbeOpIter sIter;
                   57920:   memset(&sIter, 0, sizeof(sIter));
                   57921:   sIter.v = v;
                   57922: 
                   57923:   while( (pOp = opIterNext(&sIter))!=0 ){
                   57924:     int opcode = pOp->opcode;
                   57925:     if( opcode==OP_Destroy || opcode==OP_VUpdate || opcode==OP_VRename 
                   57926: #ifndef SQLITE_OMIT_FOREIGN_KEY
                   57927:      || (opcode==OP_FkCounter && pOp->p1==0 && pOp->p2==1) 
                   57928: #endif
                   57929:      || ((opcode==OP_Halt || opcode==OP_HaltIfNull) 
                   57930:       && (pOp->p1==SQLITE_CONSTRAINT && pOp->p2==OE_Abort))
                   57931:     ){
                   57932:       hasAbort = 1;
                   57933:       break;
                   57934:     }
                   57935:   }
                   57936:   sqlite3DbFree(v->db, sIter.apSub);
                   57937: 
1.1.1.3 ! misho    57938:   /* Return true if hasAbort==mayAbort. Or if a malloc failure occurred.
1.1       misho    57939:   ** If malloc failed, then the while() loop above may not have iterated
                   57940:   ** through all opcodes and hasAbort may be set incorrectly. Return
                   57941:   ** true for this case to prevent the assert() in the callers frame
                   57942:   ** from failing.  */
                   57943:   return ( v->db->mallocFailed || hasAbort==mayAbort );
                   57944: }
                   57945: #endif /* SQLITE_DEBUG - the sqlite3AssertMayAbort() function */
                   57946: 
                   57947: /*
                   57948: ** Loop through the program looking for P2 values that are negative
                   57949: ** on jump instructions.  Each such value is a label.  Resolve the
                   57950: ** label by setting the P2 value to its correct non-zero value.
                   57951: **
                   57952: ** This routine is called once after all opcodes have been inserted.
                   57953: **
                   57954: ** Variable *pMaxFuncArgs is set to the maximum value of any P2 argument 
                   57955: ** to an OP_Function, OP_AggStep or OP_VFilter opcode. This is used by 
                   57956: ** sqlite3VdbeMakeReady() to size the Vdbe.apArg[] array.
                   57957: **
                   57958: ** The Op.opflags field is set on all opcodes.
                   57959: */
                   57960: static void resolveP2Values(Vdbe *p, int *pMaxFuncArgs){
                   57961:   int i;
                   57962:   int nMaxArgs = *pMaxFuncArgs;
                   57963:   Op *pOp;
                   57964:   int *aLabel = p->aLabel;
                   57965:   p->readOnly = 1;
                   57966:   for(pOp=p->aOp, i=p->nOp-1; i>=0; i--, pOp++){
                   57967:     u8 opcode = pOp->opcode;
                   57968: 
                   57969:     pOp->opflags = sqlite3OpcodeProperty[opcode];
                   57970:     if( opcode==OP_Function || opcode==OP_AggStep ){
                   57971:       if( pOp->p5>nMaxArgs ) nMaxArgs = pOp->p5;
                   57972:     }else if( (opcode==OP_Transaction && pOp->p2!=0) || opcode==OP_Vacuum ){
                   57973:       p->readOnly = 0;
                   57974: #ifndef SQLITE_OMIT_VIRTUALTABLE
                   57975:     }else if( opcode==OP_VUpdate ){
                   57976:       if( pOp->p2>nMaxArgs ) nMaxArgs = pOp->p2;
                   57977:     }else if( opcode==OP_VFilter ){
                   57978:       int n;
                   57979:       assert( p->nOp - i >= 3 );
                   57980:       assert( pOp[-1].opcode==OP_Integer );
                   57981:       n = pOp[-1].p1;
                   57982:       if( n>nMaxArgs ) nMaxArgs = n;
                   57983: #endif
                   57984:     }
                   57985: 
                   57986:     if( (pOp->opflags & OPFLG_JUMP)!=0 && pOp->p2<0 ){
                   57987:       assert( -1-pOp->p2<p->nLabel );
                   57988:       pOp->p2 = aLabel[-1-pOp->p2];
                   57989:     }
                   57990:   }
                   57991:   sqlite3DbFree(p->db, p->aLabel);
                   57992:   p->aLabel = 0;
                   57993: 
                   57994:   *pMaxFuncArgs = nMaxArgs;
                   57995: }
                   57996: 
                   57997: /*
                   57998: ** Return the address of the next instruction to be inserted.
                   57999: */
                   58000: SQLITE_PRIVATE int sqlite3VdbeCurrentAddr(Vdbe *p){
                   58001:   assert( p->magic==VDBE_MAGIC_INIT );
                   58002:   return p->nOp;
                   58003: }
                   58004: 
                   58005: /*
                   58006: ** This function returns a pointer to the array of opcodes associated with
                   58007: ** the Vdbe passed as the first argument. It is the callers responsibility
                   58008: ** to arrange for the returned array to be eventually freed using the 
                   58009: ** vdbeFreeOpArray() function.
                   58010: **
                   58011: ** Before returning, *pnOp is set to the number of entries in the returned
                   58012: ** array. Also, *pnMaxArg is set to the larger of its current value and 
                   58013: ** the number of entries in the Vdbe.apArg[] array required to execute the 
                   58014: ** returned program.
                   58015: */
                   58016: SQLITE_PRIVATE VdbeOp *sqlite3VdbeTakeOpArray(Vdbe *p, int *pnOp, int *pnMaxArg){
                   58017:   VdbeOp *aOp = p->aOp;
                   58018:   assert( aOp && !p->db->mallocFailed );
                   58019: 
                   58020:   /* Check that sqlite3VdbeUsesBtree() was not called on this VM */
                   58021:   assert( p->btreeMask==0 );
                   58022: 
                   58023:   resolveP2Values(p, pnMaxArg);
                   58024:   *pnOp = p->nOp;
                   58025:   p->aOp = 0;
                   58026:   return aOp;
                   58027: }
                   58028: 
                   58029: /*
                   58030: ** Add a whole list of operations to the operation stack.  Return the
                   58031: ** address of the first operation added.
                   58032: */
                   58033: SQLITE_PRIVATE int sqlite3VdbeAddOpList(Vdbe *p, int nOp, VdbeOpList const *aOp){
                   58034:   int addr;
                   58035:   assert( p->magic==VDBE_MAGIC_INIT );
                   58036:   if( p->nOp + nOp > p->nOpAlloc && growOpArray(p) ){
                   58037:     return 0;
                   58038:   }
                   58039:   addr = p->nOp;
                   58040:   if( ALWAYS(nOp>0) ){
                   58041:     int i;
                   58042:     VdbeOpList const *pIn = aOp;
                   58043:     for(i=0; i<nOp; i++, pIn++){
                   58044:       int p2 = pIn->p2;
                   58045:       VdbeOp *pOut = &p->aOp[i+addr];
                   58046:       pOut->opcode = pIn->opcode;
                   58047:       pOut->p1 = pIn->p1;
                   58048:       if( p2<0 && (sqlite3OpcodeProperty[pOut->opcode] & OPFLG_JUMP)!=0 ){
                   58049:         pOut->p2 = addr + ADDR(p2);
                   58050:       }else{
                   58051:         pOut->p2 = p2;
                   58052:       }
                   58053:       pOut->p3 = pIn->p3;
                   58054:       pOut->p4type = P4_NOTUSED;
                   58055:       pOut->p4.p = 0;
                   58056:       pOut->p5 = 0;
                   58057: #ifdef SQLITE_DEBUG
                   58058:       pOut->zComment = 0;
                   58059:       if( sqlite3VdbeAddopTrace ){
                   58060:         sqlite3VdbePrintOp(0, i+addr, &p->aOp[i+addr]);
                   58061:       }
                   58062: #endif
                   58063:     }
                   58064:     p->nOp += nOp;
                   58065:   }
                   58066:   return addr;
                   58067: }
                   58068: 
                   58069: /*
                   58070: ** Change the value of the P1 operand for a specific instruction.
                   58071: ** This routine is useful when a large program is loaded from a
                   58072: ** static array using sqlite3VdbeAddOpList but we want to make a
                   58073: ** few minor changes to the program.
                   58074: */
                   58075: SQLITE_PRIVATE void sqlite3VdbeChangeP1(Vdbe *p, int addr, int val){
                   58076:   assert( p!=0 );
                   58077:   assert( addr>=0 );
                   58078:   if( p->nOp>addr ){
                   58079:     p->aOp[addr].p1 = val;
                   58080:   }
                   58081: }
                   58082: 
                   58083: /*
                   58084: ** Change the value of the P2 operand for a specific instruction.
                   58085: ** This routine is useful for setting a jump destination.
                   58086: */
                   58087: SQLITE_PRIVATE void sqlite3VdbeChangeP2(Vdbe *p, int addr, int val){
                   58088:   assert( p!=0 );
                   58089:   assert( addr>=0 );
                   58090:   if( p->nOp>addr ){
                   58091:     p->aOp[addr].p2 = val;
                   58092:   }
                   58093: }
                   58094: 
                   58095: /*
                   58096: ** Change the value of the P3 operand for a specific instruction.
                   58097: */
                   58098: SQLITE_PRIVATE void sqlite3VdbeChangeP3(Vdbe *p, int addr, int val){
                   58099:   assert( p!=0 );
                   58100:   assert( addr>=0 );
                   58101:   if( p->nOp>addr ){
                   58102:     p->aOp[addr].p3 = val;
                   58103:   }
                   58104: }
                   58105: 
                   58106: /*
                   58107: ** Change the value of the P5 operand for the most recently
                   58108: ** added operation.
                   58109: */
                   58110: SQLITE_PRIVATE void sqlite3VdbeChangeP5(Vdbe *p, u8 val){
                   58111:   assert( p!=0 );
                   58112:   if( p->aOp ){
                   58113:     assert( p->nOp>0 );
                   58114:     p->aOp[p->nOp-1].p5 = val;
                   58115:   }
                   58116: }
                   58117: 
                   58118: /*
                   58119: ** Change the P2 operand of instruction addr so that it points to
                   58120: ** the address of the next instruction to be coded.
                   58121: */
                   58122: SQLITE_PRIVATE void sqlite3VdbeJumpHere(Vdbe *p, int addr){
                   58123:   assert( addr>=0 );
                   58124:   sqlite3VdbeChangeP2(p, addr, p->nOp);
                   58125: }
                   58126: 
                   58127: 
                   58128: /*
                   58129: ** If the input FuncDef structure is ephemeral, then free it.  If
                   58130: ** the FuncDef is not ephermal, then do nothing.
                   58131: */
                   58132: static void freeEphemeralFunction(sqlite3 *db, FuncDef *pDef){
                   58133:   if( ALWAYS(pDef) && (pDef->flags & SQLITE_FUNC_EPHEM)!=0 ){
                   58134:     sqlite3DbFree(db, pDef);
                   58135:   }
                   58136: }
                   58137: 
                   58138: static void vdbeFreeOpArray(sqlite3 *, Op *, int);
                   58139: 
                   58140: /*
                   58141: ** Delete a P4 value if necessary.
                   58142: */
                   58143: static void freeP4(sqlite3 *db, int p4type, void *p4){
                   58144:   if( p4 ){
                   58145:     assert( db );
                   58146:     switch( p4type ){
                   58147:       case P4_REAL:
                   58148:       case P4_INT64:
                   58149:       case P4_DYNAMIC:
                   58150:       case P4_KEYINFO:
                   58151:       case P4_INTARRAY:
                   58152:       case P4_KEYINFO_HANDOFF: {
                   58153:         sqlite3DbFree(db, p4);
                   58154:         break;
                   58155:       }
                   58156:       case P4_MPRINTF: {
                   58157:         if( db->pnBytesFreed==0 ) sqlite3_free(p4);
                   58158:         break;
                   58159:       }
                   58160:       case P4_VDBEFUNC: {
                   58161:         VdbeFunc *pVdbeFunc = (VdbeFunc *)p4;
                   58162:         freeEphemeralFunction(db, pVdbeFunc->pFunc);
                   58163:         if( db->pnBytesFreed==0 ) sqlite3VdbeDeleteAuxData(pVdbeFunc, 0);
                   58164:         sqlite3DbFree(db, pVdbeFunc);
                   58165:         break;
                   58166:       }
                   58167:       case P4_FUNCDEF: {
                   58168:         freeEphemeralFunction(db, (FuncDef*)p4);
                   58169:         break;
                   58170:       }
                   58171:       case P4_MEM: {
                   58172:         if( db->pnBytesFreed==0 ){
                   58173:           sqlite3ValueFree((sqlite3_value*)p4);
                   58174:         }else{
                   58175:           Mem *p = (Mem*)p4;
                   58176:           sqlite3DbFree(db, p->zMalloc);
                   58177:           sqlite3DbFree(db, p);
                   58178:         }
                   58179:         break;
                   58180:       }
                   58181:       case P4_VTAB : {
                   58182:         if( db->pnBytesFreed==0 ) sqlite3VtabUnlock((VTable *)p4);
                   58183:         break;
                   58184:       }
                   58185:     }
                   58186:   }
                   58187: }
                   58188: 
                   58189: /*
                   58190: ** Free the space allocated for aOp and any p4 values allocated for the
                   58191: ** opcodes contained within. If aOp is not NULL it is assumed to contain 
                   58192: ** nOp entries. 
                   58193: */
                   58194: static void vdbeFreeOpArray(sqlite3 *db, Op *aOp, int nOp){
                   58195:   if( aOp ){
                   58196:     Op *pOp;
                   58197:     for(pOp=aOp; pOp<&aOp[nOp]; pOp++){
                   58198:       freeP4(db, pOp->p4type, pOp->p4.p);
                   58199: #ifdef SQLITE_DEBUG
                   58200:       sqlite3DbFree(db, pOp->zComment);
                   58201: #endif     
                   58202:     }
                   58203:   }
                   58204:   sqlite3DbFree(db, aOp);
                   58205: }
                   58206: 
                   58207: /*
                   58208: ** Link the SubProgram object passed as the second argument into the linked
                   58209: ** list at Vdbe.pSubProgram. This list is used to delete all sub-program
                   58210: ** objects when the VM is no longer required.
                   58211: */
                   58212: SQLITE_PRIVATE void sqlite3VdbeLinkSubProgram(Vdbe *pVdbe, SubProgram *p){
                   58213:   p->pNext = pVdbe->pProgram;
                   58214:   pVdbe->pProgram = p;
                   58215: }
                   58216: 
                   58217: /*
                   58218: ** Change N opcodes starting at addr to No-ops.
                   58219: */
                   58220: SQLITE_PRIVATE void sqlite3VdbeChangeToNoop(Vdbe *p, int addr, int N){
                   58221:   if( p->aOp ){
                   58222:     VdbeOp *pOp = &p->aOp[addr];
                   58223:     sqlite3 *db = p->db;
                   58224:     while( N-- ){
                   58225:       freeP4(db, pOp->p4type, pOp->p4.p);
                   58226:       memset(pOp, 0, sizeof(pOp[0]));
                   58227:       pOp->opcode = OP_Noop;
                   58228:       pOp++;
                   58229:     }
                   58230:   }
                   58231: }
                   58232: 
                   58233: /*
                   58234: ** Change the value of the P4 operand for a specific instruction.
                   58235: ** This routine is useful when a large program is loaded from a
                   58236: ** static array using sqlite3VdbeAddOpList but we want to make a
                   58237: ** few minor changes to the program.
                   58238: **
                   58239: ** If n>=0 then the P4 operand is dynamic, meaning that a copy of
                   58240: ** the string is made into memory obtained from sqlite3_malloc().
                   58241: ** A value of n==0 means copy bytes of zP4 up to and including the
                   58242: ** first null byte.  If n>0 then copy n+1 bytes of zP4.
                   58243: **
                   58244: ** If n==P4_KEYINFO it means that zP4 is a pointer to a KeyInfo structure.
                   58245: ** A copy is made of the KeyInfo structure into memory obtained from
                   58246: ** sqlite3_malloc, to be freed when the Vdbe is finalized.
                   58247: ** n==P4_KEYINFO_HANDOFF indicates that zP4 points to a KeyInfo structure
                   58248: ** stored in memory that the caller has obtained from sqlite3_malloc. The 
                   58249: ** caller should not free the allocation, it will be freed when the Vdbe is
                   58250: ** finalized.
                   58251: ** 
                   58252: ** Other values of n (P4_STATIC, P4_COLLSEQ etc.) indicate that zP4 points
                   58253: ** to a string or structure that is guaranteed to exist for the lifetime of
                   58254: ** the Vdbe. In these cases we can just copy the pointer.
                   58255: **
                   58256: ** If addr<0 then change P4 on the most recently inserted instruction.
                   58257: */
                   58258: SQLITE_PRIVATE void sqlite3VdbeChangeP4(Vdbe *p, int addr, const char *zP4, int n){
                   58259:   Op *pOp;
                   58260:   sqlite3 *db;
                   58261:   assert( p!=0 );
                   58262:   db = p->db;
                   58263:   assert( p->magic==VDBE_MAGIC_INIT );
                   58264:   if( p->aOp==0 || db->mallocFailed ){
                   58265:     if ( n!=P4_KEYINFO && n!=P4_VTAB ) {
                   58266:       freeP4(db, n, (void*)*(char**)&zP4);
                   58267:     }
                   58268:     return;
                   58269:   }
                   58270:   assert( p->nOp>0 );
                   58271:   assert( addr<p->nOp );
                   58272:   if( addr<0 ){
                   58273:     addr = p->nOp - 1;
                   58274:   }
                   58275:   pOp = &p->aOp[addr];
                   58276:   freeP4(db, pOp->p4type, pOp->p4.p);
                   58277:   pOp->p4.p = 0;
                   58278:   if( n==P4_INT32 ){
                   58279:     /* Note: this cast is safe, because the origin data point was an int
                   58280:     ** that was cast to a (const char *). */
                   58281:     pOp->p4.i = SQLITE_PTR_TO_INT(zP4);
                   58282:     pOp->p4type = P4_INT32;
                   58283:   }else if( zP4==0 ){
                   58284:     pOp->p4.p = 0;
                   58285:     pOp->p4type = P4_NOTUSED;
                   58286:   }else if( n==P4_KEYINFO ){
                   58287:     KeyInfo *pKeyInfo;
                   58288:     int nField, nByte;
                   58289: 
                   58290:     nField = ((KeyInfo*)zP4)->nField;
                   58291:     nByte = sizeof(*pKeyInfo) + (nField-1)*sizeof(pKeyInfo->aColl[0]) + nField;
                   58292:     pKeyInfo = sqlite3DbMallocRaw(0, nByte);
                   58293:     pOp->p4.pKeyInfo = pKeyInfo;
                   58294:     if( pKeyInfo ){
                   58295:       u8 *aSortOrder;
                   58296:       memcpy((char*)pKeyInfo, zP4, nByte - nField);
                   58297:       aSortOrder = pKeyInfo->aSortOrder;
                   58298:       if( aSortOrder ){
                   58299:         pKeyInfo->aSortOrder = (unsigned char*)&pKeyInfo->aColl[nField];
                   58300:         memcpy(pKeyInfo->aSortOrder, aSortOrder, nField);
                   58301:       }
                   58302:       pOp->p4type = P4_KEYINFO;
                   58303:     }else{
                   58304:       p->db->mallocFailed = 1;
                   58305:       pOp->p4type = P4_NOTUSED;
                   58306:     }
                   58307:   }else if( n==P4_KEYINFO_HANDOFF ){
                   58308:     pOp->p4.p = (void*)zP4;
                   58309:     pOp->p4type = P4_KEYINFO;
                   58310:   }else if( n==P4_VTAB ){
                   58311:     pOp->p4.p = (void*)zP4;
                   58312:     pOp->p4type = P4_VTAB;
                   58313:     sqlite3VtabLock((VTable *)zP4);
                   58314:     assert( ((VTable *)zP4)->db==p->db );
                   58315:   }else if( n<0 ){
                   58316:     pOp->p4.p = (void*)zP4;
                   58317:     pOp->p4type = (signed char)n;
                   58318:   }else{
                   58319:     if( n==0 ) n = sqlite3Strlen30(zP4);
                   58320:     pOp->p4.z = sqlite3DbStrNDup(p->db, zP4, n);
                   58321:     pOp->p4type = P4_DYNAMIC;
                   58322:   }
                   58323: }
                   58324: 
                   58325: #ifndef NDEBUG
                   58326: /*
                   58327: ** Change the comment on the the most recently coded instruction.  Or
                   58328: ** insert a No-op and add the comment to that new instruction.  This
                   58329: ** makes the code easier to read during debugging.  None of this happens
                   58330: ** in a production build.
                   58331: */
                   58332: SQLITE_PRIVATE void sqlite3VdbeComment(Vdbe *p, const char *zFormat, ...){
                   58333:   va_list ap;
                   58334:   if( !p ) return;
                   58335:   assert( p->nOp>0 || p->aOp==0 );
                   58336:   assert( p->aOp==0 || p->aOp[p->nOp-1].zComment==0 || p->db->mallocFailed );
                   58337:   if( p->nOp ){
                   58338:     char **pz = &p->aOp[p->nOp-1].zComment;
                   58339:     va_start(ap, zFormat);
                   58340:     sqlite3DbFree(p->db, *pz);
                   58341:     *pz = sqlite3VMPrintf(p->db, zFormat, ap);
                   58342:     va_end(ap);
                   58343:   }
                   58344: }
                   58345: SQLITE_PRIVATE void sqlite3VdbeNoopComment(Vdbe *p, const char *zFormat, ...){
                   58346:   va_list ap;
                   58347:   if( !p ) return;
                   58348:   sqlite3VdbeAddOp0(p, OP_Noop);
                   58349:   assert( p->nOp>0 || p->aOp==0 );
                   58350:   assert( p->aOp==0 || p->aOp[p->nOp-1].zComment==0 || p->db->mallocFailed );
                   58351:   if( p->nOp ){
                   58352:     char **pz = &p->aOp[p->nOp-1].zComment;
                   58353:     va_start(ap, zFormat);
                   58354:     sqlite3DbFree(p->db, *pz);
                   58355:     *pz = sqlite3VMPrintf(p->db, zFormat, ap);
                   58356:     va_end(ap);
                   58357:   }
                   58358: }
                   58359: #endif  /* NDEBUG */
                   58360: 
                   58361: /*
                   58362: ** Return the opcode for a given address.  If the address is -1, then
                   58363: ** return the most recently inserted opcode.
                   58364: **
                   58365: ** If a memory allocation error has occurred prior to the calling of this
                   58366: ** routine, then a pointer to a dummy VdbeOp will be returned.  That opcode
                   58367: ** is readable but not writable, though it is cast to a writable value.
                   58368: ** The return of a dummy opcode allows the call to continue functioning
                   58369: ** after a OOM fault without having to check to see if the return from 
                   58370: ** this routine is a valid pointer.  But because the dummy.opcode is 0,
                   58371: ** dummy will never be written to.  This is verified by code inspection and
                   58372: ** by running with Valgrind.
                   58373: **
                   58374: ** About the #ifdef SQLITE_OMIT_TRACE:  Normally, this routine is never called
1.1.1.3 ! misho    58375: ** unless p->nOp>0.  This is because in the absence of SQLITE_OMIT_TRACE,
1.1       misho    58376: ** an OP_Trace instruction is always inserted by sqlite3VdbeGet() as soon as
                   58377: ** a new VDBE is created.  So we are free to set addr to p->nOp-1 without
                   58378: ** having to double-check to make sure that the result is non-negative. But
                   58379: ** if SQLITE_OMIT_TRACE is defined, the OP_Trace is omitted and we do need to
                   58380: ** check the value of p->nOp-1 before continuing.
                   58381: */
                   58382: SQLITE_PRIVATE VdbeOp *sqlite3VdbeGetOp(Vdbe *p, int addr){
                   58383:   /* C89 specifies that the constant "dummy" will be initialized to all
                   58384:   ** zeros, which is correct.  MSVC generates a warning, nevertheless. */
                   58385:   static const VdbeOp dummy;  /* Ignore the MSVC warning about no initializer */
                   58386:   assert( p->magic==VDBE_MAGIC_INIT );
                   58387:   if( addr<0 ){
                   58388: #ifdef SQLITE_OMIT_TRACE
                   58389:     if( p->nOp==0 ) return (VdbeOp*)&dummy;
                   58390: #endif
                   58391:     addr = p->nOp - 1;
                   58392:   }
                   58393:   assert( (addr>=0 && addr<p->nOp) || p->db->mallocFailed );
                   58394:   if( p->db->mallocFailed ){
                   58395:     return (VdbeOp*)&dummy;
                   58396:   }else{
                   58397:     return &p->aOp[addr];
                   58398:   }
                   58399: }
                   58400: 
                   58401: #if !defined(SQLITE_OMIT_EXPLAIN) || !defined(NDEBUG) \
                   58402:      || defined(VDBE_PROFILE) || defined(SQLITE_DEBUG)
                   58403: /*
                   58404: ** Compute a string that describes the P4 parameter for an opcode.
                   58405: ** Use zTemp for any required temporary buffer space.
                   58406: */
                   58407: static char *displayP4(Op *pOp, char *zTemp, int nTemp){
                   58408:   char *zP4 = zTemp;
                   58409:   assert( nTemp>=20 );
                   58410:   switch( pOp->p4type ){
                   58411:     case P4_KEYINFO_STATIC:
                   58412:     case P4_KEYINFO: {
                   58413:       int i, j;
                   58414:       KeyInfo *pKeyInfo = pOp->p4.pKeyInfo;
                   58415:       sqlite3_snprintf(nTemp, zTemp, "keyinfo(%d", pKeyInfo->nField);
                   58416:       i = sqlite3Strlen30(zTemp);
                   58417:       for(j=0; j<pKeyInfo->nField; j++){
                   58418:         CollSeq *pColl = pKeyInfo->aColl[j];
                   58419:         if( pColl ){
                   58420:           int n = sqlite3Strlen30(pColl->zName);
                   58421:           if( i+n>nTemp-6 ){
                   58422:             memcpy(&zTemp[i],",...",4);
                   58423:             break;
                   58424:           }
                   58425:           zTemp[i++] = ',';
                   58426:           if( pKeyInfo->aSortOrder && pKeyInfo->aSortOrder[j] ){
                   58427:             zTemp[i++] = '-';
                   58428:           }
                   58429:           memcpy(&zTemp[i], pColl->zName,n+1);
                   58430:           i += n;
                   58431:         }else if( i+4<nTemp-6 ){
                   58432:           memcpy(&zTemp[i],",nil",4);
                   58433:           i += 4;
                   58434:         }
                   58435:       }
                   58436:       zTemp[i++] = ')';
                   58437:       zTemp[i] = 0;
                   58438:       assert( i<nTemp );
                   58439:       break;
                   58440:     }
                   58441:     case P4_COLLSEQ: {
                   58442:       CollSeq *pColl = pOp->p4.pColl;
                   58443:       sqlite3_snprintf(nTemp, zTemp, "collseq(%.20s)", pColl->zName);
                   58444:       break;
                   58445:     }
                   58446:     case P4_FUNCDEF: {
                   58447:       FuncDef *pDef = pOp->p4.pFunc;
                   58448:       sqlite3_snprintf(nTemp, zTemp, "%s(%d)", pDef->zName, pDef->nArg);
                   58449:       break;
                   58450:     }
                   58451:     case P4_INT64: {
                   58452:       sqlite3_snprintf(nTemp, zTemp, "%lld", *pOp->p4.pI64);
                   58453:       break;
                   58454:     }
                   58455:     case P4_INT32: {
                   58456:       sqlite3_snprintf(nTemp, zTemp, "%d", pOp->p4.i);
                   58457:       break;
                   58458:     }
                   58459:     case P4_REAL: {
                   58460:       sqlite3_snprintf(nTemp, zTemp, "%.16g", *pOp->p4.pReal);
                   58461:       break;
                   58462:     }
                   58463:     case P4_MEM: {
                   58464:       Mem *pMem = pOp->p4.pMem;
                   58465:       assert( (pMem->flags & MEM_Null)==0 );
                   58466:       if( pMem->flags & MEM_Str ){
                   58467:         zP4 = pMem->z;
                   58468:       }else if( pMem->flags & MEM_Int ){
                   58469:         sqlite3_snprintf(nTemp, zTemp, "%lld", pMem->u.i);
                   58470:       }else if( pMem->flags & MEM_Real ){
                   58471:         sqlite3_snprintf(nTemp, zTemp, "%.16g", pMem->r);
                   58472:       }else{
                   58473:         assert( pMem->flags & MEM_Blob );
                   58474:         zP4 = "(blob)";
                   58475:       }
                   58476:       break;
                   58477:     }
                   58478: #ifndef SQLITE_OMIT_VIRTUALTABLE
                   58479:     case P4_VTAB: {
                   58480:       sqlite3_vtab *pVtab = pOp->p4.pVtab->pVtab;
                   58481:       sqlite3_snprintf(nTemp, zTemp, "vtab:%p:%p", pVtab, pVtab->pModule);
                   58482:       break;
                   58483:     }
                   58484: #endif
                   58485:     case P4_INTARRAY: {
                   58486:       sqlite3_snprintf(nTemp, zTemp, "intarray");
                   58487:       break;
                   58488:     }
                   58489:     case P4_SUBPROGRAM: {
                   58490:       sqlite3_snprintf(nTemp, zTemp, "program");
                   58491:       break;
                   58492:     }
                   58493:     default: {
                   58494:       zP4 = pOp->p4.z;
                   58495:       if( zP4==0 ){
                   58496:         zP4 = zTemp;
                   58497:         zTemp[0] = 0;
                   58498:       }
                   58499:     }
                   58500:   }
                   58501:   assert( zP4!=0 );
                   58502:   return zP4;
                   58503: }
                   58504: #endif
                   58505: 
                   58506: /*
                   58507: ** Declare to the Vdbe that the BTree object at db->aDb[i] is used.
                   58508: **
                   58509: ** The prepared statements need to know in advance the complete set of
                   58510: ** attached databases that they will be using.  A mask of these databases
                   58511: ** is maintained in p->btreeMask and is used for locking and other purposes.
                   58512: */
                   58513: SQLITE_PRIVATE void sqlite3VdbeUsesBtree(Vdbe *p, int i){
                   58514:   assert( i>=0 && i<p->db->nDb && i<(int)sizeof(yDbMask)*8 );
                   58515:   assert( i<(int)sizeof(p->btreeMask)*8 );
                   58516:   p->btreeMask |= ((yDbMask)1)<<i;
                   58517:   if( i!=1 && sqlite3BtreeSharable(p->db->aDb[i].pBt) ){
                   58518:     p->lockMask |= ((yDbMask)1)<<i;
                   58519:   }
                   58520: }
                   58521: 
                   58522: #if !defined(SQLITE_OMIT_SHARED_CACHE) && SQLITE_THREADSAFE>0
                   58523: /*
                   58524: ** If SQLite is compiled to support shared-cache mode and to be threadsafe,
                   58525: ** this routine obtains the mutex associated with each BtShared structure
                   58526: ** that may be accessed by the VM passed as an argument. In doing so it also
                   58527: ** sets the BtShared.db member of each of the BtShared structures, ensuring
                   58528: ** that the correct busy-handler callback is invoked if required.
                   58529: **
                   58530: ** If SQLite is not threadsafe but does support shared-cache mode, then
                   58531: ** sqlite3BtreeEnter() is invoked to set the BtShared.db variables
                   58532: ** of all of BtShared structures accessible via the database handle 
                   58533: ** associated with the VM.
                   58534: **
                   58535: ** If SQLite is not threadsafe and does not support shared-cache mode, this
                   58536: ** function is a no-op.
                   58537: **
                   58538: ** The p->btreeMask field is a bitmask of all btrees that the prepared 
                   58539: ** statement p will ever use.  Let N be the number of bits in p->btreeMask
                   58540: ** corresponding to btrees that use shared cache.  Then the runtime of
                   58541: ** this routine is N*N.  But as N is rarely more than 1, this should not
                   58542: ** be a problem.
                   58543: */
                   58544: SQLITE_PRIVATE void sqlite3VdbeEnter(Vdbe *p){
                   58545:   int i;
                   58546:   yDbMask mask;
                   58547:   sqlite3 *db;
                   58548:   Db *aDb;
                   58549:   int nDb;
                   58550:   if( p->lockMask==0 ) return;  /* The common case */
                   58551:   db = p->db;
                   58552:   aDb = db->aDb;
                   58553:   nDb = db->nDb;
                   58554:   for(i=0, mask=1; i<nDb; i++, mask += mask){
                   58555:     if( i!=1 && (mask & p->lockMask)!=0 && ALWAYS(aDb[i].pBt!=0) ){
                   58556:       sqlite3BtreeEnter(aDb[i].pBt);
                   58557:     }
                   58558:   }
                   58559: }
                   58560: #endif
                   58561: 
                   58562: #if !defined(SQLITE_OMIT_SHARED_CACHE) && SQLITE_THREADSAFE>0
                   58563: /*
                   58564: ** Unlock all of the btrees previously locked by a call to sqlite3VdbeEnter().
                   58565: */
                   58566: SQLITE_PRIVATE void sqlite3VdbeLeave(Vdbe *p){
                   58567:   int i;
                   58568:   yDbMask mask;
                   58569:   sqlite3 *db;
                   58570:   Db *aDb;
                   58571:   int nDb;
                   58572:   if( p->lockMask==0 ) return;  /* The common case */
                   58573:   db = p->db;
                   58574:   aDb = db->aDb;
                   58575:   nDb = db->nDb;
                   58576:   for(i=0, mask=1; i<nDb; i++, mask += mask){
                   58577:     if( i!=1 && (mask & p->lockMask)!=0 && ALWAYS(aDb[i].pBt!=0) ){
                   58578:       sqlite3BtreeLeave(aDb[i].pBt);
                   58579:     }
                   58580:   }
                   58581: }
                   58582: #endif
                   58583: 
                   58584: #if defined(VDBE_PROFILE) || defined(SQLITE_DEBUG)
                   58585: /*
                   58586: ** Print a single opcode.  This routine is used for debugging only.
                   58587: */
                   58588: SQLITE_PRIVATE void sqlite3VdbePrintOp(FILE *pOut, int pc, Op *pOp){
                   58589:   char *zP4;
                   58590:   char zPtr[50];
                   58591:   static const char *zFormat1 = "%4d %-13s %4d %4d %4d %-4s %.2X %s\n";
                   58592:   if( pOut==0 ) pOut = stdout;
                   58593:   zP4 = displayP4(pOp, zPtr, sizeof(zPtr));
                   58594:   fprintf(pOut, zFormat1, pc, 
                   58595:       sqlite3OpcodeName(pOp->opcode), pOp->p1, pOp->p2, pOp->p3, zP4, pOp->p5,
                   58596: #ifdef SQLITE_DEBUG
                   58597:       pOp->zComment ? pOp->zComment : ""
                   58598: #else
                   58599:       ""
                   58600: #endif
                   58601:   );
                   58602:   fflush(pOut);
                   58603: }
                   58604: #endif
                   58605: 
                   58606: /*
                   58607: ** Release an array of N Mem elements
                   58608: */
                   58609: static void releaseMemArray(Mem *p, int N){
                   58610:   if( p && N ){
                   58611:     Mem *pEnd;
                   58612:     sqlite3 *db = p->db;
                   58613:     u8 malloc_failed = db->mallocFailed;
                   58614:     if( db->pnBytesFreed ){
                   58615:       for(pEnd=&p[N]; p<pEnd; p++){
                   58616:         sqlite3DbFree(db, p->zMalloc);
                   58617:       }
                   58618:       return;
                   58619:     }
                   58620:     for(pEnd=&p[N]; p<pEnd; p++){
                   58621:       assert( (&p[1])==pEnd || p[0].db==p[1].db );
                   58622: 
                   58623:       /* This block is really an inlined version of sqlite3VdbeMemRelease()
                   58624:       ** that takes advantage of the fact that the memory cell value is 
                   58625:       ** being set to NULL after releasing any dynamic resources.
                   58626:       **
                   58627:       ** The justification for duplicating code is that according to 
                   58628:       ** callgrind, this causes a certain test case to hit the CPU 4.7 
                   58629:       ** percent less (x86 linux, gcc version 4.1.2, -O6) than if 
                   58630:       ** sqlite3MemRelease() were called from here. With -O2, this jumps
                   58631:       ** to 6.6 percent. The test case is inserting 1000 rows into a table 
                   58632:       ** with no indexes using a single prepared INSERT statement, bind() 
                   58633:       ** and reset(). Inserts are grouped into a transaction.
                   58634:       */
                   58635:       if( p->flags&(MEM_Agg|MEM_Dyn|MEM_Frame|MEM_RowSet) ){
                   58636:         sqlite3VdbeMemRelease(p);
                   58637:       }else if( p->zMalloc ){
                   58638:         sqlite3DbFree(db, p->zMalloc);
                   58639:         p->zMalloc = 0;
                   58640:       }
                   58641: 
                   58642:       p->flags = MEM_Null;
                   58643:     }
                   58644:     db->mallocFailed = malloc_failed;
                   58645:   }
                   58646: }
                   58647: 
                   58648: /*
                   58649: ** Delete a VdbeFrame object and its contents. VdbeFrame objects are
                   58650: ** allocated by the OP_Program opcode in sqlite3VdbeExec().
                   58651: */
                   58652: SQLITE_PRIVATE void sqlite3VdbeFrameDelete(VdbeFrame *p){
                   58653:   int i;
                   58654:   Mem *aMem = VdbeFrameMem(p);
                   58655:   VdbeCursor **apCsr = (VdbeCursor **)&aMem[p->nChildMem];
                   58656:   for(i=0; i<p->nChildCsr; i++){
                   58657:     sqlite3VdbeFreeCursor(p->v, apCsr[i]);
                   58658:   }
                   58659:   releaseMemArray(aMem, p->nChildMem);
                   58660:   sqlite3DbFree(p->v->db, p);
                   58661: }
                   58662: 
                   58663: #ifndef SQLITE_OMIT_EXPLAIN
                   58664: /*
                   58665: ** Give a listing of the program in the virtual machine.
                   58666: **
                   58667: ** The interface is the same as sqlite3VdbeExec().  But instead of
                   58668: ** running the code, it invokes the callback once for each instruction.
                   58669: ** This feature is used to implement "EXPLAIN".
                   58670: **
                   58671: ** When p->explain==1, each instruction is listed.  When
                   58672: ** p->explain==2, only OP_Explain instructions are listed and these
                   58673: ** are shown in a different format.  p->explain==2 is used to implement
                   58674: ** EXPLAIN QUERY PLAN.
                   58675: **
                   58676: ** When p->explain==1, first the main program is listed, then each of
                   58677: ** the trigger subprograms are listed one by one.
                   58678: */
                   58679: SQLITE_PRIVATE int sqlite3VdbeList(
                   58680:   Vdbe *p                   /* The VDBE */
                   58681: ){
                   58682:   int nRow;                            /* Stop when row count reaches this */
                   58683:   int nSub = 0;                        /* Number of sub-vdbes seen so far */
                   58684:   SubProgram **apSub = 0;              /* Array of sub-vdbes */
                   58685:   Mem *pSub = 0;                       /* Memory cell hold array of subprogs */
                   58686:   sqlite3 *db = p->db;                 /* The database connection */
                   58687:   int i;                               /* Loop counter */
                   58688:   int rc = SQLITE_OK;                  /* Return code */
                   58689:   Mem *pMem = p->pResultSet = &p->aMem[1];  /* First Mem of result set */
                   58690: 
                   58691:   assert( p->explain );
                   58692:   assert( p->magic==VDBE_MAGIC_RUN );
                   58693:   assert( p->rc==SQLITE_OK || p->rc==SQLITE_BUSY || p->rc==SQLITE_NOMEM );
                   58694: 
                   58695:   /* Even though this opcode does not use dynamic strings for
                   58696:   ** the result, result columns may become dynamic if the user calls
                   58697:   ** sqlite3_column_text16(), causing a translation to UTF-16 encoding.
                   58698:   */
                   58699:   releaseMemArray(pMem, 8);
                   58700: 
                   58701:   if( p->rc==SQLITE_NOMEM ){
                   58702:     /* This happens if a malloc() inside a call to sqlite3_column_text() or
                   58703:     ** sqlite3_column_text16() failed.  */
                   58704:     db->mallocFailed = 1;
                   58705:     return SQLITE_ERROR;
                   58706:   }
                   58707: 
                   58708:   /* When the number of output rows reaches nRow, that means the
                   58709:   ** listing has finished and sqlite3_step() should return SQLITE_DONE.
                   58710:   ** nRow is the sum of the number of rows in the main program, plus
                   58711:   ** the sum of the number of rows in all trigger subprograms encountered
                   58712:   ** so far.  The nRow value will increase as new trigger subprograms are
                   58713:   ** encountered, but p->pc will eventually catch up to nRow.
                   58714:   */
                   58715:   nRow = p->nOp;
                   58716:   if( p->explain==1 ){
                   58717:     /* The first 8 memory cells are used for the result set.  So we will
                   58718:     ** commandeer the 9th cell to use as storage for an array of pointers
                   58719:     ** to trigger subprograms.  The VDBE is guaranteed to have at least 9
                   58720:     ** cells.  */
                   58721:     assert( p->nMem>9 );
                   58722:     pSub = &p->aMem[9];
                   58723:     if( pSub->flags&MEM_Blob ){
                   58724:       /* On the first call to sqlite3_step(), pSub will hold a NULL.  It is
                   58725:       ** initialized to a BLOB by the P4_SUBPROGRAM processing logic below */
                   58726:       nSub = pSub->n/sizeof(Vdbe*);
                   58727:       apSub = (SubProgram **)pSub->z;
                   58728:     }
                   58729:     for(i=0; i<nSub; i++){
                   58730:       nRow += apSub[i]->nOp;
                   58731:     }
                   58732:   }
                   58733: 
                   58734:   do{
                   58735:     i = p->pc++;
                   58736:   }while( i<nRow && p->explain==2 && p->aOp[i].opcode!=OP_Explain );
                   58737:   if( i>=nRow ){
                   58738:     p->rc = SQLITE_OK;
                   58739:     rc = SQLITE_DONE;
                   58740:   }else if( db->u1.isInterrupted ){
                   58741:     p->rc = SQLITE_INTERRUPT;
                   58742:     rc = SQLITE_ERROR;
                   58743:     sqlite3SetString(&p->zErrMsg, db, "%s", sqlite3ErrStr(p->rc));
                   58744:   }else{
                   58745:     char *z;
                   58746:     Op *pOp;
                   58747:     if( i<p->nOp ){
                   58748:       /* The output line number is small enough that we are still in the
                   58749:       ** main program. */
                   58750:       pOp = &p->aOp[i];
                   58751:     }else{
                   58752:       /* We are currently listing subprograms.  Figure out which one and
                   58753:       ** pick up the appropriate opcode. */
                   58754:       int j;
                   58755:       i -= p->nOp;
                   58756:       for(j=0; i>=apSub[j]->nOp; j++){
                   58757:         i -= apSub[j]->nOp;
                   58758:       }
                   58759:       pOp = &apSub[j]->aOp[i];
                   58760:     }
                   58761:     if( p->explain==1 ){
                   58762:       pMem->flags = MEM_Int;
                   58763:       pMem->type = SQLITE_INTEGER;
                   58764:       pMem->u.i = i;                                /* Program counter */
                   58765:       pMem++;
                   58766:   
                   58767:       pMem->flags = MEM_Static|MEM_Str|MEM_Term;
                   58768:       pMem->z = (char*)sqlite3OpcodeName(pOp->opcode);  /* Opcode */
                   58769:       assert( pMem->z!=0 );
                   58770:       pMem->n = sqlite3Strlen30(pMem->z);
                   58771:       pMem->type = SQLITE_TEXT;
                   58772:       pMem->enc = SQLITE_UTF8;
                   58773:       pMem++;
                   58774: 
                   58775:       /* When an OP_Program opcode is encounter (the only opcode that has
                   58776:       ** a P4_SUBPROGRAM argument), expand the size of the array of subprograms
                   58777:       ** kept in p->aMem[9].z to hold the new program - assuming this subprogram
                   58778:       ** has not already been seen.
                   58779:       */
                   58780:       if( pOp->p4type==P4_SUBPROGRAM ){
                   58781:         int nByte = (nSub+1)*sizeof(SubProgram*);
                   58782:         int j;
                   58783:         for(j=0; j<nSub; j++){
                   58784:           if( apSub[j]==pOp->p4.pProgram ) break;
                   58785:         }
                   58786:         if( j==nSub && SQLITE_OK==sqlite3VdbeMemGrow(pSub, nByte, 1) ){
                   58787:           apSub = (SubProgram **)pSub->z;
                   58788:           apSub[nSub++] = pOp->p4.pProgram;
                   58789:           pSub->flags |= MEM_Blob;
                   58790:           pSub->n = nSub*sizeof(SubProgram*);
                   58791:         }
                   58792:       }
                   58793:     }
                   58794: 
                   58795:     pMem->flags = MEM_Int;
                   58796:     pMem->u.i = pOp->p1;                          /* P1 */
                   58797:     pMem->type = SQLITE_INTEGER;
                   58798:     pMem++;
                   58799: 
                   58800:     pMem->flags = MEM_Int;
                   58801:     pMem->u.i = pOp->p2;                          /* P2 */
                   58802:     pMem->type = SQLITE_INTEGER;
                   58803:     pMem++;
                   58804: 
                   58805:     pMem->flags = MEM_Int;
                   58806:     pMem->u.i = pOp->p3;                          /* P3 */
                   58807:     pMem->type = SQLITE_INTEGER;
                   58808:     pMem++;
                   58809: 
                   58810:     if( sqlite3VdbeMemGrow(pMem, 32, 0) ){            /* P4 */
                   58811:       assert( p->db->mallocFailed );
                   58812:       return SQLITE_ERROR;
                   58813:     }
                   58814:     pMem->flags = MEM_Dyn|MEM_Str|MEM_Term;
                   58815:     z = displayP4(pOp, pMem->z, 32);
                   58816:     if( z!=pMem->z ){
                   58817:       sqlite3VdbeMemSetStr(pMem, z, -1, SQLITE_UTF8, 0);
                   58818:     }else{
                   58819:       assert( pMem->z!=0 );
                   58820:       pMem->n = sqlite3Strlen30(pMem->z);
                   58821:       pMem->enc = SQLITE_UTF8;
                   58822:     }
                   58823:     pMem->type = SQLITE_TEXT;
                   58824:     pMem++;
                   58825: 
                   58826:     if( p->explain==1 ){
                   58827:       if( sqlite3VdbeMemGrow(pMem, 4, 0) ){
                   58828:         assert( p->db->mallocFailed );
                   58829:         return SQLITE_ERROR;
                   58830:       }
                   58831:       pMem->flags = MEM_Dyn|MEM_Str|MEM_Term;
                   58832:       pMem->n = 2;
                   58833:       sqlite3_snprintf(3, pMem->z, "%.2x", pOp->p5);   /* P5 */
                   58834:       pMem->type = SQLITE_TEXT;
                   58835:       pMem->enc = SQLITE_UTF8;
                   58836:       pMem++;
                   58837:   
                   58838: #ifdef SQLITE_DEBUG
                   58839:       if( pOp->zComment ){
                   58840:         pMem->flags = MEM_Str|MEM_Term;
                   58841:         pMem->z = pOp->zComment;
                   58842:         pMem->n = sqlite3Strlen30(pMem->z);
                   58843:         pMem->enc = SQLITE_UTF8;
                   58844:         pMem->type = SQLITE_TEXT;
                   58845:       }else
                   58846: #endif
                   58847:       {
                   58848:         pMem->flags = MEM_Null;                       /* Comment */
                   58849:         pMem->type = SQLITE_NULL;
                   58850:       }
                   58851:     }
                   58852: 
                   58853:     p->nResColumn = 8 - 4*(p->explain-1);
                   58854:     p->rc = SQLITE_OK;
                   58855:     rc = SQLITE_ROW;
                   58856:   }
                   58857:   return rc;
                   58858: }
                   58859: #endif /* SQLITE_OMIT_EXPLAIN */
                   58860: 
                   58861: #ifdef SQLITE_DEBUG
                   58862: /*
                   58863: ** Print the SQL that was used to generate a VDBE program.
                   58864: */
                   58865: SQLITE_PRIVATE void sqlite3VdbePrintSql(Vdbe *p){
                   58866:   int nOp = p->nOp;
                   58867:   VdbeOp *pOp;
                   58868:   if( nOp<1 ) return;
                   58869:   pOp = &p->aOp[0];
                   58870:   if( pOp->opcode==OP_Trace && pOp->p4.z!=0 ){
                   58871:     const char *z = pOp->p4.z;
                   58872:     while( sqlite3Isspace(*z) ) z++;
                   58873:     printf("SQL: [%s]\n", z);
                   58874:   }
                   58875: }
                   58876: #endif
                   58877: 
                   58878: #if !defined(SQLITE_OMIT_TRACE) && defined(SQLITE_ENABLE_IOTRACE)
                   58879: /*
                   58880: ** Print an IOTRACE message showing SQL content.
                   58881: */
                   58882: SQLITE_PRIVATE void sqlite3VdbeIOTraceSql(Vdbe *p){
                   58883:   int nOp = p->nOp;
                   58884:   VdbeOp *pOp;
                   58885:   if( sqlite3IoTrace==0 ) return;
                   58886:   if( nOp<1 ) return;
                   58887:   pOp = &p->aOp[0];
                   58888:   if( pOp->opcode==OP_Trace && pOp->p4.z!=0 ){
                   58889:     int i, j;
                   58890:     char z[1000];
                   58891:     sqlite3_snprintf(sizeof(z), z, "%s", pOp->p4.z);
                   58892:     for(i=0; sqlite3Isspace(z[i]); i++){}
                   58893:     for(j=0; z[i]; i++){
                   58894:       if( sqlite3Isspace(z[i]) ){
                   58895:         if( z[i-1]!=' ' ){
                   58896:           z[j++] = ' ';
                   58897:         }
                   58898:       }else{
                   58899:         z[j++] = z[i];
                   58900:       }
                   58901:     }
                   58902:     z[j] = 0;
                   58903:     sqlite3IoTrace("SQL %s\n", z);
                   58904:   }
                   58905: }
                   58906: #endif /* !SQLITE_OMIT_TRACE && SQLITE_ENABLE_IOTRACE */
                   58907: 
                   58908: /*
                   58909: ** Allocate space from a fixed size buffer and return a pointer to
                   58910: ** that space.  If insufficient space is available, return NULL.
                   58911: **
                   58912: ** The pBuf parameter is the initial value of a pointer which will
                   58913: ** receive the new memory.  pBuf is normally NULL.  If pBuf is not
                   58914: ** NULL, it means that memory space has already been allocated and that
                   58915: ** this routine should not allocate any new memory.  When pBuf is not
                   58916: ** NULL simply return pBuf.  Only allocate new memory space when pBuf
                   58917: ** is NULL.
                   58918: **
                   58919: ** nByte is the number of bytes of space needed.
                   58920: **
                   58921: ** *ppFrom points to available space and pEnd points to the end of the
                   58922: ** available space.  When space is allocated, *ppFrom is advanced past
                   58923: ** the end of the allocated space.
                   58924: **
                   58925: ** *pnByte is a counter of the number of bytes of space that have failed
                   58926: ** to allocate.  If there is insufficient space in *ppFrom to satisfy the
                   58927: ** request, then increment *pnByte by the amount of the request.
                   58928: */
                   58929: static void *allocSpace(
                   58930:   void *pBuf,          /* Where return pointer will be stored */
                   58931:   int nByte,           /* Number of bytes to allocate */
                   58932:   u8 **ppFrom,         /* IN/OUT: Allocate from *ppFrom */
                   58933:   u8 *pEnd,            /* Pointer to 1 byte past the end of *ppFrom buffer */
                   58934:   int *pnByte          /* If allocation cannot be made, increment *pnByte */
                   58935: ){
                   58936:   assert( EIGHT_BYTE_ALIGNMENT(*ppFrom) );
                   58937:   if( pBuf ) return pBuf;
                   58938:   nByte = ROUND8(nByte);
                   58939:   if( &(*ppFrom)[nByte] <= pEnd ){
                   58940:     pBuf = (void*)*ppFrom;
                   58941:     *ppFrom += nByte;
                   58942:   }else{
                   58943:     *pnByte += nByte;
                   58944:   }
                   58945:   return pBuf;
                   58946: }
                   58947: 
                   58948: /*
                   58949: ** Rewind the VDBE back to the beginning in preparation for
                   58950: ** running it.
                   58951: */
                   58952: SQLITE_PRIVATE void sqlite3VdbeRewind(Vdbe *p){
                   58953: #if defined(SQLITE_DEBUG) || defined(VDBE_PROFILE)
                   58954:   int i;
                   58955: #endif
                   58956:   assert( p!=0 );
                   58957:   assert( p->magic==VDBE_MAGIC_INIT );
                   58958: 
                   58959:   /* There should be at least one opcode.
                   58960:   */
                   58961:   assert( p->nOp>0 );
                   58962: 
                   58963:   /* Set the magic to VDBE_MAGIC_RUN sooner rather than later. */
                   58964:   p->magic = VDBE_MAGIC_RUN;
                   58965: 
                   58966: #ifdef SQLITE_DEBUG
                   58967:   for(i=1; i<p->nMem; i++){
                   58968:     assert( p->aMem[i].db==p->db );
                   58969:   }
                   58970: #endif
                   58971:   p->pc = -1;
                   58972:   p->rc = SQLITE_OK;
                   58973:   p->errorAction = OE_Abort;
                   58974:   p->magic = VDBE_MAGIC_RUN;
                   58975:   p->nChange = 0;
                   58976:   p->cacheCtr = 1;
                   58977:   p->minWriteFileFormat = 255;
                   58978:   p->iStatement = 0;
                   58979:   p->nFkConstraint = 0;
                   58980: #ifdef VDBE_PROFILE
                   58981:   for(i=0; i<p->nOp; i++){
                   58982:     p->aOp[i].cnt = 0;
                   58983:     p->aOp[i].cycles = 0;
                   58984:   }
                   58985: #endif
                   58986: }
                   58987: 
                   58988: /*
                   58989: ** Prepare a virtual machine for execution for the first time after
                   58990: ** creating the virtual machine.  This involves things such
                   58991: ** as allocating stack space and initializing the program counter.
                   58992: ** After the VDBE has be prepped, it can be executed by one or more
                   58993: ** calls to sqlite3VdbeExec().  
                   58994: **
                   58995: ** This function may be called exact once on a each virtual machine.
                   58996: ** After this routine is called the VM has been "packaged" and is ready
                   58997: ** to run.  After this routine is called, futher calls to 
                   58998: ** sqlite3VdbeAddOp() functions are prohibited.  This routine disconnects
                   58999: ** the Vdbe from the Parse object that helped generate it so that the
                   59000: ** the Vdbe becomes an independent entity and the Parse object can be
                   59001: ** destroyed.
                   59002: **
                   59003: ** Use the sqlite3VdbeRewind() procedure to restore a virtual machine back
                   59004: ** to its initial state after it has been run.
                   59005: */
                   59006: SQLITE_PRIVATE void sqlite3VdbeMakeReady(
                   59007:   Vdbe *p,                       /* The VDBE */
                   59008:   Parse *pParse                  /* Parsing context */
                   59009: ){
                   59010:   sqlite3 *db;                   /* The database connection */
                   59011:   int nVar;                      /* Number of parameters */
                   59012:   int nMem;                      /* Number of VM memory registers */
                   59013:   int nCursor;                   /* Number of cursors required */
                   59014:   int nArg;                      /* Number of arguments in subprograms */
                   59015:   int n;                         /* Loop counter */
                   59016:   u8 *zCsr;                      /* Memory available for allocation */
                   59017:   u8 *zEnd;                      /* First byte past allocated memory */
                   59018:   int nByte;                     /* How much extra memory is needed */
                   59019: 
                   59020:   assert( p!=0 );
                   59021:   assert( p->nOp>0 );
                   59022:   assert( pParse!=0 );
                   59023:   assert( p->magic==VDBE_MAGIC_INIT );
                   59024:   db = p->db;
                   59025:   assert( db->mallocFailed==0 );
                   59026:   nVar = pParse->nVar;
                   59027:   nMem = pParse->nMem;
                   59028:   nCursor = pParse->nTab;
                   59029:   nArg = pParse->nMaxArg;
                   59030:   
                   59031:   /* For each cursor required, also allocate a memory cell. Memory
                   59032:   ** cells (nMem+1-nCursor)..nMem, inclusive, will never be used by
                   59033:   ** the vdbe program. Instead they are used to allocate space for
                   59034:   ** VdbeCursor/BtCursor structures. The blob of memory associated with 
                   59035:   ** cursor 0 is stored in memory cell nMem. Memory cell (nMem-1)
                   59036:   ** stores the blob of memory associated with cursor 1, etc.
                   59037:   **
                   59038:   ** See also: allocateCursor().
                   59039:   */
                   59040:   nMem += nCursor;
                   59041: 
                   59042:   /* Allocate space for memory registers, SQL variables, VDBE cursors and 
                   59043:   ** an array to marshal SQL function arguments in.
                   59044:   */
                   59045:   zCsr = (u8*)&p->aOp[p->nOp];       /* Memory avaliable for allocation */
                   59046:   zEnd = (u8*)&p->aOp[p->nOpAlloc];  /* First byte past end of zCsr[] */
                   59047: 
                   59048:   resolveP2Values(p, &nArg);
                   59049:   p->usesStmtJournal = (u8)(pParse->isMultiWrite && pParse->mayAbort);
                   59050:   if( pParse->explain && nMem<10 ){
                   59051:     nMem = 10;
                   59052:   }
                   59053:   memset(zCsr, 0, zEnd-zCsr);
                   59054:   zCsr += (zCsr - (u8*)0)&7;
                   59055:   assert( EIGHT_BYTE_ALIGNMENT(zCsr) );
                   59056:   p->expired = 0;
                   59057: 
                   59058:   /* Memory for registers, parameters, cursor, etc, is allocated in two
                   59059:   ** passes.  On the first pass, we try to reuse unused space at the 
                   59060:   ** end of the opcode array.  If we are unable to satisfy all memory
                   59061:   ** requirements by reusing the opcode array tail, then the second
                   59062:   ** pass will fill in the rest using a fresh allocation.  
                   59063:   **
                   59064:   ** This two-pass approach that reuses as much memory as possible from
                   59065:   ** the leftover space at the end of the opcode array can significantly
                   59066:   ** reduce the amount of memory held by a prepared statement.
                   59067:   */
                   59068:   do {
                   59069:     nByte = 0;
                   59070:     p->aMem = allocSpace(p->aMem, nMem*sizeof(Mem), &zCsr, zEnd, &nByte);
                   59071:     p->aVar = allocSpace(p->aVar, nVar*sizeof(Mem), &zCsr, zEnd, &nByte);
                   59072:     p->apArg = allocSpace(p->apArg, nArg*sizeof(Mem*), &zCsr, zEnd, &nByte);
                   59073:     p->azVar = allocSpace(p->azVar, nVar*sizeof(char*), &zCsr, zEnd, &nByte);
                   59074:     p->apCsr = allocSpace(p->apCsr, nCursor*sizeof(VdbeCursor*),
                   59075:                           &zCsr, zEnd, &nByte);
                   59076:     if( nByte ){
                   59077:       p->pFree = sqlite3DbMallocZero(db, nByte);
                   59078:     }
                   59079:     zCsr = p->pFree;
                   59080:     zEnd = &zCsr[nByte];
                   59081:   }while( nByte && !db->mallocFailed );
                   59082: 
                   59083:   p->nCursor = (u16)nCursor;
                   59084:   if( p->aVar ){
                   59085:     p->nVar = (ynVar)nVar;
                   59086:     for(n=0; n<nVar; n++){
                   59087:       p->aVar[n].flags = MEM_Null;
                   59088:       p->aVar[n].db = db;
                   59089:     }
                   59090:   }
                   59091:   if( p->azVar ){
                   59092:     p->nzVar = pParse->nzVar;
                   59093:     memcpy(p->azVar, pParse->azVar, p->nzVar*sizeof(p->azVar[0]));
                   59094:     memset(pParse->azVar, 0, pParse->nzVar*sizeof(pParse->azVar[0]));
                   59095:   }
                   59096:   if( p->aMem ){
                   59097:     p->aMem--;                      /* aMem[] goes from 1..nMem */
                   59098:     p->nMem = nMem;                 /*       not from 0..nMem-1 */
                   59099:     for(n=1; n<=nMem; n++){
                   59100:       p->aMem[n].flags = MEM_Null;
                   59101:       p->aMem[n].db = db;
                   59102:     }
                   59103:   }
                   59104:   p->explain = pParse->explain;
                   59105:   sqlite3VdbeRewind(p);
                   59106: }
                   59107: 
                   59108: /*
                   59109: ** Close a VDBE cursor and release all the resources that cursor 
                   59110: ** happens to hold.
                   59111: */
                   59112: SQLITE_PRIVATE void sqlite3VdbeFreeCursor(Vdbe *p, VdbeCursor *pCx){
                   59113:   if( pCx==0 ){
                   59114:     return;
                   59115:   }
                   59116:   if( pCx->pBt ){
                   59117:     sqlite3BtreeClose(pCx->pBt);
                   59118:     /* The pCx->pCursor will be close automatically, if it exists, by
                   59119:     ** the call above. */
                   59120:   }else if( pCx->pCursor ){
                   59121:     sqlite3BtreeCloseCursor(pCx->pCursor);
                   59122:   }
                   59123: #ifndef SQLITE_OMIT_VIRTUALTABLE
                   59124:   if( pCx->pVtabCursor ){
                   59125:     sqlite3_vtab_cursor *pVtabCursor = pCx->pVtabCursor;
                   59126:     const sqlite3_module *pModule = pCx->pModule;
                   59127:     p->inVtabMethod = 1;
                   59128:     pModule->xClose(pVtabCursor);
                   59129:     p->inVtabMethod = 0;
                   59130:   }
                   59131: #endif
                   59132: }
                   59133: 
                   59134: /*
                   59135: ** Copy the values stored in the VdbeFrame structure to its Vdbe. This
                   59136: ** is used, for example, when a trigger sub-program is halted to restore
                   59137: ** control to the main program.
                   59138: */
                   59139: SQLITE_PRIVATE int sqlite3VdbeFrameRestore(VdbeFrame *pFrame){
                   59140:   Vdbe *v = pFrame->v;
                   59141:   v->aOp = pFrame->aOp;
                   59142:   v->nOp = pFrame->nOp;
                   59143:   v->aMem = pFrame->aMem;
                   59144:   v->nMem = pFrame->nMem;
                   59145:   v->apCsr = pFrame->apCsr;
                   59146:   v->nCursor = pFrame->nCursor;
                   59147:   v->db->lastRowid = pFrame->lastRowid;
                   59148:   v->nChange = pFrame->nChange;
                   59149:   return pFrame->pc;
                   59150: }
                   59151: 
                   59152: /*
                   59153: ** Close all cursors.
                   59154: **
                   59155: ** Also release any dynamic memory held by the VM in the Vdbe.aMem memory 
                   59156: ** cell array. This is necessary as the memory cell array may contain
                   59157: ** pointers to VdbeFrame objects, which may in turn contain pointers to
                   59158: ** open cursors.
                   59159: */
                   59160: static void closeAllCursors(Vdbe *p){
                   59161:   if( p->pFrame ){
                   59162:     VdbeFrame *pFrame;
                   59163:     for(pFrame=p->pFrame; pFrame->pParent; pFrame=pFrame->pParent);
                   59164:     sqlite3VdbeFrameRestore(pFrame);
                   59165:   }
                   59166:   p->pFrame = 0;
                   59167:   p->nFrame = 0;
                   59168: 
                   59169:   if( p->apCsr ){
                   59170:     int i;
                   59171:     for(i=0; i<p->nCursor; i++){
                   59172:       VdbeCursor *pC = p->apCsr[i];
                   59173:       if( pC ){
                   59174:         sqlite3VdbeFreeCursor(p, pC);
                   59175:         p->apCsr[i] = 0;
                   59176:       }
                   59177:     }
                   59178:   }
                   59179:   if( p->aMem ){
                   59180:     releaseMemArray(&p->aMem[1], p->nMem);
                   59181:   }
                   59182:   while( p->pDelFrame ){
                   59183:     VdbeFrame *pDel = p->pDelFrame;
                   59184:     p->pDelFrame = pDel->pParent;
                   59185:     sqlite3VdbeFrameDelete(pDel);
                   59186:   }
                   59187: }
                   59188: 
                   59189: /*
                   59190: ** Clean up the VM after execution.
                   59191: **
                   59192: ** This routine will automatically close any cursors, lists, and/or
                   59193: ** sorters that were left open.  It also deletes the values of
                   59194: ** variables in the aVar[] array.
                   59195: */
                   59196: static void Cleanup(Vdbe *p){
                   59197:   sqlite3 *db = p->db;
                   59198: 
                   59199: #ifdef SQLITE_DEBUG
                   59200:   /* Execute assert() statements to ensure that the Vdbe.apCsr[] and 
                   59201:   ** Vdbe.aMem[] arrays have already been cleaned up.  */
                   59202:   int i;
                   59203:   for(i=0; i<p->nCursor; i++) assert( p->apCsr==0 || p->apCsr[i]==0 );
                   59204:   for(i=1; i<=p->nMem; i++) assert( p->aMem==0 || p->aMem[i].flags==MEM_Null );
                   59205: #endif
                   59206: 
                   59207:   sqlite3DbFree(db, p->zErrMsg);
                   59208:   p->zErrMsg = 0;
                   59209:   p->pResultSet = 0;
                   59210: }
                   59211: 
                   59212: /*
                   59213: ** Set the number of result columns that will be returned by this SQL
                   59214: ** statement. This is now set at compile time, rather than during
                   59215: ** execution of the vdbe program so that sqlite3_column_count() can
                   59216: ** be called on an SQL statement before sqlite3_step().
                   59217: */
                   59218: SQLITE_PRIVATE void sqlite3VdbeSetNumCols(Vdbe *p, int nResColumn){
                   59219:   Mem *pColName;
                   59220:   int n;
                   59221:   sqlite3 *db = p->db;
                   59222: 
                   59223:   releaseMemArray(p->aColName, p->nResColumn*COLNAME_N);
                   59224:   sqlite3DbFree(db, p->aColName);
                   59225:   n = nResColumn*COLNAME_N;
                   59226:   p->nResColumn = (u16)nResColumn;
                   59227:   p->aColName = pColName = (Mem*)sqlite3DbMallocZero(db, sizeof(Mem)*n );
                   59228:   if( p->aColName==0 ) return;
                   59229:   while( n-- > 0 ){
                   59230:     pColName->flags = MEM_Null;
                   59231:     pColName->db = p->db;
                   59232:     pColName++;
                   59233:   }
                   59234: }
                   59235: 
                   59236: /*
                   59237: ** Set the name of the idx'th column to be returned by the SQL statement.
                   59238: ** zName must be a pointer to a nul terminated string.
                   59239: **
                   59240: ** This call must be made after a call to sqlite3VdbeSetNumCols().
                   59241: **
                   59242: ** The final parameter, xDel, must be one of SQLITE_DYNAMIC, SQLITE_STATIC
                   59243: ** or SQLITE_TRANSIENT. If it is SQLITE_DYNAMIC, then the buffer pointed
                   59244: ** to by zName will be freed by sqlite3DbFree() when the vdbe is destroyed.
                   59245: */
                   59246: SQLITE_PRIVATE int sqlite3VdbeSetColName(
                   59247:   Vdbe *p,                         /* Vdbe being configured */
                   59248:   int idx,                         /* Index of column zName applies to */
                   59249:   int var,                         /* One of the COLNAME_* constants */
                   59250:   const char *zName,               /* Pointer to buffer containing name */
                   59251:   void (*xDel)(void*)              /* Memory management strategy for zName */
                   59252: ){
                   59253:   int rc;
                   59254:   Mem *pColName;
                   59255:   assert( idx<p->nResColumn );
                   59256:   assert( var<COLNAME_N );
                   59257:   if( p->db->mallocFailed ){
                   59258:     assert( !zName || xDel!=SQLITE_DYNAMIC );
                   59259:     return SQLITE_NOMEM;
                   59260:   }
                   59261:   assert( p->aColName!=0 );
                   59262:   pColName = &(p->aColName[idx+var*p->nResColumn]);
                   59263:   rc = sqlite3VdbeMemSetStr(pColName, zName, -1, SQLITE_UTF8, xDel);
                   59264:   assert( rc!=0 || !zName || (pColName->flags&MEM_Term)!=0 );
                   59265:   return rc;
                   59266: }
                   59267: 
                   59268: /*
                   59269: ** A read or write transaction may or may not be active on database handle
                   59270: ** db. If a transaction is active, commit it. If there is a
                   59271: ** write-transaction spanning more than one database file, this routine
                   59272: ** takes care of the master journal trickery.
                   59273: */
                   59274: static int vdbeCommit(sqlite3 *db, Vdbe *p){
                   59275:   int i;
                   59276:   int nTrans = 0;  /* Number of databases with an active write-transaction */
                   59277:   int rc = SQLITE_OK;
                   59278:   int needXcommit = 0;
                   59279: 
                   59280: #ifdef SQLITE_OMIT_VIRTUALTABLE
                   59281:   /* With this option, sqlite3VtabSync() is defined to be simply 
                   59282:   ** SQLITE_OK so p is not used. 
                   59283:   */
                   59284:   UNUSED_PARAMETER(p);
                   59285: #endif
                   59286: 
                   59287:   /* Before doing anything else, call the xSync() callback for any
                   59288:   ** virtual module tables written in this transaction. This has to
                   59289:   ** be done before determining whether a master journal file is 
                   59290:   ** required, as an xSync() callback may add an attached database
                   59291:   ** to the transaction.
                   59292:   */
                   59293:   rc = sqlite3VtabSync(db, &p->zErrMsg);
                   59294: 
                   59295:   /* This loop determines (a) if the commit hook should be invoked and
                   59296:   ** (b) how many database files have open write transactions, not 
                   59297:   ** including the temp database. (b) is important because if more than 
                   59298:   ** one database file has an open write transaction, a master journal
                   59299:   ** file is required for an atomic commit.
                   59300:   */ 
                   59301:   for(i=0; rc==SQLITE_OK && i<db->nDb; i++){ 
                   59302:     Btree *pBt = db->aDb[i].pBt;
                   59303:     if( sqlite3BtreeIsInTrans(pBt) ){
                   59304:       needXcommit = 1;
                   59305:       if( i!=1 ) nTrans++;
                   59306:       rc = sqlite3PagerExclusiveLock(sqlite3BtreePager(pBt));
                   59307:     }
                   59308:   }
                   59309:   if( rc!=SQLITE_OK ){
                   59310:     return rc;
                   59311:   }
                   59312: 
                   59313:   /* If there are any write-transactions at all, invoke the commit hook */
                   59314:   if( needXcommit && db->xCommitCallback ){
                   59315:     rc = db->xCommitCallback(db->pCommitArg);
                   59316:     if( rc ){
                   59317:       return SQLITE_CONSTRAINT;
                   59318:     }
                   59319:   }
                   59320: 
                   59321:   /* The simple case - no more than one database file (not counting the
                   59322:   ** TEMP database) has a transaction active.   There is no need for the
                   59323:   ** master-journal.
                   59324:   **
                   59325:   ** If the return value of sqlite3BtreeGetFilename() is a zero length
                   59326:   ** string, it means the main database is :memory: or a temp file.  In 
                   59327:   ** that case we do not support atomic multi-file commits, so use the 
                   59328:   ** simple case then too.
                   59329:   */
                   59330:   if( 0==sqlite3Strlen30(sqlite3BtreeGetFilename(db->aDb[0].pBt))
                   59331:    || nTrans<=1
                   59332:   ){
                   59333:     for(i=0; rc==SQLITE_OK && i<db->nDb; i++){
                   59334:       Btree *pBt = db->aDb[i].pBt;
                   59335:       if( pBt ){
                   59336:         rc = sqlite3BtreeCommitPhaseOne(pBt, 0);
                   59337:       }
                   59338:     }
                   59339: 
                   59340:     /* Do the commit only if all databases successfully complete phase 1. 
                   59341:     ** If one of the BtreeCommitPhaseOne() calls fails, this indicates an
                   59342:     ** IO error while deleting or truncating a journal file. It is unlikely,
                   59343:     ** but could happen. In this case abandon processing and return the error.
                   59344:     */
                   59345:     for(i=0; rc==SQLITE_OK && i<db->nDb; i++){
                   59346:       Btree *pBt = db->aDb[i].pBt;
                   59347:       if( pBt ){
                   59348:         rc = sqlite3BtreeCommitPhaseTwo(pBt, 0);
                   59349:       }
                   59350:     }
                   59351:     if( rc==SQLITE_OK ){
                   59352:       sqlite3VtabCommit(db);
                   59353:     }
                   59354:   }
                   59355: 
                   59356:   /* The complex case - There is a multi-file write-transaction active.
                   59357:   ** This requires a master journal file to ensure the transaction is
                   59358:   ** committed atomicly.
                   59359:   */
                   59360: #ifndef SQLITE_OMIT_DISKIO
                   59361:   else{
                   59362:     sqlite3_vfs *pVfs = db->pVfs;
                   59363:     int needSync = 0;
                   59364:     char *zMaster = 0;   /* File-name for the master journal */
                   59365:     char const *zMainFile = sqlite3BtreeGetFilename(db->aDb[0].pBt);
                   59366:     sqlite3_file *pMaster = 0;
                   59367:     i64 offset = 0;
                   59368:     int res;
                   59369: 
                   59370:     /* Select a master journal file name */
                   59371:     do {
                   59372:       u32 iRandom;
                   59373:       sqlite3DbFree(db, zMaster);
                   59374:       sqlite3_randomness(sizeof(iRandom), &iRandom);
                   59375:       zMaster = sqlite3MPrintf(db, "%s-mj%08X", zMainFile, iRandom&0x7fffffff);
                   59376:       if( !zMaster ){
                   59377:         return SQLITE_NOMEM;
                   59378:       }
                   59379:       sqlite3FileSuffix3(zMainFile, zMaster);
                   59380:       rc = sqlite3OsAccess(pVfs, zMaster, SQLITE_ACCESS_EXISTS, &res);
                   59381:     }while( rc==SQLITE_OK && res );
                   59382:     if( rc==SQLITE_OK ){
                   59383:       /* Open the master journal. */
                   59384:       rc = sqlite3OsOpenMalloc(pVfs, zMaster, &pMaster, 
                   59385:           SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE|
                   59386:           SQLITE_OPEN_EXCLUSIVE|SQLITE_OPEN_MASTER_JOURNAL, 0
                   59387:       );
                   59388:     }
                   59389:     if( rc!=SQLITE_OK ){
                   59390:       sqlite3DbFree(db, zMaster);
                   59391:       return rc;
                   59392:     }
                   59393:  
                   59394:     /* Write the name of each database file in the transaction into the new
                   59395:     ** master journal file. If an error occurs at this point close
                   59396:     ** and delete the master journal file. All the individual journal files
                   59397:     ** still have 'null' as the master journal pointer, so they will roll
                   59398:     ** back independently if a failure occurs.
                   59399:     */
                   59400:     for(i=0; i<db->nDb; i++){
                   59401:       Btree *pBt = db->aDb[i].pBt;
                   59402:       if( sqlite3BtreeIsInTrans(pBt) ){
                   59403:         char const *zFile = sqlite3BtreeGetJournalname(pBt);
                   59404:         if( zFile==0 ){
                   59405:           continue;  /* Ignore TEMP and :memory: databases */
                   59406:         }
                   59407:         assert( zFile[0]!=0 );
                   59408:         if( !needSync && !sqlite3BtreeSyncDisabled(pBt) ){
                   59409:           needSync = 1;
                   59410:         }
                   59411:         rc = sqlite3OsWrite(pMaster, zFile, sqlite3Strlen30(zFile)+1, offset);
                   59412:         offset += sqlite3Strlen30(zFile)+1;
                   59413:         if( rc!=SQLITE_OK ){
                   59414:           sqlite3OsCloseFree(pMaster);
                   59415:           sqlite3OsDelete(pVfs, zMaster, 0);
                   59416:           sqlite3DbFree(db, zMaster);
                   59417:           return rc;
                   59418:         }
                   59419:       }
                   59420:     }
                   59421: 
                   59422:     /* Sync the master journal file. If the IOCAP_SEQUENTIAL device
                   59423:     ** flag is set this is not required.
                   59424:     */
                   59425:     if( needSync 
                   59426:      && 0==(sqlite3OsDeviceCharacteristics(pMaster)&SQLITE_IOCAP_SEQUENTIAL)
                   59427:      && SQLITE_OK!=(rc = sqlite3OsSync(pMaster, SQLITE_SYNC_NORMAL))
                   59428:     ){
                   59429:       sqlite3OsCloseFree(pMaster);
                   59430:       sqlite3OsDelete(pVfs, zMaster, 0);
                   59431:       sqlite3DbFree(db, zMaster);
                   59432:       return rc;
                   59433:     }
                   59434: 
                   59435:     /* Sync all the db files involved in the transaction. The same call
                   59436:     ** sets the master journal pointer in each individual journal. If
                   59437:     ** an error occurs here, do not delete the master journal file.
                   59438:     **
                   59439:     ** If the error occurs during the first call to
                   59440:     ** sqlite3BtreeCommitPhaseOne(), then there is a chance that the
                   59441:     ** master journal file will be orphaned. But we cannot delete it,
                   59442:     ** in case the master journal file name was written into the journal
                   59443:     ** file before the failure occurred.
                   59444:     */
                   59445:     for(i=0; rc==SQLITE_OK && i<db->nDb; i++){ 
                   59446:       Btree *pBt = db->aDb[i].pBt;
                   59447:       if( pBt ){
                   59448:         rc = sqlite3BtreeCommitPhaseOne(pBt, zMaster);
                   59449:       }
                   59450:     }
                   59451:     sqlite3OsCloseFree(pMaster);
                   59452:     assert( rc!=SQLITE_BUSY );
                   59453:     if( rc!=SQLITE_OK ){
                   59454:       sqlite3DbFree(db, zMaster);
                   59455:       return rc;
                   59456:     }
                   59457: 
                   59458:     /* Delete the master journal file. This commits the transaction. After
                   59459:     ** doing this the directory is synced again before any individual
                   59460:     ** transaction files are deleted.
                   59461:     */
                   59462:     rc = sqlite3OsDelete(pVfs, zMaster, 1);
                   59463:     sqlite3DbFree(db, zMaster);
                   59464:     zMaster = 0;
                   59465:     if( rc ){
                   59466:       return rc;
                   59467:     }
                   59468: 
                   59469:     /* All files and directories have already been synced, so the following
                   59470:     ** calls to sqlite3BtreeCommitPhaseTwo() are only closing files and
                   59471:     ** deleting or truncating journals. If something goes wrong while
                   59472:     ** this is happening we don't really care. The integrity of the
                   59473:     ** transaction is already guaranteed, but some stray 'cold' journals
                   59474:     ** may be lying around. Returning an error code won't help matters.
                   59475:     */
                   59476:     disable_simulated_io_errors();
                   59477:     sqlite3BeginBenignMalloc();
                   59478:     for(i=0; i<db->nDb; i++){ 
                   59479:       Btree *pBt = db->aDb[i].pBt;
                   59480:       if( pBt ){
                   59481:         sqlite3BtreeCommitPhaseTwo(pBt, 1);
                   59482:       }
                   59483:     }
                   59484:     sqlite3EndBenignMalloc();
                   59485:     enable_simulated_io_errors();
                   59486: 
                   59487:     sqlite3VtabCommit(db);
                   59488:   }
                   59489: #endif
                   59490: 
                   59491:   return rc;
                   59492: }
                   59493: 
                   59494: /* 
                   59495: ** This routine checks that the sqlite3.activeVdbeCnt count variable
                   59496: ** matches the number of vdbe's in the list sqlite3.pVdbe that are
                   59497: ** currently active. An assertion fails if the two counts do not match.
                   59498: ** This is an internal self-check only - it is not an essential processing
                   59499: ** step.
                   59500: **
                   59501: ** This is a no-op if NDEBUG is defined.
                   59502: */
                   59503: #ifndef NDEBUG
                   59504: static void checkActiveVdbeCnt(sqlite3 *db){
                   59505:   Vdbe *p;
                   59506:   int cnt = 0;
                   59507:   int nWrite = 0;
                   59508:   p = db->pVdbe;
                   59509:   while( p ){
                   59510:     if( p->magic==VDBE_MAGIC_RUN && p->pc>=0 ){
                   59511:       cnt++;
                   59512:       if( p->readOnly==0 ) nWrite++;
                   59513:     }
                   59514:     p = p->pNext;
                   59515:   }
                   59516:   assert( cnt==db->activeVdbeCnt );
                   59517:   assert( nWrite==db->writeVdbeCnt );
                   59518: }
                   59519: #else
                   59520: #define checkActiveVdbeCnt(x)
                   59521: #endif
                   59522: 
                   59523: /*
                   59524: ** For every Btree that in database connection db which 
                   59525: ** has been modified, "trip" or invalidate each cursor in
                   59526: ** that Btree might have been modified so that the cursor
                   59527: ** can never be used again.  This happens when a rollback
                   59528: *** occurs.  We have to trip all the other cursors, even
                   59529: ** cursor from other VMs in different database connections,
                   59530: ** so that none of them try to use the data at which they
                   59531: ** were pointing and which now may have been changed due
                   59532: ** to the rollback.
                   59533: **
                   59534: ** Remember that a rollback can delete tables complete and
                   59535: ** reorder rootpages.  So it is not sufficient just to save
                   59536: ** the state of the cursor.  We have to invalidate the cursor
                   59537: ** so that it is never used again.
                   59538: */
                   59539: static void invalidateCursorsOnModifiedBtrees(sqlite3 *db){
                   59540:   int i;
                   59541:   for(i=0; i<db->nDb; i++){
                   59542:     Btree *p = db->aDb[i].pBt;
                   59543:     if( p && sqlite3BtreeIsInTrans(p) ){
                   59544:       sqlite3BtreeTripAllCursors(p, SQLITE_ABORT);
                   59545:     }
                   59546:   }
                   59547: }
                   59548: 
                   59549: /*
                   59550: ** If the Vdbe passed as the first argument opened a statement-transaction,
                   59551: ** close it now. Argument eOp must be either SAVEPOINT_ROLLBACK or
                   59552: ** SAVEPOINT_RELEASE. If it is SAVEPOINT_ROLLBACK, then the statement
                   59553: ** transaction is rolled back. If eOp is SAVEPOINT_RELEASE, then the 
1.1.1.3 ! misho    59554: ** statement transaction is committed.
1.1       misho    59555: **
                   59556: ** If an IO error occurs, an SQLITE_IOERR_XXX error code is returned. 
                   59557: ** Otherwise SQLITE_OK.
                   59558: */
                   59559: SQLITE_PRIVATE int sqlite3VdbeCloseStatement(Vdbe *p, int eOp){
                   59560:   sqlite3 *const db = p->db;
                   59561:   int rc = SQLITE_OK;
                   59562: 
                   59563:   /* If p->iStatement is greater than zero, then this Vdbe opened a 
                   59564:   ** statement transaction that should be closed here. The only exception
1.1.1.3 ! misho    59565:   ** is that an IO error may have occurred, causing an emergency rollback.
1.1       misho    59566:   ** In this case (db->nStatement==0), and there is nothing to do.
                   59567:   */
                   59568:   if( db->nStatement && p->iStatement ){
                   59569:     int i;
                   59570:     const int iSavepoint = p->iStatement-1;
                   59571: 
                   59572:     assert( eOp==SAVEPOINT_ROLLBACK || eOp==SAVEPOINT_RELEASE);
                   59573:     assert( db->nStatement>0 );
                   59574:     assert( p->iStatement==(db->nStatement+db->nSavepoint) );
                   59575: 
                   59576:     for(i=0; i<db->nDb; i++){ 
                   59577:       int rc2 = SQLITE_OK;
                   59578:       Btree *pBt = db->aDb[i].pBt;
                   59579:       if( pBt ){
                   59580:         if( eOp==SAVEPOINT_ROLLBACK ){
                   59581:           rc2 = sqlite3BtreeSavepoint(pBt, SAVEPOINT_ROLLBACK, iSavepoint);
                   59582:         }
                   59583:         if( rc2==SQLITE_OK ){
                   59584:           rc2 = sqlite3BtreeSavepoint(pBt, SAVEPOINT_RELEASE, iSavepoint);
                   59585:         }
                   59586:         if( rc==SQLITE_OK ){
                   59587:           rc = rc2;
                   59588:         }
                   59589:       }
                   59590:     }
                   59591:     db->nStatement--;
                   59592:     p->iStatement = 0;
                   59593: 
                   59594:     if( rc==SQLITE_OK ){
                   59595:       if( eOp==SAVEPOINT_ROLLBACK ){
                   59596:         rc = sqlite3VtabSavepoint(db, SAVEPOINT_ROLLBACK, iSavepoint);
                   59597:       }
                   59598:       if( rc==SQLITE_OK ){
                   59599:         rc = sqlite3VtabSavepoint(db, SAVEPOINT_RELEASE, iSavepoint);
                   59600:       }
                   59601:     }
                   59602: 
                   59603:     /* If the statement transaction is being rolled back, also restore the 
                   59604:     ** database handles deferred constraint counter to the value it had when 
                   59605:     ** the statement transaction was opened.  */
                   59606:     if( eOp==SAVEPOINT_ROLLBACK ){
                   59607:       db->nDeferredCons = p->nStmtDefCons;
                   59608:     }
                   59609:   }
                   59610:   return rc;
                   59611: }
                   59612: 
                   59613: /*
                   59614: ** This function is called when a transaction opened by the database 
                   59615: ** handle associated with the VM passed as an argument is about to be 
                   59616: ** committed. If there are outstanding deferred foreign key constraint
                   59617: ** violations, return SQLITE_ERROR. Otherwise, SQLITE_OK.
                   59618: **
                   59619: ** If there are outstanding FK violations and this function returns 
                   59620: ** SQLITE_ERROR, set the result of the VM to SQLITE_CONSTRAINT and write
                   59621: ** an error message to it. Then return SQLITE_ERROR.
                   59622: */
                   59623: #ifndef SQLITE_OMIT_FOREIGN_KEY
                   59624: SQLITE_PRIVATE int sqlite3VdbeCheckFk(Vdbe *p, int deferred){
                   59625:   sqlite3 *db = p->db;
                   59626:   if( (deferred && db->nDeferredCons>0) || (!deferred && p->nFkConstraint>0) ){
                   59627:     p->rc = SQLITE_CONSTRAINT;
                   59628:     p->errorAction = OE_Abort;
                   59629:     sqlite3SetString(&p->zErrMsg, db, "foreign key constraint failed");
                   59630:     return SQLITE_ERROR;
                   59631:   }
                   59632:   return SQLITE_OK;
                   59633: }
                   59634: #endif
                   59635: 
                   59636: /*
                   59637: ** This routine is called the when a VDBE tries to halt.  If the VDBE
                   59638: ** has made changes and is in autocommit mode, then commit those
                   59639: ** changes.  If a rollback is needed, then do the rollback.
                   59640: **
                   59641: ** This routine is the only way to move the state of a VM from
                   59642: ** SQLITE_MAGIC_RUN to SQLITE_MAGIC_HALT.  It is harmless to
                   59643: ** call this on a VM that is in the SQLITE_MAGIC_HALT state.
                   59644: **
                   59645: ** Return an error code.  If the commit could not complete because of
                   59646: ** lock contention, return SQLITE_BUSY.  If SQLITE_BUSY is returned, it
                   59647: ** means the close did not happen and needs to be repeated.
                   59648: */
                   59649: SQLITE_PRIVATE int sqlite3VdbeHalt(Vdbe *p){
                   59650:   int rc;                         /* Used to store transient return codes */
                   59651:   sqlite3 *db = p->db;
                   59652: 
                   59653:   /* This function contains the logic that determines if a statement or
                   59654:   ** transaction will be committed or rolled back as a result of the
                   59655:   ** execution of this virtual machine. 
                   59656:   **
                   59657:   ** If any of the following errors occur:
                   59658:   **
                   59659:   **     SQLITE_NOMEM
                   59660:   **     SQLITE_IOERR
                   59661:   **     SQLITE_FULL
                   59662:   **     SQLITE_INTERRUPT
                   59663:   **
                   59664:   ** Then the internal cache might have been left in an inconsistent
                   59665:   ** state.  We need to rollback the statement transaction, if there is
                   59666:   ** one, or the complete transaction if there is no statement transaction.
                   59667:   */
                   59668: 
                   59669:   if( p->db->mallocFailed ){
                   59670:     p->rc = SQLITE_NOMEM;
                   59671:   }
                   59672:   closeAllCursors(p);
                   59673:   if( p->magic!=VDBE_MAGIC_RUN ){
                   59674:     return SQLITE_OK;
                   59675:   }
                   59676:   checkActiveVdbeCnt(db);
                   59677: 
                   59678:   /* No commit or rollback needed if the program never started */
                   59679:   if( p->pc>=0 ){
                   59680:     int mrc;   /* Primary error code from p->rc */
                   59681:     int eStatementOp = 0;
                   59682:     int isSpecialError;            /* Set to true if a 'special' error */
                   59683: 
                   59684:     /* Lock all btrees used by the statement */
                   59685:     sqlite3VdbeEnter(p);
                   59686: 
                   59687:     /* Check for one of the special errors */
                   59688:     mrc = p->rc & 0xff;
                   59689:     assert( p->rc!=SQLITE_IOERR_BLOCKED );  /* This error no longer exists */
                   59690:     isSpecialError = mrc==SQLITE_NOMEM || mrc==SQLITE_IOERR
                   59691:                      || mrc==SQLITE_INTERRUPT || mrc==SQLITE_FULL;
                   59692:     if( isSpecialError ){
                   59693:       /* If the query was read-only and the error code is SQLITE_INTERRUPT, 
                   59694:       ** no rollback is necessary. Otherwise, at least a savepoint 
                   59695:       ** transaction must be rolled back to restore the database to a 
                   59696:       ** consistent state.
                   59697:       **
                   59698:       ** Even if the statement is read-only, it is important to perform
                   59699:       ** a statement or transaction rollback operation. If the error 
1.1.1.3 ! misho    59700:       ** occurred while writing to the journal, sub-journal or database
1.1       misho    59701:       ** file as part of an effort to free up cache space (see function
                   59702:       ** pagerStress() in pager.c), the rollback is required to restore 
                   59703:       ** the pager to a consistent state.
                   59704:       */
                   59705:       if( !p->readOnly || mrc!=SQLITE_INTERRUPT ){
                   59706:         if( (mrc==SQLITE_NOMEM || mrc==SQLITE_FULL) && p->usesStmtJournal ){
                   59707:           eStatementOp = SAVEPOINT_ROLLBACK;
                   59708:         }else{
                   59709:           /* We are forced to roll back the active transaction. Before doing
                   59710:           ** so, abort any other statements this handle currently has active.
                   59711:           */
                   59712:           invalidateCursorsOnModifiedBtrees(db);
                   59713:           sqlite3RollbackAll(db);
                   59714:           sqlite3CloseSavepoints(db);
                   59715:           db->autoCommit = 1;
                   59716:         }
                   59717:       }
                   59718:     }
                   59719: 
                   59720:     /* Check for immediate foreign key violations. */
                   59721:     if( p->rc==SQLITE_OK ){
                   59722:       sqlite3VdbeCheckFk(p, 0);
                   59723:     }
                   59724:   
                   59725:     /* If the auto-commit flag is set and this is the only active writer 
                   59726:     ** VM, then we do either a commit or rollback of the current transaction. 
                   59727:     **
                   59728:     ** Note: This block also runs if one of the special errors handled 
                   59729:     ** above has occurred. 
                   59730:     */
                   59731:     if( !sqlite3VtabInSync(db) 
                   59732:      && db->autoCommit 
                   59733:      && db->writeVdbeCnt==(p->readOnly==0) 
                   59734:     ){
                   59735:       if( p->rc==SQLITE_OK || (p->errorAction==OE_Fail && !isSpecialError) ){
                   59736:         rc = sqlite3VdbeCheckFk(p, 1);
                   59737:         if( rc!=SQLITE_OK ){
                   59738:           if( NEVER(p->readOnly) ){
                   59739:             sqlite3VdbeLeave(p);
                   59740:             return SQLITE_ERROR;
                   59741:           }
                   59742:           rc = SQLITE_CONSTRAINT;
                   59743:         }else{ 
                   59744:           /* The auto-commit flag is true, the vdbe program was successful 
                   59745:           ** or hit an 'OR FAIL' constraint and there are no deferred foreign
                   59746:           ** key constraints to hold up the transaction. This means a commit 
                   59747:           ** is required. */
                   59748:           rc = vdbeCommit(db, p);
                   59749:         }
                   59750:         if( rc==SQLITE_BUSY && p->readOnly ){
                   59751:           sqlite3VdbeLeave(p);
                   59752:           return SQLITE_BUSY;
                   59753:         }else if( rc!=SQLITE_OK ){
                   59754:           p->rc = rc;
                   59755:           sqlite3RollbackAll(db);
                   59756:         }else{
                   59757:           db->nDeferredCons = 0;
                   59758:           sqlite3CommitInternalChanges(db);
                   59759:         }
                   59760:       }else{
                   59761:         sqlite3RollbackAll(db);
                   59762:       }
                   59763:       db->nStatement = 0;
                   59764:     }else if( eStatementOp==0 ){
                   59765:       if( p->rc==SQLITE_OK || p->errorAction==OE_Fail ){
                   59766:         eStatementOp = SAVEPOINT_RELEASE;
                   59767:       }else if( p->errorAction==OE_Abort ){
                   59768:         eStatementOp = SAVEPOINT_ROLLBACK;
                   59769:       }else{
                   59770:         invalidateCursorsOnModifiedBtrees(db);
                   59771:         sqlite3RollbackAll(db);
                   59772:         sqlite3CloseSavepoints(db);
                   59773:         db->autoCommit = 1;
                   59774:       }
                   59775:     }
                   59776:   
                   59777:     /* If eStatementOp is non-zero, then a statement transaction needs to
                   59778:     ** be committed or rolled back. Call sqlite3VdbeCloseStatement() to
                   59779:     ** do so. If this operation returns an error, and the current statement
                   59780:     ** error code is SQLITE_OK or SQLITE_CONSTRAINT, then promote the
                   59781:     ** current statement error code.
                   59782:     */
                   59783:     if( eStatementOp ){
                   59784:       rc = sqlite3VdbeCloseStatement(p, eStatementOp);
                   59785:       if( rc ){
                   59786:         if( p->rc==SQLITE_OK || p->rc==SQLITE_CONSTRAINT ){
                   59787:           p->rc = rc;
                   59788:           sqlite3DbFree(db, p->zErrMsg);
                   59789:           p->zErrMsg = 0;
                   59790:         }
                   59791:         invalidateCursorsOnModifiedBtrees(db);
                   59792:         sqlite3RollbackAll(db);
                   59793:         sqlite3CloseSavepoints(db);
                   59794:         db->autoCommit = 1;
                   59795:       }
                   59796:     }
                   59797:   
                   59798:     /* If this was an INSERT, UPDATE or DELETE and no statement transaction
                   59799:     ** has been rolled back, update the database connection change-counter. 
                   59800:     */
                   59801:     if( p->changeCntOn ){
                   59802:       if( eStatementOp!=SAVEPOINT_ROLLBACK ){
                   59803:         sqlite3VdbeSetChanges(db, p->nChange);
                   59804:       }else{
                   59805:         sqlite3VdbeSetChanges(db, 0);
                   59806:       }
                   59807:       p->nChange = 0;
                   59808:     }
                   59809:   
                   59810:     /* Rollback or commit any schema changes that occurred. */
                   59811:     if( p->rc!=SQLITE_OK && db->flags&SQLITE_InternChanges ){
                   59812:       sqlite3ResetInternalSchema(db, -1);
                   59813:       db->flags = (db->flags | SQLITE_InternChanges);
                   59814:     }
                   59815: 
                   59816:     /* Release the locks */
                   59817:     sqlite3VdbeLeave(p);
                   59818:   }
                   59819: 
                   59820:   /* We have successfully halted and closed the VM.  Record this fact. */
                   59821:   if( p->pc>=0 ){
                   59822:     db->activeVdbeCnt--;
                   59823:     if( !p->readOnly ){
                   59824:       db->writeVdbeCnt--;
                   59825:     }
                   59826:     assert( db->activeVdbeCnt>=db->writeVdbeCnt );
                   59827:   }
                   59828:   p->magic = VDBE_MAGIC_HALT;
                   59829:   checkActiveVdbeCnt(db);
                   59830:   if( p->db->mallocFailed ){
                   59831:     p->rc = SQLITE_NOMEM;
                   59832:   }
                   59833: 
                   59834:   /* If the auto-commit flag is set to true, then any locks that were held
                   59835:   ** by connection db have now been released. Call sqlite3ConnectionUnlocked() 
                   59836:   ** to invoke any required unlock-notify callbacks.
                   59837:   */
                   59838:   if( db->autoCommit ){
                   59839:     sqlite3ConnectionUnlocked(db);
                   59840:   }
                   59841: 
                   59842:   assert( db->activeVdbeCnt>0 || db->autoCommit==0 || db->nStatement==0 );
                   59843:   return (p->rc==SQLITE_BUSY ? SQLITE_BUSY : SQLITE_OK);
                   59844: }
                   59845: 
                   59846: 
                   59847: /*
                   59848: ** Each VDBE holds the result of the most recent sqlite3_step() call
                   59849: ** in p->rc.  This routine sets that result back to SQLITE_OK.
                   59850: */
                   59851: SQLITE_PRIVATE void sqlite3VdbeResetStepResult(Vdbe *p){
                   59852:   p->rc = SQLITE_OK;
                   59853: }
                   59854: 
                   59855: /*
                   59856: ** Clean up a VDBE after execution but do not delete the VDBE just yet.
                   59857: ** Write any error messages into *pzErrMsg.  Return the result code.
                   59858: **
                   59859: ** After this routine is run, the VDBE should be ready to be executed
                   59860: ** again.
                   59861: **
                   59862: ** To look at it another way, this routine resets the state of the
                   59863: ** virtual machine from VDBE_MAGIC_RUN or VDBE_MAGIC_HALT back to
                   59864: ** VDBE_MAGIC_INIT.
                   59865: */
                   59866: SQLITE_PRIVATE int sqlite3VdbeReset(Vdbe *p){
                   59867:   sqlite3 *db;
                   59868:   db = p->db;
                   59869: 
                   59870:   /* If the VM did not run to completion or if it encountered an
                   59871:   ** error, then it might not have been halted properly.  So halt
                   59872:   ** it now.
                   59873:   */
                   59874:   sqlite3VdbeHalt(p);
                   59875: 
                   59876:   /* If the VDBE has be run even partially, then transfer the error code
                   59877:   ** and error message from the VDBE into the main database structure.  But
                   59878:   ** if the VDBE has just been set to run but has not actually executed any
                   59879:   ** instructions yet, leave the main database error information unchanged.
                   59880:   */
                   59881:   if( p->pc>=0 ){
                   59882:     if( p->zErrMsg ){
                   59883:       sqlite3BeginBenignMalloc();
                   59884:       sqlite3ValueSetStr(db->pErr,-1,p->zErrMsg,SQLITE_UTF8,SQLITE_TRANSIENT);
                   59885:       sqlite3EndBenignMalloc();
                   59886:       db->errCode = p->rc;
                   59887:       sqlite3DbFree(db, p->zErrMsg);
                   59888:       p->zErrMsg = 0;
                   59889:     }else if( p->rc ){
                   59890:       sqlite3Error(db, p->rc, 0);
                   59891:     }else{
                   59892:       sqlite3Error(db, SQLITE_OK, 0);
                   59893:     }
                   59894:     if( p->runOnlyOnce ) p->expired = 1;
                   59895:   }else if( p->rc && p->expired ){
                   59896:     /* The expired flag was set on the VDBE before the first call
                   59897:     ** to sqlite3_step(). For consistency (since sqlite3_step() was
                   59898:     ** called), set the database error in this case as well.
                   59899:     */
                   59900:     sqlite3Error(db, p->rc, 0);
                   59901:     sqlite3ValueSetStr(db->pErr, -1, p->zErrMsg, SQLITE_UTF8, SQLITE_TRANSIENT);
                   59902:     sqlite3DbFree(db, p->zErrMsg);
                   59903:     p->zErrMsg = 0;
                   59904:   }
                   59905: 
                   59906:   /* Reclaim all memory used by the VDBE
                   59907:   */
                   59908:   Cleanup(p);
                   59909: 
                   59910:   /* Save profiling information from this VDBE run.
                   59911:   */
                   59912: #ifdef VDBE_PROFILE
                   59913:   {
                   59914:     FILE *out = fopen("vdbe_profile.out", "a");
                   59915:     if( out ){
                   59916:       int i;
                   59917:       fprintf(out, "---- ");
                   59918:       for(i=0; i<p->nOp; i++){
                   59919:         fprintf(out, "%02x", p->aOp[i].opcode);
                   59920:       }
                   59921:       fprintf(out, "\n");
                   59922:       for(i=0; i<p->nOp; i++){
                   59923:         fprintf(out, "%6d %10lld %8lld ",
                   59924:            p->aOp[i].cnt,
                   59925:            p->aOp[i].cycles,
                   59926:            p->aOp[i].cnt>0 ? p->aOp[i].cycles/p->aOp[i].cnt : 0
                   59927:         );
                   59928:         sqlite3VdbePrintOp(out, i, &p->aOp[i]);
                   59929:       }
                   59930:       fclose(out);
                   59931:     }
                   59932:   }
                   59933: #endif
                   59934:   p->magic = VDBE_MAGIC_INIT;
                   59935:   return p->rc & db->errMask;
                   59936: }
                   59937:  
                   59938: /*
                   59939: ** Clean up and delete a VDBE after execution.  Return an integer which is
                   59940: ** the result code.  Write any error message text into *pzErrMsg.
                   59941: */
                   59942: SQLITE_PRIVATE int sqlite3VdbeFinalize(Vdbe *p){
                   59943:   int rc = SQLITE_OK;
                   59944:   if( p->magic==VDBE_MAGIC_RUN || p->magic==VDBE_MAGIC_HALT ){
                   59945:     rc = sqlite3VdbeReset(p);
                   59946:     assert( (rc & p->db->errMask)==rc );
                   59947:   }
                   59948:   sqlite3VdbeDelete(p);
                   59949:   return rc;
                   59950: }
                   59951: 
                   59952: /*
                   59953: ** Call the destructor for each auxdata entry in pVdbeFunc for which
                   59954: ** the corresponding bit in mask is clear.  Auxdata entries beyond 31
                   59955: ** are always destroyed.  To destroy all auxdata entries, call this
                   59956: ** routine with mask==0.
                   59957: */
                   59958: SQLITE_PRIVATE void sqlite3VdbeDeleteAuxData(VdbeFunc *pVdbeFunc, int mask){
                   59959:   int i;
                   59960:   for(i=0; i<pVdbeFunc->nAux; i++){
                   59961:     struct AuxData *pAux = &pVdbeFunc->apAux[i];
                   59962:     if( (i>31 || !(mask&(((u32)1)<<i))) && pAux->pAux ){
                   59963:       if( pAux->xDelete ){
                   59964:         pAux->xDelete(pAux->pAux);
                   59965:       }
                   59966:       pAux->pAux = 0;
                   59967:     }
                   59968:   }
                   59969: }
                   59970: 
                   59971: /*
                   59972: ** Free all memory associated with the Vdbe passed as the second argument.
                   59973: ** The difference between this function and sqlite3VdbeDelete() is that
                   59974: ** VdbeDelete() also unlinks the Vdbe from the list of VMs associated with
                   59975: ** the database connection.
                   59976: */
                   59977: SQLITE_PRIVATE void sqlite3VdbeDeleteObject(sqlite3 *db, Vdbe *p){
                   59978:   SubProgram *pSub, *pNext;
                   59979:   int i;
                   59980:   assert( p->db==0 || p->db==db );
                   59981:   releaseMemArray(p->aVar, p->nVar);
                   59982:   releaseMemArray(p->aColName, p->nResColumn*COLNAME_N);
                   59983:   for(pSub=p->pProgram; pSub; pSub=pNext){
                   59984:     pNext = pSub->pNext;
                   59985:     vdbeFreeOpArray(db, pSub->aOp, pSub->nOp);
                   59986:     sqlite3DbFree(db, pSub);
                   59987:   }
                   59988:   for(i=p->nzVar-1; i>=0; i--) sqlite3DbFree(db, p->azVar[i]);
                   59989:   vdbeFreeOpArray(db, p->aOp, p->nOp);
                   59990:   sqlite3DbFree(db, p->aLabel);
                   59991:   sqlite3DbFree(db, p->aColName);
                   59992:   sqlite3DbFree(db, p->zSql);
                   59993:   sqlite3DbFree(db, p->pFree);
                   59994:   sqlite3DbFree(db, p);
                   59995: }
                   59996: 
                   59997: /*
                   59998: ** Delete an entire VDBE.
                   59999: */
                   60000: SQLITE_PRIVATE void sqlite3VdbeDelete(Vdbe *p){
                   60001:   sqlite3 *db;
                   60002: 
                   60003:   if( NEVER(p==0) ) return;
                   60004:   db = p->db;
                   60005:   if( p->pPrev ){
                   60006:     p->pPrev->pNext = p->pNext;
                   60007:   }else{
                   60008:     assert( db->pVdbe==p );
                   60009:     db->pVdbe = p->pNext;
                   60010:   }
                   60011:   if( p->pNext ){
                   60012:     p->pNext->pPrev = p->pPrev;
                   60013:   }
                   60014:   p->magic = VDBE_MAGIC_DEAD;
                   60015:   p->db = 0;
                   60016:   sqlite3VdbeDeleteObject(db, p);
                   60017: }
                   60018: 
                   60019: /*
                   60020: ** Make sure the cursor p is ready to read or write the row to which it
                   60021: ** was last positioned.  Return an error code if an OOM fault or I/O error
                   60022: ** prevents us from positioning the cursor to its correct position.
                   60023: **
                   60024: ** If a MoveTo operation is pending on the given cursor, then do that
                   60025: ** MoveTo now.  If no move is pending, check to see if the row has been
                   60026: ** deleted out from under the cursor and if it has, mark the row as
                   60027: ** a NULL row.
                   60028: **
                   60029: ** If the cursor is already pointing to the correct row and that row has
                   60030: ** not been deleted out from under the cursor, then this routine is a no-op.
                   60031: */
                   60032: SQLITE_PRIVATE int sqlite3VdbeCursorMoveto(VdbeCursor *p){
                   60033:   if( p->deferredMoveto ){
                   60034:     int res, rc;
                   60035: #ifdef SQLITE_TEST
                   60036:     extern int sqlite3_search_count;
                   60037: #endif
                   60038:     assert( p->isTable );
                   60039:     rc = sqlite3BtreeMovetoUnpacked(p->pCursor, 0, p->movetoTarget, 0, &res);
                   60040:     if( rc ) return rc;
                   60041:     p->lastRowid = p->movetoTarget;
                   60042:     if( res!=0 ) return SQLITE_CORRUPT_BKPT;
                   60043:     p->rowidIsValid = 1;
                   60044: #ifdef SQLITE_TEST
                   60045:     sqlite3_search_count++;
                   60046: #endif
                   60047:     p->deferredMoveto = 0;
                   60048:     p->cacheStatus = CACHE_STALE;
                   60049:   }else if( ALWAYS(p->pCursor) ){
                   60050:     int hasMoved;
                   60051:     int rc = sqlite3BtreeCursorHasMoved(p->pCursor, &hasMoved);
                   60052:     if( rc ) return rc;
                   60053:     if( hasMoved ){
                   60054:       p->cacheStatus = CACHE_STALE;
                   60055:       p->nullRow = 1;
                   60056:     }
                   60057:   }
                   60058:   return SQLITE_OK;
                   60059: }
                   60060: 
                   60061: /*
                   60062: ** The following functions:
                   60063: **
                   60064: ** sqlite3VdbeSerialType()
                   60065: ** sqlite3VdbeSerialTypeLen()
                   60066: ** sqlite3VdbeSerialLen()
                   60067: ** sqlite3VdbeSerialPut()
                   60068: ** sqlite3VdbeSerialGet()
                   60069: **
                   60070: ** encapsulate the code that serializes values for storage in SQLite
                   60071: ** data and index records. Each serialized value consists of a
                   60072: ** 'serial-type' and a blob of data. The serial type is an 8-byte unsigned
                   60073: ** integer, stored as a varint.
                   60074: **
                   60075: ** In an SQLite index record, the serial type is stored directly before
                   60076: ** the blob of data that it corresponds to. In a table record, all serial
                   60077: ** types are stored at the start of the record, and the blobs of data at
                   60078: ** the end. Hence these functions allow the caller to handle the
1.1.1.3 ! misho    60079: ** serial-type and data blob separately.
1.1       misho    60080: **
                   60081: ** The following table describes the various storage classes for data:
                   60082: **
                   60083: **   serial type        bytes of data      type
                   60084: **   --------------     ---------------    ---------------
                   60085: **      0                     0            NULL
                   60086: **      1                     1            signed integer
                   60087: **      2                     2            signed integer
                   60088: **      3                     3            signed integer
                   60089: **      4                     4            signed integer
                   60090: **      5                     6            signed integer
                   60091: **      6                     8            signed integer
                   60092: **      7                     8            IEEE float
                   60093: **      8                     0            Integer constant 0
                   60094: **      9                     0            Integer constant 1
                   60095: **     10,11                               reserved for expansion
                   60096: **    N>=12 and even       (N-12)/2        BLOB
                   60097: **    N>=13 and odd        (N-13)/2        text
                   60098: **
                   60099: ** The 8 and 9 types were added in 3.3.0, file format 4.  Prior versions
                   60100: ** of SQLite will not understand those serial types.
                   60101: */
                   60102: 
                   60103: /*
                   60104: ** Return the serial-type for the value stored in pMem.
                   60105: */
                   60106: SQLITE_PRIVATE u32 sqlite3VdbeSerialType(Mem *pMem, int file_format){
                   60107:   int flags = pMem->flags;
                   60108:   int n;
                   60109: 
                   60110:   if( flags&MEM_Null ){
                   60111:     return 0;
                   60112:   }
                   60113:   if( flags&MEM_Int ){
                   60114:     /* Figure out whether to use 1, 2, 4, 6 or 8 bytes. */
                   60115: #   define MAX_6BYTE ((((i64)0x00008000)<<32)-1)
                   60116:     i64 i = pMem->u.i;
                   60117:     u64 u;
                   60118:     if( file_format>=4 && (i&1)==i ){
                   60119:       return 8+(u32)i;
                   60120:     }
                   60121:     if( i<0 ){
                   60122:       if( i<(-MAX_6BYTE) ) return 6;
                   60123:       /* Previous test prevents:  u = -(-9223372036854775808) */
                   60124:       u = -i;
                   60125:     }else{
                   60126:       u = i;
                   60127:     }
                   60128:     if( u<=127 ) return 1;
                   60129:     if( u<=32767 ) return 2;
                   60130:     if( u<=8388607 ) return 3;
                   60131:     if( u<=2147483647 ) return 4;
                   60132:     if( u<=MAX_6BYTE ) return 5;
                   60133:     return 6;
                   60134:   }
                   60135:   if( flags&MEM_Real ){
                   60136:     return 7;
                   60137:   }
                   60138:   assert( pMem->db->mallocFailed || flags&(MEM_Str|MEM_Blob) );
                   60139:   n = pMem->n;
                   60140:   if( flags & MEM_Zero ){
                   60141:     n += pMem->u.nZero;
                   60142:   }
                   60143:   assert( n>=0 );
                   60144:   return ((n*2) + 12 + ((flags&MEM_Str)!=0));
                   60145: }
                   60146: 
                   60147: /*
                   60148: ** Return the length of the data corresponding to the supplied serial-type.
                   60149: */
                   60150: SQLITE_PRIVATE u32 sqlite3VdbeSerialTypeLen(u32 serial_type){
                   60151:   if( serial_type>=12 ){
                   60152:     return (serial_type-12)/2;
                   60153:   }else{
                   60154:     static const u8 aSize[] = { 0, 1, 2, 3, 4, 6, 8, 8, 0, 0, 0, 0 };
                   60155:     return aSize[serial_type];
                   60156:   }
                   60157: }
                   60158: 
                   60159: /*
                   60160: ** If we are on an architecture with mixed-endian floating 
                   60161: ** points (ex: ARM7) then swap the lower 4 bytes with the 
                   60162: ** upper 4 bytes.  Return the result.
                   60163: **
                   60164: ** For most architectures, this is a no-op.
                   60165: **
                   60166: ** (later):  It is reported to me that the mixed-endian problem
                   60167: ** on ARM7 is an issue with GCC, not with the ARM7 chip.  It seems
                   60168: ** that early versions of GCC stored the two words of a 64-bit
                   60169: ** float in the wrong order.  And that error has been propagated
                   60170: ** ever since.  The blame is not necessarily with GCC, though.
                   60171: ** GCC might have just copying the problem from a prior compiler.
                   60172: ** I am also told that newer versions of GCC that follow a different
                   60173: ** ABI get the byte order right.
                   60174: **
                   60175: ** Developers using SQLite on an ARM7 should compile and run their
                   60176: ** application using -DSQLITE_DEBUG=1 at least once.  With DEBUG
                   60177: ** enabled, some asserts below will ensure that the byte order of
                   60178: ** floating point values is correct.
                   60179: **
                   60180: ** (2007-08-30)  Frank van Vugt has studied this problem closely
                   60181: ** and has send his findings to the SQLite developers.  Frank
                   60182: ** writes that some Linux kernels offer floating point hardware
                   60183: ** emulation that uses only 32-bit mantissas instead of a full 
                   60184: ** 48-bits as required by the IEEE standard.  (This is the
                   60185: ** CONFIG_FPE_FASTFPE option.)  On such systems, floating point
                   60186: ** byte swapping becomes very complicated.  To avoid problems,
                   60187: ** the necessary byte swapping is carried out using a 64-bit integer
                   60188: ** rather than a 64-bit float.  Frank assures us that the code here
                   60189: ** works for him.  We, the developers, have no way to independently
                   60190: ** verify this, but Frank seems to know what he is talking about
                   60191: ** so we trust him.
                   60192: */
                   60193: #ifdef SQLITE_MIXED_ENDIAN_64BIT_FLOAT
                   60194: static u64 floatSwap(u64 in){
                   60195:   union {
                   60196:     u64 r;
                   60197:     u32 i[2];
                   60198:   } u;
                   60199:   u32 t;
                   60200: 
                   60201:   u.r = in;
                   60202:   t = u.i[0];
                   60203:   u.i[0] = u.i[1];
                   60204:   u.i[1] = t;
                   60205:   return u.r;
                   60206: }
                   60207: # define swapMixedEndianFloat(X)  X = floatSwap(X)
                   60208: #else
                   60209: # define swapMixedEndianFloat(X)
                   60210: #endif
                   60211: 
                   60212: /*
                   60213: ** Write the serialized data blob for the value stored in pMem into 
                   60214: ** buf. It is assumed that the caller has allocated sufficient space.
                   60215: ** Return the number of bytes written.
                   60216: **
                   60217: ** nBuf is the amount of space left in buf[].  nBuf must always be
                   60218: ** large enough to hold the entire field.  Except, if the field is
                   60219: ** a blob with a zero-filled tail, then buf[] might be just the right
                   60220: ** size to hold everything except for the zero-filled tail.  If buf[]
                   60221: ** is only big enough to hold the non-zero prefix, then only write that
                   60222: ** prefix into buf[].  But if buf[] is large enough to hold both the
                   60223: ** prefix and the tail then write the prefix and set the tail to all
                   60224: ** zeros.
                   60225: **
                   60226: ** Return the number of bytes actually written into buf[].  The number
                   60227: ** of bytes in the zero-filled tail is included in the return value only
                   60228: ** if those bytes were zeroed in buf[].
                   60229: */ 
                   60230: SQLITE_PRIVATE u32 sqlite3VdbeSerialPut(u8 *buf, int nBuf, Mem *pMem, int file_format){
                   60231:   u32 serial_type = sqlite3VdbeSerialType(pMem, file_format);
                   60232:   u32 len;
                   60233: 
                   60234:   /* Integer and Real */
                   60235:   if( serial_type<=7 && serial_type>0 ){
                   60236:     u64 v;
                   60237:     u32 i;
                   60238:     if( serial_type==7 ){
                   60239:       assert( sizeof(v)==sizeof(pMem->r) );
                   60240:       memcpy(&v, &pMem->r, sizeof(v));
                   60241:       swapMixedEndianFloat(v);
                   60242:     }else{
                   60243:       v = pMem->u.i;
                   60244:     }
                   60245:     len = i = sqlite3VdbeSerialTypeLen(serial_type);
                   60246:     assert( len<=(u32)nBuf );
                   60247:     while( i-- ){
                   60248:       buf[i] = (u8)(v&0xFF);
                   60249:       v >>= 8;
                   60250:     }
                   60251:     return len;
                   60252:   }
                   60253: 
                   60254:   /* String or blob */
                   60255:   if( serial_type>=12 ){
                   60256:     assert( pMem->n + ((pMem->flags & MEM_Zero)?pMem->u.nZero:0)
                   60257:              == (int)sqlite3VdbeSerialTypeLen(serial_type) );
                   60258:     assert( pMem->n<=nBuf );
                   60259:     len = pMem->n;
                   60260:     memcpy(buf, pMem->z, len);
                   60261:     if( pMem->flags & MEM_Zero ){
                   60262:       len += pMem->u.nZero;
                   60263:       assert( nBuf>=0 );
                   60264:       if( len > (u32)nBuf ){
                   60265:         len = (u32)nBuf;
                   60266:       }
                   60267:       memset(&buf[pMem->n], 0, len-pMem->n);
                   60268:     }
                   60269:     return len;
                   60270:   }
                   60271: 
                   60272:   /* NULL or constants 0 or 1 */
                   60273:   return 0;
                   60274: }
                   60275: 
                   60276: /*
                   60277: ** Deserialize the data blob pointed to by buf as serial type serial_type
                   60278: ** and store the result in pMem.  Return the number of bytes read.
                   60279: */ 
                   60280: SQLITE_PRIVATE u32 sqlite3VdbeSerialGet(
                   60281:   const unsigned char *buf,     /* Buffer to deserialize from */
                   60282:   u32 serial_type,              /* Serial type to deserialize */
                   60283:   Mem *pMem                     /* Memory cell to write value into */
                   60284: ){
                   60285:   switch( serial_type ){
                   60286:     case 10:   /* Reserved for future use */
                   60287:     case 11:   /* Reserved for future use */
                   60288:     case 0: {  /* NULL */
                   60289:       pMem->flags = MEM_Null;
                   60290:       break;
                   60291:     }
                   60292:     case 1: { /* 1-byte signed integer */
                   60293:       pMem->u.i = (signed char)buf[0];
                   60294:       pMem->flags = MEM_Int;
                   60295:       return 1;
                   60296:     }
                   60297:     case 2: { /* 2-byte signed integer */
                   60298:       pMem->u.i = (((signed char)buf[0])<<8) | buf[1];
                   60299:       pMem->flags = MEM_Int;
                   60300:       return 2;
                   60301:     }
                   60302:     case 3: { /* 3-byte signed integer */
                   60303:       pMem->u.i = (((signed char)buf[0])<<16) | (buf[1]<<8) | buf[2];
                   60304:       pMem->flags = MEM_Int;
                   60305:       return 3;
                   60306:     }
                   60307:     case 4: { /* 4-byte signed integer */
                   60308:       pMem->u.i = (buf[0]<<24) | (buf[1]<<16) | (buf[2]<<8) | buf[3];
                   60309:       pMem->flags = MEM_Int;
                   60310:       return 4;
                   60311:     }
                   60312:     case 5: { /* 6-byte signed integer */
                   60313:       u64 x = (((signed char)buf[0])<<8) | buf[1];
                   60314:       u32 y = (buf[2]<<24) | (buf[3]<<16) | (buf[4]<<8) | buf[5];
                   60315:       x = (x<<32) | y;
                   60316:       pMem->u.i = *(i64*)&x;
                   60317:       pMem->flags = MEM_Int;
                   60318:       return 6;
                   60319:     }
                   60320:     case 6:   /* 8-byte signed integer */
                   60321:     case 7: { /* IEEE floating point */
                   60322:       u64 x;
                   60323:       u32 y;
                   60324: #if !defined(NDEBUG) && !defined(SQLITE_OMIT_FLOATING_POINT)
                   60325:       /* Verify that integers and floating point values use the same
                   60326:       ** byte order.  Or, that if SQLITE_MIXED_ENDIAN_64BIT_FLOAT is
                   60327:       ** defined that 64-bit floating point values really are mixed
                   60328:       ** endian.
                   60329:       */
                   60330:       static const u64 t1 = ((u64)0x3ff00000)<<32;
                   60331:       static const double r1 = 1.0;
                   60332:       u64 t2 = t1;
                   60333:       swapMixedEndianFloat(t2);
                   60334:       assert( sizeof(r1)==sizeof(t2) && memcmp(&r1, &t2, sizeof(r1))==0 );
                   60335: #endif
                   60336: 
                   60337:       x = (buf[0]<<24) | (buf[1]<<16) | (buf[2]<<8) | buf[3];
                   60338:       y = (buf[4]<<24) | (buf[5]<<16) | (buf[6]<<8) | buf[7];
                   60339:       x = (x<<32) | y;
                   60340:       if( serial_type==6 ){
                   60341:         pMem->u.i = *(i64*)&x;
                   60342:         pMem->flags = MEM_Int;
                   60343:       }else{
                   60344:         assert( sizeof(x)==8 && sizeof(pMem->r)==8 );
                   60345:         swapMixedEndianFloat(x);
                   60346:         memcpy(&pMem->r, &x, sizeof(x));
                   60347:         pMem->flags = sqlite3IsNaN(pMem->r) ? MEM_Null : MEM_Real;
                   60348:       }
                   60349:       return 8;
                   60350:     }
                   60351:     case 8:    /* Integer 0 */
                   60352:     case 9: {  /* Integer 1 */
                   60353:       pMem->u.i = serial_type-8;
                   60354:       pMem->flags = MEM_Int;
                   60355:       return 0;
                   60356:     }
                   60357:     default: {
                   60358:       u32 len = (serial_type-12)/2;
                   60359:       pMem->z = (char *)buf;
                   60360:       pMem->n = len;
                   60361:       pMem->xDel = 0;
                   60362:       if( serial_type&0x01 ){
                   60363:         pMem->flags = MEM_Str | MEM_Ephem;
                   60364:       }else{
                   60365:         pMem->flags = MEM_Blob | MEM_Ephem;
                   60366:       }
                   60367:       return len;
                   60368:     }
                   60369:   }
                   60370:   return 0;
                   60371: }
                   60372: 
                   60373: 
                   60374: /*
                   60375: ** Given the nKey-byte encoding of a record in pKey[], parse the
                   60376: ** record into a UnpackedRecord structure.  Return a pointer to
                   60377: ** that structure.
                   60378: **
                   60379: ** The calling function might provide szSpace bytes of memory
                   60380: ** space at pSpace.  This space can be used to hold the returned
                   60381: ** VDbeParsedRecord structure if it is large enough.  If it is
                   60382: ** not big enough, space is obtained from sqlite3_malloc().
                   60383: **
                   60384: ** The returned structure should be closed by a call to
                   60385: ** sqlite3VdbeDeleteUnpackedRecord().
                   60386: */ 
                   60387: SQLITE_PRIVATE UnpackedRecord *sqlite3VdbeRecordUnpack(
                   60388:   KeyInfo *pKeyInfo,     /* Information about the record format */
                   60389:   int nKey,              /* Size of the binary record */
                   60390:   const void *pKey,      /* The binary record */
                   60391:   char *pSpace,          /* Unaligned space available to hold the object */
                   60392:   int szSpace            /* Size of pSpace[] in bytes */
                   60393: ){
                   60394:   const unsigned char *aKey = (const unsigned char *)pKey;
                   60395:   UnpackedRecord *p;  /* The unpacked record that we will return */
                   60396:   int nByte;          /* Memory space needed to hold p, in bytes */
                   60397:   int d;
                   60398:   u32 idx;
                   60399:   u16 u;              /* Unsigned loop counter */
                   60400:   u32 szHdr;
                   60401:   Mem *pMem;
                   60402:   int nOff;           /* Increase pSpace by this much to 8-byte align it */
                   60403:   
                   60404:   /*
                   60405:   ** We want to shift the pointer pSpace up such that it is 8-byte aligned.
                   60406:   ** Thus, we need to calculate a value, nOff, between 0 and 7, to shift 
                   60407:   ** it by.  If pSpace is already 8-byte aligned, nOff should be zero.
                   60408:   */
                   60409:   nOff = (8 - (SQLITE_PTR_TO_INT(pSpace) & 7)) & 7;
                   60410:   pSpace += nOff;
                   60411:   szSpace -= nOff;
                   60412:   nByte = ROUND8(sizeof(UnpackedRecord)) + sizeof(Mem)*(pKeyInfo->nField+1);
                   60413:   if( nByte>szSpace ){
                   60414:     p = sqlite3DbMallocRaw(pKeyInfo->db, nByte);
                   60415:     if( p==0 ) return 0;
                   60416:     p->flags = UNPACKED_NEED_FREE | UNPACKED_NEED_DESTROY;
                   60417:   }else{
                   60418:     p = (UnpackedRecord*)pSpace;
                   60419:     p->flags = UNPACKED_NEED_DESTROY;
                   60420:   }
                   60421:   p->pKeyInfo = pKeyInfo;
                   60422:   p->nField = pKeyInfo->nField + 1;
                   60423:   p->aMem = pMem = (Mem*)&((char*)p)[ROUND8(sizeof(UnpackedRecord))];
                   60424:   assert( EIGHT_BYTE_ALIGNMENT(pMem) );
                   60425:   idx = getVarint32(aKey, szHdr);
                   60426:   d = szHdr;
                   60427:   u = 0;
                   60428:   while( idx<szHdr && u<p->nField && d<=nKey ){
                   60429:     u32 serial_type;
                   60430: 
                   60431:     idx += getVarint32(&aKey[idx], serial_type);
                   60432:     pMem->enc = pKeyInfo->enc;
                   60433:     pMem->db = pKeyInfo->db;
                   60434:     /* pMem->flags = 0; // sqlite3VdbeSerialGet() will set this for us */
                   60435:     pMem->zMalloc = 0;
                   60436:     d += sqlite3VdbeSerialGet(&aKey[d], serial_type, pMem);
                   60437:     pMem++;
                   60438:     u++;
                   60439:   }
                   60440:   assert( u<=pKeyInfo->nField + 1 );
                   60441:   p->nField = u;
                   60442:   return (void*)p;
                   60443: }
                   60444: 
                   60445: /*
                   60446: ** This routine destroys a UnpackedRecord object.
                   60447: */
                   60448: SQLITE_PRIVATE void sqlite3VdbeDeleteUnpackedRecord(UnpackedRecord *p){
                   60449: #ifdef SQLITE_DEBUG
                   60450:   int i;
                   60451:   Mem *pMem;
                   60452: 
                   60453:   assert( p!=0 );
                   60454:   assert( p->flags & UNPACKED_NEED_DESTROY );
                   60455:   for(i=0, pMem=p->aMem; i<p->nField; i++, pMem++){
                   60456:     /* The unpacked record is always constructed by the
                   60457:     ** sqlite3VdbeUnpackRecord() function above, which makes all
                   60458:     ** strings and blobs static.  And none of the elements are
                   60459:     ** ever transformed, so there is never anything to delete.
                   60460:     */
                   60461:     if( NEVER(pMem->zMalloc) ) sqlite3VdbeMemRelease(pMem);
                   60462:   }
                   60463: #endif
                   60464:   if( p->flags & UNPACKED_NEED_FREE ){
                   60465:     sqlite3DbFree(p->pKeyInfo->db, p);
                   60466:   }
                   60467: }
                   60468: 
                   60469: /*
                   60470: ** This function compares the two table rows or index records
                   60471: ** specified by {nKey1, pKey1} and pPKey2.  It returns a negative, zero
                   60472: ** or positive integer if key1 is less than, equal to or 
                   60473: ** greater than key2.  The {nKey1, pKey1} key must be a blob
                   60474: ** created by th OP_MakeRecord opcode of the VDBE.  The pPKey2
                   60475: ** key must be a parsed key such as obtained from
                   60476: ** sqlite3VdbeParseRecord.
                   60477: **
                   60478: ** Key1 and Key2 do not have to contain the same number of fields.
                   60479: ** The key with fewer fields is usually compares less than the 
                   60480: ** longer key.  However if the UNPACKED_INCRKEY flags in pPKey2 is set
                   60481: ** and the common prefixes are equal, then key1 is less than key2.
                   60482: ** Or if the UNPACKED_MATCH_PREFIX flag is set and the prefixes are
                   60483: ** equal, then the keys are considered to be equal and
                   60484: ** the parts beyond the common prefix are ignored.
                   60485: **
                   60486: ** If the UNPACKED_IGNORE_ROWID flag is set, then the last byte of
                   60487: ** the header of pKey1 is ignored.  It is assumed that pKey1 is
                   60488: ** an index key, and thus ends with a rowid value.  The last byte
                   60489: ** of the header will therefore be the serial type of the rowid:
                   60490: ** one of 1, 2, 3, 4, 5, 6, 8, or 9 - the integer serial types.
                   60491: ** The serial type of the final rowid will always be a single byte.
                   60492: ** By ignoring this last byte of the header, we force the comparison
                   60493: ** to ignore the rowid at the end of key1.
                   60494: */
                   60495: SQLITE_PRIVATE int sqlite3VdbeRecordCompare(
                   60496:   int nKey1, const void *pKey1, /* Left key */
                   60497:   UnpackedRecord *pPKey2        /* Right key */
                   60498: ){
                   60499:   int d1;            /* Offset into aKey[] of next data element */
                   60500:   u32 idx1;          /* Offset into aKey[] of next header element */
                   60501:   u32 szHdr1;        /* Number of bytes in header */
                   60502:   int i = 0;
                   60503:   int nField;
                   60504:   int rc = 0;
                   60505:   const unsigned char *aKey1 = (const unsigned char *)pKey1;
                   60506:   KeyInfo *pKeyInfo;
                   60507:   Mem mem1;
                   60508: 
                   60509:   pKeyInfo = pPKey2->pKeyInfo;
                   60510:   mem1.enc = pKeyInfo->enc;
                   60511:   mem1.db = pKeyInfo->db;
                   60512:   /* mem1.flags = 0;  // Will be initialized by sqlite3VdbeSerialGet() */
                   60513:   VVA_ONLY( mem1.zMalloc = 0; ) /* Only needed by assert() statements */
                   60514: 
                   60515:   /* Compilers may complain that mem1.u.i is potentially uninitialized.
                   60516:   ** We could initialize it, as shown here, to silence those complaints.
                   60517:   ** But in fact, mem1.u.i will never actually be used uninitialized, and doing 
                   60518:   ** the unnecessary initialization has a measurable negative performance
                   60519:   ** impact, since this routine is a very high runner.  And so, we choose
                   60520:   ** to ignore the compiler warnings and leave this variable uninitialized.
                   60521:   */
                   60522:   /*  mem1.u.i = 0;  // not needed, here to silence compiler warning */
                   60523:   
                   60524:   idx1 = getVarint32(aKey1, szHdr1);
                   60525:   d1 = szHdr1;
                   60526:   if( pPKey2->flags & UNPACKED_IGNORE_ROWID ){
                   60527:     szHdr1--;
                   60528:   }
                   60529:   nField = pKeyInfo->nField;
                   60530:   while( idx1<szHdr1 && i<pPKey2->nField ){
                   60531:     u32 serial_type1;
                   60532: 
                   60533:     /* Read the serial types for the next element in each key. */
                   60534:     idx1 += getVarint32( aKey1+idx1, serial_type1 );
                   60535:     if( d1>=nKey1 && sqlite3VdbeSerialTypeLen(serial_type1)>0 ) break;
                   60536: 
                   60537:     /* Extract the values to be compared.
                   60538:     */
                   60539:     d1 += sqlite3VdbeSerialGet(&aKey1[d1], serial_type1, &mem1);
                   60540: 
                   60541:     /* Do the comparison
                   60542:     */
                   60543:     rc = sqlite3MemCompare(&mem1, &pPKey2->aMem[i],
                   60544:                            i<nField ? pKeyInfo->aColl[i] : 0);
                   60545:     if( rc!=0 ){
                   60546:       assert( mem1.zMalloc==0 );  /* See comment below */
                   60547: 
                   60548:       /* Invert the result if we are using DESC sort order. */
                   60549:       if( pKeyInfo->aSortOrder && i<nField && pKeyInfo->aSortOrder[i] ){
                   60550:         rc = -rc;
                   60551:       }
                   60552:     
                   60553:       /* If the PREFIX_SEARCH flag is set and all fields except the final
                   60554:       ** rowid field were equal, then clear the PREFIX_SEARCH flag and set 
                   60555:       ** pPKey2->rowid to the value of the rowid field in (pKey1, nKey1).
                   60556:       ** This is used by the OP_IsUnique opcode.
                   60557:       */
                   60558:       if( (pPKey2->flags & UNPACKED_PREFIX_SEARCH) && i==(pPKey2->nField-1) ){
                   60559:         assert( idx1==szHdr1 && rc );
                   60560:         assert( mem1.flags & MEM_Int );
                   60561:         pPKey2->flags &= ~UNPACKED_PREFIX_SEARCH;
                   60562:         pPKey2->rowid = mem1.u.i;
                   60563:       }
                   60564:     
                   60565:       return rc;
                   60566:     }
                   60567:     i++;
                   60568:   }
                   60569: 
                   60570:   /* No memory allocation is ever used on mem1.  Prove this using
                   60571:   ** the following assert().  If the assert() fails, it indicates a
                   60572:   ** memory leak and a need to call sqlite3VdbeMemRelease(&mem1).
                   60573:   */
                   60574:   assert( mem1.zMalloc==0 );
                   60575: 
                   60576:   /* rc==0 here means that one of the keys ran out of fields and
                   60577:   ** all the fields up to that point were equal. If the UNPACKED_INCRKEY
                   60578:   ** flag is set, then break the tie by treating key2 as larger.
                   60579:   ** If the UPACKED_PREFIX_MATCH flag is set, then keys with common prefixes
                   60580:   ** are considered to be equal.  Otherwise, the longer key is the 
                   60581:   ** larger.  As it happens, the pPKey2 will always be the longer
                   60582:   ** if there is a difference.
                   60583:   */
                   60584:   assert( rc==0 );
                   60585:   if( pPKey2->flags & UNPACKED_INCRKEY ){
                   60586:     rc = -1;
                   60587:   }else if( pPKey2->flags & UNPACKED_PREFIX_MATCH ){
                   60588:     /* Leave rc==0 */
                   60589:   }else if( idx1<szHdr1 ){
                   60590:     rc = 1;
                   60591:   }
                   60592:   return rc;
                   60593: }
                   60594:  
                   60595: 
                   60596: /*
                   60597: ** pCur points at an index entry created using the OP_MakeRecord opcode.
                   60598: ** Read the rowid (the last field in the record) and store it in *rowid.
                   60599: ** Return SQLITE_OK if everything works, or an error code otherwise.
                   60600: **
                   60601: ** pCur might be pointing to text obtained from a corrupt database file.
                   60602: ** So the content cannot be trusted.  Do appropriate checks on the content.
                   60603: */
                   60604: SQLITE_PRIVATE int sqlite3VdbeIdxRowid(sqlite3 *db, BtCursor *pCur, i64 *rowid){
                   60605:   i64 nCellKey = 0;
                   60606:   int rc;
                   60607:   u32 szHdr;        /* Size of the header */
                   60608:   u32 typeRowid;    /* Serial type of the rowid */
                   60609:   u32 lenRowid;     /* Size of the rowid */
                   60610:   Mem m, v;
                   60611: 
                   60612:   UNUSED_PARAMETER(db);
                   60613: 
                   60614:   /* Get the size of the index entry.  Only indices entries of less
                   60615:   ** than 2GiB are support - anything large must be database corruption.
                   60616:   ** Any corruption is detected in sqlite3BtreeParseCellPtr(), though, so
                   60617:   ** this code can safely assume that nCellKey is 32-bits  
                   60618:   */
                   60619:   assert( sqlite3BtreeCursorIsValid(pCur) );
                   60620:   rc = sqlite3BtreeKeySize(pCur, &nCellKey);
                   60621:   assert( rc==SQLITE_OK );     /* pCur is always valid so KeySize cannot fail */
                   60622:   assert( (nCellKey & SQLITE_MAX_U32)==(u64)nCellKey );
                   60623: 
                   60624:   /* Read in the complete content of the index entry */
                   60625:   memset(&m, 0, sizeof(m));
                   60626:   rc = sqlite3VdbeMemFromBtree(pCur, 0, (int)nCellKey, 1, &m);
                   60627:   if( rc ){
                   60628:     return rc;
                   60629:   }
                   60630: 
                   60631:   /* The index entry must begin with a header size */
                   60632:   (void)getVarint32((u8*)m.z, szHdr);
                   60633:   testcase( szHdr==3 );
                   60634:   testcase( szHdr==m.n );
                   60635:   if( unlikely(szHdr<3 || (int)szHdr>m.n) ){
                   60636:     goto idx_rowid_corruption;
                   60637:   }
                   60638: 
                   60639:   /* The last field of the index should be an integer - the ROWID.
                   60640:   ** Verify that the last entry really is an integer. */
                   60641:   (void)getVarint32((u8*)&m.z[szHdr-1], typeRowid);
                   60642:   testcase( typeRowid==1 );
                   60643:   testcase( typeRowid==2 );
                   60644:   testcase( typeRowid==3 );
                   60645:   testcase( typeRowid==4 );
                   60646:   testcase( typeRowid==5 );
                   60647:   testcase( typeRowid==6 );
                   60648:   testcase( typeRowid==8 );
                   60649:   testcase( typeRowid==9 );
                   60650:   if( unlikely(typeRowid<1 || typeRowid>9 || typeRowid==7) ){
                   60651:     goto idx_rowid_corruption;
                   60652:   }
                   60653:   lenRowid = sqlite3VdbeSerialTypeLen(typeRowid);
                   60654:   testcase( (u32)m.n==szHdr+lenRowid );
                   60655:   if( unlikely((u32)m.n<szHdr+lenRowid) ){
                   60656:     goto idx_rowid_corruption;
                   60657:   }
                   60658: 
                   60659:   /* Fetch the integer off the end of the index record */
                   60660:   sqlite3VdbeSerialGet((u8*)&m.z[m.n-lenRowid], typeRowid, &v);
                   60661:   *rowid = v.u.i;
                   60662:   sqlite3VdbeMemRelease(&m);
                   60663:   return SQLITE_OK;
                   60664: 
                   60665:   /* Jump here if database corruption is detected after m has been
                   60666:   ** allocated.  Free the m object and return SQLITE_CORRUPT. */
                   60667: idx_rowid_corruption:
                   60668:   testcase( m.zMalloc!=0 );
                   60669:   sqlite3VdbeMemRelease(&m);
                   60670:   return SQLITE_CORRUPT_BKPT;
                   60671: }
                   60672: 
                   60673: /*
                   60674: ** Compare the key of the index entry that cursor pC is pointing to against
                   60675: ** the key string in pUnpacked.  Write into *pRes a number
                   60676: ** that is negative, zero, or positive if pC is less than, equal to,
                   60677: ** or greater than pUnpacked.  Return SQLITE_OK on success.
                   60678: **
                   60679: ** pUnpacked is either created without a rowid or is truncated so that it
                   60680: ** omits the rowid at the end.  The rowid at the end of the index entry
                   60681: ** is ignored as well.  Hence, this routine only compares the prefixes 
                   60682: ** of the keys prior to the final rowid, not the entire key.
                   60683: */
                   60684: SQLITE_PRIVATE int sqlite3VdbeIdxKeyCompare(
                   60685:   VdbeCursor *pC,             /* The cursor to compare against */
                   60686:   UnpackedRecord *pUnpacked,  /* Unpacked version of key to compare against */
                   60687:   int *res                    /* Write the comparison result here */
                   60688: ){
                   60689:   i64 nCellKey = 0;
                   60690:   int rc;
                   60691:   BtCursor *pCur = pC->pCursor;
                   60692:   Mem m;
                   60693: 
                   60694:   assert( sqlite3BtreeCursorIsValid(pCur) );
                   60695:   rc = sqlite3BtreeKeySize(pCur, &nCellKey);
                   60696:   assert( rc==SQLITE_OK );    /* pCur is always valid so KeySize cannot fail */
                   60697:   /* nCellKey will always be between 0 and 0xffffffff because of the say
                   60698:   ** that btreeParseCellPtr() and sqlite3GetVarint32() are implemented */
                   60699:   if( nCellKey<=0 || nCellKey>0x7fffffff ){
                   60700:     *res = 0;
                   60701:     return SQLITE_CORRUPT_BKPT;
                   60702:   }
                   60703:   memset(&m, 0, sizeof(m));
                   60704:   rc = sqlite3VdbeMemFromBtree(pC->pCursor, 0, (int)nCellKey, 1, &m);
                   60705:   if( rc ){
                   60706:     return rc;
                   60707:   }
                   60708:   assert( pUnpacked->flags & UNPACKED_IGNORE_ROWID );
                   60709:   *res = sqlite3VdbeRecordCompare(m.n, m.z, pUnpacked);
                   60710:   sqlite3VdbeMemRelease(&m);
                   60711:   return SQLITE_OK;
                   60712: }
                   60713: 
                   60714: /*
                   60715: ** This routine sets the value to be returned by subsequent calls to
                   60716: ** sqlite3_changes() on the database handle 'db'. 
                   60717: */
                   60718: SQLITE_PRIVATE void sqlite3VdbeSetChanges(sqlite3 *db, int nChange){
                   60719:   assert( sqlite3_mutex_held(db->mutex) );
                   60720:   db->nChange = nChange;
                   60721:   db->nTotalChange += nChange;
                   60722: }
                   60723: 
                   60724: /*
                   60725: ** Set a flag in the vdbe to update the change counter when it is finalised
                   60726: ** or reset.
                   60727: */
                   60728: SQLITE_PRIVATE void sqlite3VdbeCountChanges(Vdbe *v){
                   60729:   v->changeCntOn = 1;
                   60730: }
                   60731: 
                   60732: /*
                   60733: ** Mark every prepared statement associated with a database connection
                   60734: ** as expired.
                   60735: **
                   60736: ** An expired statement means that recompilation of the statement is
                   60737: ** recommend.  Statements expire when things happen that make their
                   60738: ** programs obsolete.  Removing user-defined functions or collating
                   60739: ** sequences, or changing an authorization function are the types of
                   60740: ** things that make prepared statements obsolete.
                   60741: */
                   60742: SQLITE_PRIVATE void sqlite3ExpirePreparedStatements(sqlite3 *db){
                   60743:   Vdbe *p;
                   60744:   for(p = db->pVdbe; p; p=p->pNext){
                   60745:     p->expired = 1;
                   60746:   }
                   60747: }
                   60748: 
                   60749: /*
                   60750: ** Return the database associated with the Vdbe.
                   60751: */
                   60752: SQLITE_PRIVATE sqlite3 *sqlite3VdbeDb(Vdbe *v){
                   60753:   return v->db;
                   60754: }
                   60755: 
                   60756: /*
                   60757: ** Return a pointer to an sqlite3_value structure containing the value bound
                   60758: ** parameter iVar of VM v. Except, if the value is an SQL NULL, return 
                   60759: ** 0 instead. Unless it is NULL, apply affinity aff (one of the SQLITE_AFF_*
                   60760: ** constants) to the value before returning it.
                   60761: **
                   60762: ** The returned value must be freed by the caller using sqlite3ValueFree().
                   60763: */
                   60764: SQLITE_PRIVATE sqlite3_value *sqlite3VdbeGetValue(Vdbe *v, int iVar, u8 aff){
                   60765:   assert( iVar>0 );
                   60766:   if( v ){
                   60767:     Mem *pMem = &v->aVar[iVar-1];
                   60768:     if( 0==(pMem->flags & MEM_Null) ){
                   60769:       sqlite3_value *pRet = sqlite3ValueNew(v->db);
                   60770:       if( pRet ){
                   60771:         sqlite3VdbeMemCopy((Mem *)pRet, pMem);
                   60772:         sqlite3ValueApplyAffinity(pRet, aff, SQLITE_UTF8);
                   60773:         sqlite3VdbeMemStoreType((Mem *)pRet);
                   60774:       }
                   60775:       return pRet;
                   60776:     }
                   60777:   }
                   60778:   return 0;
                   60779: }
                   60780: 
                   60781: /*
                   60782: ** Configure SQL variable iVar so that binding a new value to it signals
                   60783: ** to sqlite3_reoptimize() that re-preparing the statement may result
                   60784: ** in a better query plan.
                   60785: */
                   60786: SQLITE_PRIVATE void sqlite3VdbeSetVarmask(Vdbe *v, int iVar){
                   60787:   assert( iVar>0 );
                   60788:   if( iVar>32 ){
                   60789:     v->expmask = 0xffffffff;
                   60790:   }else{
                   60791:     v->expmask |= ((u32)1 << (iVar-1));
                   60792:   }
                   60793: }
                   60794: 
                   60795: /************** End of vdbeaux.c *********************************************/
                   60796: /************** Begin file vdbeapi.c *****************************************/
                   60797: /*
                   60798: ** 2004 May 26
                   60799: **
                   60800: ** The author disclaims copyright to this source code.  In place of
                   60801: ** a legal notice, here is a blessing:
                   60802: **
                   60803: **    May you do good and not evil.
                   60804: **    May you find forgiveness for yourself and forgive others.
                   60805: **    May you share freely, never taking more than you give.
                   60806: **
                   60807: *************************************************************************
                   60808: **
                   60809: ** This file contains code use to implement APIs that are part of the
                   60810: ** VDBE.
                   60811: */
                   60812: 
                   60813: #ifndef SQLITE_OMIT_DEPRECATED
                   60814: /*
                   60815: ** Return TRUE (non-zero) of the statement supplied as an argument needs
                   60816: ** to be recompiled.  A statement needs to be recompiled whenever the
                   60817: ** execution environment changes in a way that would alter the program
                   60818: ** that sqlite3_prepare() generates.  For example, if new functions or
                   60819: ** collating sequences are registered or if an authorizer function is
                   60820: ** added or changed.
                   60821: */
                   60822: SQLITE_API int sqlite3_expired(sqlite3_stmt *pStmt){
                   60823:   Vdbe *p = (Vdbe*)pStmt;
                   60824:   return p==0 || p->expired;
                   60825: }
                   60826: #endif
                   60827: 
                   60828: /*
                   60829: ** Check on a Vdbe to make sure it has not been finalized.  Log
                   60830: ** an error and return true if it has been finalized (or is otherwise
                   60831: ** invalid).  Return false if it is ok.
                   60832: */
                   60833: static int vdbeSafety(Vdbe *p){
                   60834:   if( p->db==0 ){
                   60835:     sqlite3_log(SQLITE_MISUSE, "API called with finalized prepared statement");
                   60836:     return 1;
                   60837:   }else{
                   60838:     return 0;
                   60839:   }
                   60840: }
                   60841: static int vdbeSafetyNotNull(Vdbe *p){
                   60842:   if( p==0 ){
                   60843:     sqlite3_log(SQLITE_MISUSE, "API called with NULL prepared statement");
                   60844:     return 1;
                   60845:   }else{
                   60846:     return vdbeSafety(p);
                   60847:   }
                   60848: }
                   60849: 
                   60850: /*
                   60851: ** The following routine destroys a virtual machine that is created by
                   60852: ** the sqlite3_compile() routine. The integer returned is an SQLITE_
                   60853: ** success/failure code that describes the result of executing the virtual
                   60854: ** machine.
                   60855: **
                   60856: ** This routine sets the error code and string returned by
                   60857: ** sqlite3_errcode(), sqlite3_errmsg() and sqlite3_errmsg16().
                   60858: */
                   60859: SQLITE_API int sqlite3_finalize(sqlite3_stmt *pStmt){
                   60860:   int rc;
                   60861:   if( pStmt==0 ){
                   60862:     /* IMPLEMENTATION-OF: R-57228-12904 Invoking sqlite3_finalize() on a NULL
                   60863:     ** pointer is a harmless no-op. */
                   60864:     rc = SQLITE_OK;
                   60865:   }else{
                   60866:     Vdbe *v = (Vdbe*)pStmt;
                   60867:     sqlite3 *db = v->db;
                   60868: #if SQLITE_THREADSAFE
                   60869:     sqlite3_mutex *mutex;
                   60870: #endif
                   60871:     if( vdbeSafety(v) ) return SQLITE_MISUSE_BKPT;
                   60872: #if SQLITE_THREADSAFE
                   60873:     mutex = v->db->mutex;
                   60874: #endif
                   60875:     sqlite3_mutex_enter(mutex);
                   60876:     rc = sqlite3VdbeFinalize(v);
                   60877:     rc = sqlite3ApiExit(db, rc);
                   60878:     sqlite3_mutex_leave(mutex);
                   60879:   }
                   60880:   return rc;
                   60881: }
                   60882: 
                   60883: /*
                   60884: ** Terminate the current execution of an SQL statement and reset it
                   60885: ** back to its starting state so that it can be reused. A success code from
                   60886: ** the prior execution is returned.
                   60887: **
                   60888: ** This routine sets the error code and string returned by
                   60889: ** sqlite3_errcode(), sqlite3_errmsg() and sqlite3_errmsg16().
                   60890: */
                   60891: SQLITE_API int sqlite3_reset(sqlite3_stmt *pStmt){
                   60892:   int rc;
                   60893:   if( pStmt==0 ){
                   60894:     rc = SQLITE_OK;
                   60895:   }else{
                   60896:     Vdbe *v = (Vdbe*)pStmt;
                   60897:     sqlite3_mutex_enter(v->db->mutex);
                   60898:     rc = sqlite3VdbeReset(v);
                   60899:     sqlite3VdbeRewind(v);
                   60900:     assert( (rc & (v->db->errMask))==rc );
                   60901:     rc = sqlite3ApiExit(v->db, rc);
                   60902:     sqlite3_mutex_leave(v->db->mutex);
                   60903:   }
                   60904:   return rc;
                   60905: }
                   60906: 
                   60907: /*
                   60908: ** Set all the parameters in the compiled SQL statement to NULL.
                   60909: */
                   60910: SQLITE_API int sqlite3_clear_bindings(sqlite3_stmt *pStmt){
                   60911:   int i;
                   60912:   int rc = SQLITE_OK;
                   60913:   Vdbe *p = (Vdbe*)pStmt;
                   60914: #if SQLITE_THREADSAFE
                   60915:   sqlite3_mutex *mutex = ((Vdbe*)pStmt)->db->mutex;
                   60916: #endif
                   60917:   sqlite3_mutex_enter(mutex);
                   60918:   for(i=0; i<p->nVar; i++){
                   60919:     sqlite3VdbeMemRelease(&p->aVar[i]);
                   60920:     p->aVar[i].flags = MEM_Null;
                   60921:   }
                   60922:   if( p->isPrepareV2 && p->expmask ){
                   60923:     p->expired = 1;
                   60924:   }
                   60925:   sqlite3_mutex_leave(mutex);
                   60926:   return rc;
                   60927: }
                   60928: 
                   60929: 
                   60930: /**************************** sqlite3_value_  *******************************
                   60931: ** The following routines extract information from a Mem or sqlite3_value
                   60932: ** structure.
                   60933: */
                   60934: SQLITE_API const void *sqlite3_value_blob(sqlite3_value *pVal){
                   60935:   Mem *p = (Mem*)pVal;
                   60936:   if( p->flags & (MEM_Blob|MEM_Str) ){
                   60937:     sqlite3VdbeMemExpandBlob(p);
                   60938:     p->flags &= ~MEM_Str;
                   60939:     p->flags |= MEM_Blob;
                   60940:     return p->n ? p->z : 0;
                   60941:   }else{
                   60942:     return sqlite3_value_text(pVal);
                   60943:   }
                   60944: }
                   60945: SQLITE_API int sqlite3_value_bytes(sqlite3_value *pVal){
                   60946:   return sqlite3ValueBytes(pVal, SQLITE_UTF8);
                   60947: }
                   60948: SQLITE_API int sqlite3_value_bytes16(sqlite3_value *pVal){
                   60949:   return sqlite3ValueBytes(pVal, SQLITE_UTF16NATIVE);
                   60950: }
                   60951: SQLITE_API double sqlite3_value_double(sqlite3_value *pVal){
                   60952:   return sqlite3VdbeRealValue((Mem*)pVal);
                   60953: }
                   60954: SQLITE_API int sqlite3_value_int(sqlite3_value *pVal){
                   60955:   return (int)sqlite3VdbeIntValue((Mem*)pVal);
                   60956: }
                   60957: SQLITE_API sqlite_int64 sqlite3_value_int64(sqlite3_value *pVal){
                   60958:   return sqlite3VdbeIntValue((Mem*)pVal);
                   60959: }
                   60960: SQLITE_API const unsigned char *sqlite3_value_text(sqlite3_value *pVal){
                   60961:   return (const unsigned char *)sqlite3ValueText(pVal, SQLITE_UTF8);
                   60962: }
                   60963: #ifndef SQLITE_OMIT_UTF16
                   60964: SQLITE_API const void *sqlite3_value_text16(sqlite3_value* pVal){
                   60965:   return sqlite3ValueText(pVal, SQLITE_UTF16NATIVE);
                   60966: }
                   60967: SQLITE_API const void *sqlite3_value_text16be(sqlite3_value *pVal){
                   60968:   return sqlite3ValueText(pVal, SQLITE_UTF16BE);
                   60969: }
                   60970: SQLITE_API const void *sqlite3_value_text16le(sqlite3_value *pVal){
                   60971:   return sqlite3ValueText(pVal, SQLITE_UTF16LE);
                   60972: }
                   60973: #endif /* SQLITE_OMIT_UTF16 */
                   60974: SQLITE_API int sqlite3_value_type(sqlite3_value* pVal){
                   60975:   return pVal->type;
                   60976: }
                   60977: 
                   60978: /**************************** sqlite3_result_  *******************************
                   60979: ** The following routines are used by user-defined functions to specify
                   60980: ** the function result.
                   60981: **
                   60982: ** The setStrOrError() funtion calls sqlite3VdbeMemSetStr() to store the
                   60983: ** result as a string or blob but if the string or blob is too large, it
                   60984: ** then sets the error code to SQLITE_TOOBIG
                   60985: */
                   60986: static void setResultStrOrError(
                   60987:   sqlite3_context *pCtx,  /* Function context */
                   60988:   const char *z,          /* String pointer */
                   60989:   int n,                  /* Bytes in string, or negative */
                   60990:   u8 enc,                 /* Encoding of z.  0 for BLOBs */
                   60991:   void (*xDel)(void*)     /* Destructor function */
                   60992: ){
                   60993:   if( sqlite3VdbeMemSetStr(&pCtx->s, z, n, enc, xDel)==SQLITE_TOOBIG ){
                   60994:     sqlite3_result_error_toobig(pCtx);
                   60995:   }
                   60996: }
                   60997: SQLITE_API void sqlite3_result_blob(
                   60998:   sqlite3_context *pCtx, 
                   60999:   const void *z, 
                   61000:   int n, 
                   61001:   void (*xDel)(void *)
                   61002: ){
                   61003:   assert( n>=0 );
                   61004:   assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
                   61005:   setResultStrOrError(pCtx, z, n, 0, xDel);
                   61006: }
                   61007: SQLITE_API void sqlite3_result_double(sqlite3_context *pCtx, double rVal){
                   61008:   assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
                   61009:   sqlite3VdbeMemSetDouble(&pCtx->s, rVal);
                   61010: }
                   61011: SQLITE_API void sqlite3_result_error(sqlite3_context *pCtx, const char *z, int n){
                   61012:   assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
                   61013:   pCtx->isError = SQLITE_ERROR;
                   61014:   sqlite3VdbeMemSetStr(&pCtx->s, z, n, SQLITE_UTF8, SQLITE_TRANSIENT);
                   61015: }
                   61016: #ifndef SQLITE_OMIT_UTF16
                   61017: SQLITE_API void sqlite3_result_error16(sqlite3_context *pCtx, const void *z, int n){
                   61018:   assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
                   61019:   pCtx->isError = SQLITE_ERROR;
                   61020:   sqlite3VdbeMemSetStr(&pCtx->s, z, n, SQLITE_UTF16NATIVE, SQLITE_TRANSIENT);
                   61021: }
                   61022: #endif
                   61023: SQLITE_API void sqlite3_result_int(sqlite3_context *pCtx, int iVal){
                   61024:   assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
                   61025:   sqlite3VdbeMemSetInt64(&pCtx->s, (i64)iVal);
                   61026: }
                   61027: SQLITE_API void sqlite3_result_int64(sqlite3_context *pCtx, i64 iVal){
                   61028:   assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
                   61029:   sqlite3VdbeMemSetInt64(&pCtx->s, iVal);
                   61030: }
                   61031: SQLITE_API void sqlite3_result_null(sqlite3_context *pCtx){
                   61032:   assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
                   61033:   sqlite3VdbeMemSetNull(&pCtx->s);
                   61034: }
                   61035: SQLITE_API void sqlite3_result_text(
                   61036:   sqlite3_context *pCtx, 
                   61037:   const char *z, 
                   61038:   int n,
                   61039:   void (*xDel)(void *)
                   61040: ){
                   61041:   assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
                   61042:   setResultStrOrError(pCtx, z, n, SQLITE_UTF8, xDel);
                   61043: }
                   61044: #ifndef SQLITE_OMIT_UTF16
                   61045: SQLITE_API void sqlite3_result_text16(
                   61046:   sqlite3_context *pCtx, 
                   61047:   const void *z, 
                   61048:   int n, 
                   61049:   void (*xDel)(void *)
                   61050: ){
                   61051:   assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
                   61052:   setResultStrOrError(pCtx, z, n, SQLITE_UTF16NATIVE, xDel);
                   61053: }
                   61054: SQLITE_API void sqlite3_result_text16be(
                   61055:   sqlite3_context *pCtx, 
                   61056:   const void *z, 
                   61057:   int n, 
                   61058:   void (*xDel)(void *)
                   61059: ){
                   61060:   assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
                   61061:   setResultStrOrError(pCtx, z, n, SQLITE_UTF16BE, xDel);
                   61062: }
                   61063: SQLITE_API void sqlite3_result_text16le(
                   61064:   sqlite3_context *pCtx, 
                   61065:   const void *z, 
                   61066:   int n, 
                   61067:   void (*xDel)(void *)
                   61068: ){
                   61069:   assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
                   61070:   setResultStrOrError(pCtx, z, n, SQLITE_UTF16LE, xDel);
                   61071: }
                   61072: #endif /* SQLITE_OMIT_UTF16 */
                   61073: SQLITE_API void sqlite3_result_value(sqlite3_context *pCtx, sqlite3_value *pValue){
                   61074:   assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
                   61075:   sqlite3VdbeMemCopy(&pCtx->s, pValue);
                   61076: }
                   61077: SQLITE_API void sqlite3_result_zeroblob(sqlite3_context *pCtx, int n){
                   61078:   assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
                   61079:   sqlite3VdbeMemSetZeroBlob(&pCtx->s, n);
                   61080: }
                   61081: SQLITE_API void sqlite3_result_error_code(sqlite3_context *pCtx, int errCode){
                   61082:   pCtx->isError = errCode;
                   61083:   if( pCtx->s.flags & MEM_Null ){
                   61084:     sqlite3VdbeMemSetStr(&pCtx->s, sqlite3ErrStr(errCode), -1, 
                   61085:                          SQLITE_UTF8, SQLITE_STATIC);
                   61086:   }
                   61087: }
                   61088: 
                   61089: /* Force an SQLITE_TOOBIG error. */
                   61090: SQLITE_API void sqlite3_result_error_toobig(sqlite3_context *pCtx){
                   61091:   assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
                   61092:   pCtx->isError = SQLITE_TOOBIG;
                   61093:   sqlite3VdbeMemSetStr(&pCtx->s, "string or blob too big", -1, 
                   61094:                        SQLITE_UTF8, SQLITE_STATIC);
                   61095: }
                   61096: 
                   61097: /* An SQLITE_NOMEM error. */
                   61098: SQLITE_API void sqlite3_result_error_nomem(sqlite3_context *pCtx){
                   61099:   assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
                   61100:   sqlite3VdbeMemSetNull(&pCtx->s);
                   61101:   pCtx->isError = SQLITE_NOMEM;
                   61102:   pCtx->s.db->mallocFailed = 1;
                   61103: }
                   61104: 
                   61105: /*
                   61106: ** This function is called after a transaction has been committed. It 
                   61107: ** invokes callbacks registered with sqlite3_wal_hook() as required.
                   61108: */
                   61109: static int doWalCallbacks(sqlite3 *db){
                   61110:   int rc = SQLITE_OK;
                   61111: #ifndef SQLITE_OMIT_WAL
                   61112:   int i;
                   61113:   for(i=0; i<db->nDb; i++){
                   61114:     Btree *pBt = db->aDb[i].pBt;
                   61115:     if( pBt ){
                   61116:       int nEntry = sqlite3PagerWalCallback(sqlite3BtreePager(pBt));
                   61117:       if( db->xWalCallback && nEntry>0 && rc==SQLITE_OK ){
                   61118:         rc = db->xWalCallback(db->pWalArg, db, db->aDb[i].zName, nEntry);
                   61119:       }
                   61120:     }
                   61121:   }
                   61122: #endif
                   61123:   return rc;
                   61124: }
                   61125: 
                   61126: /*
                   61127: ** Execute the statement pStmt, either until a row of data is ready, the
                   61128: ** statement is completely executed or an error occurs.
                   61129: **
                   61130: ** This routine implements the bulk of the logic behind the sqlite_step()
                   61131: ** API.  The only thing omitted is the automatic recompile if a 
                   61132: ** schema change has occurred.  That detail is handled by the
                   61133: ** outer sqlite3_step() wrapper procedure.
                   61134: */
                   61135: static int sqlite3Step(Vdbe *p){
                   61136:   sqlite3 *db;
                   61137:   int rc;
                   61138: 
                   61139:   assert(p);
                   61140:   if( p->magic!=VDBE_MAGIC_RUN ){
                   61141:     /* We used to require that sqlite3_reset() be called before retrying
                   61142:     ** sqlite3_step() after any error or after SQLITE_DONE.  But beginning
                   61143:     ** with version 3.7.0, we changed this so that sqlite3_reset() would
                   61144:     ** be called automatically instead of throwing the SQLITE_MISUSE error.
                   61145:     ** This "automatic-reset" change is not technically an incompatibility, 
                   61146:     ** since any application that receives an SQLITE_MISUSE is broken by
                   61147:     ** definition.
                   61148:     **
                   61149:     ** Nevertheless, some published applications that were originally written
                   61150:     ** for version 3.6.23 or earlier do in fact depend on SQLITE_MISUSE 
                   61151:     ** returns, and the so were broken by the automatic-reset change.  As a
                   61152:     ** a work-around, the SQLITE_OMIT_AUTORESET compile-time restores the
                   61153:     ** legacy behavior of returning SQLITE_MISUSE for cases where the 
                   61154:     ** previous sqlite3_step() returned something other than a SQLITE_LOCKED
                   61155:     ** or SQLITE_BUSY error.
                   61156:     */
                   61157: #ifdef SQLITE_OMIT_AUTORESET
                   61158:     if( p->rc==SQLITE_BUSY || p->rc==SQLITE_LOCKED ){
                   61159:       sqlite3_reset((sqlite3_stmt*)p);
                   61160:     }else{
                   61161:       return SQLITE_MISUSE_BKPT;
                   61162:     }
                   61163: #else
                   61164:     sqlite3_reset((sqlite3_stmt*)p);
                   61165: #endif
                   61166:   }
                   61167: 
                   61168:   /* Check that malloc() has not failed. If it has, return early. */
                   61169:   db = p->db;
                   61170:   if( db->mallocFailed ){
                   61171:     p->rc = SQLITE_NOMEM;
                   61172:     return SQLITE_NOMEM;
                   61173:   }
                   61174: 
                   61175:   if( p->pc<=0 && p->expired ){
                   61176:     p->rc = SQLITE_SCHEMA;
                   61177:     rc = SQLITE_ERROR;
                   61178:     goto end_of_step;
                   61179:   }
                   61180:   if( p->pc<0 ){
                   61181:     /* If there are no other statements currently running, then
                   61182:     ** reset the interrupt flag.  This prevents a call to sqlite3_interrupt
                   61183:     ** from interrupting a statement that has not yet started.
                   61184:     */
                   61185:     if( db->activeVdbeCnt==0 ){
                   61186:       db->u1.isInterrupted = 0;
                   61187:     }
                   61188: 
                   61189:     assert( db->writeVdbeCnt>0 || db->autoCommit==0 || db->nDeferredCons==0 );
                   61190: 
                   61191: #ifndef SQLITE_OMIT_TRACE
                   61192:     if( db->xProfile && !db->init.busy ){
                   61193:       sqlite3OsCurrentTimeInt64(db->pVfs, &p->startTime);
                   61194:     }
                   61195: #endif
                   61196: 
                   61197:     db->activeVdbeCnt++;
                   61198:     if( p->readOnly==0 ) db->writeVdbeCnt++;
                   61199:     p->pc = 0;
                   61200:   }
                   61201: #ifndef SQLITE_OMIT_EXPLAIN
                   61202:   if( p->explain ){
                   61203:     rc = sqlite3VdbeList(p);
                   61204:   }else
                   61205: #endif /* SQLITE_OMIT_EXPLAIN */
                   61206:   {
                   61207:     db->vdbeExecCnt++;
                   61208:     rc = sqlite3VdbeExec(p);
                   61209:     db->vdbeExecCnt--;
                   61210:   }
                   61211: 
                   61212: #ifndef SQLITE_OMIT_TRACE
                   61213:   /* Invoke the profile callback if there is one
                   61214:   */
                   61215:   if( rc!=SQLITE_ROW && db->xProfile && !db->init.busy && p->zSql ){
                   61216:     sqlite3_int64 iNow;
                   61217:     sqlite3OsCurrentTimeInt64(db->pVfs, &iNow);
                   61218:     db->xProfile(db->pProfileArg, p->zSql, (iNow - p->startTime)*1000000);
                   61219:   }
                   61220: #endif
                   61221: 
                   61222:   if( rc==SQLITE_DONE ){
                   61223:     assert( p->rc==SQLITE_OK );
                   61224:     p->rc = doWalCallbacks(db);
                   61225:     if( p->rc!=SQLITE_OK ){
                   61226:       rc = SQLITE_ERROR;
                   61227:     }
                   61228:   }
                   61229: 
                   61230:   db->errCode = rc;
                   61231:   if( SQLITE_NOMEM==sqlite3ApiExit(p->db, p->rc) ){
                   61232:     p->rc = SQLITE_NOMEM;
                   61233:   }
                   61234: end_of_step:
                   61235:   /* At this point local variable rc holds the value that should be 
                   61236:   ** returned if this statement was compiled using the legacy 
                   61237:   ** sqlite3_prepare() interface. According to the docs, this can only
                   61238:   ** be one of the values in the first assert() below. Variable p->rc 
                   61239:   ** contains the value that would be returned if sqlite3_finalize() 
                   61240:   ** were called on statement p.
                   61241:   */
                   61242:   assert( rc==SQLITE_ROW  || rc==SQLITE_DONE   || rc==SQLITE_ERROR 
                   61243:        || rc==SQLITE_BUSY || rc==SQLITE_MISUSE
                   61244:   );
                   61245:   assert( p->rc!=SQLITE_ROW && p->rc!=SQLITE_DONE );
                   61246:   if( p->isPrepareV2 && rc!=SQLITE_ROW && rc!=SQLITE_DONE ){
                   61247:     /* If this statement was prepared using sqlite3_prepare_v2(), and an
1.1.1.3 ! misho    61248:     ** error has occurred, then return the error code in p->rc to the
1.1       misho    61249:     ** caller. Set the error code in the database handle to the same value.
                   61250:     */ 
                   61251:     rc = db->errCode = p->rc;
                   61252:   }
                   61253:   return (rc&db->errMask);
                   61254: }
                   61255: 
                   61256: /*
                   61257: ** The maximum number of times that a statement will try to reparse
                   61258: ** itself before giving up and returning SQLITE_SCHEMA.
                   61259: */
                   61260: #ifndef SQLITE_MAX_SCHEMA_RETRY
                   61261: # define SQLITE_MAX_SCHEMA_RETRY 5
                   61262: #endif
                   61263: 
                   61264: /*
                   61265: ** This is the top-level implementation of sqlite3_step().  Call
                   61266: ** sqlite3Step() to do most of the work.  If a schema error occurs,
                   61267: ** call sqlite3Reprepare() and try again.
                   61268: */
                   61269: SQLITE_API int sqlite3_step(sqlite3_stmt *pStmt){
                   61270:   int rc = SQLITE_OK;      /* Result from sqlite3Step() */
                   61271:   int rc2 = SQLITE_OK;     /* Result from sqlite3Reprepare() */
                   61272:   Vdbe *v = (Vdbe*)pStmt;  /* the prepared statement */
                   61273:   int cnt = 0;             /* Counter to prevent infinite loop of reprepares */
                   61274:   sqlite3 *db;             /* The database connection */
                   61275: 
                   61276:   if( vdbeSafetyNotNull(v) ){
                   61277:     return SQLITE_MISUSE_BKPT;
                   61278:   }
                   61279:   db = v->db;
                   61280:   sqlite3_mutex_enter(db->mutex);
                   61281:   while( (rc = sqlite3Step(v))==SQLITE_SCHEMA
                   61282:          && cnt++ < SQLITE_MAX_SCHEMA_RETRY
                   61283:          && (rc2 = rc = sqlite3Reprepare(v))==SQLITE_OK ){
                   61284:     sqlite3_reset(pStmt);
                   61285:     v->expired = 0;
                   61286:   }
                   61287:   if( rc2!=SQLITE_OK && ALWAYS(v->isPrepareV2) && ALWAYS(db->pErr) ){
                   61288:     /* This case occurs after failing to recompile an sql statement. 
                   61289:     ** The error message from the SQL compiler has already been loaded 
                   61290:     ** into the database handle. This block copies the error message 
                   61291:     ** from the database handle into the statement and sets the statement
                   61292:     ** program counter to 0 to ensure that when the statement is 
                   61293:     ** finalized or reset the parser error message is available via
                   61294:     ** sqlite3_errmsg() and sqlite3_errcode().
                   61295:     */
                   61296:     const char *zErr = (const char *)sqlite3_value_text(db->pErr); 
                   61297:     sqlite3DbFree(db, v->zErrMsg);
                   61298:     if( !db->mallocFailed ){
                   61299:       v->zErrMsg = sqlite3DbStrDup(db, zErr);
                   61300:       v->rc = rc2;
                   61301:     } else {
                   61302:       v->zErrMsg = 0;
                   61303:       v->rc = rc = SQLITE_NOMEM;
                   61304:     }
                   61305:   }
                   61306:   rc = sqlite3ApiExit(db, rc);
                   61307:   sqlite3_mutex_leave(db->mutex);
                   61308:   return rc;
                   61309: }
                   61310: 
                   61311: /*
                   61312: ** Extract the user data from a sqlite3_context structure and return a
                   61313: ** pointer to it.
                   61314: */
                   61315: SQLITE_API void *sqlite3_user_data(sqlite3_context *p){
                   61316:   assert( p && p->pFunc );
                   61317:   return p->pFunc->pUserData;
                   61318: }
                   61319: 
                   61320: /*
                   61321: ** Extract the user data from a sqlite3_context structure and return a
                   61322: ** pointer to it.
                   61323: **
                   61324: ** IMPLEMENTATION-OF: R-46798-50301 The sqlite3_context_db_handle() interface
                   61325: ** returns a copy of the pointer to the database connection (the 1st
                   61326: ** parameter) of the sqlite3_create_function() and
                   61327: ** sqlite3_create_function16() routines that originally registered the
                   61328: ** application defined function.
                   61329: */
                   61330: SQLITE_API sqlite3 *sqlite3_context_db_handle(sqlite3_context *p){
                   61331:   assert( p && p->pFunc );
                   61332:   return p->s.db;
                   61333: }
                   61334: 
                   61335: /*
                   61336: ** The following is the implementation of an SQL function that always
                   61337: ** fails with an error message stating that the function is used in the
                   61338: ** wrong context.  The sqlite3_overload_function() API might construct
                   61339: ** SQL function that use this routine so that the functions will exist
                   61340: ** for name resolution but are actually overloaded by the xFindFunction
                   61341: ** method of virtual tables.
                   61342: */
                   61343: SQLITE_PRIVATE void sqlite3InvalidFunction(
                   61344:   sqlite3_context *context,  /* The function calling context */
                   61345:   int NotUsed,               /* Number of arguments to the function */
                   61346:   sqlite3_value **NotUsed2   /* Value of each argument */
                   61347: ){
                   61348:   const char *zName = context->pFunc->zName;
                   61349:   char *zErr;
                   61350:   UNUSED_PARAMETER2(NotUsed, NotUsed2);
                   61351:   zErr = sqlite3_mprintf(
                   61352:       "unable to use function %s in the requested context", zName);
                   61353:   sqlite3_result_error(context, zErr, -1);
                   61354:   sqlite3_free(zErr);
                   61355: }
                   61356: 
                   61357: /*
                   61358: ** Allocate or return the aggregate context for a user function.  A new
                   61359: ** context is allocated on the first call.  Subsequent calls return the
                   61360: ** same context that was returned on prior calls.
                   61361: */
                   61362: SQLITE_API void *sqlite3_aggregate_context(sqlite3_context *p, int nByte){
                   61363:   Mem *pMem;
                   61364:   assert( p && p->pFunc && p->pFunc->xStep );
                   61365:   assert( sqlite3_mutex_held(p->s.db->mutex) );
                   61366:   pMem = p->pMem;
                   61367:   testcase( nByte<0 );
                   61368:   if( (pMem->flags & MEM_Agg)==0 ){
                   61369:     if( nByte<=0 ){
                   61370:       sqlite3VdbeMemReleaseExternal(pMem);
                   61371:       pMem->flags = MEM_Null;
                   61372:       pMem->z = 0;
                   61373:     }else{
                   61374:       sqlite3VdbeMemGrow(pMem, nByte, 0);
                   61375:       pMem->flags = MEM_Agg;
                   61376:       pMem->u.pDef = p->pFunc;
                   61377:       if( pMem->z ){
                   61378:         memset(pMem->z, 0, nByte);
                   61379:       }
                   61380:     }
                   61381:   }
                   61382:   return (void*)pMem->z;
                   61383: }
                   61384: 
                   61385: /*
                   61386: ** Return the auxilary data pointer, if any, for the iArg'th argument to
                   61387: ** the user-function defined by pCtx.
                   61388: */
                   61389: SQLITE_API void *sqlite3_get_auxdata(sqlite3_context *pCtx, int iArg){
                   61390:   VdbeFunc *pVdbeFunc;
                   61391: 
                   61392:   assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
                   61393:   pVdbeFunc = pCtx->pVdbeFunc;
                   61394:   if( !pVdbeFunc || iArg>=pVdbeFunc->nAux || iArg<0 ){
                   61395:     return 0;
                   61396:   }
                   61397:   return pVdbeFunc->apAux[iArg].pAux;
                   61398: }
                   61399: 
                   61400: /*
                   61401: ** Set the auxilary data pointer and delete function, for the iArg'th
                   61402: ** argument to the user-function defined by pCtx. Any previous value is
                   61403: ** deleted by calling the delete function specified when it was set.
                   61404: */
                   61405: SQLITE_API void sqlite3_set_auxdata(
                   61406:   sqlite3_context *pCtx, 
                   61407:   int iArg, 
                   61408:   void *pAux, 
                   61409:   void (*xDelete)(void*)
                   61410: ){
                   61411:   struct AuxData *pAuxData;
                   61412:   VdbeFunc *pVdbeFunc;
                   61413:   if( iArg<0 ) goto failed;
                   61414: 
                   61415:   assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
                   61416:   pVdbeFunc = pCtx->pVdbeFunc;
                   61417:   if( !pVdbeFunc || pVdbeFunc->nAux<=iArg ){
                   61418:     int nAux = (pVdbeFunc ? pVdbeFunc->nAux : 0);
                   61419:     int nMalloc = sizeof(VdbeFunc) + sizeof(struct AuxData)*iArg;
                   61420:     pVdbeFunc = sqlite3DbRealloc(pCtx->s.db, pVdbeFunc, nMalloc);
                   61421:     if( !pVdbeFunc ){
                   61422:       goto failed;
                   61423:     }
                   61424:     pCtx->pVdbeFunc = pVdbeFunc;
                   61425:     memset(&pVdbeFunc->apAux[nAux], 0, sizeof(struct AuxData)*(iArg+1-nAux));
                   61426:     pVdbeFunc->nAux = iArg+1;
                   61427:     pVdbeFunc->pFunc = pCtx->pFunc;
                   61428:   }
                   61429: 
                   61430:   pAuxData = &pVdbeFunc->apAux[iArg];
                   61431:   if( pAuxData->pAux && pAuxData->xDelete ){
                   61432:     pAuxData->xDelete(pAuxData->pAux);
                   61433:   }
                   61434:   pAuxData->pAux = pAux;
                   61435:   pAuxData->xDelete = xDelete;
                   61436:   return;
                   61437: 
                   61438: failed:
                   61439:   if( xDelete ){
                   61440:     xDelete(pAux);
                   61441:   }
                   61442: }
                   61443: 
                   61444: #ifndef SQLITE_OMIT_DEPRECATED
                   61445: /*
                   61446: ** Return the number of times the Step function of a aggregate has been 
                   61447: ** called.
                   61448: **
                   61449: ** This function is deprecated.  Do not use it for new code.  It is
                   61450: ** provide only to avoid breaking legacy code.  New aggregate function
                   61451: ** implementations should keep their own counts within their aggregate
                   61452: ** context.
                   61453: */
                   61454: SQLITE_API int sqlite3_aggregate_count(sqlite3_context *p){
                   61455:   assert( p && p->pMem && p->pFunc && p->pFunc->xStep );
                   61456:   return p->pMem->n;
                   61457: }
                   61458: #endif
                   61459: 
                   61460: /*
                   61461: ** Return the number of columns in the result set for the statement pStmt.
                   61462: */
                   61463: SQLITE_API int sqlite3_column_count(sqlite3_stmt *pStmt){
                   61464:   Vdbe *pVm = (Vdbe *)pStmt;
                   61465:   return pVm ? pVm->nResColumn : 0;
                   61466: }
                   61467: 
                   61468: /*
                   61469: ** Return the number of values available from the current row of the
                   61470: ** currently executing statement pStmt.
                   61471: */
                   61472: SQLITE_API int sqlite3_data_count(sqlite3_stmt *pStmt){
                   61473:   Vdbe *pVm = (Vdbe *)pStmt;
                   61474:   if( pVm==0 || pVm->pResultSet==0 ) return 0;
                   61475:   return pVm->nResColumn;
                   61476: }
                   61477: 
                   61478: 
                   61479: /*
                   61480: ** Check to see if column iCol of the given statement is valid.  If
                   61481: ** it is, return a pointer to the Mem for the value of that column.
                   61482: ** If iCol is not valid, return a pointer to a Mem which has a value
                   61483: ** of NULL.
                   61484: */
                   61485: static Mem *columnMem(sqlite3_stmt *pStmt, int i){
                   61486:   Vdbe *pVm;
                   61487:   Mem *pOut;
                   61488: 
                   61489:   pVm = (Vdbe *)pStmt;
                   61490:   if( pVm && pVm->pResultSet!=0 && i<pVm->nResColumn && i>=0 ){
                   61491:     sqlite3_mutex_enter(pVm->db->mutex);
                   61492:     pOut = &pVm->pResultSet[i];
                   61493:   }else{
                   61494:     /* If the value passed as the second argument is out of range, return
                   61495:     ** a pointer to the following static Mem object which contains the
                   61496:     ** value SQL NULL. Even though the Mem structure contains an element
                   61497:     ** of type i64, on certain architecture (x86) with certain compiler
                   61498:     ** switches (-Os), gcc may align this Mem object on a 4-byte boundary
                   61499:     ** instead of an 8-byte one. This all works fine, except that when
                   61500:     ** running with SQLITE_DEBUG defined the SQLite code sometimes assert()s
                   61501:     ** that a Mem structure is located on an 8-byte boundary. To prevent
                   61502:     ** this assert() from failing, when building with SQLITE_DEBUG defined
                   61503:     ** using gcc, force nullMem to be 8-byte aligned using the magical
                   61504:     ** __attribute__((aligned(8))) macro.  */
                   61505:     static const Mem nullMem 
                   61506: #if defined(SQLITE_DEBUG) && defined(__GNUC__)
                   61507:       __attribute__((aligned(8))) 
                   61508: #endif
                   61509:       = {0, "", (double)0, {0}, 0, MEM_Null, SQLITE_NULL, 0,
                   61510: #ifdef SQLITE_DEBUG
                   61511:          0, 0,  /* pScopyFrom, pFiller */
                   61512: #endif
                   61513:          0, 0 };
                   61514: 
                   61515:     if( pVm && ALWAYS(pVm->db) ){
                   61516:       sqlite3_mutex_enter(pVm->db->mutex);
                   61517:       sqlite3Error(pVm->db, SQLITE_RANGE, 0);
                   61518:     }
                   61519:     pOut = (Mem*)&nullMem;
                   61520:   }
                   61521:   return pOut;
                   61522: }
                   61523: 
                   61524: /*
                   61525: ** This function is called after invoking an sqlite3_value_XXX function on a 
                   61526: ** column value (i.e. a value returned by evaluating an SQL expression in the
                   61527: ** select list of a SELECT statement) that may cause a malloc() failure. If 
                   61528: ** malloc() has failed, the threads mallocFailed flag is cleared and the result
                   61529: ** code of statement pStmt set to SQLITE_NOMEM.
                   61530: **
                   61531: ** Specifically, this is called from within:
                   61532: **
                   61533: **     sqlite3_column_int()
                   61534: **     sqlite3_column_int64()
                   61535: **     sqlite3_column_text()
                   61536: **     sqlite3_column_text16()
                   61537: **     sqlite3_column_real()
                   61538: **     sqlite3_column_bytes()
                   61539: **     sqlite3_column_bytes16()
                   61540: **     sqiite3_column_blob()
                   61541: */
                   61542: static void columnMallocFailure(sqlite3_stmt *pStmt)
                   61543: {
                   61544:   /* If malloc() failed during an encoding conversion within an
                   61545:   ** sqlite3_column_XXX API, then set the return code of the statement to
                   61546:   ** SQLITE_NOMEM. The next call to _step() (if any) will return SQLITE_ERROR
                   61547:   ** and _finalize() will return NOMEM.
                   61548:   */
                   61549:   Vdbe *p = (Vdbe *)pStmt;
                   61550:   if( p ){
                   61551:     p->rc = sqlite3ApiExit(p->db, p->rc);
                   61552:     sqlite3_mutex_leave(p->db->mutex);
                   61553:   }
                   61554: }
                   61555: 
                   61556: /**************************** sqlite3_column_  *******************************
                   61557: ** The following routines are used to access elements of the current row
                   61558: ** in the result set.
                   61559: */
                   61560: SQLITE_API const void *sqlite3_column_blob(sqlite3_stmt *pStmt, int i){
                   61561:   const void *val;
                   61562:   val = sqlite3_value_blob( columnMem(pStmt,i) );
                   61563:   /* Even though there is no encoding conversion, value_blob() might
                   61564:   ** need to call malloc() to expand the result of a zeroblob() 
                   61565:   ** expression. 
                   61566:   */
                   61567:   columnMallocFailure(pStmt);
                   61568:   return val;
                   61569: }
                   61570: SQLITE_API int sqlite3_column_bytes(sqlite3_stmt *pStmt, int i){
                   61571:   int val = sqlite3_value_bytes( columnMem(pStmt,i) );
                   61572:   columnMallocFailure(pStmt);
                   61573:   return val;
                   61574: }
                   61575: SQLITE_API int sqlite3_column_bytes16(sqlite3_stmt *pStmt, int i){
                   61576:   int val = sqlite3_value_bytes16( columnMem(pStmt,i) );
                   61577:   columnMallocFailure(pStmt);
                   61578:   return val;
                   61579: }
                   61580: SQLITE_API double sqlite3_column_double(sqlite3_stmt *pStmt, int i){
                   61581:   double val = sqlite3_value_double( columnMem(pStmt,i) );
                   61582:   columnMallocFailure(pStmt);
                   61583:   return val;
                   61584: }
                   61585: SQLITE_API int sqlite3_column_int(sqlite3_stmt *pStmt, int i){
                   61586:   int val = sqlite3_value_int( columnMem(pStmt,i) );
                   61587:   columnMallocFailure(pStmt);
                   61588:   return val;
                   61589: }
                   61590: SQLITE_API sqlite_int64 sqlite3_column_int64(sqlite3_stmt *pStmt, int i){
                   61591:   sqlite_int64 val = sqlite3_value_int64( columnMem(pStmt,i) );
                   61592:   columnMallocFailure(pStmt);
                   61593:   return val;
                   61594: }
                   61595: SQLITE_API const unsigned char *sqlite3_column_text(sqlite3_stmt *pStmt, int i){
                   61596:   const unsigned char *val = sqlite3_value_text( columnMem(pStmt,i) );
                   61597:   columnMallocFailure(pStmt);
                   61598:   return val;
                   61599: }
                   61600: SQLITE_API sqlite3_value *sqlite3_column_value(sqlite3_stmt *pStmt, int i){
                   61601:   Mem *pOut = columnMem(pStmt, i);
                   61602:   if( pOut->flags&MEM_Static ){
                   61603:     pOut->flags &= ~MEM_Static;
                   61604:     pOut->flags |= MEM_Ephem;
                   61605:   }
                   61606:   columnMallocFailure(pStmt);
                   61607:   return (sqlite3_value *)pOut;
                   61608: }
                   61609: #ifndef SQLITE_OMIT_UTF16
                   61610: SQLITE_API const void *sqlite3_column_text16(sqlite3_stmt *pStmt, int i){
                   61611:   const void *val = sqlite3_value_text16( columnMem(pStmt,i) );
                   61612:   columnMallocFailure(pStmt);
                   61613:   return val;
                   61614: }
                   61615: #endif /* SQLITE_OMIT_UTF16 */
                   61616: SQLITE_API int sqlite3_column_type(sqlite3_stmt *pStmt, int i){
                   61617:   int iType = sqlite3_value_type( columnMem(pStmt,i) );
                   61618:   columnMallocFailure(pStmt);
                   61619:   return iType;
                   61620: }
                   61621: 
                   61622: /* The following function is experimental and subject to change or
                   61623: ** removal */
                   61624: /*int sqlite3_column_numeric_type(sqlite3_stmt *pStmt, int i){
                   61625: **  return sqlite3_value_numeric_type( columnMem(pStmt,i) );
                   61626: **}
                   61627: */
                   61628: 
                   61629: /*
                   61630: ** Convert the N-th element of pStmt->pColName[] into a string using
                   61631: ** xFunc() then return that string.  If N is out of range, return 0.
                   61632: **
                   61633: ** There are up to 5 names for each column.  useType determines which
                   61634: ** name is returned.  Here are the names:
                   61635: **
                   61636: **    0      The column name as it should be displayed for output
                   61637: **    1      The datatype name for the column
                   61638: **    2      The name of the database that the column derives from
                   61639: **    3      The name of the table that the column derives from
                   61640: **    4      The name of the table column that the result column derives from
                   61641: **
                   61642: ** If the result is not a simple column reference (if it is an expression
                   61643: ** or a constant) then useTypes 2, 3, and 4 return NULL.
                   61644: */
                   61645: static const void *columnName(
                   61646:   sqlite3_stmt *pStmt,
                   61647:   int N,
                   61648:   const void *(*xFunc)(Mem*),
                   61649:   int useType
                   61650: ){
                   61651:   const void *ret = 0;
                   61652:   Vdbe *p = (Vdbe *)pStmt;
                   61653:   int n;
                   61654:   sqlite3 *db = p->db;
                   61655:   
                   61656:   assert( db!=0 );
                   61657:   n = sqlite3_column_count(pStmt);
                   61658:   if( N<n && N>=0 ){
                   61659:     N += useType*n;
                   61660:     sqlite3_mutex_enter(db->mutex);
                   61661:     assert( db->mallocFailed==0 );
                   61662:     ret = xFunc(&p->aColName[N]);
                   61663:      /* A malloc may have failed inside of the xFunc() call. If this
                   61664:     ** is the case, clear the mallocFailed flag and return NULL.
                   61665:     */
                   61666:     if( db->mallocFailed ){
                   61667:       db->mallocFailed = 0;
                   61668:       ret = 0;
                   61669:     }
                   61670:     sqlite3_mutex_leave(db->mutex);
                   61671:   }
                   61672:   return ret;
                   61673: }
                   61674: 
                   61675: /*
                   61676: ** Return the name of the Nth column of the result set returned by SQL
                   61677: ** statement pStmt.
                   61678: */
                   61679: SQLITE_API const char *sqlite3_column_name(sqlite3_stmt *pStmt, int N){
                   61680:   return columnName(
                   61681:       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_NAME);
                   61682: }
                   61683: #ifndef SQLITE_OMIT_UTF16
                   61684: SQLITE_API const void *sqlite3_column_name16(sqlite3_stmt *pStmt, int N){
                   61685:   return columnName(
                   61686:       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_NAME);
                   61687: }
                   61688: #endif
                   61689: 
                   61690: /*
                   61691: ** Constraint:  If you have ENABLE_COLUMN_METADATA then you must
                   61692: ** not define OMIT_DECLTYPE.
                   61693: */
                   61694: #if defined(SQLITE_OMIT_DECLTYPE) && defined(SQLITE_ENABLE_COLUMN_METADATA)
                   61695: # error "Must not define both SQLITE_OMIT_DECLTYPE \
                   61696:          and SQLITE_ENABLE_COLUMN_METADATA"
                   61697: #endif
                   61698: 
                   61699: #ifndef SQLITE_OMIT_DECLTYPE
                   61700: /*
                   61701: ** Return the column declaration type (if applicable) of the 'i'th column
                   61702: ** of the result set of SQL statement pStmt.
                   61703: */
                   61704: SQLITE_API const char *sqlite3_column_decltype(sqlite3_stmt *pStmt, int N){
                   61705:   return columnName(
                   61706:       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_DECLTYPE);
                   61707: }
                   61708: #ifndef SQLITE_OMIT_UTF16
                   61709: SQLITE_API const void *sqlite3_column_decltype16(sqlite3_stmt *pStmt, int N){
                   61710:   return columnName(
                   61711:       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_DECLTYPE);
                   61712: }
                   61713: #endif /* SQLITE_OMIT_UTF16 */
                   61714: #endif /* SQLITE_OMIT_DECLTYPE */
                   61715: 
                   61716: #ifdef SQLITE_ENABLE_COLUMN_METADATA
                   61717: /*
                   61718: ** Return the name of the database from which a result column derives.
                   61719: ** NULL is returned if the result column is an expression or constant or
                   61720: ** anything else which is not an unabiguous reference to a database column.
                   61721: */
                   61722: SQLITE_API const char *sqlite3_column_database_name(sqlite3_stmt *pStmt, int N){
                   61723:   return columnName(
                   61724:       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_DATABASE);
                   61725: }
                   61726: #ifndef SQLITE_OMIT_UTF16
                   61727: SQLITE_API const void *sqlite3_column_database_name16(sqlite3_stmt *pStmt, int N){
                   61728:   return columnName(
                   61729:       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_DATABASE);
                   61730: }
                   61731: #endif /* SQLITE_OMIT_UTF16 */
                   61732: 
                   61733: /*
                   61734: ** Return the name of the table from which a result column derives.
                   61735: ** NULL is returned if the result column is an expression or constant or
                   61736: ** anything else which is not an unabiguous reference to a database column.
                   61737: */
                   61738: SQLITE_API const char *sqlite3_column_table_name(sqlite3_stmt *pStmt, int N){
                   61739:   return columnName(
                   61740:       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_TABLE);
                   61741: }
                   61742: #ifndef SQLITE_OMIT_UTF16
                   61743: SQLITE_API const void *sqlite3_column_table_name16(sqlite3_stmt *pStmt, int N){
                   61744:   return columnName(
                   61745:       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_TABLE);
                   61746: }
                   61747: #endif /* SQLITE_OMIT_UTF16 */
                   61748: 
                   61749: /*
                   61750: ** Return the name of the table column from which a result column derives.
                   61751: ** NULL is returned if the result column is an expression or constant or
                   61752: ** anything else which is not an unabiguous reference to a database column.
                   61753: */
                   61754: SQLITE_API const char *sqlite3_column_origin_name(sqlite3_stmt *pStmt, int N){
                   61755:   return columnName(
                   61756:       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_COLUMN);
                   61757: }
                   61758: #ifndef SQLITE_OMIT_UTF16
                   61759: SQLITE_API const void *sqlite3_column_origin_name16(sqlite3_stmt *pStmt, int N){
                   61760:   return columnName(
                   61761:       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_COLUMN);
                   61762: }
                   61763: #endif /* SQLITE_OMIT_UTF16 */
                   61764: #endif /* SQLITE_ENABLE_COLUMN_METADATA */
                   61765: 
                   61766: 
                   61767: /******************************* sqlite3_bind_  ***************************
                   61768: ** 
                   61769: ** Routines used to attach values to wildcards in a compiled SQL statement.
                   61770: */
                   61771: /*
                   61772: ** Unbind the value bound to variable i in virtual machine p. This is the 
                   61773: ** the same as binding a NULL value to the column. If the "i" parameter is
                   61774: ** out of range, then SQLITE_RANGE is returned. Othewise SQLITE_OK.
                   61775: **
                   61776: ** A successful evaluation of this routine acquires the mutex on p.
                   61777: ** the mutex is released if any kind of error occurs.
                   61778: **
                   61779: ** The error code stored in database p->db is overwritten with the return
                   61780: ** value in any case.
                   61781: */
                   61782: static int vdbeUnbind(Vdbe *p, int i){
                   61783:   Mem *pVar;
                   61784:   if( vdbeSafetyNotNull(p) ){
                   61785:     return SQLITE_MISUSE_BKPT;
                   61786:   }
                   61787:   sqlite3_mutex_enter(p->db->mutex);
                   61788:   if( p->magic!=VDBE_MAGIC_RUN || p->pc>=0 ){
                   61789:     sqlite3Error(p->db, SQLITE_MISUSE, 0);
                   61790:     sqlite3_mutex_leave(p->db->mutex);
                   61791:     sqlite3_log(SQLITE_MISUSE, 
                   61792:         "bind on a busy prepared statement: [%s]", p->zSql);
                   61793:     return SQLITE_MISUSE_BKPT;
                   61794:   }
                   61795:   if( i<1 || i>p->nVar ){
                   61796:     sqlite3Error(p->db, SQLITE_RANGE, 0);
                   61797:     sqlite3_mutex_leave(p->db->mutex);
                   61798:     return SQLITE_RANGE;
                   61799:   }
                   61800:   i--;
                   61801:   pVar = &p->aVar[i];
                   61802:   sqlite3VdbeMemRelease(pVar);
                   61803:   pVar->flags = MEM_Null;
                   61804:   sqlite3Error(p->db, SQLITE_OK, 0);
                   61805: 
                   61806:   /* If the bit corresponding to this variable in Vdbe.expmask is set, then 
                   61807:   ** binding a new value to this variable invalidates the current query plan.
                   61808:   **
                   61809:   ** IMPLEMENTATION-OF: R-48440-37595 If the specific value bound to host
                   61810:   ** parameter in the WHERE clause might influence the choice of query plan
                   61811:   ** for a statement, then the statement will be automatically recompiled,
                   61812:   ** as if there had been a schema change, on the first sqlite3_step() call
                   61813:   ** following any change to the bindings of that parameter.
                   61814:   */
                   61815:   if( p->isPrepareV2 &&
                   61816:      ((i<32 && p->expmask & ((u32)1 << i)) || p->expmask==0xffffffff)
                   61817:   ){
                   61818:     p->expired = 1;
                   61819:   }
                   61820:   return SQLITE_OK;
                   61821: }
                   61822: 
                   61823: /*
                   61824: ** Bind a text or BLOB value.
                   61825: */
                   61826: static int bindText(
                   61827:   sqlite3_stmt *pStmt,   /* The statement to bind against */
                   61828:   int i,                 /* Index of the parameter to bind */
                   61829:   const void *zData,     /* Pointer to the data to be bound */
                   61830:   int nData,             /* Number of bytes of data to be bound */
                   61831:   void (*xDel)(void*),   /* Destructor for the data */
                   61832:   u8 encoding            /* Encoding for the data */
                   61833: ){
                   61834:   Vdbe *p = (Vdbe *)pStmt;
                   61835:   Mem *pVar;
                   61836:   int rc;
                   61837: 
                   61838:   rc = vdbeUnbind(p, i);
                   61839:   if( rc==SQLITE_OK ){
                   61840:     if( zData!=0 ){
                   61841:       pVar = &p->aVar[i-1];
                   61842:       rc = sqlite3VdbeMemSetStr(pVar, zData, nData, encoding, xDel);
                   61843:       if( rc==SQLITE_OK && encoding!=0 ){
                   61844:         rc = sqlite3VdbeChangeEncoding(pVar, ENC(p->db));
                   61845:       }
                   61846:       sqlite3Error(p->db, rc, 0);
                   61847:       rc = sqlite3ApiExit(p->db, rc);
                   61848:     }
                   61849:     sqlite3_mutex_leave(p->db->mutex);
                   61850:   }else if( xDel!=SQLITE_STATIC && xDel!=SQLITE_TRANSIENT ){
                   61851:     xDel((void*)zData);
                   61852:   }
                   61853:   return rc;
                   61854: }
                   61855: 
                   61856: 
                   61857: /*
                   61858: ** Bind a blob value to an SQL statement variable.
                   61859: */
                   61860: SQLITE_API int sqlite3_bind_blob(
                   61861:   sqlite3_stmt *pStmt, 
                   61862:   int i, 
                   61863:   const void *zData, 
                   61864:   int nData, 
                   61865:   void (*xDel)(void*)
                   61866: ){
                   61867:   return bindText(pStmt, i, zData, nData, xDel, 0);
                   61868: }
                   61869: SQLITE_API int sqlite3_bind_double(sqlite3_stmt *pStmt, int i, double rValue){
                   61870:   int rc;
                   61871:   Vdbe *p = (Vdbe *)pStmt;
                   61872:   rc = vdbeUnbind(p, i);
                   61873:   if( rc==SQLITE_OK ){
                   61874:     sqlite3VdbeMemSetDouble(&p->aVar[i-1], rValue);
                   61875:     sqlite3_mutex_leave(p->db->mutex);
                   61876:   }
                   61877:   return rc;
                   61878: }
                   61879: SQLITE_API int sqlite3_bind_int(sqlite3_stmt *p, int i, int iValue){
                   61880:   return sqlite3_bind_int64(p, i, (i64)iValue);
                   61881: }
                   61882: SQLITE_API int sqlite3_bind_int64(sqlite3_stmt *pStmt, int i, sqlite_int64 iValue){
                   61883:   int rc;
                   61884:   Vdbe *p = (Vdbe *)pStmt;
                   61885:   rc = vdbeUnbind(p, i);
                   61886:   if( rc==SQLITE_OK ){
                   61887:     sqlite3VdbeMemSetInt64(&p->aVar[i-1], iValue);
                   61888:     sqlite3_mutex_leave(p->db->mutex);
                   61889:   }
                   61890:   return rc;
                   61891: }
                   61892: SQLITE_API int sqlite3_bind_null(sqlite3_stmt *pStmt, int i){
                   61893:   int rc;
                   61894:   Vdbe *p = (Vdbe*)pStmt;
                   61895:   rc = vdbeUnbind(p, i);
                   61896:   if( rc==SQLITE_OK ){
                   61897:     sqlite3_mutex_leave(p->db->mutex);
                   61898:   }
                   61899:   return rc;
                   61900: }
                   61901: SQLITE_API int sqlite3_bind_text( 
                   61902:   sqlite3_stmt *pStmt, 
                   61903:   int i, 
                   61904:   const char *zData, 
                   61905:   int nData, 
                   61906:   void (*xDel)(void*)
                   61907: ){
                   61908:   return bindText(pStmt, i, zData, nData, xDel, SQLITE_UTF8);
                   61909: }
                   61910: #ifndef SQLITE_OMIT_UTF16
                   61911: SQLITE_API int sqlite3_bind_text16(
                   61912:   sqlite3_stmt *pStmt, 
                   61913:   int i, 
                   61914:   const void *zData, 
                   61915:   int nData, 
                   61916:   void (*xDel)(void*)
                   61917: ){
                   61918:   return bindText(pStmt, i, zData, nData, xDel, SQLITE_UTF16NATIVE);
                   61919: }
                   61920: #endif /* SQLITE_OMIT_UTF16 */
                   61921: SQLITE_API int sqlite3_bind_value(sqlite3_stmt *pStmt, int i, const sqlite3_value *pValue){
                   61922:   int rc;
                   61923:   switch( pValue->type ){
                   61924:     case SQLITE_INTEGER: {
                   61925:       rc = sqlite3_bind_int64(pStmt, i, pValue->u.i);
                   61926:       break;
                   61927:     }
                   61928:     case SQLITE_FLOAT: {
                   61929:       rc = sqlite3_bind_double(pStmt, i, pValue->r);
                   61930:       break;
                   61931:     }
                   61932:     case SQLITE_BLOB: {
                   61933:       if( pValue->flags & MEM_Zero ){
                   61934:         rc = sqlite3_bind_zeroblob(pStmt, i, pValue->u.nZero);
                   61935:       }else{
                   61936:         rc = sqlite3_bind_blob(pStmt, i, pValue->z, pValue->n,SQLITE_TRANSIENT);
                   61937:       }
                   61938:       break;
                   61939:     }
                   61940:     case SQLITE_TEXT: {
                   61941:       rc = bindText(pStmt,i,  pValue->z, pValue->n, SQLITE_TRANSIENT,
                   61942:                               pValue->enc);
                   61943:       break;
                   61944:     }
                   61945:     default: {
                   61946:       rc = sqlite3_bind_null(pStmt, i);
                   61947:       break;
                   61948:     }
                   61949:   }
                   61950:   return rc;
                   61951: }
                   61952: SQLITE_API int sqlite3_bind_zeroblob(sqlite3_stmt *pStmt, int i, int n){
                   61953:   int rc;
                   61954:   Vdbe *p = (Vdbe *)pStmt;
                   61955:   rc = vdbeUnbind(p, i);
                   61956:   if( rc==SQLITE_OK ){
                   61957:     sqlite3VdbeMemSetZeroBlob(&p->aVar[i-1], n);
                   61958:     sqlite3_mutex_leave(p->db->mutex);
                   61959:   }
                   61960:   return rc;
                   61961: }
                   61962: 
                   61963: /*
                   61964: ** Return the number of wildcards that can be potentially bound to.
                   61965: ** This routine is added to support DBD::SQLite.  
                   61966: */
                   61967: SQLITE_API int sqlite3_bind_parameter_count(sqlite3_stmt *pStmt){
                   61968:   Vdbe *p = (Vdbe*)pStmt;
                   61969:   return p ? p->nVar : 0;
                   61970: }
                   61971: 
                   61972: /*
                   61973: ** Return the name of a wildcard parameter.  Return NULL if the index
                   61974: ** is out of range or if the wildcard is unnamed.
                   61975: **
                   61976: ** The result is always UTF-8.
                   61977: */
                   61978: SQLITE_API const char *sqlite3_bind_parameter_name(sqlite3_stmt *pStmt, int i){
                   61979:   Vdbe *p = (Vdbe*)pStmt;
                   61980:   if( p==0 || i<1 || i>p->nzVar ){
                   61981:     return 0;
                   61982:   }
                   61983:   return p->azVar[i-1];
                   61984: }
                   61985: 
                   61986: /*
                   61987: ** Given a wildcard parameter name, return the index of the variable
                   61988: ** with that name.  If there is no variable with the given name,
                   61989: ** return 0.
                   61990: */
                   61991: SQLITE_PRIVATE int sqlite3VdbeParameterIndex(Vdbe *p, const char *zName, int nName){
                   61992:   int i;
                   61993:   if( p==0 ){
                   61994:     return 0;
                   61995:   }
                   61996:   if( zName ){
                   61997:     for(i=0; i<p->nzVar; i++){
                   61998:       const char *z = p->azVar[i];
                   61999:       if( z && memcmp(z,zName,nName)==0 && z[nName]==0 ){
                   62000:         return i+1;
                   62001:       }
                   62002:     }
                   62003:   }
                   62004:   return 0;
                   62005: }
                   62006: SQLITE_API int sqlite3_bind_parameter_index(sqlite3_stmt *pStmt, const char *zName){
                   62007:   return sqlite3VdbeParameterIndex((Vdbe*)pStmt, zName, sqlite3Strlen30(zName));
                   62008: }
                   62009: 
                   62010: /*
                   62011: ** Transfer all bindings from the first statement over to the second.
                   62012: */
                   62013: SQLITE_PRIVATE int sqlite3TransferBindings(sqlite3_stmt *pFromStmt, sqlite3_stmt *pToStmt){
                   62014:   Vdbe *pFrom = (Vdbe*)pFromStmt;
                   62015:   Vdbe *pTo = (Vdbe*)pToStmt;
                   62016:   int i;
                   62017:   assert( pTo->db==pFrom->db );
                   62018:   assert( pTo->nVar==pFrom->nVar );
                   62019:   sqlite3_mutex_enter(pTo->db->mutex);
                   62020:   for(i=0; i<pFrom->nVar; i++){
                   62021:     sqlite3VdbeMemMove(&pTo->aVar[i], &pFrom->aVar[i]);
                   62022:   }
                   62023:   sqlite3_mutex_leave(pTo->db->mutex);
                   62024:   return SQLITE_OK;
                   62025: }
                   62026: 
                   62027: #ifndef SQLITE_OMIT_DEPRECATED
                   62028: /*
                   62029: ** Deprecated external interface.  Internal/core SQLite code
                   62030: ** should call sqlite3TransferBindings.
                   62031: **
                   62032: ** Is is misuse to call this routine with statements from different
                   62033: ** database connections.  But as this is a deprecated interface, we
                   62034: ** will not bother to check for that condition.
                   62035: **
                   62036: ** If the two statements contain a different number of bindings, then
                   62037: ** an SQLITE_ERROR is returned.  Nothing else can go wrong, so otherwise
                   62038: ** SQLITE_OK is returned.
                   62039: */
                   62040: SQLITE_API int sqlite3_transfer_bindings(sqlite3_stmt *pFromStmt, sqlite3_stmt *pToStmt){
                   62041:   Vdbe *pFrom = (Vdbe*)pFromStmt;
                   62042:   Vdbe *pTo = (Vdbe*)pToStmt;
                   62043:   if( pFrom->nVar!=pTo->nVar ){
                   62044:     return SQLITE_ERROR;
                   62045:   }
                   62046:   if( pTo->isPrepareV2 && pTo->expmask ){
                   62047:     pTo->expired = 1;
                   62048:   }
                   62049:   if( pFrom->isPrepareV2 && pFrom->expmask ){
                   62050:     pFrom->expired = 1;
                   62051:   }
                   62052:   return sqlite3TransferBindings(pFromStmt, pToStmt);
                   62053: }
                   62054: #endif
                   62055: 
                   62056: /*
                   62057: ** Return the sqlite3* database handle to which the prepared statement given
                   62058: ** in the argument belongs.  This is the same database handle that was
                   62059: ** the first argument to the sqlite3_prepare() that was used to create
                   62060: ** the statement in the first place.
                   62061: */
                   62062: SQLITE_API sqlite3 *sqlite3_db_handle(sqlite3_stmt *pStmt){
                   62063:   return pStmt ? ((Vdbe*)pStmt)->db : 0;
                   62064: }
                   62065: 
                   62066: /*
                   62067: ** Return true if the prepared statement is guaranteed to not modify the
                   62068: ** database.
                   62069: */
                   62070: SQLITE_API int sqlite3_stmt_readonly(sqlite3_stmt *pStmt){
                   62071:   return pStmt ? ((Vdbe*)pStmt)->readOnly : 1;
                   62072: }
                   62073: 
                   62074: /*
                   62075: ** Return a pointer to the next prepared statement after pStmt associated
                   62076: ** with database connection pDb.  If pStmt is NULL, return the first
                   62077: ** prepared statement for the database connection.  Return NULL if there
                   62078: ** are no more.
                   62079: */
                   62080: SQLITE_API sqlite3_stmt *sqlite3_next_stmt(sqlite3 *pDb, sqlite3_stmt *pStmt){
                   62081:   sqlite3_stmt *pNext;
                   62082:   sqlite3_mutex_enter(pDb->mutex);
                   62083:   if( pStmt==0 ){
                   62084:     pNext = (sqlite3_stmt*)pDb->pVdbe;
                   62085:   }else{
                   62086:     pNext = (sqlite3_stmt*)((Vdbe*)pStmt)->pNext;
                   62087:   }
                   62088:   sqlite3_mutex_leave(pDb->mutex);
                   62089:   return pNext;
                   62090: }
                   62091: 
                   62092: /*
                   62093: ** Return the value of a status counter for a prepared statement
                   62094: */
                   62095: SQLITE_API int sqlite3_stmt_status(sqlite3_stmt *pStmt, int op, int resetFlag){
                   62096:   Vdbe *pVdbe = (Vdbe*)pStmt;
                   62097:   int v = pVdbe->aCounter[op-1];
                   62098:   if( resetFlag ) pVdbe->aCounter[op-1] = 0;
                   62099:   return v;
                   62100: }
                   62101: 
                   62102: /************** End of vdbeapi.c *********************************************/
                   62103: /************** Begin file vdbetrace.c ***************************************/
                   62104: /*
                   62105: ** 2009 November 25
                   62106: **
                   62107: ** The author disclaims copyright to this source code.  In place of
                   62108: ** a legal notice, here is a blessing:
                   62109: **
                   62110: **    May you do good and not evil.
                   62111: **    May you find forgiveness for yourself and forgive others.
                   62112: **    May you share freely, never taking more than you give.
                   62113: **
                   62114: *************************************************************************
                   62115: **
                   62116: ** This file contains code used to insert the values of host parameters
                   62117: ** (aka "wildcards") into the SQL text output by sqlite3_trace().
                   62118: */
                   62119: 
                   62120: #ifndef SQLITE_OMIT_TRACE
                   62121: 
                   62122: /*
                   62123: ** zSql is a zero-terminated string of UTF-8 SQL text.  Return the number of
                   62124: ** bytes in this text up to but excluding the first character in
                   62125: ** a host parameter.  If the text contains no host parameters, return
                   62126: ** the total number of bytes in the text.
                   62127: */
                   62128: static int findNextHostParameter(const char *zSql, int *pnToken){
                   62129:   int tokenType;
                   62130:   int nTotal = 0;
                   62131:   int n;
                   62132: 
                   62133:   *pnToken = 0;
                   62134:   while( zSql[0] ){
                   62135:     n = sqlite3GetToken((u8*)zSql, &tokenType);
                   62136:     assert( n>0 && tokenType!=TK_ILLEGAL );
                   62137:     if( tokenType==TK_VARIABLE ){
                   62138:       *pnToken = n;
                   62139:       break;
                   62140:     }
                   62141:     nTotal += n;
                   62142:     zSql += n;
                   62143:   }
                   62144:   return nTotal;
                   62145: }
                   62146: 
                   62147: /*
                   62148: ** This function returns a pointer to a nul-terminated string in memory
                   62149: ** obtained from sqlite3DbMalloc(). If sqlite3.vdbeExecCnt is 1, then the
                   62150: ** string contains a copy of zRawSql but with host parameters expanded to 
                   62151: ** their current bindings. Or, if sqlite3.vdbeExecCnt is greater than 1, 
                   62152: ** then the returned string holds a copy of zRawSql with "-- " prepended
                   62153: ** to each line of text.
                   62154: **
                   62155: ** The calling function is responsible for making sure the memory returned
                   62156: ** is eventually freed.
                   62157: **
                   62158: ** ALGORITHM:  Scan the input string looking for host parameters in any of
                   62159: ** these forms:  ?, ?N, $A, @A, :A.  Take care to avoid text within
                   62160: ** string literals, quoted identifier names, and comments.  For text forms,
                   62161: ** the host parameter index is found by scanning the perpared
                   62162: ** statement for the corresponding OP_Variable opcode.  Once the host
                   62163: ** parameter index is known, locate the value in p->aVar[].  Then render
                   62164: ** the value as a literal in place of the host parameter name.
                   62165: */
                   62166: SQLITE_PRIVATE char *sqlite3VdbeExpandSql(
                   62167:   Vdbe *p,                 /* The prepared statement being evaluated */
                   62168:   const char *zRawSql      /* Raw text of the SQL statement */
                   62169: ){
                   62170:   sqlite3 *db;             /* The database connection */
                   62171:   int idx = 0;             /* Index of a host parameter */
                   62172:   int nextIndex = 1;       /* Index of next ? host parameter */
                   62173:   int n;                   /* Length of a token prefix */
                   62174:   int nToken;              /* Length of the parameter token */
                   62175:   int i;                   /* Loop counter */
                   62176:   Mem *pVar;               /* Value of a host parameter */
                   62177:   StrAccum out;            /* Accumulate the output here */
                   62178:   char zBase[100];         /* Initial working space */
                   62179: 
                   62180:   db = p->db;
                   62181:   sqlite3StrAccumInit(&out, zBase, sizeof(zBase), 
                   62182:                       db->aLimit[SQLITE_LIMIT_LENGTH]);
                   62183:   out.db = db;
                   62184:   if( db->vdbeExecCnt>1 ){
                   62185:     while( *zRawSql ){
                   62186:       const char *zStart = zRawSql;
                   62187:       while( *(zRawSql++)!='\n' && *zRawSql );
                   62188:       sqlite3StrAccumAppend(&out, "-- ", 3);
                   62189:       sqlite3StrAccumAppend(&out, zStart, (int)(zRawSql-zStart));
                   62190:     }
                   62191:   }else{
                   62192:     while( zRawSql[0] ){
                   62193:       n = findNextHostParameter(zRawSql, &nToken);
                   62194:       assert( n>0 );
                   62195:       sqlite3StrAccumAppend(&out, zRawSql, n);
                   62196:       zRawSql += n;
                   62197:       assert( zRawSql[0] || nToken==0 );
                   62198:       if( nToken==0 ) break;
                   62199:       if( zRawSql[0]=='?' ){
                   62200:         if( nToken>1 ){
                   62201:           assert( sqlite3Isdigit(zRawSql[1]) );
                   62202:           sqlite3GetInt32(&zRawSql[1], &idx);
                   62203:         }else{
                   62204:           idx = nextIndex;
                   62205:         }
                   62206:       }else{
                   62207:         assert( zRawSql[0]==':' || zRawSql[0]=='$' || zRawSql[0]=='@' );
                   62208:         testcase( zRawSql[0]==':' );
                   62209:         testcase( zRawSql[0]=='$' );
                   62210:         testcase( zRawSql[0]=='@' );
                   62211:         idx = sqlite3VdbeParameterIndex(p, zRawSql, nToken);
                   62212:         assert( idx>0 );
                   62213:       }
                   62214:       zRawSql += nToken;
                   62215:       nextIndex = idx + 1;
                   62216:       assert( idx>0 && idx<=p->nVar );
                   62217:       pVar = &p->aVar[idx-1];
                   62218:       if( pVar->flags & MEM_Null ){
                   62219:         sqlite3StrAccumAppend(&out, "NULL", 4);
                   62220:       }else if( pVar->flags & MEM_Int ){
                   62221:         sqlite3XPrintf(&out, "%lld", pVar->u.i);
                   62222:       }else if( pVar->flags & MEM_Real ){
                   62223:         sqlite3XPrintf(&out, "%!.15g", pVar->r);
                   62224:       }else if( pVar->flags & MEM_Str ){
                   62225: #ifndef SQLITE_OMIT_UTF16
                   62226:         u8 enc = ENC(db);
                   62227:         if( enc!=SQLITE_UTF8 ){
                   62228:           Mem utf8;
                   62229:           memset(&utf8, 0, sizeof(utf8));
                   62230:           utf8.db = db;
                   62231:           sqlite3VdbeMemSetStr(&utf8, pVar->z, pVar->n, enc, SQLITE_STATIC);
                   62232:           sqlite3VdbeChangeEncoding(&utf8, SQLITE_UTF8);
                   62233:           sqlite3XPrintf(&out, "'%.*q'", utf8.n, utf8.z);
                   62234:           sqlite3VdbeMemRelease(&utf8);
                   62235:         }else
                   62236: #endif
                   62237:         {
                   62238:           sqlite3XPrintf(&out, "'%.*q'", pVar->n, pVar->z);
                   62239:         }
                   62240:       }else if( pVar->flags & MEM_Zero ){
                   62241:         sqlite3XPrintf(&out, "zeroblob(%d)", pVar->u.nZero);
                   62242:       }else{
                   62243:         assert( pVar->flags & MEM_Blob );
                   62244:         sqlite3StrAccumAppend(&out, "x'", 2);
                   62245:         for(i=0; i<pVar->n; i++){
                   62246:           sqlite3XPrintf(&out, "%02x", pVar->z[i]&0xff);
                   62247:         }
                   62248:         sqlite3StrAccumAppend(&out, "'", 1);
                   62249:       }
                   62250:     }
                   62251:   }
                   62252:   return sqlite3StrAccumFinish(&out);
                   62253: }
                   62254: 
                   62255: #endif /* #ifndef SQLITE_OMIT_TRACE */
                   62256: 
                   62257: /************** End of vdbetrace.c *******************************************/
                   62258: /************** Begin file vdbe.c ********************************************/
                   62259: /*
                   62260: ** 2001 September 15
                   62261: **
                   62262: ** The author disclaims copyright to this source code.  In place of
                   62263: ** a legal notice, here is a blessing:
                   62264: **
                   62265: **    May you do good and not evil.
                   62266: **    May you find forgiveness for yourself and forgive others.
                   62267: **    May you share freely, never taking more than you give.
                   62268: **
                   62269: *************************************************************************
                   62270: ** The code in this file implements execution method of the 
                   62271: ** Virtual Database Engine (VDBE).  A separate file ("vdbeaux.c")
                   62272: ** handles housekeeping details such as creating and deleting
                   62273: ** VDBE instances.  This file is solely interested in executing
                   62274: ** the VDBE program.
                   62275: **
                   62276: ** In the external interface, an "sqlite3_stmt*" is an opaque pointer
                   62277: ** to a VDBE.
                   62278: **
                   62279: ** The SQL parser generates a program which is then executed by
                   62280: ** the VDBE to do the work of the SQL statement.  VDBE programs are 
                   62281: ** similar in form to assembly language.  The program consists of
                   62282: ** a linear sequence of operations.  Each operation has an opcode 
                   62283: ** and 5 operands.  Operands P1, P2, and P3 are integers.  Operand P4 
                   62284: ** is a null-terminated string.  Operand P5 is an unsigned character.
                   62285: ** Few opcodes use all 5 operands.
                   62286: **
                   62287: ** Computation results are stored on a set of registers numbered beginning
                   62288: ** with 1 and going up to Vdbe.nMem.  Each register can store
                   62289: ** either an integer, a null-terminated string, a floating point
                   62290: ** number, or the SQL "NULL" value.  An implicit conversion from one
                   62291: ** type to the other occurs as necessary.
                   62292: ** 
                   62293: ** Most of the code in this file is taken up by the sqlite3VdbeExec()
                   62294: ** function which does the work of interpreting a VDBE program.
                   62295: ** But other routines are also provided to help in building up
                   62296: ** a program instruction by instruction.
                   62297: **
                   62298: ** Various scripts scan this source file in order to generate HTML
                   62299: ** documentation, headers files, or other derived files.  The formatting
                   62300: ** of the code in this file is, therefore, important.  See other comments
                   62301: ** in this file for details.  If in doubt, do not deviate from existing
                   62302: ** commenting and indentation practices when changing or adding code.
                   62303: */
                   62304: 
                   62305: /*
                   62306: ** Invoke this macro on memory cells just prior to changing the
                   62307: ** value of the cell.  This macro verifies that shallow copies are
                   62308: ** not misused.
                   62309: */
                   62310: #ifdef SQLITE_DEBUG
                   62311: # define memAboutToChange(P,M) sqlite3VdbeMemPrepareToChange(P,M)
                   62312: #else
                   62313: # define memAboutToChange(P,M)
                   62314: #endif
                   62315: 
                   62316: /*
                   62317: ** The following global variable is incremented every time a cursor
                   62318: ** moves, either by the OP_SeekXX, OP_Next, or OP_Prev opcodes.  The test
                   62319: ** procedures use this information to make sure that indices are
                   62320: ** working correctly.  This variable has no function other than to
                   62321: ** help verify the correct operation of the library.
                   62322: */
                   62323: #ifdef SQLITE_TEST
                   62324: SQLITE_API int sqlite3_search_count = 0;
                   62325: #endif
                   62326: 
                   62327: /*
                   62328: ** When this global variable is positive, it gets decremented once before
                   62329: ** each instruction in the VDBE.  When reaches zero, the u1.isInterrupted
                   62330: ** field of the sqlite3 structure is set in order to simulate and interrupt.
                   62331: **
                   62332: ** This facility is used for testing purposes only.  It does not function
                   62333: ** in an ordinary build.
                   62334: */
                   62335: #ifdef SQLITE_TEST
                   62336: SQLITE_API int sqlite3_interrupt_count = 0;
                   62337: #endif
                   62338: 
                   62339: /*
                   62340: ** The next global variable is incremented each type the OP_Sort opcode
                   62341: ** is executed.  The test procedures use this information to make sure that
                   62342: ** sorting is occurring or not occurring at appropriate times.   This variable
                   62343: ** has no function other than to help verify the correct operation of the
                   62344: ** library.
                   62345: */
                   62346: #ifdef SQLITE_TEST
                   62347: SQLITE_API int sqlite3_sort_count = 0;
                   62348: #endif
                   62349: 
                   62350: /*
                   62351: ** The next global variable records the size of the largest MEM_Blob
                   62352: ** or MEM_Str that has been used by a VDBE opcode.  The test procedures
                   62353: ** use this information to make sure that the zero-blob functionality
                   62354: ** is working correctly.   This variable has no function other than to
                   62355: ** help verify the correct operation of the library.
                   62356: */
                   62357: #ifdef SQLITE_TEST
                   62358: SQLITE_API int sqlite3_max_blobsize = 0;
                   62359: static void updateMaxBlobsize(Mem *p){
                   62360:   if( (p->flags & (MEM_Str|MEM_Blob))!=0 && p->n>sqlite3_max_blobsize ){
                   62361:     sqlite3_max_blobsize = p->n;
                   62362:   }
                   62363: }
                   62364: #endif
                   62365: 
                   62366: /*
                   62367: ** The next global variable is incremented each type the OP_Found opcode
                   62368: ** is executed. This is used to test whether or not the foreign key
                   62369: ** operation implemented using OP_FkIsZero is working. This variable
                   62370: ** has no function other than to help verify the correct operation of the
                   62371: ** library.
                   62372: */
                   62373: #ifdef SQLITE_TEST
                   62374: SQLITE_API int sqlite3_found_count = 0;
                   62375: #endif
                   62376: 
                   62377: /*
                   62378: ** Test a register to see if it exceeds the current maximum blob size.
                   62379: ** If it does, record the new maximum blob size.
                   62380: */
                   62381: #if defined(SQLITE_TEST) && !defined(SQLITE_OMIT_BUILTIN_TEST)
                   62382: # define UPDATE_MAX_BLOBSIZE(P)  updateMaxBlobsize(P)
                   62383: #else
                   62384: # define UPDATE_MAX_BLOBSIZE(P)
                   62385: #endif
                   62386: 
                   62387: /*
                   62388: ** Convert the given register into a string if it isn't one
                   62389: ** already. Return non-zero if a malloc() fails.
                   62390: */
                   62391: #define Stringify(P, enc) \
                   62392:    if(((P)->flags&(MEM_Str|MEM_Blob))==0 && sqlite3VdbeMemStringify(P,enc)) \
                   62393:      { goto no_mem; }
                   62394: 
                   62395: /*
                   62396: ** An ephemeral string value (signified by the MEM_Ephem flag) contains
                   62397: ** a pointer to a dynamically allocated string where some other entity
                   62398: ** is responsible for deallocating that string.  Because the register
                   62399: ** does not control the string, it might be deleted without the register
                   62400: ** knowing it.
                   62401: **
                   62402: ** This routine converts an ephemeral string into a dynamically allocated
                   62403: ** string that the register itself controls.  In other words, it
                   62404: ** converts an MEM_Ephem string into an MEM_Dyn string.
                   62405: */
                   62406: #define Deephemeralize(P) \
                   62407:    if( ((P)->flags&MEM_Ephem)!=0 \
                   62408:        && sqlite3VdbeMemMakeWriteable(P) ){ goto no_mem;}
                   62409: 
                   62410: /*
                   62411: ** Call sqlite3VdbeMemExpandBlob() on the supplied value (type Mem*)
                   62412: ** P if required.
                   62413: */
                   62414: #define ExpandBlob(P) (((P)->flags&MEM_Zero)?sqlite3VdbeMemExpandBlob(P):0)
                   62415: 
                   62416: /*
                   62417: ** Argument pMem points at a register that will be passed to a
                   62418: ** user-defined function or returned to the user as the result of a query.
                   62419: ** This routine sets the pMem->type variable used by the sqlite3_value_*() 
                   62420: ** routines.
                   62421: */
                   62422: SQLITE_PRIVATE void sqlite3VdbeMemStoreType(Mem *pMem){
                   62423:   int flags = pMem->flags;
                   62424:   if( flags & MEM_Null ){
                   62425:     pMem->type = SQLITE_NULL;
                   62426:   }
                   62427:   else if( flags & MEM_Int ){
                   62428:     pMem->type = SQLITE_INTEGER;
                   62429:   }
                   62430:   else if( flags & MEM_Real ){
                   62431:     pMem->type = SQLITE_FLOAT;
                   62432:   }
                   62433:   else if( flags & MEM_Str ){
                   62434:     pMem->type = SQLITE_TEXT;
                   62435:   }else{
                   62436:     pMem->type = SQLITE_BLOB;
                   62437:   }
                   62438: }
                   62439: 
                   62440: /*
                   62441: ** Allocate VdbeCursor number iCur.  Return a pointer to it.  Return NULL
                   62442: ** if we run out of memory.
                   62443: */
                   62444: static VdbeCursor *allocateCursor(
                   62445:   Vdbe *p,              /* The virtual machine */
                   62446:   int iCur,             /* Index of the new VdbeCursor */
                   62447:   int nField,           /* Number of fields in the table or index */
                   62448:   int iDb,              /* When database the cursor belongs to, or -1 */
                   62449:   int isBtreeCursor     /* True for B-Tree.  False for pseudo-table or vtab */
                   62450: ){
                   62451:   /* Find the memory cell that will be used to store the blob of memory
                   62452:   ** required for this VdbeCursor structure. It is convenient to use a 
                   62453:   ** vdbe memory cell to manage the memory allocation required for a
                   62454:   ** VdbeCursor structure for the following reasons:
                   62455:   **
                   62456:   **   * Sometimes cursor numbers are used for a couple of different
                   62457:   **     purposes in a vdbe program. The different uses might require
                   62458:   **     different sized allocations. Memory cells provide growable
                   62459:   **     allocations.
                   62460:   **
                   62461:   **   * When using ENABLE_MEMORY_MANAGEMENT, memory cell buffers can
                   62462:   **     be freed lazily via the sqlite3_release_memory() API. This
                   62463:   **     minimizes the number of malloc calls made by the system.
                   62464:   **
                   62465:   ** Memory cells for cursors are allocated at the top of the address
                   62466:   ** space. Memory cell (p->nMem) corresponds to cursor 0. Space for
                   62467:   ** cursor 1 is managed by memory cell (p->nMem-1), etc.
                   62468:   */
                   62469:   Mem *pMem = &p->aMem[p->nMem-iCur];
                   62470: 
                   62471:   int nByte;
                   62472:   VdbeCursor *pCx = 0;
                   62473:   nByte = 
                   62474:       ROUND8(sizeof(VdbeCursor)) + 
                   62475:       (isBtreeCursor?sqlite3BtreeCursorSize():0) + 
                   62476:       2*nField*sizeof(u32);
                   62477: 
                   62478:   assert( iCur<p->nCursor );
                   62479:   if( p->apCsr[iCur] ){
                   62480:     sqlite3VdbeFreeCursor(p, p->apCsr[iCur]);
                   62481:     p->apCsr[iCur] = 0;
                   62482:   }
                   62483:   if( SQLITE_OK==sqlite3VdbeMemGrow(pMem, nByte, 0) ){
                   62484:     p->apCsr[iCur] = pCx = (VdbeCursor*)pMem->z;
                   62485:     memset(pCx, 0, sizeof(VdbeCursor));
                   62486:     pCx->iDb = iDb;
                   62487:     pCx->nField = nField;
                   62488:     if( nField ){
                   62489:       pCx->aType = (u32 *)&pMem->z[ROUND8(sizeof(VdbeCursor))];
                   62490:     }
                   62491:     if( isBtreeCursor ){
                   62492:       pCx->pCursor = (BtCursor*)
                   62493:           &pMem->z[ROUND8(sizeof(VdbeCursor))+2*nField*sizeof(u32)];
                   62494:       sqlite3BtreeCursorZero(pCx->pCursor);
                   62495:     }
                   62496:   }
                   62497:   return pCx;
                   62498: }
                   62499: 
                   62500: /*
                   62501: ** Try to convert a value into a numeric representation if we can
                   62502: ** do so without loss of information.  In other words, if the string
                   62503: ** looks like a number, convert it into a number.  If it does not
                   62504: ** look like a number, leave it alone.
                   62505: */
                   62506: static void applyNumericAffinity(Mem *pRec){
                   62507:   if( (pRec->flags & (MEM_Real|MEM_Int))==0 ){
                   62508:     double rValue;
                   62509:     i64 iValue;
                   62510:     u8 enc = pRec->enc;
                   62511:     if( (pRec->flags&MEM_Str)==0 ) return;
                   62512:     if( sqlite3AtoF(pRec->z, &rValue, pRec->n, enc)==0 ) return;
                   62513:     if( 0==sqlite3Atoi64(pRec->z, &iValue, pRec->n, enc) ){
                   62514:       pRec->u.i = iValue;
                   62515:       pRec->flags |= MEM_Int;
                   62516:     }else{
                   62517:       pRec->r = rValue;
                   62518:       pRec->flags |= MEM_Real;
                   62519:     }
                   62520:   }
                   62521: }
                   62522: 
                   62523: /*
                   62524: ** Processing is determine by the affinity parameter:
                   62525: **
                   62526: ** SQLITE_AFF_INTEGER:
                   62527: ** SQLITE_AFF_REAL:
                   62528: ** SQLITE_AFF_NUMERIC:
                   62529: **    Try to convert pRec to an integer representation or a 
                   62530: **    floating-point representation if an integer representation
                   62531: **    is not possible.  Note that the integer representation is
                   62532: **    always preferred, even if the affinity is REAL, because
                   62533: **    an integer representation is more space efficient on disk.
                   62534: **
                   62535: ** SQLITE_AFF_TEXT:
                   62536: **    Convert pRec to a text representation.
                   62537: **
                   62538: ** SQLITE_AFF_NONE:
                   62539: **    No-op.  pRec is unchanged.
                   62540: */
                   62541: static void applyAffinity(
                   62542:   Mem *pRec,          /* The value to apply affinity to */
                   62543:   char affinity,      /* The affinity to be applied */
                   62544:   u8 enc              /* Use this text encoding */
                   62545: ){
                   62546:   if( affinity==SQLITE_AFF_TEXT ){
                   62547:     /* Only attempt the conversion to TEXT if there is an integer or real
                   62548:     ** representation (blob and NULL do not get converted) but no string
                   62549:     ** representation.
                   62550:     */
                   62551:     if( 0==(pRec->flags&MEM_Str) && (pRec->flags&(MEM_Real|MEM_Int)) ){
                   62552:       sqlite3VdbeMemStringify(pRec, enc);
                   62553:     }
                   62554:     pRec->flags &= ~(MEM_Real|MEM_Int);
                   62555:   }else if( affinity!=SQLITE_AFF_NONE ){
                   62556:     assert( affinity==SQLITE_AFF_INTEGER || affinity==SQLITE_AFF_REAL
                   62557:              || affinity==SQLITE_AFF_NUMERIC );
                   62558:     applyNumericAffinity(pRec);
                   62559:     if( pRec->flags & MEM_Real ){
                   62560:       sqlite3VdbeIntegerAffinity(pRec);
                   62561:     }
                   62562:   }
                   62563: }
                   62564: 
                   62565: /*
                   62566: ** Try to convert the type of a function argument or a result column
                   62567: ** into a numeric representation.  Use either INTEGER or REAL whichever
                   62568: ** is appropriate.  But only do the conversion if it is possible without
                   62569: ** loss of information and return the revised type of the argument.
                   62570: */
                   62571: SQLITE_API int sqlite3_value_numeric_type(sqlite3_value *pVal){
                   62572:   Mem *pMem = (Mem*)pVal;
                   62573:   if( pMem->type==SQLITE_TEXT ){
                   62574:     applyNumericAffinity(pMem);
                   62575:     sqlite3VdbeMemStoreType(pMem);
                   62576:   }
                   62577:   return pMem->type;
                   62578: }
                   62579: 
                   62580: /*
                   62581: ** Exported version of applyAffinity(). This one works on sqlite3_value*, 
                   62582: ** not the internal Mem* type.
                   62583: */
                   62584: SQLITE_PRIVATE void sqlite3ValueApplyAffinity(
                   62585:   sqlite3_value *pVal, 
                   62586:   u8 affinity, 
                   62587:   u8 enc
                   62588: ){
                   62589:   applyAffinity((Mem *)pVal, affinity, enc);
                   62590: }
                   62591: 
                   62592: #ifdef SQLITE_DEBUG
                   62593: /*
                   62594: ** Write a nice string representation of the contents of cell pMem
                   62595: ** into buffer zBuf, length nBuf.
                   62596: */
                   62597: SQLITE_PRIVATE void sqlite3VdbeMemPrettyPrint(Mem *pMem, char *zBuf){
                   62598:   char *zCsr = zBuf;
                   62599:   int f = pMem->flags;
                   62600: 
                   62601:   static const char *const encnames[] = {"(X)", "(8)", "(16LE)", "(16BE)"};
                   62602: 
                   62603:   if( f&MEM_Blob ){
                   62604:     int i;
                   62605:     char c;
                   62606:     if( f & MEM_Dyn ){
                   62607:       c = 'z';
                   62608:       assert( (f & (MEM_Static|MEM_Ephem))==0 );
                   62609:     }else if( f & MEM_Static ){
                   62610:       c = 't';
                   62611:       assert( (f & (MEM_Dyn|MEM_Ephem))==0 );
                   62612:     }else if( f & MEM_Ephem ){
                   62613:       c = 'e';
                   62614:       assert( (f & (MEM_Static|MEM_Dyn))==0 );
                   62615:     }else{
                   62616:       c = 's';
                   62617:     }
                   62618: 
                   62619:     sqlite3_snprintf(100, zCsr, "%c", c);
                   62620:     zCsr += sqlite3Strlen30(zCsr);
                   62621:     sqlite3_snprintf(100, zCsr, "%d[", pMem->n);
                   62622:     zCsr += sqlite3Strlen30(zCsr);
                   62623:     for(i=0; i<16 && i<pMem->n; i++){
                   62624:       sqlite3_snprintf(100, zCsr, "%02X", ((int)pMem->z[i] & 0xFF));
                   62625:       zCsr += sqlite3Strlen30(zCsr);
                   62626:     }
                   62627:     for(i=0; i<16 && i<pMem->n; i++){
                   62628:       char z = pMem->z[i];
                   62629:       if( z<32 || z>126 ) *zCsr++ = '.';
                   62630:       else *zCsr++ = z;
                   62631:     }
                   62632: 
                   62633:     sqlite3_snprintf(100, zCsr, "]%s", encnames[pMem->enc]);
                   62634:     zCsr += sqlite3Strlen30(zCsr);
                   62635:     if( f & MEM_Zero ){
                   62636:       sqlite3_snprintf(100, zCsr,"+%dz",pMem->u.nZero);
                   62637:       zCsr += sqlite3Strlen30(zCsr);
                   62638:     }
                   62639:     *zCsr = '\0';
                   62640:   }else if( f & MEM_Str ){
                   62641:     int j, k;
                   62642:     zBuf[0] = ' ';
                   62643:     if( f & MEM_Dyn ){
                   62644:       zBuf[1] = 'z';
                   62645:       assert( (f & (MEM_Static|MEM_Ephem))==0 );
                   62646:     }else if( f & MEM_Static ){
                   62647:       zBuf[1] = 't';
                   62648:       assert( (f & (MEM_Dyn|MEM_Ephem))==0 );
                   62649:     }else if( f & MEM_Ephem ){
                   62650:       zBuf[1] = 'e';
                   62651:       assert( (f & (MEM_Static|MEM_Dyn))==0 );
                   62652:     }else{
                   62653:       zBuf[1] = 's';
                   62654:     }
                   62655:     k = 2;
                   62656:     sqlite3_snprintf(100, &zBuf[k], "%d", pMem->n);
                   62657:     k += sqlite3Strlen30(&zBuf[k]);
                   62658:     zBuf[k++] = '[';
                   62659:     for(j=0; j<15 && j<pMem->n; j++){
                   62660:       u8 c = pMem->z[j];
                   62661:       if( c>=0x20 && c<0x7f ){
                   62662:         zBuf[k++] = c;
                   62663:       }else{
                   62664:         zBuf[k++] = '.';
                   62665:       }
                   62666:     }
                   62667:     zBuf[k++] = ']';
                   62668:     sqlite3_snprintf(100,&zBuf[k], encnames[pMem->enc]);
                   62669:     k += sqlite3Strlen30(&zBuf[k]);
                   62670:     zBuf[k++] = 0;
                   62671:   }
                   62672: }
                   62673: #endif
                   62674: 
                   62675: #ifdef SQLITE_DEBUG
                   62676: /*
                   62677: ** Print the value of a register for tracing purposes:
                   62678: */
                   62679: static void memTracePrint(FILE *out, Mem *p){
                   62680:   if( p->flags & MEM_Null ){
                   62681:     fprintf(out, " NULL");
                   62682:   }else if( (p->flags & (MEM_Int|MEM_Str))==(MEM_Int|MEM_Str) ){
                   62683:     fprintf(out, " si:%lld", p->u.i);
                   62684:   }else if( p->flags & MEM_Int ){
                   62685:     fprintf(out, " i:%lld", p->u.i);
                   62686: #ifndef SQLITE_OMIT_FLOATING_POINT
                   62687:   }else if( p->flags & MEM_Real ){
                   62688:     fprintf(out, " r:%g", p->r);
                   62689: #endif
                   62690:   }else if( p->flags & MEM_RowSet ){
                   62691:     fprintf(out, " (rowset)");
                   62692:   }else{
                   62693:     char zBuf[200];
                   62694:     sqlite3VdbeMemPrettyPrint(p, zBuf);
                   62695:     fprintf(out, " ");
                   62696:     fprintf(out, "%s", zBuf);
                   62697:   }
                   62698: }
                   62699: static void registerTrace(FILE *out, int iReg, Mem *p){
                   62700:   fprintf(out, "REG[%d] = ", iReg);
                   62701:   memTracePrint(out, p);
                   62702:   fprintf(out, "\n");
                   62703: }
                   62704: #endif
                   62705: 
                   62706: #ifdef SQLITE_DEBUG
                   62707: #  define REGISTER_TRACE(R,M) if(p->trace)registerTrace(p->trace,R,M)
                   62708: #else
                   62709: #  define REGISTER_TRACE(R,M)
                   62710: #endif
                   62711: 
                   62712: 
                   62713: #ifdef VDBE_PROFILE
                   62714: 
                   62715: /* 
                   62716: ** hwtime.h contains inline assembler code for implementing 
                   62717: ** high-performance timing routines.
                   62718: */
                   62719: /************** Include hwtime.h in the middle of vdbe.c *********************/
                   62720: /************** Begin file hwtime.h ******************************************/
                   62721: /*
                   62722: ** 2008 May 27
                   62723: **
                   62724: ** The author disclaims copyright to this source code.  In place of
                   62725: ** a legal notice, here is a blessing:
                   62726: **
                   62727: **    May you do good and not evil.
                   62728: **    May you find forgiveness for yourself and forgive others.
                   62729: **    May you share freely, never taking more than you give.
                   62730: **
                   62731: ******************************************************************************
                   62732: **
                   62733: ** This file contains inline asm code for retrieving "high-performance"
                   62734: ** counters for x86 class CPUs.
                   62735: */
                   62736: #ifndef _HWTIME_H_
                   62737: #define _HWTIME_H_
                   62738: 
                   62739: /*
                   62740: ** The following routine only works on pentium-class (or newer) processors.
                   62741: ** It uses the RDTSC opcode to read the cycle count value out of the
                   62742: ** processor and returns that value.  This can be used for high-res
                   62743: ** profiling.
                   62744: */
                   62745: #if (defined(__GNUC__) || defined(_MSC_VER)) && \
                   62746:       (defined(i386) || defined(__i386__) || defined(_M_IX86))
                   62747: 
                   62748:   #if defined(__GNUC__)
                   62749: 
                   62750:   __inline__ sqlite_uint64 sqlite3Hwtime(void){
                   62751:      unsigned int lo, hi;
                   62752:      __asm__ __volatile__ ("rdtsc" : "=a" (lo), "=d" (hi));
                   62753:      return (sqlite_uint64)hi << 32 | lo;
                   62754:   }
                   62755: 
                   62756:   #elif defined(_MSC_VER)
                   62757: 
                   62758:   __declspec(naked) __inline sqlite_uint64 __cdecl sqlite3Hwtime(void){
                   62759:      __asm {
                   62760:         rdtsc
                   62761:         ret       ; return value at EDX:EAX
                   62762:      }
                   62763:   }
                   62764: 
                   62765:   #endif
                   62766: 
                   62767: #elif (defined(__GNUC__) && defined(__x86_64__))
                   62768: 
                   62769:   __inline__ sqlite_uint64 sqlite3Hwtime(void){
                   62770:       unsigned long val;
                   62771:       __asm__ __volatile__ ("rdtsc" : "=A" (val));
                   62772:       return val;
                   62773:   }
                   62774:  
                   62775: #elif (defined(__GNUC__) && defined(__ppc__))
                   62776: 
                   62777:   __inline__ sqlite_uint64 sqlite3Hwtime(void){
                   62778:       unsigned long long retval;
                   62779:       unsigned long junk;
                   62780:       __asm__ __volatile__ ("\n\
                   62781:           1:      mftbu   %1\n\
                   62782:                   mftb    %L0\n\
                   62783:                   mftbu   %0\n\
                   62784:                   cmpw    %0,%1\n\
                   62785:                   bne     1b"
                   62786:                   : "=r" (retval), "=r" (junk));
                   62787:       return retval;
                   62788:   }
                   62789: 
                   62790: #else
                   62791: 
                   62792:   #error Need implementation of sqlite3Hwtime() for your platform.
                   62793: 
                   62794:   /*
                   62795:   ** To compile without implementing sqlite3Hwtime() for your platform,
                   62796:   ** you can remove the above #error and use the following
                   62797:   ** stub function.  You will lose timing support for many
                   62798:   ** of the debugging and testing utilities, but it should at
                   62799:   ** least compile and run.
                   62800:   */
                   62801: SQLITE_PRIVATE   sqlite_uint64 sqlite3Hwtime(void){ return ((sqlite_uint64)0); }
                   62802: 
                   62803: #endif
                   62804: 
                   62805: #endif /* !defined(_HWTIME_H_) */
                   62806: 
                   62807: /************** End of hwtime.h **********************************************/
                   62808: /************** Continuing where we left off in vdbe.c ***********************/
                   62809: 
                   62810: #endif
                   62811: 
                   62812: /*
                   62813: ** The CHECK_FOR_INTERRUPT macro defined here looks to see if the
                   62814: ** sqlite3_interrupt() routine has been called.  If it has been, then
                   62815: ** processing of the VDBE program is interrupted.
                   62816: **
                   62817: ** This macro added to every instruction that does a jump in order to
                   62818: ** implement a loop.  This test used to be on every single instruction,
                   62819: ** but that meant we more testing that we needed.  By only testing the
                   62820: ** flag on jump instructions, we get a (small) speed improvement.
                   62821: */
                   62822: #define CHECK_FOR_INTERRUPT \
                   62823:    if( db->u1.isInterrupted ) goto abort_due_to_interrupt;
                   62824: 
                   62825: 
                   62826: #ifndef NDEBUG
                   62827: /*
                   62828: ** This function is only called from within an assert() expression. It
                   62829: ** checks that the sqlite3.nTransaction variable is correctly set to
                   62830: ** the number of non-transaction savepoints currently in the 
                   62831: ** linked list starting at sqlite3.pSavepoint.
                   62832: ** 
                   62833: ** Usage:
                   62834: **
                   62835: **     assert( checkSavepointCount(db) );
                   62836: */
                   62837: static int checkSavepointCount(sqlite3 *db){
                   62838:   int n = 0;
                   62839:   Savepoint *p;
                   62840:   for(p=db->pSavepoint; p; p=p->pNext) n++;
                   62841:   assert( n==(db->nSavepoint + db->isTransactionSavepoint) );
                   62842:   return 1;
                   62843: }
                   62844: #endif
                   62845: 
                   62846: /*
                   62847: ** Transfer error message text from an sqlite3_vtab.zErrMsg (text stored
                   62848: ** in memory obtained from sqlite3_malloc) into a Vdbe.zErrMsg (text stored
                   62849: ** in memory obtained from sqlite3DbMalloc).
                   62850: */
                   62851: static void importVtabErrMsg(Vdbe *p, sqlite3_vtab *pVtab){
                   62852:   sqlite3 *db = p->db;
                   62853:   sqlite3DbFree(db, p->zErrMsg);
                   62854:   p->zErrMsg = sqlite3DbStrDup(db, pVtab->zErrMsg);
                   62855:   sqlite3_free(pVtab->zErrMsg);
                   62856:   pVtab->zErrMsg = 0;
                   62857: }
                   62858: 
                   62859: 
                   62860: /*
                   62861: ** Execute as much of a VDBE program as we can then return.
                   62862: **
                   62863: ** sqlite3VdbeMakeReady() must be called before this routine in order to
                   62864: ** close the program with a final OP_Halt and to set up the callbacks
                   62865: ** and the error message pointer.
                   62866: **
                   62867: ** Whenever a row or result data is available, this routine will either
                   62868: ** invoke the result callback (if there is one) or return with
                   62869: ** SQLITE_ROW.
                   62870: **
                   62871: ** If an attempt is made to open a locked database, then this routine
                   62872: ** will either invoke the busy callback (if there is one) or it will
                   62873: ** return SQLITE_BUSY.
                   62874: **
                   62875: ** If an error occurs, an error message is written to memory obtained
                   62876: ** from sqlite3_malloc() and p->zErrMsg is made to point to that memory.
                   62877: ** The error code is stored in p->rc and this routine returns SQLITE_ERROR.
                   62878: **
                   62879: ** If the callback ever returns non-zero, then the program exits
                   62880: ** immediately.  There will be no error message but the p->rc field is
                   62881: ** set to SQLITE_ABORT and this routine will return SQLITE_ERROR.
                   62882: **
                   62883: ** A memory allocation error causes p->rc to be set to SQLITE_NOMEM and this
                   62884: ** routine to return SQLITE_ERROR.
                   62885: **
                   62886: ** Other fatal errors return SQLITE_ERROR.
                   62887: **
                   62888: ** After this routine has finished, sqlite3VdbeFinalize() should be
                   62889: ** used to clean up the mess that was left behind.
                   62890: */
                   62891: SQLITE_PRIVATE int sqlite3VdbeExec(
                   62892:   Vdbe *p                    /* The VDBE */
                   62893: ){
                   62894:   int pc=0;                  /* The program counter */
                   62895:   Op *aOp = p->aOp;          /* Copy of p->aOp */
                   62896:   Op *pOp;                   /* Current operation */
                   62897:   int rc = SQLITE_OK;        /* Value to return */
                   62898:   sqlite3 *db = p->db;       /* The database */
                   62899:   u8 resetSchemaOnFault = 0; /* Reset schema after an error if positive */
                   62900:   u8 encoding = ENC(db);     /* The database encoding */
                   62901: #ifndef SQLITE_OMIT_PROGRESS_CALLBACK
                   62902:   int checkProgress;         /* True if progress callbacks are enabled */
                   62903:   int nProgressOps = 0;      /* Opcodes executed since progress callback. */
                   62904: #endif
                   62905:   Mem *aMem = p->aMem;       /* Copy of p->aMem */
                   62906:   Mem *pIn1 = 0;             /* 1st input operand */
                   62907:   Mem *pIn2 = 0;             /* 2nd input operand */
                   62908:   Mem *pIn3 = 0;             /* 3rd input operand */
                   62909:   Mem *pOut = 0;             /* Output operand */
                   62910:   int iCompare = 0;          /* Result of last OP_Compare operation */
                   62911:   int *aPermute = 0;         /* Permutation of columns for OP_Compare */
                   62912:   i64 lastRowid = db->lastRowid;  /* Saved value of the last insert ROWID */
                   62913: #ifdef VDBE_PROFILE
                   62914:   u64 start;                 /* CPU clock count at start of opcode */
                   62915:   int origPc;                /* Program counter at start of opcode */
                   62916: #endif
                   62917:   /********************************************************************
                   62918:   ** Automatically generated code
                   62919:   **
                   62920:   ** The following union is automatically generated by the
                   62921:   ** vdbe-compress.tcl script.  The purpose of this union is to
                   62922:   ** reduce the amount of stack space required by this function.
                   62923:   ** See comments in the vdbe-compress.tcl script for details.
                   62924:   */
                   62925:   union vdbeExecUnion {
                   62926:     struct OP_Yield_stack_vars {
                   62927:       int pcDest;
                   62928:     } aa;
                   62929:     struct OP_Variable_stack_vars {
                   62930:       Mem *pVar;       /* Value being transferred */
                   62931:     } ab;
                   62932:     struct OP_Move_stack_vars {
                   62933:       char *zMalloc;   /* Holding variable for allocated memory */
                   62934:       int n;           /* Number of registers left to copy */
                   62935:       int p1;          /* Register to copy from */
                   62936:       int p2;          /* Register to copy to */
                   62937:     } ac;
                   62938:     struct OP_ResultRow_stack_vars {
                   62939:       Mem *pMem;
                   62940:       int i;
                   62941:     } ad;
                   62942:     struct OP_Concat_stack_vars {
                   62943:       i64 nByte;
                   62944:     } ae;
                   62945:     struct OP_Remainder_stack_vars {
                   62946:       int flags;      /* Combined MEM_* flags from both inputs */
                   62947:       i64 iA;         /* Integer value of left operand */
                   62948:       i64 iB;         /* Integer value of right operand */
                   62949:       double rA;      /* Real value of left operand */
                   62950:       double rB;      /* Real value of right operand */
                   62951:     } af;
                   62952:     struct OP_Function_stack_vars {
                   62953:       int i;
                   62954:       Mem *pArg;
                   62955:       sqlite3_context ctx;
                   62956:       sqlite3_value **apVal;
                   62957:       int n;
                   62958:     } ag;
                   62959:     struct OP_ShiftRight_stack_vars {
                   62960:       i64 iA;
                   62961:       u64 uA;
                   62962:       i64 iB;
                   62963:       u8 op;
                   62964:     } ah;
                   62965:     struct OP_Ge_stack_vars {
                   62966:       int res;            /* Result of the comparison of pIn1 against pIn3 */
                   62967:       char affinity;      /* Affinity to use for comparison */
                   62968:       u16 flags1;         /* Copy of initial value of pIn1->flags */
                   62969:       u16 flags3;         /* Copy of initial value of pIn3->flags */
                   62970:     } ai;
                   62971:     struct OP_Compare_stack_vars {
                   62972:       int n;
                   62973:       int i;
                   62974:       int p1;
                   62975:       int p2;
                   62976:       const KeyInfo *pKeyInfo;
                   62977:       int idx;
                   62978:       CollSeq *pColl;    /* Collating sequence to use on this term */
                   62979:       int bRev;          /* True for DESCENDING sort order */
                   62980:     } aj;
                   62981:     struct OP_Or_stack_vars {
                   62982:       int v1;    /* Left operand:  0==FALSE, 1==TRUE, 2==UNKNOWN or NULL */
                   62983:       int v2;    /* Right operand: 0==FALSE, 1==TRUE, 2==UNKNOWN or NULL */
                   62984:     } ak;
                   62985:     struct OP_IfNot_stack_vars {
                   62986:       int c;
                   62987:     } al;
                   62988:     struct OP_Column_stack_vars {
                   62989:       u32 payloadSize;   /* Number of bytes in the record */
                   62990:       i64 payloadSize64; /* Number of bytes in the record */
                   62991:       int p1;            /* P1 value of the opcode */
                   62992:       int p2;            /* column number to retrieve */
                   62993:       VdbeCursor *pC;    /* The VDBE cursor */
                   62994:       char *zRec;        /* Pointer to complete record-data */
                   62995:       BtCursor *pCrsr;   /* The BTree cursor */
                   62996:       u32 *aType;        /* aType[i] holds the numeric type of the i-th column */
                   62997:       u32 *aOffset;      /* aOffset[i] is offset to start of data for i-th column */
                   62998:       int nField;        /* number of fields in the record */
                   62999:       int len;           /* The length of the serialized data for the column */
                   63000:       int i;             /* Loop counter */
                   63001:       char *zData;       /* Part of the record being decoded */
                   63002:       Mem *pDest;        /* Where to write the extracted value */
                   63003:       Mem sMem;          /* For storing the record being decoded */
                   63004:       u8 *zIdx;          /* Index into header */
                   63005:       u8 *zEndHdr;       /* Pointer to first byte after the header */
                   63006:       u32 offset;        /* Offset into the data */
                   63007:       u32 szField;       /* Number of bytes in the content of a field */
                   63008:       int szHdr;         /* Size of the header size field at start of record */
                   63009:       int avail;         /* Number of bytes of available data */
                   63010:       Mem *pReg;         /* PseudoTable input register */
                   63011:     } am;
                   63012:     struct OP_Affinity_stack_vars {
                   63013:       const char *zAffinity;   /* The affinity to be applied */
                   63014:       char cAff;               /* A single character of affinity */
                   63015:     } an;
                   63016:     struct OP_MakeRecord_stack_vars {
                   63017:       u8 *zNewRecord;        /* A buffer to hold the data for the new record */
                   63018:       Mem *pRec;             /* The new record */
                   63019:       u64 nData;             /* Number of bytes of data space */
                   63020:       int nHdr;              /* Number of bytes of header space */
                   63021:       i64 nByte;             /* Data space required for this record */
                   63022:       int nZero;             /* Number of zero bytes at the end of the record */
                   63023:       int nVarint;           /* Number of bytes in a varint */
                   63024:       u32 serial_type;       /* Type field */
                   63025:       Mem *pData0;           /* First field to be combined into the record */
                   63026:       Mem *pLast;            /* Last field of the record */
                   63027:       int nField;            /* Number of fields in the record */
                   63028:       char *zAffinity;       /* The affinity string for the record */
                   63029:       int file_format;       /* File format to use for encoding */
                   63030:       int i;                 /* Space used in zNewRecord[] */
                   63031:       int len;               /* Length of a field */
                   63032:     } ao;
                   63033:     struct OP_Count_stack_vars {
                   63034:       i64 nEntry;
                   63035:       BtCursor *pCrsr;
                   63036:     } ap;
                   63037:     struct OP_Savepoint_stack_vars {
                   63038:       int p1;                         /* Value of P1 operand */
                   63039:       char *zName;                    /* Name of savepoint */
                   63040:       int nName;
                   63041:       Savepoint *pNew;
                   63042:       Savepoint *pSavepoint;
                   63043:       Savepoint *pTmp;
                   63044:       int iSavepoint;
                   63045:       int ii;
                   63046:     } aq;
                   63047:     struct OP_AutoCommit_stack_vars {
                   63048:       int desiredAutoCommit;
                   63049:       int iRollback;
                   63050:       int turnOnAC;
                   63051:     } ar;
                   63052:     struct OP_Transaction_stack_vars {
                   63053:       Btree *pBt;
                   63054:     } as;
                   63055:     struct OP_ReadCookie_stack_vars {
                   63056:       int iMeta;
                   63057:       int iDb;
                   63058:       int iCookie;
                   63059:     } at;
                   63060:     struct OP_SetCookie_stack_vars {
                   63061:       Db *pDb;
                   63062:     } au;
                   63063:     struct OP_VerifyCookie_stack_vars {
                   63064:       int iMeta;
                   63065:       int iGen;
                   63066:       Btree *pBt;
                   63067:     } av;
                   63068:     struct OP_OpenWrite_stack_vars {
                   63069:       int nField;
                   63070:       KeyInfo *pKeyInfo;
                   63071:       int p2;
                   63072:       int iDb;
                   63073:       int wrFlag;
                   63074:       Btree *pX;
                   63075:       VdbeCursor *pCur;
                   63076:       Db *pDb;
                   63077:     } aw;
                   63078:     struct OP_OpenEphemeral_stack_vars {
                   63079:       VdbeCursor *pCx;
                   63080:     } ax;
                   63081:     struct OP_OpenPseudo_stack_vars {
                   63082:       VdbeCursor *pCx;
                   63083:     } ay;
                   63084:     struct OP_SeekGt_stack_vars {
                   63085:       int res;
                   63086:       int oc;
                   63087:       VdbeCursor *pC;
                   63088:       UnpackedRecord r;
                   63089:       int nField;
                   63090:       i64 iKey;      /* The rowid we are to seek to */
                   63091:     } az;
                   63092:     struct OP_Seek_stack_vars {
                   63093:       VdbeCursor *pC;
                   63094:     } ba;
                   63095:     struct OP_Found_stack_vars {
                   63096:       int alreadyExists;
                   63097:       VdbeCursor *pC;
                   63098:       int res;
                   63099:       UnpackedRecord *pIdxKey;
                   63100:       UnpackedRecord r;
                   63101:       char aTempRec[ROUND8(sizeof(UnpackedRecord)) + sizeof(Mem)*3 + 7];
                   63102:     } bb;
                   63103:     struct OP_IsUnique_stack_vars {
                   63104:       u16 ii;
                   63105:       VdbeCursor *pCx;
                   63106:       BtCursor *pCrsr;
                   63107:       u16 nField;
                   63108:       Mem *aMx;
                   63109:       UnpackedRecord r;                  /* B-Tree index search key */
                   63110:       i64 R;                             /* Rowid stored in register P3 */
                   63111:     } bc;
                   63112:     struct OP_NotExists_stack_vars {
                   63113:       VdbeCursor *pC;
                   63114:       BtCursor *pCrsr;
                   63115:       int res;
                   63116:       u64 iKey;
                   63117:     } bd;
                   63118:     struct OP_NewRowid_stack_vars {
                   63119:       i64 v;                 /* The new rowid */
                   63120:       VdbeCursor *pC;        /* Cursor of table to get the new rowid */
                   63121:       int res;               /* Result of an sqlite3BtreeLast() */
                   63122:       int cnt;               /* Counter to limit the number of searches */
                   63123:       Mem *pMem;             /* Register holding largest rowid for AUTOINCREMENT */
                   63124:       VdbeFrame *pFrame;     /* Root frame of VDBE */
                   63125:     } be;
                   63126:     struct OP_InsertInt_stack_vars {
                   63127:       Mem *pData;       /* MEM cell holding data for the record to be inserted */
                   63128:       Mem *pKey;        /* MEM cell holding key  for the record */
                   63129:       i64 iKey;         /* The integer ROWID or key for the record to be inserted */
                   63130:       VdbeCursor *pC;   /* Cursor to table into which insert is written */
                   63131:       int nZero;        /* Number of zero-bytes to append */
                   63132:       int seekResult;   /* Result of prior seek or 0 if no USESEEKRESULT flag */
                   63133:       const char *zDb;  /* database name - used by the update hook */
                   63134:       const char *zTbl; /* Table name - used by the opdate hook */
                   63135:       int op;           /* Opcode for update hook: SQLITE_UPDATE or SQLITE_INSERT */
                   63136:     } bf;
                   63137:     struct OP_Delete_stack_vars {
                   63138:       i64 iKey;
                   63139:       VdbeCursor *pC;
                   63140:     } bg;
                   63141:     struct OP_RowData_stack_vars {
                   63142:       VdbeCursor *pC;
                   63143:       BtCursor *pCrsr;
                   63144:       u32 n;
                   63145:       i64 n64;
                   63146:     } bh;
                   63147:     struct OP_Rowid_stack_vars {
                   63148:       VdbeCursor *pC;
                   63149:       i64 v;
                   63150:       sqlite3_vtab *pVtab;
                   63151:       const sqlite3_module *pModule;
                   63152:     } bi;
                   63153:     struct OP_NullRow_stack_vars {
                   63154:       VdbeCursor *pC;
                   63155:     } bj;
                   63156:     struct OP_Last_stack_vars {
                   63157:       VdbeCursor *pC;
                   63158:       BtCursor *pCrsr;
                   63159:       int res;
                   63160:     } bk;
                   63161:     struct OP_Rewind_stack_vars {
                   63162:       VdbeCursor *pC;
                   63163:       BtCursor *pCrsr;
                   63164:       int res;
                   63165:     } bl;
                   63166:     struct OP_Next_stack_vars {
                   63167:       VdbeCursor *pC;
                   63168:       BtCursor *pCrsr;
                   63169:       int res;
                   63170:     } bm;
                   63171:     struct OP_IdxInsert_stack_vars {
                   63172:       VdbeCursor *pC;
                   63173:       BtCursor *pCrsr;
                   63174:       int nKey;
                   63175:       const char *zKey;
                   63176:     } bn;
                   63177:     struct OP_IdxDelete_stack_vars {
                   63178:       VdbeCursor *pC;
                   63179:       BtCursor *pCrsr;
                   63180:       int res;
                   63181:       UnpackedRecord r;
                   63182:     } bo;
                   63183:     struct OP_IdxRowid_stack_vars {
                   63184:       BtCursor *pCrsr;
                   63185:       VdbeCursor *pC;
                   63186:       i64 rowid;
                   63187:     } bp;
                   63188:     struct OP_IdxGE_stack_vars {
                   63189:       VdbeCursor *pC;
                   63190:       int res;
                   63191:       UnpackedRecord r;
                   63192:     } bq;
                   63193:     struct OP_Destroy_stack_vars {
                   63194:       int iMoved;
                   63195:       int iCnt;
                   63196:       Vdbe *pVdbe;
                   63197:       int iDb;
                   63198:     } br;
                   63199:     struct OP_Clear_stack_vars {
                   63200:       int nChange;
                   63201:     } bs;
                   63202:     struct OP_CreateTable_stack_vars {
                   63203:       int pgno;
                   63204:       int flags;
                   63205:       Db *pDb;
                   63206:     } bt;
                   63207:     struct OP_ParseSchema_stack_vars {
                   63208:       int iDb;
                   63209:       const char *zMaster;
                   63210:       char *zSql;
                   63211:       InitData initData;
                   63212:     } bu;
                   63213:     struct OP_IntegrityCk_stack_vars {
                   63214:       int nRoot;      /* Number of tables to check.  (Number of root pages.) */
                   63215:       int *aRoot;     /* Array of rootpage numbers for tables to be checked */
                   63216:       int j;          /* Loop counter */
                   63217:       int nErr;       /* Number of errors reported */
                   63218:       char *z;        /* Text of the error report */
                   63219:       Mem *pnErr;     /* Register keeping track of errors remaining */
                   63220:     } bv;
                   63221:     struct OP_RowSetRead_stack_vars {
                   63222:       i64 val;
                   63223:     } bw;
                   63224:     struct OP_RowSetTest_stack_vars {
                   63225:       int iSet;
                   63226:       int exists;
                   63227:     } bx;
                   63228:     struct OP_Program_stack_vars {
                   63229:       int nMem;               /* Number of memory registers for sub-program */
                   63230:       int nByte;              /* Bytes of runtime space required for sub-program */
                   63231:       Mem *pRt;               /* Register to allocate runtime space */
                   63232:       Mem *pMem;              /* Used to iterate through memory cells */
                   63233:       Mem *pEnd;              /* Last memory cell in new array */
                   63234:       VdbeFrame *pFrame;      /* New vdbe frame to execute in */
                   63235:       SubProgram *pProgram;   /* Sub-program to execute */
                   63236:       void *t;                /* Token identifying trigger */
                   63237:     } by;
                   63238:     struct OP_Param_stack_vars {
                   63239:       VdbeFrame *pFrame;
                   63240:       Mem *pIn;
                   63241:     } bz;
                   63242:     struct OP_MemMax_stack_vars {
                   63243:       Mem *pIn1;
                   63244:       VdbeFrame *pFrame;
                   63245:     } ca;
                   63246:     struct OP_AggStep_stack_vars {
                   63247:       int n;
                   63248:       int i;
                   63249:       Mem *pMem;
                   63250:       Mem *pRec;
                   63251:       sqlite3_context ctx;
                   63252:       sqlite3_value **apVal;
                   63253:     } cb;
                   63254:     struct OP_AggFinal_stack_vars {
                   63255:       Mem *pMem;
                   63256:     } cc;
                   63257:     struct OP_Checkpoint_stack_vars {
                   63258:       int i;                          /* Loop counter */
                   63259:       int aRes[3];                    /* Results */
                   63260:       Mem *pMem;                      /* Write results here */
                   63261:     } cd;
                   63262:     struct OP_JournalMode_stack_vars {
                   63263:       Btree *pBt;                     /* Btree to change journal mode of */
                   63264:       Pager *pPager;                  /* Pager associated with pBt */
                   63265:       int eNew;                       /* New journal mode */
                   63266:       int eOld;                       /* The old journal mode */
                   63267:       const char *zFilename;          /* Name of database file for pPager */
                   63268:     } ce;
                   63269:     struct OP_IncrVacuum_stack_vars {
                   63270:       Btree *pBt;
                   63271:     } cf;
                   63272:     struct OP_VBegin_stack_vars {
                   63273:       VTable *pVTab;
                   63274:     } cg;
                   63275:     struct OP_VOpen_stack_vars {
                   63276:       VdbeCursor *pCur;
                   63277:       sqlite3_vtab_cursor *pVtabCursor;
                   63278:       sqlite3_vtab *pVtab;
                   63279:       sqlite3_module *pModule;
                   63280:     } ch;
                   63281:     struct OP_VFilter_stack_vars {
                   63282:       int nArg;
                   63283:       int iQuery;
                   63284:       const sqlite3_module *pModule;
                   63285:       Mem *pQuery;
                   63286:       Mem *pArgc;
                   63287:       sqlite3_vtab_cursor *pVtabCursor;
                   63288:       sqlite3_vtab *pVtab;
                   63289:       VdbeCursor *pCur;
                   63290:       int res;
                   63291:       int i;
                   63292:       Mem **apArg;
                   63293:     } ci;
                   63294:     struct OP_VColumn_stack_vars {
                   63295:       sqlite3_vtab *pVtab;
                   63296:       const sqlite3_module *pModule;
                   63297:       Mem *pDest;
                   63298:       sqlite3_context sContext;
                   63299:     } cj;
                   63300:     struct OP_VNext_stack_vars {
                   63301:       sqlite3_vtab *pVtab;
                   63302:       const sqlite3_module *pModule;
                   63303:       int res;
                   63304:       VdbeCursor *pCur;
                   63305:     } ck;
                   63306:     struct OP_VRename_stack_vars {
                   63307:       sqlite3_vtab *pVtab;
                   63308:       Mem *pName;
                   63309:     } cl;
                   63310:     struct OP_VUpdate_stack_vars {
                   63311:       sqlite3_vtab *pVtab;
                   63312:       sqlite3_module *pModule;
                   63313:       int nArg;
                   63314:       int i;
                   63315:       sqlite_int64 rowid;
                   63316:       Mem **apArg;
                   63317:       Mem *pX;
                   63318:     } cm;
                   63319:     struct OP_Trace_stack_vars {
                   63320:       char *zTrace;
                   63321:       char *z;
                   63322:     } cn;
                   63323:   } u;
                   63324:   /* End automatically generated code
                   63325:   ********************************************************************/
                   63326: 
                   63327:   assert( p->magic==VDBE_MAGIC_RUN );  /* sqlite3_step() verifies this */
                   63328:   sqlite3VdbeEnter(p);
                   63329:   if( p->rc==SQLITE_NOMEM ){
                   63330:     /* This happens if a malloc() inside a call to sqlite3_column_text() or
                   63331:     ** sqlite3_column_text16() failed.  */
                   63332:     goto no_mem;
                   63333:   }
                   63334:   assert( p->rc==SQLITE_OK || p->rc==SQLITE_BUSY );
                   63335:   p->rc = SQLITE_OK;
                   63336:   assert( p->explain==0 );
                   63337:   p->pResultSet = 0;
                   63338:   db->busyHandler.nBusy = 0;
                   63339:   CHECK_FOR_INTERRUPT;
                   63340:   sqlite3VdbeIOTraceSql(p);
                   63341: #ifndef SQLITE_OMIT_PROGRESS_CALLBACK
                   63342:   checkProgress = db->xProgress!=0;
                   63343: #endif
                   63344: #ifdef SQLITE_DEBUG
                   63345:   sqlite3BeginBenignMalloc();
                   63346:   if( p->pc==0  && (p->db->flags & SQLITE_VdbeListing)!=0 ){
                   63347:     int i;
                   63348:     printf("VDBE Program Listing:\n");
                   63349:     sqlite3VdbePrintSql(p);
                   63350:     for(i=0; i<p->nOp; i++){
                   63351:       sqlite3VdbePrintOp(stdout, i, &aOp[i]);
                   63352:     }
                   63353:   }
                   63354:   sqlite3EndBenignMalloc();
                   63355: #endif
                   63356:   for(pc=p->pc; rc==SQLITE_OK; pc++){
                   63357:     assert( pc>=0 && pc<p->nOp );
                   63358:     if( db->mallocFailed ) goto no_mem;
                   63359: #ifdef VDBE_PROFILE
                   63360:     origPc = pc;
                   63361:     start = sqlite3Hwtime();
                   63362: #endif
                   63363:     pOp = &aOp[pc];
                   63364: 
                   63365:     /* Only allow tracing if SQLITE_DEBUG is defined.
                   63366:     */
                   63367: #ifdef SQLITE_DEBUG
                   63368:     if( p->trace ){
                   63369:       if( pc==0 ){
                   63370:         printf("VDBE Execution Trace:\n");
                   63371:         sqlite3VdbePrintSql(p);
                   63372:       }
                   63373:       sqlite3VdbePrintOp(p->trace, pc, pOp);
                   63374:     }
                   63375: #endif
                   63376:       
                   63377: 
                   63378:     /* Check to see if we need to simulate an interrupt.  This only happens
                   63379:     ** if we have a special test build.
                   63380:     */
                   63381: #ifdef SQLITE_TEST
                   63382:     if( sqlite3_interrupt_count>0 ){
                   63383:       sqlite3_interrupt_count--;
                   63384:       if( sqlite3_interrupt_count==0 ){
                   63385:         sqlite3_interrupt(db);
                   63386:       }
                   63387:     }
                   63388: #endif
                   63389: 
                   63390: #ifndef SQLITE_OMIT_PROGRESS_CALLBACK
                   63391:     /* Call the progress callback if it is configured and the required number
                   63392:     ** of VDBE ops have been executed (either since this invocation of
                   63393:     ** sqlite3VdbeExec() or since last time the progress callback was called).
                   63394:     ** If the progress callback returns non-zero, exit the virtual machine with
                   63395:     ** a return code SQLITE_ABORT.
                   63396:     */
                   63397:     if( checkProgress ){
                   63398:       if( db->nProgressOps==nProgressOps ){
                   63399:         int prc;
                   63400:         prc = db->xProgress(db->pProgressArg);
                   63401:         if( prc!=0 ){
                   63402:           rc = SQLITE_INTERRUPT;
                   63403:           goto vdbe_error_halt;
                   63404:         }
                   63405:         nProgressOps = 0;
                   63406:       }
                   63407:       nProgressOps++;
                   63408:     }
                   63409: #endif
                   63410: 
                   63411:     /* On any opcode with the "out2-prerelase" tag, free any
                   63412:     ** external allocations out of mem[p2] and set mem[p2] to be
                   63413:     ** an undefined integer.  Opcodes will either fill in the integer
                   63414:     ** value or convert mem[p2] to a different type.
                   63415:     */
                   63416:     assert( pOp->opflags==sqlite3OpcodeProperty[pOp->opcode] );
                   63417:     if( pOp->opflags & OPFLG_OUT2_PRERELEASE ){
                   63418:       assert( pOp->p2>0 );
                   63419:       assert( pOp->p2<=p->nMem );
                   63420:       pOut = &aMem[pOp->p2];
                   63421:       memAboutToChange(p, pOut);
                   63422:       sqlite3VdbeMemReleaseExternal(pOut);
                   63423:       pOut->flags = MEM_Int;
                   63424:     }
                   63425: 
                   63426:     /* Sanity checking on other operands */
                   63427: #ifdef SQLITE_DEBUG
                   63428:     if( (pOp->opflags & OPFLG_IN1)!=0 ){
                   63429:       assert( pOp->p1>0 );
                   63430:       assert( pOp->p1<=p->nMem );
                   63431:       assert( memIsValid(&aMem[pOp->p1]) );
                   63432:       REGISTER_TRACE(pOp->p1, &aMem[pOp->p1]);
                   63433:     }
                   63434:     if( (pOp->opflags & OPFLG_IN2)!=0 ){
                   63435:       assert( pOp->p2>0 );
                   63436:       assert( pOp->p2<=p->nMem );
                   63437:       assert( memIsValid(&aMem[pOp->p2]) );
                   63438:       REGISTER_TRACE(pOp->p2, &aMem[pOp->p2]);
                   63439:     }
                   63440:     if( (pOp->opflags & OPFLG_IN3)!=0 ){
                   63441:       assert( pOp->p3>0 );
                   63442:       assert( pOp->p3<=p->nMem );
                   63443:       assert( memIsValid(&aMem[pOp->p3]) );
                   63444:       REGISTER_TRACE(pOp->p3, &aMem[pOp->p3]);
                   63445:     }
                   63446:     if( (pOp->opflags & OPFLG_OUT2)!=0 ){
                   63447:       assert( pOp->p2>0 );
                   63448:       assert( pOp->p2<=p->nMem );
                   63449:       memAboutToChange(p, &aMem[pOp->p2]);
                   63450:     }
                   63451:     if( (pOp->opflags & OPFLG_OUT3)!=0 ){
                   63452:       assert( pOp->p3>0 );
                   63453:       assert( pOp->p3<=p->nMem );
                   63454:       memAboutToChange(p, &aMem[pOp->p3]);
                   63455:     }
                   63456: #endif
                   63457:   
                   63458:     switch( pOp->opcode ){
                   63459: 
                   63460: /*****************************************************************************
                   63461: ** What follows is a massive switch statement where each case implements a
                   63462: ** separate instruction in the virtual machine.  If we follow the usual
                   63463: ** indentation conventions, each case should be indented by 6 spaces.  But
                   63464: ** that is a lot of wasted space on the left margin.  So the code within
                   63465: ** the switch statement will break with convention and be flush-left. Another
                   63466: ** big comment (similar to this one) will mark the point in the code where
                   63467: ** we transition back to normal indentation.
                   63468: **
                   63469: ** The formatting of each case is important.  The makefile for SQLite
                   63470: ** generates two C files "opcodes.h" and "opcodes.c" by scanning this
                   63471: ** file looking for lines that begin with "case OP_".  The opcodes.h files
                   63472: ** will be filled with #defines that give unique integer values to each
                   63473: ** opcode and the opcodes.c file is filled with an array of strings where
                   63474: ** each string is the symbolic name for the corresponding opcode.  If the
                   63475: ** case statement is followed by a comment of the form "/# same as ... #/"
                   63476: ** that comment is used to determine the particular value of the opcode.
                   63477: **
                   63478: ** Other keywords in the comment that follows each case are used to
                   63479: ** construct the OPFLG_INITIALIZER value that initializes opcodeProperty[].
                   63480: ** Keywords include: in1, in2, in3, out2_prerelease, out2, out3.  See
                   63481: ** the mkopcodeh.awk script for additional information.
                   63482: **
                   63483: ** Documentation about VDBE opcodes is generated by scanning this file
                   63484: ** for lines of that contain "Opcode:".  That line and all subsequent
                   63485: ** comment lines are used in the generation of the opcode.html documentation
                   63486: ** file.
                   63487: **
                   63488: ** SUMMARY:
                   63489: **
                   63490: **     Formatting is important to scripts that scan this file.
                   63491: **     Do not deviate from the formatting style currently in use.
                   63492: **
                   63493: *****************************************************************************/
                   63494: 
                   63495: /* Opcode:  Goto * P2 * * *
                   63496: **
                   63497: ** An unconditional jump to address P2.
                   63498: ** The next instruction executed will be 
                   63499: ** the one at index P2 from the beginning of
                   63500: ** the program.
                   63501: */
                   63502: case OP_Goto: {             /* jump */
                   63503:   CHECK_FOR_INTERRUPT;
                   63504:   pc = pOp->p2 - 1;
                   63505:   break;
                   63506: }
                   63507: 
                   63508: /* Opcode:  Gosub P1 P2 * * *
                   63509: **
                   63510: ** Write the current address onto register P1
                   63511: ** and then jump to address P2.
                   63512: */
                   63513: case OP_Gosub: {            /* jump, in1 */
                   63514:   pIn1 = &aMem[pOp->p1];
                   63515:   assert( (pIn1->flags & MEM_Dyn)==0 );
                   63516:   memAboutToChange(p, pIn1);
                   63517:   pIn1->flags = MEM_Int;
                   63518:   pIn1->u.i = pc;
                   63519:   REGISTER_TRACE(pOp->p1, pIn1);
                   63520:   pc = pOp->p2 - 1;
                   63521:   break;
                   63522: }
                   63523: 
                   63524: /* Opcode:  Return P1 * * * *
                   63525: **
                   63526: ** Jump to the next instruction after the address in register P1.
                   63527: */
                   63528: case OP_Return: {           /* in1 */
                   63529:   pIn1 = &aMem[pOp->p1];
                   63530:   assert( pIn1->flags & MEM_Int );
                   63531:   pc = (int)pIn1->u.i;
                   63532:   break;
                   63533: }
                   63534: 
                   63535: /* Opcode:  Yield P1 * * * *
                   63536: **
                   63537: ** Swap the program counter with the value in register P1.
                   63538: */
                   63539: case OP_Yield: {            /* in1 */
                   63540: #if 0  /* local variables moved into u.aa */
                   63541:   int pcDest;
                   63542: #endif /* local variables moved into u.aa */
                   63543:   pIn1 = &aMem[pOp->p1];
                   63544:   assert( (pIn1->flags & MEM_Dyn)==0 );
                   63545:   pIn1->flags = MEM_Int;
                   63546:   u.aa.pcDest = (int)pIn1->u.i;
                   63547:   pIn1->u.i = pc;
                   63548:   REGISTER_TRACE(pOp->p1, pIn1);
                   63549:   pc = u.aa.pcDest;
                   63550:   break;
                   63551: }
                   63552: 
                   63553: /* Opcode:  HaltIfNull  P1 P2 P3 P4 *
                   63554: **
                   63555: ** Check the value in register P3.  If it is NULL then Halt using
                   63556: ** parameter P1, P2, and P4 as if this were a Halt instruction.  If the
                   63557: ** value in register P3 is not NULL, then this routine is a no-op.
                   63558: */
                   63559: case OP_HaltIfNull: {      /* in3 */
                   63560:   pIn3 = &aMem[pOp->p3];
                   63561:   if( (pIn3->flags & MEM_Null)==0 ) break;
                   63562:   /* Fall through into OP_Halt */
                   63563: }
                   63564: 
                   63565: /* Opcode:  Halt P1 P2 * P4 *
                   63566: **
                   63567: ** Exit immediately.  All open cursors, etc are closed
                   63568: ** automatically.
                   63569: **
                   63570: ** P1 is the result code returned by sqlite3_exec(), sqlite3_reset(),
                   63571: ** or sqlite3_finalize().  For a normal halt, this should be SQLITE_OK (0).
                   63572: ** For errors, it can be some other value.  If P1!=0 then P2 will determine
                   63573: ** whether or not to rollback the current transaction.  Do not rollback
                   63574: ** if P2==OE_Fail. Do the rollback if P2==OE_Rollback.  If P2==OE_Abort,
                   63575: ** then back out all changes that have occurred during this execution of the
                   63576: ** VDBE, but do not rollback the transaction. 
                   63577: **
                   63578: ** If P4 is not null then it is an error message string.
                   63579: **
                   63580: ** There is an implied "Halt 0 0 0" instruction inserted at the very end of
                   63581: ** every program.  So a jump past the last instruction of the program
                   63582: ** is the same as executing Halt.
                   63583: */
                   63584: case OP_Halt: {
                   63585:   if( pOp->p1==SQLITE_OK && p->pFrame ){
                   63586:     /* Halt the sub-program. Return control to the parent frame. */
                   63587:     VdbeFrame *pFrame = p->pFrame;
                   63588:     p->pFrame = pFrame->pParent;
                   63589:     p->nFrame--;
                   63590:     sqlite3VdbeSetChanges(db, p->nChange);
                   63591:     pc = sqlite3VdbeFrameRestore(pFrame);
                   63592:     lastRowid = db->lastRowid;
                   63593:     if( pOp->p2==OE_Ignore ){
                   63594:       /* Instruction pc is the OP_Program that invoked the sub-program 
                   63595:       ** currently being halted. If the p2 instruction of this OP_Halt
                   63596:       ** instruction is set to OE_Ignore, then the sub-program is throwing
                   63597:       ** an IGNORE exception. In this case jump to the address specified
                   63598:       ** as the p2 of the calling OP_Program.  */
                   63599:       pc = p->aOp[pc].p2-1;
                   63600:     }
                   63601:     aOp = p->aOp;
                   63602:     aMem = p->aMem;
                   63603:     break;
                   63604:   }
                   63605: 
                   63606:   p->rc = pOp->p1;
                   63607:   p->errorAction = (u8)pOp->p2;
                   63608:   p->pc = pc;
                   63609:   if( pOp->p4.z ){
                   63610:     assert( p->rc!=SQLITE_OK );
                   63611:     sqlite3SetString(&p->zErrMsg, db, "%s", pOp->p4.z);
                   63612:     testcase( sqlite3GlobalConfig.xLog!=0 );
                   63613:     sqlite3_log(pOp->p1, "abort at %d in [%s]: %s", pc, p->zSql, pOp->p4.z);
                   63614:   }else if( p->rc ){
                   63615:     testcase( sqlite3GlobalConfig.xLog!=0 );
                   63616:     sqlite3_log(pOp->p1, "constraint failed at %d in [%s]", pc, p->zSql);
                   63617:   }
                   63618:   rc = sqlite3VdbeHalt(p);
                   63619:   assert( rc==SQLITE_BUSY || rc==SQLITE_OK || rc==SQLITE_ERROR );
                   63620:   if( rc==SQLITE_BUSY ){
                   63621:     p->rc = rc = SQLITE_BUSY;
                   63622:   }else{
                   63623:     assert( rc==SQLITE_OK || p->rc==SQLITE_CONSTRAINT );
                   63624:     assert( rc==SQLITE_OK || db->nDeferredCons>0 );
                   63625:     rc = p->rc ? SQLITE_ERROR : SQLITE_DONE;
                   63626:   }
                   63627:   goto vdbe_return;
                   63628: }
                   63629: 
                   63630: /* Opcode: Integer P1 P2 * * *
                   63631: **
                   63632: ** The 32-bit integer value P1 is written into register P2.
                   63633: */
                   63634: case OP_Integer: {         /* out2-prerelease */
                   63635:   pOut->u.i = pOp->p1;
                   63636:   break;
                   63637: }
                   63638: 
                   63639: /* Opcode: Int64 * P2 * P4 *
                   63640: **
                   63641: ** P4 is a pointer to a 64-bit integer value.
                   63642: ** Write that value into register P2.
                   63643: */
                   63644: case OP_Int64: {           /* out2-prerelease */
                   63645:   assert( pOp->p4.pI64!=0 );
                   63646:   pOut->u.i = *pOp->p4.pI64;
                   63647:   break;
                   63648: }
                   63649: 
                   63650: #ifndef SQLITE_OMIT_FLOATING_POINT
                   63651: /* Opcode: Real * P2 * P4 *
                   63652: **
                   63653: ** P4 is a pointer to a 64-bit floating point value.
                   63654: ** Write that value into register P2.
                   63655: */
                   63656: case OP_Real: {            /* same as TK_FLOAT, out2-prerelease */
                   63657:   pOut->flags = MEM_Real;
                   63658:   assert( !sqlite3IsNaN(*pOp->p4.pReal) );
                   63659:   pOut->r = *pOp->p4.pReal;
                   63660:   break;
                   63661: }
                   63662: #endif
                   63663: 
                   63664: /* Opcode: String8 * P2 * P4 *
                   63665: **
                   63666: ** P4 points to a nul terminated UTF-8 string. This opcode is transformed 
                   63667: ** into an OP_String before it is executed for the first time.
                   63668: */
                   63669: case OP_String8: {         /* same as TK_STRING, out2-prerelease */
                   63670:   assert( pOp->p4.z!=0 );
                   63671:   pOp->opcode = OP_String;
                   63672:   pOp->p1 = sqlite3Strlen30(pOp->p4.z);
                   63673: 
                   63674: #ifndef SQLITE_OMIT_UTF16
                   63675:   if( encoding!=SQLITE_UTF8 ){
                   63676:     rc = sqlite3VdbeMemSetStr(pOut, pOp->p4.z, -1, SQLITE_UTF8, SQLITE_STATIC);
                   63677:     if( rc==SQLITE_TOOBIG ) goto too_big;
                   63678:     if( SQLITE_OK!=sqlite3VdbeChangeEncoding(pOut, encoding) ) goto no_mem;
                   63679:     assert( pOut->zMalloc==pOut->z );
                   63680:     assert( pOut->flags & MEM_Dyn );
                   63681:     pOut->zMalloc = 0;
                   63682:     pOut->flags |= MEM_Static;
                   63683:     pOut->flags &= ~MEM_Dyn;
                   63684:     if( pOp->p4type==P4_DYNAMIC ){
                   63685:       sqlite3DbFree(db, pOp->p4.z);
                   63686:     }
                   63687:     pOp->p4type = P4_DYNAMIC;
                   63688:     pOp->p4.z = pOut->z;
                   63689:     pOp->p1 = pOut->n;
                   63690:   }
                   63691: #endif
                   63692:   if( pOp->p1>db->aLimit[SQLITE_LIMIT_LENGTH] ){
                   63693:     goto too_big;
                   63694:   }
                   63695:   /* Fall through to the next case, OP_String */
                   63696: }
                   63697:   
                   63698: /* Opcode: String P1 P2 * P4 *
                   63699: **
                   63700: ** The string value P4 of length P1 (bytes) is stored in register P2.
                   63701: */
                   63702: case OP_String: {          /* out2-prerelease */
                   63703:   assert( pOp->p4.z!=0 );
                   63704:   pOut->flags = MEM_Str|MEM_Static|MEM_Term;
                   63705:   pOut->z = pOp->p4.z;
                   63706:   pOut->n = pOp->p1;
                   63707:   pOut->enc = encoding;
                   63708:   UPDATE_MAX_BLOBSIZE(pOut);
                   63709:   break;
                   63710: }
                   63711: 
                   63712: /* Opcode: Null * P2 * * *
                   63713: **
                   63714: ** Write a NULL into register P2.
                   63715: */
                   63716: case OP_Null: {           /* out2-prerelease */
                   63717:   pOut->flags = MEM_Null;
                   63718:   break;
                   63719: }
                   63720: 
                   63721: 
                   63722: /* Opcode: Blob P1 P2 * P4
                   63723: **
                   63724: ** P4 points to a blob of data P1 bytes long.  Store this
                   63725: ** blob in register P2.
                   63726: */
                   63727: case OP_Blob: {                /* out2-prerelease */
                   63728:   assert( pOp->p1 <= SQLITE_MAX_LENGTH );
                   63729:   sqlite3VdbeMemSetStr(pOut, pOp->p4.z, pOp->p1, 0, 0);
                   63730:   pOut->enc = encoding;
                   63731:   UPDATE_MAX_BLOBSIZE(pOut);
                   63732:   break;
                   63733: }
                   63734: 
                   63735: /* Opcode: Variable P1 P2 * P4 *
                   63736: **
                   63737: ** Transfer the values of bound parameter P1 into register P2
                   63738: **
                   63739: ** If the parameter is named, then its name appears in P4 and P3==1.
                   63740: ** The P4 value is used by sqlite3_bind_parameter_name().
                   63741: */
                   63742: case OP_Variable: {            /* out2-prerelease */
                   63743: #if 0  /* local variables moved into u.ab */
                   63744:   Mem *pVar;       /* Value being transferred */
                   63745: #endif /* local variables moved into u.ab */
                   63746: 
                   63747:   assert( pOp->p1>0 && pOp->p1<=p->nVar );
                   63748:   assert( pOp->p4.z==0 || pOp->p4.z==p->azVar[pOp->p1-1] );
                   63749:   u.ab.pVar = &p->aVar[pOp->p1 - 1];
                   63750:   if( sqlite3VdbeMemTooBig(u.ab.pVar) ){
                   63751:     goto too_big;
                   63752:   }
                   63753:   sqlite3VdbeMemShallowCopy(pOut, u.ab.pVar, MEM_Static);
                   63754:   UPDATE_MAX_BLOBSIZE(pOut);
                   63755:   break;
                   63756: }
                   63757: 
                   63758: /* Opcode: Move P1 P2 P3 * *
                   63759: **
                   63760: ** Move the values in register P1..P1+P3-1 over into
                   63761: ** registers P2..P2+P3-1.  Registers P1..P1+P1-1 are
                   63762: ** left holding a NULL.  It is an error for register ranges
                   63763: ** P1..P1+P3-1 and P2..P2+P3-1 to overlap.
                   63764: */
                   63765: case OP_Move: {
                   63766: #if 0  /* local variables moved into u.ac */
                   63767:   char *zMalloc;   /* Holding variable for allocated memory */
                   63768:   int n;           /* Number of registers left to copy */
                   63769:   int p1;          /* Register to copy from */
                   63770:   int p2;          /* Register to copy to */
                   63771: #endif /* local variables moved into u.ac */
                   63772: 
                   63773:   u.ac.n = pOp->p3;
                   63774:   u.ac.p1 = pOp->p1;
                   63775:   u.ac.p2 = pOp->p2;
                   63776:   assert( u.ac.n>0 && u.ac.p1>0 && u.ac.p2>0 );
                   63777:   assert( u.ac.p1+u.ac.n<=u.ac.p2 || u.ac.p2+u.ac.n<=u.ac.p1 );
                   63778: 
                   63779:   pIn1 = &aMem[u.ac.p1];
                   63780:   pOut = &aMem[u.ac.p2];
                   63781:   while( u.ac.n-- ){
                   63782:     assert( pOut<=&aMem[p->nMem] );
                   63783:     assert( pIn1<=&aMem[p->nMem] );
                   63784:     assert( memIsValid(pIn1) );
                   63785:     memAboutToChange(p, pOut);
                   63786:     u.ac.zMalloc = pOut->zMalloc;
                   63787:     pOut->zMalloc = 0;
                   63788:     sqlite3VdbeMemMove(pOut, pIn1);
                   63789:     pIn1->zMalloc = u.ac.zMalloc;
                   63790:     REGISTER_TRACE(u.ac.p2++, pOut);
                   63791:     pIn1++;
                   63792:     pOut++;
                   63793:   }
                   63794:   break;
                   63795: }
                   63796: 
                   63797: /* Opcode: Copy P1 P2 * * *
                   63798: **
                   63799: ** Make a copy of register P1 into register P2.
                   63800: **
                   63801: ** This instruction makes a deep copy of the value.  A duplicate
                   63802: ** is made of any string or blob constant.  See also OP_SCopy.
                   63803: */
                   63804: case OP_Copy: {             /* in1, out2 */
                   63805:   pIn1 = &aMem[pOp->p1];
                   63806:   pOut = &aMem[pOp->p2];
                   63807:   assert( pOut!=pIn1 );
                   63808:   sqlite3VdbeMemShallowCopy(pOut, pIn1, MEM_Ephem);
                   63809:   Deephemeralize(pOut);
                   63810:   REGISTER_TRACE(pOp->p2, pOut);
                   63811:   break;
                   63812: }
                   63813: 
                   63814: /* Opcode: SCopy P1 P2 * * *
                   63815: **
                   63816: ** Make a shallow copy of register P1 into register P2.
                   63817: **
                   63818: ** This instruction makes a shallow copy of the value.  If the value
                   63819: ** is a string or blob, then the copy is only a pointer to the
                   63820: ** original and hence if the original changes so will the copy.
                   63821: ** Worse, if the original is deallocated, the copy becomes invalid.
                   63822: ** Thus the program must guarantee that the original will not change
                   63823: ** during the lifetime of the copy.  Use OP_Copy to make a complete
                   63824: ** copy.
                   63825: */
                   63826: case OP_SCopy: {            /* in1, out2 */
                   63827:   pIn1 = &aMem[pOp->p1];
                   63828:   pOut = &aMem[pOp->p2];
                   63829:   assert( pOut!=pIn1 );
                   63830:   sqlite3VdbeMemShallowCopy(pOut, pIn1, MEM_Ephem);
                   63831: #ifdef SQLITE_DEBUG
                   63832:   if( pOut->pScopyFrom==0 ) pOut->pScopyFrom = pIn1;
                   63833: #endif
                   63834:   REGISTER_TRACE(pOp->p2, pOut);
                   63835:   break;
                   63836: }
                   63837: 
                   63838: /* Opcode: ResultRow P1 P2 * * *
                   63839: **
                   63840: ** The registers P1 through P1+P2-1 contain a single row of
                   63841: ** results. This opcode causes the sqlite3_step() call to terminate
                   63842: ** with an SQLITE_ROW return code and it sets up the sqlite3_stmt
                   63843: ** structure to provide access to the top P1 values as the result
                   63844: ** row.
                   63845: */
                   63846: case OP_ResultRow: {
                   63847: #if 0  /* local variables moved into u.ad */
                   63848:   Mem *pMem;
                   63849:   int i;
                   63850: #endif /* local variables moved into u.ad */
                   63851:   assert( p->nResColumn==pOp->p2 );
                   63852:   assert( pOp->p1>0 );
                   63853:   assert( pOp->p1+pOp->p2<=p->nMem+1 );
                   63854: 
                   63855:   /* If this statement has violated immediate foreign key constraints, do
                   63856:   ** not return the number of rows modified. And do not RELEASE the statement
                   63857:   ** transaction. It needs to be rolled back.  */
                   63858:   if( SQLITE_OK!=(rc = sqlite3VdbeCheckFk(p, 0)) ){
                   63859:     assert( db->flags&SQLITE_CountRows );
                   63860:     assert( p->usesStmtJournal );
                   63861:     break;
                   63862:   }
                   63863: 
                   63864:   /* If the SQLITE_CountRows flag is set in sqlite3.flags mask, then
                   63865:   ** DML statements invoke this opcode to return the number of rows
                   63866:   ** modified to the user. This is the only way that a VM that
                   63867:   ** opens a statement transaction may invoke this opcode.
                   63868:   **
                   63869:   ** In case this is such a statement, close any statement transaction
                   63870:   ** opened by this VM before returning control to the user. This is to
                   63871:   ** ensure that statement-transactions are always nested, not overlapping.
                   63872:   ** If the open statement-transaction is not closed here, then the user
                   63873:   ** may step another VM that opens its own statement transaction. This
                   63874:   ** may lead to overlapping statement transactions.
                   63875:   **
                   63876:   ** The statement transaction is never a top-level transaction.  Hence
                   63877:   ** the RELEASE call below can never fail.
                   63878:   */
                   63879:   assert( p->iStatement==0 || db->flags&SQLITE_CountRows );
                   63880:   rc = sqlite3VdbeCloseStatement(p, SAVEPOINT_RELEASE);
                   63881:   if( NEVER(rc!=SQLITE_OK) ){
                   63882:     break;
                   63883:   }
                   63884: 
                   63885:   /* Invalidate all ephemeral cursor row caches */
                   63886:   p->cacheCtr = (p->cacheCtr + 2)|1;
                   63887: 
                   63888:   /* Make sure the results of the current row are \000 terminated
                   63889:   ** and have an assigned type.  The results are de-ephemeralized as
                   63890:   ** as side effect.
                   63891:   */
                   63892:   u.ad.pMem = p->pResultSet = &aMem[pOp->p1];
                   63893:   for(u.ad.i=0; u.ad.i<pOp->p2; u.ad.i++){
                   63894:     assert( memIsValid(&u.ad.pMem[u.ad.i]) );
                   63895:     Deephemeralize(&u.ad.pMem[u.ad.i]);
                   63896:     assert( (u.ad.pMem[u.ad.i].flags & MEM_Ephem)==0
                   63897:             || (u.ad.pMem[u.ad.i].flags & (MEM_Str|MEM_Blob))==0 );
                   63898:     sqlite3VdbeMemNulTerminate(&u.ad.pMem[u.ad.i]);
                   63899:     sqlite3VdbeMemStoreType(&u.ad.pMem[u.ad.i]);
                   63900:     REGISTER_TRACE(pOp->p1+u.ad.i, &u.ad.pMem[u.ad.i]);
                   63901:   }
                   63902:   if( db->mallocFailed ) goto no_mem;
                   63903: 
                   63904:   /* Return SQLITE_ROW
                   63905:   */
                   63906:   p->pc = pc + 1;
                   63907:   rc = SQLITE_ROW;
                   63908:   goto vdbe_return;
                   63909: }
                   63910: 
                   63911: /* Opcode: Concat P1 P2 P3 * *
                   63912: **
                   63913: ** Add the text in register P1 onto the end of the text in
                   63914: ** register P2 and store the result in register P3.
                   63915: ** If either the P1 or P2 text are NULL then store NULL in P3.
                   63916: **
                   63917: **   P3 = P2 || P1
                   63918: **
                   63919: ** It is illegal for P1 and P3 to be the same register. Sometimes,
                   63920: ** if P3 is the same register as P2, the implementation is able
                   63921: ** to avoid a memcpy().
                   63922: */
                   63923: case OP_Concat: {           /* same as TK_CONCAT, in1, in2, out3 */
                   63924: #if 0  /* local variables moved into u.ae */
                   63925:   i64 nByte;
                   63926: #endif /* local variables moved into u.ae */
                   63927: 
                   63928:   pIn1 = &aMem[pOp->p1];
                   63929:   pIn2 = &aMem[pOp->p2];
                   63930:   pOut = &aMem[pOp->p3];
                   63931:   assert( pIn1!=pOut );
                   63932:   if( (pIn1->flags | pIn2->flags) & MEM_Null ){
                   63933:     sqlite3VdbeMemSetNull(pOut);
                   63934:     break;
                   63935:   }
                   63936:   if( ExpandBlob(pIn1) || ExpandBlob(pIn2) ) goto no_mem;
                   63937:   Stringify(pIn1, encoding);
                   63938:   Stringify(pIn2, encoding);
                   63939:   u.ae.nByte = pIn1->n + pIn2->n;
                   63940:   if( u.ae.nByte>db->aLimit[SQLITE_LIMIT_LENGTH] ){
                   63941:     goto too_big;
                   63942:   }
                   63943:   MemSetTypeFlag(pOut, MEM_Str);
                   63944:   if( sqlite3VdbeMemGrow(pOut, (int)u.ae.nByte+2, pOut==pIn2) ){
                   63945:     goto no_mem;
                   63946:   }
                   63947:   if( pOut!=pIn2 ){
                   63948:     memcpy(pOut->z, pIn2->z, pIn2->n);
                   63949:   }
                   63950:   memcpy(&pOut->z[pIn2->n], pIn1->z, pIn1->n);
                   63951:   pOut->z[u.ae.nByte] = 0;
                   63952:   pOut->z[u.ae.nByte+1] = 0;
                   63953:   pOut->flags |= MEM_Term;
                   63954:   pOut->n = (int)u.ae.nByte;
                   63955:   pOut->enc = encoding;
                   63956:   UPDATE_MAX_BLOBSIZE(pOut);
                   63957:   break;
                   63958: }
                   63959: 
                   63960: /* Opcode: Add P1 P2 P3 * *
                   63961: **
                   63962: ** Add the value in register P1 to the value in register P2
                   63963: ** and store the result in register P3.
                   63964: ** If either input is NULL, the result is NULL.
                   63965: */
                   63966: /* Opcode: Multiply P1 P2 P3 * *
                   63967: **
                   63968: **
                   63969: ** Multiply the value in register P1 by the value in register P2
                   63970: ** and store the result in register P3.
                   63971: ** If either input is NULL, the result is NULL.
                   63972: */
                   63973: /* Opcode: Subtract P1 P2 P3 * *
                   63974: **
                   63975: ** Subtract the value in register P1 from the value in register P2
                   63976: ** and store the result in register P3.
                   63977: ** If either input is NULL, the result is NULL.
                   63978: */
                   63979: /* Opcode: Divide P1 P2 P3 * *
                   63980: **
                   63981: ** Divide the value in register P1 by the value in register P2
                   63982: ** and store the result in register P3 (P3=P2/P1). If the value in 
                   63983: ** register P1 is zero, then the result is NULL. If either input is 
                   63984: ** NULL, the result is NULL.
                   63985: */
                   63986: /* Opcode: Remainder P1 P2 P3 * *
                   63987: **
                   63988: ** Compute the remainder after integer division of the value in
                   63989: ** register P1 by the value in register P2 and store the result in P3. 
                   63990: ** If the value in register P2 is zero the result is NULL.
                   63991: ** If either operand is NULL, the result is NULL.
                   63992: */
                   63993: case OP_Add:                   /* same as TK_PLUS, in1, in2, out3 */
                   63994: case OP_Subtract:              /* same as TK_MINUS, in1, in2, out3 */
                   63995: case OP_Multiply:              /* same as TK_STAR, in1, in2, out3 */
                   63996: case OP_Divide:                /* same as TK_SLASH, in1, in2, out3 */
                   63997: case OP_Remainder: {           /* same as TK_REM, in1, in2, out3 */
                   63998: #if 0  /* local variables moved into u.af */
                   63999:   int flags;      /* Combined MEM_* flags from both inputs */
                   64000:   i64 iA;         /* Integer value of left operand */
                   64001:   i64 iB;         /* Integer value of right operand */
                   64002:   double rA;      /* Real value of left operand */
                   64003:   double rB;      /* Real value of right operand */
                   64004: #endif /* local variables moved into u.af */
                   64005: 
                   64006:   pIn1 = &aMem[pOp->p1];
                   64007:   applyNumericAffinity(pIn1);
                   64008:   pIn2 = &aMem[pOp->p2];
                   64009:   applyNumericAffinity(pIn2);
                   64010:   pOut = &aMem[pOp->p3];
                   64011:   u.af.flags = pIn1->flags | pIn2->flags;
                   64012:   if( (u.af.flags & MEM_Null)!=0 ) goto arithmetic_result_is_null;
                   64013:   if( (pIn1->flags & pIn2->flags & MEM_Int)==MEM_Int ){
                   64014:     u.af.iA = pIn1->u.i;
                   64015:     u.af.iB = pIn2->u.i;
                   64016:     switch( pOp->opcode ){
                   64017:       case OP_Add:       if( sqlite3AddInt64(&u.af.iB,u.af.iA) ) goto fp_math;  break;
                   64018:       case OP_Subtract:  if( sqlite3SubInt64(&u.af.iB,u.af.iA) ) goto fp_math;  break;
                   64019:       case OP_Multiply:  if( sqlite3MulInt64(&u.af.iB,u.af.iA) ) goto fp_math;  break;
                   64020:       case OP_Divide: {
                   64021:         if( u.af.iA==0 ) goto arithmetic_result_is_null;
                   64022:         if( u.af.iA==-1 && u.af.iB==SMALLEST_INT64 ) goto fp_math;
                   64023:         u.af.iB /= u.af.iA;
                   64024:         break;
                   64025:       }
                   64026:       default: {
                   64027:         if( u.af.iA==0 ) goto arithmetic_result_is_null;
                   64028:         if( u.af.iA==-1 ) u.af.iA = 1;
                   64029:         u.af.iB %= u.af.iA;
                   64030:         break;
                   64031:       }
                   64032:     }
                   64033:     pOut->u.i = u.af.iB;
                   64034:     MemSetTypeFlag(pOut, MEM_Int);
                   64035:   }else{
                   64036: fp_math:
                   64037:     u.af.rA = sqlite3VdbeRealValue(pIn1);
                   64038:     u.af.rB = sqlite3VdbeRealValue(pIn2);
                   64039:     switch( pOp->opcode ){
                   64040:       case OP_Add:         u.af.rB += u.af.rA;       break;
                   64041:       case OP_Subtract:    u.af.rB -= u.af.rA;       break;
                   64042:       case OP_Multiply:    u.af.rB *= u.af.rA;       break;
                   64043:       case OP_Divide: {
                   64044:         /* (double)0 In case of SQLITE_OMIT_FLOATING_POINT... */
                   64045:         if( u.af.rA==(double)0 ) goto arithmetic_result_is_null;
                   64046:         u.af.rB /= u.af.rA;
                   64047:         break;
                   64048:       }
                   64049:       default: {
                   64050:         u.af.iA = (i64)u.af.rA;
                   64051:         u.af.iB = (i64)u.af.rB;
                   64052:         if( u.af.iA==0 ) goto arithmetic_result_is_null;
                   64053:         if( u.af.iA==-1 ) u.af.iA = 1;
                   64054:         u.af.rB = (double)(u.af.iB % u.af.iA);
                   64055:         break;
                   64056:       }
                   64057:     }
                   64058: #ifdef SQLITE_OMIT_FLOATING_POINT
                   64059:     pOut->u.i = u.af.rB;
                   64060:     MemSetTypeFlag(pOut, MEM_Int);
                   64061: #else
                   64062:     if( sqlite3IsNaN(u.af.rB) ){
                   64063:       goto arithmetic_result_is_null;
                   64064:     }
                   64065:     pOut->r = u.af.rB;
                   64066:     MemSetTypeFlag(pOut, MEM_Real);
                   64067:     if( (u.af.flags & MEM_Real)==0 ){
                   64068:       sqlite3VdbeIntegerAffinity(pOut);
                   64069:     }
                   64070: #endif
                   64071:   }
                   64072:   break;
                   64073: 
                   64074: arithmetic_result_is_null:
                   64075:   sqlite3VdbeMemSetNull(pOut);
                   64076:   break;
                   64077: }
                   64078: 
                   64079: /* Opcode: CollSeq * * P4
                   64080: **
                   64081: ** P4 is a pointer to a CollSeq struct. If the next call to a user function
                   64082: ** or aggregate calls sqlite3GetFuncCollSeq(), this collation sequence will
                   64083: ** be returned. This is used by the built-in min(), max() and nullif()
                   64084: ** functions.
                   64085: **
                   64086: ** The interface used by the implementation of the aforementioned functions
                   64087: ** to retrieve the collation sequence set by this opcode is not available
                   64088: ** publicly, only to user functions defined in func.c.
                   64089: */
                   64090: case OP_CollSeq: {
                   64091:   assert( pOp->p4type==P4_COLLSEQ );
                   64092:   break;
                   64093: }
                   64094: 
                   64095: /* Opcode: Function P1 P2 P3 P4 P5
                   64096: **
                   64097: ** Invoke a user function (P4 is a pointer to a Function structure that
                   64098: ** defines the function) with P5 arguments taken from register P2 and
                   64099: ** successors.  The result of the function is stored in register P3.
                   64100: ** Register P3 must not be one of the function inputs.
                   64101: **
                   64102: ** P1 is a 32-bit bitmask indicating whether or not each argument to the 
                   64103: ** function was determined to be constant at compile time. If the first
                   64104: ** argument was constant then bit 0 of P1 is set. This is used to determine
                   64105: ** whether meta data associated with a user function argument using the
                   64106: ** sqlite3_set_auxdata() API may be safely retained until the next
                   64107: ** invocation of this opcode.
                   64108: **
                   64109: ** See also: AggStep and AggFinal
                   64110: */
                   64111: case OP_Function: {
                   64112: #if 0  /* local variables moved into u.ag */
                   64113:   int i;
                   64114:   Mem *pArg;
                   64115:   sqlite3_context ctx;
                   64116:   sqlite3_value **apVal;
                   64117:   int n;
                   64118: #endif /* local variables moved into u.ag */
                   64119: 
                   64120:   u.ag.n = pOp->p5;
                   64121:   u.ag.apVal = p->apArg;
                   64122:   assert( u.ag.apVal || u.ag.n==0 );
                   64123:   assert( pOp->p3>0 && pOp->p3<=p->nMem );
                   64124:   pOut = &aMem[pOp->p3];
                   64125:   memAboutToChange(p, pOut);
                   64126: 
                   64127:   assert( u.ag.n==0 || (pOp->p2>0 && pOp->p2+u.ag.n<=p->nMem+1) );
                   64128:   assert( pOp->p3<pOp->p2 || pOp->p3>=pOp->p2+u.ag.n );
                   64129:   u.ag.pArg = &aMem[pOp->p2];
                   64130:   for(u.ag.i=0; u.ag.i<u.ag.n; u.ag.i++, u.ag.pArg++){
                   64131:     assert( memIsValid(u.ag.pArg) );
                   64132:     u.ag.apVal[u.ag.i] = u.ag.pArg;
                   64133:     Deephemeralize(u.ag.pArg);
                   64134:     sqlite3VdbeMemStoreType(u.ag.pArg);
                   64135:     REGISTER_TRACE(pOp->p2+u.ag.i, u.ag.pArg);
                   64136:   }
                   64137: 
                   64138:   assert( pOp->p4type==P4_FUNCDEF || pOp->p4type==P4_VDBEFUNC );
                   64139:   if( pOp->p4type==P4_FUNCDEF ){
                   64140:     u.ag.ctx.pFunc = pOp->p4.pFunc;
                   64141:     u.ag.ctx.pVdbeFunc = 0;
                   64142:   }else{
                   64143:     u.ag.ctx.pVdbeFunc = (VdbeFunc*)pOp->p4.pVdbeFunc;
                   64144:     u.ag.ctx.pFunc = u.ag.ctx.pVdbeFunc->pFunc;
                   64145:   }
                   64146: 
                   64147:   u.ag.ctx.s.flags = MEM_Null;
                   64148:   u.ag.ctx.s.db = db;
                   64149:   u.ag.ctx.s.xDel = 0;
                   64150:   u.ag.ctx.s.zMalloc = 0;
                   64151: 
                   64152:   /* The output cell may already have a buffer allocated. Move
                   64153:   ** the pointer to u.ag.ctx.s so in case the user-function can use
                   64154:   ** the already allocated buffer instead of allocating a new one.
                   64155:   */
                   64156:   sqlite3VdbeMemMove(&u.ag.ctx.s, pOut);
                   64157:   MemSetTypeFlag(&u.ag.ctx.s, MEM_Null);
                   64158: 
                   64159:   u.ag.ctx.isError = 0;
                   64160:   if( u.ag.ctx.pFunc->flags & SQLITE_FUNC_NEEDCOLL ){
                   64161:     assert( pOp>aOp );
                   64162:     assert( pOp[-1].p4type==P4_COLLSEQ );
                   64163:     assert( pOp[-1].opcode==OP_CollSeq );
                   64164:     u.ag.ctx.pColl = pOp[-1].p4.pColl;
                   64165:   }
                   64166:   db->lastRowid = lastRowid;
                   64167:   (*u.ag.ctx.pFunc->xFunc)(&u.ag.ctx, u.ag.n, u.ag.apVal); /* IMP: R-24505-23230 */
                   64168:   lastRowid = db->lastRowid;
                   64169: 
                   64170:   /* If any auxiliary data functions have been called by this user function,
                   64171:   ** immediately call the destructor for any non-static values.
                   64172:   */
                   64173:   if( u.ag.ctx.pVdbeFunc ){
                   64174:     sqlite3VdbeDeleteAuxData(u.ag.ctx.pVdbeFunc, pOp->p1);
                   64175:     pOp->p4.pVdbeFunc = u.ag.ctx.pVdbeFunc;
                   64176:     pOp->p4type = P4_VDBEFUNC;
                   64177:   }
                   64178: 
                   64179:   if( db->mallocFailed ){
                   64180:     /* Even though a malloc() has failed, the implementation of the
                   64181:     ** user function may have called an sqlite3_result_XXX() function
                   64182:     ** to return a value. The following call releases any resources
                   64183:     ** associated with such a value.
                   64184:     */
                   64185:     sqlite3VdbeMemRelease(&u.ag.ctx.s);
                   64186:     goto no_mem;
                   64187:   }
                   64188: 
                   64189:   /* If the function returned an error, throw an exception */
                   64190:   if( u.ag.ctx.isError ){
                   64191:     sqlite3SetString(&p->zErrMsg, db, "%s", sqlite3_value_text(&u.ag.ctx.s));
                   64192:     rc = u.ag.ctx.isError;
                   64193:   }
                   64194: 
                   64195:   /* Copy the result of the function into register P3 */
                   64196:   sqlite3VdbeChangeEncoding(&u.ag.ctx.s, encoding);
                   64197:   sqlite3VdbeMemMove(pOut, &u.ag.ctx.s);
                   64198:   if( sqlite3VdbeMemTooBig(pOut) ){
                   64199:     goto too_big;
                   64200:   }
                   64201: 
                   64202: #if 0
                   64203:   /* The app-defined function has done something that as caused this
                   64204:   ** statement to expire.  (Perhaps the function called sqlite3_exec()
                   64205:   ** with a CREATE TABLE statement.)
                   64206:   */
                   64207:   if( p->expired ) rc = SQLITE_ABORT;
                   64208: #endif
                   64209: 
                   64210:   REGISTER_TRACE(pOp->p3, pOut);
                   64211:   UPDATE_MAX_BLOBSIZE(pOut);
                   64212:   break;
                   64213: }
                   64214: 
                   64215: /* Opcode: BitAnd P1 P2 P3 * *
                   64216: **
                   64217: ** Take the bit-wise AND of the values in register P1 and P2 and
                   64218: ** store the result in register P3.
                   64219: ** If either input is NULL, the result is NULL.
                   64220: */
                   64221: /* Opcode: BitOr P1 P2 P3 * *
                   64222: **
                   64223: ** Take the bit-wise OR of the values in register P1 and P2 and
                   64224: ** store the result in register P3.
                   64225: ** If either input is NULL, the result is NULL.
                   64226: */
                   64227: /* Opcode: ShiftLeft P1 P2 P3 * *
                   64228: **
                   64229: ** Shift the integer value in register P2 to the left by the
                   64230: ** number of bits specified by the integer in register P1.
                   64231: ** Store the result in register P3.
                   64232: ** If either input is NULL, the result is NULL.
                   64233: */
                   64234: /* Opcode: ShiftRight P1 P2 P3 * *
                   64235: **
                   64236: ** Shift the integer value in register P2 to the right by the
                   64237: ** number of bits specified by the integer in register P1.
                   64238: ** Store the result in register P3.
                   64239: ** If either input is NULL, the result is NULL.
                   64240: */
                   64241: case OP_BitAnd:                 /* same as TK_BITAND, in1, in2, out3 */
                   64242: case OP_BitOr:                  /* same as TK_BITOR, in1, in2, out3 */
                   64243: case OP_ShiftLeft:              /* same as TK_LSHIFT, in1, in2, out3 */
                   64244: case OP_ShiftRight: {           /* same as TK_RSHIFT, in1, in2, out3 */
                   64245: #if 0  /* local variables moved into u.ah */
                   64246:   i64 iA;
                   64247:   u64 uA;
                   64248:   i64 iB;
                   64249:   u8 op;
                   64250: #endif /* local variables moved into u.ah */
                   64251: 
                   64252:   pIn1 = &aMem[pOp->p1];
                   64253:   pIn2 = &aMem[pOp->p2];
                   64254:   pOut = &aMem[pOp->p3];
                   64255:   if( (pIn1->flags | pIn2->flags) & MEM_Null ){
                   64256:     sqlite3VdbeMemSetNull(pOut);
                   64257:     break;
                   64258:   }
                   64259:   u.ah.iA = sqlite3VdbeIntValue(pIn2);
                   64260:   u.ah.iB = sqlite3VdbeIntValue(pIn1);
                   64261:   u.ah.op = pOp->opcode;
                   64262:   if( u.ah.op==OP_BitAnd ){
                   64263:     u.ah.iA &= u.ah.iB;
                   64264:   }else if( u.ah.op==OP_BitOr ){
                   64265:     u.ah.iA |= u.ah.iB;
                   64266:   }else if( u.ah.iB!=0 ){
                   64267:     assert( u.ah.op==OP_ShiftRight || u.ah.op==OP_ShiftLeft );
                   64268: 
                   64269:     /* If shifting by a negative amount, shift in the other direction */
                   64270:     if( u.ah.iB<0 ){
                   64271:       assert( OP_ShiftRight==OP_ShiftLeft+1 );
                   64272:       u.ah.op = 2*OP_ShiftLeft + 1 - u.ah.op;
                   64273:       u.ah.iB = u.ah.iB>(-64) ? -u.ah.iB : 64;
                   64274:     }
                   64275: 
                   64276:     if( u.ah.iB>=64 ){
                   64277:       u.ah.iA = (u.ah.iA>=0 || u.ah.op==OP_ShiftLeft) ? 0 : -1;
                   64278:     }else{
                   64279:       memcpy(&u.ah.uA, &u.ah.iA, sizeof(u.ah.uA));
                   64280:       if( u.ah.op==OP_ShiftLeft ){
                   64281:         u.ah.uA <<= u.ah.iB;
                   64282:       }else{
                   64283:         u.ah.uA >>= u.ah.iB;
                   64284:         /* Sign-extend on a right shift of a negative number */
                   64285:         if( u.ah.iA<0 ) u.ah.uA |= ((((u64)0xffffffff)<<32)|0xffffffff) << (64-u.ah.iB);
                   64286:       }
                   64287:       memcpy(&u.ah.iA, &u.ah.uA, sizeof(u.ah.iA));
                   64288:     }
                   64289:   }
                   64290:   pOut->u.i = u.ah.iA;
                   64291:   MemSetTypeFlag(pOut, MEM_Int);
                   64292:   break;
                   64293: }
                   64294: 
                   64295: /* Opcode: AddImm  P1 P2 * * *
                   64296: ** 
                   64297: ** Add the constant P2 to the value in register P1.
                   64298: ** The result is always an integer.
                   64299: **
                   64300: ** To force any register to be an integer, just add 0.
                   64301: */
                   64302: case OP_AddImm: {            /* in1 */
                   64303:   pIn1 = &aMem[pOp->p1];
                   64304:   memAboutToChange(p, pIn1);
                   64305:   sqlite3VdbeMemIntegerify(pIn1);
                   64306:   pIn1->u.i += pOp->p2;
                   64307:   break;
                   64308: }
                   64309: 
                   64310: /* Opcode: MustBeInt P1 P2 * * *
                   64311: ** 
                   64312: ** Force the value in register P1 to be an integer.  If the value
                   64313: ** in P1 is not an integer and cannot be converted into an integer
                   64314: ** without data loss, then jump immediately to P2, or if P2==0
                   64315: ** raise an SQLITE_MISMATCH exception.
                   64316: */
                   64317: case OP_MustBeInt: {            /* jump, in1 */
                   64318:   pIn1 = &aMem[pOp->p1];
                   64319:   applyAffinity(pIn1, SQLITE_AFF_NUMERIC, encoding);
                   64320:   if( (pIn1->flags & MEM_Int)==0 ){
                   64321:     if( pOp->p2==0 ){
                   64322:       rc = SQLITE_MISMATCH;
                   64323:       goto abort_due_to_error;
                   64324:     }else{
                   64325:       pc = pOp->p2 - 1;
                   64326:     }
                   64327:   }else{
                   64328:     MemSetTypeFlag(pIn1, MEM_Int);
                   64329:   }
                   64330:   break;
                   64331: }
                   64332: 
                   64333: #ifndef SQLITE_OMIT_FLOATING_POINT
                   64334: /* Opcode: RealAffinity P1 * * * *
                   64335: **
                   64336: ** If register P1 holds an integer convert it to a real value.
                   64337: **
                   64338: ** This opcode is used when extracting information from a column that
                   64339: ** has REAL affinity.  Such column values may still be stored as
                   64340: ** integers, for space efficiency, but after extraction we want them
                   64341: ** to have only a real value.
                   64342: */
                   64343: case OP_RealAffinity: {                  /* in1 */
                   64344:   pIn1 = &aMem[pOp->p1];
                   64345:   if( pIn1->flags & MEM_Int ){
                   64346:     sqlite3VdbeMemRealify(pIn1);
                   64347:   }
                   64348:   break;
                   64349: }
                   64350: #endif
                   64351: 
                   64352: #ifndef SQLITE_OMIT_CAST
                   64353: /* Opcode: ToText P1 * * * *
                   64354: **
                   64355: ** Force the value in register P1 to be text.
                   64356: ** If the value is numeric, convert it to a string using the
                   64357: ** equivalent of printf().  Blob values are unchanged and
                   64358: ** are afterwards simply interpreted as text.
                   64359: **
                   64360: ** A NULL value is not changed by this routine.  It remains NULL.
                   64361: */
                   64362: case OP_ToText: {                  /* same as TK_TO_TEXT, in1 */
                   64363:   pIn1 = &aMem[pOp->p1];
                   64364:   memAboutToChange(p, pIn1);
                   64365:   if( pIn1->flags & MEM_Null ) break;
                   64366:   assert( MEM_Str==(MEM_Blob>>3) );
                   64367:   pIn1->flags |= (pIn1->flags&MEM_Blob)>>3;
                   64368:   applyAffinity(pIn1, SQLITE_AFF_TEXT, encoding);
                   64369:   rc = ExpandBlob(pIn1);
                   64370:   assert( pIn1->flags & MEM_Str || db->mallocFailed );
                   64371:   pIn1->flags &= ~(MEM_Int|MEM_Real|MEM_Blob|MEM_Zero);
                   64372:   UPDATE_MAX_BLOBSIZE(pIn1);
                   64373:   break;
                   64374: }
                   64375: 
                   64376: /* Opcode: ToBlob P1 * * * *
                   64377: **
                   64378: ** Force the value in register P1 to be a BLOB.
                   64379: ** If the value is numeric, convert it to a string first.
                   64380: ** Strings are simply reinterpreted as blobs with no change
                   64381: ** to the underlying data.
                   64382: **
                   64383: ** A NULL value is not changed by this routine.  It remains NULL.
                   64384: */
                   64385: case OP_ToBlob: {                  /* same as TK_TO_BLOB, in1 */
                   64386:   pIn1 = &aMem[pOp->p1];
                   64387:   if( pIn1->flags & MEM_Null ) break;
                   64388:   if( (pIn1->flags & MEM_Blob)==0 ){
                   64389:     applyAffinity(pIn1, SQLITE_AFF_TEXT, encoding);
                   64390:     assert( pIn1->flags & MEM_Str || db->mallocFailed );
                   64391:     MemSetTypeFlag(pIn1, MEM_Blob);
                   64392:   }else{
                   64393:     pIn1->flags &= ~(MEM_TypeMask&~MEM_Blob);
                   64394:   }
                   64395:   UPDATE_MAX_BLOBSIZE(pIn1);
                   64396:   break;
                   64397: }
                   64398: 
                   64399: /* Opcode: ToNumeric P1 * * * *
                   64400: **
                   64401: ** Force the value in register P1 to be numeric (either an
                   64402: ** integer or a floating-point number.)
                   64403: ** If the value is text or blob, try to convert it to an using the
                   64404: ** equivalent of atoi() or atof() and store 0 if no such conversion 
                   64405: ** is possible.
                   64406: **
                   64407: ** A NULL value is not changed by this routine.  It remains NULL.
                   64408: */
                   64409: case OP_ToNumeric: {                  /* same as TK_TO_NUMERIC, in1 */
                   64410:   pIn1 = &aMem[pOp->p1];
                   64411:   sqlite3VdbeMemNumerify(pIn1);
                   64412:   break;
                   64413: }
                   64414: #endif /* SQLITE_OMIT_CAST */
                   64415: 
                   64416: /* Opcode: ToInt P1 * * * *
                   64417: **
                   64418: ** Force the value in register P1 to be an integer.  If
                   64419: ** The value is currently a real number, drop its fractional part.
                   64420: ** If the value is text or blob, try to convert it to an integer using the
                   64421: ** equivalent of atoi() and store 0 if no such conversion is possible.
                   64422: **
                   64423: ** A NULL value is not changed by this routine.  It remains NULL.
                   64424: */
                   64425: case OP_ToInt: {                  /* same as TK_TO_INT, in1 */
                   64426:   pIn1 = &aMem[pOp->p1];
                   64427:   if( (pIn1->flags & MEM_Null)==0 ){
                   64428:     sqlite3VdbeMemIntegerify(pIn1);
                   64429:   }
                   64430:   break;
                   64431: }
                   64432: 
                   64433: #if !defined(SQLITE_OMIT_CAST) && !defined(SQLITE_OMIT_FLOATING_POINT)
                   64434: /* Opcode: ToReal P1 * * * *
                   64435: **
                   64436: ** Force the value in register P1 to be a floating point number.
                   64437: ** If The value is currently an integer, convert it.
                   64438: ** If the value is text or blob, try to convert it to an integer using the
                   64439: ** equivalent of atoi() and store 0.0 if no such conversion is possible.
                   64440: **
                   64441: ** A NULL value is not changed by this routine.  It remains NULL.
                   64442: */
                   64443: case OP_ToReal: {                  /* same as TK_TO_REAL, in1 */
                   64444:   pIn1 = &aMem[pOp->p1];
                   64445:   memAboutToChange(p, pIn1);
                   64446:   if( (pIn1->flags & MEM_Null)==0 ){
                   64447:     sqlite3VdbeMemRealify(pIn1);
                   64448:   }
                   64449:   break;
                   64450: }
                   64451: #endif /* !defined(SQLITE_OMIT_CAST) && !defined(SQLITE_OMIT_FLOATING_POINT) */
                   64452: 
                   64453: /* Opcode: Lt P1 P2 P3 P4 P5
                   64454: **
                   64455: ** Compare the values in register P1 and P3.  If reg(P3)<reg(P1) then
                   64456: ** jump to address P2.  
                   64457: **
                   64458: ** If the SQLITE_JUMPIFNULL bit of P5 is set and either reg(P1) or
                   64459: ** reg(P3) is NULL then take the jump.  If the SQLITE_JUMPIFNULL 
                   64460: ** bit is clear then fall through if either operand is NULL.
                   64461: **
                   64462: ** The SQLITE_AFF_MASK portion of P5 must be an affinity character -
                   64463: ** SQLITE_AFF_TEXT, SQLITE_AFF_INTEGER, and so forth. An attempt is made 
                   64464: ** to coerce both inputs according to this affinity before the
                   64465: ** comparison is made. If the SQLITE_AFF_MASK is 0x00, then numeric
                   64466: ** affinity is used. Note that the affinity conversions are stored
                   64467: ** back into the input registers P1 and P3.  So this opcode can cause
                   64468: ** persistent changes to registers P1 and P3.
                   64469: **
                   64470: ** Once any conversions have taken place, and neither value is NULL, 
                   64471: ** the values are compared. If both values are blobs then memcmp() is
                   64472: ** used to determine the results of the comparison.  If both values
                   64473: ** are text, then the appropriate collating function specified in
                   64474: ** P4 is  used to do the comparison.  If P4 is not specified then
                   64475: ** memcmp() is used to compare text string.  If both values are
                   64476: ** numeric, then a numeric comparison is used. If the two values
                   64477: ** are of different types, then numbers are considered less than
                   64478: ** strings and strings are considered less than blobs.
                   64479: **
                   64480: ** If the SQLITE_STOREP2 bit of P5 is set, then do not jump.  Instead,
                   64481: ** store a boolean result (either 0, or 1, or NULL) in register P2.
                   64482: */
                   64483: /* Opcode: Ne P1 P2 P3 P4 P5
                   64484: **
                   64485: ** This works just like the Lt opcode except that the jump is taken if
                   64486: ** the operands in registers P1 and P3 are not equal.  See the Lt opcode for
                   64487: ** additional information.
                   64488: **
                   64489: ** If SQLITE_NULLEQ is set in P5 then the result of comparison is always either
                   64490: ** true or false and is never NULL.  If both operands are NULL then the result
                   64491: ** of comparison is false.  If either operand is NULL then the result is true.
                   64492: ** If neither operand is NULL the result is the same as it would be if
                   64493: ** the SQLITE_NULLEQ flag were omitted from P5.
                   64494: */
                   64495: /* Opcode: Eq P1 P2 P3 P4 P5
                   64496: **
                   64497: ** This works just like the Lt opcode except that the jump is taken if
                   64498: ** the operands in registers P1 and P3 are equal.
                   64499: ** See the Lt opcode for additional information.
                   64500: **
                   64501: ** If SQLITE_NULLEQ is set in P5 then the result of comparison is always either
                   64502: ** true or false and is never NULL.  If both operands are NULL then the result
                   64503: ** of comparison is true.  If either operand is NULL then the result is false.
                   64504: ** If neither operand is NULL the result is the same as it would be if
                   64505: ** the SQLITE_NULLEQ flag were omitted from P5.
                   64506: */
                   64507: /* Opcode: Le P1 P2 P3 P4 P5
                   64508: **
                   64509: ** This works just like the Lt opcode except that the jump is taken if
                   64510: ** the content of register P3 is less than or equal to the content of
                   64511: ** register P1.  See the Lt opcode for additional information.
                   64512: */
                   64513: /* Opcode: Gt P1 P2 P3 P4 P5
                   64514: **
                   64515: ** This works just like the Lt opcode except that the jump is taken if
                   64516: ** the content of register P3 is greater than the content of
                   64517: ** register P1.  See the Lt opcode for additional information.
                   64518: */
                   64519: /* Opcode: Ge P1 P2 P3 P4 P5
                   64520: **
                   64521: ** This works just like the Lt opcode except that the jump is taken if
                   64522: ** the content of register P3 is greater than or equal to the content of
                   64523: ** register P1.  See the Lt opcode for additional information.
                   64524: */
                   64525: case OP_Eq:               /* same as TK_EQ, jump, in1, in3 */
                   64526: case OP_Ne:               /* same as TK_NE, jump, in1, in3 */
                   64527: case OP_Lt:               /* same as TK_LT, jump, in1, in3 */
                   64528: case OP_Le:               /* same as TK_LE, jump, in1, in3 */
                   64529: case OP_Gt:               /* same as TK_GT, jump, in1, in3 */
                   64530: case OP_Ge: {             /* same as TK_GE, jump, in1, in3 */
                   64531: #if 0  /* local variables moved into u.ai */
                   64532:   int res;            /* Result of the comparison of pIn1 against pIn3 */
                   64533:   char affinity;      /* Affinity to use for comparison */
                   64534:   u16 flags1;         /* Copy of initial value of pIn1->flags */
                   64535:   u16 flags3;         /* Copy of initial value of pIn3->flags */
                   64536: #endif /* local variables moved into u.ai */
                   64537: 
                   64538:   pIn1 = &aMem[pOp->p1];
                   64539:   pIn3 = &aMem[pOp->p3];
                   64540:   u.ai.flags1 = pIn1->flags;
                   64541:   u.ai.flags3 = pIn3->flags;
                   64542:   if( (u.ai.flags1 | u.ai.flags3)&MEM_Null ){
                   64543:     /* One or both operands are NULL */
                   64544:     if( pOp->p5 & SQLITE_NULLEQ ){
                   64545:       /* If SQLITE_NULLEQ is set (which will only happen if the operator is
                   64546:       ** OP_Eq or OP_Ne) then take the jump or not depending on whether
                   64547:       ** or not both operands are null.
                   64548:       */
                   64549:       assert( pOp->opcode==OP_Eq || pOp->opcode==OP_Ne );
                   64550:       u.ai.res = (u.ai.flags1 & u.ai.flags3 & MEM_Null)==0;
                   64551:     }else{
                   64552:       /* SQLITE_NULLEQ is clear and at least one operand is NULL,
                   64553:       ** then the result is always NULL.
                   64554:       ** The jump is taken if the SQLITE_JUMPIFNULL bit is set.
                   64555:       */
                   64556:       if( pOp->p5 & SQLITE_STOREP2 ){
                   64557:         pOut = &aMem[pOp->p2];
                   64558:         MemSetTypeFlag(pOut, MEM_Null);
                   64559:         REGISTER_TRACE(pOp->p2, pOut);
                   64560:       }else if( pOp->p5 & SQLITE_JUMPIFNULL ){
                   64561:         pc = pOp->p2-1;
                   64562:       }
                   64563:       break;
                   64564:     }
                   64565:   }else{
                   64566:     /* Neither operand is NULL.  Do a comparison. */
                   64567:     u.ai.affinity = pOp->p5 & SQLITE_AFF_MASK;
                   64568:     if( u.ai.affinity ){
                   64569:       applyAffinity(pIn1, u.ai.affinity, encoding);
                   64570:       applyAffinity(pIn3, u.ai.affinity, encoding);
                   64571:       if( db->mallocFailed ) goto no_mem;
                   64572:     }
                   64573: 
                   64574:     assert( pOp->p4type==P4_COLLSEQ || pOp->p4.pColl==0 );
                   64575:     ExpandBlob(pIn1);
                   64576:     ExpandBlob(pIn3);
                   64577:     u.ai.res = sqlite3MemCompare(pIn3, pIn1, pOp->p4.pColl);
                   64578:   }
                   64579:   switch( pOp->opcode ){
                   64580:     case OP_Eq:    u.ai.res = u.ai.res==0;     break;
                   64581:     case OP_Ne:    u.ai.res = u.ai.res!=0;     break;
                   64582:     case OP_Lt:    u.ai.res = u.ai.res<0;      break;
                   64583:     case OP_Le:    u.ai.res = u.ai.res<=0;     break;
                   64584:     case OP_Gt:    u.ai.res = u.ai.res>0;      break;
                   64585:     default:       u.ai.res = u.ai.res>=0;     break;
                   64586:   }
                   64587: 
                   64588:   if( pOp->p5 & SQLITE_STOREP2 ){
                   64589:     pOut = &aMem[pOp->p2];
                   64590:     memAboutToChange(p, pOut);
                   64591:     MemSetTypeFlag(pOut, MEM_Int);
                   64592:     pOut->u.i = u.ai.res;
                   64593:     REGISTER_TRACE(pOp->p2, pOut);
                   64594:   }else if( u.ai.res ){
                   64595:     pc = pOp->p2-1;
                   64596:   }
                   64597: 
                   64598:   /* Undo any changes made by applyAffinity() to the input registers. */
                   64599:   pIn1->flags = (pIn1->flags&~MEM_TypeMask) | (u.ai.flags1&MEM_TypeMask);
                   64600:   pIn3->flags = (pIn3->flags&~MEM_TypeMask) | (u.ai.flags3&MEM_TypeMask);
                   64601:   break;
                   64602: }
                   64603: 
                   64604: /* Opcode: Permutation * * * P4 *
                   64605: **
                   64606: ** Set the permutation used by the OP_Compare operator to be the array
                   64607: ** of integers in P4.
                   64608: **
                   64609: ** The permutation is only valid until the next OP_Permutation, OP_Compare,
                   64610: ** OP_Halt, or OP_ResultRow.  Typically the OP_Permutation should occur
                   64611: ** immediately prior to the OP_Compare.
                   64612: */
                   64613: case OP_Permutation: {
                   64614:   assert( pOp->p4type==P4_INTARRAY );
                   64615:   assert( pOp->p4.ai );
                   64616:   aPermute = pOp->p4.ai;
                   64617:   break;
                   64618: }
                   64619: 
                   64620: /* Opcode: Compare P1 P2 P3 P4 *
                   64621: **
                   64622: ** Compare two vectors of registers in reg(P1)..reg(P1+P3-1) (call this
                   64623: ** vector "A") and in reg(P2)..reg(P2+P3-1) ("B").  Save the result of
                   64624: ** the comparison for use by the next OP_Jump instruct.
                   64625: **
                   64626: ** P4 is a KeyInfo structure that defines collating sequences and sort
                   64627: ** orders for the comparison.  The permutation applies to registers
                   64628: ** only.  The KeyInfo elements are used sequentially.
                   64629: **
                   64630: ** The comparison is a sort comparison, so NULLs compare equal,
                   64631: ** NULLs are less than numbers, numbers are less than strings,
                   64632: ** and strings are less than blobs.
                   64633: */
                   64634: case OP_Compare: {
                   64635: #if 0  /* local variables moved into u.aj */
                   64636:   int n;
                   64637:   int i;
                   64638:   int p1;
                   64639:   int p2;
                   64640:   const KeyInfo *pKeyInfo;
                   64641:   int idx;
                   64642:   CollSeq *pColl;    /* Collating sequence to use on this term */
                   64643:   int bRev;          /* True for DESCENDING sort order */
                   64644: #endif /* local variables moved into u.aj */
                   64645: 
                   64646:   u.aj.n = pOp->p3;
                   64647:   u.aj.pKeyInfo = pOp->p4.pKeyInfo;
                   64648:   assert( u.aj.n>0 );
                   64649:   assert( u.aj.pKeyInfo!=0 );
                   64650:   u.aj.p1 = pOp->p1;
                   64651:   u.aj.p2 = pOp->p2;
                   64652: #if SQLITE_DEBUG
                   64653:   if( aPermute ){
                   64654:     int k, mx = 0;
                   64655:     for(k=0; k<u.aj.n; k++) if( aPermute[k]>mx ) mx = aPermute[k];
                   64656:     assert( u.aj.p1>0 && u.aj.p1+mx<=p->nMem+1 );
                   64657:     assert( u.aj.p2>0 && u.aj.p2+mx<=p->nMem+1 );
                   64658:   }else{
                   64659:     assert( u.aj.p1>0 && u.aj.p1+u.aj.n<=p->nMem+1 );
                   64660:     assert( u.aj.p2>0 && u.aj.p2+u.aj.n<=p->nMem+1 );
                   64661:   }
                   64662: #endif /* SQLITE_DEBUG */
                   64663:   for(u.aj.i=0; u.aj.i<u.aj.n; u.aj.i++){
                   64664:     u.aj.idx = aPermute ? aPermute[u.aj.i] : u.aj.i;
                   64665:     assert( memIsValid(&aMem[u.aj.p1+u.aj.idx]) );
                   64666:     assert( memIsValid(&aMem[u.aj.p2+u.aj.idx]) );
                   64667:     REGISTER_TRACE(u.aj.p1+u.aj.idx, &aMem[u.aj.p1+u.aj.idx]);
                   64668:     REGISTER_TRACE(u.aj.p2+u.aj.idx, &aMem[u.aj.p2+u.aj.idx]);
                   64669:     assert( u.aj.i<u.aj.pKeyInfo->nField );
                   64670:     u.aj.pColl = u.aj.pKeyInfo->aColl[u.aj.i];
                   64671:     u.aj.bRev = u.aj.pKeyInfo->aSortOrder[u.aj.i];
                   64672:     iCompare = sqlite3MemCompare(&aMem[u.aj.p1+u.aj.idx], &aMem[u.aj.p2+u.aj.idx], u.aj.pColl);
                   64673:     if( iCompare ){
                   64674:       if( u.aj.bRev ) iCompare = -iCompare;
                   64675:       break;
                   64676:     }
                   64677:   }
                   64678:   aPermute = 0;
                   64679:   break;
                   64680: }
                   64681: 
                   64682: /* Opcode: Jump P1 P2 P3 * *
                   64683: **
                   64684: ** Jump to the instruction at address P1, P2, or P3 depending on whether
                   64685: ** in the most recent OP_Compare instruction the P1 vector was less than
                   64686: ** equal to, or greater than the P2 vector, respectively.
                   64687: */
                   64688: case OP_Jump: {             /* jump */
                   64689:   if( iCompare<0 ){
                   64690:     pc = pOp->p1 - 1;
                   64691:   }else if( iCompare==0 ){
                   64692:     pc = pOp->p2 - 1;
                   64693:   }else{
                   64694:     pc = pOp->p3 - 1;
                   64695:   }
                   64696:   break;
                   64697: }
                   64698: 
                   64699: /* Opcode: And P1 P2 P3 * *
                   64700: **
                   64701: ** Take the logical AND of the values in registers P1 and P2 and
                   64702: ** write the result into register P3.
                   64703: **
                   64704: ** If either P1 or P2 is 0 (false) then the result is 0 even if
                   64705: ** the other input is NULL.  A NULL and true or two NULLs give
                   64706: ** a NULL output.
                   64707: */
                   64708: /* Opcode: Or P1 P2 P3 * *
                   64709: **
                   64710: ** Take the logical OR of the values in register P1 and P2 and
                   64711: ** store the answer in register P3.
                   64712: **
                   64713: ** If either P1 or P2 is nonzero (true) then the result is 1 (true)
                   64714: ** even if the other input is NULL.  A NULL and false or two NULLs
                   64715: ** give a NULL output.
                   64716: */
                   64717: case OP_And:              /* same as TK_AND, in1, in2, out3 */
                   64718: case OP_Or: {             /* same as TK_OR, in1, in2, out3 */
                   64719: #if 0  /* local variables moved into u.ak */
                   64720:   int v1;    /* Left operand:  0==FALSE, 1==TRUE, 2==UNKNOWN or NULL */
                   64721:   int v2;    /* Right operand: 0==FALSE, 1==TRUE, 2==UNKNOWN or NULL */
                   64722: #endif /* local variables moved into u.ak */
                   64723: 
                   64724:   pIn1 = &aMem[pOp->p1];
                   64725:   if( pIn1->flags & MEM_Null ){
                   64726:     u.ak.v1 = 2;
                   64727:   }else{
                   64728:     u.ak.v1 = sqlite3VdbeIntValue(pIn1)!=0;
                   64729:   }
                   64730:   pIn2 = &aMem[pOp->p2];
                   64731:   if( pIn2->flags & MEM_Null ){
                   64732:     u.ak.v2 = 2;
                   64733:   }else{
                   64734:     u.ak.v2 = sqlite3VdbeIntValue(pIn2)!=0;
                   64735:   }
                   64736:   if( pOp->opcode==OP_And ){
                   64737:     static const unsigned char and_logic[] = { 0, 0, 0, 0, 1, 2, 0, 2, 2 };
                   64738:     u.ak.v1 = and_logic[u.ak.v1*3+u.ak.v2];
                   64739:   }else{
                   64740:     static const unsigned char or_logic[] = { 0, 1, 2, 1, 1, 1, 2, 1, 2 };
                   64741:     u.ak.v1 = or_logic[u.ak.v1*3+u.ak.v2];
                   64742:   }
                   64743:   pOut = &aMem[pOp->p3];
                   64744:   if( u.ak.v1==2 ){
                   64745:     MemSetTypeFlag(pOut, MEM_Null);
                   64746:   }else{
                   64747:     pOut->u.i = u.ak.v1;
                   64748:     MemSetTypeFlag(pOut, MEM_Int);
                   64749:   }
                   64750:   break;
                   64751: }
                   64752: 
                   64753: /* Opcode: Not P1 P2 * * *
                   64754: **
                   64755: ** Interpret the value in register P1 as a boolean value.  Store the
                   64756: ** boolean complement in register P2.  If the value in register P1 is 
                   64757: ** NULL, then a NULL is stored in P2.
                   64758: */
                   64759: case OP_Not: {                /* same as TK_NOT, in1, out2 */
                   64760:   pIn1 = &aMem[pOp->p1];
                   64761:   pOut = &aMem[pOp->p2];
                   64762:   if( pIn1->flags & MEM_Null ){
                   64763:     sqlite3VdbeMemSetNull(pOut);
                   64764:   }else{
                   64765:     sqlite3VdbeMemSetInt64(pOut, !sqlite3VdbeIntValue(pIn1));
                   64766:   }
                   64767:   break;
                   64768: }
                   64769: 
                   64770: /* Opcode: BitNot P1 P2 * * *
                   64771: **
                   64772: ** Interpret the content of register P1 as an integer.  Store the
                   64773: ** ones-complement of the P1 value into register P2.  If P1 holds
                   64774: ** a NULL then store a NULL in P2.
                   64775: */
                   64776: case OP_BitNot: {             /* same as TK_BITNOT, in1, out2 */
                   64777:   pIn1 = &aMem[pOp->p1];
                   64778:   pOut = &aMem[pOp->p2];
                   64779:   if( pIn1->flags & MEM_Null ){
                   64780:     sqlite3VdbeMemSetNull(pOut);
                   64781:   }else{
                   64782:     sqlite3VdbeMemSetInt64(pOut, ~sqlite3VdbeIntValue(pIn1));
                   64783:   }
                   64784:   break;
                   64785: }
                   64786: 
                   64787: /* Opcode: If P1 P2 P3 * *
                   64788: **
                   64789: ** Jump to P2 if the value in register P1 is true.  The value
                   64790: ** is considered true if it is numeric and non-zero.  If the value
                   64791: ** in P1 is NULL then take the jump if P3 is true.
                   64792: */
                   64793: /* Opcode: IfNot P1 P2 P3 * *
                   64794: **
                   64795: ** Jump to P2 if the value in register P1 is False.  The value
                   64796: ** is considered true if it has a numeric value of zero.  If the value
                   64797: ** in P1 is NULL then take the jump if P3 is true.
                   64798: */
                   64799: case OP_If:                 /* jump, in1 */
                   64800: case OP_IfNot: {            /* jump, in1 */
                   64801: #if 0  /* local variables moved into u.al */
                   64802:   int c;
                   64803: #endif /* local variables moved into u.al */
                   64804:   pIn1 = &aMem[pOp->p1];
                   64805:   if( pIn1->flags & MEM_Null ){
                   64806:     u.al.c = pOp->p3;
                   64807:   }else{
                   64808: #ifdef SQLITE_OMIT_FLOATING_POINT
                   64809:     u.al.c = sqlite3VdbeIntValue(pIn1)!=0;
                   64810: #else
                   64811:     u.al.c = sqlite3VdbeRealValue(pIn1)!=0.0;
                   64812: #endif
                   64813:     if( pOp->opcode==OP_IfNot ) u.al.c = !u.al.c;
                   64814:   }
                   64815:   if( u.al.c ){
                   64816:     pc = pOp->p2-1;
                   64817:   }
                   64818:   break;
                   64819: }
                   64820: 
                   64821: /* Opcode: IsNull P1 P2 * * *
                   64822: **
                   64823: ** Jump to P2 if the value in register P1 is NULL.
                   64824: */
                   64825: case OP_IsNull: {            /* same as TK_ISNULL, jump, in1 */
                   64826:   pIn1 = &aMem[pOp->p1];
                   64827:   if( (pIn1->flags & MEM_Null)!=0 ){
                   64828:     pc = pOp->p2 - 1;
                   64829:   }
                   64830:   break;
                   64831: }
                   64832: 
                   64833: /* Opcode: NotNull P1 P2 * * *
                   64834: **
                   64835: ** Jump to P2 if the value in register P1 is not NULL.  
                   64836: */
                   64837: case OP_NotNull: {            /* same as TK_NOTNULL, jump, in1 */
                   64838:   pIn1 = &aMem[pOp->p1];
                   64839:   if( (pIn1->flags & MEM_Null)==0 ){
                   64840:     pc = pOp->p2 - 1;
                   64841:   }
                   64842:   break;
                   64843: }
                   64844: 
                   64845: /* Opcode: Column P1 P2 P3 P4 P5
                   64846: **
                   64847: ** Interpret the data that cursor P1 points to as a structure built using
                   64848: ** the MakeRecord instruction.  (See the MakeRecord opcode for additional
                   64849: ** information about the format of the data.)  Extract the P2-th column
                   64850: ** from this record.  If there are less that (P2+1) 
                   64851: ** values in the record, extract a NULL.
                   64852: **
                   64853: ** The value extracted is stored in register P3.
                   64854: **
                   64855: ** If the column contains fewer than P2 fields, then extract a NULL.  Or,
                   64856: ** if the P4 argument is a P4_MEM use the value of the P4 argument as
                   64857: ** the result.
                   64858: **
                   64859: ** If the OPFLAG_CLEARCACHE bit is set on P5 and P1 is a pseudo-table cursor,
                   64860: ** then the cache of the cursor is reset prior to extracting the column.
                   64861: ** The first OP_Column against a pseudo-table after the value of the content
                   64862: ** register has changed should have this bit set.
                   64863: */
                   64864: case OP_Column: {
                   64865: #if 0  /* local variables moved into u.am */
                   64866:   u32 payloadSize;   /* Number of bytes in the record */
                   64867:   i64 payloadSize64; /* Number of bytes in the record */
                   64868:   int p1;            /* P1 value of the opcode */
                   64869:   int p2;            /* column number to retrieve */
                   64870:   VdbeCursor *pC;    /* The VDBE cursor */
                   64871:   char *zRec;        /* Pointer to complete record-data */
                   64872:   BtCursor *pCrsr;   /* The BTree cursor */
                   64873:   u32 *aType;        /* aType[i] holds the numeric type of the i-th column */
                   64874:   u32 *aOffset;      /* aOffset[i] is offset to start of data for i-th column */
                   64875:   int nField;        /* number of fields in the record */
                   64876:   int len;           /* The length of the serialized data for the column */
                   64877:   int i;             /* Loop counter */
                   64878:   char *zData;       /* Part of the record being decoded */
                   64879:   Mem *pDest;        /* Where to write the extracted value */
                   64880:   Mem sMem;          /* For storing the record being decoded */
                   64881:   u8 *zIdx;          /* Index into header */
                   64882:   u8 *zEndHdr;       /* Pointer to first byte after the header */
                   64883:   u32 offset;        /* Offset into the data */
                   64884:   u32 szField;       /* Number of bytes in the content of a field */
                   64885:   int szHdr;         /* Size of the header size field at start of record */
                   64886:   int avail;         /* Number of bytes of available data */
                   64887:   Mem *pReg;         /* PseudoTable input register */
                   64888: #endif /* local variables moved into u.am */
                   64889: 
                   64890: 
                   64891:   u.am.p1 = pOp->p1;
                   64892:   u.am.p2 = pOp->p2;
                   64893:   u.am.pC = 0;
                   64894:   memset(&u.am.sMem, 0, sizeof(u.am.sMem));
                   64895:   assert( u.am.p1<p->nCursor );
                   64896:   assert( pOp->p3>0 && pOp->p3<=p->nMem );
                   64897:   u.am.pDest = &aMem[pOp->p3];
                   64898:   memAboutToChange(p, u.am.pDest);
                   64899:   MemSetTypeFlag(u.am.pDest, MEM_Null);
                   64900:   u.am.zRec = 0;
                   64901: 
                   64902:   /* This block sets the variable u.am.payloadSize to be the total number of
                   64903:   ** bytes in the record.
                   64904:   **
                   64905:   ** u.am.zRec is set to be the complete text of the record if it is available.
                   64906:   ** The complete record text is always available for pseudo-tables
                   64907:   ** If the record is stored in a cursor, the complete record text
                   64908:   ** might be available in the  u.am.pC->aRow cache.  Or it might not be.
                   64909:   ** If the data is unavailable,  u.am.zRec is set to NULL.
                   64910:   **
                   64911:   ** We also compute the number of columns in the record.  For cursors,
                   64912:   ** the number of columns is stored in the VdbeCursor.nField element.
                   64913:   */
                   64914:   u.am.pC = p->apCsr[u.am.p1];
                   64915:   assert( u.am.pC!=0 );
                   64916: #ifndef SQLITE_OMIT_VIRTUALTABLE
                   64917:   assert( u.am.pC->pVtabCursor==0 );
                   64918: #endif
                   64919:   u.am.pCrsr = u.am.pC->pCursor;
                   64920:   if( u.am.pCrsr!=0 ){
                   64921:     /* The record is stored in a B-Tree */
                   64922:     rc = sqlite3VdbeCursorMoveto(u.am.pC);
                   64923:     if( rc ) goto abort_due_to_error;
                   64924:     if( u.am.pC->nullRow ){
                   64925:       u.am.payloadSize = 0;
                   64926:     }else if( u.am.pC->cacheStatus==p->cacheCtr ){
                   64927:       u.am.payloadSize = u.am.pC->payloadSize;
                   64928:       u.am.zRec = (char*)u.am.pC->aRow;
                   64929:     }else if( u.am.pC->isIndex ){
                   64930:       assert( sqlite3BtreeCursorIsValid(u.am.pCrsr) );
                   64931:       rc = sqlite3BtreeKeySize(u.am.pCrsr, &u.am.payloadSize64);
                   64932:       assert( rc==SQLITE_OK );   /* True because of CursorMoveto() call above */
                   64933:       /* sqlite3BtreeParseCellPtr() uses getVarint32() to extract the
                   64934:       ** payload size, so it is impossible for u.am.payloadSize64 to be
                   64935:       ** larger than 32 bits. */
                   64936:       assert( (u.am.payloadSize64 & SQLITE_MAX_U32)==(u64)u.am.payloadSize64 );
                   64937:       u.am.payloadSize = (u32)u.am.payloadSize64;
                   64938:     }else{
                   64939:       assert( sqlite3BtreeCursorIsValid(u.am.pCrsr) );
                   64940:       rc = sqlite3BtreeDataSize(u.am.pCrsr, &u.am.payloadSize);
                   64941:       assert( rc==SQLITE_OK );   /* DataSize() cannot fail */
                   64942:     }
                   64943:   }else if( u.am.pC->pseudoTableReg>0 ){
                   64944:     u.am.pReg = &aMem[u.am.pC->pseudoTableReg];
                   64945:     assert( u.am.pReg->flags & MEM_Blob );
                   64946:     assert( memIsValid(u.am.pReg) );
                   64947:     u.am.payloadSize = u.am.pReg->n;
                   64948:     u.am.zRec = u.am.pReg->z;
                   64949:     u.am.pC->cacheStatus = (pOp->p5&OPFLAG_CLEARCACHE) ? CACHE_STALE : p->cacheCtr;
                   64950:     assert( u.am.payloadSize==0 || u.am.zRec!=0 );
                   64951:   }else{
                   64952:     /* Consider the row to be NULL */
                   64953:     u.am.payloadSize = 0;
                   64954:   }
                   64955: 
                   64956:   /* If u.am.payloadSize is 0, then just store a NULL */
                   64957:   if( u.am.payloadSize==0 ){
                   64958:     assert( u.am.pDest->flags&MEM_Null );
                   64959:     goto op_column_out;
                   64960:   }
                   64961:   assert( db->aLimit[SQLITE_LIMIT_LENGTH]>=0 );
                   64962:   if( u.am.payloadSize > (u32)db->aLimit[SQLITE_LIMIT_LENGTH] ){
                   64963:     goto too_big;
                   64964:   }
                   64965: 
                   64966:   u.am.nField = u.am.pC->nField;
                   64967:   assert( u.am.p2<u.am.nField );
                   64968: 
                   64969:   /* Read and parse the table header.  Store the results of the parse
                   64970:   ** into the record header cache fields of the cursor.
                   64971:   */
                   64972:   u.am.aType = u.am.pC->aType;
                   64973:   if( u.am.pC->cacheStatus==p->cacheCtr ){
                   64974:     u.am.aOffset = u.am.pC->aOffset;
                   64975:   }else{
                   64976:     assert(u.am.aType);
                   64977:     u.am.avail = 0;
                   64978:     u.am.pC->aOffset = u.am.aOffset = &u.am.aType[u.am.nField];
                   64979:     u.am.pC->payloadSize = u.am.payloadSize;
                   64980:     u.am.pC->cacheStatus = p->cacheCtr;
                   64981: 
                   64982:     /* Figure out how many bytes are in the header */
                   64983:     if( u.am.zRec ){
                   64984:       u.am.zData = u.am.zRec;
                   64985:     }else{
                   64986:       if( u.am.pC->isIndex ){
                   64987:         u.am.zData = (char*)sqlite3BtreeKeyFetch(u.am.pCrsr, &u.am.avail);
                   64988:       }else{
                   64989:         u.am.zData = (char*)sqlite3BtreeDataFetch(u.am.pCrsr, &u.am.avail);
                   64990:       }
                   64991:       /* If KeyFetch()/DataFetch() managed to get the entire payload,
                   64992:       ** save the payload in the u.am.pC->aRow cache.  That will save us from
                   64993:       ** having to make additional calls to fetch the content portion of
                   64994:       ** the record.
                   64995:       */
                   64996:       assert( u.am.avail>=0 );
                   64997:       if( u.am.payloadSize <= (u32)u.am.avail ){
                   64998:         u.am.zRec = u.am.zData;
                   64999:         u.am.pC->aRow = (u8*)u.am.zData;
                   65000:       }else{
                   65001:         u.am.pC->aRow = 0;
                   65002:       }
                   65003:     }
                   65004:     /* The following assert is true in all cases accept when
                   65005:     ** the database file has been corrupted externally.
                   65006:     **    assert( u.am.zRec!=0 || u.am.avail>=u.am.payloadSize || u.am.avail>=9 ); */
                   65007:     u.am.szHdr = getVarint32((u8*)u.am.zData, u.am.offset);
                   65008: 
                   65009:     /* Make sure a corrupt database has not given us an oversize header.
                   65010:     ** Do this now to avoid an oversize memory allocation.
                   65011:     **
                   65012:     ** Type entries can be between 1 and 5 bytes each.  But 4 and 5 byte
                   65013:     ** types use so much data space that there can only be 4096 and 32 of
                   65014:     ** them, respectively.  So the maximum header length results from a
                   65015:     ** 3-byte type for each of the maximum of 32768 columns plus three
                   65016:     ** extra bytes for the header length itself.  32768*3 + 3 = 98307.
                   65017:     */
                   65018:     if( u.am.offset > 98307 ){
                   65019:       rc = SQLITE_CORRUPT_BKPT;
                   65020:       goto op_column_out;
                   65021:     }
                   65022: 
                   65023:     /* Compute in u.am.len the number of bytes of data we need to read in order
                   65024:     ** to get u.am.nField type values.  u.am.offset is an upper bound on this.  But
                   65025:     ** u.am.nField might be significantly less than the true number of columns
                   65026:     ** in the table, and in that case, 5*u.am.nField+3 might be smaller than u.am.offset.
                   65027:     ** We want to minimize u.am.len in order to limit the size of the memory
                   65028:     ** allocation, especially if a corrupt database file has caused u.am.offset
                   65029:     ** to be oversized. Offset is limited to 98307 above.  But 98307 might
                   65030:     ** still exceed Robson memory allocation limits on some configurations.
                   65031:     ** On systems that cannot tolerate large memory allocations, u.am.nField*5+3
                   65032:     ** will likely be much smaller since u.am.nField will likely be less than
                   65033:     ** 20 or so.  This insures that Robson memory allocation limits are
                   65034:     ** not exceeded even for corrupt database files.
                   65035:     */
                   65036:     u.am.len = u.am.nField*5 + 3;
                   65037:     if( u.am.len > (int)u.am.offset ) u.am.len = (int)u.am.offset;
                   65038: 
                   65039:     /* The KeyFetch() or DataFetch() above are fast and will get the entire
                   65040:     ** record header in most cases.  But they will fail to get the complete
                   65041:     ** record header if the record header does not fit on a single page
                   65042:     ** in the B-Tree.  When that happens, use sqlite3VdbeMemFromBtree() to
                   65043:     ** acquire the complete header text.
                   65044:     */
                   65045:     if( !u.am.zRec && u.am.avail<u.am.len ){
                   65046:       u.am.sMem.flags = 0;
                   65047:       u.am.sMem.db = 0;
                   65048:       rc = sqlite3VdbeMemFromBtree(u.am.pCrsr, 0, u.am.len, u.am.pC->isIndex, &u.am.sMem);
                   65049:       if( rc!=SQLITE_OK ){
                   65050:         goto op_column_out;
                   65051:       }
                   65052:       u.am.zData = u.am.sMem.z;
                   65053:     }
                   65054:     u.am.zEndHdr = (u8 *)&u.am.zData[u.am.len];
                   65055:     u.am.zIdx = (u8 *)&u.am.zData[u.am.szHdr];
                   65056: 
                   65057:     /* Scan the header and use it to fill in the u.am.aType[] and u.am.aOffset[]
                   65058:     ** arrays.  u.am.aType[u.am.i] will contain the type integer for the u.am.i-th
                   65059:     ** column and u.am.aOffset[u.am.i] will contain the u.am.offset from the beginning
                   65060:     ** of the record to the start of the data for the u.am.i-th column
                   65061:     */
                   65062:     for(u.am.i=0; u.am.i<u.am.nField; u.am.i++){
                   65063:       if( u.am.zIdx<u.am.zEndHdr ){
                   65064:         u.am.aOffset[u.am.i] = u.am.offset;
                   65065:         u.am.zIdx += getVarint32(u.am.zIdx, u.am.aType[u.am.i]);
                   65066:         u.am.szField = sqlite3VdbeSerialTypeLen(u.am.aType[u.am.i]);
                   65067:         u.am.offset += u.am.szField;
                   65068:         if( u.am.offset<u.am.szField ){  /* True if u.am.offset overflows */
                   65069:           u.am.zIdx = &u.am.zEndHdr[1];  /* Forces SQLITE_CORRUPT return below */
                   65070:           break;
                   65071:         }
                   65072:       }else{
                   65073:         /* If u.am.i is less that u.am.nField, then there are less fields in this
                   65074:         ** record than SetNumColumns indicated there are columns in the
                   65075:         ** table. Set the u.am.offset for any extra columns not present in
                   65076:         ** the record to 0. This tells code below to store a NULL
                   65077:         ** instead of deserializing a value from the record.
                   65078:         */
                   65079:         u.am.aOffset[u.am.i] = 0;
                   65080:       }
                   65081:     }
                   65082:     sqlite3VdbeMemRelease(&u.am.sMem);
                   65083:     u.am.sMem.flags = MEM_Null;
                   65084: 
                   65085:     /* If we have read more header data than was contained in the header,
                   65086:     ** or if the end of the last field appears to be past the end of the
                   65087:     ** record, or if the end of the last field appears to be before the end
                   65088:     ** of the record (when all fields present), then we must be dealing
                   65089:     ** with a corrupt database.
                   65090:     */
                   65091:     if( (u.am.zIdx > u.am.zEndHdr) || (u.am.offset > u.am.payloadSize)
                   65092:          || (u.am.zIdx==u.am.zEndHdr && u.am.offset!=u.am.payloadSize) ){
                   65093:       rc = SQLITE_CORRUPT_BKPT;
                   65094:       goto op_column_out;
                   65095:     }
                   65096:   }
                   65097: 
                   65098:   /* Get the column information. If u.am.aOffset[u.am.p2] is non-zero, then
                   65099:   ** deserialize the value from the record. If u.am.aOffset[u.am.p2] is zero,
                   65100:   ** then there are not enough fields in the record to satisfy the
                   65101:   ** request.  In this case, set the value NULL or to P4 if P4 is
                   65102:   ** a pointer to a Mem object.
                   65103:   */
                   65104:   if( u.am.aOffset[u.am.p2] ){
                   65105:     assert( rc==SQLITE_OK );
                   65106:     if( u.am.zRec ){
                   65107:       sqlite3VdbeMemReleaseExternal(u.am.pDest);
                   65108:       sqlite3VdbeSerialGet((u8 *)&u.am.zRec[u.am.aOffset[u.am.p2]], u.am.aType[u.am.p2], u.am.pDest);
                   65109:     }else{
                   65110:       u.am.len = sqlite3VdbeSerialTypeLen(u.am.aType[u.am.p2]);
                   65111:       sqlite3VdbeMemMove(&u.am.sMem, u.am.pDest);
                   65112:       rc = sqlite3VdbeMemFromBtree(u.am.pCrsr, u.am.aOffset[u.am.p2], u.am.len, u.am.pC->isIndex, &u.am.sMem);
                   65113:       if( rc!=SQLITE_OK ){
                   65114:         goto op_column_out;
                   65115:       }
                   65116:       u.am.zData = u.am.sMem.z;
                   65117:       sqlite3VdbeSerialGet((u8*)u.am.zData, u.am.aType[u.am.p2], u.am.pDest);
                   65118:     }
                   65119:     u.am.pDest->enc = encoding;
                   65120:   }else{
                   65121:     if( pOp->p4type==P4_MEM ){
                   65122:       sqlite3VdbeMemShallowCopy(u.am.pDest, pOp->p4.pMem, MEM_Static);
                   65123:     }else{
                   65124:       assert( u.am.pDest->flags&MEM_Null );
                   65125:     }
                   65126:   }
                   65127: 
                   65128:   /* If we dynamically allocated space to hold the data (in the
                   65129:   ** sqlite3VdbeMemFromBtree() call above) then transfer control of that
                   65130:   ** dynamically allocated space over to the u.am.pDest structure.
                   65131:   ** This prevents a memory copy.
                   65132:   */
                   65133:   if( u.am.sMem.zMalloc ){
                   65134:     assert( u.am.sMem.z==u.am.sMem.zMalloc );
                   65135:     assert( !(u.am.pDest->flags & MEM_Dyn) );
                   65136:     assert( !(u.am.pDest->flags & (MEM_Blob|MEM_Str)) || u.am.pDest->z==u.am.sMem.z );
                   65137:     u.am.pDest->flags &= ~(MEM_Ephem|MEM_Static);
                   65138:     u.am.pDest->flags |= MEM_Term;
                   65139:     u.am.pDest->z = u.am.sMem.z;
                   65140:     u.am.pDest->zMalloc = u.am.sMem.zMalloc;
                   65141:   }
                   65142: 
                   65143:   rc = sqlite3VdbeMemMakeWriteable(u.am.pDest);
                   65144: 
                   65145: op_column_out:
                   65146:   UPDATE_MAX_BLOBSIZE(u.am.pDest);
                   65147:   REGISTER_TRACE(pOp->p3, u.am.pDest);
                   65148:   break;
                   65149: }
                   65150: 
                   65151: /* Opcode: Affinity P1 P2 * P4 *
                   65152: **
                   65153: ** Apply affinities to a range of P2 registers starting with P1.
                   65154: **
                   65155: ** P4 is a string that is P2 characters long. The nth character of the
                   65156: ** string indicates the column affinity that should be used for the nth
                   65157: ** memory cell in the range.
                   65158: */
                   65159: case OP_Affinity: {
                   65160: #if 0  /* local variables moved into u.an */
                   65161:   const char *zAffinity;   /* The affinity to be applied */
                   65162:   char cAff;               /* A single character of affinity */
                   65163: #endif /* local variables moved into u.an */
                   65164: 
                   65165:   u.an.zAffinity = pOp->p4.z;
                   65166:   assert( u.an.zAffinity!=0 );
                   65167:   assert( u.an.zAffinity[pOp->p2]==0 );
                   65168:   pIn1 = &aMem[pOp->p1];
                   65169:   while( (u.an.cAff = *(u.an.zAffinity++))!=0 ){
                   65170:     assert( pIn1 <= &p->aMem[p->nMem] );
                   65171:     assert( memIsValid(pIn1) );
                   65172:     ExpandBlob(pIn1);
                   65173:     applyAffinity(pIn1, u.an.cAff, encoding);
                   65174:     pIn1++;
                   65175:   }
                   65176:   break;
                   65177: }
                   65178: 
                   65179: /* Opcode: MakeRecord P1 P2 P3 P4 *
                   65180: **
                   65181: ** Convert P2 registers beginning with P1 into the [record format]
                   65182: ** use as a data record in a database table or as a key
                   65183: ** in an index.  The OP_Column opcode can decode the record later.
                   65184: **
                   65185: ** P4 may be a string that is P2 characters long.  The nth character of the
                   65186: ** string indicates the column affinity that should be used for the nth
                   65187: ** field of the index key.
                   65188: **
                   65189: ** The mapping from character to affinity is given by the SQLITE_AFF_
                   65190: ** macros defined in sqliteInt.h.
                   65191: **
                   65192: ** If P4 is NULL then all index fields have the affinity NONE.
                   65193: */
                   65194: case OP_MakeRecord: {
                   65195: #if 0  /* local variables moved into u.ao */
                   65196:   u8 *zNewRecord;        /* A buffer to hold the data for the new record */
                   65197:   Mem *pRec;             /* The new record */
                   65198:   u64 nData;             /* Number of bytes of data space */
                   65199:   int nHdr;              /* Number of bytes of header space */
                   65200:   i64 nByte;             /* Data space required for this record */
                   65201:   int nZero;             /* Number of zero bytes at the end of the record */
                   65202:   int nVarint;           /* Number of bytes in a varint */
                   65203:   u32 serial_type;       /* Type field */
                   65204:   Mem *pData0;           /* First field to be combined into the record */
                   65205:   Mem *pLast;            /* Last field of the record */
                   65206:   int nField;            /* Number of fields in the record */
                   65207:   char *zAffinity;       /* The affinity string for the record */
                   65208:   int file_format;       /* File format to use for encoding */
                   65209:   int i;                 /* Space used in zNewRecord[] */
                   65210:   int len;               /* Length of a field */
                   65211: #endif /* local variables moved into u.ao */
                   65212: 
                   65213:   /* Assuming the record contains N fields, the record format looks
                   65214:   ** like this:
                   65215:   **
                   65216:   ** ------------------------------------------------------------------------
                   65217:   ** | hdr-size | type 0 | type 1 | ... | type N-1 | data0 | ... | data N-1 |
                   65218:   ** ------------------------------------------------------------------------
                   65219:   **
                   65220:   ** Data(0) is taken from register P1.  Data(1) comes from register P1+1
                   65221:   ** and so froth.
                   65222:   **
                   65223:   ** Each type field is a varint representing the serial type of the
                   65224:   ** corresponding data element (see sqlite3VdbeSerialType()). The
                   65225:   ** hdr-size field is also a varint which is the offset from the beginning
                   65226:   ** of the record to data0.
                   65227:   */
                   65228:   u.ao.nData = 0;         /* Number of bytes of data space */
                   65229:   u.ao.nHdr = 0;          /* Number of bytes of header space */
                   65230:   u.ao.nZero = 0;         /* Number of zero bytes at the end of the record */
                   65231:   u.ao.nField = pOp->p1;
                   65232:   u.ao.zAffinity = pOp->p4.z;
                   65233:   assert( u.ao.nField>0 && pOp->p2>0 && pOp->p2+u.ao.nField<=p->nMem+1 );
                   65234:   u.ao.pData0 = &aMem[u.ao.nField];
                   65235:   u.ao.nField = pOp->p2;
                   65236:   u.ao.pLast = &u.ao.pData0[u.ao.nField-1];
                   65237:   u.ao.file_format = p->minWriteFileFormat;
                   65238: 
                   65239:   /* Identify the output register */
                   65240:   assert( pOp->p3<pOp->p1 || pOp->p3>=pOp->p1+pOp->p2 );
                   65241:   pOut = &aMem[pOp->p3];
                   65242:   memAboutToChange(p, pOut);
                   65243: 
                   65244:   /* Loop through the elements that will make up the record to figure
                   65245:   ** out how much space is required for the new record.
                   65246:   */
                   65247:   for(u.ao.pRec=u.ao.pData0; u.ao.pRec<=u.ao.pLast; u.ao.pRec++){
                   65248:     assert( memIsValid(u.ao.pRec) );
                   65249:     if( u.ao.zAffinity ){
                   65250:       applyAffinity(u.ao.pRec, u.ao.zAffinity[u.ao.pRec-u.ao.pData0], encoding);
                   65251:     }
                   65252:     if( u.ao.pRec->flags&MEM_Zero && u.ao.pRec->n>0 ){
                   65253:       sqlite3VdbeMemExpandBlob(u.ao.pRec);
                   65254:     }
                   65255:     u.ao.serial_type = sqlite3VdbeSerialType(u.ao.pRec, u.ao.file_format);
                   65256:     u.ao.len = sqlite3VdbeSerialTypeLen(u.ao.serial_type);
                   65257:     u.ao.nData += u.ao.len;
                   65258:     u.ao.nHdr += sqlite3VarintLen(u.ao.serial_type);
                   65259:     if( u.ao.pRec->flags & MEM_Zero ){
                   65260:       /* Only pure zero-filled BLOBs can be input to this Opcode.
                   65261:       ** We do not allow blobs with a prefix and a zero-filled tail. */
                   65262:       u.ao.nZero += u.ao.pRec->u.nZero;
                   65263:     }else if( u.ao.len ){
                   65264:       u.ao.nZero = 0;
                   65265:     }
                   65266:   }
                   65267: 
                   65268:   /* Add the initial header varint and total the size */
                   65269:   u.ao.nHdr += u.ao.nVarint = sqlite3VarintLen(u.ao.nHdr);
                   65270:   if( u.ao.nVarint<sqlite3VarintLen(u.ao.nHdr) ){
                   65271:     u.ao.nHdr++;
                   65272:   }
                   65273:   u.ao.nByte = u.ao.nHdr+u.ao.nData-u.ao.nZero;
                   65274:   if( u.ao.nByte>db->aLimit[SQLITE_LIMIT_LENGTH] ){
                   65275:     goto too_big;
                   65276:   }
                   65277: 
                   65278:   /* Make sure the output register has a buffer large enough to store
                   65279:   ** the new record. The output register (pOp->p3) is not allowed to
                   65280:   ** be one of the input registers (because the following call to
                   65281:   ** sqlite3VdbeMemGrow() could clobber the value before it is used).
                   65282:   */
                   65283:   if( sqlite3VdbeMemGrow(pOut, (int)u.ao.nByte, 0) ){
                   65284:     goto no_mem;
                   65285:   }
                   65286:   u.ao.zNewRecord = (u8 *)pOut->z;
                   65287: 
                   65288:   /* Write the record */
                   65289:   u.ao.i = putVarint32(u.ao.zNewRecord, u.ao.nHdr);
                   65290:   for(u.ao.pRec=u.ao.pData0; u.ao.pRec<=u.ao.pLast; u.ao.pRec++){
                   65291:     u.ao.serial_type = sqlite3VdbeSerialType(u.ao.pRec, u.ao.file_format);
                   65292:     u.ao.i += putVarint32(&u.ao.zNewRecord[u.ao.i], u.ao.serial_type);      /* serial type */
                   65293:   }
                   65294:   for(u.ao.pRec=u.ao.pData0; u.ao.pRec<=u.ao.pLast; u.ao.pRec++){  /* serial data */
                   65295:     u.ao.i += sqlite3VdbeSerialPut(&u.ao.zNewRecord[u.ao.i], (int)(u.ao.nByte-u.ao.i), u.ao.pRec,u.ao.file_format);
                   65296:   }
                   65297:   assert( u.ao.i==u.ao.nByte );
                   65298: 
                   65299:   assert( pOp->p3>0 && pOp->p3<=p->nMem );
                   65300:   pOut->n = (int)u.ao.nByte;
                   65301:   pOut->flags = MEM_Blob | MEM_Dyn;
                   65302:   pOut->xDel = 0;
                   65303:   if( u.ao.nZero ){
                   65304:     pOut->u.nZero = u.ao.nZero;
                   65305:     pOut->flags |= MEM_Zero;
                   65306:   }
                   65307:   pOut->enc = SQLITE_UTF8;  /* In case the blob is ever converted to text */
                   65308:   REGISTER_TRACE(pOp->p3, pOut);
                   65309:   UPDATE_MAX_BLOBSIZE(pOut);
                   65310:   break;
                   65311: }
                   65312: 
                   65313: /* Opcode: Count P1 P2 * * *
                   65314: **
                   65315: ** Store the number of entries (an integer value) in the table or index 
                   65316: ** opened by cursor P1 in register P2
                   65317: */
                   65318: #ifndef SQLITE_OMIT_BTREECOUNT
                   65319: case OP_Count: {         /* out2-prerelease */
                   65320: #if 0  /* local variables moved into u.ap */
                   65321:   i64 nEntry;
                   65322:   BtCursor *pCrsr;
                   65323: #endif /* local variables moved into u.ap */
                   65324: 
                   65325:   u.ap.pCrsr = p->apCsr[pOp->p1]->pCursor;
                   65326:   if( u.ap.pCrsr ){
                   65327:     rc = sqlite3BtreeCount(u.ap.pCrsr, &u.ap.nEntry);
                   65328:   }else{
                   65329:     u.ap.nEntry = 0;
                   65330:   }
                   65331:   pOut->u.i = u.ap.nEntry;
                   65332:   break;
                   65333: }
                   65334: #endif
                   65335: 
                   65336: /* Opcode: Savepoint P1 * * P4 *
                   65337: **
                   65338: ** Open, release or rollback the savepoint named by parameter P4, depending
                   65339: ** on the value of P1. To open a new savepoint, P1==0. To release (commit) an
                   65340: ** existing savepoint, P1==1, or to rollback an existing savepoint P1==2.
                   65341: */
                   65342: case OP_Savepoint: {
                   65343: #if 0  /* local variables moved into u.aq */
                   65344:   int p1;                         /* Value of P1 operand */
                   65345:   char *zName;                    /* Name of savepoint */
                   65346:   int nName;
                   65347:   Savepoint *pNew;
                   65348:   Savepoint *pSavepoint;
                   65349:   Savepoint *pTmp;
                   65350:   int iSavepoint;
                   65351:   int ii;
                   65352: #endif /* local variables moved into u.aq */
                   65353: 
                   65354:   u.aq.p1 = pOp->p1;
                   65355:   u.aq.zName = pOp->p4.z;
                   65356: 
                   65357:   /* Assert that the u.aq.p1 parameter is valid. Also that if there is no open
                   65358:   ** transaction, then there cannot be any savepoints.
                   65359:   */
                   65360:   assert( db->pSavepoint==0 || db->autoCommit==0 );
                   65361:   assert( u.aq.p1==SAVEPOINT_BEGIN||u.aq.p1==SAVEPOINT_RELEASE||u.aq.p1==SAVEPOINT_ROLLBACK );
                   65362:   assert( db->pSavepoint || db->isTransactionSavepoint==0 );
                   65363:   assert( checkSavepointCount(db) );
                   65364: 
                   65365:   if( u.aq.p1==SAVEPOINT_BEGIN ){
                   65366:     if( db->writeVdbeCnt>0 ){
                   65367:       /* A new savepoint cannot be created if there are active write
                   65368:       ** statements (i.e. open read/write incremental blob handles).
                   65369:       */
                   65370:       sqlite3SetString(&p->zErrMsg, db, "cannot open savepoint - "
                   65371:         "SQL statements in progress");
                   65372:       rc = SQLITE_BUSY;
                   65373:     }else{
                   65374:       u.aq.nName = sqlite3Strlen30(u.aq.zName);
                   65375: 
                   65376: #ifndef SQLITE_OMIT_VIRTUALTABLE
                   65377:       /* This call is Ok even if this savepoint is actually a transaction
                   65378:       ** savepoint (and therefore should not prompt xSavepoint()) callbacks.
                   65379:       ** If this is a transaction savepoint being opened, it is guaranteed
                   65380:       ** that the db->aVTrans[] array is empty.  */
                   65381:       assert( db->autoCommit==0 || db->nVTrans==0 );
                   65382:       rc = sqlite3VtabSavepoint(db, SAVEPOINT_BEGIN,
                   65383:                                 db->nStatement+db->nSavepoint);
                   65384:       if( rc!=SQLITE_OK ) goto abort_due_to_error;
                   65385: #endif
                   65386: 
                   65387:       /* Create a new savepoint structure. */
                   65388:       u.aq.pNew = sqlite3DbMallocRaw(db, sizeof(Savepoint)+u.aq.nName+1);
                   65389:       if( u.aq.pNew ){
                   65390:         u.aq.pNew->zName = (char *)&u.aq.pNew[1];
                   65391:         memcpy(u.aq.pNew->zName, u.aq.zName, u.aq.nName+1);
                   65392: 
                   65393:         /* If there is no open transaction, then mark this as a special
                   65394:         ** "transaction savepoint". */
                   65395:         if( db->autoCommit ){
                   65396:           db->autoCommit = 0;
                   65397:           db->isTransactionSavepoint = 1;
                   65398:         }else{
                   65399:           db->nSavepoint++;
                   65400:         }
                   65401: 
                   65402:         /* Link the new savepoint into the database handle's list. */
                   65403:         u.aq.pNew->pNext = db->pSavepoint;
                   65404:         db->pSavepoint = u.aq.pNew;
                   65405:         u.aq.pNew->nDeferredCons = db->nDeferredCons;
                   65406:       }
                   65407:     }
                   65408:   }else{
                   65409:     u.aq.iSavepoint = 0;
                   65410: 
                   65411:     /* Find the named savepoint. If there is no such savepoint, then an
                   65412:     ** an error is returned to the user.  */
                   65413:     for(
                   65414:       u.aq.pSavepoint = db->pSavepoint;
                   65415:       u.aq.pSavepoint && sqlite3StrICmp(u.aq.pSavepoint->zName, u.aq.zName);
                   65416:       u.aq.pSavepoint = u.aq.pSavepoint->pNext
                   65417:     ){
                   65418:       u.aq.iSavepoint++;
                   65419:     }
                   65420:     if( !u.aq.pSavepoint ){
                   65421:       sqlite3SetString(&p->zErrMsg, db, "no such savepoint: %s", u.aq.zName);
                   65422:       rc = SQLITE_ERROR;
                   65423:     }else if(
                   65424:         db->writeVdbeCnt>0 || (u.aq.p1==SAVEPOINT_ROLLBACK && db->activeVdbeCnt>1)
                   65425:     ){
                   65426:       /* It is not possible to release (commit) a savepoint if there are
                   65427:       ** active write statements. It is not possible to rollback a savepoint
                   65428:       ** if there are any active statements at all.
                   65429:       */
                   65430:       sqlite3SetString(&p->zErrMsg, db,
                   65431:         "cannot %s savepoint - SQL statements in progress",
                   65432:         (u.aq.p1==SAVEPOINT_ROLLBACK ? "rollback": "release")
                   65433:       );
                   65434:       rc = SQLITE_BUSY;
                   65435:     }else{
                   65436: 
                   65437:       /* Determine whether or not this is a transaction savepoint. If so,
                   65438:       ** and this is a RELEASE command, then the current transaction
                   65439:       ** is committed.
                   65440:       */
                   65441:       int isTransaction = u.aq.pSavepoint->pNext==0 && db->isTransactionSavepoint;
                   65442:       if( isTransaction && u.aq.p1==SAVEPOINT_RELEASE ){
                   65443:         if( (rc = sqlite3VdbeCheckFk(p, 1))!=SQLITE_OK ){
                   65444:           goto vdbe_return;
                   65445:         }
                   65446:         db->autoCommit = 1;
                   65447:         if( sqlite3VdbeHalt(p)==SQLITE_BUSY ){
                   65448:           p->pc = pc;
                   65449:           db->autoCommit = 0;
                   65450:           p->rc = rc = SQLITE_BUSY;
                   65451:           goto vdbe_return;
                   65452:         }
                   65453:         db->isTransactionSavepoint = 0;
                   65454:         rc = p->rc;
                   65455:       }else{
                   65456:         u.aq.iSavepoint = db->nSavepoint - u.aq.iSavepoint - 1;
                   65457:         for(u.aq.ii=0; u.aq.ii<db->nDb; u.aq.ii++){
                   65458:           rc = sqlite3BtreeSavepoint(db->aDb[u.aq.ii].pBt, u.aq.p1, u.aq.iSavepoint);
                   65459:           if( rc!=SQLITE_OK ){
                   65460:             goto abort_due_to_error;
                   65461:           }
                   65462:         }
                   65463:         if( u.aq.p1==SAVEPOINT_ROLLBACK && (db->flags&SQLITE_InternChanges)!=0 ){
                   65464:           sqlite3ExpirePreparedStatements(db);
                   65465:           sqlite3ResetInternalSchema(db, -1);
                   65466:           db->flags = (db->flags | SQLITE_InternChanges);
                   65467:         }
                   65468:       }
                   65469: 
                   65470:       /* Regardless of whether this is a RELEASE or ROLLBACK, destroy all
                   65471:       ** savepoints nested inside of the savepoint being operated on. */
                   65472:       while( db->pSavepoint!=u.aq.pSavepoint ){
                   65473:         u.aq.pTmp = db->pSavepoint;
                   65474:         db->pSavepoint = u.aq.pTmp->pNext;
                   65475:         sqlite3DbFree(db, u.aq.pTmp);
                   65476:         db->nSavepoint--;
                   65477:       }
                   65478: 
                   65479:       /* If it is a RELEASE, then destroy the savepoint being operated on
                   65480:       ** too. If it is a ROLLBACK TO, then set the number of deferred
                   65481:       ** constraint violations present in the database to the value stored
                   65482:       ** when the savepoint was created.  */
                   65483:       if( u.aq.p1==SAVEPOINT_RELEASE ){
                   65484:         assert( u.aq.pSavepoint==db->pSavepoint );
                   65485:         db->pSavepoint = u.aq.pSavepoint->pNext;
                   65486:         sqlite3DbFree(db, u.aq.pSavepoint);
                   65487:         if( !isTransaction ){
                   65488:           db->nSavepoint--;
                   65489:         }
                   65490:       }else{
                   65491:         db->nDeferredCons = u.aq.pSavepoint->nDeferredCons;
                   65492:       }
                   65493: 
                   65494:       if( !isTransaction ){
                   65495:         rc = sqlite3VtabSavepoint(db, u.aq.p1, u.aq.iSavepoint);
                   65496:         if( rc!=SQLITE_OK ) goto abort_due_to_error;
                   65497:       }
                   65498:     }
                   65499:   }
                   65500: 
                   65501:   break;
                   65502: }
                   65503: 
                   65504: /* Opcode: AutoCommit P1 P2 * * *
                   65505: **
                   65506: ** Set the database auto-commit flag to P1 (1 or 0). If P2 is true, roll
                   65507: ** back any currently active btree transactions. If there are any active
                   65508: ** VMs (apart from this one), then a ROLLBACK fails.  A COMMIT fails if
                   65509: ** there are active writing VMs or active VMs that use shared cache.
                   65510: **
                   65511: ** This instruction causes the VM to halt.
                   65512: */
                   65513: case OP_AutoCommit: {
                   65514: #if 0  /* local variables moved into u.ar */
                   65515:   int desiredAutoCommit;
                   65516:   int iRollback;
                   65517:   int turnOnAC;
                   65518: #endif /* local variables moved into u.ar */
                   65519: 
                   65520:   u.ar.desiredAutoCommit = pOp->p1;
                   65521:   u.ar.iRollback = pOp->p2;
                   65522:   u.ar.turnOnAC = u.ar.desiredAutoCommit && !db->autoCommit;
                   65523:   assert( u.ar.desiredAutoCommit==1 || u.ar.desiredAutoCommit==0 );
                   65524:   assert( u.ar.desiredAutoCommit==1 || u.ar.iRollback==0 );
                   65525:   assert( db->activeVdbeCnt>0 );  /* At least this one VM is active */
                   65526: 
                   65527:   if( u.ar.turnOnAC && u.ar.iRollback && db->activeVdbeCnt>1 ){
                   65528:     /* If this instruction implements a ROLLBACK and other VMs are
                   65529:     ** still running, and a transaction is active, return an error indicating
                   65530:     ** that the other VMs must complete first.
                   65531:     */
                   65532:     sqlite3SetString(&p->zErrMsg, db, "cannot rollback transaction - "
                   65533:         "SQL statements in progress");
                   65534:     rc = SQLITE_BUSY;
                   65535:   }else if( u.ar.turnOnAC && !u.ar.iRollback && db->writeVdbeCnt>0 ){
                   65536:     /* If this instruction implements a COMMIT and other VMs are writing
                   65537:     ** return an error indicating that the other VMs must complete first.
                   65538:     */
                   65539:     sqlite3SetString(&p->zErrMsg, db, "cannot commit transaction - "
                   65540:         "SQL statements in progress");
                   65541:     rc = SQLITE_BUSY;
                   65542:   }else if( u.ar.desiredAutoCommit!=db->autoCommit ){
                   65543:     if( u.ar.iRollback ){
                   65544:       assert( u.ar.desiredAutoCommit==1 );
                   65545:       sqlite3RollbackAll(db);
                   65546:       db->autoCommit = 1;
                   65547:     }else if( (rc = sqlite3VdbeCheckFk(p, 1))!=SQLITE_OK ){
                   65548:       goto vdbe_return;
                   65549:     }else{
                   65550:       db->autoCommit = (u8)u.ar.desiredAutoCommit;
                   65551:       if( sqlite3VdbeHalt(p)==SQLITE_BUSY ){
                   65552:         p->pc = pc;
                   65553:         db->autoCommit = (u8)(1-u.ar.desiredAutoCommit);
                   65554:         p->rc = rc = SQLITE_BUSY;
                   65555:         goto vdbe_return;
                   65556:       }
                   65557:     }
                   65558:     assert( db->nStatement==0 );
                   65559:     sqlite3CloseSavepoints(db);
                   65560:     if( p->rc==SQLITE_OK ){
                   65561:       rc = SQLITE_DONE;
                   65562:     }else{
                   65563:       rc = SQLITE_ERROR;
                   65564:     }
                   65565:     goto vdbe_return;
                   65566:   }else{
                   65567:     sqlite3SetString(&p->zErrMsg, db,
                   65568:         (!u.ar.desiredAutoCommit)?"cannot start a transaction within a transaction":(
                   65569:         (u.ar.iRollback)?"cannot rollback - no transaction is active":
                   65570:                    "cannot commit - no transaction is active"));
                   65571: 
                   65572:     rc = SQLITE_ERROR;
                   65573:   }
                   65574:   break;
                   65575: }
                   65576: 
                   65577: /* Opcode: Transaction P1 P2 * * *
                   65578: **
                   65579: ** Begin a transaction.  The transaction ends when a Commit or Rollback
                   65580: ** opcode is encountered.  Depending on the ON CONFLICT setting, the
                   65581: ** transaction might also be rolled back if an error is encountered.
                   65582: **
                   65583: ** P1 is the index of the database file on which the transaction is
                   65584: ** started.  Index 0 is the main database file and index 1 is the
                   65585: ** file used for temporary tables.  Indices of 2 or more are used for
                   65586: ** attached databases.
                   65587: **
                   65588: ** If P2 is non-zero, then a write-transaction is started.  A RESERVED lock is
                   65589: ** obtained on the database file when a write-transaction is started.  No
                   65590: ** other process can start another write transaction while this transaction is
                   65591: ** underway.  Starting a write transaction also creates a rollback journal. A
                   65592: ** write transaction must be started before any changes can be made to the
1.1.1.3 ! misho    65593: ** database.  If P2 is 2 or greater than an EXCLUSIVE lock is also obtained
1.1       misho    65594: ** on the file.
                   65595: **
                   65596: ** If a write-transaction is started and the Vdbe.usesStmtJournal flag is
                   65597: ** true (this flag is set if the Vdbe may modify more than one row and may
                   65598: ** throw an ABORT exception), a statement transaction may also be opened.
                   65599: ** More specifically, a statement transaction is opened iff the database
                   65600: ** connection is currently not in autocommit mode, or if there are other
                   65601: ** active statements. A statement transaction allows the affects of this
                   65602: ** VDBE to be rolled back after an error without having to roll back the
                   65603: ** entire transaction. If no error is encountered, the statement transaction
                   65604: ** will automatically commit when the VDBE halts.
                   65605: **
                   65606: ** If P2 is zero, then a read-lock is obtained on the database file.
                   65607: */
                   65608: case OP_Transaction: {
                   65609: #if 0  /* local variables moved into u.as */
                   65610:   Btree *pBt;
                   65611: #endif /* local variables moved into u.as */
                   65612: 
                   65613:   assert( pOp->p1>=0 && pOp->p1<db->nDb );
                   65614:   assert( (p->btreeMask & (((yDbMask)1)<<pOp->p1))!=0 );
                   65615:   u.as.pBt = db->aDb[pOp->p1].pBt;
                   65616: 
                   65617:   if( u.as.pBt ){
                   65618:     rc = sqlite3BtreeBeginTrans(u.as.pBt, pOp->p2);
                   65619:     if( rc==SQLITE_BUSY ){
                   65620:       p->pc = pc;
                   65621:       p->rc = rc = SQLITE_BUSY;
                   65622:       goto vdbe_return;
                   65623:     }
                   65624:     if( rc!=SQLITE_OK ){
                   65625:       goto abort_due_to_error;
                   65626:     }
                   65627: 
                   65628:     if( pOp->p2 && p->usesStmtJournal
                   65629:      && (db->autoCommit==0 || db->activeVdbeCnt>1)
                   65630:     ){
                   65631:       assert( sqlite3BtreeIsInTrans(u.as.pBt) );
                   65632:       if( p->iStatement==0 ){
                   65633:         assert( db->nStatement>=0 && db->nSavepoint>=0 );
                   65634:         db->nStatement++;
                   65635:         p->iStatement = db->nSavepoint + db->nStatement;
                   65636:       }
                   65637: 
                   65638:       rc = sqlite3VtabSavepoint(db, SAVEPOINT_BEGIN, p->iStatement-1);
                   65639:       if( rc==SQLITE_OK ){
                   65640:         rc = sqlite3BtreeBeginStmt(u.as.pBt, p->iStatement);
                   65641:       }
                   65642: 
                   65643:       /* Store the current value of the database handles deferred constraint
                   65644:       ** counter. If the statement transaction needs to be rolled back,
                   65645:       ** the value of this counter needs to be restored too.  */
                   65646:       p->nStmtDefCons = db->nDeferredCons;
                   65647:     }
                   65648:   }
                   65649:   break;
                   65650: }
                   65651: 
                   65652: /* Opcode: ReadCookie P1 P2 P3 * *
                   65653: **
                   65654: ** Read cookie number P3 from database P1 and write it into register P2.
                   65655: ** P3==1 is the schema version.  P3==2 is the database format.
                   65656: ** P3==3 is the recommended pager cache size, and so forth.  P1==0 is
                   65657: ** the main database file and P1==1 is the database file used to store
                   65658: ** temporary tables.
                   65659: **
                   65660: ** There must be a read-lock on the database (either a transaction
                   65661: ** must be started or there must be an open cursor) before
                   65662: ** executing this instruction.
                   65663: */
                   65664: case OP_ReadCookie: {               /* out2-prerelease */
                   65665: #if 0  /* local variables moved into u.at */
                   65666:   int iMeta;
                   65667:   int iDb;
                   65668:   int iCookie;
                   65669: #endif /* local variables moved into u.at */
                   65670: 
                   65671:   u.at.iDb = pOp->p1;
                   65672:   u.at.iCookie = pOp->p3;
                   65673:   assert( pOp->p3<SQLITE_N_BTREE_META );
                   65674:   assert( u.at.iDb>=0 && u.at.iDb<db->nDb );
                   65675:   assert( db->aDb[u.at.iDb].pBt!=0 );
                   65676:   assert( (p->btreeMask & (((yDbMask)1)<<u.at.iDb))!=0 );
                   65677: 
                   65678:   sqlite3BtreeGetMeta(db->aDb[u.at.iDb].pBt, u.at.iCookie, (u32 *)&u.at.iMeta);
                   65679:   pOut->u.i = u.at.iMeta;
                   65680:   break;
                   65681: }
                   65682: 
                   65683: /* Opcode: SetCookie P1 P2 P3 * *
                   65684: **
                   65685: ** Write the content of register P3 (interpreted as an integer)
                   65686: ** into cookie number P2 of database P1.  P2==1 is the schema version.  
                   65687: ** P2==2 is the database format. P2==3 is the recommended pager cache 
                   65688: ** size, and so forth.  P1==0 is the main database file and P1==1 is the 
                   65689: ** database file used to store temporary tables.
                   65690: **
                   65691: ** A transaction must be started before executing this opcode.
                   65692: */
                   65693: case OP_SetCookie: {       /* in3 */
                   65694: #if 0  /* local variables moved into u.au */
                   65695:   Db *pDb;
                   65696: #endif /* local variables moved into u.au */
                   65697:   assert( pOp->p2<SQLITE_N_BTREE_META );
                   65698:   assert( pOp->p1>=0 && pOp->p1<db->nDb );
                   65699:   assert( (p->btreeMask & (((yDbMask)1)<<pOp->p1))!=0 );
                   65700:   u.au.pDb = &db->aDb[pOp->p1];
                   65701:   assert( u.au.pDb->pBt!=0 );
                   65702:   assert( sqlite3SchemaMutexHeld(db, pOp->p1, 0) );
                   65703:   pIn3 = &aMem[pOp->p3];
                   65704:   sqlite3VdbeMemIntegerify(pIn3);
                   65705:   /* See note about index shifting on OP_ReadCookie */
                   65706:   rc = sqlite3BtreeUpdateMeta(u.au.pDb->pBt, pOp->p2, (int)pIn3->u.i);
                   65707:   if( pOp->p2==BTREE_SCHEMA_VERSION ){
                   65708:     /* When the schema cookie changes, record the new cookie internally */
                   65709:     u.au.pDb->pSchema->schema_cookie = (int)pIn3->u.i;
                   65710:     db->flags |= SQLITE_InternChanges;
                   65711:   }else if( pOp->p2==BTREE_FILE_FORMAT ){
                   65712:     /* Record changes in the file format */
                   65713:     u.au.pDb->pSchema->file_format = (u8)pIn3->u.i;
                   65714:   }
                   65715:   if( pOp->p1==1 ){
                   65716:     /* Invalidate all prepared statements whenever the TEMP database
                   65717:     ** schema is changed.  Ticket #1644 */
                   65718:     sqlite3ExpirePreparedStatements(db);
                   65719:     p->expired = 0;
                   65720:   }
                   65721:   break;
                   65722: }
                   65723: 
                   65724: /* Opcode: VerifyCookie P1 P2 P3 * *
                   65725: **
                   65726: ** Check the value of global database parameter number 0 (the
                   65727: ** schema version) and make sure it is equal to P2 and that the
                   65728: ** generation counter on the local schema parse equals P3.
                   65729: **
                   65730: ** P1 is the database number which is 0 for the main database file
                   65731: ** and 1 for the file holding temporary tables and some higher number
                   65732: ** for auxiliary databases.
                   65733: **
                   65734: ** The cookie changes its value whenever the database schema changes.
                   65735: ** This operation is used to detect when that the cookie has changed
                   65736: ** and that the current process needs to reread the schema.
                   65737: **
                   65738: ** Either a transaction needs to have been started or an OP_Open needs
                   65739: ** to be executed (to establish a read lock) before this opcode is
                   65740: ** invoked.
                   65741: */
                   65742: case OP_VerifyCookie: {
                   65743: #if 0  /* local variables moved into u.av */
                   65744:   int iMeta;
                   65745:   int iGen;
                   65746:   Btree *pBt;
                   65747: #endif /* local variables moved into u.av */
                   65748: 
                   65749:   assert( pOp->p1>=0 && pOp->p1<db->nDb );
                   65750:   assert( (p->btreeMask & (((yDbMask)1)<<pOp->p1))!=0 );
                   65751:   assert( sqlite3SchemaMutexHeld(db, pOp->p1, 0) );
                   65752:   u.av.pBt = db->aDb[pOp->p1].pBt;
                   65753:   if( u.av.pBt ){
                   65754:     sqlite3BtreeGetMeta(u.av.pBt, BTREE_SCHEMA_VERSION, (u32 *)&u.av.iMeta);
                   65755:     u.av.iGen = db->aDb[pOp->p1].pSchema->iGeneration;
                   65756:   }else{
                   65757:     u.av.iGen = u.av.iMeta = 0;
                   65758:   }
                   65759:   if( u.av.iMeta!=pOp->p2 || u.av.iGen!=pOp->p3 ){
                   65760:     sqlite3DbFree(db, p->zErrMsg);
                   65761:     p->zErrMsg = sqlite3DbStrDup(db, "database schema has changed");
                   65762:     /* If the schema-cookie from the database file matches the cookie
                   65763:     ** stored with the in-memory representation of the schema, do
                   65764:     ** not reload the schema from the database file.
                   65765:     **
                   65766:     ** If virtual-tables are in use, this is not just an optimization.
                   65767:     ** Often, v-tables store their data in other SQLite tables, which
                   65768:     ** are queried from within xNext() and other v-table methods using
                   65769:     ** prepared queries. If such a query is out-of-date, we do not want to
                   65770:     ** discard the database schema, as the user code implementing the
                   65771:     ** v-table would have to be ready for the sqlite3_vtab structure itself
                   65772:     ** to be invalidated whenever sqlite3_step() is called from within
                   65773:     ** a v-table method.
                   65774:     */
                   65775:     if( db->aDb[pOp->p1].pSchema->schema_cookie!=u.av.iMeta ){
                   65776:       sqlite3ResetInternalSchema(db, pOp->p1);
                   65777:     }
                   65778: 
                   65779:     p->expired = 1;
                   65780:     rc = SQLITE_SCHEMA;
                   65781:   }
                   65782:   break;
                   65783: }
                   65784: 
                   65785: /* Opcode: OpenRead P1 P2 P3 P4 P5
                   65786: **
                   65787: ** Open a read-only cursor for the database table whose root page is
                   65788: ** P2 in a database file.  The database file is determined by P3. 
                   65789: ** P3==0 means the main database, P3==1 means the database used for 
                   65790: ** temporary tables, and P3>1 means used the corresponding attached
                   65791: ** database.  Give the new cursor an identifier of P1.  The P1
                   65792: ** values need not be contiguous but all P1 values should be small integers.
                   65793: ** It is an error for P1 to be negative.
                   65794: **
                   65795: ** If P5!=0 then use the content of register P2 as the root page, not
                   65796: ** the value of P2 itself.
                   65797: **
                   65798: ** There will be a read lock on the database whenever there is an
                   65799: ** open cursor.  If the database was unlocked prior to this instruction
                   65800: ** then a read lock is acquired as part of this instruction.  A read
                   65801: ** lock allows other processes to read the database but prohibits
                   65802: ** any other process from modifying the database.  The read lock is
                   65803: ** released when all cursors are closed.  If this instruction attempts
                   65804: ** to get a read lock but fails, the script terminates with an
                   65805: ** SQLITE_BUSY error code.
                   65806: **
                   65807: ** The P4 value may be either an integer (P4_INT32) or a pointer to
                   65808: ** a KeyInfo structure (P4_KEYINFO). If it is a pointer to a KeyInfo 
                   65809: ** structure, then said structure defines the content and collating 
                   65810: ** sequence of the index being opened. Otherwise, if P4 is an integer 
                   65811: ** value, it is set to the number of columns in the table.
                   65812: **
                   65813: ** See also OpenWrite.
                   65814: */
                   65815: /* Opcode: OpenWrite P1 P2 P3 P4 P5
                   65816: **
                   65817: ** Open a read/write cursor named P1 on the table or index whose root
                   65818: ** page is P2.  Or if P5!=0 use the content of register P2 to find the
                   65819: ** root page.
                   65820: **
                   65821: ** The P4 value may be either an integer (P4_INT32) or a pointer to
                   65822: ** a KeyInfo structure (P4_KEYINFO). If it is a pointer to a KeyInfo 
                   65823: ** structure, then said structure defines the content and collating 
                   65824: ** sequence of the index being opened. Otherwise, if P4 is an integer 
                   65825: ** value, it is set to the number of columns in the table, or to the
                   65826: ** largest index of any column of the table that is actually used.
                   65827: **
                   65828: ** This instruction works just like OpenRead except that it opens the cursor
                   65829: ** in read/write mode.  For a given table, there can be one or more read-only
                   65830: ** cursors or a single read/write cursor but not both.
                   65831: **
                   65832: ** See also OpenRead.
                   65833: */
                   65834: case OP_OpenRead:
                   65835: case OP_OpenWrite: {
                   65836: #if 0  /* local variables moved into u.aw */
                   65837:   int nField;
                   65838:   KeyInfo *pKeyInfo;
                   65839:   int p2;
                   65840:   int iDb;
                   65841:   int wrFlag;
                   65842:   Btree *pX;
                   65843:   VdbeCursor *pCur;
                   65844:   Db *pDb;
                   65845: #endif /* local variables moved into u.aw */
                   65846: 
                   65847:   if( p->expired ){
                   65848:     rc = SQLITE_ABORT;
                   65849:     break;
                   65850:   }
                   65851: 
                   65852:   u.aw.nField = 0;
                   65853:   u.aw.pKeyInfo = 0;
                   65854:   u.aw.p2 = pOp->p2;
                   65855:   u.aw.iDb = pOp->p3;
                   65856:   assert( u.aw.iDb>=0 && u.aw.iDb<db->nDb );
                   65857:   assert( (p->btreeMask & (((yDbMask)1)<<u.aw.iDb))!=0 );
                   65858:   u.aw.pDb = &db->aDb[u.aw.iDb];
                   65859:   u.aw.pX = u.aw.pDb->pBt;
                   65860:   assert( u.aw.pX!=0 );
                   65861:   if( pOp->opcode==OP_OpenWrite ){
                   65862:     u.aw.wrFlag = 1;
                   65863:     assert( sqlite3SchemaMutexHeld(db, u.aw.iDb, 0) );
                   65864:     if( u.aw.pDb->pSchema->file_format < p->minWriteFileFormat ){
                   65865:       p->minWriteFileFormat = u.aw.pDb->pSchema->file_format;
                   65866:     }
                   65867:   }else{
                   65868:     u.aw.wrFlag = 0;
                   65869:   }
                   65870:   if( pOp->p5 ){
                   65871:     assert( u.aw.p2>0 );
                   65872:     assert( u.aw.p2<=p->nMem );
                   65873:     pIn2 = &aMem[u.aw.p2];
                   65874:     assert( memIsValid(pIn2) );
                   65875:     assert( (pIn2->flags & MEM_Int)!=0 );
                   65876:     sqlite3VdbeMemIntegerify(pIn2);
                   65877:     u.aw.p2 = (int)pIn2->u.i;
                   65878:     /* The u.aw.p2 value always comes from a prior OP_CreateTable opcode and
                   65879:     ** that opcode will always set the u.aw.p2 value to 2 or more or else fail.
                   65880:     ** If there were a failure, the prepared statement would have halted
                   65881:     ** before reaching this instruction. */
                   65882:     if( NEVER(u.aw.p2<2) ) {
                   65883:       rc = SQLITE_CORRUPT_BKPT;
                   65884:       goto abort_due_to_error;
                   65885:     }
                   65886:   }
                   65887:   if( pOp->p4type==P4_KEYINFO ){
                   65888:     u.aw.pKeyInfo = pOp->p4.pKeyInfo;
                   65889:     u.aw.pKeyInfo->enc = ENC(p->db);
                   65890:     u.aw.nField = u.aw.pKeyInfo->nField+1;
                   65891:   }else if( pOp->p4type==P4_INT32 ){
                   65892:     u.aw.nField = pOp->p4.i;
                   65893:   }
                   65894:   assert( pOp->p1>=0 );
                   65895:   u.aw.pCur = allocateCursor(p, pOp->p1, u.aw.nField, u.aw.iDb, 1);
                   65896:   if( u.aw.pCur==0 ) goto no_mem;
                   65897:   u.aw.pCur->nullRow = 1;
                   65898:   u.aw.pCur->isOrdered = 1;
                   65899:   rc = sqlite3BtreeCursor(u.aw.pX, u.aw.p2, u.aw.wrFlag, u.aw.pKeyInfo, u.aw.pCur->pCursor);
                   65900:   u.aw.pCur->pKeyInfo = u.aw.pKeyInfo;
                   65901: 
                   65902:   /* Since it performs no memory allocation or IO, the only values that
                   65903:   ** sqlite3BtreeCursor() may return are SQLITE_EMPTY and SQLITE_OK.
                   65904:   ** SQLITE_EMPTY is only returned when attempting to open the table
                   65905:   ** rooted at page 1 of a zero-byte database.  */
                   65906:   assert( rc==SQLITE_EMPTY || rc==SQLITE_OK );
                   65907:   if( rc==SQLITE_EMPTY ){
                   65908:     u.aw.pCur->pCursor = 0;
                   65909:     rc = SQLITE_OK;
                   65910:   }
                   65911: 
                   65912:   /* Set the VdbeCursor.isTable and isIndex variables. Previous versions of
                   65913:   ** SQLite used to check if the root-page flags were sane at this point
                   65914:   ** and report database corruption if they were not, but this check has
                   65915:   ** since moved into the btree layer.  */
                   65916:   u.aw.pCur->isTable = pOp->p4type!=P4_KEYINFO;
                   65917:   u.aw.pCur->isIndex = !u.aw.pCur->isTable;
                   65918:   break;
                   65919: }
                   65920: 
                   65921: /* Opcode: OpenEphemeral P1 P2 * P4 *
                   65922: **
                   65923: ** Open a new cursor P1 to a transient table.
                   65924: ** The cursor is always opened read/write even if 
                   65925: ** the main database is read-only.  The ephemeral
                   65926: ** table is deleted automatically when the cursor is closed.
                   65927: **
                   65928: ** P2 is the number of columns in the ephemeral table.
                   65929: ** The cursor points to a BTree table if P4==0 and to a BTree index
                   65930: ** if P4 is not 0.  If P4 is not NULL, it points to a KeyInfo structure
                   65931: ** that defines the format of keys in the index.
                   65932: **
                   65933: ** This opcode was once called OpenTemp.  But that created
                   65934: ** confusion because the term "temp table", might refer either
                   65935: ** to a TEMP table at the SQL level, or to a table opened by
                   65936: ** this opcode.  Then this opcode was call OpenVirtual.  But
                   65937: ** that created confusion with the whole virtual-table idea.
                   65938: */
                   65939: /* Opcode: OpenAutoindex P1 P2 * P4 *
                   65940: **
                   65941: ** This opcode works the same as OP_OpenEphemeral.  It has a
                   65942: ** different name to distinguish its use.  Tables created using
                   65943: ** by this opcode will be used for automatically created transient
                   65944: ** indices in joins.
                   65945: */
                   65946: case OP_OpenAutoindex: 
                   65947: case OP_OpenEphemeral: {
                   65948: #if 0  /* local variables moved into u.ax */
                   65949:   VdbeCursor *pCx;
                   65950: #endif /* local variables moved into u.ax */
                   65951:   static const int vfsFlags =
                   65952:       SQLITE_OPEN_READWRITE |
                   65953:       SQLITE_OPEN_CREATE |
                   65954:       SQLITE_OPEN_EXCLUSIVE |
                   65955:       SQLITE_OPEN_DELETEONCLOSE |
                   65956:       SQLITE_OPEN_TRANSIENT_DB;
                   65957: 
                   65958:   assert( pOp->p1>=0 );
                   65959:   u.ax.pCx = allocateCursor(p, pOp->p1, pOp->p2, -1, 1);
                   65960:   if( u.ax.pCx==0 ) goto no_mem;
                   65961:   u.ax.pCx->nullRow = 1;
                   65962:   rc = sqlite3BtreeOpen(db->pVfs, 0, db, &u.ax.pCx->pBt,
                   65963:                         BTREE_OMIT_JOURNAL | BTREE_SINGLE | pOp->p5, vfsFlags);
                   65964:   if( rc==SQLITE_OK ){
                   65965:     rc = sqlite3BtreeBeginTrans(u.ax.pCx->pBt, 1);
                   65966:   }
                   65967:   if( rc==SQLITE_OK ){
                   65968:     /* If a transient index is required, create it by calling
                   65969:     ** sqlite3BtreeCreateTable() with the BTREE_BLOBKEY flag before
                   65970:     ** opening it. If a transient table is required, just use the
                   65971:     ** automatically created table with root-page 1 (an BLOB_INTKEY table).
                   65972:     */
                   65973:     if( pOp->p4.pKeyInfo ){
                   65974:       int pgno;
                   65975:       assert( pOp->p4type==P4_KEYINFO );
                   65976:       rc = sqlite3BtreeCreateTable(u.ax.pCx->pBt, &pgno, BTREE_BLOBKEY);
                   65977:       if( rc==SQLITE_OK ){
                   65978:         assert( pgno==MASTER_ROOT+1 );
                   65979:         rc = sqlite3BtreeCursor(u.ax.pCx->pBt, pgno, 1,
                   65980:                                 (KeyInfo*)pOp->p4.z, u.ax.pCx->pCursor);
                   65981:         u.ax.pCx->pKeyInfo = pOp->p4.pKeyInfo;
                   65982:         u.ax.pCx->pKeyInfo->enc = ENC(p->db);
                   65983:       }
                   65984:       u.ax.pCx->isTable = 0;
                   65985:     }else{
                   65986:       rc = sqlite3BtreeCursor(u.ax.pCx->pBt, MASTER_ROOT, 1, 0, u.ax.pCx->pCursor);
                   65987:       u.ax.pCx->isTable = 1;
                   65988:     }
                   65989:   }
                   65990:   u.ax.pCx->isOrdered = (pOp->p5!=BTREE_UNORDERED);
                   65991:   u.ax.pCx->isIndex = !u.ax.pCx->isTable;
                   65992:   break;
                   65993: }
                   65994: 
                   65995: /* Opcode: OpenPseudo P1 P2 P3 * *
                   65996: **
                   65997: ** Open a new cursor that points to a fake table that contains a single
                   65998: ** row of data.  The content of that one row in the content of memory
                   65999: ** register P2.  In other words, cursor P1 becomes an alias for the 
                   66000: ** MEM_Blob content contained in register P2.
                   66001: **
                   66002: ** A pseudo-table created by this opcode is used to hold a single
                   66003: ** row output from the sorter so that the row can be decomposed into
                   66004: ** individual columns using the OP_Column opcode.  The OP_Column opcode
                   66005: ** is the only cursor opcode that works with a pseudo-table.
                   66006: **
                   66007: ** P3 is the number of fields in the records that will be stored by
                   66008: ** the pseudo-table.
                   66009: */
                   66010: case OP_OpenPseudo: {
                   66011: #if 0  /* local variables moved into u.ay */
                   66012:   VdbeCursor *pCx;
                   66013: #endif /* local variables moved into u.ay */
                   66014: 
                   66015:   assert( pOp->p1>=0 );
                   66016:   u.ay.pCx = allocateCursor(p, pOp->p1, pOp->p3, -1, 0);
                   66017:   if( u.ay.pCx==0 ) goto no_mem;
                   66018:   u.ay.pCx->nullRow = 1;
                   66019:   u.ay.pCx->pseudoTableReg = pOp->p2;
                   66020:   u.ay.pCx->isTable = 1;
                   66021:   u.ay.pCx->isIndex = 0;
                   66022:   break;
                   66023: }
                   66024: 
                   66025: /* Opcode: Close P1 * * * *
                   66026: **
                   66027: ** Close a cursor previously opened as P1.  If P1 is not
                   66028: ** currently open, this instruction is a no-op.
                   66029: */
                   66030: case OP_Close: {
                   66031:   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
                   66032:   sqlite3VdbeFreeCursor(p, p->apCsr[pOp->p1]);
                   66033:   p->apCsr[pOp->p1] = 0;
                   66034:   break;
                   66035: }
                   66036: 
                   66037: /* Opcode: SeekGe P1 P2 P3 P4 *
                   66038: **
                   66039: ** If cursor P1 refers to an SQL table (B-Tree that uses integer keys), 
                   66040: ** use the value in register P3 as the key.  If cursor P1 refers 
                   66041: ** to an SQL index, then P3 is the first in an array of P4 registers 
                   66042: ** that are used as an unpacked index key. 
                   66043: **
                   66044: ** Reposition cursor P1 so that  it points to the smallest entry that 
                   66045: ** is greater than or equal to the key value. If there are no records 
                   66046: ** greater than or equal to the key and P2 is not zero, then jump to P2.
                   66047: **
                   66048: ** See also: Found, NotFound, Distinct, SeekLt, SeekGt, SeekLe
                   66049: */
                   66050: /* Opcode: SeekGt P1 P2 P3 P4 *
                   66051: **
                   66052: ** If cursor P1 refers to an SQL table (B-Tree that uses integer keys), 
                   66053: ** use the value in register P3 as a key. If cursor P1 refers 
                   66054: ** to an SQL index, then P3 is the first in an array of P4 registers 
                   66055: ** that are used as an unpacked index key. 
                   66056: **
                   66057: ** Reposition cursor P1 so that  it points to the smallest entry that 
                   66058: ** is greater than the key value. If there are no records greater than 
                   66059: ** the key and P2 is not zero, then jump to P2.
                   66060: **
                   66061: ** See also: Found, NotFound, Distinct, SeekLt, SeekGe, SeekLe
                   66062: */
                   66063: /* Opcode: SeekLt P1 P2 P3 P4 * 
                   66064: **
                   66065: ** If cursor P1 refers to an SQL table (B-Tree that uses integer keys), 
                   66066: ** use the value in register P3 as a key. If cursor P1 refers 
                   66067: ** to an SQL index, then P3 is the first in an array of P4 registers 
                   66068: ** that are used as an unpacked index key. 
                   66069: **
                   66070: ** Reposition cursor P1 so that  it points to the largest entry that 
                   66071: ** is less than the key value. If there are no records less than 
                   66072: ** the key and P2 is not zero, then jump to P2.
                   66073: **
                   66074: ** See also: Found, NotFound, Distinct, SeekGt, SeekGe, SeekLe
                   66075: */
                   66076: /* Opcode: SeekLe P1 P2 P3 P4 *
                   66077: **
                   66078: ** If cursor P1 refers to an SQL table (B-Tree that uses integer keys), 
                   66079: ** use the value in register P3 as a key. If cursor P1 refers 
                   66080: ** to an SQL index, then P3 is the first in an array of P4 registers 
                   66081: ** that are used as an unpacked index key. 
                   66082: **
                   66083: ** Reposition cursor P1 so that it points to the largest entry that 
                   66084: ** is less than or equal to the key value. If there are no records 
                   66085: ** less than or equal to the key and P2 is not zero, then jump to P2.
                   66086: **
                   66087: ** See also: Found, NotFound, Distinct, SeekGt, SeekGe, SeekLt
                   66088: */
                   66089: case OP_SeekLt:         /* jump, in3 */
                   66090: case OP_SeekLe:         /* jump, in3 */
                   66091: case OP_SeekGe:         /* jump, in3 */
                   66092: case OP_SeekGt: {       /* jump, in3 */
                   66093: #if 0  /* local variables moved into u.az */
                   66094:   int res;
                   66095:   int oc;
                   66096:   VdbeCursor *pC;
                   66097:   UnpackedRecord r;
                   66098:   int nField;
                   66099:   i64 iKey;      /* The rowid we are to seek to */
                   66100: #endif /* local variables moved into u.az */
                   66101: 
                   66102:   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
                   66103:   assert( pOp->p2!=0 );
                   66104:   u.az.pC = p->apCsr[pOp->p1];
                   66105:   assert( u.az.pC!=0 );
                   66106:   assert( u.az.pC->pseudoTableReg==0 );
                   66107:   assert( OP_SeekLe == OP_SeekLt+1 );
                   66108:   assert( OP_SeekGe == OP_SeekLt+2 );
                   66109:   assert( OP_SeekGt == OP_SeekLt+3 );
                   66110:   assert( u.az.pC->isOrdered );
                   66111:   if( u.az.pC->pCursor!=0 ){
                   66112:     u.az.oc = pOp->opcode;
                   66113:     u.az.pC->nullRow = 0;
                   66114:     if( u.az.pC->isTable ){
                   66115:       /* The input value in P3 might be of any type: integer, real, string,
                   66116:       ** blob, or NULL.  But it needs to be an integer before we can do
                   66117:       ** the seek, so covert it. */
                   66118:       pIn3 = &aMem[pOp->p3];
                   66119:       applyNumericAffinity(pIn3);
                   66120:       u.az.iKey = sqlite3VdbeIntValue(pIn3);
                   66121:       u.az.pC->rowidIsValid = 0;
                   66122: 
                   66123:       /* If the P3 value could not be converted into an integer without
                   66124:       ** loss of information, then special processing is required... */
                   66125:       if( (pIn3->flags & MEM_Int)==0 ){
                   66126:         if( (pIn3->flags & MEM_Real)==0 ){
                   66127:           /* If the P3 value cannot be converted into any kind of a number,
                   66128:           ** then the seek is not possible, so jump to P2 */
                   66129:           pc = pOp->p2 - 1;
                   66130:           break;
                   66131:         }
                   66132:         /* If we reach this point, then the P3 value must be a floating
                   66133:         ** point number. */
                   66134:         assert( (pIn3->flags & MEM_Real)!=0 );
                   66135: 
                   66136:         if( u.az.iKey==SMALLEST_INT64 && (pIn3->r<(double)u.az.iKey || pIn3->r>0) ){
                   66137:           /* The P3 value is too large in magnitude to be expressed as an
                   66138:           ** integer. */
                   66139:           u.az.res = 1;
                   66140:           if( pIn3->r<0 ){
                   66141:             if( u.az.oc>=OP_SeekGe ){  assert( u.az.oc==OP_SeekGe || u.az.oc==OP_SeekGt );
                   66142:               rc = sqlite3BtreeFirst(u.az.pC->pCursor, &u.az.res);
                   66143:               if( rc!=SQLITE_OK ) goto abort_due_to_error;
                   66144:             }
                   66145:           }else{
                   66146:             if( u.az.oc<=OP_SeekLe ){  assert( u.az.oc==OP_SeekLt || u.az.oc==OP_SeekLe );
                   66147:               rc = sqlite3BtreeLast(u.az.pC->pCursor, &u.az.res);
                   66148:               if( rc!=SQLITE_OK ) goto abort_due_to_error;
                   66149:             }
                   66150:           }
                   66151:           if( u.az.res ){
                   66152:             pc = pOp->p2 - 1;
                   66153:           }
                   66154:           break;
                   66155:         }else if( u.az.oc==OP_SeekLt || u.az.oc==OP_SeekGe ){
                   66156:           /* Use the ceiling() function to convert real->int */
                   66157:           if( pIn3->r > (double)u.az.iKey ) u.az.iKey++;
                   66158:         }else{
                   66159:           /* Use the floor() function to convert real->int */
                   66160:           assert( u.az.oc==OP_SeekLe || u.az.oc==OP_SeekGt );
                   66161:           if( pIn3->r < (double)u.az.iKey ) u.az.iKey--;
                   66162:         }
                   66163:       }
                   66164:       rc = sqlite3BtreeMovetoUnpacked(u.az.pC->pCursor, 0, (u64)u.az.iKey, 0, &u.az.res);
                   66165:       if( rc!=SQLITE_OK ){
                   66166:         goto abort_due_to_error;
                   66167:       }
                   66168:       if( u.az.res==0 ){
                   66169:         u.az.pC->rowidIsValid = 1;
                   66170:         u.az.pC->lastRowid = u.az.iKey;
                   66171:       }
                   66172:     }else{
                   66173:       u.az.nField = pOp->p4.i;
                   66174:       assert( pOp->p4type==P4_INT32 );
                   66175:       assert( u.az.nField>0 );
                   66176:       u.az.r.pKeyInfo = u.az.pC->pKeyInfo;
                   66177:       u.az.r.nField = (u16)u.az.nField;
                   66178: 
                   66179:       /* The next line of code computes as follows, only faster:
                   66180:       **   if( u.az.oc==OP_SeekGt || u.az.oc==OP_SeekLe ){
                   66181:       **     u.az.r.flags = UNPACKED_INCRKEY;
                   66182:       **   }else{
                   66183:       **     u.az.r.flags = 0;
                   66184:       **   }
                   66185:       */
                   66186:       u.az.r.flags = (u16)(UNPACKED_INCRKEY * (1 & (u.az.oc - OP_SeekLt)));
                   66187:       assert( u.az.oc!=OP_SeekGt || u.az.r.flags==UNPACKED_INCRKEY );
                   66188:       assert( u.az.oc!=OP_SeekLe || u.az.r.flags==UNPACKED_INCRKEY );
                   66189:       assert( u.az.oc!=OP_SeekGe || u.az.r.flags==0 );
                   66190:       assert( u.az.oc!=OP_SeekLt || u.az.r.flags==0 );
                   66191: 
                   66192:       u.az.r.aMem = &aMem[pOp->p3];
                   66193: #ifdef SQLITE_DEBUG
                   66194:       { int i; for(i=0; i<u.az.r.nField; i++) assert( memIsValid(&u.az.r.aMem[i]) ); }
                   66195: #endif
                   66196:       ExpandBlob(u.az.r.aMem);
                   66197:       rc = sqlite3BtreeMovetoUnpacked(u.az.pC->pCursor, &u.az.r, 0, 0, &u.az.res);
                   66198:       if( rc!=SQLITE_OK ){
                   66199:         goto abort_due_to_error;
                   66200:       }
                   66201:       u.az.pC->rowidIsValid = 0;
                   66202:     }
                   66203:     u.az.pC->deferredMoveto = 0;
                   66204:     u.az.pC->cacheStatus = CACHE_STALE;
                   66205: #ifdef SQLITE_TEST
                   66206:     sqlite3_search_count++;
                   66207: #endif
                   66208:     if( u.az.oc>=OP_SeekGe ){  assert( u.az.oc==OP_SeekGe || u.az.oc==OP_SeekGt );
                   66209:       if( u.az.res<0 || (u.az.res==0 && u.az.oc==OP_SeekGt) ){
                   66210:         rc = sqlite3BtreeNext(u.az.pC->pCursor, &u.az.res);
                   66211:         if( rc!=SQLITE_OK ) goto abort_due_to_error;
                   66212:         u.az.pC->rowidIsValid = 0;
                   66213:       }else{
                   66214:         u.az.res = 0;
                   66215:       }
                   66216:     }else{
                   66217:       assert( u.az.oc==OP_SeekLt || u.az.oc==OP_SeekLe );
                   66218:       if( u.az.res>0 || (u.az.res==0 && u.az.oc==OP_SeekLt) ){
                   66219:         rc = sqlite3BtreePrevious(u.az.pC->pCursor, &u.az.res);
                   66220:         if( rc!=SQLITE_OK ) goto abort_due_to_error;
                   66221:         u.az.pC->rowidIsValid = 0;
                   66222:       }else{
                   66223:         /* u.az.res might be negative because the table is empty.  Check to
                   66224:         ** see if this is the case.
                   66225:         */
                   66226:         u.az.res = sqlite3BtreeEof(u.az.pC->pCursor);
                   66227:       }
                   66228:     }
                   66229:     assert( pOp->p2>0 );
                   66230:     if( u.az.res ){
                   66231:       pc = pOp->p2 - 1;
                   66232:     }
                   66233:   }else{
                   66234:     /* This happens when attempting to open the sqlite3_master table
                   66235:     ** for read access returns SQLITE_EMPTY. In this case always
                   66236:     ** take the jump (since there are no records in the table).
                   66237:     */
                   66238:     pc = pOp->p2 - 1;
                   66239:   }
                   66240:   break;
                   66241: }
                   66242: 
                   66243: /* Opcode: Seek P1 P2 * * *
                   66244: **
                   66245: ** P1 is an open table cursor and P2 is a rowid integer.  Arrange
                   66246: ** for P1 to move so that it points to the rowid given by P2.
                   66247: **
                   66248: ** This is actually a deferred seek.  Nothing actually happens until
                   66249: ** the cursor is used to read a record.  That way, if no reads
                   66250: ** occur, no unnecessary I/O happens.
                   66251: */
                   66252: case OP_Seek: {    /* in2 */
                   66253: #if 0  /* local variables moved into u.ba */
                   66254:   VdbeCursor *pC;
                   66255: #endif /* local variables moved into u.ba */
                   66256: 
                   66257:   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
                   66258:   u.ba.pC = p->apCsr[pOp->p1];
                   66259:   assert( u.ba.pC!=0 );
                   66260:   if( ALWAYS(u.ba.pC->pCursor!=0) ){
                   66261:     assert( u.ba.pC->isTable );
                   66262:     u.ba.pC->nullRow = 0;
                   66263:     pIn2 = &aMem[pOp->p2];
                   66264:     u.ba.pC->movetoTarget = sqlite3VdbeIntValue(pIn2);
                   66265:     u.ba.pC->rowidIsValid = 0;
                   66266:     u.ba.pC->deferredMoveto = 1;
                   66267:   }
                   66268:   break;
                   66269: }
                   66270:   
                   66271: 
                   66272: /* Opcode: Found P1 P2 P3 P4 *
                   66273: **
                   66274: ** If P4==0 then register P3 holds a blob constructed by MakeRecord.  If
                   66275: ** P4>0 then register P3 is the first of P4 registers that form an unpacked
                   66276: ** record.
                   66277: **
                   66278: ** Cursor P1 is on an index btree.  If the record identified by P3 and P4
                   66279: ** is a prefix of any entry in P1 then a jump is made to P2 and
                   66280: ** P1 is left pointing at the matching entry.
                   66281: */
                   66282: /* Opcode: NotFound P1 P2 P3 P4 *
                   66283: **
                   66284: ** If P4==0 then register P3 holds a blob constructed by MakeRecord.  If
                   66285: ** P4>0 then register P3 is the first of P4 registers that form an unpacked
                   66286: ** record.
                   66287: ** 
                   66288: ** Cursor P1 is on an index btree.  If the record identified by P3 and P4
                   66289: ** is not the prefix of any entry in P1 then a jump is made to P2.  If P1 
                   66290: ** does contain an entry whose prefix matches the P3/P4 record then control
                   66291: ** falls through to the next instruction and P1 is left pointing at the
                   66292: ** matching entry.
                   66293: **
                   66294: ** See also: Found, NotExists, IsUnique
                   66295: */
                   66296: case OP_NotFound:       /* jump, in3 */
                   66297: case OP_Found: {        /* jump, in3 */
                   66298: #if 0  /* local variables moved into u.bb */
                   66299:   int alreadyExists;
                   66300:   VdbeCursor *pC;
                   66301:   int res;
                   66302:   UnpackedRecord *pIdxKey;
                   66303:   UnpackedRecord r;
                   66304:   char aTempRec[ROUND8(sizeof(UnpackedRecord)) + sizeof(Mem)*3 + 7];
                   66305: #endif /* local variables moved into u.bb */
                   66306: 
                   66307: #ifdef SQLITE_TEST
                   66308:   sqlite3_found_count++;
                   66309: #endif
                   66310: 
                   66311:   u.bb.alreadyExists = 0;
                   66312:   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
                   66313:   assert( pOp->p4type==P4_INT32 );
                   66314:   u.bb.pC = p->apCsr[pOp->p1];
                   66315:   assert( u.bb.pC!=0 );
                   66316:   pIn3 = &aMem[pOp->p3];
                   66317:   if( ALWAYS(u.bb.pC->pCursor!=0) ){
                   66318: 
                   66319:     assert( u.bb.pC->isTable==0 );
                   66320:     if( pOp->p4.i>0 ){
                   66321:       u.bb.r.pKeyInfo = u.bb.pC->pKeyInfo;
                   66322:       u.bb.r.nField = (u16)pOp->p4.i;
                   66323:       u.bb.r.aMem = pIn3;
                   66324: #ifdef SQLITE_DEBUG
                   66325:       { int i; for(i=0; i<u.bb.r.nField; i++) assert( memIsValid(&u.bb.r.aMem[i]) ); }
                   66326: #endif
                   66327:       u.bb.r.flags = UNPACKED_PREFIX_MATCH;
                   66328:       u.bb.pIdxKey = &u.bb.r;
                   66329:     }else{
                   66330:       assert( pIn3->flags & MEM_Blob );
                   66331:       assert( (pIn3->flags & MEM_Zero)==0 );  /* zeroblobs already expanded */
                   66332:       u.bb.pIdxKey = sqlite3VdbeRecordUnpack(u.bb.pC->pKeyInfo, pIn3->n, pIn3->z,
                   66333:                                         u.bb.aTempRec, sizeof(u.bb.aTempRec));
                   66334:       if( u.bb.pIdxKey==0 ){
                   66335:         goto no_mem;
                   66336:       }
                   66337:       u.bb.pIdxKey->flags |= UNPACKED_PREFIX_MATCH;
                   66338:     }
                   66339:     rc = sqlite3BtreeMovetoUnpacked(u.bb.pC->pCursor, u.bb.pIdxKey, 0, 0, &u.bb.res);
                   66340:     if( pOp->p4.i==0 ){
                   66341:       sqlite3VdbeDeleteUnpackedRecord(u.bb.pIdxKey);
                   66342:     }
                   66343:     if( rc!=SQLITE_OK ){
                   66344:       break;
                   66345:     }
                   66346:     u.bb.alreadyExists = (u.bb.res==0);
                   66347:     u.bb.pC->deferredMoveto = 0;
                   66348:     u.bb.pC->cacheStatus = CACHE_STALE;
                   66349:   }
                   66350:   if( pOp->opcode==OP_Found ){
                   66351:     if( u.bb.alreadyExists ) pc = pOp->p2 - 1;
                   66352:   }else{
                   66353:     if( !u.bb.alreadyExists ) pc = pOp->p2 - 1;
                   66354:   }
                   66355:   break;
                   66356: }
                   66357: 
                   66358: /* Opcode: IsUnique P1 P2 P3 P4 *
                   66359: **
                   66360: ** Cursor P1 is open on an index b-tree - that is to say, a btree which
                   66361: ** no data and where the key are records generated by OP_MakeRecord with
                   66362: ** the list field being the integer ROWID of the entry that the index
                   66363: ** entry refers to.
                   66364: **
                   66365: ** The P3 register contains an integer record number. Call this record 
                   66366: ** number R. Register P4 is the first in a set of N contiguous registers
                   66367: ** that make up an unpacked index key that can be used with cursor P1.
                   66368: ** The value of N can be inferred from the cursor. N includes the rowid
                   66369: ** value appended to the end of the index record. This rowid value may
                   66370: ** or may not be the same as R.
                   66371: **
                   66372: ** If any of the N registers beginning with register P4 contains a NULL
                   66373: ** value, jump immediately to P2.
                   66374: **
                   66375: ** Otherwise, this instruction checks if cursor P1 contains an entry
                   66376: ** where the first (N-1) fields match but the rowid value at the end
                   66377: ** of the index entry is not R. If there is no such entry, control jumps
                   66378: ** to instruction P2. Otherwise, the rowid of the conflicting index
                   66379: ** entry is copied to register P3 and control falls through to the next
                   66380: ** instruction.
                   66381: **
                   66382: ** See also: NotFound, NotExists, Found
                   66383: */
                   66384: case OP_IsUnique: {        /* jump, in3 */
                   66385: #if 0  /* local variables moved into u.bc */
                   66386:   u16 ii;
                   66387:   VdbeCursor *pCx;
                   66388:   BtCursor *pCrsr;
                   66389:   u16 nField;
                   66390:   Mem *aMx;
                   66391:   UnpackedRecord r;                  /* B-Tree index search key */
                   66392:   i64 R;                             /* Rowid stored in register P3 */
                   66393: #endif /* local variables moved into u.bc */
                   66394: 
                   66395:   pIn3 = &aMem[pOp->p3];
                   66396:   u.bc.aMx = &aMem[pOp->p4.i];
                   66397:   /* Assert that the values of parameters P1 and P4 are in range. */
                   66398:   assert( pOp->p4type==P4_INT32 );
                   66399:   assert( pOp->p4.i>0 && pOp->p4.i<=p->nMem );
                   66400:   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
                   66401: 
                   66402:   /* Find the index cursor. */
                   66403:   u.bc.pCx = p->apCsr[pOp->p1];
                   66404:   assert( u.bc.pCx->deferredMoveto==0 );
                   66405:   u.bc.pCx->seekResult = 0;
                   66406:   u.bc.pCx->cacheStatus = CACHE_STALE;
                   66407:   u.bc.pCrsr = u.bc.pCx->pCursor;
                   66408: 
                   66409:   /* If any of the values are NULL, take the jump. */
                   66410:   u.bc.nField = u.bc.pCx->pKeyInfo->nField;
                   66411:   for(u.bc.ii=0; u.bc.ii<u.bc.nField; u.bc.ii++){
                   66412:     if( u.bc.aMx[u.bc.ii].flags & MEM_Null ){
                   66413:       pc = pOp->p2 - 1;
                   66414:       u.bc.pCrsr = 0;
                   66415:       break;
                   66416:     }
                   66417:   }
                   66418:   assert( (u.bc.aMx[u.bc.nField].flags & MEM_Null)==0 );
                   66419: 
                   66420:   if( u.bc.pCrsr!=0 ){
                   66421:     /* Populate the index search key. */
                   66422:     u.bc.r.pKeyInfo = u.bc.pCx->pKeyInfo;
                   66423:     u.bc.r.nField = u.bc.nField + 1;
                   66424:     u.bc.r.flags = UNPACKED_PREFIX_SEARCH;
                   66425:     u.bc.r.aMem = u.bc.aMx;
                   66426: #ifdef SQLITE_DEBUG
                   66427:     { int i; for(i=0; i<u.bc.r.nField; i++) assert( memIsValid(&u.bc.r.aMem[i]) ); }
                   66428: #endif
                   66429: 
                   66430:     /* Extract the value of u.bc.R from register P3. */
                   66431:     sqlite3VdbeMemIntegerify(pIn3);
                   66432:     u.bc.R = pIn3->u.i;
                   66433: 
                   66434:     /* Search the B-Tree index. If no conflicting record is found, jump
                   66435:     ** to P2. Otherwise, copy the rowid of the conflicting record to
                   66436:     ** register P3 and fall through to the next instruction.  */
                   66437:     rc = sqlite3BtreeMovetoUnpacked(u.bc.pCrsr, &u.bc.r, 0, 0, &u.bc.pCx->seekResult);
                   66438:     if( (u.bc.r.flags & UNPACKED_PREFIX_SEARCH) || u.bc.r.rowid==u.bc.R ){
                   66439:       pc = pOp->p2 - 1;
                   66440:     }else{
                   66441:       pIn3->u.i = u.bc.r.rowid;
                   66442:     }
                   66443:   }
                   66444:   break;
                   66445: }
                   66446: 
                   66447: /* Opcode: NotExists P1 P2 P3 * *
                   66448: **
                   66449: ** Use the content of register P3 as an integer key.  If a record 
                   66450: ** with that key does not exist in table of P1, then jump to P2. 
                   66451: ** If the record does exist, then fall through.  The cursor is left 
                   66452: ** pointing to the record if it exists.
                   66453: **
                   66454: ** The difference between this operation and NotFound is that this
                   66455: ** operation assumes the key is an integer and that P1 is a table whereas
                   66456: ** NotFound assumes key is a blob constructed from MakeRecord and
                   66457: ** P1 is an index.
                   66458: **
                   66459: ** See also: Found, NotFound, IsUnique
                   66460: */
                   66461: case OP_NotExists: {        /* jump, in3 */
                   66462: #if 0  /* local variables moved into u.bd */
                   66463:   VdbeCursor *pC;
                   66464:   BtCursor *pCrsr;
                   66465:   int res;
                   66466:   u64 iKey;
                   66467: #endif /* local variables moved into u.bd */
                   66468: 
                   66469:   pIn3 = &aMem[pOp->p3];
                   66470:   assert( pIn3->flags & MEM_Int );
                   66471:   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
                   66472:   u.bd.pC = p->apCsr[pOp->p1];
                   66473:   assert( u.bd.pC!=0 );
                   66474:   assert( u.bd.pC->isTable );
                   66475:   assert( u.bd.pC->pseudoTableReg==0 );
                   66476:   u.bd.pCrsr = u.bd.pC->pCursor;
                   66477:   if( u.bd.pCrsr!=0 ){
                   66478:     u.bd.res = 0;
                   66479:     u.bd.iKey = pIn3->u.i;
                   66480:     rc = sqlite3BtreeMovetoUnpacked(u.bd.pCrsr, 0, u.bd.iKey, 0, &u.bd.res);
                   66481:     u.bd.pC->lastRowid = pIn3->u.i;
                   66482:     u.bd.pC->rowidIsValid = u.bd.res==0 ?1:0;
                   66483:     u.bd.pC->nullRow = 0;
                   66484:     u.bd.pC->cacheStatus = CACHE_STALE;
                   66485:     u.bd.pC->deferredMoveto = 0;
                   66486:     if( u.bd.res!=0 ){
                   66487:       pc = pOp->p2 - 1;
                   66488:       assert( u.bd.pC->rowidIsValid==0 );
                   66489:     }
                   66490:     u.bd.pC->seekResult = u.bd.res;
                   66491:   }else{
                   66492:     /* This happens when an attempt to open a read cursor on the
                   66493:     ** sqlite_master table returns SQLITE_EMPTY.
                   66494:     */
                   66495:     pc = pOp->p2 - 1;
                   66496:     assert( u.bd.pC->rowidIsValid==0 );
                   66497:     u.bd.pC->seekResult = 0;
                   66498:   }
                   66499:   break;
                   66500: }
                   66501: 
                   66502: /* Opcode: Sequence P1 P2 * * *
                   66503: **
                   66504: ** Find the next available sequence number for cursor P1.
                   66505: ** Write the sequence number into register P2.
                   66506: ** The sequence number on the cursor is incremented after this
                   66507: ** instruction.  
                   66508: */
                   66509: case OP_Sequence: {           /* out2-prerelease */
                   66510:   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
                   66511:   assert( p->apCsr[pOp->p1]!=0 );
                   66512:   pOut->u.i = p->apCsr[pOp->p1]->seqCount++;
                   66513:   break;
                   66514: }
                   66515: 
                   66516: 
                   66517: /* Opcode: NewRowid P1 P2 P3 * *
                   66518: **
                   66519: ** Get a new integer record number (a.k.a "rowid") used as the key to a table.
                   66520: ** The record number is not previously used as a key in the database
                   66521: ** table that cursor P1 points to.  The new record number is written
                   66522: ** written to register P2.
                   66523: **
                   66524: ** If P3>0 then P3 is a register in the root frame of this VDBE that holds 
                   66525: ** the largest previously generated record number. No new record numbers are
                   66526: ** allowed to be less than this value. When this value reaches its maximum, 
                   66527: ** an SQLITE_FULL error is generated. The P3 register is updated with the '
                   66528: ** generated record number. This P3 mechanism is used to help implement the
                   66529: ** AUTOINCREMENT feature.
                   66530: */
                   66531: case OP_NewRowid: {           /* out2-prerelease */
                   66532: #if 0  /* local variables moved into u.be */
                   66533:   i64 v;                 /* The new rowid */
                   66534:   VdbeCursor *pC;        /* Cursor of table to get the new rowid */
                   66535:   int res;               /* Result of an sqlite3BtreeLast() */
                   66536:   int cnt;               /* Counter to limit the number of searches */
                   66537:   Mem *pMem;             /* Register holding largest rowid for AUTOINCREMENT */
                   66538:   VdbeFrame *pFrame;     /* Root frame of VDBE */
                   66539: #endif /* local variables moved into u.be */
                   66540: 
                   66541:   u.be.v = 0;
                   66542:   u.be.res = 0;
                   66543:   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
                   66544:   u.be.pC = p->apCsr[pOp->p1];
                   66545:   assert( u.be.pC!=0 );
                   66546:   if( NEVER(u.be.pC->pCursor==0) ){
                   66547:     /* The zero initialization above is all that is needed */
                   66548:   }else{
                   66549:     /* The next rowid or record number (different terms for the same
                   66550:     ** thing) is obtained in a two-step algorithm.
                   66551:     **
                   66552:     ** First we attempt to find the largest existing rowid and add one
                   66553:     ** to that.  But if the largest existing rowid is already the maximum
                   66554:     ** positive integer, we have to fall through to the second
                   66555:     ** probabilistic algorithm
                   66556:     **
                   66557:     ** The second algorithm is to select a rowid at random and see if
                   66558:     ** it already exists in the table.  If it does not exist, we have
                   66559:     ** succeeded.  If the random rowid does exist, we select a new one
                   66560:     ** and try again, up to 100 times.
                   66561:     */
                   66562:     assert( u.be.pC->isTable );
                   66563: 
                   66564: #ifdef SQLITE_32BIT_ROWID
                   66565: #   define MAX_ROWID 0x7fffffff
                   66566: #else
                   66567:     /* Some compilers complain about constants of the form 0x7fffffffffffffff.
                   66568:     ** Others complain about 0x7ffffffffffffffffLL.  The following macro seems
                   66569:     ** to provide the constant while making all compilers happy.
                   66570:     */
                   66571: #   define MAX_ROWID  (i64)( (((u64)0x7fffffff)<<32) | (u64)0xffffffff )
                   66572: #endif
                   66573: 
                   66574:     if( !u.be.pC->useRandomRowid ){
                   66575:       u.be.v = sqlite3BtreeGetCachedRowid(u.be.pC->pCursor);
                   66576:       if( u.be.v==0 ){
                   66577:         rc = sqlite3BtreeLast(u.be.pC->pCursor, &u.be.res);
                   66578:         if( rc!=SQLITE_OK ){
                   66579:           goto abort_due_to_error;
                   66580:         }
                   66581:         if( u.be.res ){
                   66582:           u.be.v = 1;   /* IMP: R-61914-48074 */
                   66583:         }else{
                   66584:           assert( sqlite3BtreeCursorIsValid(u.be.pC->pCursor) );
                   66585:           rc = sqlite3BtreeKeySize(u.be.pC->pCursor, &u.be.v);
                   66586:           assert( rc==SQLITE_OK );   /* Cannot fail following BtreeLast() */
                   66587:           if( u.be.v==MAX_ROWID ){
                   66588:             u.be.pC->useRandomRowid = 1;
                   66589:           }else{
                   66590:             u.be.v++;   /* IMP: R-29538-34987 */
                   66591:           }
                   66592:         }
                   66593:       }
                   66594: 
                   66595: #ifndef SQLITE_OMIT_AUTOINCREMENT
                   66596:       if( pOp->p3 ){
                   66597:         /* Assert that P3 is a valid memory cell. */
                   66598:         assert( pOp->p3>0 );
                   66599:         if( p->pFrame ){
                   66600:           for(u.be.pFrame=p->pFrame; u.be.pFrame->pParent; u.be.pFrame=u.be.pFrame->pParent);
                   66601:           /* Assert that P3 is a valid memory cell. */
                   66602:           assert( pOp->p3<=u.be.pFrame->nMem );
                   66603:           u.be.pMem = &u.be.pFrame->aMem[pOp->p3];
                   66604:         }else{
                   66605:           /* Assert that P3 is a valid memory cell. */
                   66606:           assert( pOp->p3<=p->nMem );
                   66607:           u.be.pMem = &aMem[pOp->p3];
                   66608:           memAboutToChange(p, u.be.pMem);
                   66609:         }
                   66610:         assert( memIsValid(u.be.pMem) );
                   66611: 
                   66612:         REGISTER_TRACE(pOp->p3, u.be.pMem);
                   66613:         sqlite3VdbeMemIntegerify(u.be.pMem);
                   66614:         assert( (u.be.pMem->flags & MEM_Int)!=0 );  /* mem(P3) holds an integer */
                   66615:         if( u.be.pMem->u.i==MAX_ROWID || u.be.pC->useRandomRowid ){
                   66616:           rc = SQLITE_FULL;   /* IMP: R-12275-61338 */
                   66617:           goto abort_due_to_error;
                   66618:         }
                   66619:         if( u.be.v<u.be.pMem->u.i+1 ){
                   66620:           u.be.v = u.be.pMem->u.i + 1;
                   66621:         }
                   66622:         u.be.pMem->u.i = u.be.v;
                   66623:       }
                   66624: #endif
                   66625: 
                   66626:       sqlite3BtreeSetCachedRowid(u.be.pC->pCursor, u.be.v<MAX_ROWID ? u.be.v+1 : 0);
                   66627:     }
                   66628:     if( u.be.pC->useRandomRowid ){
                   66629:       /* IMPLEMENTATION-OF: R-07677-41881 If the largest ROWID is equal to the
                   66630:       ** largest possible integer (9223372036854775807) then the database
                   66631:       ** engine starts picking positive candidate ROWIDs at random until
                   66632:       ** it finds one that is not previously used. */
                   66633:       assert( pOp->p3==0 );  /* We cannot be in random rowid mode if this is
                   66634:                              ** an AUTOINCREMENT table. */
                   66635:       /* on the first attempt, simply do one more than previous */
                   66636:       u.be.v = lastRowid;
                   66637:       u.be.v &= (MAX_ROWID>>1); /* ensure doesn't go negative */
                   66638:       u.be.v++; /* ensure non-zero */
                   66639:       u.be.cnt = 0;
                   66640:       while(   ((rc = sqlite3BtreeMovetoUnpacked(u.be.pC->pCursor, 0, (u64)u.be.v,
                   66641:                                                  0, &u.be.res))==SQLITE_OK)
                   66642:             && (u.be.res==0)
                   66643:             && (++u.be.cnt<100)){
                   66644:         /* collision - try another random rowid */
                   66645:         sqlite3_randomness(sizeof(u.be.v), &u.be.v);
                   66646:         if( u.be.cnt<5 ){
                   66647:           /* try "small" random rowids for the initial attempts */
                   66648:           u.be.v &= 0xffffff;
                   66649:         }else{
                   66650:           u.be.v &= (MAX_ROWID>>1); /* ensure doesn't go negative */
                   66651:         }
                   66652:         u.be.v++; /* ensure non-zero */
                   66653:       }
                   66654:       if( rc==SQLITE_OK && u.be.res==0 ){
                   66655:         rc = SQLITE_FULL;   /* IMP: R-38219-53002 */
                   66656:         goto abort_due_to_error;
                   66657:       }
                   66658:       assert( u.be.v>0 );  /* EV: R-40812-03570 */
                   66659:     }
                   66660:     u.be.pC->rowidIsValid = 0;
                   66661:     u.be.pC->deferredMoveto = 0;
                   66662:     u.be.pC->cacheStatus = CACHE_STALE;
                   66663:   }
                   66664:   pOut->u.i = u.be.v;
                   66665:   break;
                   66666: }
                   66667: 
                   66668: /* Opcode: Insert P1 P2 P3 P4 P5
                   66669: **
                   66670: ** Write an entry into the table of cursor P1.  A new entry is
                   66671: ** created if it doesn't already exist or the data for an existing
                   66672: ** entry is overwritten.  The data is the value MEM_Blob stored in register
                   66673: ** number P2. The key is stored in register P3. The key must
                   66674: ** be a MEM_Int.
                   66675: **
                   66676: ** If the OPFLAG_NCHANGE flag of P5 is set, then the row change count is
                   66677: ** incremented (otherwise not).  If the OPFLAG_LASTROWID flag of P5 is set,
                   66678: ** then rowid is stored for subsequent return by the
                   66679: ** sqlite3_last_insert_rowid() function (otherwise it is unmodified).
                   66680: **
                   66681: ** If the OPFLAG_USESEEKRESULT flag of P5 is set and if the result of
                   66682: ** the last seek operation (OP_NotExists) was a success, then this
                   66683: ** operation will not attempt to find the appropriate row before doing
                   66684: ** the insert but will instead overwrite the row that the cursor is
                   66685: ** currently pointing to.  Presumably, the prior OP_NotExists opcode
                   66686: ** has already positioned the cursor correctly.  This is an optimization
                   66687: ** that boosts performance by avoiding redundant seeks.
                   66688: **
                   66689: ** If the OPFLAG_ISUPDATE flag is set, then this opcode is part of an
                   66690: ** UPDATE operation.  Otherwise (if the flag is clear) then this opcode
                   66691: ** is part of an INSERT operation.  The difference is only important to
                   66692: ** the update hook.
                   66693: **
                   66694: ** Parameter P4 may point to a string containing the table-name, or
                   66695: ** may be NULL. If it is not NULL, then the update-hook 
                   66696: ** (sqlite3.xUpdateCallback) is invoked following a successful insert.
                   66697: **
                   66698: ** (WARNING/TODO: If P1 is a pseudo-cursor and P2 is dynamically
                   66699: ** allocated, then ownership of P2 is transferred to the pseudo-cursor
                   66700: ** and register P2 becomes ephemeral.  If the cursor is changed, the
                   66701: ** value of register P2 will then change.  Make sure this does not
                   66702: ** cause any problems.)
                   66703: **
                   66704: ** This instruction only works on tables.  The equivalent instruction
                   66705: ** for indices is OP_IdxInsert.
                   66706: */
                   66707: /* Opcode: InsertInt P1 P2 P3 P4 P5
                   66708: **
                   66709: ** This works exactly like OP_Insert except that the key is the
                   66710: ** integer value P3, not the value of the integer stored in register P3.
                   66711: */
                   66712: case OP_Insert: 
                   66713: case OP_InsertInt: {
                   66714: #if 0  /* local variables moved into u.bf */
                   66715:   Mem *pData;       /* MEM cell holding data for the record to be inserted */
                   66716:   Mem *pKey;        /* MEM cell holding key  for the record */
                   66717:   i64 iKey;         /* The integer ROWID or key for the record to be inserted */
                   66718:   VdbeCursor *pC;   /* Cursor to table into which insert is written */
                   66719:   int nZero;        /* Number of zero-bytes to append */
                   66720:   int seekResult;   /* Result of prior seek or 0 if no USESEEKRESULT flag */
                   66721:   const char *zDb;  /* database name - used by the update hook */
                   66722:   const char *zTbl; /* Table name - used by the opdate hook */
                   66723:   int op;           /* Opcode for update hook: SQLITE_UPDATE or SQLITE_INSERT */
                   66724: #endif /* local variables moved into u.bf */
                   66725: 
                   66726:   u.bf.pData = &aMem[pOp->p2];
                   66727:   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
                   66728:   assert( memIsValid(u.bf.pData) );
                   66729:   u.bf.pC = p->apCsr[pOp->p1];
                   66730:   assert( u.bf.pC!=0 );
                   66731:   assert( u.bf.pC->pCursor!=0 );
                   66732:   assert( u.bf.pC->pseudoTableReg==0 );
                   66733:   assert( u.bf.pC->isTable );
                   66734:   REGISTER_TRACE(pOp->p2, u.bf.pData);
                   66735: 
                   66736:   if( pOp->opcode==OP_Insert ){
                   66737:     u.bf.pKey = &aMem[pOp->p3];
                   66738:     assert( u.bf.pKey->flags & MEM_Int );
                   66739:     assert( memIsValid(u.bf.pKey) );
                   66740:     REGISTER_TRACE(pOp->p3, u.bf.pKey);
                   66741:     u.bf.iKey = u.bf.pKey->u.i;
                   66742:   }else{
                   66743:     assert( pOp->opcode==OP_InsertInt );
                   66744:     u.bf.iKey = pOp->p3;
                   66745:   }
                   66746: 
                   66747:   if( pOp->p5 & OPFLAG_NCHANGE ) p->nChange++;
                   66748:   if( pOp->p5 & OPFLAG_LASTROWID ) db->lastRowid = lastRowid = u.bf.iKey;
                   66749:   if( u.bf.pData->flags & MEM_Null ){
                   66750:     u.bf.pData->z = 0;
                   66751:     u.bf.pData->n = 0;
                   66752:   }else{
                   66753:     assert( u.bf.pData->flags & (MEM_Blob|MEM_Str) );
                   66754:   }
                   66755:   u.bf.seekResult = ((pOp->p5 & OPFLAG_USESEEKRESULT) ? u.bf.pC->seekResult : 0);
                   66756:   if( u.bf.pData->flags & MEM_Zero ){
                   66757:     u.bf.nZero = u.bf.pData->u.nZero;
                   66758:   }else{
                   66759:     u.bf.nZero = 0;
                   66760:   }
                   66761:   sqlite3BtreeSetCachedRowid(u.bf.pC->pCursor, 0);
                   66762:   rc = sqlite3BtreeInsert(u.bf.pC->pCursor, 0, u.bf.iKey,
                   66763:                           u.bf.pData->z, u.bf.pData->n, u.bf.nZero,
                   66764:                           pOp->p5 & OPFLAG_APPEND, u.bf.seekResult
                   66765:   );
                   66766:   u.bf.pC->rowidIsValid = 0;
                   66767:   u.bf.pC->deferredMoveto = 0;
                   66768:   u.bf.pC->cacheStatus = CACHE_STALE;
                   66769: 
                   66770:   /* Invoke the update-hook if required. */
                   66771:   if( rc==SQLITE_OK && db->xUpdateCallback && pOp->p4.z ){
                   66772:     u.bf.zDb = db->aDb[u.bf.pC->iDb].zName;
                   66773:     u.bf.zTbl = pOp->p4.z;
                   66774:     u.bf.op = ((pOp->p5 & OPFLAG_ISUPDATE) ? SQLITE_UPDATE : SQLITE_INSERT);
                   66775:     assert( u.bf.pC->isTable );
                   66776:     db->xUpdateCallback(db->pUpdateArg, u.bf.op, u.bf.zDb, u.bf.zTbl, u.bf.iKey);
                   66777:     assert( u.bf.pC->iDb>=0 );
                   66778:   }
                   66779:   break;
                   66780: }
                   66781: 
                   66782: /* Opcode: Delete P1 P2 * P4 *
                   66783: **
                   66784: ** Delete the record at which the P1 cursor is currently pointing.
                   66785: **
                   66786: ** The cursor will be left pointing at either the next or the previous
                   66787: ** record in the table. If it is left pointing at the next record, then
                   66788: ** the next Next instruction will be a no-op.  Hence it is OK to delete
                   66789: ** a record from within an Next loop.
                   66790: **
                   66791: ** If the OPFLAG_NCHANGE flag of P2 is set, then the row change count is
                   66792: ** incremented (otherwise not).
                   66793: **
                   66794: ** P1 must not be pseudo-table.  It has to be a real table with
                   66795: ** multiple rows.
                   66796: **
                   66797: ** If P4 is not NULL, then it is the name of the table that P1 is
                   66798: ** pointing to.  The update hook will be invoked, if it exists.
                   66799: ** If P4 is not NULL then the P1 cursor must have been positioned
                   66800: ** using OP_NotFound prior to invoking this opcode.
                   66801: */
                   66802: case OP_Delete: {
                   66803: #if 0  /* local variables moved into u.bg */
                   66804:   i64 iKey;
                   66805:   VdbeCursor *pC;
                   66806: #endif /* local variables moved into u.bg */
                   66807: 
                   66808:   u.bg.iKey = 0;
                   66809:   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
                   66810:   u.bg.pC = p->apCsr[pOp->p1];
                   66811:   assert( u.bg.pC!=0 );
                   66812:   assert( u.bg.pC->pCursor!=0 );  /* Only valid for real tables, no pseudotables */
                   66813: 
                   66814:   /* If the update-hook will be invoked, set u.bg.iKey to the rowid of the
                   66815:   ** row being deleted.
                   66816:   */
                   66817:   if( db->xUpdateCallback && pOp->p4.z ){
                   66818:     assert( u.bg.pC->isTable );
                   66819:     assert( u.bg.pC->rowidIsValid );  /* lastRowid set by previous OP_NotFound */
                   66820:     u.bg.iKey = u.bg.pC->lastRowid;
                   66821:   }
                   66822: 
                   66823:   /* The OP_Delete opcode always follows an OP_NotExists or OP_Last or
                   66824:   ** OP_Column on the same table without any intervening operations that
                   66825:   ** might move or invalidate the cursor.  Hence cursor u.bg.pC is always pointing
                   66826:   ** to the row to be deleted and the sqlite3VdbeCursorMoveto() operation
                   66827:   ** below is always a no-op and cannot fail.  We will run it anyhow, though,
                   66828:   ** to guard against future changes to the code generator.
                   66829:   **/
                   66830:   assert( u.bg.pC->deferredMoveto==0 );
                   66831:   rc = sqlite3VdbeCursorMoveto(u.bg.pC);
                   66832:   if( NEVER(rc!=SQLITE_OK) ) goto abort_due_to_error;
                   66833: 
                   66834:   sqlite3BtreeSetCachedRowid(u.bg.pC->pCursor, 0);
                   66835:   rc = sqlite3BtreeDelete(u.bg.pC->pCursor);
                   66836:   u.bg.pC->cacheStatus = CACHE_STALE;
                   66837: 
                   66838:   /* Invoke the update-hook if required. */
                   66839:   if( rc==SQLITE_OK && db->xUpdateCallback && pOp->p4.z ){
                   66840:     const char *zDb = db->aDb[u.bg.pC->iDb].zName;
                   66841:     const char *zTbl = pOp->p4.z;
                   66842:     db->xUpdateCallback(db->pUpdateArg, SQLITE_DELETE, zDb, zTbl, u.bg.iKey);
                   66843:     assert( u.bg.pC->iDb>=0 );
                   66844:   }
                   66845:   if( pOp->p2 & OPFLAG_NCHANGE ) p->nChange++;
                   66846:   break;
                   66847: }
                   66848: /* Opcode: ResetCount * * * * *
                   66849: **
                   66850: ** The value of the change counter is copied to the database handle
                   66851: ** change counter (returned by subsequent calls to sqlite3_changes()).
                   66852: ** Then the VMs internal change counter resets to 0.
                   66853: ** This is used by trigger programs.
                   66854: */
                   66855: case OP_ResetCount: {
                   66856:   sqlite3VdbeSetChanges(db, p->nChange);
                   66857:   p->nChange = 0;
                   66858:   break;
                   66859: }
                   66860: 
                   66861: /* Opcode: RowData P1 P2 * * *
                   66862: **
                   66863: ** Write into register P2 the complete row data for cursor P1.
                   66864: ** There is no interpretation of the data.  
                   66865: ** It is just copied onto the P2 register exactly as 
                   66866: ** it is found in the database file.
                   66867: **
                   66868: ** If the P1 cursor must be pointing to a valid row (not a NULL row)
                   66869: ** of a real table, not a pseudo-table.
                   66870: */
                   66871: /* Opcode: RowKey P1 P2 * * *
                   66872: **
                   66873: ** Write into register P2 the complete row key for cursor P1.
                   66874: ** There is no interpretation of the data.  
                   66875: ** The key is copied onto the P3 register exactly as 
                   66876: ** it is found in the database file.
                   66877: **
                   66878: ** If the P1 cursor must be pointing to a valid row (not a NULL row)
                   66879: ** of a real table, not a pseudo-table.
                   66880: */
                   66881: case OP_RowKey:
                   66882: case OP_RowData: {
                   66883: #if 0  /* local variables moved into u.bh */
                   66884:   VdbeCursor *pC;
                   66885:   BtCursor *pCrsr;
                   66886:   u32 n;
                   66887:   i64 n64;
                   66888: #endif /* local variables moved into u.bh */
                   66889: 
                   66890:   pOut = &aMem[pOp->p2];
                   66891:   memAboutToChange(p, pOut);
                   66892: 
                   66893:   /* Note that RowKey and RowData are really exactly the same instruction */
                   66894:   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
                   66895:   u.bh.pC = p->apCsr[pOp->p1];
                   66896:   assert( u.bh.pC->isTable || pOp->opcode==OP_RowKey );
                   66897:   assert( u.bh.pC->isIndex || pOp->opcode==OP_RowData );
                   66898:   assert( u.bh.pC!=0 );
                   66899:   assert( u.bh.pC->nullRow==0 );
                   66900:   assert( u.bh.pC->pseudoTableReg==0 );
                   66901:   assert( u.bh.pC->pCursor!=0 );
                   66902:   u.bh.pCrsr = u.bh.pC->pCursor;
                   66903:   assert( sqlite3BtreeCursorIsValid(u.bh.pCrsr) );
                   66904: 
                   66905:   /* The OP_RowKey and OP_RowData opcodes always follow OP_NotExists or
                   66906:   ** OP_Rewind/Op_Next with no intervening instructions that might invalidate
                   66907:   ** the cursor.  Hence the following sqlite3VdbeCursorMoveto() call is always
                   66908:   ** a no-op and can never fail.  But we leave it in place as a safety.
                   66909:   */
                   66910:   assert( u.bh.pC->deferredMoveto==0 );
                   66911:   rc = sqlite3VdbeCursorMoveto(u.bh.pC);
                   66912:   if( NEVER(rc!=SQLITE_OK) ) goto abort_due_to_error;
                   66913: 
                   66914:   if( u.bh.pC->isIndex ){
                   66915:     assert( !u.bh.pC->isTable );
                   66916:     rc = sqlite3BtreeKeySize(u.bh.pCrsr, &u.bh.n64);
                   66917:     assert( rc==SQLITE_OK );    /* True because of CursorMoveto() call above */
                   66918:     if( u.bh.n64>db->aLimit[SQLITE_LIMIT_LENGTH] ){
                   66919:       goto too_big;
                   66920:     }
                   66921:     u.bh.n = (u32)u.bh.n64;
                   66922:   }else{
                   66923:     rc = sqlite3BtreeDataSize(u.bh.pCrsr, &u.bh.n);
                   66924:     assert( rc==SQLITE_OK );    /* DataSize() cannot fail */
                   66925:     if( u.bh.n>(u32)db->aLimit[SQLITE_LIMIT_LENGTH] ){
                   66926:       goto too_big;
                   66927:     }
                   66928:   }
                   66929:   if( sqlite3VdbeMemGrow(pOut, u.bh.n, 0) ){
                   66930:     goto no_mem;
                   66931:   }
                   66932:   pOut->n = u.bh.n;
                   66933:   MemSetTypeFlag(pOut, MEM_Blob);
                   66934:   if( u.bh.pC->isIndex ){
                   66935:     rc = sqlite3BtreeKey(u.bh.pCrsr, 0, u.bh.n, pOut->z);
                   66936:   }else{
                   66937:     rc = sqlite3BtreeData(u.bh.pCrsr, 0, u.bh.n, pOut->z);
                   66938:   }
                   66939:   pOut->enc = SQLITE_UTF8;  /* In case the blob is ever cast to text */
                   66940:   UPDATE_MAX_BLOBSIZE(pOut);
                   66941:   break;
                   66942: }
                   66943: 
                   66944: /* Opcode: Rowid P1 P2 * * *
                   66945: **
                   66946: ** Store in register P2 an integer which is the key of the table entry that
                   66947: ** P1 is currently point to.
                   66948: **
                   66949: ** P1 can be either an ordinary table or a virtual table.  There used to
                   66950: ** be a separate OP_VRowid opcode for use with virtual tables, but this
                   66951: ** one opcode now works for both table types.
                   66952: */
                   66953: case OP_Rowid: {                 /* out2-prerelease */
                   66954: #if 0  /* local variables moved into u.bi */
                   66955:   VdbeCursor *pC;
                   66956:   i64 v;
                   66957:   sqlite3_vtab *pVtab;
                   66958:   const sqlite3_module *pModule;
                   66959: #endif /* local variables moved into u.bi */
                   66960: 
                   66961:   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
                   66962:   u.bi.pC = p->apCsr[pOp->p1];
                   66963:   assert( u.bi.pC!=0 );
                   66964:   assert( u.bi.pC->pseudoTableReg==0 );
                   66965:   if( u.bi.pC->nullRow ){
                   66966:     pOut->flags = MEM_Null;
                   66967:     break;
                   66968:   }else if( u.bi.pC->deferredMoveto ){
                   66969:     u.bi.v = u.bi.pC->movetoTarget;
                   66970: #ifndef SQLITE_OMIT_VIRTUALTABLE
                   66971:   }else if( u.bi.pC->pVtabCursor ){
                   66972:     u.bi.pVtab = u.bi.pC->pVtabCursor->pVtab;
                   66973:     u.bi.pModule = u.bi.pVtab->pModule;
                   66974:     assert( u.bi.pModule->xRowid );
                   66975:     rc = u.bi.pModule->xRowid(u.bi.pC->pVtabCursor, &u.bi.v);
                   66976:     importVtabErrMsg(p, u.bi.pVtab);
                   66977: #endif /* SQLITE_OMIT_VIRTUALTABLE */
                   66978:   }else{
                   66979:     assert( u.bi.pC->pCursor!=0 );
                   66980:     rc = sqlite3VdbeCursorMoveto(u.bi.pC);
                   66981:     if( rc ) goto abort_due_to_error;
                   66982:     if( u.bi.pC->rowidIsValid ){
                   66983:       u.bi.v = u.bi.pC->lastRowid;
                   66984:     }else{
                   66985:       rc = sqlite3BtreeKeySize(u.bi.pC->pCursor, &u.bi.v);
                   66986:       assert( rc==SQLITE_OK );  /* Always so because of CursorMoveto() above */
                   66987:     }
                   66988:   }
                   66989:   pOut->u.i = u.bi.v;
                   66990:   break;
                   66991: }
                   66992: 
                   66993: /* Opcode: NullRow P1 * * * *
                   66994: **
                   66995: ** Move the cursor P1 to a null row.  Any OP_Column operations
                   66996: ** that occur while the cursor is on the null row will always
                   66997: ** write a NULL.
                   66998: */
                   66999: case OP_NullRow: {
                   67000: #if 0  /* local variables moved into u.bj */
                   67001:   VdbeCursor *pC;
                   67002: #endif /* local variables moved into u.bj */
                   67003: 
                   67004:   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
                   67005:   u.bj.pC = p->apCsr[pOp->p1];
                   67006:   assert( u.bj.pC!=0 );
                   67007:   u.bj.pC->nullRow = 1;
                   67008:   u.bj.pC->rowidIsValid = 0;
                   67009:   if( u.bj.pC->pCursor ){
                   67010:     sqlite3BtreeClearCursor(u.bj.pC->pCursor);
                   67011:   }
                   67012:   break;
                   67013: }
                   67014: 
                   67015: /* Opcode: Last P1 P2 * * *
                   67016: **
                   67017: ** The next use of the Rowid or Column or Next instruction for P1 
                   67018: ** will refer to the last entry in the database table or index.
                   67019: ** If the table or index is empty and P2>0, then jump immediately to P2.
                   67020: ** If P2 is 0 or if the table or index is not empty, fall through
                   67021: ** to the following instruction.
                   67022: */
                   67023: case OP_Last: {        /* jump */
                   67024: #if 0  /* local variables moved into u.bk */
                   67025:   VdbeCursor *pC;
                   67026:   BtCursor *pCrsr;
                   67027:   int res;
                   67028: #endif /* local variables moved into u.bk */
                   67029: 
                   67030:   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
                   67031:   u.bk.pC = p->apCsr[pOp->p1];
                   67032:   assert( u.bk.pC!=0 );
                   67033:   u.bk.pCrsr = u.bk.pC->pCursor;
                   67034:   if( u.bk.pCrsr==0 ){
                   67035:     u.bk.res = 1;
                   67036:   }else{
                   67037:     rc = sqlite3BtreeLast(u.bk.pCrsr, &u.bk.res);
                   67038:   }
                   67039:   u.bk.pC->nullRow = (u8)u.bk.res;
                   67040:   u.bk.pC->deferredMoveto = 0;
                   67041:   u.bk.pC->rowidIsValid = 0;
                   67042:   u.bk.pC->cacheStatus = CACHE_STALE;
                   67043:   if( pOp->p2>0 && u.bk.res ){
                   67044:     pc = pOp->p2 - 1;
                   67045:   }
                   67046:   break;
                   67047: }
                   67048: 
                   67049: 
                   67050: /* Opcode: Sort P1 P2 * * *
                   67051: **
                   67052: ** This opcode does exactly the same thing as OP_Rewind except that
                   67053: ** it increments an undocumented global variable used for testing.
                   67054: **
                   67055: ** Sorting is accomplished by writing records into a sorting index,
                   67056: ** then rewinding that index and playing it back from beginning to
                   67057: ** end.  We use the OP_Sort opcode instead of OP_Rewind to do the
                   67058: ** rewinding so that the global variable will be incremented and
                   67059: ** regression tests can determine whether or not the optimizer is
                   67060: ** correctly optimizing out sorts.
                   67061: */
                   67062: case OP_Sort: {        /* jump */
                   67063: #ifdef SQLITE_TEST
                   67064:   sqlite3_sort_count++;
                   67065:   sqlite3_search_count--;
                   67066: #endif
                   67067:   p->aCounter[SQLITE_STMTSTATUS_SORT-1]++;
                   67068:   /* Fall through into OP_Rewind */
                   67069: }
                   67070: /* Opcode: Rewind P1 P2 * * *
                   67071: **
                   67072: ** The next use of the Rowid or Column or Next instruction for P1 
                   67073: ** will refer to the first entry in the database table or index.
                   67074: ** If the table or index is empty and P2>0, then jump immediately to P2.
                   67075: ** If P2 is 0 or if the table or index is not empty, fall through
                   67076: ** to the following instruction.
                   67077: */
                   67078: case OP_Rewind: {        /* jump */
                   67079: #if 0  /* local variables moved into u.bl */
                   67080:   VdbeCursor *pC;
                   67081:   BtCursor *pCrsr;
                   67082:   int res;
                   67083: #endif /* local variables moved into u.bl */
                   67084: 
                   67085:   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
                   67086:   u.bl.pC = p->apCsr[pOp->p1];
                   67087:   assert( u.bl.pC!=0 );
                   67088:   u.bl.res = 1;
                   67089:   if( (u.bl.pCrsr = u.bl.pC->pCursor)!=0 ){
                   67090:     rc = sqlite3BtreeFirst(u.bl.pCrsr, &u.bl.res);
                   67091:     u.bl.pC->atFirst = u.bl.res==0 ?1:0;
                   67092:     u.bl.pC->deferredMoveto = 0;
                   67093:     u.bl.pC->cacheStatus = CACHE_STALE;
                   67094:     u.bl.pC->rowidIsValid = 0;
                   67095:   }
                   67096:   u.bl.pC->nullRow = (u8)u.bl.res;
                   67097:   assert( pOp->p2>0 && pOp->p2<p->nOp );
                   67098:   if( u.bl.res ){
                   67099:     pc = pOp->p2 - 1;
                   67100:   }
                   67101:   break;
                   67102: }
                   67103: 
                   67104: /* Opcode: Next P1 P2 * * P5
                   67105: **
                   67106: ** Advance cursor P1 so that it points to the next key/data pair in its
                   67107: ** table or index.  If there are no more key/value pairs then fall through
                   67108: ** to the following instruction.  But if the cursor advance was successful,
                   67109: ** jump immediately to P2.
                   67110: **
                   67111: ** The P1 cursor must be for a real table, not a pseudo-table.
                   67112: **
                   67113: ** If P5 is positive and the jump is taken, then event counter
                   67114: ** number P5-1 in the prepared statement is incremented.
                   67115: **
                   67116: ** See also: Prev
                   67117: */
                   67118: /* Opcode: Prev P1 P2 * * P5
                   67119: **
                   67120: ** Back up cursor P1 so that it points to the previous key/data pair in its
                   67121: ** table or index.  If there is no previous key/value pairs then fall through
                   67122: ** to the following instruction.  But if the cursor backup was successful,
                   67123: ** jump immediately to P2.
                   67124: **
                   67125: ** The P1 cursor must be for a real table, not a pseudo-table.
                   67126: **
                   67127: ** If P5 is positive and the jump is taken, then event counter
                   67128: ** number P5-1 in the prepared statement is incremented.
                   67129: */
                   67130: case OP_Prev:          /* jump */
                   67131: case OP_Next: {        /* jump */
                   67132: #if 0  /* local variables moved into u.bm */
                   67133:   VdbeCursor *pC;
                   67134:   BtCursor *pCrsr;
                   67135:   int res;
                   67136: #endif /* local variables moved into u.bm */
                   67137: 
                   67138:   CHECK_FOR_INTERRUPT;
                   67139:   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
                   67140:   assert( pOp->p5<=ArraySize(p->aCounter) );
                   67141:   u.bm.pC = p->apCsr[pOp->p1];
                   67142:   if( u.bm.pC==0 ){
                   67143:     break;  /* See ticket #2273 */
                   67144:   }
                   67145:   u.bm.pCrsr = u.bm.pC->pCursor;
                   67146:   if( u.bm.pCrsr==0 ){
                   67147:     u.bm.pC->nullRow = 1;
                   67148:     break;
                   67149:   }
                   67150:   u.bm.res = 1;
                   67151:   assert( u.bm.pC->deferredMoveto==0 );
                   67152:   rc = pOp->opcode==OP_Next ? sqlite3BtreeNext(u.bm.pCrsr, &u.bm.res) :
                   67153:                               sqlite3BtreePrevious(u.bm.pCrsr, &u.bm.res);
                   67154:   u.bm.pC->nullRow = (u8)u.bm.res;
                   67155:   u.bm.pC->cacheStatus = CACHE_STALE;
                   67156:   if( u.bm.res==0 ){
                   67157:     pc = pOp->p2 - 1;
                   67158:     if( pOp->p5 ) p->aCounter[pOp->p5-1]++;
                   67159: #ifdef SQLITE_TEST
                   67160:     sqlite3_search_count++;
                   67161: #endif
                   67162:   }
                   67163:   u.bm.pC->rowidIsValid = 0;
                   67164:   break;
                   67165: }
                   67166: 
                   67167: /* Opcode: IdxInsert P1 P2 P3 * P5
                   67168: **
                   67169: ** Register P2 holds an SQL index key made using the
                   67170: ** MakeRecord instructions.  This opcode writes that key
                   67171: ** into the index P1.  Data for the entry is nil.
                   67172: **
                   67173: ** P3 is a flag that provides a hint to the b-tree layer that this
                   67174: ** insert is likely to be an append.
                   67175: **
                   67176: ** This instruction only works for indices.  The equivalent instruction
                   67177: ** for tables is OP_Insert.
                   67178: */
                   67179: case OP_IdxInsert: {        /* in2 */
                   67180: #if 0  /* local variables moved into u.bn */
                   67181:   VdbeCursor *pC;
                   67182:   BtCursor *pCrsr;
                   67183:   int nKey;
                   67184:   const char *zKey;
                   67185: #endif /* local variables moved into u.bn */
                   67186: 
                   67187:   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
                   67188:   u.bn.pC = p->apCsr[pOp->p1];
                   67189:   assert( u.bn.pC!=0 );
                   67190:   pIn2 = &aMem[pOp->p2];
                   67191:   assert( pIn2->flags & MEM_Blob );
                   67192:   u.bn.pCrsr = u.bn.pC->pCursor;
                   67193:   if( ALWAYS(u.bn.pCrsr!=0) ){
                   67194:     assert( u.bn.pC->isTable==0 );
                   67195:     rc = ExpandBlob(pIn2);
                   67196:     if( rc==SQLITE_OK ){
                   67197:       u.bn.nKey = pIn2->n;
                   67198:       u.bn.zKey = pIn2->z;
                   67199:       rc = sqlite3BtreeInsert(u.bn.pCrsr, u.bn.zKey, u.bn.nKey, "", 0, 0, pOp->p3,
                   67200:           ((pOp->p5 & OPFLAG_USESEEKRESULT) ? u.bn.pC->seekResult : 0)
                   67201:       );
                   67202:       assert( u.bn.pC->deferredMoveto==0 );
                   67203:       u.bn.pC->cacheStatus = CACHE_STALE;
                   67204:     }
                   67205:   }
                   67206:   break;
                   67207: }
                   67208: 
                   67209: /* Opcode: IdxDelete P1 P2 P3 * *
                   67210: **
                   67211: ** The content of P3 registers starting at register P2 form
                   67212: ** an unpacked index key. This opcode removes that entry from the 
                   67213: ** index opened by cursor P1.
                   67214: */
                   67215: case OP_IdxDelete: {
                   67216: #if 0  /* local variables moved into u.bo */
                   67217:   VdbeCursor *pC;
                   67218:   BtCursor *pCrsr;
                   67219:   int res;
                   67220:   UnpackedRecord r;
                   67221: #endif /* local variables moved into u.bo */
                   67222: 
                   67223:   assert( pOp->p3>0 );
                   67224:   assert( pOp->p2>0 && pOp->p2+pOp->p3<=p->nMem+1 );
                   67225:   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
                   67226:   u.bo.pC = p->apCsr[pOp->p1];
                   67227:   assert( u.bo.pC!=0 );
                   67228:   u.bo.pCrsr = u.bo.pC->pCursor;
                   67229:   if( ALWAYS(u.bo.pCrsr!=0) ){
                   67230:     u.bo.r.pKeyInfo = u.bo.pC->pKeyInfo;
                   67231:     u.bo.r.nField = (u16)pOp->p3;
                   67232:     u.bo.r.flags = 0;
                   67233:     u.bo.r.aMem = &aMem[pOp->p2];
                   67234: #ifdef SQLITE_DEBUG
                   67235:     { int i; for(i=0; i<u.bo.r.nField; i++) assert( memIsValid(&u.bo.r.aMem[i]) ); }
                   67236: #endif
                   67237:     rc = sqlite3BtreeMovetoUnpacked(u.bo.pCrsr, &u.bo.r, 0, 0, &u.bo.res);
                   67238:     if( rc==SQLITE_OK && u.bo.res==0 ){
                   67239:       rc = sqlite3BtreeDelete(u.bo.pCrsr);
                   67240:     }
                   67241:     assert( u.bo.pC->deferredMoveto==0 );
                   67242:     u.bo.pC->cacheStatus = CACHE_STALE;
                   67243:   }
                   67244:   break;
                   67245: }
                   67246: 
                   67247: /* Opcode: IdxRowid P1 P2 * * *
                   67248: **
                   67249: ** Write into register P2 an integer which is the last entry in the record at
                   67250: ** the end of the index key pointed to by cursor P1.  This integer should be
                   67251: ** the rowid of the table entry to which this index entry points.
                   67252: **
                   67253: ** See also: Rowid, MakeRecord.
                   67254: */
                   67255: case OP_IdxRowid: {              /* out2-prerelease */
                   67256: #if 0  /* local variables moved into u.bp */
                   67257:   BtCursor *pCrsr;
                   67258:   VdbeCursor *pC;
                   67259:   i64 rowid;
                   67260: #endif /* local variables moved into u.bp */
                   67261: 
                   67262:   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
                   67263:   u.bp.pC = p->apCsr[pOp->p1];
                   67264:   assert( u.bp.pC!=0 );
                   67265:   u.bp.pCrsr = u.bp.pC->pCursor;
                   67266:   pOut->flags = MEM_Null;
                   67267:   if( ALWAYS(u.bp.pCrsr!=0) ){
                   67268:     rc = sqlite3VdbeCursorMoveto(u.bp.pC);
                   67269:     if( NEVER(rc) ) goto abort_due_to_error;
                   67270:     assert( u.bp.pC->deferredMoveto==0 );
                   67271:     assert( u.bp.pC->isTable==0 );
                   67272:     if( !u.bp.pC->nullRow ){
                   67273:       rc = sqlite3VdbeIdxRowid(db, u.bp.pCrsr, &u.bp.rowid);
                   67274:       if( rc!=SQLITE_OK ){
                   67275:         goto abort_due_to_error;
                   67276:       }
                   67277:       pOut->u.i = u.bp.rowid;
                   67278:       pOut->flags = MEM_Int;
                   67279:     }
                   67280:   }
                   67281:   break;
                   67282: }
                   67283: 
                   67284: /* Opcode: IdxGE P1 P2 P3 P4 P5
                   67285: **
                   67286: ** The P4 register values beginning with P3 form an unpacked index 
                   67287: ** key that omits the ROWID.  Compare this key value against the index 
                   67288: ** that P1 is currently pointing to, ignoring the ROWID on the P1 index.
                   67289: **
                   67290: ** If the P1 index entry is greater than or equal to the key value
                   67291: ** then jump to P2.  Otherwise fall through to the next instruction.
                   67292: **
                   67293: ** If P5 is non-zero then the key value is increased by an epsilon 
                   67294: ** prior to the comparison.  This make the opcode work like IdxGT except
                   67295: ** that if the key from register P3 is a prefix of the key in the cursor,
                   67296: ** the result is false whereas it would be true with IdxGT.
                   67297: */
                   67298: /* Opcode: IdxLT P1 P2 P3 P4 P5
                   67299: **
                   67300: ** The P4 register values beginning with P3 form an unpacked index 
                   67301: ** key that omits the ROWID.  Compare this key value against the index 
                   67302: ** that P1 is currently pointing to, ignoring the ROWID on the P1 index.
                   67303: **
                   67304: ** If the P1 index entry is less than the key value then jump to P2.
                   67305: ** Otherwise fall through to the next instruction.
                   67306: **
                   67307: ** If P5 is non-zero then the key value is increased by an epsilon prior 
                   67308: ** to the comparison.  This makes the opcode work like IdxLE.
                   67309: */
                   67310: case OP_IdxLT:          /* jump */
                   67311: case OP_IdxGE: {        /* jump */
                   67312: #if 0  /* local variables moved into u.bq */
                   67313:   VdbeCursor *pC;
                   67314:   int res;
                   67315:   UnpackedRecord r;
                   67316: #endif /* local variables moved into u.bq */
                   67317: 
                   67318:   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
                   67319:   u.bq.pC = p->apCsr[pOp->p1];
                   67320:   assert( u.bq.pC!=0 );
                   67321:   assert( u.bq.pC->isOrdered );
                   67322:   if( ALWAYS(u.bq.pC->pCursor!=0) ){
                   67323:     assert( u.bq.pC->deferredMoveto==0 );
                   67324:     assert( pOp->p5==0 || pOp->p5==1 );
                   67325:     assert( pOp->p4type==P4_INT32 );
                   67326:     u.bq.r.pKeyInfo = u.bq.pC->pKeyInfo;
                   67327:     u.bq.r.nField = (u16)pOp->p4.i;
                   67328:     if( pOp->p5 ){
                   67329:       u.bq.r.flags = UNPACKED_INCRKEY | UNPACKED_IGNORE_ROWID;
                   67330:     }else{
                   67331:       u.bq.r.flags = UNPACKED_IGNORE_ROWID;
                   67332:     }
                   67333:     u.bq.r.aMem = &aMem[pOp->p3];
                   67334: #ifdef SQLITE_DEBUG
                   67335:     { int i; for(i=0; i<u.bq.r.nField; i++) assert( memIsValid(&u.bq.r.aMem[i]) ); }
                   67336: #endif
                   67337:     rc = sqlite3VdbeIdxKeyCompare(u.bq.pC, &u.bq.r, &u.bq.res);
                   67338:     if( pOp->opcode==OP_IdxLT ){
                   67339:       u.bq.res = -u.bq.res;
                   67340:     }else{
                   67341:       assert( pOp->opcode==OP_IdxGE );
                   67342:       u.bq.res++;
                   67343:     }
                   67344:     if( u.bq.res>0 ){
                   67345:       pc = pOp->p2 - 1 ;
                   67346:     }
                   67347:   }
                   67348:   break;
                   67349: }
                   67350: 
                   67351: /* Opcode: Destroy P1 P2 P3 * *
                   67352: **
                   67353: ** Delete an entire database table or index whose root page in the database
                   67354: ** file is given by P1.
                   67355: **
                   67356: ** The table being destroyed is in the main database file if P3==0.  If
                   67357: ** P3==1 then the table to be clear is in the auxiliary database file
                   67358: ** that is used to store tables create using CREATE TEMPORARY TABLE.
                   67359: **
                   67360: ** If AUTOVACUUM is enabled then it is possible that another root page
                   67361: ** might be moved into the newly deleted root page in order to keep all
                   67362: ** root pages contiguous at the beginning of the database.  The former
                   67363: ** value of the root page that moved - its value before the move occurred -
                   67364: ** is stored in register P2.  If no page 
                   67365: ** movement was required (because the table being dropped was already 
                   67366: ** the last one in the database) then a zero is stored in register P2.
                   67367: ** If AUTOVACUUM is disabled then a zero is stored in register P2.
                   67368: **
                   67369: ** See also: Clear
                   67370: */
                   67371: case OP_Destroy: {     /* out2-prerelease */
                   67372: #if 0  /* local variables moved into u.br */
                   67373:   int iMoved;
                   67374:   int iCnt;
                   67375:   Vdbe *pVdbe;
                   67376:   int iDb;
                   67377: #endif /* local variables moved into u.br */
                   67378: #ifndef SQLITE_OMIT_VIRTUALTABLE
                   67379:   u.br.iCnt = 0;
                   67380:   for(u.br.pVdbe=db->pVdbe; u.br.pVdbe; u.br.pVdbe = u.br.pVdbe->pNext){
                   67381:     if( u.br.pVdbe->magic==VDBE_MAGIC_RUN && u.br.pVdbe->inVtabMethod<2 && u.br.pVdbe->pc>=0 ){
                   67382:       u.br.iCnt++;
                   67383:     }
                   67384:   }
                   67385: #else
                   67386:   u.br.iCnt = db->activeVdbeCnt;
                   67387: #endif
                   67388:   pOut->flags = MEM_Null;
                   67389:   if( u.br.iCnt>1 ){
                   67390:     rc = SQLITE_LOCKED;
                   67391:     p->errorAction = OE_Abort;
                   67392:   }else{
                   67393:     u.br.iDb = pOp->p3;
                   67394:     assert( u.br.iCnt==1 );
                   67395:     assert( (p->btreeMask & (((yDbMask)1)<<u.br.iDb))!=0 );
                   67396:     rc = sqlite3BtreeDropTable(db->aDb[u.br.iDb].pBt, pOp->p1, &u.br.iMoved);
                   67397:     pOut->flags = MEM_Int;
                   67398:     pOut->u.i = u.br.iMoved;
                   67399: #ifndef SQLITE_OMIT_AUTOVACUUM
                   67400:     if( rc==SQLITE_OK && u.br.iMoved!=0 ){
                   67401:       sqlite3RootPageMoved(db, u.br.iDb, u.br.iMoved, pOp->p1);
                   67402:       /* All OP_Destroy operations occur on the same btree */
                   67403:       assert( resetSchemaOnFault==0 || resetSchemaOnFault==u.br.iDb+1 );
                   67404:       resetSchemaOnFault = u.br.iDb+1;
                   67405:     }
                   67406: #endif
                   67407:   }
                   67408:   break;
                   67409: }
                   67410: 
                   67411: /* Opcode: Clear P1 P2 P3
                   67412: **
                   67413: ** Delete all contents of the database table or index whose root page
                   67414: ** in the database file is given by P1.  But, unlike Destroy, do not
                   67415: ** remove the table or index from the database file.
                   67416: **
                   67417: ** The table being clear is in the main database file if P2==0.  If
                   67418: ** P2==1 then the table to be clear is in the auxiliary database file
                   67419: ** that is used to store tables create using CREATE TEMPORARY TABLE.
                   67420: **
                   67421: ** If the P3 value is non-zero, then the table referred to must be an
                   67422: ** intkey table (an SQL table, not an index). In this case the row change 
                   67423: ** count is incremented by the number of rows in the table being cleared. 
                   67424: ** If P3 is greater than zero, then the value stored in register P3 is
                   67425: ** also incremented by the number of rows in the table being cleared.
                   67426: **
                   67427: ** See also: Destroy
                   67428: */
                   67429: case OP_Clear: {
                   67430: #if 0  /* local variables moved into u.bs */
                   67431:   int nChange;
                   67432: #endif /* local variables moved into u.bs */
                   67433: 
                   67434:   u.bs.nChange = 0;
                   67435:   assert( (p->btreeMask & (((yDbMask)1)<<pOp->p2))!=0 );
                   67436:   rc = sqlite3BtreeClearTable(
                   67437:       db->aDb[pOp->p2].pBt, pOp->p1, (pOp->p3 ? &u.bs.nChange : 0)
                   67438:   );
                   67439:   if( pOp->p3 ){
                   67440:     p->nChange += u.bs.nChange;
                   67441:     if( pOp->p3>0 ){
                   67442:       assert( memIsValid(&aMem[pOp->p3]) );
                   67443:       memAboutToChange(p, &aMem[pOp->p3]);
                   67444:       aMem[pOp->p3].u.i += u.bs.nChange;
                   67445:     }
                   67446:   }
                   67447:   break;
                   67448: }
                   67449: 
                   67450: /* Opcode: CreateTable P1 P2 * * *
                   67451: **
                   67452: ** Allocate a new table in the main database file if P1==0 or in the
                   67453: ** auxiliary database file if P1==1 or in an attached database if
                   67454: ** P1>1.  Write the root page number of the new table into
                   67455: ** register P2
                   67456: **
                   67457: ** The difference between a table and an index is this:  A table must
                   67458: ** have a 4-byte integer key and can have arbitrary data.  An index
                   67459: ** has an arbitrary key but no data.
                   67460: **
                   67461: ** See also: CreateIndex
                   67462: */
                   67463: /* Opcode: CreateIndex P1 P2 * * *
                   67464: **
                   67465: ** Allocate a new index in the main database file if P1==0 or in the
                   67466: ** auxiliary database file if P1==1 or in an attached database if
                   67467: ** P1>1.  Write the root page number of the new table into
                   67468: ** register P2.
                   67469: **
                   67470: ** See documentation on OP_CreateTable for additional information.
                   67471: */
                   67472: case OP_CreateIndex:            /* out2-prerelease */
                   67473: case OP_CreateTable: {          /* out2-prerelease */
                   67474: #if 0  /* local variables moved into u.bt */
                   67475:   int pgno;
                   67476:   int flags;
                   67477:   Db *pDb;
                   67478: #endif /* local variables moved into u.bt */
                   67479: 
                   67480:   u.bt.pgno = 0;
                   67481:   assert( pOp->p1>=0 && pOp->p1<db->nDb );
                   67482:   assert( (p->btreeMask & (((yDbMask)1)<<pOp->p1))!=0 );
                   67483:   u.bt.pDb = &db->aDb[pOp->p1];
                   67484:   assert( u.bt.pDb->pBt!=0 );
                   67485:   if( pOp->opcode==OP_CreateTable ){
                   67486:     /* u.bt.flags = BTREE_INTKEY; */
                   67487:     u.bt.flags = BTREE_INTKEY;
                   67488:   }else{
                   67489:     u.bt.flags = BTREE_BLOBKEY;
                   67490:   }
                   67491:   rc = sqlite3BtreeCreateTable(u.bt.pDb->pBt, &u.bt.pgno, u.bt.flags);
                   67492:   pOut->u.i = u.bt.pgno;
                   67493:   break;
                   67494: }
                   67495: 
                   67496: /* Opcode: ParseSchema P1 * * P4 *
                   67497: **
                   67498: ** Read and parse all entries from the SQLITE_MASTER table of database P1
                   67499: ** that match the WHERE clause P4. 
                   67500: **
                   67501: ** This opcode invokes the parser to create a new virtual machine,
                   67502: ** then runs the new virtual machine.  It is thus a re-entrant opcode.
                   67503: */
                   67504: case OP_ParseSchema: {
                   67505: #if 0  /* local variables moved into u.bu */
                   67506:   int iDb;
                   67507:   const char *zMaster;
                   67508:   char *zSql;
                   67509:   InitData initData;
                   67510: #endif /* local variables moved into u.bu */
                   67511: 
                   67512:   /* Any prepared statement that invokes this opcode will hold mutexes
                   67513:   ** on every btree.  This is a prerequisite for invoking
                   67514:   ** sqlite3InitCallback().
                   67515:   */
                   67516: #ifdef SQLITE_DEBUG
                   67517:   for(u.bu.iDb=0; u.bu.iDb<db->nDb; u.bu.iDb++){
                   67518:     assert( u.bu.iDb==1 || sqlite3BtreeHoldsMutex(db->aDb[u.bu.iDb].pBt) );
                   67519:   }
                   67520: #endif
                   67521: 
                   67522:   u.bu.iDb = pOp->p1;
                   67523:   assert( u.bu.iDb>=0 && u.bu.iDb<db->nDb );
                   67524:   assert( DbHasProperty(db, u.bu.iDb, DB_SchemaLoaded) );
                   67525:   /* Used to be a conditional */ {
                   67526:     u.bu.zMaster = SCHEMA_TABLE(u.bu.iDb);
                   67527:     u.bu.initData.db = db;
                   67528:     u.bu.initData.iDb = pOp->p1;
                   67529:     u.bu.initData.pzErrMsg = &p->zErrMsg;
                   67530:     u.bu.zSql = sqlite3MPrintf(db,
                   67531:        "SELECT name, rootpage, sql FROM '%q'.%s WHERE %s ORDER BY rowid",
                   67532:        db->aDb[u.bu.iDb].zName, u.bu.zMaster, pOp->p4.z);
                   67533:     if( u.bu.zSql==0 ){
                   67534:       rc = SQLITE_NOMEM;
                   67535:     }else{
                   67536:       assert( db->init.busy==0 );
                   67537:       db->init.busy = 1;
                   67538:       u.bu.initData.rc = SQLITE_OK;
                   67539:       assert( !db->mallocFailed );
                   67540:       rc = sqlite3_exec(db, u.bu.zSql, sqlite3InitCallback, &u.bu.initData, 0);
                   67541:       if( rc==SQLITE_OK ) rc = u.bu.initData.rc;
                   67542:       sqlite3DbFree(db, u.bu.zSql);
                   67543:       db->init.busy = 0;
                   67544:     }
                   67545:   }
                   67546:   if( rc==SQLITE_NOMEM ){
                   67547:     goto no_mem;
                   67548:   }
                   67549:   break;
                   67550: }
                   67551: 
                   67552: #if !defined(SQLITE_OMIT_ANALYZE)
                   67553: /* Opcode: LoadAnalysis P1 * * * *
                   67554: **
                   67555: ** Read the sqlite_stat1 table for database P1 and load the content
                   67556: ** of that table into the internal index hash table.  This will cause
                   67557: ** the analysis to be used when preparing all subsequent queries.
                   67558: */
                   67559: case OP_LoadAnalysis: {
                   67560:   assert( pOp->p1>=0 && pOp->p1<db->nDb );
                   67561:   rc = sqlite3AnalysisLoad(db, pOp->p1);
                   67562:   break;  
                   67563: }
                   67564: #endif /* !defined(SQLITE_OMIT_ANALYZE) */
                   67565: 
                   67566: /* Opcode: DropTable P1 * * P4 *
                   67567: **
                   67568: ** Remove the internal (in-memory) data structures that describe
                   67569: ** the table named P4 in database P1.  This is called after a table
                   67570: ** is dropped in order to keep the internal representation of the
                   67571: ** schema consistent with what is on disk.
                   67572: */
                   67573: case OP_DropTable: {
                   67574:   sqlite3UnlinkAndDeleteTable(db, pOp->p1, pOp->p4.z);
                   67575:   break;
                   67576: }
                   67577: 
                   67578: /* Opcode: DropIndex P1 * * P4 *
                   67579: **
                   67580: ** Remove the internal (in-memory) data structures that describe
                   67581: ** the index named P4 in database P1.  This is called after an index
                   67582: ** is dropped in order to keep the internal representation of the
                   67583: ** schema consistent with what is on disk.
                   67584: */
                   67585: case OP_DropIndex: {
                   67586:   sqlite3UnlinkAndDeleteIndex(db, pOp->p1, pOp->p4.z);
                   67587:   break;
                   67588: }
                   67589: 
                   67590: /* Opcode: DropTrigger P1 * * P4 *
                   67591: **
                   67592: ** Remove the internal (in-memory) data structures that describe
                   67593: ** the trigger named P4 in database P1.  This is called after a trigger
                   67594: ** is dropped in order to keep the internal representation of the
                   67595: ** schema consistent with what is on disk.
                   67596: */
                   67597: case OP_DropTrigger: {
                   67598:   sqlite3UnlinkAndDeleteTrigger(db, pOp->p1, pOp->p4.z);
                   67599:   break;
                   67600: }
                   67601: 
                   67602: 
                   67603: #ifndef SQLITE_OMIT_INTEGRITY_CHECK
                   67604: /* Opcode: IntegrityCk P1 P2 P3 * P5
                   67605: **
                   67606: ** Do an analysis of the currently open database.  Store in
                   67607: ** register P1 the text of an error message describing any problems.
                   67608: ** If no problems are found, store a NULL in register P1.
                   67609: **
                   67610: ** The register P3 contains the maximum number of allowed errors.
                   67611: ** At most reg(P3) errors will be reported.
                   67612: ** In other words, the analysis stops as soon as reg(P1) errors are 
                   67613: ** seen.  Reg(P1) is updated with the number of errors remaining.
                   67614: **
                   67615: ** The root page numbers of all tables in the database are integer
                   67616: ** stored in reg(P1), reg(P1+1), reg(P1+2), ....  There are P2 tables
                   67617: ** total.
                   67618: **
                   67619: ** If P5 is not zero, the check is done on the auxiliary database
                   67620: ** file, not the main database file.
                   67621: **
                   67622: ** This opcode is used to implement the integrity_check pragma.
                   67623: */
                   67624: case OP_IntegrityCk: {
                   67625: #if 0  /* local variables moved into u.bv */
                   67626:   int nRoot;      /* Number of tables to check.  (Number of root pages.) */
                   67627:   int *aRoot;     /* Array of rootpage numbers for tables to be checked */
                   67628:   int j;          /* Loop counter */
                   67629:   int nErr;       /* Number of errors reported */
                   67630:   char *z;        /* Text of the error report */
                   67631:   Mem *pnErr;     /* Register keeping track of errors remaining */
                   67632: #endif /* local variables moved into u.bv */
                   67633: 
                   67634:   u.bv.nRoot = pOp->p2;
                   67635:   assert( u.bv.nRoot>0 );
                   67636:   u.bv.aRoot = sqlite3DbMallocRaw(db, sizeof(int)*(u.bv.nRoot+1) );
                   67637:   if( u.bv.aRoot==0 ) goto no_mem;
                   67638:   assert( pOp->p3>0 && pOp->p3<=p->nMem );
                   67639:   u.bv.pnErr = &aMem[pOp->p3];
                   67640:   assert( (u.bv.pnErr->flags & MEM_Int)!=0 );
                   67641:   assert( (u.bv.pnErr->flags & (MEM_Str|MEM_Blob))==0 );
                   67642:   pIn1 = &aMem[pOp->p1];
                   67643:   for(u.bv.j=0; u.bv.j<u.bv.nRoot; u.bv.j++){
                   67644:     u.bv.aRoot[u.bv.j] = (int)sqlite3VdbeIntValue(&pIn1[u.bv.j]);
                   67645:   }
                   67646:   u.bv.aRoot[u.bv.j] = 0;
                   67647:   assert( pOp->p5<db->nDb );
                   67648:   assert( (p->btreeMask & (((yDbMask)1)<<pOp->p5))!=0 );
                   67649:   u.bv.z = sqlite3BtreeIntegrityCheck(db->aDb[pOp->p5].pBt, u.bv.aRoot, u.bv.nRoot,
                   67650:                                  (int)u.bv.pnErr->u.i, &u.bv.nErr);
                   67651:   sqlite3DbFree(db, u.bv.aRoot);
                   67652:   u.bv.pnErr->u.i -= u.bv.nErr;
                   67653:   sqlite3VdbeMemSetNull(pIn1);
                   67654:   if( u.bv.nErr==0 ){
                   67655:     assert( u.bv.z==0 );
                   67656:   }else if( u.bv.z==0 ){
                   67657:     goto no_mem;
                   67658:   }else{
                   67659:     sqlite3VdbeMemSetStr(pIn1, u.bv.z, -1, SQLITE_UTF8, sqlite3_free);
                   67660:   }
                   67661:   UPDATE_MAX_BLOBSIZE(pIn1);
                   67662:   sqlite3VdbeChangeEncoding(pIn1, encoding);
                   67663:   break;
                   67664: }
                   67665: #endif /* SQLITE_OMIT_INTEGRITY_CHECK */
                   67666: 
                   67667: /* Opcode: RowSetAdd P1 P2 * * *
                   67668: **
                   67669: ** Insert the integer value held by register P2 into a boolean index
                   67670: ** held in register P1.
                   67671: **
                   67672: ** An assertion fails if P2 is not an integer.
                   67673: */
                   67674: case OP_RowSetAdd: {       /* in1, in2 */
                   67675:   pIn1 = &aMem[pOp->p1];
                   67676:   pIn2 = &aMem[pOp->p2];
                   67677:   assert( (pIn2->flags & MEM_Int)!=0 );
                   67678:   if( (pIn1->flags & MEM_RowSet)==0 ){
                   67679:     sqlite3VdbeMemSetRowSet(pIn1);
                   67680:     if( (pIn1->flags & MEM_RowSet)==0 ) goto no_mem;
                   67681:   }
                   67682:   sqlite3RowSetInsert(pIn1->u.pRowSet, pIn2->u.i);
                   67683:   break;
                   67684: }
                   67685: 
                   67686: /* Opcode: RowSetRead P1 P2 P3 * *
                   67687: **
                   67688: ** Extract the smallest value from boolean index P1 and put that value into
                   67689: ** register P3.  Or, if boolean index P1 is initially empty, leave P3
                   67690: ** unchanged and jump to instruction P2.
                   67691: */
                   67692: case OP_RowSetRead: {       /* jump, in1, out3 */
                   67693: #if 0  /* local variables moved into u.bw */
                   67694:   i64 val;
                   67695: #endif /* local variables moved into u.bw */
                   67696:   CHECK_FOR_INTERRUPT;
                   67697:   pIn1 = &aMem[pOp->p1];
                   67698:   if( (pIn1->flags & MEM_RowSet)==0
                   67699:    || sqlite3RowSetNext(pIn1->u.pRowSet, &u.bw.val)==0
                   67700:   ){
                   67701:     /* The boolean index is empty */
                   67702:     sqlite3VdbeMemSetNull(pIn1);
                   67703:     pc = pOp->p2 - 1;
                   67704:   }else{
                   67705:     /* A value was pulled from the index */
                   67706:     sqlite3VdbeMemSetInt64(&aMem[pOp->p3], u.bw.val);
                   67707:   }
                   67708:   break;
                   67709: }
                   67710: 
                   67711: /* Opcode: RowSetTest P1 P2 P3 P4
                   67712: **
                   67713: ** Register P3 is assumed to hold a 64-bit integer value. If register P1
                   67714: ** contains a RowSet object and that RowSet object contains
                   67715: ** the value held in P3, jump to register P2. Otherwise, insert the
                   67716: ** integer in P3 into the RowSet and continue on to the
                   67717: ** next opcode.
                   67718: **
                   67719: ** The RowSet object is optimized for the case where successive sets
                   67720: ** of integers, where each set contains no duplicates. Each set
                   67721: ** of values is identified by a unique P4 value. The first set
                   67722: ** must have P4==0, the final set P4=-1.  P4 must be either -1 or
                   67723: ** non-negative.  For non-negative values of P4 only the lower 4
                   67724: ** bits are significant.
                   67725: **
                   67726: ** This allows optimizations: (a) when P4==0 there is no need to test
                   67727: ** the rowset object for P3, as it is guaranteed not to contain it,
                   67728: ** (b) when P4==-1 there is no need to insert the value, as it will
                   67729: ** never be tested for, and (c) when a value that is part of set X is
                   67730: ** inserted, there is no need to search to see if the same value was
                   67731: ** previously inserted as part of set X (only if it was previously
                   67732: ** inserted as part of some other set).
                   67733: */
                   67734: case OP_RowSetTest: {                     /* jump, in1, in3 */
                   67735: #if 0  /* local variables moved into u.bx */
                   67736:   int iSet;
                   67737:   int exists;
                   67738: #endif /* local variables moved into u.bx */
                   67739: 
                   67740:   pIn1 = &aMem[pOp->p1];
                   67741:   pIn3 = &aMem[pOp->p3];
                   67742:   u.bx.iSet = pOp->p4.i;
                   67743:   assert( pIn3->flags&MEM_Int );
                   67744: 
                   67745:   /* If there is anything other than a rowset object in memory cell P1,
                   67746:   ** delete it now and initialize P1 with an empty rowset
                   67747:   */
                   67748:   if( (pIn1->flags & MEM_RowSet)==0 ){
                   67749:     sqlite3VdbeMemSetRowSet(pIn1);
                   67750:     if( (pIn1->flags & MEM_RowSet)==0 ) goto no_mem;
                   67751:   }
                   67752: 
                   67753:   assert( pOp->p4type==P4_INT32 );
                   67754:   assert( u.bx.iSet==-1 || u.bx.iSet>=0 );
                   67755:   if( u.bx.iSet ){
                   67756:     u.bx.exists = sqlite3RowSetTest(pIn1->u.pRowSet,
                   67757:                                (u8)(u.bx.iSet>=0 ? u.bx.iSet & 0xf : 0xff),
                   67758:                                pIn3->u.i);
                   67759:     if( u.bx.exists ){
                   67760:       pc = pOp->p2 - 1;
                   67761:       break;
                   67762:     }
                   67763:   }
                   67764:   if( u.bx.iSet>=0 ){
                   67765:     sqlite3RowSetInsert(pIn1->u.pRowSet, pIn3->u.i);
                   67766:   }
                   67767:   break;
                   67768: }
                   67769: 
                   67770: 
                   67771: #ifndef SQLITE_OMIT_TRIGGER
                   67772: 
                   67773: /* Opcode: Program P1 P2 P3 P4 *
                   67774: **
                   67775: ** Execute the trigger program passed as P4 (type P4_SUBPROGRAM). 
                   67776: **
                   67777: ** P1 contains the address of the memory cell that contains the first memory 
                   67778: ** cell in an array of values used as arguments to the sub-program. P2 
                   67779: ** contains the address to jump to if the sub-program throws an IGNORE 
                   67780: ** exception using the RAISE() function. Register P3 contains the address 
                   67781: ** of a memory cell in this (the parent) VM that is used to allocate the 
                   67782: ** memory required by the sub-vdbe at runtime.
                   67783: **
                   67784: ** P4 is a pointer to the VM containing the trigger program.
                   67785: */
                   67786: case OP_Program: {        /* jump */
                   67787: #if 0  /* local variables moved into u.by */
                   67788:   int nMem;               /* Number of memory registers for sub-program */
                   67789:   int nByte;              /* Bytes of runtime space required for sub-program */
                   67790:   Mem *pRt;               /* Register to allocate runtime space */
                   67791:   Mem *pMem;              /* Used to iterate through memory cells */
                   67792:   Mem *pEnd;              /* Last memory cell in new array */
                   67793:   VdbeFrame *pFrame;      /* New vdbe frame to execute in */
                   67794:   SubProgram *pProgram;   /* Sub-program to execute */
                   67795:   void *t;                /* Token identifying trigger */
                   67796: #endif /* local variables moved into u.by */
                   67797: 
                   67798:   u.by.pProgram = pOp->p4.pProgram;
                   67799:   u.by.pRt = &aMem[pOp->p3];
                   67800:   assert( memIsValid(u.by.pRt) );
                   67801:   assert( u.by.pProgram->nOp>0 );
                   67802: 
                   67803:   /* If the p5 flag is clear, then recursive invocation of triggers is
                   67804:   ** disabled for backwards compatibility (p5 is set if this sub-program
                   67805:   ** is really a trigger, not a foreign key action, and the flag set
                   67806:   ** and cleared by the "PRAGMA recursive_triggers" command is clear).
                   67807:   **
                   67808:   ** It is recursive invocation of triggers, at the SQL level, that is
                   67809:   ** disabled. In some cases a single trigger may generate more than one
                   67810:   ** SubProgram (if the trigger may be executed with more than one different
                   67811:   ** ON CONFLICT algorithm). SubProgram structures associated with a
                   67812:   ** single trigger all have the same value for the SubProgram.token
                   67813:   ** variable.  */
                   67814:   if( pOp->p5 ){
                   67815:     u.by.t = u.by.pProgram->token;
                   67816:     for(u.by.pFrame=p->pFrame; u.by.pFrame && u.by.pFrame->token!=u.by.t; u.by.pFrame=u.by.pFrame->pParent);
                   67817:     if( u.by.pFrame ) break;
                   67818:   }
                   67819: 
                   67820:   if( p->nFrame>=db->aLimit[SQLITE_LIMIT_TRIGGER_DEPTH] ){
                   67821:     rc = SQLITE_ERROR;
                   67822:     sqlite3SetString(&p->zErrMsg, db, "too many levels of trigger recursion");
                   67823:     break;
                   67824:   }
                   67825: 
                   67826:   /* Register u.by.pRt is used to store the memory required to save the state
                   67827:   ** of the current program, and the memory required at runtime to execute
                   67828:   ** the trigger program. If this trigger has been fired before, then u.by.pRt
                   67829:   ** is already allocated. Otherwise, it must be initialized.  */
                   67830:   if( (u.by.pRt->flags&MEM_Frame)==0 ){
                   67831:     /* SubProgram.nMem is set to the number of memory cells used by the
                   67832:     ** program stored in SubProgram.aOp. As well as these, one memory
                   67833:     ** cell is required for each cursor used by the program. Set local
                   67834:     ** variable u.by.nMem (and later, VdbeFrame.nChildMem) to this value.
                   67835:     */
                   67836:     u.by.nMem = u.by.pProgram->nMem + u.by.pProgram->nCsr;
                   67837:     u.by.nByte = ROUND8(sizeof(VdbeFrame))
                   67838:               + u.by.nMem * sizeof(Mem)
                   67839:               + u.by.pProgram->nCsr * sizeof(VdbeCursor *);
                   67840:     u.by.pFrame = sqlite3DbMallocZero(db, u.by.nByte);
                   67841:     if( !u.by.pFrame ){
                   67842:       goto no_mem;
                   67843:     }
                   67844:     sqlite3VdbeMemRelease(u.by.pRt);
                   67845:     u.by.pRt->flags = MEM_Frame;
                   67846:     u.by.pRt->u.pFrame = u.by.pFrame;
                   67847: 
                   67848:     u.by.pFrame->v = p;
                   67849:     u.by.pFrame->nChildMem = u.by.nMem;
                   67850:     u.by.pFrame->nChildCsr = u.by.pProgram->nCsr;
                   67851:     u.by.pFrame->pc = pc;
                   67852:     u.by.pFrame->aMem = p->aMem;
                   67853:     u.by.pFrame->nMem = p->nMem;
                   67854:     u.by.pFrame->apCsr = p->apCsr;
                   67855:     u.by.pFrame->nCursor = p->nCursor;
                   67856:     u.by.pFrame->aOp = p->aOp;
                   67857:     u.by.pFrame->nOp = p->nOp;
                   67858:     u.by.pFrame->token = u.by.pProgram->token;
                   67859: 
                   67860:     u.by.pEnd = &VdbeFrameMem(u.by.pFrame)[u.by.pFrame->nChildMem];
                   67861:     for(u.by.pMem=VdbeFrameMem(u.by.pFrame); u.by.pMem!=u.by.pEnd; u.by.pMem++){
                   67862:       u.by.pMem->flags = MEM_Null;
                   67863:       u.by.pMem->db = db;
                   67864:     }
                   67865:   }else{
                   67866:     u.by.pFrame = u.by.pRt->u.pFrame;
                   67867:     assert( u.by.pProgram->nMem+u.by.pProgram->nCsr==u.by.pFrame->nChildMem );
                   67868:     assert( u.by.pProgram->nCsr==u.by.pFrame->nChildCsr );
                   67869:     assert( pc==u.by.pFrame->pc );
                   67870:   }
                   67871: 
                   67872:   p->nFrame++;
                   67873:   u.by.pFrame->pParent = p->pFrame;
                   67874:   u.by.pFrame->lastRowid = lastRowid;
                   67875:   u.by.pFrame->nChange = p->nChange;
                   67876:   p->nChange = 0;
                   67877:   p->pFrame = u.by.pFrame;
                   67878:   p->aMem = aMem = &VdbeFrameMem(u.by.pFrame)[-1];
                   67879:   p->nMem = u.by.pFrame->nChildMem;
                   67880:   p->nCursor = (u16)u.by.pFrame->nChildCsr;
                   67881:   p->apCsr = (VdbeCursor **)&aMem[p->nMem+1];
                   67882:   p->aOp = aOp = u.by.pProgram->aOp;
                   67883:   p->nOp = u.by.pProgram->nOp;
                   67884:   pc = -1;
                   67885: 
                   67886:   break;
                   67887: }
                   67888: 
                   67889: /* Opcode: Param P1 P2 * * *
                   67890: **
                   67891: ** This opcode is only ever present in sub-programs called via the 
                   67892: ** OP_Program instruction. Copy a value currently stored in a memory 
                   67893: ** cell of the calling (parent) frame to cell P2 in the current frames 
                   67894: ** address space. This is used by trigger programs to access the new.* 
                   67895: ** and old.* values.
                   67896: **
                   67897: ** The address of the cell in the parent frame is determined by adding
                   67898: ** the value of the P1 argument to the value of the P1 argument to the
                   67899: ** calling OP_Program instruction.
                   67900: */
                   67901: case OP_Param: {           /* out2-prerelease */
                   67902: #if 0  /* local variables moved into u.bz */
                   67903:   VdbeFrame *pFrame;
                   67904:   Mem *pIn;
                   67905: #endif /* local variables moved into u.bz */
                   67906:   u.bz.pFrame = p->pFrame;
                   67907:   u.bz.pIn = &u.bz.pFrame->aMem[pOp->p1 + u.bz.pFrame->aOp[u.bz.pFrame->pc].p1];
                   67908:   sqlite3VdbeMemShallowCopy(pOut, u.bz.pIn, MEM_Ephem);
                   67909:   break;
                   67910: }
                   67911: 
                   67912: #endif /* #ifndef SQLITE_OMIT_TRIGGER */
                   67913: 
                   67914: #ifndef SQLITE_OMIT_FOREIGN_KEY
                   67915: /* Opcode: FkCounter P1 P2 * * *
                   67916: **
                   67917: ** Increment a "constraint counter" by P2 (P2 may be negative or positive).
                   67918: ** If P1 is non-zero, the database constraint counter is incremented 
                   67919: ** (deferred foreign key constraints). Otherwise, if P1 is zero, the 
                   67920: ** statement counter is incremented (immediate foreign key constraints).
                   67921: */
                   67922: case OP_FkCounter: {
                   67923:   if( pOp->p1 ){
                   67924:     db->nDeferredCons += pOp->p2;
                   67925:   }else{
                   67926:     p->nFkConstraint += pOp->p2;
                   67927:   }
                   67928:   break;
                   67929: }
                   67930: 
                   67931: /* Opcode: FkIfZero P1 P2 * * *
                   67932: **
                   67933: ** This opcode tests if a foreign key constraint-counter is currently zero.
                   67934: ** If so, jump to instruction P2. Otherwise, fall through to the next 
                   67935: ** instruction.
                   67936: **
                   67937: ** If P1 is non-zero, then the jump is taken if the database constraint-counter
                   67938: ** is zero (the one that counts deferred constraint violations). If P1 is
                   67939: ** zero, the jump is taken if the statement constraint-counter is zero
                   67940: ** (immediate foreign key constraint violations).
                   67941: */
                   67942: case OP_FkIfZero: {         /* jump */
                   67943:   if( pOp->p1 ){
                   67944:     if( db->nDeferredCons==0 ) pc = pOp->p2-1;
                   67945:   }else{
                   67946:     if( p->nFkConstraint==0 ) pc = pOp->p2-1;
                   67947:   }
                   67948:   break;
                   67949: }
                   67950: #endif /* #ifndef SQLITE_OMIT_FOREIGN_KEY */
                   67951: 
                   67952: #ifndef SQLITE_OMIT_AUTOINCREMENT
                   67953: /* Opcode: MemMax P1 P2 * * *
                   67954: **
                   67955: ** P1 is a register in the root frame of this VM (the root frame is
                   67956: ** different from the current frame if this instruction is being executed
                   67957: ** within a sub-program). Set the value of register P1 to the maximum of 
                   67958: ** its current value and the value in register P2.
                   67959: **
                   67960: ** This instruction throws an error if the memory cell is not initially
                   67961: ** an integer.
                   67962: */
                   67963: case OP_MemMax: {        /* in2 */
                   67964: #if 0  /* local variables moved into u.ca */
                   67965:   Mem *pIn1;
                   67966:   VdbeFrame *pFrame;
                   67967: #endif /* local variables moved into u.ca */
                   67968:   if( p->pFrame ){
                   67969:     for(u.ca.pFrame=p->pFrame; u.ca.pFrame->pParent; u.ca.pFrame=u.ca.pFrame->pParent);
                   67970:     u.ca.pIn1 = &u.ca.pFrame->aMem[pOp->p1];
                   67971:   }else{
                   67972:     u.ca.pIn1 = &aMem[pOp->p1];
                   67973:   }
                   67974:   assert( memIsValid(u.ca.pIn1) );
                   67975:   sqlite3VdbeMemIntegerify(u.ca.pIn1);
                   67976:   pIn2 = &aMem[pOp->p2];
                   67977:   sqlite3VdbeMemIntegerify(pIn2);
                   67978:   if( u.ca.pIn1->u.i<pIn2->u.i){
                   67979:     u.ca.pIn1->u.i = pIn2->u.i;
                   67980:   }
                   67981:   break;
                   67982: }
                   67983: #endif /* SQLITE_OMIT_AUTOINCREMENT */
                   67984: 
                   67985: /* Opcode: IfPos P1 P2 * * *
                   67986: **
                   67987: ** If the value of register P1 is 1 or greater, jump to P2.
                   67988: **
                   67989: ** It is illegal to use this instruction on a register that does
                   67990: ** not contain an integer.  An assertion fault will result if you try.
                   67991: */
                   67992: case OP_IfPos: {        /* jump, in1 */
                   67993:   pIn1 = &aMem[pOp->p1];
                   67994:   assert( pIn1->flags&MEM_Int );
                   67995:   if( pIn1->u.i>0 ){
                   67996:      pc = pOp->p2 - 1;
                   67997:   }
                   67998:   break;
                   67999: }
                   68000: 
                   68001: /* Opcode: IfNeg P1 P2 * * *
                   68002: **
                   68003: ** If the value of register P1 is less than zero, jump to P2. 
                   68004: **
                   68005: ** It is illegal to use this instruction on a register that does
                   68006: ** not contain an integer.  An assertion fault will result if you try.
                   68007: */
                   68008: case OP_IfNeg: {        /* jump, in1 */
                   68009:   pIn1 = &aMem[pOp->p1];
                   68010:   assert( pIn1->flags&MEM_Int );
                   68011:   if( pIn1->u.i<0 ){
                   68012:      pc = pOp->p2 - 1;
                   68013:   }
                   68014:   break;
                   68015: }
                   68016: 
                   68017: /* Opcode: IfZero P1 P2 P3 * *
                   68018: **
                   68019: ** The register P1 must contain an integer.  Add literal P3 to the
                   68020: ** value in register P1.  If the result is exactly 0, jump to P2. 
                   68021: **
                   68022: ** It is illegal to use this instruction on a register that does
                   68023: ** not contain an integer.  An assertion fault will result if you try.
                   68024: */
                   68025: case OP_IfZero: {        /* jump, in1 */
                   68026:   pIn1 = &aMem[pOp->p1];
                   68027:   assert( pIn1->flags&MEM_Int );
                   68028:   pIn1->u.i += pOp->p3;
                   68029:   if( pIn1->u.i==0 ){
                   68030:      pc = pOp->p2 - 1;
                   68031:   }
                   68032:   break;
                   68033: }
                   68034: 
                   68035: /* Opcode: AggStep * P2 P3 P4 P5
                   68036: **
                   68037: ** Execute the step function for an aggregate.  The
                   68038: ** function has P5 arguments.   P4 is a pointer to the FuncDef
                   68039: ** structure that specifies the function.  Use register
                   68040: ** P3 as the accumulator.
                   68041: **
                   68042: ** The P5 arguments are taken from register P2 and its
                   68043: ** successors.
                   68044: */
                   68045: case OP_AggStep: {
                   68046: #if 0  /* local variables moved into u.cb */
                   68047:   int n;
                   68048:   int i;
                   68049:   Mem *pMem;
                   68050:   Mem *pRec;
                   68051:   sqlite3_context ctx;
                   68052:   sqlite3_value **apVal;
                   68053: #endif /* local variables moved into u.cb */
                   68054: 
                   68055:   u.cb.n = pOp->p5;
                   68056:   assert( u.cb.n>=0 );
                   68057:   u.cb.pRec = &aMem[pOp->p2];
                   68058:   u.cb.apVal = p->apArg;
                   68059:   assert( u.cb.apVal || u.cb.n==0 );
                   68060:   for(u.cb.i=0; u.cb.i<u.cb.n; u.cb.i++, u.cb.pRec++){
                   68061:     assert( memIsValid(u.cb.pRec) );
                   68062:     u.cb.apVal[u.cb.i] = u.cb.pRec;
                   68063:     memAboutToChange(p, u.cb.pRec);
                   68064:     sqlite3VdbeMemStoreType(u.cb.pRec);
                   68065:   }
                   68066:   u.cb.ctx.pFunc = pOp->p4.pFunc;
                   68067:   assert( pOp->p3>0 && pOp->p3<=p->nMem );
                   68068:   u.cb.ctx.pMem = u.cb.pMem = &aMem[pOp->p3];
                   68069:   u.cb.pMem->n++;
                   68070:   u.cb.ctx.s.flags = MEM_Null;
                   68071:   u.cb.ctx.s.z = 0;
                   68072:   u.cb.ctx.s.zMalloc = 0;
                   68073:   u.cb.ctx.s.xDel = 0;
                   68074:   u.cb.ctx.s.db = db;
                   68075:   u.cb.ctx.isError = 0;
                   68076:   u.cb.ctx.pColl = 0;
                   68077:   if( u.cb.ctx.pFunc->flags & SQLITE_FUNC_NEEDCOLL ){
                   68078:     assert( pOp>p->aOp );
                   68079:     assert( pOp[-1].p4type==P4_COLLSEQ );
                   68080:     assert( pOp[-1].opcode==OP_CollSeq );
                   68081:     u.cb.ctx.pColl = pOp[-1].p4.pColl;
                   68082:   }
                   68083:   (u.cb.ctx.pFunc->xStep)(&u.cb.ctx, u.cb.n, u.cb.apVal); /* IMP: R-24505-23230 */
                   68084:   if( u.cb.ctx.isError ){
                   68085:     sqlite3SetString(&p->zErrMsg, db, "%s", sqlite3_value_text(&u.cb.ctx.s));
                   68086:     rc = u.cb.ctx.isError;
                   68087:   }
                   68088: 
                   68089:   sqlite3VdbeMemRelease(&u.cb.ctx.s);
                   68090: 
                   68091:   break;
                   68092: }
                   68093: 
                   68094: /* Opcode: AggFinal P1 P2 * P4 *
                   68095: **
                   68096: ** Execute the finalizer function for an aggregate.  P1 is
                   68097: ** the memory location that is the accumulator for the aggregate.
                   68098: **
                   68099: ** P2 is the number of arguments that the step function takes and
                   68100: ** P4 is a pointer to the FuncDef for this function.  The P2
                   68101: ** argument is not used by this opcode.  It is only there to disambiguate
                   68102: ** functions that can take varying numbers of arguments.  The
                   68103: ** P4 argument is only needed for the degenerate case where
                   68104: ** the step function was not previously called.
                   68105: */
                   68106: case OP_AggFinal: {
                   68107: #if 0  /* local variables moved into u.cc */
                   68108:   Mem *pMem;
                   68109: #endif /* local variables moved into u.cc */
                   68110:   assert( pOp->p1>0 && pOp->p1<=p->nMem );
                   68111:   u.cc.pMem = &aMem[pOp->p1];
                   68112:   assert( (u.cc.pMem->flags & ~(MEM_Null|MEM_Agg))==0 );
                   68113:   rc = sqlite3VdbeMemFinalize(u.cc.pMem, pOp->p4.pFunc);
                   68114:   if( rc ){
                   68115:     sqlite3SetString(&p->zErrMsg, db, "%s", sqlite3_value_text(u.cc.pMem));
                   68116:   }
                   68117:   sqlite3VdbeChangeEncoding(u.cc.pMem, encoding);
                   68118:   UPDATE_MAX_BLOBSIZE(u.cc.pMem);
                   68119:   if( sqlite3VdbeMemTooBig(u.cc.pMem) ){
                   68120:     goto too_big;
                   68121:   }
                   68122:   break;
                   68123: }
                   68124: 
                   68125: #ifndef SQLITE_OMIT_WAL
                   68126: /* Opcode: Checkpoint P1 P2 P3 * *
                   68127: **
                   68128: ** Checkpoint database P1. This is a no-op if P1 is not currently in
                   68129: ** WAL mode. Parameter P2 is one of SQLITE_CHECKPOINT_PASSIVE, FULL
                   68130: ** or RESTART.  Write 1 or 0 into mem[P3] if the checkpoint returns
                   68131: ** SQLITE_BUSY or not, respectively.  Write the number of pages in the
                   68132: ** WAL after the checkpoint into mem[P3+1] and the number of pages
                   68133: ** in the WAL that have been checkpointed after the checkpoint
                   68134: ** completes into mem[P3+2].  However on an error, mem[P3+1] and
                   68135: ** mem[P3+2] are initialized to -1.
                   68136: */
                   68137: case OP_Checkpoint: {
                   68138: #if 0  /* local variables moved into u.cd */
                   68139:   int i;                          /* Loop counter */
                   68140:   int aRes[3];                    /* Results */
                   68141:   Mem *pMem;                      /* Write results here */
                   68142: #endif /* local variables moved into u.cd */
                   68143: 
                   68144:   u.cd.aRes[0] = 0;
                   68145:   u.cd.aRes[1] = u.cd.aRes[2] = -1;
                   68146:   assert( pOp->p2==SQLITE_CHECKPOINT_PASSIVE
                   68147:        || pOp->p2==SQLITE_CHECKPOINT_FULL
                   68148:        || pOp->p2==SQLITE_CHECKPOINT_RESTART
                   68149:   );
                   68150:   rc = sqlite3Checkpoint(db, pOp->p1, pOp->p2, &u.cd.aRes[1], &u.cd.aRes[2]);
                   68151:   if( rc==SQLITE_BUSY ){
                   68152:     rc = SQLITE_OK;
                   68153:     u.cd.aRes[0] = 1;
                   68154:   }
                   68155:   for(u.cd.i=0, u.cd.pMem = &aMem[pOp->p3]; u.cd.i<3; u.cd.i++, u.cd.pMem++){
                   68156:     sqlite3VdbeMemSetInt64(u.cd.pMem, (i64)u.cd.aRes[u.cd.i]);
                   68157:   }
                   68158:   break;
                   68159: };  
                   68160: #endif
                   68161: 
                   68162: #ifndef SQLITE_OMIT_PRAGMA
                   68163: /* Opcode: JournalMode P1 P2 P3 * P5
                   68164: **
                   68165: ** Change the journal mode of database P1 to P3. P3 must be one of the
                   68166: ** PAGER_JOURNALMODE_XXX values. If changing between the various rollback
                   68167: ** modes (delete, truncate, persist, off and memory), this is a simple
                   68168: ** operation. No IO is required.
                   68169: **
                   68170: ** If changing into or out of WAL mode the procedure is more complicated.
                   68171: **
                   68172: ** Write a string containing the final journal-mode to register P2.
                   68173: */
                   68174: case OP_JournalMode: {    /* out2-prerelease */
                   68175: #if 0  /* local variables moved into u.ce */
                   68176:   Btree *pBt;                     /* Btree to change journal mode of */
                   68177:   Pager *pPager;                  /* Pager associated with pBt */
                   68178:   int eNew;                       /* New journal mode */
                   68179:   int eOld;                       /* The old journal mode */
                   68180:   const char *zFilename;          /* Name of database file for pPager */
                   68181: #endif /* local variables moved into u.ce */
                   68182: 
                   68183:   u.ce.eNew = pOp->p3;
                   68184:   assert( u.ce.eNew==PAGER_JOURNALMODE_DELETE
                   68185:        || u.ce.eNew==PAGER_JOURNALMODE_TRUNCATE
                   68186:        || u.ce.eNew==PAGER_JOURNALMODE_PERSIST
                   68187:        || u.ce.eNew==PAGER_JOURNALMODE_OFF
                   68188:        || u.ce.eNew==PAGER_JOURNALMODE_MEMORY
                   68189:        || u.ce.eNew==PAGER_JOURNALMODE_WAL
                   68190:        || u.ce.eNew==PAGER_JOURNALMODE_QUERY
                   68191:   );
                   68192:   assert( pOp->p1>=0 && pOp->p1<db->nDb );
                   68193: 
                   68194:   u.ce.pBt = db->aDb[pOp->p1].pBt;
                   68195:   u.ce.pPager = sqlite3BtreePager(u.ce.pBt);
                   68196:   u.ce.eOld = sqlite3PagerGetJournalMode(u.ce.pPager);
                   68197:   if( u.ce.eNew==PAGER_JOURNALMODE_QUERY ) u.ce.eNew = u.ce.eOld;
                   68198:   if( !sqlite3PagerOkToChangeJournalMode(u.ce.pPager) ) u.ce.eNew = u.ce.eOld;
                   68199: 
                   68200: #ifndef SQLITE_OMIT_WAL
                   68201:   u.ce.zFilename = sqlite3PagerFilename(u.ce.pPager);
                   68202: 
                   68203:   /* Do not allow a transition to journal_mode=WAL for a database
                   68204:   ** in temporary storage or if the VFS does not support shared memory
                   68205:   */
                   68206:   if( u.ce.eNew==PAGER_JOURNALMODE_WAL
                   68207:    && (u.ce.zFilename[0]==0                         /* Temp file */
                   68208:        || !sqlite3PagerWalSupported(u.ce.pPager))   /* No shared-memory support */
                   68209:   ){
                   68210:     u.ce.eNew = u.ce.eOld;
                   68211:   }
                   68212: 
                   68213:   if( (u.ce.eNew!=u.ce.eOld)
                   68214:    && (u.ce.eOld==PAGER_JOURNALMODE_WAL || u.ce.eNew==PAGER_JOURNALMODE_WAL)
                   68215:   ){
                   68216:     if( !db->autoCommit || db->activeVdbeCnt>1 ){
                   68217:       rc = SQLITE_ERROR;
                   68218:       sqlite3SetString(&p->zErrMsg, db,
                   68219:           "cannot change %s wal mode from within a transaction",
                   68220:           (u.ce.eNew==PAGER_JOURNALMODE_WAL ? "into" : "out of")
                   68221:       );
                   68222:       break;
                   68223:     }else{
                   68224: 
                   68225:       if( u.ce.eOld==PAGER_JOURNALMODE_WAL ){
                   68226:         /* If leaving WAL mode, close the log file. If successful, the call
                   68227:         ** to PagerCloseWal() checkpoints and deletes the write-ahead-log
                   68228:         ** file. An EXCLUSIVE lock may still be held on the database file
                   68229:         ** after a successful return.
                   68230:         */
                   68231:         rc = sqlite3PagerCloseWal(u.ce.pPager);
                   68232:         if( rc==SQLITE_OK ){
                   68233:           sqlite3PagerSetJournalMode(u.ce.pPager, u.ce.eNew);
                   68234:         }
                   68235:       }else if( u.ce.eOld==PAGER_JOURNALMODE_MEMORY ){
                   68236:         /* Cannot transition directly from MEMORY to WAL.  Use mode OFF
                   68237:         ** as an intermediate */
                   68238:         sqlite3PagerSetJournalMode(u.ce.pPager, PAGER_JOURNALMODE_OFF);
                   68239:       }
                   68240: 
                   68241:       /* Open a transaction on the database file. Regardless of the journal
                   68242:       ** mode, this transaction always uses a rollback journal.
                   68243:       */
                   68244:       assert( sqlite3BtreeIsInTrans(u.ce.pBt)==0 );
                   68245:       if( rc==SQLITE_OK ){
                   68246:         rc = sqlite3BtreeSetVersion(u.ce.pBt, (u.ce.eNew==PAGER_JOURNALMODE_WAL ? 2 : 1));
                   68247:       }
                   68248:     }
                   68249:   }
                   68250: #endif /* ifndef SQLITE_OMIT_WAL */
                   68251: 
                   68252:   if( rc ){
                   68253:     u.ce.eNew = u.ce.eOld;
                   68254:   }
                   68255:   u.ce.eNew = sqlite3PagerSetJournalMode(u.ce.pPager, u.ce.eNew);
                   68256: 
                   68257:   pOut = &aMem[pOp->p2];
                   68258:   pOut->flags = MEM_Str|MEM_Static|MEM_Term;
                   68259:   pOut->z = (char *)sqlite3JournalModename(u.ce.eNew);
                   68260:   pOut->n = sqlite3Strlen30(pOut->z);
                   68261:   pOut->enc = SQLITE_UTF8;
                   68262:   sqlite3VdbeChangeEncoding(pOut, encoding);
                   68263:   break;
                   68264: };
                   68265: #endif /* SQLITE_OMIT_PRAGMA */
                   68266: 
                   68267: #if !defined(SQLITE_OMIT_VACUUM) && !defined(SQLITE_OMIT_ATTACH)
                   68268: /* Opcode: Vacuum * * * * *
                   68269: **
                   68270: ** Vacuum the entire database.  This opcode will cause other virtual
                   68271: ** machines to be created and run.  It may not be called from within
                   68272: ** a transaction.
                   68273: */
                   68274: case OP_Vacuum: {
                   68275:   rc = sqlite3RunVacuum(&p->zErrMsg, db);
                   68276:   break;
                   68277: }
                   68278: #endif
                   68279: 
                   68280: #if !defined(SQLITE_OMIT_AUTOVACUUM)
                   68281: /* Opcode: IncrVacuum P1 P2 * * *
                   68282: **
                   68283: ** Perform a single step of the incremental vacuum procedure on
                   68284: ** the P1 database. If the vacuum has finished, jump to instruction
                   68285: ** P2. Otherwise, fall through to the next instruction.
                   68286: */
                   68287: case OP_IncrVacuum: {        /* jump */
                   68288: #if 0  /* local variables moved into u.cf */
                   68289:   Btree *pBt;
                   68290: #endif /* local variables moved into u.cf */
                   68291: 
                   68292:   assert( pOp->p1>=0 && pOp->p1<db->nDb );
                   68293:   assert( (p->btreeMask & (((yDbMask)1)<<pOp->p1))!=0 );
                   68294:   u.cf.pBt = db->aDb[pOp->p1].pBt;
                   68295:   rc = sqlite3BtreeIncrVacuum(u.cf.pBt);
                   68296:   if( rc==SQLITE_DONE ){
                   68297:     pc = pOp->p2 - 1;
                   68298:     rc = SQLITE_OK;
                   68299:   }
                   68300:   break;
                   68301: }
                   68302: #endif
                   68303: 
                   68304: /* Opcode: Expire P1 * * * *
                   68305: **
                   68306: ** Cause precompiled statements to become expired. An expired statement
                   68307: ** fails with an error code of SQLITE_SCHEMA if it is ever executed 
                   68308: ** (via sqlite3_step()).
                   68309: ** 
                   68310: ** If P1 is 0, then all SQL statements become expired. If P1 is non-zero,
                   68311: ** then only the currently executing statement is affected. 
                   68312: */
                   68313: case OP_Expire: {
                   68314:   if( !pOp->p1 ){
                   68315:     sqlite3ExpirePreparedStatements(db);
                   68316:   }else{
                   68317:     p->expired = 1;
                   68318:   }
                   68319:   break;
                   68320: }
                   68321: 
                   68322: #ifndef SQLITE_OMIT_SHARED_CACHE
                   68323: /* Opcode: TableLock P1 P2 P3 P4 *
                   68324: **
                   68325: ** Obtain a lock on a particular table. This instruction is only used when
                   68326: ** the shared-cache feature is enabled. 
                   68327: **
                   68328: ** P1 is the index of the database in sqlite3.aDb[] of the database
                   68329: ** on which the lock is acquired.  A readlock is obtained if P3==0 or
                   68330: ** a write lock if P3==1.
                   68331: **
                   68332: ** P2 contains the root-page of the table to lock.
                   68333: **
                   68334: ** P4 contains a pointer to the name of the table being locked. This is only
                   68335: ** used to generate an error message if the lock cannot be obtained.
                   68336: */
                   68337: case OP_TableLock: {
                   68338:   u8 isWriteLock = (u8)pOp->p3;
                   68339:   if( isWriteLock || 0==(db->flags&SQLITE_ReadUncommitted) ){
                   68340:     int p1 = pOp->p1; 
                   68341:     assert( p1>=0 && p1<db->nDb );
                   68342:     assert( (p->btreeMask & (((yDbMask)1)<<p1))!=0 );
                   68343:     assert( isWriteLock==0 || isWriteLock==1 );
                   68344:     rc = sqlite3BtreeLockTable(db->aDb[p1].pBt, pOp->p2, isWriteLock);
                   68345:     if( (rc&0xFF)==SQLITE_LOCKED ){
                   68346:       const char *z = pOp->p4.z;
                   68347:       sqlite3SetString(&p->zErrMsg, db, "database table is locked: %s", z);
                   68348:     }
                   68349:   }
                   68350:   break;
                   68351: }
                   68352: #endif /* SQLITE_OMIT_SHARED_CACHE */
                   68353: 
                   68354: #ifndef SQLITE_OMIT_VIRTUALTABLE
                   68355: /* Opcode: VBegin * * * P4 *
                   68356: **
                   68357: ** P4 may be a pointer to an sqlite3_vtab structure. If so, call the 
                   68358: ** xBegin method for that table.
                   68359: **
                   68360: ** Also, whether or not P4 is set, check that this is not being called from
                   68361: ** within a callback to a virtual table xSync() method. If it is, the error
                   68362: ** code will be set to SQLITE_LOCKED.
                   68363: */
                   68364: case OP_VBegin: {
                   68365: #if 0  /* local variables moved into u.cg */
                   68366:   VTable *pVTab;
                   68367: #endif /* local variables moved into u.cg */
                   68368:   u.cg.pVTab = pOp->p4.pVtab;
                   68369:   rc = sqlite3VtabBegin(db, u.cg.pVTab);
                   68370:   if( u.cg.pVTab ) importVtabErrMsg(p, u.cg.pVTab->pVtab);
                   68371:   break;
                   68372: }
                   68373: #endif /* SQLITE_OMIT_VIRTUALTABLE */
                   68374: 
                   68375: #ifndef SQLITE_OMIT_VIRTUALTABLE
                   68376: /* Opcode: VCreate P1 * * P4 *
                   68377: **
                   68378: ** P4 is the name of a virtual table in database P1. Call the xCreate method
                   68379: ** for that table.
                   68380: */
                   68381: case OP_VCreate: {
                   68382:   rc = sqlite3VtabCallCreate(db, pOp->p1, pOp->p4.z, &p->zErrMsg);
                   68383:   break;
                   68384: }
                   68385: #endif /* SQLITE_OMIT_VIRTUALTABLE */
                   68386: 
                   68387: #ifndef SQLITE_OMIT_VIRTUALTABLE
                   68388: /* Opcode: VDestroy P1 * * P4 *
                   68389: **
                   68390: ** P4 is the name of a virtual table in database P1.  Call the xDestroy method
                   68391: ** of that table.
                   68392: */
                   68393: case OP_VDestroy: {
                   68394:   p->inVtabMethod = 2;
                   68395:   rc = sqlite3VtabCallDestroy(db, pOp->p1, pOp->p4.z);
                   68396:   p->inVtabMethod = 0;
                   68397:   break;
                   68398: }
                   68399: #endif /* SQLITE_OMIT_VIRTUALTABLE */
                   68400: 
                   68401: #ifndef SQLITE_OMIT_VIRTUALTABLE
                   68402: /* Opcode: VOpen P1 * * P4 *
                   68403: **
                   68404: ** P4 is a pointer to a virtual table object, an sqlite3_vtab structure.
                   68405: ** P1 is a cursor number.  This opcode opens a cursor to the virtual
                   68406: ** table and stores that cursor in P1.
                   68407: */
                   68408: case OP_VOpen: {
                   68409: #if 0  /* local variables moved into u.ch */
                   68410:   VdbeCursor *pCur;
                   68411:   sqlite3_vtab_cursor *pVtabCursor;
                   68412:   sqlite3_vtab *pVtab;
                   68413:   sqlite3_module *pModule;
                   68414: #endif /* local variables moved into u.ch */
                   68415: 
                   68416:   u.ch.pCur = 0;
                   68417:   u.ch.pVtabCursor = 0;
                   68418:   u.ch.pVtab = pOp->p4.pVtab->pVtab;
                   68419:   u.ch.pModule = (sqlite3_module *)u.ch.pVtab->pModule;
                   68420:   assert(u.ch.pVtab && u.ch.pModule);
                   68421:   rc = u.ch.pModule->xOpen(u.ch.pVtab, &u.ch.pVtabCursor);
                   68422:   importVtabErrMsg(p, u.ch.pVtab);
                   68423:   if( SQLITE_OK==rc ){
                   68424:     /* Initialize sqlite3_vtab_cursor base class */
                   68425:     u.ch.pVtabCursor->pVtab = u.ch.pVtab;
                   68426: 
                   68427:     /* Initialise vdbe cursor object */
                   68428:     u.ch.pCur = allocateCursor(p, pOp->p1, 0, -1, 0);
                   68429:     if( u.ch.pCur ){
                   68430:       u.ch.pCur->pVtabCursor = u.ch.pVtabCursor;
                   68431:       u.ch.pCur->pModule = u.ch.pVtabCursor->pVtab->pModule;
                   68432:     }else{
                   68433:       db->mallocFailed = 1;
                   68434:       u.ch.pModule->xClose(u.ch.pVtabCursor);
                   68435:     }
                   68436:   }
                   68437:   break;
                   68438: }
                   68439: #endif /* SQLITE_OMIT_VIRTUALTABLE */
                   68440: 
                   68441: #ifndef SQLITE_OMIT_VIRTUALTABLE
                   68442: /* Opcode: VFilter P1 P2 P3 P4 *
                   68443: **
                   68444: ** P1 is a cursor opened using VOpen.  P2 is an address to jump to if
                   68445: ** the filtered result set is empty.
                   68446: **
                   68447: ** P4 is either NULL or a string that was generated by the xBestIndex
                   68448: ** method of the module.  The interpretation of the P4 string is left
                   68449: ** to the module implementation.
                   68450: **
                   68451: ** This opcode invokes the xFilter method on the virtual table specified
                   68452: ** by P1.  The integer query plan parameter to xFilter is stored in register
                   68453: ** P3. Register P3+1 stores the argc parameter to be passed to the
                   68454: ** xFilter method. Registers P3+2..P3+1+argc are the argc
                   68455: ** additional parameters which are passed to
                   68456: ** xFilter as argv. Register P3+2 becomes argv[0] when passed to xFilter.
                   68457: **
                   68458: ** A jump is made to P2 if the result set after filtering would be empty.
                   68459: */
                   68460: case OP_VFilter: {   /* jump */
                   68461: #if 0  /* local variables moved into u.ci */
                   68462:   int nArg;
                   68463:   int iQuery;
                   68464:   const sqlite3_module *pModule;
                   68465:   Mem *pQuery;
                   68466:   Mem *pArgc;
                   68467:   sqlite3_vtab_cursor *pVtabCursor;
                   68468:   sqlite3_vtab *pVtab;
                   68469:   VdbeCursor *pCur;
                   68470:   int res;
                   68471:   int i;
                   68472:   Mem **apArg;
                   68473: #endif /* local variables moved into u.ci */
                   68474: 
                   68475:   u.ci.pQuery = &aMem[pOp->p3];
                   68476:   u.ci.pArgc = &u.ci.pQuery[1];
                   68477:   u.ci.pCur = p->apCsr[pOp->p1];
                   68478:   assert( memIsValid(u.ci.pQuery) );
                   68479:   REGISTER_TRACE(pOp->p3, u.ci.pQuery);
                   68480:   assert( u.ci.pCur->pVtabCursor );
                   68481:   u.ci.pVtabCursor = u.ci.pCur->pVtabCursor;
                   68482:   u.ci.pVtab = u.ci.pVtabCursor->pVtab;
                   68483:   u.ci.pModule = u.ci.pVtab->pModule;
                   68484: 
                   68485:   /* Grab the index number and argc parameters */
                   68486:   assert( (u.ci.pQuery->flags&MEM_Int)!=0 && u.ci.pArgc->flags==MEM_Int );
                   68487:   u.ci.nArg = (int)u.ci.pArgc->u.i;
                   68488:   u.ci.iQuery = (int)u.ci.pQuery->u.i;
                   68489: 
                   68490:   /* Invoke the xFilter method */
                   68491:   {
                   68492:     u.ci.res = 0;
                   68493:     u.ci.apArg = p->apArg;
                   68494:     for(u.ci.i = 0; u.ci.i<u.ci.nArg; u.ci.i++){
                   68495:       u.ci.apArg[u.ci.i] = &u.ci.pArgc[u.ci.i+1];
                   68496:       sqlite3VdbeMemStoreType(u.ci.apArg[u.ci.i]);
                   68497:     }
                   68498: 
                   68499:     p->inVtabMethod = 1;
                   68500:     rc = u.ci.pModule->xFilter(u.ci.pVtabCursor, u.ci.iQuery, pOp->p4.z, u.ci.nArg, u.ci.apArg);
                   68501:     p->inVtabMethod = 0;
                   68502:     importVtabErrMsg(p, u.ci.pVtab);
                   68503:     if( rc==SQLITE_OK ){
                   68504:       u.ci.res = u.ci.pModule->xEof(u.ci.pVtabCursor);
                   68505:     }
                   68506: 
                   68507:     if( u.ci.res ){
                   68508:       pc = pOp->p2 - 1;
                   68509:     }
                   68510:   }
                   68511:   u.ci.pCur->nullRow = 0;
                   68512: 
                   68513:   break;
                   68514: }
                   68515: #endif /* SQLITE_OMIT_VIRTUALTABLE */
                   68516: 
                   68517: #ifndef SQLITE_OMIT_VIRTUALTABLE
                   68518: /* Opcode: VColumn P1 P2 P3 * *
                   68519: **
                   68520: ** Store the value of the P2-th column of
                   68521: ** the row of the virtual-table that the 
                   68522: ** P1 cursor is pointing to into register P3.
                   68523: */
                   68524: case OP_VColumn: {
                   68525: #if 0  /* local variables moved into u.cj */
                   68526:   sqlite3_vtab *pVtab;
                   68527:   const sqlite3_module *pModule;
                   68528:   Mem *pDest;
                   68529:   sqlite3_context sContext;
                   68530: #endif /* local variables moved into u.cj */
                   68531: 
                   68532:   VdbeCursor *pCur = p->apCsr[pOp->p1];
                   68533:   assert( pCur->pVtabCursor );
                   68534:   assert( pOp->p3>0 && pOp->p3<=p->nMem );
                   68535:   u.cj.pDest = &aMem[pOp->p3];
                   68536:   memAboutToChange(p, u.cj.pDest);
                   68537:   if( pCur->nullRow ){
                   68538:     sqlite3VdbeMemSetNull(u.cj.pDest);
                   68539:     break;
                   68540:   }
                   68541:   u.cj.pVtab = pCur->pVtabCursor->pVtab;
                   68542:   u.cj.pModule = u.cj.pVtab->pModule;
                   68543:   assert( u.cj.pModule->xColumn );
                   68544:   memset(&u.cj.sContext, 0, sizeof(u.cj.sContext));
                   68545: 
                   68546:   /* The output cell may already have a buffer allocated. Move
                   68547:   ** the current contents to u.cj.sContext.s so in case the user-function
                   68548:   ** can use the already allocated buffer instead of allocating a
                   68549:   ** new one.
                   68550:   */
                   68551:   sqlite3VdbeMemMove(&u.cj.sContext.s, u.cj.pDest);
                   68552:   MemSetTypeFlag(&u.cj.sContext.s, MEM_Null);
                   68553: 
                   68554:   rc = u.cj.pModule->xColumn(pCur->pVtabCursor, &u.cj.sContext, pOp->p2);
                   68555:   importVtabErrMsg(p, u.cj.pVtab);
                   68556:   if( u.cj.sContext.isError ){
                   68557:     rc = u.cj.sContext.isError;
                   68558:   }
                   68559: 
                   68560:   /* Copy the result of the function to the P3 register. We
                   68561:   ** do this regardless of whether or not an error occurred to ensure any
                   68562:   ** dynamic allocation in u.cj.sContext.s (a Mem struct) is  released.
                   68563:   */
                   68564:   sqlite3VdbeChangeEncoding(&u.cj.sContext.s, encoding);
                   68565:   sqlite3VdbeMemMove(u.cj.pDest, &u.cj.sContext.s);
                   68566:   REGISTER_TRACE(pOp->p3, u.cj.pDest);
                   68567:   UPDATE_MAX_BLOBSIZE(u.cj.pDest);
                   68568: 
                   68569:   if( sqlite3VdbeMemTooBig(u.cj.pDest) ){
                   68570:     goto too_big;
                   68571:   }
                   68572:   break;
                   68573: }
                   68574: #endif /* SQLITE_OMIT_VIRTUALTABLE */
                   68575: 
                   68576: #ifndef SQLITE_OMIT_VIRTUALTABLE
                   68577: /* Opcode: VNext P1 P2 * * *
                   68578: **
                   68579: ** Advance virtual table P1 to the next row in its result set and
                   68580: ** jump to instruction P2.  Or, if the virtual table has reached
                   68581: ** the end of its result set, then fall through to the next instruction.
                   68582: */
                   68583: case OP_VNext: {   /* jump */
                   68584: #if 0  /* local variables moved into u.ck */
                   68585:   sqlite3_vtab *pVtab;
                   68586:   const sqlite3_module *pModule;
                   68587:   int res;
                   68588:   VdbeCursor *pCur;
                   68589: #endif /* local variables moved into u.ck */
                   68590: 
                   68591:   u.ck.res = 0;
                   68592:   u.ck.pCur = p->apCsr[pOp->p1];
                   68593:   assert( u.ck.pCur->pVtabCursor );
                   68594:   if( u.ck.pCur->nullRow ){
                   68595:     break;
                   68596:   }
                   68597:   u.ck.pVtab = u.ck.pCur->pVtabCursor->pVtab;
                   68598:   u.ck.pModule = u.ck.pVtab->pModule;
                   68599:   assert( u.ck.pModule->xNext );
                   68600: 
                   68601:   /* Invoke the xNext() method of the module. There is no way for the
                   68602:   ** underlying implementation to return an error if one occurs during
                   68603:   ** xNext(). Instead, if an error occurs, true is returned (indicating that
                   68604:   ** data is available) and the error code returned when xColumn or
                   68605:   ** some other method is next invoked on the save virtual table cursor.
                   68606:   */
                   68607:   p->inVtabMethod = 1;
                   68608:   rc = u.ck.pModule->xNext(u.ck.pCur->pVtabCursor);
                   68609:   p->inVtabMethod = 0;
                   68610:   importVtabErrMsg(p, u.ck.pVtab);
                   68611:   if( rc==SQLITE_OK ){
                   68612:     u.ck.res = u.ck.pModule->xEof(u.ck.pCur->pVtabCursor);
                   68613:   }
                   68614: 
                   68615:   if( !u.ck.res ){
                   68616:     /* If there is data, jump to P2 */
                   68617:     pc = pOp->p2 - 1;
                   68618:   }
                   68619:   break;
                   68620: }
                   68621: #endif /* SQLITE_OMIT_VIRTUALTABLE */
                   68622: 
                   68623: #ifndef SQLITE_OMIT_VIRTUALTABLE
                   68624: /* Opcode: VRename P1 * * P4 *
                   68625: **
                   68626: ** P4 is a pointer to a virtual table object, an sqlite3_vtab structure.
                   68627: ** This opcode invokes the corresponding xRename method. The value
                   68628: ** in register P1 is passed as the zName argument to the xRename method.
                   68629: */
                   68630: case OP_VRename: {
                   68631: #if 0  /* local variables moved into u.cl */
                   68632:   sqlite3_vtab *pVtab;
                   68633:   Mem *pName;
                   68634: #endif /* local variables moved into u.cl */
                   68635: 
                   68636:   u.cl.pVtab = pOp->p4.pVtab->pVtab;
                   68637:   u.cl.pName = &aMem[pOp->p1];
                   68638:   assert( u.cl.pVtab->pModule->xRename );
                   68639:   assert( memIsValid(u.cl.pName) );
                   68640:   REGISTER_TRACE(pOp->p1, u.cl.pName);
                   68641:   assert( u.cl.pName->flags & MEM_Str );
                   68642:   rc = u.cl.pVtab->pModule->xRename(u.cl.pVtab, u.cl.pName->z);
                   68643:   importVtabErrMsg(p, u.cl.pVtab);
                   68644:   p->expired = 0;
                   68645: 
                   68646:   break;
                   68647: }
                   68648: #endif
                   68649: 
                   68650: #ifndef SQLITE_OMIT_VIRTUALTABLE
                   68651: /* Opcode: VUpdate P1 P2 P3 P4 *
                   68652: **
                   68653: ** P4 is a pointer to a virtual table object, an sqlite3_vtab structure.
                   68654: ** This opcode invokes the corresponding xUpdate method. P2 values
                   68655: ** are contiguous memory cells starting at P3 to pass to the xUpdate 
                   68656: ** invocation. The value in register (P3+P2-1) corresponds to the 
                   68657: ** p2th element of the argv array passed to xUpdate.
                   68658: **
                   68659: ** The xUpdate method will do a DELETE or an INSERT or both.
                   68660: ** The argv[0] element (which corresponds to memory cell P3)
                   68661: ** is the rowid of a row to delete.  If argv[0] is NULL then no 
                   68662: ** deletion occurs.  The argv[1] element is the rowid of the new 
                   68663: ** row.  This can be NULL to have the virtual table select the new 
                   68664: ** rowid for itself.  The subsequent elements in the array are 
                   68665: ** the values of columns in the new row.
                   68666: **
                   68667: ** If P2==1 then no insert is performed.  argv[0] is the rowid of
                   68668: ** a row to delete.
                   68669: **
                   68670: ** P1 is a boolean flag. If it is set to true and the xUpdate call
                   68671: ** is successful, then the value returned by sqlite3_last_insert_rowid() 
                   68672: ** is set to the value of the rowid for the row just inserted.
                   68673: */
                   68674: case OP_VUpdate: {
                   68675: #if 0  /* local variables moved into u.cm */
                   68676:   sqlite3_vtab *pVtab;
                   68677:   sqlite3_module *pModule;
                   68678:   int nArg;
                   68679:   int i;
                   68680:   sqlite_int64 rowid;
                   68681:   Mem **apArg;
                   68682:   Mem *pX;
                   68683: #endif /* local variables moved into u.cm */
                   68684: 
                   68685:   assert( pOp->p2==1        || pOp->p5==OE_Fail   || pOp->p5==OE_Rollback
                   68686:        || pOp->p5==OE_Abort || pOp->p5==OE_Ignore || pOp->p5==OE_Replace
                   68687:   );
                   68688:   u.cm.pVtab = pOp->p4.pVtab->pVtab;
                   68689:   u.cm.pModule = (sqlite3_module *)u.cm.pVtab->pModule;
                   68690:   u.cm.nArg = pOp->p2;
                   68691:   assert( pOp->p4type==P4_VTAB );
                   68692:   if( ALWAYS(u.cm.pModule->xUpdate) ){
                   68693:     u8 vtabOnConflict = db->vtabOnConflict;
                   68694:     u.cm.apArg = p->apArg;
                   68695:     u.cm.pX = &aMem[pOp->p3];
                   68696:     for(u.cm.i=0; u.cm.i<u.cm.nArg; u.cm.i++){
                   68697:       assert( memIsValid(u.cm.pX) );
                   68698:       memAboutToChange(p, u.cm.pX);
                   68699:       sqlite3VdbeMemStoreType(u.cm.pX);
                   68700:       u.cm.apArg[u.cm.i] = u.cm.pX;
                   68701:       u.cm.pX++;
                   68702:     }
                   68703:     db->vtabOnConflict = pOp->p5;
                   68704:     rc = u.cm.pModule->xUpdate(u.cm.pVtab, u.cm.nArg, u.cm.apArg, &u.cm.rowid);
                   68705:     db->vtabOnConflict = vtabOnConflict;
                   68706:     importVtabErrMsg(p, u.cm.pVtab);
                   68707:     if( rc==SQLITE_OK && pOp->p1 ){
                   68708:       assert( u.cm.nArg>1 && u.cm.apArg[0] && (u.cm.apArg[0]->flags&MEM_Null) );
                   68709:       db->lastRowid = lastRowid = u.cm.rowid;
                   68710:     }
                   68711:     if( rc==SQLITE_CONSTRAINT && pOp->p4.pVtab->bConstraint ){
                   68712:       if( pOp->p5==OE_Ignore ){
                   68713:         rc = SQLITE_OK;
                   68714:       }else{
                   68715:         p->errorAction = ((pOp->p5==OE_Replace) ? OE_Abort : pOp->p5);
                   68716:       }
                   68717:     }else{
                   68718:       p->nChange++;
                   68719:     }
                   68720:   }
                   68721:   break;
                   68722: }
                   68723: #endif /* SQLITE_OMIT_VIRTUALTABLE */
                   68724: 
                   68725: #ifndef  SQLITE_OMIT_PAGER_PRAGMAS
                   68726: /* Opcode: Pagecount P1 P2 * * *
                   68727: **
                   68728: ** Write the current number of pages in database P1 to memory cell P2.
                   68729: */
                   68730: case OP_Pagecount: {            /* out2-prerelease */
                   68731:   pOut->u.i = sqlite3BtreeLastPage(db->aDb[pOp->p1].pBt);
                   68732:   break;
                   68733: }
                   68734: #endif
                   68735: 
                   68736: 
                   68737: #ifndef  SQLITE_OMIT_PAGER_PRAGMAS
                   68738: /* Opcode: MaxPgcnt P1 P2 P3 * *
                   68739: **
                   68740: ** Try to set the maximum page count for database P1 to the value in P3.
                   68741: ** Do not let the maximum page count fall below the current page count and
                   68742: ** do not change the maximum page count value if P3==0.
                   68743: **
                   68744: ** Store the maximum page count after the change in register P2.
                   68745: */
                   68746: case OP_MaxPgcnt: {            /* out2-prerelease */
                   68747:   unsigned int newMax;
                   68748:   Btree *pBt;
                   68749: 
                   68750:   pBt = db->aDb[pOp->p1].pBt;
                   68751:   newMax = 0;
                   68752:   if( pOp->p3 ){
                   68753:     newMax = sqlite3BtreeLastPage(pBt);
                   68754:     if( newMax < (unsigned)pOp->p3 ) newMax = (unsigned)pOp->p3;
                   68755:   }
                   68756:   pOut->u.i = sqlite3BtreeMaxPageCount(pBt, newMax);
                   68757:   break;
                   68758: }
                   68759: #endif
                   68760: 
                   68761: 
                   68762: #ifndef SQLITE_OMIT_TRACE
                   68763: /* Opcode: Trace * * * P4 *
                   68764: **
                   68765: ** If tracing is enabled (by the sqlite3_trace()) interface, then
                   68766: ** the UTF-8 string contained in P4 is emitted on the trace callback.
                   68767: */
                   68768: case OP_Trace: {
                   68769: #if 0  /* local variables moved into u.cn */
                   68770:   char *zTrace;
                   68771:   char *z;
                   68772: #endif /* local variables moved into u.cn */
                   68773: 
                   68774:   if( db->xTrace && (u.cn.zTrace = (pOp->p4.z ? pOp->p4.z : p->zSql))!=0 ){
                   68775:     u.cn.z = sqlite3VdbeExpandSql(p, u.cn.zTrace);
                   68776:     db->xTrace(db->pTraceArg, u.cn.z);
                   68777:     sqlite3DbFree(db, u.cn.z);
                   68778:   }
                   68779: #ifdef SQLITE_DEBUG
                   68780:   if( (db->flags & SQLITE_SqlTrace)!=0
                   68781:    && (u.cn.zTrace = (pOp->p4.z ? pOp->p4.z : p->zSql))!=0
                   68782:   ){
                   68783:     sqlite3DebugPrintf("SQL-trace: %s\n", u.cn.zTrace);
                   68784:   }
                   68785: #endif /* SQLITE_DEBUG */
                   68786:   break;
                   68787: }
                   68788: #endif
                   68789: 
                   68790: 
                   68791: /* Opcode: Noop * * * * *
                   68792: **
                   68793: ** Do nothing.  This instruction is often useful as a jump
                   68794: ** destination.
                   68795: */
                   68796: /*
                   68797: ** The magic Explain opcode are only inserted when explain==2 (which
                   68798: ** is to say when the EXPLAIN QUERY PLAN syntax is used.)
                   68799: ** This opcode records information from the optimizer.  It is the
                   68800: ** the same as a no-op.  This opcodesnever appears in a real VM program.
                   68801: */
                   68802: default: {          /* This is really OP_Noop and OP_Explain */
                   68803:   assert( pOp->opcode==OP_Noop || pOp->opcode==OP_Explain );
                   68804:   break;
                   68805: }
                   68806: 
                   68807: /*****************************************************************************
                   68808: ** The cases of the switch statement above this line should all be indented
                   68809: ** by 6 spaces.  But the left-most 6 spaces have been removed to improve the
                   68810: ** readability.  From this point on down, the normal indentation rules are
                   68811: ** restored.
                   68812: *****************************************************************************/
                   68813:     }
                   68814: 
                   68815: #ifdef VDBE_PROFILE
                   68816:     {
                   68817:       u64 elapsed = sqlite3Hwtime() - start;
                   68818:       pOp->cycles += elapsed;
                   68819:       pOp->cnt++;
                   68820: #if 0
                   68821:         fprintf(stdout, "%10llu ", elapsed);
                   68822:         sqlite3VdbePrintOp(stdout, origPc, &aOp[origPc]);
                   68823: #endif
                   68824:     }
                   68825: #endif
                   68826: 
                   68827:     /* The following code adds nothing to the actual functionality
                   68828:     ** of the program.  It is only here for testing and debugging.
                   68829:     ** On the other hand, it does burn CPU cycles every time through
                   68830:     ** the evaluator loop.  So we can leave it out when NDEBUG is defined.
                   68831:     */
                   68832: #ifndef NDEBUG
                   68833:     assert( pc>=-1 && pc<p->nOp );
                   68834: 
                   68835: #ifdef SQLITE_DEBUG
                   68836:     if( p->trace ){
                   68837:       if( rc!=0 ) fprintf(p->trace,"rc=%d\n",rc);
                   68838:       if( pOp->opflags & (OPFLG_OUT2_PRERELEASE|OPFLG_OUT2) ){
                   68839:         registerTrace(p->trace, pOp->p2, &aMem[pOp->p2]);
                   68840:       }
                   68841:       if( pOp->opflags & OPFLG_OUT3 ){
                   68842:         registerTrace(p->trace, pOp->p3, &aMem[pOp->p3]);
                   68843:       }
                   68844:     }
                   68845: #endif  /* SQLITE_DEBUG */
                   68846: #endif  /* NDEBUG */
                   68847:   }  /* The end of the for(;;) loop the loops through opcodes */
                   68848: 
                   68849:   /* If we reach this point, it means that execution is finished with
                   68850:   ** an error of some kind.
                   68851:   */
                   68852: vdbe_error_halt:
                   68853:   assert( rc );
                   68854:   p->rc = rc;
                   68855:   testcase( sqlite3GlobalConfig.xLog!=0 );
                   68856:   sqlite3_log(rc, "statement aborts at %d: [%s] %s", 
                   68857:                    pc, p->zSql, p->zErrMsg);
                   68858:   sqlite3VdbeHalt(p);
                   68859:   if( rc==SQLITE_IOERR_NOMEM ) db->mallocFailed = 1;
                   68860:   rc = SQLITE_ERROR;
                   68861:   if( resetSchemaOnFault>0 ){
                   68862:     sqlite3ResetInternalSchema(db, resetSchemaOnFault-1);
                   68863:   }
                   68864: 
                   68865:   /* This is the only way out of this procedure.  We have to
                   68866:   ** release the mutexes on btrees that were acquired at the
                   68867:   ** top. */
                   68868: vdbe_return:
                   68869:   db->lastRowid = lastRowid;
                   68870:   sqlite3VdbeLeave(p);
                   68871:   return rc;
                   68872: 
                   68873:   /* Jump to here if a string or blob larger than SQLITE_MAX_LENGTH
                   68874:   ** is encountered.
                   68875:   */
                   68876: too_big:
                   68877:   sqlite3SetString(&p->zErrMsg, db, "string or blob too big");
                   68878:   rc = SQLITE_TOOBIG;
                   68879:   goto vdbe_error_halt;
                   68880: 
                   68881:   /* Jump to here if a malloc() fails.
                   68882:   */
                   68883: no_mem:
                   68884:   db->mallocFailed = 1;
                   68885:   sqlite3SetString(&p->zErrMsg, db, "out of memory");
                   68886:   rc = SQLITE_NOMEM;
                   68887:   goto vdbe_error_halt;
                   68888: 
                   68889:   /* Jump to here for any other kind of fatal error.  The "rc" variable
                   68890:   ** should hold the error number.
                   68891:   */
                   68892: abort_due_to_error:
                   68893:   assert( p->zErrMsg==0 );
                   68894:   if( db->mallocFailed ) rc = SQLITE_NOMEM;
                   68895:   if( rc!=SQLITE_IOERR_NOMEM ){
                   68896:     sqlite3SetString(&p->zErrMsg, db, "%s", sqlite3ErrStr(rc));
                   68897:   }
                   68898:   goto vdbe_error_halt;
                   68899: 
                   68900:   /* Jump to here if the sqlite3_interrupt() API sets the interrupt
                   68901:   ** flag.
                   68902:   */
                   68903: abort_due_to_interrupt:
                   68904:   assert( db->u1.isInterrupted );
                   68905:   rc = SQLITE_INTERRUPT;
                   68906:   p->rc = rc;
                   68907:   sqlite3SetString(&p->zErrMsg, db, "%s", sqlite3ErrStr(rc));
                   68908:   goto vdbe_error_halt;
                   68909: }
                   68910: 
                   68911: /************** End of vdbe.c ************************************************/
                   68912: /************** Begin file vdbeblob.c ****************************************/
                   68913: /*
                   68914: ** 2007 May 1
                   68915: **
                   68916: ** The author disclaims copyright to this source code.  In place of
                   68917: ** a legal notice, here is a blessing:
                   68918: **
                   68919: **    May you do good and not evil.
                   68920: **    May you find forgiveness for yourself and forgive others.
                   68921: **    May you share freely, never taking more than you give.
                   68922: **
                   68923: *************************************************************************
                   68924: **
                   68925: ** This file contains code used to implement incremental BLOB I/O.
                   68926: */
                   68927: 
                   68928: 
                   68929: #ifndef SQLITE_OMIT_INCRBLOB
                   68930: 
                   68931: /*
                   68932: ** Valid sqlite3_blob* handles point to Incrblob structures.
                   68933: */
                   68934: typedef struct Incrblob Incrblob;
                   68935: struct Incrblob {
                   68936:   int flags;              /* Copy of "flags" passed to sqlite3_blob_open() */
                   68937:   int nByte;              /* Size of open blob, in bytes */
                   68938:   int iOffset;            /* Byte offset of blob in cursor data */
                   68939:   int iCol;               /* Table column this handle is open on */
                   68940:   BtCursor *pCsr;         /* Cursor pointing at blob row */
                   68941:   sqlite3_stmt *pStmt;    /* Statement holding cursor open */
                   68942:   sqlite3 *db;            /* The associated database */
                   68943: };
                   68944: 
                   68945: 
                   68946: /*
                   68947: ** This function is used by both blob_open() and blob_reopen(). It seeks
                   68948: ** the b-tree cursor associated with blob handle p to point to row iRow.
                   68949: ** If successful, SQLITE_OK is returned and subsequent calls to
                   68950: ** sqlite3_blob_read() or sqlite3_blob_write() access the specified row.
                   68951: **
                   68952: ** If an error occurs, or if the specified row does not exist or does not
                   68953: ** contain a value of type TEXT or BLOB in the column nominated when the
                   68954: ** blob handle was opened, then an error code is returned and *pzErr may
                   68955: ** be set to point to a buffer containing an error message. It is the
                   68956: ** responsibility of the caller to free the error message buffer using
                   68957: ** sqlite3DbFree().
                   68958: **
                   68959: ** If an error does occur, then the b-tree cursor is closed. All subsequent
                   68960: ** calls to sqlite3_blob_read(), blob_write() or blob_reopen() will 
                   68961: ** immediately return SQLITE_ABORT.
                   68962: */
                   68963: static int blobSeekToRow(Incrblob *p, sqlite3_int64 iRow, char **pzErr){
                   68964:   int rc;                         /* Error code */
                   68965:   char *zErr = 0;                 /* Error message */
                   68966:   Vdbe *v = (Vdbe *)p->pStmt;
                   68967: 
                   68968:   /* Set the value of the SQL statements only variable to integer iRow. 
                   68969:   ** This is done directly instead of using sqlite3_bind_int64() to avoid 
                   68970:   ** triggering asserts related to mutexes.
                   68971:   */
                   68972:   assert( v->aVar[0].flags&MEM_Int );
                   68973:   v->aVar[0].u.i = iRow;
                   68974: 
                   68975:   rc = sqlite3_step(p->pStmt);
                   68976:   if( rc==SQLITE_ROW ){
                   68977:     u32 type = v->apCsr[0]->aType[p->iCol];
                   68978:     if( type<12 ){
                   68979:       zErr = sqlite3MPrintf(p->db, "cannot open value of type %s",
                   68980:           type==0?"null": type==7?"real": "integer"
                   68981:       );
                   68982:       rc = SQLITE_ERROR;
                   68983:       sqlite3_finalize(p->pStmt);
                   68984:       p->pStmt = 0;
                   68985:     }else{
                   68986:       p->iOffset = v->apCsr[0]->aOffset[p->iCol];
                   68987:       p->nByte = sqlite3VdbeSerialTypeLen(type);
                   68988:       p->pCsr =  v->apCsr[0]->pCursor;
                   68989:       sqlite3BtreeEnterCursor(p->pCsr);
                   68990:       sqlite3BtreeCacheOverflow(p->pCsr);
                   68991:       sqlite3BtreeLeaveCursor(p->pCsr);
                   68992:     }
                   68993:   }
                   68994: 
                   68995:   if( rc==SQLITE_ROW ){
                   68996:     rc = SQLITE_OK;
                   68997:   }else if( p->pStmt ){
                   68998:     rc = sqlite3_finalize(p->pStmt);
                   68999:     p->pStmt = 0;
                   69000:     if( rc==SQLITE_OK ){
                   69001:       zErr = sqlite3MPrintf(p->db, "no such rowid: %lld", iRow);
                   69002:       rc = SQLITE_ERROR;
                   69003:     }else{
                   69004:       zErr = sqlite3MPrintf(p->db, "%s", sqlite3_errmsg(p->db));
                   69005:     }
                   69006:   }
                   69007: 
                   69008:   assert( rc!=SQLITE_OK || zErr==0 );
                   69009:   assert( rc!=SQLITE_ROW && rc!=SQLITE_DONE );
                   69010: 
                   69011:   *pzErr = zErr;
                   69012:   return rc;
                   69013: }
                   69014: 
                   69015: /*
                   69016: ** Open a blob handle.
                   69017: */
                   69018: SQLITE_API int sqlite3_blob_open(
                   69019:   sqlite3* db,            /* The database connection */
                   69020:   const char *zDb,        /* The attached database containing the blob */
                   69021:   const char *zTable,     /* The table containing the blob */
                   69022:   const char *zColumn,    /* The column containing the blob */
                   69023:   sqlite_int64 iRow,      /* The row containing the glob */
                   69024:   int flags,              /* True -> read/write access, false -> read-only */
                   69025:   sqlite3_blob **ppBlob   /* Handle for accessing the blob returned here */
                   69026: ){
                   69027:   int nAttempt = 0;
                   69028:   int iCol;               /* Index of zColumn in row-record */
                   69029: 
                   69030:   /* This VDBE program seeks a btree cursor to the identified 
                   69031:   ** db/table/row entry. The reason for using a vdbe program instead
                   69032:   ** of writing code to use the b-tree layer directly is that the
                   69033:   ** vdbe program will take advantage of the various transaction,
                   69034:   ** locking and error handling infrastructure built into the vdbe.
                   69035:   **
                   69036:   ** After seeking the cursor, the vdbe executes an OP_ResultRow.
                   69037:   ** Code external to the Vdbe then "borrows" the b-tree cursor and
                   69038:   ** uses it to implement the blob_read(), blob_write() and 
                   69039:   ** blob_bytes() functions.
                   69040:   **
                   69041:   ** The sqlite3_blob_close() function finalizes the vdbe program,
                   69042:   ** which closes the b-tree cursor and (possibly) commits the 
                   69043:   ** transaction.
                   69044:   */
                   69045:   static const VdbeOpList openBlob[] = {
                   69046:     {OP_Transaction, 0, 0, 0},     /* 0: Start a transaction */
                   69047:     {OP_VerifyCookie, 0, 0, 0},    /* 1: Check the schema cookie */
                   69048:     {OP_TableLock, 0, 0, 0},       /* 2: Acquire a read or write lock */
                   69049: 
                   69050:     /* One of the following two instructions is replaced by an OP_Noop. */
                   69051:     {OP_OpenRead, 0, 0, 0},        /* 3: Open cursor 0 for reading */
                   69052:     {OP_OpenWrite, 0, 0, 0},       /* 4: Open cursor 0 for read/write */
                   69053: 
                   69054:     {OP_Variable, 1, 1, 1},        /* 5: Push the rowid to the stack */
                   69055:     {OP_NotExists, 0, 10, 1},      /* 6: Seek the cursor */
                   69056:     {OP_Column, 0, 0, 1},          /* 7  */
                   69057:     {OP_ResultRow, 1, 0, 0},       /* 8  */
                   69058:     {OP_Goto, 0, 5, 0},            /* 9  */
                   69059:     {OP_Close, 0, 0, 0},           /* 10 */
                   69060:     {OP_Halt, 0, 0, 0},            /* 11 */
                   69061:   };
                   69062: 
                   69063:   int rc = SQLITE_OK;
                   69064:   char *zErr = 0;
                   69065:   Table *pTab;
                   69066:   Parse *pParse = 0;
                   69067:   Incrblob *pBlob = 0;
                   69068: 
                   69069:   flags = !!flags;                /* flags = (flags ? 1 : 0); */
                   69070:   *ppBlob = 0;
                   69071: 
                   69072:   sqlite3_mutex_enter(db->mutex);
                   69073: 
                   69074:   pBlob = (Incrblob *)sqlite3DbMallocZero(db, sizeof(Incrblob));
                   69075:   if( !pBlob ) goto blob_open_out;
                   69076:   pParse = sqlite3StackAllocRaw(db, sizeof(*pParse));
                   69077:   if( !pParse ) goto blob_open_out;
                   69078: 
                   69079:   do {
                   69080:     memset(pParse, 0, sizeof(Parse));
                   69081:     pParse->db = db;
                   69082:     sqlite3DbFree(db, zErr);
                   69083:     zErr = 0;
                   69084: 
                   69085:     sqlite3BtreeEnterAll(db);
                   69086:     pTab = sqlite3LocateTable(pParse, 0, zTable, zDb);
                   69087:     if( pTab && IsVirtual(pTab) ){
                   69088:       pTab = 0;
                   69089:       sqlite3ErrorMsg(pParse, "cannot open virtual table: %s", zTable);
                   69090:     }
                   69091: #ifndef SQLITE_OMIT_VIEW
                   69092:     if( pTab && pTab->pSelect ){
                   69093:       pTab = 0;
                   69094:       sqlite3ErrorMsg(pParse, "cannot open view: %s", zTable);
                   69095:     }
                   69096: #endif
                   69097:     if( !pTab ){
                   69098:       if( pParse->zErrMsg ){
                   69099:         sqlite3DbFree(db, zErr);
                   69100:         zErr = pParse->zErrMsg;
                   69101:         pParse->zErrMsg = 0;
                   69102:       }
                   69103:       rc = SQLITE_ERROR;
                   69104:       sqlite3BtreeLeaveAll(db);
                   69105:       goto blob_open_out;
                   69106:     }
                   69107: 
                   69108:     /* Now search pTab for the exact column. */
                   69109:     for(iCol=0; iCol<pTab->nCol; iCol++) {
                   69110:       if( sqlite3StrICmp(pTab->aCol[iCol].zName, zColumn)==0 ){
                   69111:         break;
                   69112:       }
                   69113:     }
                   69114:     if( iCol==pTab->nCol ){
                   69115:       sqlite3DbFree(db, zErr);
                   69116:       zErr = sqlite3MPrintf(db, "no such column: \"%s\"", zColumn);
                   69117:       rc = SQLITE_ERROR;
                   69118:       sqlite3BtreeLeaveAll(db);
                   69119:       goto blob_open_out;
                   69120:     }
                   69121: 
                   69122:     /* If the value is being opened for writing, check that the
                   69123:     ** column is not indexed, and that it is not part of a foreign key. 
                   69124:     ** It is against the rules to open a column to which either of these
                   69125:     ** descriptions applies for writing.  */
                   69126:     if( flags ){
                   69127:       const char *zFault = 0;
                   69128:       Index *pIdx;
                   69129: #ifndef SQLITE_OMIT_FOREIGN_KEY
                   69130:       if( db->flags&SQLITE_ForeignKeys ){
                   69131:         /* Check that the column is not part of an FK child key definition. It
                   69132:         ** is not necessary to check if it is part of a parent key, as parent
                   69133:         ** key columns must be indexed. The check below will pick up this 
                   69134:         ** case.  */
                   69135:         FKey *pFKey;
                   69136:         for(pFKey=pTab->pFKey; pFKey; pFKey=pFKey->pNextFrom){
                   69137:           int j;
                   69138:           for(j=0; j<pFKey->nCol; j++){
                   69139:             if( pFKey->aCol[j].iFrom==iCol ){
                   69140:               zFault = "foreign key";
                   69141:             }
                   69142:           }
                   69143:         }
                   69144:       }
                   69145: #endif
                   69146:       for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
                   69147:         int j;
                   69148:         for(j=0; j<pIdx->nColumn; j++){
                   69149:           if( pIdx->aiColumn[j]==iCol ){
                   69150:             zFault = "indexed";
                   69151:           }
                   69152:         }
                   69153:       }
                   69154:       if( zFault ){
                   69155:         sqlite3DbFree(db, zErr);
                   69156:         zErr = sqlite3MPrintf(db, "cannot open %s column for writing", zFault);
                   69157:         rc = SQLITE_ERROR;
                   69158:         sqlite3BtreeLeaveAll(db);
                   69159:         goto blob_open_out;
                   69160:       }
                   69161:     }
                   69162: 
                   69163:     pBlob->pStmt = (sqlite3_stmt *)sqlite3VdbeCreate(db);
                   69164:     assert( pBlob->pStmt || db->mallocFailed );
                   69165:     if( pBlob->pStmt ){
                   69166:       Vdbe *v = (Vdbe *)pBlob->pStmt;
                   69167:       int iDb = sqlite3SchemaToIndex(db, pTab->pSchema);
                   69168: 
                   69169:       sqlite3VdbeAddOpList(v, sizeof(openBlob)/sizeof(VdbeOpList), openBlob);
                   69170: 
                   69171: 
                   69172:       /* Configure the OP_Transaction */
                   69173:       sqlite3VdbeChangeP1(v, 0, iDb);
                   69174:       sqlite3VdbeChangeP2(v, 0, flags);
                   69175: 
                   69176:       /* Configure the OP_VerifyCookie */
                   69177:       sqlite3VdbeChangeP1(v, 1, iDb);
                   69178:       sqlite3VdbeChangeP2(v, 1, pTab->pSchema->schema_cookie);
                   69179:       sqlite3VdbeChangeP3(v, 1, pTab->pSchema->iGeneration);
                   69180: 
                   69181:       /* Make sure a mutex is held on the table to be accessed */
                   69182:       sqlite3VdbeUsesBtree(v, iDb); 
                   69183: 
                   69184:       /* Configure the OP_TableLock instruction */
                   69185: #ifdef SQLITE_OMIT_SHARED_CACHE
                   69186:       sqlite3VdbeChangeToNoop(v, 2, 1);
                   69187: #else
                   69188:       sqlite3VdbeChangeP1(v, 2, iDb);
                   69189:       sqlite3VdbeChangeP2(v, 2, pTab->tnum);
                   69190:       sqlite3VdbeChangeP3(v, 2, flags);
                   69191:       sqlite3VdbeChangeP4(v, 2, pTab->zName, P4_TRANSIENT);
                   69192: #endif
                   69193: 
                   69194:       /* Remove either the OP_OpenWrite or OpenRead. Set the P2 
                   69195:       ** parameter of the other to pTab->tnum.  */
                   69196:       sqlite3VdbeChangeToNoop(v, 4 - flags, 1);
                   69197:       sqlite3VdbeChangeP2(v, 3 + flags, pTab->tnum);
                   69198:       sqlite3VdbeChangeP3(v, 3 + flags, iDb);
                   69199: 
                   69200:       /* Configure the number of columns. Configure the cursor to
                   69201:       ** think that the table has one more column than it really
                   69202:       ** does. An OP_Column to retrieve this imaginary column will
                   69203:       ** always return an SQL NULL. This is useful because it means
                   69204:       ** we can invoke OP_Column to fill in the vdbe cursors type 
                   69205:       ** and offset cache without causing any IO.
                   69206:       */
                   69207:       sqlite3VdbeChangeP4(v, 3+flags, SQLITE_INT_TO_PTR(pTab->nCol+1),P4_INT32);
                   69208:       sqlite3VdbeChangeP2(v, 7, pTab->nCol);
                   69209:       if( !db->mallocFailed ){
                   69210:         pParse->nVar = 1;
                   69211:         pParse->nMem = 1;
                   69212:         pParse->nTab = 1;
                   69213:         sqlite3VdbeMakeReady(v, pParse);
                   69214:       }
                   69215:     }
                   69216:    
                   69217:     pBlob->flags = flags;
                   69218:     pBlob->iCol = iCol;
                   69219:     pBlob->db = db;
                   69220:     sqlite3BtreeLeaveAll(db);
                   69221:     if( db->mallocFailed ){
                   69222:       goto blob_open_out;
                   69223:     }
                   69224:     sqlite3_bind_int64(pBlob->pStmt, 1, iRow);
                   69225:     rc = blobSeekToRow(pBlob, iRow, &zErr);
                   69226:   } while( (++nAttempt)<5 && rc==SQLITE_SCHEMA );
                   69227: 
                   69228: blob_open_out:
                   69229:   if( rc==SQLITE_OK && db->mallocFailed==0 ){
                   69230:     *ppBlob = (sqlite3_blob *)pBlob;
                   69231:   }else{
                   69232:     if( pBlob && pBlob->pStmt ) sqlite3VdbeFinalize((Vdbe *)pBlob->pStmt);
                   69233:     sqlite3DbFree(db, pBlob);
                   69234:   }
                   69235:   sqlite3Error(db, rc, (zErr ? "%s" : 0), zErr);
                   69236:   sqlite3DbFree(db, zErr);
                   69237:   sqlite3StackFree(db, pParse);
                   69238:   rc = sqlite3ApiExit(db, rc);
                   69239:   sqlite3_mutex_leave(db->mutex);
                   69240:   return rc;
                   69241: }
                   69242: 
                   69243: /*
                   69244: ** Close a blob handle that was previously created using
                   69245: ** sqlite3_blob_open().
                   69246: */
                   69247: SQLITE_API int sqlite3_blob_close(sqlite3_blob *pBlob){
                   69248:   Incrblob *p = (Incrblob *)pBlob;
                   69249:   int rc;
                   69250:   sqlite3 *db;
                   69251: 
                   69252:   if( p ){
                   69253:     db = p->db;
                   69254:     sqlite3_mutex_enter(db->mutex);
                   69255:     rc = sqlite3_finalize(p->pStmt);
                   69256:     sqlite3DbFree(db, p);
                   69257:     sqlite3_mutex_leave(db->mutex);
                   69258:   }else{
                   69259:     rc = SQLITE_OK;
                   69260:   }
                   69261:   return rc;
                   69262: }
                   69263: 
                   69264: /*
                   69265: ** Perform a read or write operation on a blob
                   69266: */
                   69267: static int blobReadWrite(
                   69268:   sqlite3_blob *pBlob, 
                   69269:   void *z, 
                   69270:   int n, 
                   69271:   int iOffset, 
                   69272:   int (*xCall)(BtCursor*, u32, u32, void*)
                   69273: ){
                   69274:   int rc;
                   69275:   Incrblob *p = (Incrblob *)pBlob;
                   69276:   Vdbe *v;
                   69277:   sqlite3 *db;
                   69278: 
                   69279:   if( p==0 ) return SQLITE_MISUSE_BKPT;
                   69280:   db = p->db;
                   69281:   sqlite3_mutex_enter(db->mutex);
                   69282:   v = (Vdbe*)p->pStmt;
                   69283: 
                   69284:   if( n<0 || iOffset<0 || (iOffset+n)>p->nByte ){
                   69285:     /* Request is out of range. Return a transient error. */
                   69286:     rc = SQLITE_ERROR;
                   69287:     sqlite3Error(db, SQLITE_ERROR, 0);
                   69288:   }else if( v==0 ){
                   69289:     /* If there is no statement handle, then the blob-handle has
                   69290:     ** already been invalidated. Return SQLITE_ABORT in this case.
                   69291:     */
                   69292:     rc = SQLITE_ABORT;
                   69293:   }else{
                   69294:     /* Call either BtreeData() or BtreePutData(). If SQLITE_ABORT is
                   69295:     ** returned, clean-up the statement handle.
                   69296:     */
                   69297:     assert( db == v->db );
                   69298:     sqlite3BtreeEnterCursor(p->pCsr);
                   69299:     rc = xCall(p->pCsr, iOffset+p->iOffset, n, z);
                   69300:     sqlite3BtreeLeaveCursor(p->pCsr);
                   69301:     if( rc==SQLITE_ABORT ){
                   69302:       sqlite3VdbeFinalize(v);
                   69303:       p->pStmt = 0;
                   69304:     }else{
                   69305:       db->errCode = rc;
                   69306:       v->rc = rc;
                   69307:     }
                   69308:   }
                   69309:   rc = sqlite3ApiExit(db, rc);
                   69310:   sqlite3_mutex_leave(db->mutex);
                   69311:   return rc;
                   69312: }
                   69313: 
                   69314: /*
                   69315: ** Read data from a blob handle.
                   69316: */
                   69317: SQLITE_API int sqlite3_blob_read(sqlite3_blob *pBlob, void *z, int n, int iOffset){
                   69318:   return blobReadWrite(pBlob, z, n, iOffset, sqlite3BtreeData);
                   69319: }
                   69320: 
                   69321: /*
                   69322: ** Write data to a blob handle.
                   69323: */
                   69324: SQLITE_API int sqlite3_blob_write(sqlite3_blob *pBlob, const void *z, int n, int iOffset){
                   69325:   return blobReadWrite(pBlob, (void *)z, n, iOffset, sqlite3BtreePutData);
                   69326: }
                   69327: 
                   69328: /*
                   69329: ** Query a blob handle for the size of the data.
                   69330: **
                   69331: ** The Incrblob.nByte field is fixed for the lifetime of the Incrblob
                   69332: ** so no mutex is required for access.
                   69333: */
                   69334: SQLITE_API int sqlite3_blob_bytes(sqlite3_blob *pBlob){
                   69335:   Incrblob *p = (Incrblob *)pBlob;
                   69336:   return (p && p->pStmt) ? p->nByte : 0;
                   69337: }
                   69338: 
                   69339: /*
                   69340: ** Move an existing blob handle to point to a different row of the same
                   69341: ** database table.
                   69342: **
                   69343: ** If an error occurs, or if the specified row does not exist or does not
                   69344: ** contain a blob or text value, then an error code is returned and the
                   69345: ** database handle error code and message set. If this happens, then all 
                   69346: ** subsequent calls to sqlite3_blob_xxx() functions (except blob_close()) 
                   69347: ** immediately return SQLITE_ABORT.
                   69348: */
                   69349: SQLITE_API int sqlite3_blob_reopen(sqlite3_blob *pBlob, sqlite3_int64 iRow){
                   69350:   int rc;
                   69351:   Incrblob *p = (Incrblob *)pBlob;
                   69352:   sqlite3 *db;
                   69353: 
                   69354:   if( p==0 ) return SQLITE_MISUSE_BKPT;
                   69355:   db = p->db;
                   69356:   sqlite3_mutex_enter(db->mutex);
                   69357: 
                   69358:   if( p->pStmt==0 ){
                   69359:     /* If there is no statement handle, then the blob-handle has
                   69360:     ** already been invalidated. Return SQLITE_ABORT in this case.
                   69361:     */
                   69362:     rc = SQLITE_ABORT;
                   69363:   }else{
                   69364:     char *zErr;
                   69365:     rc = blobSeekToRow(p, iRow, &zErr);
                   69366:     if( rc!=SQLITE_OK ){
                   69367:       sqlite3Error(db, rc, (zErr ? "%s" : 0), zErr);
                   69368:       sqlite3DbFree(db, zErr);
                   69369:     }
                   69370:     assert( rc!=SQLITE_SCHEMA );
                   69371:   }
                   69372: 
                   69373:   rc = sqlite3ApiExit(db, rc);
                   69374:   assert( rc==SQLITE_OK || p->pStmt==0 );
                   69375:   sqlite3_mutex_leave(db->mutex);
                   69376:   return rc;
                   69377: }
                   69378: 
                   69379: #endif /* #ifndef SQLITE_OMIT_INCRBLOB */
                   69380: 
                   69381: /************** End of vdbeblob.c ********************************************/
                   69382: /************** Begin file journal.c *****************************************/
                   69383: /*
                   69384: ** 2007 August 22
                   69385: **
                   69386: ** The author disclaims copyright to this source code.  In place of
                   69387: ** a legal notice, here is a blessing:
                   69388: **
                   69389: **    May you do good and not evil.
                   69390: **    May you find forgiveness for yourself and forgive others.
                   69391: **    May you share freely, never taking more than you give.
                   69392: **
                   69393: *************************************************************************
                   69394: **
                   69395: ** This file implements a special kind of sqlite3_file object used
                   69396: ** by SQLite to create journal files if the atomic-write optimization
                   69397: ** is enabled.
                   69398: **
                   69399: ** The distinctive characteristic of this sqlite3_file is that the
                   69400: ** actual on disk file is created lazily. When the file is created,
                   69401: ** the caller specifies a buffer size for an in-memory buffer to
                   69402: ** be used to service read() and write() requests. The actual file
                   69403: ** on disk is not created or populated until either:
                   69404: **
                   69405: **   1) The in-memory representation grows too large for the allocated 
                   69406: **      buffer, or
                   69407: **   2) The sqlite3JournalCreate() function is called.
                   69408: */
                   69409: #ifdef SQLITE_ENABLE_ATOMIC_WRITE
                   69410: 
                   69411: 
                   69412: /*
                   69413: ** A JournalFile object is a subclass of sqlite3_file used by
                   69414: ** as an open file handle for journal files.
                   69415: */
                   69416: struct JournalFile {
                   69417:   sqlite3_io_methods *pMethod;    /* I/O methods on journal files */
                   69418:   int nBuf;                       /* Size of zBuf[] in bytes */
                   69419:   char *zBuf;                     /* Space to buffer journal writes */
                   69420:   int iSize;                      /* Amount of zBuf[] currently used */
                   69421:   int flags;                      /* xOpen flags */
                   69422:   sqlite3_vfs *pVfs;              /* The "real" underlying VFS */
                   69423:   sqlite3_file *pReal;            /* The "real" underlying file descriptor */
                   69424:   const char *zJournal;           /* Name of the journal file */
                   69425: };
                   69426: typedef struct JournalFile JournalFile;
                   69427: 
                   69428: /*
                   69429: ** If it does not already exists, create and populate the on-disk file 
                   69430: ** for JournalFile p.
                   69431: */
                   69432: static int createFile(JournalFile *p){
                   69433:   int rc = SQLITE_OK;
                   69434:   if( !p->pReal ){
                   69435:     sqlite3_file *pReal = (sqlite3_file *)&p[1];
                   69436:     rc = sqlite3OsOpen(p->pVfs, p->zJournal, pReal, p->flags, 0);
                   69437:     if( rc==SQLITE_OK ){
                   69438:       p->pReal = pReal;
                   69439:       if( p->iSize>0 ){
                   69440:         assert(p->iSize<=p->nBuf);
                   69441:         rc = sqlite3OsWrite(p->pReal, p->zBuf, p->iSize, 0);
                   69442:       }
                   69443:     }
                   69444:   }
                   69445:   return rc;
                   69446: }
                   69447: 
                   69448: /*
                   69449: ** Close the file.
                   69450: */
                   69451: static int jrnlClose(sqlite3_file *pJfd){
                   69452:   JournalFile *p = (JournalFile *)pJfd;
                   69453:   if( p->pReal ){
                   69454:     sqlite3OsClose(p->pReal);
                   69455:   }
                   69456:   sqlite3_free(p->zBuf);
                   69457:   return SQLITE_OK;
                   69458: }
                   69459: 
                   69460: /*
                   69461: ** Read data from the file.
                   69462: */
                   69463: static int jrnlRead(
                   69464:   sqlite3_file *pJfd,    /* The journal file from which to read */
                   69465:   void *zBuf,            /* Put the results here */
                   69466:   int iAmt,              /* Number of bytes to read */
                   69467:   sqlite_int64 iOfst     /* Begin reading at this offset */
                   69468: ){
                   69469:   int rc = SQLITE_OK;
                   69470:   JournalFile *p = (JournalFile *)pJfd;
                   69471:   if( p->pReal ){
                   69472:     rc = sqlite3OsRead(p->pReal, zBuf, iAmt, iOfst);
                   69473:   }else if( (iAmt+iOfst)>p->iSize ){
                   69474:     rc = SQLITE_IOERR_SHORT_READ;
                   69475:   }else{
                   69476:     memcpy(zBuf, &p->zBuf[iOfst], iAmt);
                   69477:   }
                   69478:   return rc;
                   69479: }
                   69480: 
                   69481: /*
                   69482: ** Write data to the file.
                   69483: */
                   69484: static int jrnlWrite(
                   69485:   sqlite3_file *pJfd,    /* The journal file into which to write */
                   69486:   const void *zBuf,      /* Take data to be written from here */
                   69487:   int iAmt,              /* Number of bytes to write */
                   69488:   sqlite_int64 iOfst     /* Begin writing at this offset into the file */
                   69489: ){
                   69490:   int rc = SQLITE_OK;
                   69491:   JournalFile *p = (JournalFile *)pJfd;
                   69492:   if( !p->pReal && (iOfst+iAmt)>p->nBuf ){
                   69493:     rc = createFile(p);
                   69494:   }
                   69495:   if( rc==SQLITE_OK ){
                   69496:     if( p->pReal ){
                   69497:       rc = sqlite3OsWrite(p->pReal, zBuf, iAmt, iOfst);
                   69498:     }else{
                   69499:       memcpy(&p->zBuf[iOfst], zBuf, iAmt);
                   69500:       if( p->iSize<(iOfst+iAmt) ){
                   69501:         p->iSize = (iOfst+iAmt);
                   69502:       }
                   69503:     }
                   69504:   }
                   69505:   return rc;
                   69506: }
                   69507: 
                   69508: /*
                   69509: ** Truncate the file.
                   69510: */
                   69511: static int jrnlTruncate(sqlite3_file *pJfd, sqlite_int64 size){
                   69512:   int rc = SQLITE_OK;
                   69513:   JournalFile *p = (JournalFile *)pJfd;
                   69514:   if( p->pReal ){
                   69515:     rc = sqlite3OsTruncate(p->pReal, size);
                   69516:   }else if( size<p->iSize ){
                   69517:     p->iSize = size;
                   69518:   }
                   69519:   return rc;
                   69520: }
                   69521: 
                   69522: /*
                   69523: ** Sync the file.
                   69524: */
                   69525: static int jrnlSync(sqlite3_file *pJfd, int flags){
                   69526:   int rc;
                   69527:   JournalFile *p = (JournalFile *)pJfd;
                   69528:   if( p->pReal ){
                   69529:     rc = sqlite3OsSync(p->pReal, flags);
                   69530:   }else{
                   69531:     rc = SQLITE_OK;
                   69532:   }
                   69533:   return rc;
                   69534: }
                   69535: 
                   69536: /*
                   69537: ** Query the size of the file in bytes.
                   69538: */
                   69539: static int jrnlFileSize(sqlite3_file *pJfd, sqlite_int64 *pSize){
                   69540:   int rc = SQLITE_OK;
                   69541:   JournalFile *p = (JournalFile *)pJfd;
                   69542:   if( p->pReal ){
                   69543:     rc = sqlite3OsFileSize(p->pReal, pSize);
                   69544:   }else{
                   69545:     *pSize = (sqlite_int64) p->iSize;
                   69546:   }
                   69547:   return rc;
                   69548: }
                   69549: 
                   69550: /*
                   69551: ** Table of methods for JournalFile sqlite3_file object.
                   69552: */
                   69553: static struct sqlite3_io_methods JournalFileMethods = {
                   69554:   1,             /* iVersion */
                   69555:   jrnlClose,     /* xClose */
                   69556:   jrnlRead,      /* xRead */
                   69557:   jrnlWrite,     /* xWrite */
                   69558:   jrnlTruncate,  /* xTruncate */
                   69559:   jrnlSync,      /* xSync */
                   69560:   jrnlFileSize,  /* xFileSize */
                   69561:   0,             /* xLock */
                   69562:   0,             /* xUnlock */
                   69563:   0,             /* xCheckReservedLock */
                   69564:   0,             /* xFileControl */
                   69565:   0,             /* xSectorSize */
                   69566:   0,             /* xDeviceCharacteristics */
                   69567:   0,             /* xShmMap */
                   69568:   0,             /* xShmLock */
                   69569:   0,             /* xShmBarrier */
                   69570:   0              /* xShmUnmap */
                   69571: };
                   69572: 
                   69573: /* 
                   69574: ** Open a journal file.
                   69575: */
                   69576: SQLITE_PRIVATE int sqlite3JournalOpen(
                   69577:   sqlite3_vfs *pVfs,         /* The VFS to use for actual file I/O */
                   69578:   const char *zName,         /* Name of the journal file */
                   69579:   sqlite3_file *pJfd,        /* Preallocated, blank file handle */
                   69580:   int flags,                 /* Opening flags */
                   69581:   int nBuf                   /* Bytes buffered before opening the file */
                   69582: ){
                   69583:   JournalFile *p = (JournalFile *)pJfd;
                   69584:   memset(p, 0, sqlite3JournalSize(pVfs));
                   69585:   if( nBuf>0 ){
                   69586:     p->zBuf = sqlite3MallocZero(nBuf);
                   69587:     if( !p->zBuf ){
                   69588:       return SQLITE_NOMEM;
                   69589:     }
                   69590:   }else{
                   69591:     return sqlite3OsOpen(pVfs, zName, pJfd, flags, 0);
                   69592:   }
                   69593:   p->pMethod = &JournalFileMethods;
                   69594:   p->nBuf = nBuf;
                   69595:   p->flags = flags;
                   69596:   p->zJournal = zName;
                   69597:   p->pVfs = pVfs;
                   69598:   return SQLITE_OK;
                   69599: }
                   69600: 
                   69601: /*
                   69602: ** If the argument p points to a JournalFile structure, and the underlying
                   69603: ** file has not yet been created, create it now.
                   69604: */
                   69605: SQLITE_PRIVATE int sqlite3JournalCreate(sqlite3_file *p){
                   69606:   if( p->pMethods!=&JournalFileMethods ){
                   69607:     return SQLITE_OK;
                   69608:   }
                   69609:   return createFile((JournalFile *)p);
                   69610: }
                   69611: 
                   69612: /* 
                   69613: ** Return the number of bytes required to store a JournalFile that uses vfs
                   69614: ** pVfs to create the underlying on-disk files.
                   69615: */
                   69616: SQLITE_PRIVATE int sqlite3JournalSize(sqlite3_vfs *pVfs){
                   69617:   return (pVfs->szOsFile+sizeof(JournalFile));
                   69618: }
                   69619: #endif
                   69620: 
                   69621: /************** End of journal.c *********************************************/
                   69622: /************** Begin file memjournal.c **************************************/
                   69623: /*
                   69624: ** 2008 October 7
                   69625: **
                   69626: ** The author disclaims copyright to this source code.  In place of
                   69627: ** a legal notice, here is a blessing:
                   69628: **
                   69629: **    May you do good and not evil.
                   69630: **    May you find forgiveness for yourself and forgive others.
                   69631: **    May you share freely, never taking more than you give.
                   69632: **
                   69633: *************************************************************************
                   69634: **
                   69635: ** This file contains code use to implement an in-memory rollback journal.
                   69636: ** The in-memory rollback journal is used to journal transactions for
                   69637: ** ":memory:" databases and when the journal_mode=MEMORY pragma is used.
                   69638: */
                   69639: 
                   69640: /* Forward references to internal structures */
                   69641: typedef struct MemJournal MemJournal;
                   69642: typedef struct FilePoint FilePoint;
                   69643: typedef struct FileChunk FileChunk;
                   69644: 
                   69645: /* Space to hold the rollback journal is allocated in increments of
                   69646: ** this many bytes.
                   69647: **
                   69648: ** The size chosen is a little less than a power of two.  That way,
                   69649: ** the FileChunk object will have a size that almost exactly fills
                   69650: ** a power-of-two allocation.  This mimimizes wasted space in power-of-two
                   69651: ** memory allocators.
                   69652: */
                   69653: #define JOURNAL_CHUNKSIZE ((int)(1024-sizeof(FileChunk*)))
                   69654: 
                   69655: /* Macro to find the minimum of two numeric values.
                   69656: */
                   69657: #ifndef MIN
                   69658: # define MIN(x,y) ((x)<(y)?(x):(y))
                   69659: #endif
                   69660: 
                   69661: /*
                   69662: ** The rollback journal is composed of a linked list of these structures.
                   69663: */
                   69664: struct FileChunk {
                   69665:   FileChunk *pNext;               /* Next chunk in the journal */
                   69666:   u8 zChunk[JOURNAL_CHUNKSIZE];   /* Content of this chunk */
                   69667: };
                   69668: 
                   69669: /*
                   69670: ** An instance of this object serves as a cursor into the rollback journal.
                   69671: ** The cursor can be either for reading or writing.
                   69672: */
                   69673: struct FilePoint {
                   69674:   sqlite3_int64 iOffset;          /* Offset from the beginning of the file */
                   69675:   FileChunk *pChunk;              /* Specific chunk into which cursor points */
                   69676: };
                   69677: 
                   69678: /*
                   69679: ** This subclass is a subclass of sqlite3_file.  Each open memory-journal
                   69680: ** is an instance of this class.
                   69681: */
                   69682: struct MemJournal {
                   69683:   sqlite3_io_methods *pMethod;    /* Parent class. MUST BE FIRST */
                   69684:   FileChunk *pFirst;              /* Head of in-memory chunk-list */
                   69685:   FilePoint endpoint;             /* Pointer to the end of the file */
                   69686:   FilePoint readpoint;            /* Pointer to the end of the last xRead() */
                   69687: };
                   69688: 
                   69689: /*
                   69690: ** Read data from the in-memory journal file.  This is the implementation
                   69691: ** of the sqlite3_vfs.xRead method.
                   69692: */
                   69693: static int memjrnlRead(
                   69694:   sqlite3_file *pJfd,    /* The journal file from which to read */
                   69695:   void *zBuf,            /* Put the results here */
                   69696:   int iAmt,              /* Number of bytes to read */
                   69697:   sqlite_int64 iOfst     /* Begin reading at this offset */
                   69698: ){
                   69699:   MemJournal *p = (MemJournal *)pJfd;
                   69700:   u8 *zOut = zBuf;
                   69701:   int nRead = iAmt;
                   69702:   int iChunkOffset;
                   69703:   FileChunk *pChunk;
                   69704: 
                   69705:   /* SQLite never tries to read past the end of a rollback journal file */
                   69706:   assert( iOfst+iAmt<=p->endpoint.iOffset );
                   69707: 
                   69708:   if( p->readpoint.iOffset!=iOfst || iOfst==0 ){
                   69709:     sqlite3_int64 iOff = 0;
                   69710:     for(pChunk=p->pFirst; 
                   69711:         ALWAYS(pChunk) && (iOff+JOURNAL_CHUNKSIZE)<=iOfst;
                   69712:         pChunk=pChunk->pNext
                   69713:     ){
                   69714:       iOff += JOURNAL_CHUNKSIZE;
                   69715:     }
                   69716:   }else{
                   69717:     pChunk = p->readpoint.pChunk;
                   69718:   }
                   69719: 
                   69720:   iChunkOffset = (int)(iOfst%JOURNAL_CHUNKSIZE);
                   69721:   do {
                   69722:     int iSpace = JOURNAL_CHUNKSIZE - iChunkOffset;
                   69723:     int nCopy = MIN(nRead, (JOURNAL_CHUNKSIZE - iChunkOffset));
                   69724:     memcpy(zOut, &pChunk->zChunk[iChunkOffset], nCopy);
                   69725:     zOut += nCopy;
                   69726:     nRead -= iSpace;
                   69727:     iChunkOffset = 0;
                   69728:   } while( nRead>=0 && (pChunk=pChunk->pNext)!=0 && nRead>0 );
                   69729:   p->readpoint.iOffset = iOfst+iAmt;
                   69730:   p->readpoint.pChunk = pChunk;
                   69731: 
                   69732:   return SQLITE_OK;
                   69733: }
                   69734: 
                   69735: /*
                   69736: ** Write data to the file.
                   69737: */
                   69738: static int memjrnlWrite(
                   69739:   sqlite3_file *pJfd,    /* The journal file into which to write */
                   69740:   const void *zBuf,      /* Take data to be written from here */
                   69741:   int iAmt,              /* Number of bytes to write */
                   69742:   sqlite_int64 iOfst     /* Begin writing at this offset into the file */
                   69743: ){
                   69744:   MemJournal *p = (MemJournal *)pJfd;
                   69745:   int nWrite = iAmt;
                   69746:   u8 *zWrite = (u8 *)zBuf;
                   69747: 
                   69748:   /* An in-memory journal file should only ever be appended to. Random
                   69749:   ** access writes are not required by sqlite.
                   69750:   */
                   69751:   assert( iOfst==p->endpoint.iOffset );
                   69752:   UNUSED_PARAMETER(iOfst);
                   69753: 
                   69754:   while( nWrite>0 ){
                   69755:     FileChunk *pChunk = p->endpoint.pChunk;
                   69756:     int iChunkOffset = (int)(p->endpoint.iOffset%JOURNAL_CHUNKSIZE);
                   69757:     int iSpace = MIN(nWrite, JOURNAL_CHUNKSIZE - iChunkOffset);
                   69758: 
                   69759:     if( iChunkOffset==0 ){
                   69760:       /* New chunk is required to extend the file. */
                   69761:       FileChunk *pNew = sqlite3_malloc(sizeof(FileChunk));
                   69762:       if( !pNew ){
                   69763:         return SQLITE_IOERR_NOMEM;
                   69764:       }
                   69765:       pNew->pNext = 0;
                   69766:       if( pChunk ){
                   69767:         assert( p->pFirst );
                   69768:         pChunk->pNext = pNew;
                   69769:       }else{
                   69770:         assert( !p->pFirst );
                   69771:         p->pFirst = pNew;
                   69772:       }
                   69773:       p->endpoint.pChunk = pNew;
                   69774:     }
                   69775: 
                   69776:     memcpy(&p->endpoint.pChunk->zChunk[iChunkOffset], zWrite, iSpace);
                   69777:     zWrite += iSpace;
                   69778:     nWrite -= iSpace;
                   69779:     p->endpoint.iOffset += iSpace;
                   69780:   }
                   69781: 
                   69782:   return SQLITE_OK;
                   69783: }
                   69784: 
                   69785: /*
                   69786: ** Truncate the file.
                   69787: */
                   69788: static int memjrnlTruncate(sqlite3_file *pJfd, sqlite_int64 size){
                   69789:   MemJournal *p = (MemJournal *)pJfd;
                   69790:   FileChunk *pChunk;
                   69791:   assert(size==0);
                   69792:   UNUSED_PARAMETER(size);
                   69793:   pChunk = p->pFirst;
                   69794:   while( pChunk ){
                   69795:     FileChunk *pTmp = pChunk;
                   69796:     pChunk = pChunk->pNext;
                   69797:     sqlite3_free(pTmp);
                   69798:   }
                   69799:   sqlite3MemJournalOpen(pJfd);
                   69800:   return SQLITE_OK;
                   69801: }
                   69802: 
                   69803: /*
                   69804: ** Close the file.
                   69805: */
                   69806: static int memjrnlClose(sqlite3_file *pJfd){
                   69807:   memjrnlTruncate(pJfd, 0);
                   69808:   return SQLITE_OK;
                   69809: }
                   69810: 
                   69811: 
                   69812: /*
                   69813: ** Sync the file.
                   69814: **
                   69815: ** Syncing an in-memory journal is a no-op.  And, in fact, this routine
                   69816: ** is never called in a working implementation.  This implementation
                   69817: ** exists purely as a contingency, in case some malfunction in some other
                   69818: ** part of SQLite causes Sync to be called by mistake.
                   69819: */
                   69820: static int memjrnlSync(sqlite3_file *NotUsed, int NotUsed2){
                   69821:   UNUSED_PARAMETER2(NotUsed, NotUsed2);
                   69822:   return SQLITE_OK;
                   69823: }
                   69824: 
                   69825: /*
                   69826: ** Query the size of the file in bytes.
                   69827: */
                   69828: static int memjrnlFileSize(sqlite3_file *pJfd, sqlite_int64 *pSize){
                   69829:   MemJournal *p = (MemJournal *)pJfd;
                   69830:   *pSize = (sqlite_int64) p->endpoint.iOffset;
                   69831:   return SQLITE_OK;
                   69832: }
                   69833: 
                   69834: /*
                   69835: ** Table of methods for MemJournal sqlite3_file object.
                   69836: */
                   69837: static const struct sqlite3_io_methods MemJournalMethods = {
                   69838:   1,                /* iVersion */
                   69839:   memjrnlClose,     /* xClose */
                   69840:   memjrnlRead,      /* xRead */
                   69841:   memjrnlWrite,     /* xWrite */
                   69842:   memjrnlTruncate,  /* xTruncate */
                   69843:   memjrnlSync,      /* xSync */
                   69844:   memjrnlFileSize,  /* xFileSize */
                   69845:   0,                /* xLock */
                   69846:   0,                /* xUnlock */
                   69847:   0,                /* xCheckReservedLock */
                   69848:   0,                /* xFileControl */
                   69849:   0,                /* xSectorSize */
                   69850:   0,                /* xDeviceCharacteristics */
                   69851:   0,                /* xShmMap */
                   69852:   0,                /* xShmLock */
                   69853:   0,                /* xShmBarrier */
                   69854:   0                 /* xShmUnlock */
                   69855: };
                   69856: 
                   69857: /* 
                   69858: ** Open a journal file.
                   69859: */
                   69860: SQLITE_PRIVATE void sqlite3MemJournalOpen(sqlite3_file *pJfd){
                   69861:   MemJournal *p = (MemJournal *)pJfd;
                   69862:   assert( EIGHT_BYTE_ALIGNMENT(p) );
                   69863:   memset(p, 0, sqlite3MemJournalSize());
                   69864:   p->pMethod = (sqlite3_io_methods*)&MemJournalMethods;
                   69865: }
                   69866: 
                   69867: /*
                   69868: ** Return true if the file-handle passed as an argument is 
                   69869: ** an in-memory journal 
                   69870: */
                   69871: SQLITE_PRIVATE int sqlite3IsMemJournal(sqlite3_file *pJfd){
                   69872:   return pJfd->pMethods==&MemJournalMethods;
                   69873: }
                   69874: 
                   69875: /* 
                   69876: ** Return the number of bytes required to store a MemJournal file descriptor.
                   69877: */
                   69878: SQLITE_PRIVATE int sqlite3MemJournalSize(void){
                   69879:   return sizeof(MemJournal);
                   69880: }
                   69881: 
                   69882: /************** End of memjournal.c ******************************************/
                   69883: /************** Begin file walker.c ******************************************/
                   69884: /*
                   69885: ** 2008 August 16
                   69886: **
                   69887: ** The author disclaims copyright to this source code.  In place of
                   69888: ** a legal notice, here is a blessing:
                   69889: **
                   69890: **    May you do good and not evil.
                   69891: **    May you find forgiveness for yourself and forgive others.
                   69892: **    May you share freely, never taking more than you give.
                   69893: **
                   69894: *************************************************************************
                   69895: ** This file contains routines used for walking the parser tree for
                   69896: ** an SQL statement.
                   69897: */
                   69898: 
                   69899: 
                   69900: /*
                   69901: ** Walk an expression tree.  Invoke the callback once for each node
                   69902: ** of the expression, while decending.  (In other words, the callback
                   69903: ** is invoked before visiting children.)
                   69904: **
                   69905: ** The return value from the callback should be one of the WRC_*
                   69906: ** constants to specify how to proceed with the walk.
                   69907: **
                   69908: **    WRC_Continue      Continue descending down the tree.
                   69909: **
                   69910: **    WRC_Prune         Do not descend into child nodes.  But allow
                   69911: **                      the walk to continue with sibling nodes.
                   69912: **
                   69913: **    WRC_Abort         Do no more callbacks.  Unwind the stack and
                   69914: **                      return the top-level walk call.
                   69915: **
                   69916: ** The return value from this routine is WRC_Abort to abandon the tree walk
                   69917: ** and WRC_Continue to continue.
                   69918: */
                   69919: SQLITE_PRIVATE int sqlite3WalkExpr(Walker *pWalker, Expr *pExpr){
                   69920:   int rc;
                   69921:   if( pExpr==0 ) return WRC_Continue;
                   69922:   testcase( ExprHasProperty(pExpr, EP_TokenOnly) );
                   69923:   testcase( ExprHasProperty(pExpr, EP_Reduced) );
                   69924:   rc = pWalker->xExprCallback(pWalker, pExpr);
                   69925:   if( rc==WRC_Continue
                   69926:               && !ExprHasAnyProperty(pExpr,EP_TokenOnly) ){
                   69927:     if( sqlite3WalkExpr(pWalker, pExpr->pLeft) ) return WRC_Abort;
                   69928:     if( sqlite3WalkExpr(pWalker, pExpr->pRight) ) return WRC_Abort;
                   69929:     if( ExprHasProperty(pExpr, EP_xIsSelect) ){
                   69930:       if( sqlite3WalkSelect(pWalker, pExpr->x.pSelect) ) return WRC_Abort;
                   69931:     }else{
                   69932:       if( sqlite3WalkExprList(pWalker, pExpr->x.pList) ) return WRC_Abort;
                   69933:     }
                   69934:   }
                   69935:   return rc & WRC_Abort;
                   69936: }
                   69937: 
                   69938: /*
                   69939: ** Call sqlite3WalkExpr() for every expression in list p or until
                   69940: ** an abort request is seen.
                   69941: */
                   69942: SQLITE_PRIVATE int sqlite3WalkExprList(Walker *pWalker, ExprList *p){
                   69943:   int i;
                   69944:   struct ExprList_item *pItem;
                   69945:   if( p ){
                   69946:     for(i=p->nExpr, pItem=p->a; i>0; i--, pItem++){
                   69947:       if( sqlite3WalkExpr(pWalker, pItem->pExpr) ) return WRC_Abort;
                   69948:     }
                   69949:   }
                   69950:   return WRC_Continue;
                   69951: }
                   69952: 
                   69953: /*
                   69954: ** Walk all expressions associated with SELECT statement p.  Do
                   69955: ** not invoke the SELECT callback on p, but do (of course) invoke
                   69956: ** any expr callbacks and SELECT callbacks that come from subqueries.
                   69957: ** Return WRC_Abort or WRC_Continue.
                   69958: */
                   69959: SQLITE_PRIVATE int sqlite3WalkSelectExpr(Walker *pWalker, Select *p){
                   69960:   if( sqlite3WalkExprList(pWalker, p->pEList) ) return WRC_Abort;
                   69961:   if( sqlite3WalkExpr(pWalker, p->pWhere) ) return WRC_Abort;
                   69962:   if( sqlite3WalkExprList(pWalker, p->pGroupBy) ) return WRC_Abort;
                   69963:   if( sqlite3WalkExpr(pWalker, p->pHaving) ) return WRC_Abort;
                   69964:   if( sqlite3WalkExprList(pWalker, p->pOrderBy) ) return WRC_Abort;
                   69965:   if( sqlite3WalkExpr(pWalker, p->pLimit) ) return WRC_Abort;
                   69966:   if( sqlite3WalkExpr(pWalker, p->pOffset) ) return WRC_Abort;
                   69967:   return WRC_Continue;
                   69968: }
                   69969: 
                   69970: /*
                   69971: ** Walk the parse trees associated with all subqueries in the
                   69972: ** FROM clause of SELECT statement p.  Do not invoke the select
                   69973: ** callback on p, but do invoke it on each FROM clause subquery
                   69974: ** and on any subqueries further down in the tree.  Return 
                   69975: ** WRC_Abort or WRC_Continue;
                   69976: */
                   69977: SQLITE_PRIVATE int sqlite3WalkSelectFrom(Walker *pWalker, Select *p){
                   69978:   SrcList *pSrc;
                   69979:   int i;
                   69980:   struct SrcList_item *pItem;
                   69981: 
                   69982:   pSrc = p->pSrc;
                   69983:   if( ALWAYS(pSrc) ){
                   69984:     for(i=pSrc->nSrc, pItem=pSrc->a; i>0; i--, pItem++){
                   69985:       if( sqlite3WalkSelect(pWalker, pItem->pSelect) ){
                   69986:         return WRC_Abort;
                   69987:       }
                   69988:     }
                   69989:   }
                   69990:   return WRC_Continue;
                   69991: } 
                   69992: 
                   69993: /*
                   69994: ** Call sqlite3WalkExpr() for every expression in Select statement p.
                   69995: ** Invoke sqlite3WalkSelect() for subqueries in the FROM clause and
                   69996: ** on the compound select chain, p->pPrior.
                   69997: **
                   69998: ** Return WRC_Continue under normal conditions.  Return WRC_Abort if
                   69999: ** there is an abort request.
                   70000: **
                   70001: ** If the Walker does not have an xSelectCallback() then this routine
                   70002: ** is a no-op returning WRC_Continue.
                   70003: */
                   70004: SQLITE_PRIVATE int sqlite3WalkSelect(Walker *pWalker, Select *p){
                   70005:   int rc;
                   70006:   if( p==0 || pWalker->xSelectCallback==0 ) return WRC_Continue;
                   70007:   rc = WRC_Continue;
                   70008:   while( p  ){
                   70009:     rc = pWalker->xSelectCallback(pWalker, p);
                   70010:     if( rc ) break;
                   70011:     if( sqlite3WalkSelectExpr(pWalker, p) ) return WRC_Abort;
                   70012:     if( sqlite3WalkSelectFrom(pWalker, p) ) return WRC_Abort;
                   70013:     p = p->pPrior;
                   70014:   }
                   70015:   return rc & WRC_Abort;
                   70016: }
                   70017: 
                   70018: /************** End of walker.c **********************************************/
                   70019: /************** Begin file resolve.c *****************************************/
                   70020: /*
                   70021: ** 2008 August 18
                   70022: **
                   70023: ** The author disclaims copyright to this source code.  In place of
                   70024: ** a legal notice, here is a blessing:
                   70025: **
                   70026: **    May you do good and not evil.
                   70027: **    May you find forgiveness for yourself and forgive others.
                   70028: **    May you share freely, never taking more than you give.
                   70029: **
                   70030: *************************************************************************
                   70031: **
                   70032: ** This file contains routines used for walking the parser tree and
                   70033: ** resolve all identifiers by associating them with a particular
                   70034: ** table and column.
                   70035: */
                   70036: 
                   70037: /*
                   70038: ** Turn the pExpr expression into an alias for the iCol-th column of the
                   70039: ** result set in pEList.
                   70040: **
                   70041: ** If the result set column is a simple column reference, then this routine
                   70042: ** makes an exact copy.  But for any other kind of expression, this
                   70043: ** routine make a copy of the result set column as the argument to the
                   70044: ** TK_AS operator.  The TK_AS operator causes the expression to be
                   70045: ** evaluated just once and then reused for each alias.
                   70046: **
                   70047: ** The reason for suppressing the TK_AS term when the expression is a simple
                   70048: ** column reference is so that the column reference will be recognized as
                   70049: ** usable by indices within the WHERE clause processing logic. 
                   70050: **
                   70051: ** Hack:  The TK_AS operator is inhibited if zType[0]=='G'.  This means
                   70052: ** that in a GROUP BY clause, the expression is evaluated twice.  Hence:
                   70053: **
                   70054: **     SELECT random()%5 AS x, count(*) FROM tab GROUP BY x
                   70055: **
                   70056: ** Is equivalent to:
                   70057: **
                   70058: **     SELECT random()%5 AS x, count(*) FROM tab GROUP BY random()%5
                   70059: **
                   70060: ** The result of random()%5 in the GROUP BY clause is probably different
                   70061: ** from the result in the result-set.  We might fix this someday.  Or
                   70062: ** then again, we might not...
                   70063: */
                   70064: static void resolveAlias(
                   70065:   Parse *pParse,         /* Parsing context */
                   70066:   ExprList *pEList,      /* A result set */
                   70067:   int iCol,              /* A column in the result set.  0..pEList->nExpr-1 */
                   70068:   Expr *pExpr,           /* Transform this into an alias to the result set */
                   70069:   const char *zType      /* "GROUP" or "ORDER" or "" */
                   70070: ){
                   70071:   Expr *pOrig;           /* The iCol-th column of the result set */
                   70072:   Expr *pDup;            /* Copy of pOrig */
                   70073:   sqlite3 *db;           /* The database connection */
                   70074: 
                   70075:   assert( iCol>=0 && iCol<pEList->nExpr );
                   70076:   pOrig = pEList->a[iCol].pExpr;
                   70077:   assert( pOrig!=0 );
                   70078:   assert( pOrig->flags & EP_Resolved );
                   70079:   db = pParse->db;
                   70080:   if( pOrig->op!=TK_COLUMN && zType[0]!='G' ){
                   70081:     pDup = sqlite3ExprDup(db, pOrig, 0);
                   70082:     pDup = sqlite3PExpr(pParse, TK_AS, pDup, 0, 0);
                   70083:     if( pDup==0 ) return;
                   70084:     if( pEList->a[iCol].iAlias==0 ){
                   70085:       pEList->a[iCol].iAlias = (u16)(++pParse->nAlias);
                   70086:     }
                   70087:     pDup->iTable = pEList->a[iCol].iAlias;
                   70088:   }else if( ExprHasProperty(pOrig, EP_IntValue) || pOrig->u.zToken==0 ){
                   70089:     pDup = sqlite3ExprDup(db, pOrig, 0);
                   70090:     if( pDup==0 ) return;
                   70091:   }else{
                   70092:     char *zToken = pOrig->u.zToken;
                   70093:     assert( zToken!=0 );
                   70094:     pOrig->u.zToken = 0;
                   70095:     pDup = sqlite3ExprDup(db, pOrig, 0);
                   70096:     pOrig->u.zToken = zToken;
                   70097:     if( pDup==0 ) return;
                   70098:     assert( (pDup->flags & (EP_Reduced|EP_TokenOnly))==0 );
                   70099:     pDup->flags2 |= EP2_MallocedToken;
                   70100:     pDup->u.zToken = sqlite3DbStrDup(db, zToken);
                   70101:   }
                   70102:   if( pExpr->flags & EP_ExpCollate ){
                   70103:     pDup->pColl = pExpr->pColl;
                   70104:     pDup->flags |= EP_ExpCollate;
                   70105:   }
                   70106: 
                   70107:   /* Before calling sqlite3ExprDelete(), set the EP_Static flag. This 
                   70108:   ** prevents ExprDelete() from deleting the Expr structure itself,
                   70109:   ** allowing it to be repopulated by the memcpy() on the following line.
                   70110:   */
                   70111:   ExprSetProperty(pExpr, EP_Static);
                   70112:   sqlite3ExprDelete(db, pExpr);
                   70113:   memcpy(pExpr, pDup, sizeof(*pExpr));
                   70114:   sqlite3DbFree(db, pDup);
                   70115: }
                   70116: 
                   70117: /*
                   70118: ** Given the name of a column of the form X.Y.Z or Y.Z or just Z, look up
                   70119: ** that name in the set of source tables in pSrcList and make the pExpr 
                   70120: ** expression node refer back to that source column.  The following changes
                   70121: ** are made to pExpr:
                   70122: **
                   70123: **    pExpr->iDb           Set the index in db->aDb[] of the database X
                   70124: **                         (even if X is implied).
                   70125: **    pExpr->iTable        Set to the cursor number for the table obtained
                   70126: **                         from pSrcList.
                   70127: **    pExpr->pTab          Points to the Table structure of X.Y (even if
                   70128: **                         X and/or Y are implied.)
                   70129: **    pExpr->iColumn       Set to the column number within the table.
                   70130: **    pExpr->op            Set to TK_COLUMN.
                   70131: **    pExpr->pLeft         Any expression this points to is deleted
                   70132: **    pExpr->pRight        Any expression this points to is deleted.
                   70133: **
                   70134: ** The zDb variable is the name of the database (the "X").  This value may be
                   70135: ** NULL meaning that name is of the form Y.Z or Z.  Any available database
                   70136: ** can be used.  The zTable variable is the name of the table (the "Y").  This
                   70137: ** value can be NULL if zDb is also NULL.  If zTable is NULL it
                   70138: ** means that the form of the name is Z and that columns from any table
                   70139: ** can be used.
                   70140: **
                   70141: ** If the name cannot be resolved unambiguously, leave an error message
                   70142: ** in pParse and return WRC_Abort.  Return WRC_Prune on success.
                   70143: */
                   70144: static int lookupName(
                   70145:   Parse *pParse,       /* The parsing context */
                   70146:   const char *zDb,     /* Name of the database containing table, or NULL */
                   70147:   const char *zTab,    /* Name of table containing column, or NULL */
                   70148:   const char *zCol,    /* Name of the column. */
                   70149:   NameContext *pNC,    /* The name context used to resolve the name */
                   70150:   Expr *pExpr          /* Make this EXPR node point to the selected column */
                   70151: ){
                   70152:   int i, j;            /* Loop counters */
                   70153:   int cnt = 0;                      /* Number of matching column names */
                   70154:   int cntTab = 0;                   /* Number of matching table names */
                   70155:   sqlite3 *db = pParse->db;         /* The database connection */
                   70156:   struct SrcList_item *pItem;       /* Use for looping over pSrcList items */
                   70157:   struct SrcList_item *pMatch = 0;  /* The matching pSrcList item */
                   70158:   NameContext *pTopNC = pNC;        /* First namecontext in the list */
                   70159:   Schema *pSchema = 0;              /* Schema of the expression */
                   70160:   int isTrigger = 0;
                   70161: 
                   70162:   assert( pNC );     /* the name context cannot be NULL. */
                   70163:   assert( zCol );    /* The Z in X.Y.Z cannot be NULL */
                   70164:   assert( ~ExprHasAnyProperty(pExpr, EP_TokenOnly|EP_Reduced) );
                   70165: 
                   70166:   /* Initialize the node to no-match */
                   70167:   pExpr->iTable = -1;
                   70168:   pExpr->pTab = 0;
                   70169:   ExprSetIrreducible(pExpr);
                   70170: 
                   70171:   /* Start at the inner-most context and move outward until a match is found */
                   70172:   while( pNC && cnt==0 ){
                   70173:     ExprList *pEList;
                   70174:     SrcList *pSrcList = pNC->pSrcList;
                   70175: 
                   70176:     if( pSrcList ){
                   70177:       for(i=0, pItem=pSrcList->a; i<pSrcList->nSrc; i++, pItem++){
                   70178:         Table *pTab;
                   70179:         int iDb;
                   70180:         Column *pCol;
                   70181:   
                   70182:         pTab = pItem->pTab;
                   70183:         assert( pTab!=0 && pTab->zName!=0 );
                   70184:         iDb = sqlite3SchemaToIndex(db, pTab->pSchema);
                   70185:         assert( pTab->nCol>0 );
                   70186:         if( zTab ){
                   70187:           if( pItem->zAlias ){
                   70188:             char *zTabName = pItem->zAlias;
                   70189:             if( sqlite3StrICmp(zTabName, zTab)!=0 ) continue;
                   70190:           }else{
                   70191:             char *zTabName = pTab->zName;
                   70192:             if( NEVER(zTabName==0) || sqlite3StrICmp(zTabName, zTab)!=0 ){
                   70193:               continue;
                   70194:             }
                   70195:             if( zDb!=0 && sqlite3StrICmp(db->aDb[iDb].zName, zDb)!=0 ){
                   70196:               continue;
                   70197:             }
                   70198:           }
                   70199:         }
                   70200:         if( 0==(cntTab++) ){
                   70201:           pExpr->iTable = pItem->iCursor;
                   70202:           pExpr->pTab = pTab;
                   70203:           pSchema = pTab->pSchema;
                   70204:           pMatch = pItem;
                   70205:         }
                   70206:         for(j=0, pCol=pTab->aCol; j<pTab->nCol; j++, pCol++){
                   70207:           if( sqlite3StrICmp(pCol->zName, zCol)==0 ){
                   70208:             IdList *pUsing;
                   70209:             cnt++;
                   70210:             pExpr->iTable = pItem->iCursor;
                   70211:             pExpr->pTab = pTab;
                   70212:             pMatch = pItem;
                   70213:             pSchema = pTab->pSchema;
                   70214:             /* Substitute the rowid (column -1) for the INTEGER PRIMARY KEY */
                   70215:             pExpr->iColumn = j==pTab->iPKey ? -1 : (i16)j;
                   70216:             if( i<pSrcList->nSrc-1 ){
                   70217:               if( pItem[1].jointype & JT_NATURAL ){
                   70218:                 /* If this match occurred in the left table of a natural join,
                   70219:                 ** then skip the right table to avoid a duplicate match */
                   70220:                 pItem++;
                   70221:                 i++;
                   70222:               }else if( (pUsing = pItem[1].pUsing)!=0 ){
                   70223:                 /* If this match occurs on a column that is in the USING clause
                   70224:                 ** of a join, skip the search of the right table of the join
                   70225:                 ** to avoid a duplicate match there. */
                   70226:                 int k;
                   70227:                 for(k=0; k<pUsing->nId; k++){
                   70228:                   if( sqlite3StrICmp(pUsing->a[k].zName, zCol)==0 ){
                   70229:                     pItem++;
                   70230:                     i++;
                   70231:                     break;
                   70232:                   }
                   70233:                 }
                   70234:               }
                   70235:             }
                   70236:             break;
                   70237:           }
                   70238:         }
                   70239:       }
                   70240:     }
                   70241: 
                   70242: #ifndef SQLITE_OMIT_TRIGGER
                   70243:     /* If we have not already resolved the name, then maybe 
                   70244:     ** it is a new.* or old.* trigger argument reference
                   70245:     */
                   70246:     if( zDb==0 && zTab!=0 && cnt==0 && pParse->pTriggerTab!=0 ){
                   70247:       int op = pParse->eTriggerOp;
                   70248:       Table *pTab = 0;
                   70249:       assert( op==TK_DELETE || op==TK_UPDATE || op==TK_INSERT );
                   70250:       if( op!=TK_DELETE && sqlite3StrICmp("new",zTab) == 0 ){
                   70251:         pExpr->iTable = 1;
                   70252:         pTab = pParse->pTriggerTab;
                   70253:       }else if( op!=TK_INSERT && sqlite3StrICmp("old",zTab)==0 ){
                   70254:         pExpr->iTable = 0;
                   70255:         pTab = pParse->pTriggerTab;
                   70256:       }
                   70257: 
                   70258:       if( pTab ){ 
                   70259:         int iCol;
                   70260:         pSchema = pTab->pSchema;
                   70261:         cntTab++;
                   70262:         for(iCol=0; iCol<pTab->nCol; iCol++){
                   70263:           Column *pCol = &pTab->aCol[iCol];
                   70264:           if( sqlite3StrICmp(pCol->zName, zCol)==0 ){
                   70265:             if( iCol==pTab->iPKey ){
                   70266:               iCol = -1;
                   70267:             }
                   70268:             break;
                   70269:           }
                   70270:         }
                   70271:         if( iCol>=pTab->nCol && sqlite3IsRowid(zCol) ){
                   70272:           iCol = -1;        /* IMP: R-44911-55124 */
                   70273:         }
                   70274:         if( iCol<pTab->nCol ){
                   70275:           cnt++;
                   70276:           if( iCol<0 ){
                   70277:             pExpr->affinity = SQLITE_AFF_INTEGER;
                   70278:           }else if( pExpr->iTable==0 ){
                   70279:             testcase( iCol==31 );
                   70280:             testcase( iCol==32 );
                   70281:             pParse->oldmask |= (iCol>=32 ? 0xffffffff : (((u32)1)<<iCol));
                   70282:           }else{
                   70283:             testcase( iCol==31 );
                   70284:             testcase( iCol==32 );
                   70285:             pParse->newmask |= (iCol>=32 ? 0xffffffff : (((u32)1)<<iCol));
                   70286:           }
                   70287:           pExpr->iColumn = (i16)iCol;
                   70288:           pExpr->pTab = pTab;
                   70289:           isTrigger = 1;
                   70290:         }
                   70291:       }
                   70292:     }
                   70293: #endif /* !defined(SQLITE_OMIT_TRIGGER) */
                   70294: 
                   70295:     /*
                   70296:     ** Perhaps the name is a reference to the ROWID
                   70297:     */
                   70298:     if( cnt==0 && cntTab==1 && sqlite3IsRowid(zCol) ){
                   70299:       cnt = 1;
                   70300:       pExpr->iColumn = -1;     /* IMP: R-44911-55124 */
                   70301:       pExpr->affinity = SQLITE_AFF_INTEGER;
                   70302:     }
                   70303: 
                   70304:     /*
                   70305:     ** If the input is of the form Z (not Y.Z or X.Y.Z) then the name Z
                   70306:     ** might refer to an result-set alias.  This happens, for example, when
                   70307:     ** we are resolving names in the WHERE clause of the following command:
                   70308:     **
                   70309:     **     SELECT a+b AS x FROM table WHERE x<10;
                   70310:     **
                   70311:     ** In cases like this, replace pExpr with a copy of the expression that
                   70312:     ** forms the result set entry ("a+b" in the example) and return immediately.
                   70313:     ** Note that the expression in the result set should have already been
                   70314:     ** resolved by the time the WHERE clause is resolved.
                   70315:     */
                   70316:     if( cnt==0 && (pEList = pNC->pEList)!=0 && zTab==0 ){
                   70317:       for(j=0; j<pEList->nExpr; j++){
                   70318:         char *zAs = pEList->a[j].zName;
                   70319:         if( zAs!=0 && sqlite3StrICmp(zAs, zCol)==0 ){
                   70320:           Expr *pOrig;
                   70321:           assert( pExpr->pLeft==0 && pExpr->pRight==0 );
                   70322:           assert( pExpr->x.pList==0 );
                   70323:           assert( pExpr->x.pSelect==0 );
                   70324:           pOrig = pEList->a[j].pExpr;
                   70325:           if( !pNC->allowAgg && ExprHasProperty(pOrig, EP_Agg) ){
                   70326:             sqlite3ErrorMsg(pParse, "misuse of aliased aggregate %s", zAs);
                   70327:             return WRC_Abort;
                   70328:           }
                   70329:           resolveAlias(pParse, pEList, j, pExpr, "");
                   70330:           cnt = 1;
                   70331:           pMatch = 0;
                   70332:           assert( zTab==0 && zDb==0 );
                   70333:           goto lookupname_end;
                   70334:         }
                   70335:       } 
                   70336:     }
                   70337: 
                   70338:     /* Advance to the next name context.  The loop will exit when either
                   70339:     ** we have a match (cnt>0) or when we run out of name contexts.
                   70340:     */
                   70341:     if( cnt==0 ){
                   70342:       pNC = pNC->pNext;
                   70343:     }
                   70344:   }
                   70345: 
                   70346:   /*
                   70347:   ** If X and Y are NULL (in other words if only the column name Z is
                   70348:   ** supplied) and the value of Z is enclosed in double-quotes, then
                   70349:   ** Z is a string literal if it doesn't match any column names.  In that
                   70350:   ** case, we need to return right away and not make any changes to
                   70351:   ** pExpr.
                   70352:   **
                   70353:   ** Because no reference was made to outer contexts, the pNC->nRef
                   70354:   ** fields are not changed in any context.
                   70355:   */
                   70356:   if( cnt==0 && zTab==0 && ExprHasProperty(pExpr,EP_DblQuoted) ){
                   70357:     pExpr->op = TK_STRING;
                   70358:     pExpr->pTab = 0;
                   70359:     return WRC_Prune;
                   70360:   }
                   70361: 
                   70362:   /*
                   70363:   ** cnt==0 means there was not match.  cnt>1 means there were two or
                   70364:   ** more matches.  Either way, we have an error.
                   70365:   */
                   70366:   if( cnt!=1 ){
                   70367:     const char *zErr;
                   70368:     zErr = cnt==0 ? "no such column" : "ambiguous column name";
                   70369:     if( zDb ){
                   70370:       sqlite3ErrorMsg(pParse, "%s: %s.%s.%s", zErr, zDb, zTab, zCol);
                   70371:     }else if( zTab ){
                   70372:       sqlite3ErrorMsg(pParse, "%s: %s.%s", zErr, zTab, zCol);
                   70373:     }else{
                   70374:       sqlite3ErrorMsg(pParse, "%s: %s", zErr, zCol);
                   70375:     }
                   70376:     pParse->checkSchema = 1;
                   70377:     pTopNC->nErr++;
                   70378:   }
                   70379: 
                   70380:   /* If a column from a table in pSrcList is referenced, then record
                   70381:   ** this fact in the pSrcList.a[].colUsed bitmask.  Column 0 causes
                   70382:   ** bit 0 to be set.  Column 1 sets bit 1.  And so forth.  If the
                   70383:   ** column number is greater than the number of bits in the bitmask
                   70384:   ** then set the high-order bit of the bitmask.
                   70385:   */
                   70386:   if( pExpr->iColumn>=0 && pMatch!=0 ){
                   70387:     int n = pExpr->iColumn;
                   70388:     testcase( n==BMS-1 );
                   70389:     if( n>=BMS ){
                   70390:       n = BMS-1;
                   70391:     }
                   70392:     assert( pMatch->iCursor==pExpr->iTable );
                   70393:     pMatch->colUsed |= ((Bitmask)1)<<n;
                   70394:   }
                   70395: 
                   70396:   /* Clean up and return
                   70397:   */
                   70398:   sqlite3ExprDelete(db, pExpr->pLeft);
                   70399:   pExpr->pLeft = 0;
                   70400:   sqlite3ExprDelete(db, pExpr->pRight);
                   70401:   pExpr->pRight = 0;
                   70402:   pExpr->op = (isTrigger ? TK_TRIGGER : TK_COLUMN);
                   70403: lookupname_end:
                   70404:   if( cnt==1 ){
                   70405:     assert( pNC!=0 );
                   70406:     sqlite3AuthRead(pParse, pExpr, pSchema, pNC->pSrcList);
                   70407:     /* Increment the nRef value on all name contexts from TopNC up to
                   70408:     ** the point where the name matched. */
                   70409:     for(;;){
                   70410:       assert( pTopNC!=0 );
                   70411:       pTopNC->nRef++;
                   70412:       if( pTopNC==pNC ) break;
                   70413:       pTopNC = pTopNC->pNext;
                   70414:     }
                   70415:     return WRC_Prune;
                   70416:   } else {
                   70417:     return WRC_Abort;
                   70418:   }
                   70419: }
                   70420: 
                   70421: /*
                   70422: ** Allocate and return a pointer to an expression to load the column iCol
                   70423: ** from datasource iSrc in SrcList pSrc.
                   70424: */
                   70425: SQLITE_PRIVATE Expr *sqlite3CreateColumnExpr(sqlite3 *db, SrcList *pSrc, int iSrc, int iCol){
                   70426:   Expr *p = sqlite3ExprAlloc(db, TK_COLUMN, 0, 0);
                   70427:   if( p ){
                   70428:     struct SrcList_item *pItem = &pSrc->a[iSrc];
                   70429:     p->pTab = pItem->pTab;
                   70430:     p->iTable = pItem->iCursor;
                   70431:     if( p->pTab->iPKey==iCol ){
                   70432:       p->iColumn = -1;
                   70433:     }else{
                   70434:       p->iColumn = (ynVar)iCol;
                   70435:       testcase( iCol==BMS );
                   70436:       testcase( iCol==BMS-1 );
                   70437:       pItem->colUsed |= ((Bitmask)1)<<(iCol>=BMS ? BMS-1 : iCol);
                   70438:     }
                   70439:     ExprSetProperty(p, EP_Resolved);
                   70440:   }
                   70441:   return p;
                   70442: }
                   70443: 
                   70444: /*
                   70445: ** This routine is callback for sqlite3WalkExpr().
                   70446: **
                   70447: ** Resolve symbolic names into TK_COLUMN operators for the current
                   70448: ** node in the expression tree.  Return 0 to continue the search down
                   70449: ** the tree or 2 to abort the tree walk.
                   70450: **
                   70451: ** This routine also does error checking and name resolution for
                   70452: ** function names.  The operator for aggregate functions is changed
                   70453: ** to TK_AGG_FUNCTION.
                   70454: */
                   70455: static int resolveExprStep(Walker *pWalker, Expr *pExpr){
                   70456:   NameContext *pNC;
                   70457:   Parse *pParse;
                   70458: 
                   70459:   pNC = pWalker->u.pNC;
                   70460:   assert( pNC!=0 );
                   70461:   pParse = pNC->pParse;
                   70462:   assert( pParse==pWalker->pParse );
                   70463: 
                   70464:   if( ExprHasAnyProperty(pExpr, EP_Resolved) ) return WRC_Prune;
                   70465:   ExprSetProperty(pExpr, EP_Resolved);
                   70466: #ifndef NDEBUG
                   70467:   if( pNC->pSrcList && pNC->pSrcList->nAlloc>0 ){
                   70468:     SrcList *pSrcList = pNC->pSrcList;
                   70469:     int i;
                   70470:     for(i=0; i<pNC->pSrcList->nSrc; i++){
                   70471:       assert( pSrcList->a[i].iCursor>=0 && pSrcList->a[i].iCursor<pParse->nTab);
                   70472:     }
                   70473:   }
                   70474: #endif
                   70475:   switch( pExpr->op ){
                   70476: 
                   70477: #if defined(SQLITE_ENABLE_UPDATE_DELETE_LIMIT) && !defined(SQLITE_OMIT_SUBQUERY)
                   70478:     /* The special operator TK_ROW means use the rowid for the first
                   70479:     ** column in the FROM clause.  This is used by the LIMIT and ORDER BY
                   70480:     ** clause processing on UPDATE and DELETE statements.
                   70481:     */
                   70482:     case TK_ROW: {
                   70483:       SrcList *pSrcList = pNC->pSrcList;
                   70484:       struct SrcList_item *pItem;
                   70485:       assert( pSrcList && pSrcList->nSrc==1 );
                   70486:       pItem = pSrcList->a; 
                   70487:       pExpr->op = TK_COLUMN;
                   70488:       pExpr->pTab = pItem->pTab;
                   70489:       pExpr->iTable = pItem->iCursor;
                   70490:       pExpr->iColumn = -1;
                   70491:       pExpr->affinity = SQLITE_AFF_INTEGER;
                   70492:       break;
                   70493:     }
                   70494: #endif /* defined(SQLITE_ENABLE_UPDATE_DELETE_LIMIT) && !defined(SQLITE_OMIT_SUBQUERY) */
                   70495: 
                   70496:     /* A lone identifier is the name of a column.
                   70497:     */
                   70498:     case TK_ID: {
                   70499:       return lookupName(pParse, 0, 0, pExpr->u.zToken, pNC, pExpr);
                   70500:     }
                   70501:   
                   70502:     /* A table name and column name:     ID.ID
                   70503:     ** Or a database, table and column:  ID.ID.ID
                   70504:     */
                   70505:     case TK_DOT: {
                   70506:       const char *zColumn;
                   70507:       const char *zTable;
                   70508:       const char *zDb;
                   70509:       Expr *pRight;
                   70510: 
                   70511:       /* if( pSrcList==0 ) break; */
                   70512:       pRight = pExpr->pRight;
                   70513:       if( pRight->op==TK_ID ){
                   70514:         zDb = 0;
                   70515:         zTable = pExpr->pLeft->u.zToken;
                   70516:         zColumn = pRight->u.zToken;
                   70517:       }else{
                   70518:         assert( pRight->op==TK_DOT );
                   70519:         zDb = pExpr->pLeft->u.zToken;
                   70520:         zTable = pRight->pLeft->u.zToken;
                   70521:         zColumn = pRight->pRight->u.zToken;
                   70522:       }
                   70523:       return lookupName(pParse, zDb, zTable, zColumn, pNC, pExpr);
                   70524:     }
                   70525: 
                   70526:     /* Resolve function names
                   70527:     */
                   70528:     case TK_CONST_FUNC:
                   70529:     case TK_FUNCTION: {
                   70530:       ExprList *pList = pExpr->x.pList;    /* The argument list */
                   70531:       int n = pList ? pList->nExpr : 0;    /* Number of arguments */
                   70532:       int no_such_func = 0;       /* True if no such function exists */
                   70533:       int wrong_num_args = 0;     /* True if wrong number of arguments */
                   70534:       int is_agg = 0;             /* True if is an aggregate function */
                   70535:       int auth;                   /* Authorization to use the function */
                   70536:       int nId;                    /* Number of characters in function name */
                   70537:       const char *zId;            /* The function name. */
                   70538:       FuncDef *pDef;              /* Information about the function */
                   70539:       u8 enc = ENC(pParse->db);   /* The database encoding */
                   70540: 
                   70541:       testcase( pExpr->op==TK_CONST_FUNC );
                   70542:       assert( !ExprHasProperty(pExpr, EP_xIsSelect) );
                   70543:       zId = pExpr->u.zToken;
                   70544:       nId = sqlite3Strlen30(zId);
                   70545:       pDef = sqlite3FindFunction(pParse->db, zId, nId, n, enc, 0);
                   70546:       if( pDef==0 ){
                   70547:         pDef = sqlite3FindFunction(pParse->db, zId, nId, -1, enc, 0);
                   70548:         if( pDef==0 ){
                   70549:           no_such_func = 1;
                   70550:         }else{
                   70551:           wrong_num_args = 1;
                   70552:         }
                   70553:       }else{
                   70554:         is_agg = pDef->xFunc==0;
                   70555:       }
                   70556: #ifndef SQLITE_OMIT_AUTHORIZATION
                   70557:       if( pDef ){
                   70558:         auth = sqlite3AuthCheck(pParse, SQLITE_FUNCTION, 0, pDef->zName, 0);
                   70559:         if( auth!=SQLITE_OK ){
                   70560:           if( auth==SQLITE_DENY ){
                   70561:             sqlite3ErrorMsg(pParse, "not authorized to use function: %s",
                   70562:                                     pDef->zName);
                   70563:             pNC->nErr++;
                   70564:           }
                   70565:           pExpr->op = TK_NULL;
                   70566:           return WRC_Prune;
                   70567:         }
                   70568:       }
                   70569: #endif
                   70570:       if( is_agg && !pNC->allowAgg ){
                   70571:         sqlite3ErrorMsg(pParse, "misuse of aggregate function %.*s()", nId,zId);
                   70572:         pNC->nErr++;
                   70573:         is_agg = 0;
                   70574:       }else if( no_such_func ){
                   70575:         sqlite3ErrorMsg(pParse, "no such function: %.*s", nId, zId);
                   70576:         pNC->nErr++;
                   70577:       }else if( wrong_num_args ){
                   70578:         sqlite3ErrorMsg(pParse,"wrong number of arguments to function %.*s()",
                   70579:              nId, zId);
                   70580:         pNC->nErr++;
                   70581:       }
                   70582:       if( is_agg ){
                   70583:         pExpr->op = TK_AGG_FUNCTION;
                   70584:         pNC->hasAgg = 1;
                   70585:       }
                   70586:       if( is_agg ) pNC->allowAgg = 0;
                   70587:       sqlite3WalkExprList(pWalker, pList);
                   70588:       if( is_agg ) pNC->allowAgg = 1;
                   70589:       /* FIX ME:  Compute pExpr->affinity based on the expected return
                   70590:       ** type of the function 
                   70591:       */
                   70592:       return WRC_Prune;
                   70593:     }
                   70594: #ifndef SQLITE_OMIT_SUBQUERY
                   70595:     case TK_SELECT:
                   70596:     case TK_EXISTS:  testcase( pExpr->op==TK_EXISTS );
                   70597: #endif
                   70598:     case TK_IN: {
                   70599:       testcase( pExpr->op==TK_IN );
                   70600:       if( ExprHasProperty(pExpr, EP_xIsSelect) ){
                   70601:         int nRef = pNC->nRef;
                   70602: #ifndef SQLITE_OMIT_CHECK
                   70603:         if( pNC->isCheck ){
                   70604:           sqlite3ErrorMsg(pParse,"subqueries prohibited in CHECK constraints");
                   70605:         }
                   70606: #endif
                   70607:         sqlite3WalkSelect(pWalker, pExpr->x.pSelect);
                   70608:         assert( pNC->nRef>=nRef );
                   70609:         if( nRef!=pNC->nRef ){
                   70610:           ExprSetProperty(pExpr, EP_VarSelect);
                   70611:         }
                   70612:       }
                   70613:       break;
                   70614:     }
                   70615: #ifndef SQLITE_OMIT_CHECK
                   70616:     case TK_VARIABLE: {
                   70617:       if( pNC->isCheck ){
                   70618:         sqlite3ErrorMsg(pParse,"parameters prohibited in CHECK constraints");
                   70619:       }
                   70620:       break;
                   70621:     }
                   70622: #endif
                   70623:   }
                   70624:   return (pParse->nErr || pParse->db->mallocFailed) ? WRC_Abort : WRC_Continue;
                   70625: }
                   70626: 
                   70627: /*
                   70628: ** pEList is a list of expressions which are really the result set of the
                   70629: ** a SELECT statement.  pE is a term in an ORDER BY or GROUP BY clause.
                   70630: ** This routine checks to see if pE is a simple identifier which corresponds
                   70631: ** to the AS-name of one of the terms of the expression list.  If it is,
                   70632: ** this routine return an integer between 1 and N where N is the number of
                   70633: ** elements in pEList, corresponding to the matching entry.  If there is
                   70634: ** no match, or if pE is not a simple identifier, then this routine
                   70635: ** return 0.
                   70636: **
                   70637: ** pEList has been resolved.  pE has not.
                   70638: */
                   70639: static int resolveAsName(
                   70640:   Parse *pParse,     /* Parsing context for error messages */
                   70641:   ExprList *pEList,  /* List of expressions to scan */
                   70642:   Expr *pE           /* Expression we are trying to match */
                   70643: ){
                   70644:   int i;             /* Loop counter */
                   70645: 
                   70646:   UNUSED_PARAMETER(pParse);
                   70647: 
                   70648:   if( pE->op==TK_ID ){
                   70649:     char *zCol = pE->u.zToken;
                   70650:     for(i=0; i<pEList->nExpr; i++){
                   70651:       char *zAs = pEList->a[i].zName;
                   70652:       if( zAs!=0 && sqlite3StrICmp(zAs, zCol)==0 ){
                   70653:         return i+1;
                   70654:       }
                   70655:     }
                   70656:   }
                   70657:   return 0;
                   70658: }
                   70659: 
                   70660: /*
                   70661: ** pE is a pointer to an expression which is a single term in the
                   70662: ** ORDER BY of a compound SELECT.  The expression has not been
                   70663: ** name resolved.
                   70664: **
                   70665: ** At the point this routine is called, we already know that the
                   70666: ** ORDER BY term is not an integer index into the result set.  That
                   70667: ** case is handled by the calling routine.
                   70668: **
                   70669: ** Attempt to match pE against result set columns in the left-most
                   70670: ** SELECT statement.  Return the index i of the matching column,
                   70671: ** as an indication to the caller that it should sort by the i-th column.
                   70672: ** The left-most column is 1.  In other words, the value returned is the
                   70673: ** same integer value that would be used in the SQL statement to indicate
                   70674: ** the column.
                   70675: **
                   70676: ** If there is no match, return 0.  Return -1 if an error occurs.
                   70677: */
                   70678: static int resolveOrderByTermToExprList(
                   70679:   Parse *pParse,     /* Parsing context for error messages */
                   70680:   Select *pSelect,   /* The SELECT statement with the ORDER BY clause */
                   70681:   Expr *pE           /* The specific ORDER BY term */
                   70682: ){
                   70683:   int i;             /* Loop counter */
                   70684:   ExprList *pEList;  /* The columns of the result set */
                   70685:   NameContext nc;    /* Name context for resolving pE */
                   70686:   sqlite3 *db;       /* Database connection */
                   70687:   int rc;            /* Return code from subprocedures */
                   70688:   u8 savedSuppErr;   /* Saved value of db->suppressErr */
                   70689: 
                   70690:   assert( sqlite3ExprIsInteger(pE, &i)==0 );
                   70691:   pEList = pSelect->pEList;
                   70692: 
                   70693:   /* Resolve all names in the ORDER BY term expression
                   70694:   */
                   70695:   memset(&nc, 0, sizeof(nc));
                   70696:   nc.pParse = pParse;
                   70697:   nc.pSrcList = pSelect->pSrc;
                   70698:   nc.pEList = pEList;
                   70699:   nc.allowAgg = 1;
                   70700:   nc.nErr = 0;
                   70701:   db = pParse->db;
                   70702:   savedSuppErr = db->suppressErr;
                   70703:   db->suppressErr = 1;
                   70704:   rc = sqlite3ResolveExprNames(&nc, pE);
                   70705:   db->suppressErr = savedSuppErr;
                   70706:   if( rc ) return 0;
                   70707: 
                   70708:   /* Try to match the ORDER BY expression against an expression
                   70709:   ** in the result set.  Return an 1-based index of the matching
                   70710:   ** result-set entry.
                   70711:   */
                   70712:   for(i=0; i<pEList->nExpr; i++){
                   70713:     if( sqlite3ExprCompare(pEList->a[i].pExpr, pE)<2 ){
                   70714:       return i+1;
                   70715:     }
                   70716:   }
                   70717: 
                   70718:   /* If no match, return 0. */
                   70719:   return 0;
                   70720: }
                   70721: 
                   70722: /*
                   70723: ** Generate an ORDER BY or GROUP BY term out-of-range error.
                   70724: */
                   70725: static void resolveOutOfRangeError(
                   70726:   Parse *pParse,         /* The error context into which to write the error */
                   70727:   const char *zType,     /* "ORDER" or "GROUP" */
                   70728:   int i,                 /* The index (1-based) of the term out of range */
                   70729:   int mx                 /* Largest permissible value of i */
                   70730: ){
                   70731:   sqlite3ErrorMsg(pParse, 
                   70732:     "%r %s BY term out of range - should be "
                   70733:     "between 1 and %d", i, zType, mx);
                   70734: }
                   70735: 
                   70736: /*
                   70737: ** Analyze the ORDER BY clause in a compound SELECT statement.   Modify
                   70738: ** each term of the ORDER BY clause is a constant integer between 1
                   70739: ** and N where N is the number of columns in the compound SELECT.
                   70740: **
                   70741: ** ORDER BY terms that are already an integer between 1 and N are
                   70742: ** unmodified.  ORDER BY terms that are integers outside the range of
                   70743: ** 1 through N generate an error.  ORDER BY terms that are expressions
                   70744: ** are matched against result set expressions of compound SELECT
                   70745: ** beginning with the left-most SELECT and working toward the right.
                   70746: ** At the first match, the ORDER BY expression is transformed into
                   70747: ** the integer column number.
                   70748: **
                   70749: ** Return the number of errors seen.
                   70750: */
                   70751: static int resolveCompoundOrderBy(
                   70752:   Parse *pParse,        /* Parsing context.  Leave error messages here */
                   70753:   Select *pSelect       /* The SELECT statement containing the ORDER BY */
                   70754: ){
                   70755:   int i;
                   70756:   ExprList *pOrderBy;
                   70757:   ExprList *pEList;
                   70758:   sqlite3 *db;
                   70759:   int moreToDo = 1;
                   70760: 
                   70761:   pOrderBy = pSelect->pOrderBy;
                   70762:   if( pOrderBy==0 ) return 0;
                   70763:   db = pParse->db;
                   70764: #if SQLITE_MAX_COLUMN
                   70765:   if( pOrderBy->nExpr>db->aLimit[SQLITE_LIMIT_COLUMN] ){
                   70766:     sqlite3ErrorMsg(pParse, "too many terms in ORDER BY clause");
                   70767:     return 1;
                   70768:   }
                   70769: #endif
                   70770:   for(i=0; i<pOrderBy->nExpr; i++){
                   70771:     pOrderBy->a[i].done = 0;
                   70772:   }
                   70773:   pSelect->pNext = 0;
                   70774:   while( pSelect->pPrior ){
                   70775:     pSelect->pPrior->pNext = pSelect;
                   70776:     pSelect = pSelect->pPrior;
                   70777:   }
                   70778:   while( pSelect && moreToDo ){
                   70779:     struct ExprList_item *pItem;
                   70780:     moreToDo = 0;
                   70781:     pEList = pSelect->pEList;
                   70782:     assert( pEList!=0 );
                   70783:     for(i=0, pItem=pOrderBy->a; i<pOrderBy->nExpr; i++, pItem++){
                   70784:       int iCol = -1;
                   70785:       Expr *pE, *pDup;
                   70786:       if( pItem->done ) continue;
                   70787:       pE = pItem->pExpr;
                   70788:       if( sqlite3ExprIsInteger(pE, &iCol) ){
                   70789:         if( iCol<=0 || iCol>pEList->nExpr ){
                   70790:           resolveOutOfRangeError(pParse, "ORDER", i+1, pEList->nExpr);
                   70791:           return 1;
                   70792:         }
                   70793:       }else{
                   70794:         iCol = resolveAsName(pParse, pEList, pE);
                   70795:         if( iCol==0 ){
                   70796:           pDup = sqlite3ExprDup(db, pE, 0);
                   70797:           if( !db->mallocFailed ){
                   70798:             assert(pDup);
                   70799:             iCol = resolveOrderByTermToExprList(pParse, pSelect, pDup);
                   70800:           }
                   70801:           sqlite3ExprDelete(db, pDup);
                   70802:         }
                   70803:       }
                   70804:       if( iCol>0 ){
                   70805:         CollSeq *pColl = pE->pColl;
                   70806:         int flags = pE->flags & EP_ExpCollate;
                   70807:         sqlite3ExprDelete(db, pE);
                   70808:         pItem->pExpr = pE = sqlite3Expr(db, TK_INTEGER, 0);
                   70809:         if( pE==0 ) return 1;
                   70810:         pE->pColl = pColl;
                   70811:         pE->flags |= EP_IntValue | flags;
                   70812:         pE->u.iValue = iCol;
                   70813:         pItem->iCol = (u16)iCol;
                   70814:         pItem->done = 1;
                   70815:       }else{
                   70816:         moreToDo = 1;
                   70817:       }
                   70818:     }
                   70819:     pSelect = pSelect->pNext;
                   70820:   }
                   70821:   for(i=0; i<pOrderBy->nExpr; i++){
                   70822:     if( pOrderBy->a[i].done==0 ){
                   70823:       sqlite3ErrorMsg(pParse, "%r ORDER BY term does not match any "
                   70824:             "column in the result set", i+1);
                   70825:       return 1;
                   70826:     }
                   70827:   }
                   70828:   return 0;
                   70829: }
                   70830: 
                   70831: /*
                   70832: ** Check every term in the ORDER BY or GROUP BY clause pOrderBy of
                   70833: ** the SELECT statement pSelect.  If any term is reference to a
                   70834: ** result set expression (as determined by the ExprList.a.iCol field)
                   70835: ** then convert that term into a copy of the corresponding result set
                   70836: ** column.
                   70837: **
                   70838: ** If any errors are detected, add an error message to pParse and
                   70839: ** return non-zero.  Return zero if no errors are seen.
                   70840: */
                   70841: SQLITE_PRIVATE int sqlite3ResolveOrderGroupBy(
                   70842:   Parse *pParse,        /* Parsing context.  Leave error messages here */
                   70843:   Select *pSelect,      /* The SELECT statement containing the clause */
                   70844:   ExprList *pOrderBy,   /* The ORDER BY or GROUP BY clause to be processed */
                   70845:   const char *zType     /* "ORDER" or "GROUP" */
                   70846: ){
                   70847:   int i;
                   70848:   sqlite3 *db = pParse->db;
                   70849:   ExprList *pEList;
                   70850:   struct ExprList_item *pItem;
                   70851: 
                   70852:   if( pOrderBy==0 || pParse->db->mallocFailed ) return 0;
                   70853: #if SQLITE_MAX_COLUMN
                   70854:   if( pOrderBy->nExpr>db->aLimit[SQLITE_LIMIT_COLUMN] ){
                   70855:     sqlite3ErrorMsg(pParse, "too many terms in %s BY clause", zType);
                   70856:     return 1;
                   70857:   }
                   70858: #endif
                   70859:   pEList = pSelect->pEList;
                   70860:   assert( pEList!=0 );  /* sqlite3SelectNew() guarantees this */
                   70861:   for(i=0, pItem=pOrderBy->a; i<pOrderBy->nExpr; i++, pItem++){
                   70862:     if( pItem->iCol ){
                   70863:       if( pItem->iCol>pEList->nExpr ){
                   70864:         resolveOutOfRangeError(pParse, zType, i+1, pEList->nExpr);
                   70865:         return 1;
                   70866:       }
                   70867:       resolveAlias(pParse, pEList, pItem->iCol-1, pItem->pExpr, zType);
                   70868:     }
                   70869:   }
                   70870:   return 0;
                   70871: }
                   70872: 
                   70873: /*
                   70874: ** pOrderBy is an ORDER BY or GROUP BY clause in SELECT statement pSelect.
                   70875: ** The Name context of the SELECT statement is pNC.  zType is either
                   70876: ** "ORDER" or "GROUP" depending on which type of clause pOrderBy is.
                   70877: **
                   70878: ** This routine resolves each term of the clause into an expression.
                   70879: ** If the order-by term is an integer I between 1 and N (where N is the
                   70880: ** number of columns in the result set of the SELECT) then the expression
                   70881: ** in the resolution is a copy of the I-th result-set expression.  If
                   70882: ** the order-by term is an identify that corresponds to the AS-name of
                   70883: ** a result-set expression, then the term resolves to a copy of the
                   70884: ** result-set expression.  Otherwise, the expression is resolved in
                   70885: ** the usual way - using sqlite3ResolveExprNames().
                   70886: **
                   70887: ** This routine returns the number of errors.  If errors occur, then
                   70888: ** an appropriate error message might be left in pParse.  (OOM errors
                   70889: ** excepted.)
                   70890: */
                   70891: static int resolveOrderGroupBy(
                   70892:   NameContext *pNC,     /* The name context of the SELECT statement */
                   70893:   Select *pSelect,      /* The SELECT statement holding pOrderBy */
                   70894:   ExprList *pOrderBy,   /* An ORDER BY or GROUP BY clause to resolve */
                   70895:   const char *zType     /* Either "ORDER" or "GROUP", as appropriate */
                   70896: ){
                   70897:   int i;                         /* Loop counter */
                   70898:   int iCol;                      /* Column number */
                   70899:   struct ExprList_item *pItem;   /* A term of the ORDER BY clause */
                   70900:   Parse *pParse;                 /* Parsing context */
                   70901:   int nResult;                   /* Number of terms in the result set */
                   70902: 
                   70903:   if( pOrderBy==0 ) return 0;
                   70904:   nResult = pSelect->pEList->nExpr;
                   70905:   pParse = pNC->pParse;
                   70906:   for(i=0, pItem=pOrderBy->a; i<pOrderBy->nExpr; i++, pItem++){
                   70907:     Expr *pE = pItem->pExpr;
                   70908:     iCol = resolveAsName(pParse, pSelect->pEList, pE);
                   70909:     if( iCol>0 ){
                   70910:       /* If an AS-name match is found, mark this ORDER BY column as being
                   70911:       ** a copy of the iCol-th result-set column.  The subsequent call to
                   70912:       ** sqlite3ResolveOrderGroupBy() will convert the expression to a
                   70913:       ** copy of the iCol-th result-set expression. */
                   70914:       pItem->iCol = (u16)iCol;
                   70915:       continue;
                   70916:     }
                   70917:     if( sqlite3ExprIsInteger(pE, &iCol) ){
                   70918:       /* The ORDER BY term is an integer constant.  Again, set the column
                   70919:       ** number so that sqlite3ResolveOrderGroupBy() will convert the
                   70920:       ** order-by term to a copy of the result-set expression */
                   70921:       if( iCol<1 ){
                   70922:         resolveOutOfRangeError(pParse, zType, i+1, nResult);
                   70923:         return 1;
                   70924:       }
                   70925:       pItem->iCol = (u16)iCol;
                   70926:       continue;
                   70927:     }
                   70928: 
                   70929:     /* Otherwise, treat the ORDER BY term as an ordinary expression */
                   70930:     pItem->iCol = 0;
                   70931:     if( sqlite3ResolveExprNames(pNC, pE) ){
                   70932:       return 1;
                   70933:     }
                   70934:   }
                   70935:   return sqlite3ResolveOrderGroupBy(pParse, pSelect, pOrderBy, zType);
                   70936: }
                   70937: 
                   70938: /*
                   70939: ** Resolve names in the SELECT statement p and all of its descendents.
                   70940: */
                   70941: static int resolveSelectStep(Walker *pWalker, Select *p){
                   70942:   NameContext *pOuterNC;  /* Context that contains this SELECT */
                   70943:   NameContext sNC;        /* Name context of this SELECT */
                   70944:   int isCompound;         /* True if p is a compound select */
                   70945:   int nCompound;          /* Number of compound terms processed so far */
                   70946:   Parse *pParse;          /* Parsing context */
                   70947:   ExprList *pEList;       /* Result set expression list */
                   70948:   int i;                  /* Loop counter */
                   70949:   ExprList *pGroupBy;     /* The GROUP BY clause */
                   70950:   Select *pLeftmost;      /* Left-most of SELECT of a compound */
                   70951:   sqlite3 *db;            /* Database connection */
                   70952:   
                   70953: 
                   70954:   assert( p!=0 );
                   70955:   if( p->selFlags & SF_Resolved ){
                   70956:     return WRC_Prune;
                   70957:   }
                   70958:   pOuterNC = pWalker->u.pNC;
                   70959:   pParse = pWalker->pParse;
                   70960:   db = pParse->db;
                   70961: 
                   70962:   /* Normally sqlite3SelectExpand() will be called first and will have
                   70963:   ** already expanded this SELECT.  However, if this is a subquery within
                   70964:   ** an expression, sqlite3ResolveExprNames() will be called without a
                   70965:   ** prior call to sqlite3SelectExpand().  When that happens, let
                   70966:   ** sqlite3SelectPrep() do all of the processing for this SELECT.
                   70967:   ** sqlite3SelectPrep() will invoke both sqlite3SelectExpand() and
                   70968:   ** this routine in the correct order.
                   70969:   */
                   70970:   if( (p->selFlags & SF_Expanded)==0 ){
                   70971:     sqlite3SelectPrep(pParse, p, pOuterNC);
                   70972:     return (pParse->nErr || db->mallocFailed) ? WRC_Abort : WRC_Prune;
                   70973:   }
                   70974: 
                   70975:   isCompound = p->pPrior!=0;
                   70976:   nCompound = 0;
                   70977:   pLeftmost = p;
                   70978:   while( p ){
                   70979:     assert( (p->selFlags & SF_Expanded)!=0 );
                   70980:     assert( (p->selFlags & SF_Resolved)==0 );
                   70981:     p->selFlags |= SF_Resolved;
                   70982: 
                   70983:     /* Resolve the expressions in the LIMIT and OFFSET clauses. These
                   70984:     ** are not allowed to refer to any names, so pass an empty NameContext.
                   70985:     */
                   70986:     memset(&sNC, 0, sizeof(sNC));
                   70987:     sNC.pParse = pParse;
                   70988:     if( sqlite3ResolveExprNames(&sNC, p->pLimit) ||
                   70989:         sqlite3ResolveExprNames(&sNC, p->pOffset) ){
                   70990:       return WRC_Abort;
                   70991:     }
                   70992:   
                   70993:     /* Set up the local name-context to pass to sqlite3ResolveExprNames() to
                   70994:     ** resolve the result-set expression list.
                   70995:     */
                   70996:     sNC.allowAgg = 1;
                   70997:     sNC.pSrcList = p->pSrc;
                   70998:     sNC.pNext = pOuterNC;
                   70999:   
                   71000:     /* Resolve names in the result set. */
                   71001:     pEList = p->pEList;
                   71002:     assert( pEList!=0 );
                   71003:     for(i=0; i<pEList->nExpr; i++){
                   71004:       Expr *pX = pEList->a[i].pExpr;
                   71005:       if( sqlite3ResolveExprNames(&sNC, pX) ){
                   71006:         return WRC_Abort;
                   71007:       }
                   71008:     }
                   71009:   
                   71010:     /* Recursively resolve names in all subqueries
                   71011:     */
                   71012:     for(i=0; i<p->pSrc->nSrc; i++){
                   71013:       struct SrcList_item *pItem = &p->pSrc->a[i];
                   71014:       if( pItem->pSelect ){
                   71015:         const char *zSavedContext = pParse->zAuthContext;
                   71016:         if( pItem->zName ) pParse->zAuthContext = pItem->zName;
                   71017:         sqlite3ResolveSelectNames(pParse, pItem->pSelect, pOuterNC);
                   71018:         pParse->zAuthContext = zSavedContext;
                   71019:         if( pParse->nErr || db->mallocFailed ) return WRC_Abort;
                   71020:       }
                   71021:     }
                   71022:   
                   71023:     /* If there are no aggregate functions in the result-set, and no GROUP BY 
                   71024:     ** expression, do not allow aggregates in any of the other expressions.
                   71025:     */
                   71026:     assert( (p->selFlags & SF_Aggregate)==0 );
                   71027:     pGroupBy = p->pGroupBy;
                   71028:     if( pGroupBy || sNC.hasAgg ){
                   71029:       p->selFlags |= SF_Aggregate;
                   71030:     }else{
                   71031:       sNC.allowAgg = 0;
                   71032:     }
                   71033:   
                   71034:     /* If a HAVING clause is present, then there must be a GROUP BY clause.
                   71035:     */
                   71036:     if( p->pHaving && !pGroupBy ){
                   71037:       sqlite3ErrorMsg(pParse, "a GROUP BY clause is required before HAVING");
                   71038:       return WRC_Abort;
                   71039:     }
                   71040:   
                   71041:     /* Add the expression list to the name-context before parsing the
                   71042:     ** other expressions in the SELECT statement. This is so that
                   71043:     ** expressions in the WHERE clause (etc.) can refer to expressions by
                   71044:     ** aliases in the result set.
                   71045:     **
                   71046:     ** Minor point: If this is the case, then the expression will be
                   71047:     ** re-evaluated for each reference to it.
                   71048:     */
                   71049:     sNC.pEList = p->pEList;
                   71050:     if( sqlite3ResolveExprNames(&sNC, p->pWhere) ||
                   71051:        sqlite3ResolveExprNames(&sNC, p->pHaving)
                   71052:     ){
                   71053:       return WRC_Abort;
                   71054:     }
                   71055: 
                   71056:     /* The ORDER BY and GROUP BY clauses may not refer to terms in
                   71057:     ** outer queries 
                   71058:     */
                   71059:     sNC.pNext = 0;
                   71060:     sNC.allowAgg = 1;
                   71061: 
                   71062:     /* Process the ORDER BY clause for singleton SELECT statements.
                   71063:     ** The ORDER BY clause for compounds SELECT statements is handled
                   71064:     ** below, after all of the result-sets for all of the elements of
                   71065:     ** the compound have been resolved.
                   71066:     */
                   71067:     if( !isCompound && resolveOrderGroupBy(&sNC, p, p->pOrderBy, "ORDER") ){
                   71068:       return WRC_Abort;
                   71069:     }
                   71070:     if( db->mallocFailed ){
                   71071:       return WRC_Abort;
                   71072:     }
                   71073:   
                   71074:     /* Resolve the GROUP BY clause.  At the same time, make sure 
                   71075:     ** the GROUP BY clause does not contain aggregate functions.
                   71076:     */
                   71077:     if( pGroupBy ){
                   71078:       struct ExprList_item *pItem;
                   71079:     
                   71080:       if( resolveOrderGroupBy(&sNC, p, pGroupBy, "GROUP") || db->mallocFailed ){
                   71081:         return WRC_Abort;
                   71082:       }
                   71083:       for(i=0, pItem=pGroupBy->a; i<pGroupBy->nExpr; i++, pItem++){
                   71084:         if( ExprHasProperty(pItem->pExpr, EP_Agg) ){
                   71085:           sqlite3ErrorMsg(pParse, "aggregate functions are not allowed in "
                   71086:               "the GROUP BY clause");
                   71087:           return WRC_Abort;
                   71088:         }
                   71089:       }
                   71090:     }
                   71091: 
                   71092:     /* Advance to the next term of the compound
                   71093:     */
                   71094:     p = p->pPrior;
                   71095:     nCompound++;
                   71096:   }
                   71097: 
                   71098:   /* Resolve the ORDER BY on a compound SELECT after all terms of
                   71099:   ** the compound have been resolved.
                   71100:   */
                   71101:   if( isCompound && resolveCompoundOrderBy(pParse, pLeftmost) ){
                   71102:     return WRC_Abort;
                   71103:   }
                   71104: 
                   71105:   return WRC_Prune;
                   71106: }
                   71107: 
                   71108: /*
                   71109: ** This routine walks an expression tree and resolves references to
                   71110: ** table columns and result-set columns.  At the same time, do error
                   71111: ** checking on function usage and set a flag if any aggregate functions
                   71112: ** are seen.
                   71113: **
                   71114: ** To resolve table columns references we look for nodes (or subtrees) of the 
                   71115: ** form X.Y.Z or Y.Z or just Z where
                   71116: **
                   71117: **      X:   The name of a database.  Ex:  "main" or "temp" or
                   71118: **           the symbolic name assigned to an ATTACH-ed database.
                   71119: **
                   71120: **      Y:   The name of a table in a FROM clause.  Or in a trigger
                   71121: **           one of the special names "old" or "new".
                   71122: **
                   71123: **      Z:   The name of a column in table Y.
                   71124: **
                   71125: ** The node at the root of the subtree is modified as follows:
                   71126: **
                   71127: **    Expr.op        Changed to TK_COLUMN
                   71128: **    Expr.pTab      Points to the Table object for X.Y
                   71129: **    Expr.iColumn   The column index in X.Y.  -1 for the rowid.
                   71130: **    Expr.iTable    The VDBE cursor number for X.Y
                   71131: **
                   71132: **
                   71133: ** To resolve result-set references, look for expression nodes of the
                   71134: ** form Z (with no X and Y prefix) where the Z matches the right-hand
                   71135: ** size of an AS clause in the result-set of a SELECT.  The Z expression
                   71136: ** is replaced by a copy of the left-hand side of the result-set expression.
                   71137: ** Table-name and function resolution occurs on the substituted expression
                   71138: ** tree.  For example, in:
                   71139: **
                   71140: **      SELECT a+b AS x, c+d AS y FROM t1 ORDER BY x;
                   71141: **
                   71142: ** The "x" term of the order by is replaced by "a+b" to render:
                   71143: **
                   71144: **      SELECT a+b AS x, c+d AS y FROM t1 ORDER BY a+b;
                   71145: **
                   71146: ** Function calls are checked to make sure that the function is 
                   71147: ** defined and that the correct number of arguments are specified.
                   71148: ** If the function is an aggregate function, then the pNC->hasAgg is
                   71149: ** set and the opcode is changed from TK_FUNCTION to TK_AGG_FUNCTION.
                   71150: ** If an expression contains aggregate functions then the EP_Agg
                   71151: ** property on the expression is set.
                   71152: **
                   71153: ** An error message is left in pParse if anything is amiss.  The number
                   71154: ** if errors is returned.
                   71155: */
                   71156: SQLITE_PRIVATE int sqlite3ResolveExprNames( 
                   71157:   NameContext *pNC,       /* Namespace to resolve expressions in. */
                   71158:   Expr *pExpr             /* The expression to be analyzed. */
                   71159: ){
                   71160:   int savedHasAgg;
                   71161:   Walker w;
                   71162: 
                   71163:   if( pExpr==0 ) return 0;
                   71164: #if SQLITE_MAX_EXPR_DEPTH>0
                   71165:   {
                   71166:     Parse *pParse = pNC->pParse;
                   71167:     if( sqlite3ExprCheckHeight(pParse, pExpr->nHeight+pNC->pParse->nHeight) ){
                   71168:       return 1;
                   71169:     }
                   71170:     pParse->nHeight += pExpr->nHeight;
                   71171:   }
                   71172: #endif
                   71173:   savedHasAgg = pNC->hasAgg;
                   71174:   pNC->hasAgg = 0;
                   71175:   w.xExprCallback = resolveExprStep;
                   71176:   w.xSelectCallback = resolveSelectStep;
                   71177:   w.pParse = pNC->pParse;
                   71178:   w.u.pNC = pNC;
                   71179:   sqlite3WalkExpr(&w, pExpr);
                   71180: #if SQLITE_MAX_EXPR_DEPTH>0
                   71181:   pNC->pParse->nHeight -= pExpr->nHeight;
                   71182: #endif
                   71183:   if( pNC->nErr>0 || w.pParse->nErr>0 ){
                   71184:     ExprSetProperty(pExpr, EP_Error);
                   71185:   }
                   71186:   if( pNC->hasAgg ){
                   71187:     ExprSetProperty(pExpr, EP_Agg);
                   71188:   }else if( savedHasAgg ){
                   71189:     pNC->hasAgg = 1;
                   71190:   }
                   71191:   return ExprHasProperty(pExpr, EP_Error);
                   71192: }
                   71193: 
                   71194: 
                   71195: /*
                   71196: ** Resolve all names in all expressions of a SELECT and in all
                   71197: ** decendents of the SELECT, including compounds off of p->pPrior,
                   71198: ** subqueries in expressions, and subqueries used as FROM clause
                   71199: ** terms.
                   71200: **
                   71201: ** See sqlite3ResolveExprNames() for a description of the kinds of
                   71202: ** transformations that occur.
                   71203: **
                   71204: ** All SELECT statements should have been expanded using
                   71205: ** sqlite3SelectExpand() prior to invoking this routine.
                   71206: */
                   71207: SQLITE_PRIVATE void sqlite3ResolveSelectNames(
                   71208:   Parse *pParse,         /* The parser context */
                   71209:   Select *p,             /* The SELECT statement being coded. */
                   71210:   NameContext *pOuterNC  /* Name context for parent SELECT statement */
                   71211: ){
                   71212:   Walker w;
                   71213: 
                   71214:   assert( p!=0 );
                   71215:   w.xExprCallback = resolveExprStep;
                   71216:   w.xSelectCallback = resolveSelectStep;
                   71217:   w.pParse = pParse;
                   71218:   w.u.pNC = pOuterNC;
                   71219:   sqlite3WalkSelect(&w, p);
                   71220: }
                   71221: 
                   71222: /************** End of resolve.c *********************************************/
                   71223: /************** Begin file expr.c ********************************************/
                   71224: /*
                   71225: ** 2001 September 15
                   71226: **
                   71227: ** The author disclaims copyright to this source code.  In place of
                   71228: ** a legal notice, here is a blessing:
                   71229: **
                   71230: **    May you do good and not evil.
                   71231: **    May you find forgiveness for yourself and forgive others.
                   71232: **    May you share freely, never taking more than you give.
                   71233: **
                   71234: *************************************************************************
                   71235: ** This file contains routines used for analyzing expressions and
                   71236: ** for generating VDBE code that evaluates expressions in SQLite.
                   71237: */
                   71238: 
                   71239: /*
                   71240: ** Return the 'affinity' of the expression pExpr if any.
                   71241: **
                   71242: ** If pExpr is a column, a reference to a column via an 'AS' alias,
                   71243: ** or a sub-select with a column as the return value, then the 
                   71244: ** affinity of that column is returned. Otherwise, 0x00 is returned,
                   71245: ** indicating no affinity for the expression.
                   71246: **
                   71247: ** i.e. the WHERE clause expresssions in the following statements all
                   71248: ** have an affinity:
                   71249: **
                   71250: ** CREATE TABLE t1(a);
                   71251: ** SELECT * FROM t1 WHERE a;
                   71252: ** SELECT a AS b FROM t1 WHERE b;
                   71253: ** SELECT * FROM t1 WHERE (select a from t1);
                   71254: */
                   71255: SQLITE_PRIVATE char sqlite3ExprAffinity(Expr *pExpr){
                   71256:   int op = pExpr->op;
                   71257:   if( op==TK_SELECT ){
                   71258:     assert( pExpr->flags&EP_xIsSelect );
                   71259:     return sqlite3ExprAffinity(pExpr->x.pSelect->pEList->a[0].pExpr);
                   71260:   }
                   71261: #ifndef SQLITE_OMIT_CAST
                   71262:   if( op==TK_CAST ){
                   71263:     assert( !ExprHasProperty(pExpr, EP_IntValue) );
                   71264:     return sqlite3AffinityType(pExpr->u.zToken);
                   71265:   }
                   71266: #endif
                   71267:   if( (op==TK_AGG_COLUMN || op==TK_COLUMN || op==TK_REGISTER) 
                   71268:    && pExpr->pTab!=0
                   71269:   ){
                   71270:     /* op==TK_REGISTER && pExpr->pTab!=0 happens when pExpr was originally
                   71271:     ** a TK_COLUMN but was previously evaluated and cached in a register */
                   71272:     int j = pExpr->iColumn;
                   71273:     if( j<0 ) return SQLITE_AFF_INTEGER;
                   71274:     assert( pExpr->pTab && j<pExpr->pTab->nCol );
                   71275:     return pExpr->pTab->aCol[j].affinity;
                   71276:   }
                   71277:   return pExpr->affinity;
                   71278: }
                   71279: 
                   71280: /*
                   71281: ** Set the explicit collating sequence for an expression to the
                   71282: ** collating sequence supplied in the second argument.
                   71283: */
                   71284: SQLITE_PRIVATE Expr *sqlite3ExprSetColl(Expr *pExpr, CollSeq *pColl){
                   71285:   if( pExpr && pColl ){
                   71286:     pExpr->pColl = pColl;
                   71287:     pExpr->flags |= EP_ExpCollate;
                   71288:   }
                   71289:   return pExpr;
                   71290: }
                   71291: 
                   71292: /*
                   71293: ** Set the collating sequence for expression pExpr to be the collating
                   71294: ** sequence named by pToken.   Return a pointer to the revised expression.
                   71295: ** The collating sequence is marked as "explicit" using the EP_ExpCollate
                   71296: ** flag.  An explicit collating sequence will override implicit
                   71297: ** collating sequences.
                   71298: */
                   71299: SQLITE_PRIVATE Expr *sqlite3ExprSetCollByToken(Parse *pParse, Expr *pExpr, Token *pCollName){
                   71300:   char *zColl = 0;            /* Dequoted name of collation sequence */
                   71301:   CollSeq *pColl;
                   71302:   sqlite3 *db = pParse->db;
                   71303:   zColl = sqlite3NameFromToken(db, pCollName);
                   71304:   pColl = sqlite3LocateCollSeq(pParse, zColl);
                   71305:   sqlite3ExprSetColl(pExpr, pColl);
                   71306:   sqlite3DbFree(db, zColl);
                   71307:   return pExpr;
                   71308: }
                   71309: 
                   71310: /*
                   71311: ** Return the default collation sequence for the expression pExpr. If
                   71312: ** there is no default collation type, return 0.
                   71313: */
                   71314: SQLITE_PRIVATE CollSeq *sqlite3ExprCollSeq(Parse *pParse, Expr *pExpr){
                   71315:   CollSeq *pColl = 0;
                   71316:   Expr *p = pExpr;
                   71317:   while( p ){
                   71318:     int op;
                   71319:     pColl = p->pColl;
                   71320:     if( pColl ) break;
                   71321:     op = p->op;
                   71322:     if( p->pTab!=0 && (
                   71323:         op==TK_AGG_COLUMN || op==TK_COLUMN || op==TK_REGISTER || op==TK_TRIGGER
                   71324:     )){
                   71325:       /* op==TK_REGISTER && p->pTab!=0 happens when pExpr was originally
                   71326:       ** a TK_COLUMN but was previously evaluated and cached in a register */
                   71327:       const char *zColl;
                   71328:       int j = p->iColumn;
                   71329:       if( j>=0 ){
                   71330:         sqlite3 *db = pParse->db;
                   71331:         zColl = p->pTab->aCol[j].zColl;
                   71332:         pColl = sqlite3FindCollSeq(db, ENC(db), zColl, 0);
                   71333:         pExpr->pColl = pColl;
                   71334:       }
                   71335:       break;
                   71336:     }
                   71337:     if( op!=TK_CAST && op!=TK_UPLUS ){
                   71338:       break;
                   71339:     }
                   71340:     p = p->pLeft;
                   71341:   }
                   71342:   if( sqlite3CheckCollSeq(pParse, pColl) ){ 
                   71343:     pColl = 0;
                   71344:   }
                   71345:   return pColl;
                   71346: }
                   71347: 
                   71348: /*
                   71349: ** pExpr is an operand of a comparison operator.  aff2 is the
                   71350: ** type affinity of the other operand.  This routine returns the
                   71351: ** type affinity that should be used for the comparison operator.
                   71352: */
                   71353: SQLITE_PRIVATE char sqlite3CompareAffinity(Expr *pExpr, char aff2){
                   71354:   char aff1 = sqlite3ExprAffinity(pExpr);
                   71355:   if( aff1 && aff2 ){
                   71356:     /* Both sides of the comparison are columns. If one has numeric
                   71357:     ** affinity, use that. Otherwise use no affinity.
                   71358:     */
                   71359:     if( sqlite3IsNumericAffinity(aff1) || sqlite3IsNumericAffinity(aff2) ){
                   71360:       return SQLITE_AFF_NUMERIC;
                   71361:     }else{
                   71362:       return SQLITE_AFF_NONE;
                   71363:     }
                   71364:   }else if( !aff1 && !aff2 ){
                   71365:     /* Neither side of the comparison is a column.  Compare the
                   71366:     ** results directly.
                   71367:     */
                   71368:     return SQLITE_AFF_NONE;
                   71369:   }else{
                   71370:     /* One side is a column, the other is not. Use the columns affinity. */
                   71371:     assert( aff1==0 || aff2==0 );
                   71372:     return (aff1 + aff2);
                   71373:   }
                   71374: }
                   71375: 
                   71376: /*
                   71377: ** pExpr is a comparison operator.  Return the type affinity that should
                   71378: ** be applied to both operands prior to doing the comparison.
                   71379: */
                   71380: static char comparisonAffinity(Expr *pExpr){
                   71381:   char aff;
                   71382:   assert( pExpr->op==TK_EQ || pExpr->op==TK_IN || pExpr->op==TK_LT ||
                   71383:           pExpr->op==TK_GT || pExpr->op==TK_GE || pExpr->op==TK_LE ||
                   71384:           pExpr->op==TK_NE || pExpr->op==TK_IS || pExpr->op==TK_ISNOT );
                   71385:   assert( pExpr->pLeft );
                   71386:   aff = sqlite3ExprAffinity(pExpr->pLeft);
                   71387:   if( pExpr->pRight ){
                   71388:     aff = sqlite3CompareAffinity(pExpr->pRight, aff);
                   71389:   }else if( ExprHasProperty(pExpr, EP_xIsSelect) ){
                   71390:     aff = sqlite3CompareAffinity(pExpr->x.pSelect->pEList->a[0].pExpr, aff);
                   71391:   }else if( !aff ){
                   71392:     aff = SQLITE_AFF_NONE;
                   71393:   }
                   71394:   return aff;
                   71395: }
                   71396: 
                   71397: /*
                   71398: ** pExpr is a comparison expression, eg. '=', '<', IN(...) etc.
                   71399: ** idx_affinity is the affinity of an indexed column. Return true
                   71400: ** if the index with affinity idx_affinity may be used to implement
                   71401: ** the comparison in pExpr.
                   71402: */
                   71403: SQLITE_PRIVATE int sqlite3IndexAffinityOk(Expr *pExpr, char idx_affinity){
                   71404:   char aff = comparisonAffinity(pExpr);
                   71405:   switch( aff ){
                   71406:     case SQLITE_AFF_NONE:
                   71407:       return 1;
                   71408:     case SQLITE_AFF_TEXT:
                   71409:       return idx_affinity==SQLITE_AFF_TEXT;
                   71410:     default:
                   71411:       return sqlite3IsNumericAffinity(idx_affinity);
                   71412:   }
                   71413: }
                   71414: 
                   71415: /*
                   71416: ** Return the P5 value that should be used for a binary comparison
                   71417: ** opcode (OP_Eq, OP_Ge etc.) used to compare pExpr1 and pExpr2.
                   71418: */
                   71419: static u8 binaryCompareP5(Expr *pExpr1, Expr *pExpr2, int jumpIfNull){
                   71420:   u8 aff = (char)sqlite3ExprAffinity(pExpr2);
                   71421:   aff = (u8)sqlite3CompareAffinity(pExpr1, aff) | (u8)jumpIfNull;
                   71422:   return aff;
                   71423: }
                   71424: 
                   71425: /*
                   71426: ** Return a pointer to the collation sequence that should be used by
                   71427: ** a binary comparison operator comparing pLeft and pRight.
                   71428: **
                   71429: ** If the left hand expression has a collating sequence type, then it is
                   71430: ** used. Otherwise the collation sequence for the right hand expression
                   71431: ** is used, or the default (BINARY) if neither expression has a collating
                   71432: ** type.
                   71433: **
                   71434: ** Argument pRight (but not pLeft) may be a null pointer. In this case,
                   71435: ** it is not considered.
                   71436: */
                   71437: SQLITE_PRIVATE CollSeq *sqlite3BinaryCompareCollSeq(
                   71438:   Parse *pParse, 
                   71439:   Expr *pLeft, 
                   71440:   Expr *pRight
                   71441: ){
                   71442:   CollSeq *pColl;
                   71443:   assert( pLeft );
                   71444:   if( pLeft->flags & EP_ExpCollate ){
                   71445:     assert( pLeft->pColl );
                   71446:     pColl = pLeft->pColl;
                   71447:   }else if( pRight && pRight->flags & EP_ExpCollate ){
                   71448:     assert( pRight->pColl );
                   71449:     pColl = pRight->pColl;
                   71450:   }else{
                   71451:     pColl = sqlite3ExprCollSeq(pParse, pLeft);
                   71452:     if( !pColl ){
                   71453:       pColl = sqlite3ExprCollSeq(pParse, pRight);
                   71454:     }
                   71455:   }
                   71456:   return pColl;
                   71457: }
                   71458: 
                   71459: /*
                   71460: ** Generate code for a comparison operator.
                   71461: */
                   71462: static int codeCompare(
                   71463:   Parse *pParse,    /* The parsing (and code generating) context */
                   71464:   Expr *pLeft,      /* The left operand */
                   71465:   Expr *pRight,     /* The right operand */
                   71466:   int opcode,       /* The comparison opcode */
                   71467:   int in1, int in2, /* Register holding operands */
                   71468:   int dest,         /* Jump here if true.  */
                   71469:   int jumpIfNull    /* If true, jump if either operand is NULL */
                   71470: ){
                   71471:   int p5;
                   71472:   int addr;
                   71473:   CollSeq *p4;
                   71474: 
                   71475:   p4 = sqlite3BinaryCompareCollSeq(pParse, pLeft, pRight);
                   71476:   p5 = binaryCompareP5(pLeft, pRight, jumpIfNull);
                   71477:   addr = sqlite3VdbeAddOp4(pParse->pVdbe, opcode, in2, dest, in1,
                   71478:                            (void*)p4, P4_COLLSEQ);
                   71479:   sqlite3VdbeChangeP5(pParse->pVdbe, (u8)p5);
                   71480:   return addr;
                   71481: }
                   71482: 
                   71483: #if SQLITE_MAX_EXPR_DEPTH>0
                   71484: /*
                   71485: ** Check that argument nHeight is less than or equal to the maximum
                   71486: ** expression depth allowed. If it is not, leave an error message in
                   71487: ** pParse.
                   71488: */
                   71489: SQLITE_PRIVATE int sqlite3ExprCheckHeight(Parse *pParse, int nHeight){
                   71490:   int rc = SQLITE_OK;
                   71491:   int mxHeight = pParse->db->aLimit[SQLITE_LIMIT_EXPR_DEPTH];
                   71492:   if( nHeight>mxHeight ){
                   71493:     sqlite3ErrorMsg(pParse, 
                   71494:        "Expression tree is too large (maximum depth %d)", mxHeight
                   71495:     );
                   71496:     rc = SQLITE_ERROR;
                   71497:   }
                   71498:   return rc;
                   71499: }
                   71500: 
                   71501: /* The following three functions, heightOfExpr(), heightOfExprList()
                   71502: ** and heightOfSelect(), are used to determine the maximum height
                   71503: ** of any expression tree referenced by the structure passed as the
                   71504: ** first argument.
                   71505: **
                   71506: ** If this maximum height is greater than the current value pointed
                   71507: ** to by pnHeight, the second parameter, then set *pnHeight to that
                   71508: ** value.
                   71509: */
                   71510: static void heightOfExpr(Expr *p, int *pnHeight){
                   71511:   if( p ){
                   71512:     if( p->nHeight>*pnHeight ){
                   71513:       *pnHeight = p->nHeight;
                   71514:     }
                   71515:   }
                   71516: }
                   71517: static void heightOfExprList(ExprList *p, int *pnHeight){
                   71518:   if( p ){
                   71519:     int i;
                   71520:     for(i=0; i<p->nExpr; i++){
                   71521:       heightOfExpr(p->a[i].pExpr, pnHeight);
                   71522:     }
                   71523:   }
                   71524: }
                   71525: static void heightOfSelect(Select *p, int *pnHeight){
                   71526:   if( p ){
                   71527:     heightOfExpr(p->pWhere, pnHeight);
                   71528:     heightOfExpr(p->pHaving, pnHeight);
                   71529:     heightOfExpr(p->pLimit, pnHeight);
                   71530:     heightOfExpr(p->pOffset, pnHeight);
                   71531:     heightOfExprList(p->pEList, pnHeight);
                   71532:     heightOfExprList(p->pGroupBy, pnHeight);
                   71533:     heightOfExprList(p->pOrderBy, pnHeight);
                   71534:     heightOfSelect(p->pPrior, pnHeight);
                   71535:   }
                   71536: }
                   71537: 
                   71538: /*
                   71539: ** Set the Expr.nHeight variable in the structure passed as an 
                   71540: ** argument. An expression with no children, Expr.pList or 
                   71541: ** Expr.pSelect member has a height of 1. Any other expression
                   71542: ** has a height equal to the maximum height of any other 
                   71543: ** referenced Expr plus one.
                   71544: */
                   71545: static void exprSetHeight(Expr *p){
                   71546:   int nHeight = 0;
                   71547:   heightOfExpr(p->pLeft, &nHeight);
                   71548:   heightOfExpr(p->pRight, &nHeight);
                   71549:   if( ExprHasProperty(p, EP_xIsSelect) ){
                   71550:     heightOfSelect(p->x.pSelect, &nHeight);
                   71551:   }else{
                   71552:     heightOfExprList(p->x.pList, &nHeight);
                   71553:   }
                   71554:   p->nHeight = nHeight + 1;
                   71555: }
                   71556: 
                   71557: /*
                   71558: ** Set the Expr.nHeight variable using the exprSetHeight() function. If
                   71559: ** the height is greater than the maximum allowed expression depth,
                   71560: ** leave an error in pParse.
                   71561: */
                   71562: SQLITE_PRIVATE void sqlite3ExprSetHeight(Parse *pParse, Expr *p){
                   71563:   exprSetHeight(p);
                   71564:   sqlite3ExprCheckHeight(pParse, p->nHeight);
                   71565: }
                   71566: 
                   71567: /*
                   71568: ** Return the maximum height of any expression tree referenced
                   71569: ** by the select statement passed as an argument.
                   71570: */
                   71571: SQLITE_PRIVATE int sqlite3SelectExprHeight(Select *p){
                   71572:   int nHeight = 0;
                   71573:   heightOfSelect(p, &nHeight);
                   71574:   return nHeight;
                   71575: }
                   71576: #else
                   71577:   #define exprSetHeight(y)
                   71578: #endif /* SQLITE_MAX_EXPR_DEPTH>0 */
                   71579: 
                   71580: /*
                   71581: ** This routine is the core allocator for Expr nodes.
                   71582: **
                   71583: ** Construct a new expression node and return a pointer to it.  Memory
                   71584: ** for this node and for the pToken argument is a single allocation
                   71585: ** obtained from sqlite3DbMalloc().  The calling function
                   71586: ** is responsible for making sure the node eventually gets freed.
                   71587: **
                   71588: ** If dequote is true, then the token (if it exists) is dequoted.
                   71589: ** If dequote is false, no dequoting is performance.  The deQuote
                   71590: ** parameter is ignored if pToken is NULL or if the token does not
                   71591: ** appear to be quoted.  If the quotes were of the form "..." (double-quotes)
                   71592: ** then the EP_DblQuoted flag is set on the expression node.
                   71593: **
                   71594: ** Special case:  If op==TK_INTEGER and pToken points to a string that
                   71595: ** can be translated into a 32-bit integer, then the token is not
                   71596: ** stored in u.zToken.  Instead, the integer values is written
                   71597: ** into u.iValue and the EP_IntValue flag is set.  No extra storage
                   71598: ** is allocated to hold the integer text and the dequote flag is ignored.
                   71599: */
                   71600: SQLITE_PRIVATE Expr *sqlite3ExprAlloc(
                   71601:   sqlite3 *db,            /* Handle for sqlite3DbMallocZero() (may be null) */
                   71602:   int op,                 /* Expression opcode */
                   71603:   const Token *pToken,    /* Token argument.  Might be NULL */
                   71604:   int dequote             /* True to dequote */
                   71605: ){
                   71606:   Expr *pNew;
                   71607:   int nExtra = 0;
                   71608:   int iValue = 0;
                   71609: 
                   71610:   if( pToken ){
                   71611:     if( op!=TK_INTEGER || pToken->z==0
                   71612:           || sqlite3GetInt32(pToken->z, &iValue)==0 ){
                   71613:       nExtra = pToken->n+1;
                   71614:       assert( iValue>=0 );
                   71615:     }
                   71616:   }
                   71617:   pNew = sqlite3DbMallocZero(db, sizeof(Expr)+nExtra);
                   71618:   if( pNew ){
                   71619:     pNew->op = (u8)op;
                   71620:     pNew->iAgg = -1;
                   71621:     if( pToken ){
                   71622:       if( nExtra==0 ){
                   71623:         pNew->flags |= EP_IntValue;
                   71624:         pNew->u.iValue = iValue;
                   71625:       }else{
                   71626:         int c;
                   71627:         pNew->u.zToken = (char*)&pNew[1];
                   71628:         memcpy(pNew->u.zToken, pToken->z, pToken->n);
                   71629:         pNew->u.zToken[pToken->n] = 0;
                   71630:         if( dequote && nExtra>=3 
                   71631:              && ((c = pToken->z[0])=='\'' || c=='"' || c=='[' || c=='`') ){
                   71632:           sqlite3Dequote(pNew->u.zToken);
                   71633:           if( c=='"' ) pNew->flags |= EP_DblQuoted;
                   71634:         }
                   71635:       }
                   71636:     }
                   71637: #if SQLITE_MAX_EXPR_DEPTH>0
                   71638:     pNew->nHeight = 1;
                   71639: #endif  
                   71640:   }
                   71641:   return pNew;
                   71642: }
                   71643: 
                   71644: /*
                   71645: ** Allocate a new expression node from a zero-terminated token that has
                   71646: ** already been dequoted.
                   71647: */
                   71648: SQLITE_PRIVATE Expr *sqlite3Expr(
                   71649:   sqlite3 *db,            /* Handle for sqlite3DbMallocZero() (may be null) */
                   71650:   int op,                 /* Expression opcode */
                   71651:   const char *zToken      /* Token argument.  Might be NULL */
                   71652: ){
                   71653:   Token x;
                   71654:   x.z = zToken;
                   71655:   x.n = zToken ? sqlite3Strlen30(zToken) : 0;
                   71656:   return sqlite3ExprAlloc(db, op, &x, 0);
                   71657: }
                   71658: 
                   71659: /*
                   71660: ** Attach subtrees pLeft and pRight to the Expr node pRoot.
                   71661: **
                   71662: ** If pRoot==NULL that means that a memory allocation error has occurred.
                   71663: ** In that case, delete the subtrees pLeft and pRight.
                   71664: */
                   71665: SQLITE_PRIVATE void sqlite3ExprAttachSubtrees(
                   71666:   sqlite3 *db,
                   71667:   Expr *pRoot,
                   71668:   Expr *pLeft,
                   71669:   Expr *pRight
                   71670: ){
                   71671:   if( pRoot==0 ){
                   71672:     assert( db->mallocFailed );
                   71673:     sqlite3ExprDelete(db, pLeft);
                   71674:     sqlite3ExprDelete(db, pRight);
                   71675:   }else{
                   71676:     if( pRight ){
                   71677:       pRoot->pRight = pRight;
                   71678:       if( pRight->flags & EP_ExpCollate ){
                   71679:         pRoot->flags |= EP_ExpCollate;
                   71680:         pRoot->pColl = pRight->pColl;
                   71681:       }
                   71682:     }
                   71683:     if( pLeft ){
                   71684:       pRoot->pLeft = pLeft;
                   71685:       if( pLeft->flags & EP_ExpCollate ){
                   71686:         pRoot->flags |= EP_ExpCollate;
                   71687:         pRoot->pColl = pLeft->pColl;
                   71688:       }
                   71689:     }
                   71690:     exprSetHeight(pRoot);
                   71691:   }
                   71692: }
                   71693: 
                   71694: /*
                   71695: ** Allocate a Expr node which joins as many as two subtrees.
                   71696: **
                   71697: ** One or both of the subtrees can be NULL.  Return a pointer to the new
                   71698: ** Expr node.  Or, if an OOM error occurs, set pParse->db->mallocFailed,
                   71699: ** free the subtrees and return NULL.
                   71700: */
                   71701: SQLITE_PRIVATE Expr *sqlite3PExpr(
                   71702:   Parse *pParse,          /* Parsing context */
                   71703:   int op,                 /* Expression opcode */
                   71704:   Expr *pLeft,            /* Left operand */
                   71705:   Expr *pRight,           /* Right operand */
                   71706:   const Token *pToken     /* Argument token */
                   71707: ){
                   71708:   Expr *p = sqlite3ExprAlloc(pParse->db, op, pToken, 1);
                   71709:   sqlite3ExprAttachSubtrees(pParse->db, p, pLeft, pRight);
                   71710:   if( p ) {
                   71711:     sqlite3ExprCheckHeight(pParse, p->nHeight);
                   71712:   }
                   71713:   return p;
                   71714: }
                   71715: 
                   71716: /*
                   71717: ** Join two expressions using an AND operator.  If either expression is
                   71718: ** NULL, then just return the other expression.
                   71719: */
                   71720: SQLITE_PRIVATE Expr *sqlite3ExprAnd(sqlite3 *db, Expr *pLeft, Expr *pRight){
                   71721:   if( pLeft==0 ){
                   71722:     return pRight;
                   71723:   }else if( pRight==0 ){
                   71724:     return pLeft;
                   71725:   }else{
                   71726:     Expr *pNew = sqlite3ExprAlloc(db, TK_AND, 0, 0);
                   71727:     sqlite3ExprAttachSubtrees(db, pNew, pLeft, pRight);
                   71728:     return pNew;
                   71729:   }
                   71730: }
                   71731: 
                   71732: /*
                   71733: ** Construct a new expression node for a function with multiple
                   71734: ** arguments.
                   71735: */
                   71736: SQLITE_PRIVATE Expr *sqlite3ExprFunction(Parse *pParse, ExprList *pList, Token *pToken){
                   71737:   Expr *pNew;
                   71738:   sqlite3 *db = pParse->db;
                   71739:   assert( pToken );
                   71740:   pNew = sqlite3ExprAlloc(db, TK_FUNCTION, pToken, 1);
                   71741:   if( pNew==0 ){
                   71742:     sqlite3ExprListDelete(db, pList); /* Avoid memory leak when malloc fails */
                   71743:     return 0;
                   71744:   }
                   71745:   pNew->x.pList = pList;
                   71746:   assert( !ExprHasProperty(pNew, EP_xIsSelect) );
                   71747:   sqlite3ExprSetHeight(pParse, pNew);
                   71748:   return pNew;
                   71749: }
                   71750: 
                   71751: /*
                   71752: ** Assign a variable number to an expression that encodes a wildcard
                   71753: ** in the original SQL statement.  
                   71754: **
                   71755: ** Wildcards consisting of a single "?" are assigned the next sequential
                   71756: ** variable number.
                   71757: **
                   71758: ** Wildcards of the form "?nnn" are assigned the number "nnn".  We make
                   71759: ** sure "nnn" is not too be to avoid a denial of service attack when
                   71760: ** the SQL statement comes from an external source.
                   71761: **
                   71762: ** Wildcards of the form ":aaa", "@aaa", or "$aaa" are assigned the same number
                   71763: ** as the previous instance of the same wildcard.  Or if this is the first
                   71764: ** instance of the wildcard, the next sequenial variable number is
                   71765: ** assigned.
                   71766: */
                   71767: SQLITE_PRIVATE void sqlite3ExprAssignVarNumber(Parse *pParse, Expr *pExpr){
                   71768:   sqlite3 *db = pParse->db;
                   71769:   const char *z;
                   71770: 
                   71771:   if( pExpr==0 ) return;
                   71772:   assert( !ExprHasAnyProperty(pExpr, EP_IntValue|EP_Reduced|EP_TokenOnly) );
                   71773:   z = pExpr->u.zToken;
                   71774:   assert( z!=0 );
                   71775:   assert( z[0]!=0 );
                   71776:   if( z[1]==0 ){
                   71777:     /* Wildcard of the form "?".  Assign the next variable number */
                   71778:     assert( z[0]=='?' );
                   71779:     pExpr->iColumn = (ynVar)(++pParse->nVar);
                   71780:   }else{
                   71781:     ynVar x = 0;
                   71782:     u32 n = sqlite3Strlen30(z);
                   71783:     if( z[0]=='?' ){
                   71784:       /* Wildcard of the form "?nnn".  Convert "nnn" to an integer and
                   71785:       ** use it as the variable number */
                   71786:       i64 i;
                   71787:       int bOk = 0==sqlite3Atoi64(&z[1], &i, n-1, SQLITE_UTF8);
                   71788:       pExpr->iColumn = x = (ynVar)i;
                   71789:       testcase( i==0 );
                   71790:       testcase( i==1 );
                   71791:       testcase( i==db->aLimit[SQLITE_LIMIT_VARIABLE_NUMBER]-1 );
                   71792:       testcase( i==db->aLimit[SQLITE_LIMIT_VARIABLE_NUMBER] );
                   71793:       if( bOk==0 || i<1 || i>db->aLimit[SQLITE_LIMIT_VARIABLE_NUMBER] ){
                   71794:         sqlite3ErrorMsg(pParse, "variable number must be between ?1 and ?%d",
                   71795:             db->aLimit[SQLITE_LIMIT_VARIABLE_NUMBER]);
                   71796:         x = 0;
                   71797:       }
                   71798:       if( i>pParse->nVar ){
                   71799:         pParse->nVar = (int)i;
                   71800:       }
                   71801:     }else{
                   71802:       /* Wildcards like ":aaa", "$aaa" or "@aaa".  Reuse the same variable
                   71803:       ** number as the prior appearance of the same name, or if the name
                   71804:       ** has never appeared before, reuse the same variable number
                   71805:       */
                   71806:       ynVar i;
                   71807:       for(i=0; i<pParse->nzVar; i++){
                   71808:         if( pParse->azVar[i] && memcmp(pParse->azVar[i],z,n+1)==0 ){
                   71809:           pExpr->iColumn = x = (ynVar)i+1;
                   71810:           break;
                   71811:         }
                   71812:       }
                   71813:       if( x==0 ) x = pExpr->iColumn = (ynVar)(++pParse->nVar);
                   71814:     }
                   71815:     if( x>0 ){
                   71816:       if( x>pParse->nzVar ){
                   71817:         char **a;
                   71818:         a = sqlite3DbRealloc(db, pParse->azVar, x*sizeof(a[0]));
                   71819:         if( a==0 ) return;  /* Error reported through db->mallocFailed */
                   71820:         pParse->azVar = a;
                   71821:         memset(&a[pParse->nzVar], 0, (x-pParse->nzVar)*sizeof(a[0]));
                   71822:         pParse->nzVar = x;
                   71823:       }
                   71824:       if( z[0]!='?' || pParse->azVar[x-1]==0 ){
                   71825:         sqlite3DbFree(db, pParse->azVar[x-1]);
                   71826:         pParse->azVar[x-1] = sqlite3DbStrNDup(db, z, n);
                   71827:       }
                   71828:     }
                   71829:   } 
                   71830:   if( !pParse->nErr && pParse->nVar>db->aLimit[SQLITE_LIMIT_VARIABLE_NUMBER] ){
                   71831:     sqlite3ErrorMsg(pParse, "too many SQL variables");
                   71832:   }
                   71833: }
                   71834: 
                   71835: /*
                   71836: ** Recursively delete an expression tree.
                   71837: */
                   71838: SQLITE_PRIVATE void sqlite3ExprDelete(sqlite3 *db, Expr *p){
                   71839:   if( p==0 ) return;
                   71840:   /* Sanity check: Assert that the IntValue is non-negative if it exists */
                   71841:   assert( !ExprHasProperty(p, EP_IntValue) || p->u.iValue>=0 );
                   71842:   if( !ExprHasAnyProperty(p, EP_TokenOnly) ){
                   71843:     sqlite3ExprDelete(db, p->pLeft);
                   71844:     sqlite3ExprDelete(db, p->pRight);
                   71845:     if( !ExprHasProperty(p, EP_Reduced) && (p->flags2 & EP2_MallocedToken)!=0 ){
                   71846:       sqlite3DbFree(db, p->u.zToken);
                   71847:     }
                   71848:     if( ExprHasProperty(p, EP_xIsSelect) ){
                   71849:       sqlite3SelectDelete(db, p->x.pSelect);
                   71850:     }else{
                   71851:       sqlite3ExprListDelete(db, p->x.pList);
                   71852:     }
                   71853:   }
                   71854:   if( !ExprHasProperty(p, EP_Static) ){
                   71855:     sqlite3DbFree(db, p);
                   71856:   }
                   71857: }
                   71858: 
                   71859: /*
                   71860: ** Return the number of bytes allocated for the expression structure 
                   71861: ** passed as the first argument. This is always one of EXPR_FULLSIZE,
                   71862: ** EXPR_REDUCEDSIZE or EXPR_TOKENONLYSIZE.
                   71863: */
                   71864: static int exprStructSize(Expr *p){
                   71865:   if( ExprHasProperty(p, EP_TokenOnly) ) return EXPR_TOKENONLYSIZE;
                   71866:   if( ExprHasProperty(p, EP_Reduced) ) return EXPR_REDUCEDSIZE;
                   71867:   return EXPR_FULLSIZE;
                   71868: }
                   71869: 
                   71870: /*
                   71871: ** The dupedExpr*Size() routines each return the number of bytes required
                   71872: ** to store a copy of an expression or expression tree.  They differ in
                   71873: ** how much of the tree is measured.
                   71874: **
                   71875: **     dupedExprStructSize()     Size of only the Expr structure 
                   71876: **     dupedExprNodeSize()       Size of Expr + space for token
                   71877: **     dupedExprSize()           Expr + token + subtree components
                   71878: **
                   71879: ***************************************************************************
                   71880: **
                   71881: ** The dupedExprStructSize() function returns two values OR-ed together:  
                   71882: ** (1) the space required for a copy of the Expr structure only and 
                   71883: ** (2) the EP_xxx flags that indicate what the structure size should be.
                   71884: ** The return values is always one of:
                   71885: **
                   71886: **      EXPR_FULLSIZE
                   71887: **      EXPR_REDUCEDSIZE   | EP_Reduced
                   71888: **      EXPR_TOKENONLYSIZE | EP_TokenOnly
                   71889: **
                   71890: ** The size of the structure can be found by masking the return value
                   71891: ** of this routine with 0xfff.  The flags can be found by masking the
                   71892: ** return value with EP_Reduced|EP_TokenOnly.
                   71893: **
                   71894: ** Note that with flags==EXPRDUP_REDUCE, this routines works on full-size
                   71895: ** (unreduced) Expr objects as they or originally constructed by the parser.
                   71896: ** During expression analysis, extra information is computed and moved into
                   71897: ** later parts of teh Expr object and that extra information might get chopped
                   71898: ** off if the expression is reduced.  Note also that it does not work to
                   71899: ** make a EXPRDUP_REDUCE copy of a reduced expression.  It is only legal
                   71900: ** to reduce a pristine expression tree from the parser.  The implementation
                   71901: ** of dupedExprStructSize() contain multiple assert() statements that attempt
                   71902: ** to enforce this constraint.
                   71903: */
                   71904: static int dupedExprStructSize(Expr *p, int flags){
                   71905:   int nSize;
                   71906:   assert( flags==EXPRDUP_REDUCE || flags==0 ); /* Only one flag value allowed */
                   71907:   if( 0==(flags&EXPRDUP_REDUCE) ){
                   71908:     nSize = EXPR_FULLSIZE;
                   71909:   }else{
                   71910:     assert( !ExprHasAnyProperty(p, EP_TokenOnly|EP_Reduced) );
                   71911:     assert( !ExprHasProperty(p, EP_FromJoin) ); 
                   71912:     assert( (p->flags2 & EP2_MallocedToken)==0 );
                   71913:     assert( (p->flags2 & EP2_Irreducible)==0 );
                   71914:     if( p->pLeft || p->pRight || p->pColl || p->x.pList ){
                   71915:       nSize = EXPR_REDUCEDSIZE | EP_Reduced;
                   71916:     }else{
                   71917:       nSize = EXPR_TOKENONLYSIZE | EP_TokenOnly;
                   71918:     }
                   71919:   }
                   71920:   return nSize;
                   71921: }
                   71922: 
                   71923: /*
                   71924: ** This function returns the space in bytes required to store the copy 
                   71925: ** of the Expr structure and a copy of the Expr.u.zToken string (if that
                   71926: ** string is defined.)
                   71927: */
                   71928: static int dupedExprNodeSize(Expr *p, int flags){
                   71929:   int nByte = dupedExprStructSize(p, flags) & 0xfff;
                   71930:   if( !ExprHasProperty(p, EP_IntValue) && p->u.zToken ){
                   71931:     nByte += sqlite3Strlen30(p->u.zToken)+1;
                   71932:   }
                   71933:   return ROUND8(nByte);
                   71934: }
                   71935: 
                   71936: /*
                   71937: ** Return the number of bytes required to create a duplicate of the 
                   71938: ** expression passed as the first argument. The second argument is a
                   71939: ** mask containing EXPRDUP_XXX flags.
                   71940: **
                   71941: ** The value returned includes space to create a copy of the Expr struct
                   71942: ** itself and the buffer referred to by Expr.u.zToken, if any.
                   71943: **
                   71944: ** If the EXPRDUP_REDUCE flag is set, then the return value includes 
                   71945: ** space to duplicate all Expr nodes in the tree formed by Expr.pLeft 
                   71946: ** and Expr.pRight variables (but not for any structures pointed to or 
                   71947: ** descended from the Expr.x.pList or Expr.x.pSelect variables).
                   71948: */
                   71949: static int dupedExprSize(Expr *p, int flags){
                   71950:   int nByte = 0;
                   71951:   if( p ){
                   71952:     nByte = dupedExprNodeSize(p, flags);
                   71953:     if( flags&EXPRDUP_REDUCE ){
                   71954:       nByte += dupedExprSize(p->pLeft, flags) + dupedExprSize(p->pRight, flags);
                   71955:     }
                   71956:   }
                   71957:   return nByte;
                   71958: }
                   71959: 
                   71960: /*
                   71961: ** This function is similar to sqlite3ExprDup(), except that if pzBuffer 
                   71962: ** is not NULL then *pzBuffer is assumed to point to a buffer large enough 
                   71963: ** to store the copy of expression p, the copies of p->u.zToken
                   71964: ** (if applicable), and the copies of the p->pLeft and p->pRight expressions,
                   71965: ** if any. Before returning, *pzBuffer is set to the first byte passed the
                   71966: ** portion of the buffer copied into by this function.
                   71967: */
                   71968: static Expr *exprDup(sqlite3 *db, Expr *p, int flags, u8 **pzBuffer){
                   71969:   Expr *pNew = 0;                      /* Value to return */
                   71970:   if( p ){
                   71971:     const int isReduced = (flags&EXPRDUP_REDUCE);
                   71972:     u8 *zAlloc;
                   71973:     u32 staticFlag = 0;
                   71974: 
                   71975:     assert( pzBuffer==0 || isReduced );
                   71976: 
                   71977:     /* Figure out where to write the new Expr structure. */
                   71978:     if( pzBuffer ){
                   71979:       zAlloc = *pzBuffer;
                   71980:       staticFlag = EP_Static;
                   71981:     }else{
                   71982:       zAlloc = sqlite3DbMallocRaw(db, dupedExprSize(p, flags));
                   71983:     }
                   71984:     pNew = (Expr *)zAlloc;
                   71985: 
                   71986:     if( pNew ){
                   71987:       /* Set nNewSize to the size allocated for the structure pointed to
                   71988:       ** by pNew. This is either EXPR_FULLSIZE, EXPR_REDUCEDSIZE or
                   71989:       ** EXPR_TOKENONLYSIZE. nToken is set to the number of bytes consumed
                   71990:       ** by the copy of the p->u.zToken string (if any).
                   71991:       */
                   71992:       const unsigned nStructSize = dupedExprStructSize(p, flags);
                   71993:       const int nNewSize = nStructSize & 0xfff;
                   71994:       int nToken;
                   71995:       if( !ExprHasProperty(p, EP_IntValue) && p->u.zToken ){
                   71996:         nToken = sqlite3Strlen30(p->u.zToken) + 1;
                   71997:       }else{
                   71998:         nToken = 0;
                   71999:       }
                   72000:       if( isReduced ){
                   72001:         assert( ExprHasProperty(p, EP_Reduced)==0 );
                   72002:         memcpy(zAlloc, p, nNewSize);
                   72003:       }else{
                   72004:         int nSize = exprStructSize(p);
                   72005:         memcpy(zAlloc, p, nSize);
                   72006:         memset(&zAlloc[nSize], 0, EXPR_FULLSIZE-nSize);
                   72007:       }
                   72008: 
                   72009:       /* Set the EP_Reduced, EP_TokenOnly, and EP_Static flags appropriately. */
                   72010:       pNew->flags &= ~(EP_Reduced|EP_TokenOnly|EP_Static);
                   72011:       pNew->flags |= nStructSize & (EP_Reduced|EP_TokenOnly);
                   72012:       pNew->flags |= staticFlag;
                   72013: 
                   72014:       /* Copy the p->u.zToken string, if any. */
                   72015:       if( nToken ){
                   72016:         char *zToken = pNew->u.zToken = (char*)&zAlloc[nNewSize];
                   72017:         memcpy(zToken, p->u.zToken, nToken);
                   72018:       }
                   72019: 
                   72020:       if( 0==((p->flags|pNew->flags) & EP_TokenOnly) ){
                   72021:         /* Fill in the pNew->x.pSelect or pNew->x.pList member. */
                   72022:         if( ExprHasProperty(p, EP_xIsSelect) ){
                   72023:           pNew->x.pSelect = sqlite3SelectDup(db, p->x.pSelect, isReduced);
                   72024:         }else{
                   72025:           pNew->x.pList = sqlite3ExprListDup(db, p->x.pList, isReduced);
                   72026:         }
                   72027:       }
                   72028: 
                   72029:       /* Fill in pNew->pLeft and pNew->pRight. */
                   72030:       if( ExprHasAnyProperty(pNew, EP_Reduced|EP_TokenOnly) ){
                   72031:         zAlloc += dupedExprNodeSize(p, flags);
                   72032:         if( ExprHasProperty(pNew, EP_Reduced) ){
                   72033:           pNew->pLeft = exprDup(db, p->pLeft, EXPRDUP_REDUCE, &zAlloc);
                   72034:           pNew->pRight = exprDup(db, p->pRight, EXPRDUP_REDUCE, &zAlloc);
                   72035:         }
                   72036:         if( pzBuffer ){
                   72037:           *pzBuffer = zAlloc;
                   72038:         }
                   72039:       }else{
                   72040:         pNew->flags2 = 0;
                   72041:         if( !ExprHasAnyProperty(p, EP_TokenOnly) ){
                   72042:           pNew->pLeft = sqlite3ExprDup(db, p->pLeft, 0);
                   72043:           pNew->pRight = sqlite3ExprDup(db, p->pRight, 0);
                   72044:         }
                   72045:       }
                   72046: 
                   72047:     }
                   72048:   }
                   72049:   return pNew;
                   72050: }
                   72051: 
                   72052: /*
                   72053: ** The following group of routines make deep copies of expressions,
                   72054: ** expression lists, ID lists, and select statements.  The copies can
                   72055: ** be deleted (by being passed to their respective ...Delete() routines)
                   72056: ** without effecting the originals.
                   72057: **
                   72058: ** The expression list, ID, and source lists return by sqlite3ExprListDup(),
                   72059: ** sqlite3IdListDup(), and sqlite3SrcListDup() can not be further expanded 
                   72060: ** by subsequent calls to sqlite*ListAppend() routines.
                   72061: **
                   72062: ** Any tables that the SrcList might point to are not duplicated.
                   72063: **
                   72064: ** The flags parameter contains a combination of the EXPRDUP_XXX flags.
                   72065: ** If the EXPRDUP_REDUCE flag is set, then the structure returned is a
                   72066: ** truncated version of the usual Expr structure that will be stored as
                   72067: ** part of the in-memory representation of the database schema.
                   72068: */
                   72069: SQLITE_PRIVATE Expr *sqlite3ExprDup(sqlite3 *db, Expr *p, int flags){
                   72070:   return exprDup(db, p, flags, 0);
                   72071: }
                   72072: SQLITE_PRIVATE ExprList *sqlite3ExprListDup(sqlite3 *db, ExprList *p, int flags){
                   72073:   ExprList *pNew;
                   72074:   struct ExprList_item *pItem, *pOldItem;
                   72075:   int i;
                   72076:   if( p==0 ) return 0;
                   72077:   pNew = sqlite3DbMallocRaw(db, sizeof(*pNew) );
                   72078:   if( pNew==0 ) return 0;
                   72079:   pNew->iECursor = 0;
                   72080:   pNew->nExpr = pNew->nAlloc = p->nExpr;
                   72081:   pNew->a = pItem = sqlite3DbMallocRaw(db,  p->nExpr*sizeof(p->a[0]) );
                   72082:   if( pItem==0 ){
                   72083:     sqlite3DbFree(db, pNew);
                   72084:     return 0;
                   72085:   } 
                   72086:   pOldItem = p->a;
                   72087:   for(i=0; i<p->nExpr; i++, pItem++, pOldItem++){
                   72088:     Expr *pOldExpr = pOldItem->pExpr;
                   72089:     pItem->pExpr = sqlite3ExprDup(db, pOldExpr, flags);
                   72090:     pItem->zName = sqlite3DbStrDup(db, pOldItem->zName);
                   72091:     pItem->zSpan = sqlite3DbStrDup(db, pOldItem->zSpan);
                   72092:     pItem->sortOrder = pOldItem->sortOrder;
                   72093:     pItem->done = 0;
                   72094:     pItem->iCol = pOldItem->iCol;
                   72095:     pItem->iAlias = pOldItem->iAlias;
                   72096:   }
                   72097:   return pNew;
                   72098: }
                   72099: 
                   72100: /*
                   72101: ** If cursors, triggers, views and subqueries are all omitted from
                   72102: ** the build, then none of the following routines, except for 
                   72103: ** sqlite3SelectDup(), can be called. sqlite3SelectDup() is sometimes
                   72104: ** called with a NULL argument.
                   72105: */
                   72106: #if !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_TRIGGER) \
                   72107:  || !defined(SQLITE_OMIT_SUBQUERY)
                   72108: SQLITE_PRIVATE SrcList *sqlite3SrcListDup(sqlite3 *db, SrcList *p, int flags){
                   72109:   SrcList *pNew;
                   72110:   int i;
                   72111:   int nByte;
                   72112:   if( p==0 ) return 0;
                   72113:   nByte = sizeof(*p) + (p->nSrc>0 ? sizeof(p->a[0]) * (p->nSrc-1) : 0);
                   72114:   pNew = sqlite3DbMallocRaw(db, nByte );
                   72115:   if( pNew==0 ) return 0;
                   72116:   pNew->nSrc = pNew->nAlloc = p->nSrc;
                   72117:   for(i=0; i<p->nSrc; i++){
                   72118:     struct SrcList_item *pNewItem = &pNew->a[i];
                   72119:     struct SrcList_item *pOldItem = &p->a[i];
                   72120:     Table *pTab;
                   72121:     pNewItem->zDatabase = sqlite3DbStrDup(db, pOldItem->zDatabase);
                   72122:     pNewItem->zName = sqlite3DbStrDup(db, pOldItem->zName);
                   72123:     pNewItem->zAlias = sqlite3DbStrDup(db, pOldItem->zAlias);
                   72124:     pNewItem->jointype = pOldItem->jointype;
                   72125:     pNewItem->iCursor = pOldItem->iCursor;
                   72126:     pNewItem->isPopulated = pOldItem->isPopulated;
                   72127:     pNewItem->zIndex = sqlite3DbStrDup(db, pOldItem->zIndex);
                   72128:     pNewItem->notIndexed = pOldItem->notIndexed;
                   72129:     pNewItem->pIndex = pOldItem->pIndex;
                   72130:     pTab = pNewItem->pTab = pOldItem->pTab;
                   72131:     if( pTab ){
                   72132:       pTab->nRef++;
                   72133:     }
                   72134:     pNewItem->pSelect = sqlite3SelectDup(db, pOldItem->pSelect, flags);
                   72135:     pNewItem->pOn = sqlite3ExprDup(db, pOldItem->pOn, flags);
                   72136:     pNewItem->pUsing = sqlite3IdListDup(db, pOldItem->pUsing);
                   72137:     pNewItem->colUsed = pOldItem->colUsed;
                   72138:   }
                   72139:   return pNew;
                   72140: }
                   72141: SQLITE_PRIVATE IdList *sqlite3IdListDup(sqlite3 *db, IdList *p){
                   72142:   IdList *pNew;
                   72143:   int i;
                   72144:   if( p==0 ) return 0;
                   72145:   pNew = sqlite3DbMallocRaw(db, sizeof(*pNew) );
                   72146:   if( pNew==0 ) return 0;
                   72147:   pNew->nId = pNew->nAlloc = p->nId;
                   72148:   pNew->a = sqlite3DbMallocRaw(db, p->nId*sizeof(p->a[0]) );
                   72149:   if( pNew->a==0 ){
                   72150:     sqlite3DbFree(db, pNew);
                   72151:     return 0;
                   72152:   }
                   72153:   for(i=0; i<p->nId; i++){
                   72154:     struct IdList_item *pNewItem = &pNew->a[i];
                   72155:     struct IdList_item *pOldItem = &p->a[i];
                   72156:     pNewItem->zName = sqlite3DbStrDup(db, pOldItem->zName);
                   72157:     pNewItem->idx = pOldItem->idx;
                   72158:   }
                   72159:   return pNew;
                   72160: }
                   72161: SQLITE_PRIVATE Select *sqlite3SelectDup(sqlite3 *db, Select *p, int flags){
                   72162:   Select *pNew;
                   72163:   if( p==0 ) return 0;
                   72164:   pNew = sqlite3DbMallocRaw(db, sizeof(*p) );
                   72165:   if( pNew==0 ) return 0;
                   72166:   pNew->pEList = sqlite3ExprListDup(db, p->pEList, flags);
                   72167:   pNew->pSrc = sqlite3SrcListDup(db, p->pSrc, flags);
                   72168:   pNew->pWhere = sqlite3ExprDup(db, p->pWhere, flags);
                   72169:   pNew->pGroupBy = sqlite3ExprListDup(db, p->pGroupBy, flags);
                   72170:   pNew->pHaving = sqlite3ExprDup(db, p->pHaving, flags);
                   72171:   pNew->pOrderBy = sqlite3ExprListDup(db, p->pOrderBy, flags);
                   72172:   pNew->op = p->op;
                   72173:   pNew->pPrior = sqlite3SelectDup(db, p->pPrior, flags);
                   72174:   pNew->pLimit = sqlite3ExprDup(db, p->pLimit, flags);
                   72175:   pNew->pOffset = sqlite3ExprDup(db, p->pOffset, flags);
                   72176:   pNew->iLimit = 0;
                   72177:   pNew->iOffset = 0;
                   72178:   pNew->selFlags = p->selFlags & ~SF_UsesEphemeral;
                   72179:   pNew->pRightmost = 0;
                   72180:   pNew->addrOpenEphm[0] = -1;
                   72181:   pNew->addrOpenEphm[1] = -1;
                   72182:   pNew->addrOpenEphm[2] = -1;
                   72183:   return pNew;
                   72184: }
                   72185: #else
                   72186: SQLITE_PRIVATE Select *sqlite3SelectDup(sqlite3 *db, Select *p, int flags){
                   72187:   assert( p==0 );
                   72188:   return 0;
                   72189: }
                   72190: #endif
                   72191: 
                   72192: 
                   72193: /*
                   72194: ** Add a new element to the end of an expression list.  If pList is
                   72195: ** initially NULL, then create a new expression list.
                   72196: **
                   72197: ** If a memory allocation error occurs, the entire list is freed and
                   72198: ** NULL is returned.  If non-NULL is returned, then it is guaranteed
                   72199: ** that the new entry was successfully appended.
                   72200: */
                   72201: SQLITE_PRIVATE ExprList *sqlite3ExprListAppend(
                   72202:   Parse *pParse,          /* Parsing context */
                   72203:   ExprList *pList,        /* List to which to append. Might be NULL */
                   72204:   Expr *pExpr             /* Expression to be appended. Might be NULL */
                   72205: ){
                   72206:   sqlite3 *db = pParse->db;
                   72207:   if( pList==0 ){
                   72208:     pList = sqlite3DbMallocZero(db, sizeof(ExprList) );
                   72209:     if( pList==0 ){
                   72210:       goto no_mem;
                   72211:     }
                   72212:     assert( pList->nAlloc==0 );
                   72213:   }
                   72214:   if( pList->nAlloc<=pList->nExpr ){
                   72215:     struct ExprList_item *a;
                   72216:     int n = pList->nAlloc*2 + 4;
                   72217:     a = sqlite3DbRealloc(db, pList->a, n*sizeof(pList->a[0]));
                   72218:     if( a==0 ){
                   72219:       goto no_mem;
                   72220:     }
                   72221:     pList->a = a;
                   72222:     pList->nAlloc = sqlite3DbMallocSize(db, a)/sizeof(a[0]);
                   72223:   }
                   72224:   assert( pList->a!=0 );
                   72225:   if( 1 ){
                   72226:     struct ExprList_item *pItem = &pList->a[pList->nExpr++];
                   72227:     memset(pItem, 0, sizeof(*pItem));
                   72228:     pItem->pExpr = pExpr;
                   72229:   }
                   72230:   return pList;
                   72231: 
                   72232: no_mem:     
                   72233:   /* Avoid leaking memory if malloc has failed. */
                   72234:   sqlite3ExprDelete(db, pExpr);
                   72235:   sqlite3ExprListDelete(db, pList);
                   72236:   return 0;
                   72237: }
                   72238: 
                   72239: /*
                   72240: ** Set the ExprList.a[].zName element of the most recently added item
                   72241: ** on the expression list.
                   72242: **
                   72243: ** pList might be NULL following an OOM error.  But pName should never be
                   72244: ** NULL.  If a memory allocation fails, the pParse->db->mallocFailed flag
                   72245: ** is set.
                   72246: */
                   72247: SQLITE_PRIVATE void sqlite3ExprListSetName(
                   72248:   Parse *pParse,          /* Parsing context */
                   72249:   ExprList *pList,        /* List to which to add the span. */
                   72250:   Token *pName,           /* Name to be added */
                   72251:   int dequote             /* True to cause the name to be dequoted */
                   72252: ){
                   72253:   assert( pList!=0 || pParse->db->mallocFailed!=0 );
                   72254:   if( pList ){
                   72255:     struct ExprList_item *pItem;
                   72256:     assert( pList->nExpr>0 );
                   72257:     pItem = &pList->a[pList->nExpr-1];
                   72258:     assert( pItem->zName==0 );
                   72259:     pItem->zName = sqlite3DbStrNDup(pParse->db, pName->z, pName->n);
                   72260:     if( dequote && pItem->zName ) sqlite3Dequote(pItem->zName);
                   72261:   }
                   72262: }
                   72263: 
                   72264: /*
                   72265: ** Set the ExprList.a[].zSpan element of the most recently added item
                   72266: ** on the expression list.
                   72267: **
                   72268: ** pList might be NULL following an OOM error.  But pSpan should never be
                   72269: ** NULL.  If a memory allocation fails, the pParse->db->mallocFailed flag
                   72270: ** is set.
                   72271: */
                   72272: SQLITE_PRIVATE void sqlite3ExprListSetSpan(
                   72273:   Parse *pParse,          /* Parsing context */
                   72274:   ExprList *pList,        /* List to which to add the span. */
                   72275:   ExprSpan *pSpan         /* The span to be added */
                   72276: ){
                   72277:   sqlite3 *db = pParse->db;
                   72278:   assert( pList!=0 || db->mallocFailed!=0 );
                   72279:   if( pList ){
                   72280:     struct ExprList_item *pItem = &pList->a[pList->nExpr-1];
                   72281:     assert( pList->nExpr>0 );
                   72282:     assert( db->mallocFailed || pItem->pExpr==pSpan->pExpr );
                   72283:     sqlite3DbFree(db, pItem->zSpan);
                   72284:     pItem->zSpan = sqlite3DbStrNDup(db, (char*)pSpan->zStart,
                   72285:                                     (int)(pSpan->zEnd - pSpan->zStart));
                   72286:   }
                   72287: }
                   72288: 
                   72289: /*
                   72290: ** If the expression list pEList contains more than iLimit elements,
                   72291: ** leave an error message in pParse.
                   72292: */
                   72293: SQLITE_PRIVATE void sqlite3ExprListCheckLength(
                   72294:   Parse *pParse,
                   72295:   ExprList *pEList,
                   72296:   const char *zObject
                   72297: ){
                   72298:   int mx = pParse->db->aLimit[SQLITE_LIMIT_COLUMN];
                   72299:   testcase( pEList && pEList->nExpr==mx );
                   72300:   testcase( pEList && pEList->nExpr==mx+1 );
                   72301:   if( pEList && pEList->nExpr>mx ){
                   72302:     sqlite3ErrorMsg(pParse, "too many columns in %s", zObject);
                   72303:   }
                   72304: }
                   72305: 
                   72306: /*
                   72307: ** Delete an entire expression list.
                   72308: */
                   72309: SQLITE_PRIVATE void sqlite3ExprListDelete(sqlite3 *db, ExprList *pList){
                   72310:   int i;
                   72311:   struct ExprList_item *pItem;
                   72312:   if( pList==0 ) return;
                   72313:   assert( pList->a!=0 || (pList->nExpr==0 && pList->nAlloc==0) );
                   72314:   assert( pList->nExpr<=pList->nAlloc );
                   72315:   for(pItem=pList->a, i=0; i<pList->nExpr; i++, pItem++){
                   72316:     sqlite3ExprDelete(db, pItem->pExpr);
                   72317:     sqlite3DbFree(db, pItem->zName);
                   72318:     sqlite3DbFree(db, pItem->zSpan);
                   72319:   }
                   72320:   sqlite3DbFree(db, pList->a);
                   72321:   sqlite3DbFree(db, pList);
                   72322: }
                   72323: 
                   72324: /*
                   72325: ** These routines are Walker callbacks.  Walker.u.pi is a pointer
                   72326: ** to an integer.  These routines are checking an expression to see
                   72327: ** if it is a constant.  Set *Walker.u.pi to 0 if the expression is
                   72328: ** not constant.
                   72329: **
                   72330: ** These callback routines are used to implement the following:
                   72331: **
                   72332: **     sqlite3ExprIsConstant()
                   72333: **     sqlite3ExprIsConstantNotJoin()
                   72334: **     sqlite3ExprIsConstantOrFunction()
                   72335: **
                   72336: */
                   72337: static int exprNodeIsConstant(Walker *pWalker, Expr *pExpr){
                   72338: 
                   72339:   /* If pWalker->u.i is 3 then any term of the expression that comes from
                   72340:   ** the ON or USING clauses of a join disqualifies the expression
                   72341:   ** from being considered constant. */
                   72342:   if( pWalker->u.i==3 && ExprHasAnyProperty(pExpr, EP_FromJoin) ){
                   72343:     pWalker->u.i = 0;
                   72344:     return WRC_Abort;
                   72345:   }
                   72346: 
                   72347:   switch( pExpr->op ){
                   72348:     /* Consider functions to be constant if all their arguments are constant
                   72349:     ** and pWalker->u.i==2 */
                   72350:     case TK_FUNCTION:
                   72351:       if( pWalker->u.i==2 ) return 0;
                   72352:       /* Fall through */
                   72353:     case TK_ID:
                   72354:     case TK_COLUMN:
                   72355:     case TK_AGG_FUNCTION:
                   72356:     case TK_AGG_COLUMN:
                   72357:       testcase( pExpr->op==TK_ID );
                   72358:       testcase( pExpr->op==TK_COLUMN );
                   72359:       testcase( pExpr->op==TK_AGG_FUNCTION );
                   72360:       testcase( pExpr->op==TK_AGG_COLUMN );
                   72361:       pWalker->u.i = 0;
                   72362:       return WRC_Abort;
                   72363:     default:
                   72364:       testcase( pExpr->op==TK_SELECT ); /* selectNodeIsConstant will disallow */
                   72365:       testcase( pExpr->op==TK_EXISTS ); /* selectNodeIsConstant will disallow */
                   72366:       return WRC_Continue;
                   72367:   }
                   72368: }
                   72369: static int selectNodeIsConstant(Walker *pWalker, Select *NotUsed){
                   72370:   UNUSED_PARAMETER(NotUsed);
                   72371:   pWalker->u.i = 0;
                   72372:   return WRC_Abort;
                   72373: }
                   72374: static int exprIsConst(Expr *p, int initFlag){
                   72375:   Walker w;
                   72376:   w.u.i = initFlag;
                   72377:   w.xExprCallback = exprNodeIsConstant;
                   72378:   w.xSelectCallback = selectNodeIsConstant;
                   72379:   sqlite3WalkExpr(&w, p);
                   72380:   return w.u.i;
                   72381: }
                   72382: 
                   72383: /*
                   72384: ** Walk an expression tree.  Return 1 if the expression is constant
                   72385: ** and 0 if it involves variables or function calls.
                   72386: **
                   72387: ** For the purposes of this function, a double-quoted string (ex: "abc")
                   72388: ** is considered a variable but a single-quoted string (ex: 'abc') is
                   72389: ** a constant.
                   72390: */
                   72391: SQLITE_PRIVATE int sqlite3ExprIsConstant(Expr *p){
                   72392:   return exprIsConst(p, 1);
                   72393: }
                   72394: 
                   72395: /*
                   72396: ** Walk an expression tree.  Return 1 if the expression is constant
                   72397: ** that does no originate from the ON or USING clauses of a join.
                   72398: ** Return 0 if it involves variables or function calls or terms from
                   72399: ** an ON or USING clause.
                   72400: */
                   72401: SQLITE_PRIVATE int sqlite3ExprIsConstantNotJoin(Expr *p){
                   72402:   return exprIsConst(p, 3);
                   72403: }
                   72404: 
                   72405: /*
                   72406: ** Walk an expression tree.  Return 1 if the expression is constant
                   72407: ** or a function call with constant arguments.  Return and 0 if there
                   72408: ** are any variables.
                   72409: **
                   72410: ** For the purposes of this function, a double-quoted string (ex: "abc")
                   72411: ** is considered a variable but a single-quoted string (ex: 'abc') is
                   72412: ** a constant.
                   72413: */
                   72414: SQLITE_PRIVATE int sqlite3ExprIsConstantOrFunction(Expr *p){
                   72415:   return exprIsConst(p, 2);
                   72416: }
                   72417: 
                   72418: /*
                   72419: ** If the expression p codes a constant integer that is small enough
                   72420: ** to fit in a 32-bit integer, return 1 and put the value of the integer
                   72421: ** in *pValue.  If the expression is not an integer or if it is too big
                   72422: ** to fit in a signed 32-bit integer, return 0 and leave *pValue unchanged.
                   72423: */
                   72424: SQLITE_PRIVATE int sqlite3ExprIsInteger(Expr *p, int *pValue){
                   72425:   int rc = 0;
                   72426: 
                   72427:   /* If an expression is an integer literal that fits in a signed 32-bit
                   72428:   ** integer, then the EP_IntValue flag will have already been set */
                   72429:   assert( p->op!=TK_INTEGER || (p->flags & EP_IntValue)!=0
                   72430:            || sqlite3GetInt32(p->u.zToken, &rc)==0 );
                   72431: 
                   72432:   if( p->flags & EP_IntValue ){
                   72433:     *pValue = p->u.iValue;
                   72434:     return 1;
                   72435:   }
                   72436:   switch( p->op ){
                   72437:     case TK_UPLUS: {
                   72438:       rc = sqlite3ExprIsInteger(p->pLeft, pValue);
                   72439:       break;
                   72440:     }
                   72441:     case TK_UMINUS: {
                   72442:       int v;
                   72443:       if( sqlite3ExprIsInteger(p->pLeft, &v) ){
                   72444:         *pValue = -v;
                   72445:         rc = 1;
                   72446:       }
                   72447:       break;
                   72448:     }
                   72449:     default: break;
                   72450:   }
                   72451:   return rc;
                   72452: }
                   72453: 
                   72454: /*
                   72455: ** Return FALSE if there is no chance that the expression can be NULL.
                   72456: **
                   72457: ** If the expression might be NULL or if the expression is too complex
                   72458: ** to tell return TRUE.  
                   72459: **
                   72460: ** This routine is used as an optimization, to skip OP_IsNull opcodes
                   72461: ** when we know that a value cannot be NULL.  Hence, a false positive
                   72462: ** (returning TRUE when in fact the expression can never be NULL) might
                   72463: ** be a small performance hit but is otherwise harmless.  On the other
                   72464: ** hand, a false negative (returning FALSE when the result could be NULL)
                   72465: ** will likely result in an incorrect answer.  So when in doubt, return
                   72466: ** TRUE.
                   72467: */
                   72468: SQLITE_PRIVATE int sqlite3ExprCanBeNull(const Expr *p){
                   72469:   u8 op;
                   72470:   while( p->op==TK_UPLUS || p->op==TK_UMINUS ){ p = p->pLeft; }
                   72471:   op = p->op;
                   72472:   if( op==TK_REGISTER ) op = p->op2;
                   72473:   switch( op ){
                   72474:     case TK_INTEGER:
                   72475:     case TK_STRING:
                   72476:     case TK_FLOAT:
                   72477:     case TK_BLOB:
                   72478:       return 0;
                   72479:     default:
                   72480:       return 1;
                   72481:   }
                   72482: }
                   72483: 
                   72484: /*
                   72485: ** Generate an OP_IsNull instruction that tests register iReg and jumps
                   72486: ** to location iDest if the value in iReg is NULL.  The value in iReg 
                   72487: ** was computed by pExpr.  If we can look at pExpr at compile-time and
                   72488: ** determine that it can never generate a NULL, then the OP_IsNull operation
                   72489: ** can be omitted.
                   72490: */
                   72491: SQLITE_PRIVATE void sqlite3ExprCodeIsNullJump(
                   72492:   Vdbe *v,            /* The VDBE under construction */
                   72493:   const Expr *pExpr,  /* Only generate OP_IsNull if this expr can be NULL */
                   72494:   int iReg,           /* Test the value in this register for NULL */
                   72495:   int iDest           /* Jump here if the value is null */
                   72496: ){
                   72497:   if( sqlite3ExprCanBeNull(pExpr) ){
                   72498:     sqlite3VdbeAddOp2(v, OP_IsNull, iReg, iDest);
                   72499:   }
                   72500: }
                   72501: 
                   72502: /*
                   72503: ** Return TRUE if the given expression is a constant which would be
                   72504: ** unchanged by OP_Affinity with the affinity given in the second
                   72505: ** argument.
                   72506: **
                   72507: ** This routine is used to determine if the OP_Affinity operation
                   72508: ** can be omitted.  When in doubt return FALSE.  A false negative
                   72509: ** is harmless.  A false positive, however, can result in the wrong
                   72510: ** answer.
                   72511: */
                   72512: SQLITE_PRIVATE int sqlite3ExprNeedsNoAffinityChange(const Expr *p, char aff){
                   72513:   u8 op;
                   72514:   if( aff==SQLITE_AFF_NONE ) return 1;
                   72515:   while( p->op==TK_UPLUS || p->op==TK_UMINUS ){ p = p->pLeft; }
                   72516:   op = p->op;
                   72517:   if( op==TK_REGISTER ) op = p->op2;
                   72518:   switch( op ){
                   72519:     case TK_INTEGER: {
                   72520:       return aff==SQLITE_AFF_INTEGER || aff==SQLITE_AFF_NUMERIC;
                   72521:     }
                   72522:     case TK_FLOAT: {
                   72523:       return aff==SQLITE_AFF_REAL || aff==SQLITE_AFF_NUMERIC;
                   72524:     }
                   72525:     case TK_STRING: {
                   72526:       return aff==SQLITE_AFF_TEXT;
                   72527:     }
                   72528:     case TK_BLOB: {
                   72529:       return 1;
                   72530:     }
                   72531:     case TK_COLUMN: {
                   72532:       assert( p->iTable>=0 );  /* p cannot be part of a CHECK constraint */
                   72533:       return p->iColumn<0
                   72534:           && (aff==SQLITE_AFF_INTEGER || aff==SQLITE_AFF_NUMERIC);
                   72535:     }
                   72536:     default: {
                   72537:       return 0;
                   72538:     }
                   72539:   }
                   72540: }
                   72541: 
                   72542: /*
                   72543: ** Return TRUE if the given string is a row-id column name.
                   72544: */
                   72545: SQLITE_PRIVATE int sqlite3IsRowid(const char *z){
                   72546:   if( sqlite3StrICmp(z, "_ROWID_")==0 ) return 1;
                   72547:   if( sqlite3StrICmp(z, "ROWID")==0 ) return 1;
                   72548:   if( sqlite3StrICmp(z, "OID")==0 ) return 1;
                   72549:   return 0;
                   72550: }
                   72551: 
                   72552: /*
                   72553: ** Return true if we are able to the IN operator optimization on a
                   72554: ** query of the form
                   72555: **
                   72556: **       x IN (SELECT ...)
                   72557: **
                   72558: ** Where the SELECT... clause is as specified by the parameter to this
                   72559: ** routine.
                   72560: **
                   72561: ** The Select object passed in has already been preprocessed and no
                   72562: ** errors have been found.
                   72563: */
                   72564: #ifndef SQLITE_OMIT_SUBQUERY
                   72565: static int isCandidateForInOpt(Select *p){
                   72566:   SrcList *pSrc;
                   72567:   ExprList *pEList;
                   72568:   Table *pTab;
                   72569:   if( p==0 ) return 0;                   /* right-hand side of IN is SELECT */
                   72570:   if( p->pPrior ) return 0;              /* Not a compound SELECT */
                   72571:   if( p->selFlags & (SF_Distinct|SF_Aggregate) ){
                   72572:     testcase( (p->selFlags & (SF_Distinct|SF_Aggregate))==SF_Distinct );
                   72573:     testcase( (p->selFlags & (SF_Distinct|SF_Aggregate))==SF_Aggregate );
                   72574:     return 0; /* No DISTINCT keyword and no aggregate functions */
                   72575:   }
                   72576:   assert( p->pGroupBy==0 );              /* Has no GROUP BY clause */
                   72577:   if( p->pLimit ) return 0;              /* Has no LIMIT clause */
                   72578:   assert( p->pOffset==0 );               /* No LIMIT means no OFFSET */
                   72579:   if( p->pWhere ) return 0;              /* Has no WHERE clause */
                   72580:   pSrc = p->pSrc;
                   72581:   assert( pSrc!=0 );
                   72582:   if( pSrc->nSrc!=1 ) return 0;          /* Single term in FROM clause */
                   72583:   if( pSrc->a[0].pSelect ) return 0;     /* FROM is not a subquery or view */
                   72584:   pTab = pSrc->a[0].pTab;
                   72585:   if( NEVER(pTab==0) ) return 0;
                   72586:   assert( pTab->pSelect==0 );            /* FROM clause is not a view */
                   72587:   if( IsVirtual(pTab) ) return 0;        /* FROM clause not a virtual table */
                   72588:   pEList = p->pEList;
                   72589:   if( pEList->nExpr!=1 ) return 0;       /* One column in the result set */
                   72590:   if( pEList->a[0].pExpr->op!=TK_COLUMN ) return 0; /* Result is a column */
                   72591:   return 1;
                   72592: }
                   72593: #endif /* SQLITE_OMIT_SUBQUERY */
                   72594: 
                   72595: /*
                   72596: ** This function is used by the implementation of the IN (...) operator.
                   72597: ** It's job is to find or create a b-tree structure that may be used
                   72598: ** either to test for membership of the (...) set or to iterate through
                   72599: ** its members, skipping duplicates.
                   72600: **
                   72601: ** The index of the cursor opened on the b-tree (database table, database index 
                   72602: ** or ephermal table) is stored in pX->iTable before this function returns.
                   72603: ** The returned value of this function indicates the b-tree type, as follows:
                   72604: **
                   72605: **   IN_INDEX_ROWID - The cursor was opened on a database table.
                   72606: **   IN_INDEX_INDEX - The cursor was opened on a database index.
                   72607: **   IN_INDEX_EPH -   The cursor was opened on a specially created and
                   72608: **                    populated epheremal table.
                   72609: **
                   72610: ** An existing b-tree may only be used if the SELECT is of the simple
                   72611: ** form:
                   72612: **
                   72613: **     SELECT <column> FROM <table>
                   72614: **
                   72615: ** If the prNotFound parameter is 0, then the b-tree will be used to iterate
                   72616: ** through the set members, skipping any duplicates. In this case an
                   72617: ** epheremal table must be used unless the selected <column> is guaranteed
                   72618: ** to be unique - either because it is an INTEGER PRIMARY KEY or it
                   72619: ** has a UNIQUE constraint or UNIQUE index.
                   72620: **
                   72621: ** If the prNotFound parameter is not 0, then the b-tree will be used 
                   72622: ** for fast set membership tests. In this case an epheremal table must 
                   72623: ** be used unless <column> is an INTEGER PRIMARY KEY or an index can 
                   72624: ** be found with <column> as its left-most column.
                   72625: **
                   72626: ** When the b-tree is being used for membership tests, the calling function
                   72627: ** needs to know whether or not the structure contains an SQL NULL 
                   72628: ** value in order to correctly evaluate expressions like "X IN (Y, Z)".
                   72629: ** If there is any chance that the (...) might contain a NULL value at
                   72630: ** runtime, then a register is allocated and the register number written
                   72631: ** to *prNotFound. If there is no chance that the (...) contains a
                   72632: ** NULL value, then *prNotFound is left unchanged.
                   72633: **
                   72634: ** If a register is allocated and its location stored in *prNotFound, then
                   72635: ** its initial value is NULL.  If the (...) does not remain constant
                   72636: ** for the duration of the query (i.e. the SELECT within the (...)
                   72637: ** is a correlated subquery) then the value of the allocated register is
                   72638: ** reset to NULL each time the subquery is rerun. This allows the
                   72639: ** caller to use vdbe code equivalent to the following:
                   72640: **
                   72641: **   if( register==NULL ){
                   72642: **     has_null = <test if data structure contains null>
                   72643: **     register = 1
                   72644: **   }
                   72645: **
                   72646: ** in order to avoid running the <test if data structure contains null>
                   72647: ** test more often than is necessary.
                   72648: */
                   72649: #ifndef SQLITE_OMIT_SUBQUERY
                   72650: SQLITE_PRIVATE int sqlite3FindInIndex(Parse *pParse, Expr *pX, int *prNotFound){
                   72651:   Select *p;                            /* SELECT to the right of IN operator */
                   72652:   int eType = 0;                        /* Type of RHS table. IN_INDEX_* */
                   72653:   int iTab = pParse->nTab++;            /* Cursor of the RHS table */
                   72654:   int mustBeUnique = (prNotFound==0);   /* True if RHS must be unique */
                   72655: 
                   72656:   assert( pX->op==TK_IN );
                   72657: 
                   72658:   /* Check to see if an existing table or index can be used to
                   72659:   ** satisfy the query.  This is preferable to generating a new 
                   72660:   ** ephemeral table.
                   72661:   */
                   72662:   p = (ExprHasProperty(pX, EP_xIsSelect) ? pX->x.pSelect : 0);
                   72663:   if( ALWAYS(pParse->nErr==0) && isCandidateForInOpt(p) ){
                   72664:     sqlite3 *db = pParse->db;              /* Database connection */
                   72665:     Expr *pExpr = p->pEList->a[0].pExpr;   /* Expression <column> */
                   72666:     int iCol = pExpr->iColumn;             /* Index of column <column> */
                   72667:     Vdbe *v = sqlite3GetVdbe(pParse);      /* Virtual machine being coded */
                   72668:     Table *pTab = p->pSrc->a[0].pTab;      /* Table <table>. */
                   72669:     int iDb;                               /* Database idx for pTab */
                   72670:    
                   72671:     /* Code an OP_VerifyCookie and OP_TableLock for <table>. */
                   72672:     iDb = sqlite3SchemaToIndex(db, pTab->pSchema);
                   72673:     sqlite3CodeVerifySchema(pParse, iDb);
                   72674:     sqlite3TableLock(pParse, iDb, pTab->tnum, 0, pTab->zName);
                   72675: 
                   72676:     /* This function is only called from two places. In both cases the vdbe
                   72677:     ** has already been allocated. So assume sqlite3GetVdbe() is always
                   72678:     ** successful here.
                   72679:     */
                   72680:     assert(v);
                   72681:     if( iCol<0 ){
                   72682:       int iMem = ++pParse->nMem;
                   72683:       int iAddr;
                   72684: 
                   72685:       iAddr = sqlite3VdbeAddOp1(v, OP_If, iMem);
                   72686:       sqlite3VdbeAddOp2(v, OP_Integer, 1, iMem);
                   72687: 
                   72688:       sqlite3OpenTable(pParse, iTab, iDb, pTab, OP_OpenRead);
                   72689:       eType = IN_INDEX_ROWID;
                   72690: 
                   72691:       sqlite3VdbeJumpHere(v, iAddr);
                   72692:     }else{
                   72693:       Index *pIdx;                         /* Iterator variable */
                   72694: 
                   72695:       /* The collation sequence used by the comparison. If an index is to
                   72696:       ** be used in place of a temp-table, it must be ordered according
                   72697:       ** to this collation sequence.  */
                   72698:       CollSeq *pReq = sqlite3BinaryCompareCollSeq(pParse, pX->pLeft, pExpr);
                   72699: 
                   72700:       /* Check that the affinity that will be used to perform the 
                   72701:       ** comparison is the same as the affinity of the column. If
                   72702:       ** it is not, it is not possible to use any index.
                   72703:       */
                   72704:       char aff = comparisonAffinity(pX);
                   72705:       int affinity_ok = (pTab->aCol[iCol].affinity==aff||aff==SQLITE_AFF_NONE);
                   72706: 
                   72707:       for(pIdx=pTab->pIndex; pIdx && eType==0 && affinity_ok; pIdx=pIdx->pNext){
                   72708:         if( (pIdx->aiColumn[0]==iCol)
                   72709:          && sqlite3FindCollSeq(db, ENC(db), pIdx->azColl[0], 0)==pReq
                   72710:          && (!mustBeUnique || (pIdx->nColumn==1 && pIdx->onError!=OE_None))
                   72711:         ){
                   72712:           int iMem = ++pParse->nMem;
                   72713:           int iAddr;
                   72714:           char *pKey;
                   72715:   
                   72716:           pKey = (char *)sqlite3IndexKeyinfo(pParse, pIdx);
                   72717:           iAddr = sqlite3VdbeAddOp1(v, OP_If, iMem);
                   72718:           sqlite3VdbeAddOp2(v, OP_Integer, 1, iMem);
                   72719:   
                   72720:           sqlite3VdbeAddOp4(v, OP_OpenRead, iTab, pIdx->tnum, iDb,
                   72721:                                pKey,P4_KEYINFO_HANDOFF);
                   72722:           VdbeComment((v, "%s", pIdx->zName));
                   72723:           eType = IN_INDEX_INDEX;
                   72724: 
                   72725:           sqlite3VdbeJumpHere(v, iAddr);
                   72726:           if( prNotFound && !pTab->aCol[iCol].notNull ){
                   72727:             *prNotFound = ++pParse->nMem;
                   72728:           }
                   72729:         }
                   72730:       }
                   72731:     }
                   72732:   }
                   72733: 
                   72734:   if( eType==0 ){
                   72735:     /* Could not found an existing table or index to use as the RHS b-tree.
                   72736:     ** We will have to generate an ephemeral table to do the job.
                   72737:     */
                   72738:     double savedNQueryLoop = pParse->nQueryLoop;
                   72739:     int rMayHaveNull = 0;
                   72740:     eType = IN_INDEX_EPH;
                   72741:     if( prNotFound ){
                   72742:       *prNotFound = rMayHaveNull = ++pParse->nMem;
                   72743:     }else{
                   72744:       testcase( pParse->nQueryLoop>(double)1 );
                   72745:       pParse->nQueryLoop = (double)1;
                   72746:       if( pX->pLeft->iColumn<0 && !ExprHasAnyProperty(pX, EP_xIsSelect) ){
                   72747:         eType = IN_INDEX_ROWID;
                   72748:       }
                   72749:     }
                   72750:     sqlite3CodeSubselect(pParse, pX, rMayHaveNull, eType==IN_INDEX_ROWID);
                   72751:     pParse->nQueryLoop = savedNQueryLoop;
                   72752:   }else{
                   72753:     pX->iTable = iTab;
                   72754:   }
                   72755:   return eType;
                   72756: }
                   72757: #endif
                   72758: 
                   72759: /*
                   72760: ** Generate code for scalar subqueries used as a subquery expression, EXISTS,
                   72761: ** or IN operators.  Examples:
                   72762: **
                   72763: **     (SELECT a FROM b)          -- subquery
                   72764: **     EXISTS (SELECT a FROM b)   -- EXISTS subquery
                   72765: **     x IN (4,5,11)              -- IN operator with list on right-hand side
                   72766: **     x IN (SELECT a FROM b)     -- IN operator with subquery on the right
                   72767: **
                   72768: ** The pExpr parameter describes the expression that contains the IN
                   72769: ** operator or subquery.
                   72770: **
                   72771: ** If parameter isRowid is non-zero, then expression pExpr is guaranteed
                   72772: ** to be of the form "<rowid> IN (?, ?, ?)", where <rowid> is a reference
                   72773: ** to some integer key column of a table B-Tree. In this case, use an
                   72774: ** intkey B-Tree to store the set of IN(...) values instead of the usual
                   72775: ** (slower) variable length keys B-Tree.
                   72776: **
                   72777: ** If rMayHaveNull is non-zero, that means that the operation is an IN
                   72778: ** (not a SELECT or EXISTS) and that the RHS might contains NULLs.
                   72779: ** Furthermore, the IN is in a WHERE clause and that we really want
                   72780: ** to iterate over the RHS of the IN operator in order to quickly locate
                   72781: ** all corresponding LHS elements.  All this routine does is initialize
                   72782: ** the register given by rMayHaveNull to NULL.  Calling routines will take
                   72783: ** care of changing this register value to non-NULL if the RHS is NULL-free.
                   72784: **
                   72785: ** If rMayHaveNull is zero, that means that the subquery is being used
                   72786: ** for membership testing only.  There is no need to initialize any
1.1.1.3 ! misho    72787: ** registers to indicate the presence or absence of NULLs on the RHS.
1.1       misho    72788: **
                   72789: ** For a SELECT or EXISTS operator, return the register that holds the
                   72790: ** result.  For IN operators or if an error occurs, the return value is 0.
                   72791: */
                   72792: #ifndef SQLITE_OMIT_SUBQUERY
                   72793: SQLITE_PRIVATE int sqlite3CodeSubselect(
                   72794:   Parse *pParse,          /* Parsing context */
                   72795:   Expr *pExpr,            /* The IN, SELECT, or EXISTS operator */
                   72796:   int rMayHaveNull,       /* Register that records whether NULLs exist in RHS */
                   72797:   int isRowid             /* If true, LHS of IN operator is a rowid */
                   72798: ){
                   72799:   int testAddr = 0;                       /* One-time test address */
                   72800:   int rReg = 0;                           /* Register storing resulting */
                   72801:   Vdbe *v = sqlite3GetVdbe(pParse);
                   72802:   if( NEVER(v==0) ) return 0;
                   72803:   sqlite3ExprCachePush(pParse);
                   72804: 
                   72805:   /* This code must be run in its entirety every time it is encountered
                   72806:   ** if any of the following is true:
                   72807:   **
                   72808:   **    *  The right-hand side is a correlated subquery
                   72809:   **    *  The right-hand side is an expression list containing variables
                   72810:   **    *  We are inside a trigger
                   72811:   **
                   72812:   ** If all of the above are false, then we can run this code just once
                   72813:   ** save the results, and reuse the same result on subsequent invocations.
                   72814:   */
                   72815:   if( !ExprHasAnyProperty(pExpr, EP_VarSelect) && !pParse->pTriggerTab ){
                   72816:     int mem = ++pParse->nMem;
                   72817:     sqlite3VdbeAddOp1(v, OP_If, mem);
                   72818:     testAddr = sqlite3VdbeAddOp2(v, OP_Integer, 1, mem);
                   72819:     assert( testAddr>0 || pParse->db->mallocFailed );
                   72820:   }
                   72821: 
                   72822: #ifndef SQLITE_OMIT_EXPLAIN
                   72823:   if( pParse->explain==2 ){
                   72824:     char *zMsg = sqlite3MPrintf(
                   72825:         pParse->db, "EXECUTE %s%s SUBQUERY %d", testAddr?"":"CORRELATED ",
                   72826:         pExpr->op==TK_IN?"LIST":"SCALAR", pParse->iNextSelectId
                   72827:     );
                   72828:     sqlite3VdbeAddOp4(v, OP_Explain, pParse->iSelectId, 0, 0, zMsg, P4_DYNAMIC);
                   72829:   }
                   72830: #endif
                   72831: 
                   72832:   switch( pExpr->op ){
                   72833:     case TK_IN: {
                   72834:       char affinity;              /* Affinity of the LHS of the IN */
                   72835:       KeyInfo keyInfo;            /* Keyinfo for the generated table */
                   72836:       int addr;                   /* Address of OP_OpenEphemeral instruction */
                   72837:       Expr *pLeft = pExpr->pLeft; /* the LHS of the IN operator */
                   72838: 
                   72839:       if( rMayHaveNull ){
                   72840:         sqlite3VdbeAddOp2(v, OP_Null, 0, rMayHaveNull);
                   72841:       }
                   72842: 
                   72843:       affinity = sqlite3ExprAffinity(pLeft);
                   72844: 
                   72845:       /* Whether this is an 'x IN(SELECT...)' or an 'x IN(<exprlist>)'
                   72846:       ** expression it is handled the same way.  An ephemeral table is 
                   72847:       ** filled with single-field index keys representing the results
                   72848:       ** from the SELECT or the <exprlist>.
                   72849:       **
                   72850:       ** If the 'x' expression is a column value, or the SELECT...
                   72851:       ** statement returns a column value, then the affinity of that
                   72852:       ** column is used to build the index keys. If both 'x' and the
                   72853:       ** SELECT... statement are columns, then numeric affinity is used
                   72854:       ** if either column has NUMERIC or INTEGER affinity. If neither
                   72855:       ** 'x' nor the SELECT... statement are columns, then numeric affinity
                   72856:       ** is used.
                   72857:       */
                   72858:       pExpr->iTable = pParse->nTab++;
                   72859:       addr = sqlite3VdbeAddOp2(v, OP_OpenEphemeral, pExpr->iTable, !isRowid);
                   72860:       if( rMayHaveNull==0 ) sqlite3VdbeChangeP5(v, BTREE_UNORDERED);
                   72861:       memset(&keyInfo, 0, sizeof(keyInfo));
                   72862:       keyInfo.nField = 1;
                   72863: 
                   72864:       if( ExprHasProperty(pExpr, EP_xIsSelect) ){
                   72865:         /* Case 1:     expr IN (SELECT ...)
                   72866:         **
                   72867:         ** Generate code to write the results of the select into the temporary
                   72868:         ** table allocated and opened above.
                   72869:         */
                   72870:         SelectDest dest;
                   72871:         ExprList *pEList;
                   72872: 
                   72873:         assert( !isRowid );
                   72874:         sqlite3SelectDestInit(&dest, SRT_Set, pExpr->iTable);
                   72875:         dest.affinity = (u8)affinity;
                   72876:         assert( (pExpr->iTable&0x0000FFFF)==pExpr->iTable );
                   72877:         pExpr->x.pSelect->iLimit = 0;
                   72878:         if( sqlite3Select(pParse, pExpr->x.pSelect, &dest) ){
                   72879:           return 0;
                   72880:         }
                   72881:         pEList = pExpr->x.pSelect->pEList;
                   72882:         if( ALWAYS(pEList!=0 && pEList->nExpr>0) ){ 
                   72883:           keyInfo.aColl[0] = sqlite3BinaryCompareCollSeq(pParse, pExpr->pLeft,
                   72884:               pEList->a[0].pExpr);
                   72885:         }
                   72886:       }else if( ALWAYS(pExpr->x.pList!=0) ){
                   72887:         /* Case 2:     expr IN (exprlist)
                   72888:         **
                   72889:         ** For each expression, build an index key from the evaluation and
                   72890:         ** store it in the temporary table. If <expr> is a column, then use
                   72891:         ** that columns affinity when building index keys. If <expr> is not
                   72892:         ** a column, use numeric affinity.
                   72893:         */
                   72894:         int i;
                   72895:         ExprList *pList = pExpr->x.pList;
                   72896:         struct ExprList_item *pItem;
                   72897:         int r1, r2, r3;
                   72898: 
                   72899:         if( !affinity ){
                   72900:           affinity = SQLITE_AFF_NONE;
                   72901:         }
                   72902:         keyInfo.aColl[0] = sqlite3ExprCollSeq(pParse, pExpr->pLeft);
                   72903: 
                   72904:         /* Loop through each expression in <exprlist>. */
                   72905:         r1 = sqlite3GetTempReg(pParse);
                   72906:         r2 = sqlite3GetTempReg(pParse);
                   72907:         sqlite3VdbeAddOp2(v, OP_Null, 0, r2);
                   72908:         for(i=pList->nExpr, pItem=pList->a; i>0; i--, pItem++){
                   72909:           Expr *pE2 = pItem->pExpr;
                   72910:           int iValToIns;
                   72911: 
                   72912:           /* If the expression is not constant then we will need to
                   72913:           ** disable the test that was generated above that makes sure
                   72914:           ** this code only executes once.  Because for a non-constant
                   72915:           ** expression we need to rerun this code each time.
                   72916:           */
                   72917:           if( testAddr && !sqlite3ExprIsConstant(pE2) ){
                   72918:             sqlite3VdbeChangeToNoop(v, testAddr-1, 2);
                   72919:             testAddr = 0;
                   72920:           }
                   72921: 
                   72922:           /* Evaluate the expression and insert it into the temp table */
                   72923:           if( isRowid && sqlite3ExprIsInteger(pE2, &iValToIns) ){
                   72924:             sqlite3VdbeAddOp3(v, OP_InsertInt, pExpr->iTable, r2, iValToIns);
                   72925:           }else{
                   72926:             r3 = sqlite3ExprCodeTarget(pParse, pE2, r1);
                   72927:             if( isRowid ){
                   72928:               sqlite3VdbeAddOp2(v, OP_MustBeInt, r3,
                   72929:                                 sqlite3VdbeCurrentAddr(v)+2);
                   72930:               sqlite3VdbeAddOp3(v, OP_Insert, pExpr->iTable, r2, r3);
                   72931:             }else{
                   72932:               sqlite3VdbeAddOp4(v, OP_MakeRecord, r3, 1, r2, &affinity, 1);
                   72933:               sqlite3ExprCacheAffinityChange(pParse, r3, 1);
                   72934:               sqlite3VdbeAddOp2(v, OP_IdxInsert, pExpr->iTable, r2);
                   72935:             }
                   72936:           }
                   72937:         }
                   72938:         sqlite3ReleaseTempReg(pParse, r1);
                   72939:         sqlite3ReleaseTempReg(pParse, r2);
                   72940:       }
                   72941:       if( !isRowid ){
                   72942:         sqlite3VdbeChangeP4(v, addr, (void *)&keyInfo, P4_KEYINFO);
                   72943:       }
                   72944:       break;
                   72945:     }
                   72946: 
                   72947:     case TK_EXISTS:
                   72948:     case TK_SELECT:
                   72949:     default: {
                   72950:       /* If this has to be a scalar SELECT.  Generate code to put the
                   72951:       ** value of this select in a memory cell and record the number
                   72952:       ** of the memory cell in iColumn.  If this is an EXISTS, write
                   72953:       ** an integer 0 (not exists) or 1 (exists) into a memory cell
                   72954:       ** and record that memory cell in iColumn.
                   72955:       */
                   72956:       Select *pSel;                         /* SELECT statement to encode */
                   72957:       SelectDest dest;                      /* How to deal with SELECt result */
                   72958: 
                   72959:       testcase( pExpr->op==TK_EXISTS );
                   72960:       testcase( pExpr->op==TK_SELECT );
                   72961:       assert( pExpr->op==TK_EXISTS || pExpr->op==TK_SELECT );
                   72962: 
                   72963:       assert( ExprHasProperty(pExpr, EP_xIsSelect) );
                   72964:       pSel = pExpr->x.pSelect;
                   72965:       sqlite3SelectDestInit(&dest, 0, ++pParse->nMem);
                   72966:       if( pExpr->op==TK_SELECT ){
                   72967:         dest.eDest = SRT_Mem;
                   72968:         sqlite3VdbeAddOp2(v, OP_Null, 0, dest.iParm);
                   72969:         VdbeComment((v, "Init subquery result"));
                   72970:       }else{
                   72971:         dest.eDest = SRT_Exists;
                   72972:         sqlite3VdbeAddOp2(v, OP_Integer, 0, dest.iParm);
                   72973:         VdbeComment((v, "Init EXISTS result"));
                   72974:       }
                   72975:       sqlite3ExprDelete(pParse->db, pSel->pLimit);
                   72976:       pSel->pLimit = sqlite3PExpr(pParse, TK_INTEGER, 0, 0,
                   72977:                                   &sqlite3IntTokens[1]);
                   72978:       pSel->iLimit = 0;
                   72979:       if( sqlite3Select(pParse, pSel, &dest) ){
                   72980:         return 0;
                   72981:       }
                   72982:       rReg = dest.iParm;
                   72983:       ExprSetIrreducible(pExpr);
                   72984:       break;
                   72985:     }
                   72986:   }
                   72987: 
                   72988:   if( testAddr ){
                   72989:     sqlite3VdbeJumpHere(v, testAddr-1);
                   72990:   }
                   72991:   sqlite3ExprCachePop(pParse, 1);
                   72992: 
                   72993:   return rReg;
                   72994: }
                   72995: #endif /* SQLITE_OMIT_SUBQUERY */
                   72996: 
                   72997: #ifndef SQLITE_OMIT_SUBQUERY
                   72998: /*
                   72999: ** Generate code for an IN expression.
                   73000: **
                   73001: **      x IN (SELECT ...)
                   73002: **      x IN (value, value, ...)
                   73003: **
                   73004: ** The left-hand side (LHS) is a scalar expression.  The right-hand side (RHS)
                   73005: ** is an array of zero or more values.  The expression is true if the LHS is
                   73006: ** contained within the RHS.  The value of the expression is unknown (NULL)
                   73007: ** if the LHS is NULL or if the LHS is not contained within the RHS and the
                   73008: ** RHS contains one or more NULL values.
                   73009: **
                   73010: ** This routine generates code will jump to destIfFalse if the LHS is not 
                   73011: ** contained within the RHS.  If due to NULLs we cannot determine if the LHS
                   73012: ** is contained in the RHS then jump to destIfNull.  If the LHS is contained
                   73013: ** within the RHS then fall through.
                   73014: */
                   73015: static void sqlite3ExprCodeIN(
                   73016:   Parse *pParse,        /* Parsing and code generating context */
                   73017:   Expr *pExpr,          /* The IN expression */
                   73018:   int destIfFalse,      /* Jump here if LHS is not contained in the RHS */
                   73019:   int destIfNull        /* Jump here if the results are unknown due to NULLs */
                   73020: ){
                   73021:   int rRhsHasNull = 0;  /* Register that is true if RHS contains NULL values */
                   73022:   char affinity;        /* Comparison affinity to use */
                   73023:   int eType;            /* Type of the RHS */
                   73024:   int r1;               /* Temporary use register */
                   73025:   Vdbe *v;              /* Statement under construction */
                   73026: 
                   73027:   /* Compute the RHS.   After this step, the table with cursor
                   73028:   ** pExpr->iTable will contains the values that make up the RHS.
                   73029:   */
                   73030:   v = pParse->pVdbe;
                   73031:   assert( v!=0 );       /* OOM detected prior to this routine */
                   73032:   VdbeNoopComment((v, "begin IN expr"));
                   73033:   eType = sqlite3FindInIndex(pParse, pExpr, &rRhsHasNull);
                   73034: 
                   73035:   /* Figure out the affinity to use to create a key from the results
                   73036:   ** of the expression. affinityStr stores a static string suitable for
                   73037:   ** P4 of OP_MakeRecord.
                   73038:   */
                   73039:   affinity = comparisonAffinity(pExpr);
                   73040: 
                   73041:   /* Code the LHS, the <expr> from "<expr> IN (...)".
                   73042:   */
                   73043:   sqlite3ExprCachePush(pParse);
                   73044:   r1 = sqlite3GetTempReg(pParse);
                   73045:   sqlite3ExprCode(pParse, pExpr->pLeft, r1);
                   73046: 
                   73047:   /* If the LHS is NULL, then the result is either false or NULL depending
                   73048:   ** on whether the RHS is empty or not, respectively.
                   73049:   */
                   73050:   if( destIfNull==destIfFalse ){
                   73051:     /* Shortcut for the common case where the false and NULL outcomes are
                   73052:     ** the same. */
                   73053:     sqlite3VdbeAddOp2(v, OP_IsNull, r1, destIfNull);
                   73054:   }else{
                   73055:     int addr1 = sqlite3VdbeAddOp1(v, OP_NotNull, r1);
                   73056:     sqlite3VdbeAddOp2(v, OP_Rewind, pExpr->iTable, destIfFalse);
                   73057:     sqlite3VdbeAddOp2(v, OP_Goto, 0, destIfNull);
                   73058:     sqlite3VdbeJumpHere(v, addr1);
                   73059:   }
                   73060: 
                   73061:   if( eType==IN_INDEX_ROWID ){
                   73062:     /* In this case, the RHS is the ROWID of table b-tree
                   73063:     */
                   73064:     sqlite3VdbeAddOp2(v, OP_MustBeInt, r1, destIfFalse);
                   73065:     sqlite3VdbeAddOp3(v, OP_NotExists, pExpr->iTable, destIfFalse, r1);
                   73066:   }else{
                   73067:     /* In this case, the RHS is an index b-tree.
                   73068:     */
                   73069:     sqlite3VdbeAddOp4(v, OP_Affinity, r1, 1, 0, &affinity, 1);
                   73070: 
                   73071:     /* If the set membership test fails, then the result of the 
                   73072:     ** "x IN (...)" expression must be either 0 or NULL. If the set
                   73073:     ** contains no NULL values, then the result is 0. If the set 
                   73074:     ** contains one or more NULL values, then the result of the
                   73075:     ** expression is also NULL.
                   73076:     */
                   73077:     if( rRhsHasNull==0 || destIfFalse==destIfNull ){
                   73078:       /* This branch runs if it is known at compile time that the RHS
                   73079:       ** cannot contain NULL values. This happens as the result
                   73080:       ** of a "NOT NULL" constraint in the database schema.
                   73081:       **
                   73082:       ** Also run this branch if NULL is equivalent to FALSE
                   73083:       ** for this particular IN operator.
                   73084:       */
                   73085:       sqlite3VdbeAddOp4Int(v, OP_NotFound, pExpr->iTable, destIfFalse, r1, 1);
                   73086: 
                   73087:     }else{
                   73088:       /* In this branch, the RHS of the IN might contain a NULL and
                   73089:       ** the presence of a NULL on the RHS makes a difference in the
                   73090:       ** outcome.
                   73091:       */
                   73092:       int j1, j2, j3;
                   73093: 
                   73094:       /* First check to see if the LHS is contained in the RHS.  If so,
                   73095:       ** then the presence of NULLs in the RHS does not matter, so jump
                   73096:       ** over all of the code that follows.
                   73097:       */
                   73098:       j1 = sqlite3VdbeAddOp4Int(v, OP_Found, pExpr->iTable, 0, r1, 1);
                   73099: 
                   73100:       /* Here we begin generating code that runs if the LHS is not
                   73101:       ** contained within the RHS.  Generate additional code that
                   73102:       ** tests the RHS for NULLs.  If the RHS contains a NULL then
                   73103:       ** jump to destIfNull.  If there are no NULLs in the RHS then
                   73104:       ** jump to destIfFalse.
                   73105:       */
                   73106:       j2 = sqlite3VdbeAddOp1(v, OP_NotNull, rRhsHasNull);
                   73107:       j3 = sqlite3VdbeAddOp4Int(v, OP_Found, pExpr->iTable, 0, rRhsHasNull, 1);
                   73108:       sqlite3VdbeAddOp2(v, OP_Integer, -1, rRhsHasNull);
                   73109:       sqlite3VdbeJumpHere(v, j3);
                   73110:       sqlite3VdbeAddOp2(v, OP_AddImm, rRhsHasNull, 1);
                   73111:       sqlite3VdbeJumpHere(v, j2);
                   73112: 
                   73113:       /* Jump to the appropriate target depending on whether or not
                   73114:       ** the RHS contains a NULL
                   73115:       */
                   73116:       sqlite3VdbeAddOp2(v, OP_If, rRhsHasNull, destIfNull);
                   73117:       sqlite3VdbeAddOp2(v, OP_Goto, 0, destIfFalse);
                   73118: 
                   73119:       /* The OP_Found at the top of this branch jumps here when true, 
                   73120:       ** causing the overall IN expression evaluation to fall through.
                   73121:       */
                   73122:       sqlite3VdbeJumpHere(v, j1);
                   73123:     }
                   73124:   }
                   73125:   sqlite3ReleaseTempReg(pParse, r1);
                   73126:   sqlite3ExprCachePop(pParse, 1);
                   73127:   VdbeComment((v, "end IN expr"));
                   73128: }
                   73129: #endif /* SQLITE_OMIT_SUBQUERY */
                   73130: 
                   73131: /*
                   73132: ** Duplicate an 8-byte value
                   73133: */
                   73134: static char *dup8bytes(Vdbe *v, const char *in){
                   73135:   char *out = sqlite3DbMallocRaw(sqlite3VdbeDb(v), 8);
                   73136:   if( out ){
                   73137:     memcpy(out, in, 8);
                   73138:   }
                   73139:   return out;
                   73140: }
                   73141: 
                   73142: #ifndef SQLITE_OMIT_FLOATING_POINT
                   73143: /*
                   73144: ** Generate an instruction that will put the floating point
                   73145: ** value described by z[0..n-1] into register iMem.
                   73146: **
                   73147: ** The z[] string will probably not be zero-terminated.  But the 
                   73148: ** z[n] character is guaranteed to be something that does not look
                   73149: ** like the continuation of the number.
                   73150: */
                   73151: static void codeReal(Vdbe *v, const char *z, int negateFlag, int iMem){
                   73152:   if( ALWAYS(z!=0) ){
                   73153:     double value;
                   73154:     char *zV;
                   73155:     sqlite3AtoF(z, &value, sqlite3Strlen30(z), SQLITE_UTF8);
                   73156:     assert( !sqlite3IsNaN(value) ); /* The new AtoF never returns NaN */
                   73157:     if( negateFlag ) value = -value;
                   73158:     zV = dup8bytes(v, (char*)&value);
                   73159:     sqlite3VdbeAddOp4(v, OP_Real, 0, iMem, 0, zV, P4_REAL);
                   73160:   }
                   73161: }
                   73162: #endif
                   73163: 
                   73164: 
                   73165: /*
                   73166: ** Generate an instruction that will put the integer describe by
                   73167: ** text z[0..n-1] into register iMem.
                   73168: **
                   73169: ** Expr.u.zToken is always UTF8 and zero-terminated.
                   73170: */
                   73171: static void codeInteger(Parse *pParse, Expr *pExpr, int negFlag, int iMem){
                   73172:   Vdbe *v = pParse->pVdbe;
                   73173:   if( pExpr->flags & EP_IntValue ){
                   73174:     int i = pExpr->u.iValue;
                   73175:     assert( i>=0 );
                   73176:     if( negFlag ) i = -i;
                   73177:     sqlite3VdbeAddOp2(v, OP_Integer, i, iMem);
                   73178:   }else{
                   73179:     int c;
                   73180:     i64 value;
                   73181:     const char *z = pExpr->u.zToken;
                   73182:     assert( z!=0 );
                   73183:     c = sqlite3Atoi64(z, &value, sqlite3Strlen30(z), SQLITE_UTF8);
                   73184:     if( c==0 || (c==2 && negFlag) ){
                   73185:       char *zV;
                   73186:       if( negFlag ){ value = c==2 ? SMALLEST_INT64 : -value; }
                   73187:       zV = dup8bytes(v, (char*)&value);
                   73188:       sqlite3VdbeAddOp4(v, OP_Int64, 0, iMem, 0, zV, P4_INT64);
                   73189:     }else{
                   73190: #ifdef SQLITE_OMIT_FLOATING_POINT
                   73191:       sqlite3ErrorMsg(pParse, "oversized integer: %s%s", negFlag ? "-" : "", z);
                   73192: #else
                   73193:       codeReal(v, z, negFlag, iMem);
                   73194: #endif
                   73195:     }
                   73196:   }
                   73197: }
                   73198: 
                   73199: /*
                   73200: ** Clear a cache entry.
                   73201: */
                   73202: static void cacheEntryClear(Parse *pParse, struct yColCache *p){
                   73203:   if( p->tempReg ){
                   73204:     if( pParse->nTempReg<ArraySize(pParse->aTempReg) ){
                   73205:       pParse->aTempReg[pParse->nTempReg++] = p->iReg;
                   73206:     }
                   73207:     p->tempReg = 0;
                   73208:   }
                   73209: }
                   73210: 
                   73211: 
                   73212: /*
                   73213: ** Record in the column cache that a particular column from a
                   73214: ** particular table is stored in a particular register.
                   73215: */
                   73216: SQLITE_PRIVATE void sqlite3ExprCacheStore(Parse *pParse, int iTab, int iCol, int iReg){
                   73217:   int i;
                   73218:   int minLru;
                   73219:   int idxLru;
                   73220:   struct yColCache *p;
                   73221: 
                   73222:   assert( iReg>0 );  /* Register numbers are always positive */
                   73223:   assert( iCol>=-1 && iCol<32768 );  /* Finite column numbers */
                   73224: 
                   73225:   /* The SQLITE_ColumnCache flag disables the column cache.  This is used
                   73226:   ** for testing only - to verify that SQLite always gets the same answer
                   73227:   ** with and without the column cache.
                   73228:   */
                   73229:   if( pParse->db->flags & SQLITE_ColumnCache ) return;
                   73230: 
                   73231:   /* First replace any existing entry.
                   73232:   **
                   73233:   ** Actually, the way the column cache is currently used, we are guaranteed
                   73234:   ** that the object will never already be in cache.  Verify this guarantee.
                   73235:   */
                   73236: #ifndef NDEBUG
                   73237:   for(i=0, p=pParse->aColCache; i<SQLITE_N_COLCACHE; i++, p++){
                   73238: #if 0 /* This code wold remove the entry from the cache if it existed */
                   73239:     if( p->iReg && p->iTable==iTab && p->iColumn==iCol ){
                   73240:       cacheEntryClear(pParse, p);
                   73241:       p->iLevel = pParse->iCacheLevel;
                   73242:       p->iReg = iReg;
                   73243:       p->lru = pParse->iCacheCnt++;
                   73244:       return;
                   73245:     }
                   73246: #endif
                   73247:     assert( p->iReg==0 || p->iTable!=iTab || p->iColumn!=iCol );
                   73248:   }
                   73249: #endif
                   73250: 
                   73251:   /* Find an empty slot and replace it */
                   73252:   for(i=0, p=pParse->aColCache; i<SQLITE_N_COLCACHE; i++, p++){
                   73253:     if( p->iReg==0 ){
                   73254:       p->iLevel = pParse->iCacheLevel;
                   73255:       p->iTable = iTab;
                   73256:       p->iColumn = iCol;
                   73257:       p->iReg = iReg;
                   73258:       p->tempReg = 0;
                   73259:       p->lru = pParse->iCacheCnt++;
                   73260:       return;
                   73261:     }
                   73262:   }
                   73263: 
                   73264:   /* Replace the last recently used */
                   73265:   minLru = 0x7fffffff;
                   73266:   idxLru = -1;
                   73267:   for(i=0, p=pParse->aColCache; i<SQLITE_N_COLCACHE; i++, p++){
                   73268:     if( p->lru<minLru ){
                   73269:       idxLru = i;
                   73270:       minLru = p->lru;
                   73271:     }
                   73272:   }
                   73273:   if( ALWAYS(idxLru>=0) ){
                   73274:     p = &pParse->aColCache[idxLru];
                   73275:     p->iLevel = pParse->iCacheLevel;
                   73276:     p->iTable = iTab;
                   73277:     p->iColumn = iCol;
                   73278:     p->iReg = iReg;
                   73279:     p->tempReg = 0;
                   73280:     p->lru = pParse->iCacheCnt++;
                   73281:     return;
                   73282:   }
                   73283: }
                   73284: 
                   73285: /*
                   73286: ** Indicate that registers between iReg..iReg+nReg-1 are being overwritten.
                   73287: ** Purge the range of registers from the column cache.
                   73288: */
                   73289: SQLITE_PRIVATE void sqlite3ExprCacheRemove(Parse *pParse, int iReg, int nReg){
                   73290:   int i;
                   73291:   int iLast = iReg + nReg - 1;
                   73292:   struct yColCache *p;
                   73293:   for(i=0, p=pParse->aColCache; i<SQLITE_N_COLCACHE; i++, p++){
                   73294:     int r = p->iReg;
                   73295:     if( r>=iReg && r<=iLast ){
                   73296:       cacheEntryClear(pParse, p);
                   73297:       p->iReg = 0;
                   73298:     }
                   73299:   }
                   73300: }
                   73301: 
                   73302: /*
                   73303: ** Remember the current column cache context.  Any new entries added
                   73304: ** added to the column cache after this call are removed when the
                   73305: ** corresponding pop occurs.
                   73306: */
                   73307: SQLITE_PRIVATE void sqlite3ExprCachePush(Parse *pParse){
                   73308:   pParse->iCacheLevel++;
                   73309: }
                   73310: 
                   73311: /*
                   73312: ** Remove from the column cache any entries that were added since the
                   73313: ** the previous N Push operations.  In other words, restore the cache
                   73314: ** to the state it was in N Pushes ago.
                   73315: */
                   73316: SQLITE_PRIVATE void sqlite3ExprCachePop(Parse *pParse, int N){
                   73317:   int i;
                   73318:   struct yColCache *p;
                   73319:   assert( N>0 );
                   73320:   assert( pParse->iCacheLevel>=N );
                   73321:   pParse->iCacheLevel -= N;
                   73322:   for(i=0, p=pParse->aColCache; i<SQLITE_N_COLCACHE; i++, p++){
                   73323:     if( p->iReg && p->iLevel>pParse->iCacheLevel ){
                   73324:       cacheEntryClear(pParse, p);
                   73325:       p->iReg = 0;
                   73326:     }
                   73327:   }
                   73328: }
                   73329: 
                   73330: /*
                   73331: ** When a cached column is reused, make sure that its register is
                   73332: ** no longer available as a temp register.  ticket #3879:  that same
                   73333: ** register might be in the cache in multiple places, so be sure to
                   73334: ** get them all.
                   73335: */
                   73336: static void sqlite3ExprCachePinRegister(Parse *pParse, int iReg){
                   73337:   int i;
                   73338:   struct yColCache *p;
                   73339:   for(i=0, p=pParse->aColCache; i<SQLITE_N_COLCACHE; i++, p++){
                   73340:     if( p->iReg==iReg ){
                   73341:       p->tempReg = 0;
                   73342:     }
                   73343:   }
                   73344: }
                   73345: 
                   73346: /*
                   73347: ** Generate code to extract the value of the iCol-th column of a table.
                   73348: */
                   73349: SQLITE_PRIVATE void sqlite3ExprCodeGetColumnOfTable(
                   73350:   Vdbe *v,        /* The VDBE under construction */
                   73351:   Table *pTab,    /* The table containing the value */
                   73352:   int iTabCur,    /* The cursor for this table */
                   73353:   int iCol,       /* Index of the column to extract */
                   73354:   int regOut      /* Extract the valud into this register */
                   73355: ){
                   73356:   if( iCol<0 || iCol==pTab->iPKey ){
                   73357:     sqlite3VdbeAddOp2(v, OP_Rowid, iTabCur, regOut);
                   73358:   }else{
                   73359:     int op = IsVirtual(pTab) ? OP_VColumn : OP_Column;
                   73360:     sqlite3VdbeAddOp3(v, op, iTabCur, iCol, regOut);
                   73361:   }
                   73362:   if( iCol>=0 ){
                   73363:     sqlite3ColumnDefault(v, pTab, iCol, regOut);
                   73364:   }
                   73365: }
                   73366: 
                   73367: /*
                   73368: ** Generate code that will extract the iColumn-th column from
                   73369: ** table pTab and store the column value in a register.  An effort
                   73370: ** is made to store the column value in register iReg, but this is
                   73371: ** not guaranteed.  The location of the column value is returned.
                   73372: **
                   73373: ** There must be an open cursor to pTab in iTable when this routine
                   73374: ** is called.  If iColumn<0 then code is generated that extracts the rowid.
                   73375: */
                   73376: SQLITE_PRIVATE int sqlite3ExprCodeGetColumn(
                   73377:   Parse *pParse,   /* Parsing and code generating context */
                   73378:   Table *pTab,     /* Description of the table we are reading from */
                   73379:   int iColumn,     /* Index of the table column */
                   73380:   int iTable,      /* The cursor pointing to the table */
                   73381:   int iReg         /* Store results here */
                   73382: ){
                   73383:   Vdbe *v = pParse->pVdbe;
                   73384:   int i;
                   73385:   struct yColCache *p;
                   73386: 
                   73387:   for(i=0, p=pParse->aColCache; i<SQLITE_N_COLCACHE; i++, p++){
                   73388:     if( p->iReg>0 && p->iTable==iTable && p->iColumn==iColumn ){
                   73389:       p->lru = pParse->iCacheCnt++;
                   73390:       sqlite3ExprCachePinRegister(pParse, p->iReg);
                   73391:       return p->iReg;
                   73392:     }
                   73393:   }  
                   73394:   assert( v!=0 );
                   73395:   sqlite3ExprCodeGetColumnOfTable(v, pTab, iTable, iColumn, iReg);
                   73396:   sqlite3ExprCacheStore(pParse, iTable, iColumn, iReg);
                   73397:   return iReg;
                   73398: }
                   73399: 
                   73400: /*
                   73401: ** Clear all column cache entries.
                   73402: */
                   73403: SQLITE_PRIVATE void sqlite3ExprCacheClear(Parse *pParse){
                   73404:   int i;
                   73405:   struct yColCache *p;
                   73406: 
                   73407:   for(i=0, p=pParse->aColCache; i<SQLITE_N_COLCACHE; i++, p++){
                   73408:     if( p->iReg ){
                   73409:       cacheEntryClear(pParse, p);
                   73410:       p->iReg = 0;
                   73411:     }
                   73412:   }
                   73413: }
                   73414: 
                   73415: /*
                   73416: ** Record the fact that an affinity change has occurred on iCount
                   73417: ** registers starting with iStart.
                   73418: */
                   73419: SQLITE_PRIVATE void sqlite3ExprCacheAffinityChange(Parse *pParse, int iStart, int iCount){
                   73420:   sqlite3ExprCacheRemove(pParse, iStart, iCount);
                   73421: }
                   73422: 
                   73423: /*
                   73424: ** Generate code to move content from registers iFrom...iFrom+nReg-1
                   73425: ** over to iTo..iTo+nReg-1. Keep the column cache up-to-date.
                   73426: */
                   73427: SQLITE_PRIVATE void sqlite3ExprCodeMove(Parse *pParse, int iFrom, int iTo, int nReg){
                   73428:   int i;
                   73429:   struct yColCache *p;
                   73430:   if( NEVER(iFrom==iTo) ) return;
                   73431:   sqlite3VdbeAddOp3(pParse->pVdbe, OP_Move, iFrom, iTo, nReg);
                   73432:   for(i=0, p=pParse->aColCache; i<SQLITE_N_COLCACHE; i++, p++){
                   73433:     int x = p->iReg;
                   73434:     if( x>=iFrom && x<iFrom+nReg ){
                   73435:       p->iReg += iTo-iFrom;
                   73436:     }
                   73437:   }
                   73438: }
                   73439: 
                   73440: /*
                   73441: ** Generate code to copy content from registers iFrom...iFrom+nReg-1
                   73442: ** over to iTo..iTo+nReg-1.
                   73443: */
                   73444: SQLITE_PRIVATE void sqlite3ExprCodeCopy(Parse *pParse, int iFrom, int iTo, int nReg){
                   73445:   int i;
                   73446:   if( NEVER(iFrom==iTo) ) return;
                   73447:   for(i=0; i<nReg; i++){
                   73448:     sqlite3VdbeAddOp2(pParse->pVdbe, OP_Copy, iFrom+i, iTo+i);
                   73449:   }
                   73450: }
                   73451: 
                   73452: #if defined(SQLITE_DEBUG) || defined(SQLITE_COVERAGE_TEST)
                   73453: /*
                   73454: ** Return true if any register in the range iFrom..iTo (inclusive)
                   73455: ** is used as part of the column cache.
                   73456: **
                   73457: ** This routine is used within assert() and testcase() macros only
                   73458: ** and does not appear in a normal build.
                   73459: */
                   73460: static int usedAsColumnCache(Parse *pParse, int iFrom, int iTo){
                   73461:   int i;
                   73462:   struct yColCache *p;
                   73463:   for(i=0, p=pParse->aColCache; i<SQLITE_N_COLCACHE; i++, p++){
                   73464:     int r = p->iReg;
                   73465:     if( r>=iFrom && r<=iTo ) return 1;    /*NO_TEST*/
                   73466:   }
                   73467:   return 0;
                   73468: }
                   73469: #endif /* SQLITE_DEBUG || SQLITE_COVERAGE_TEST */
                   73470: 
                   73471: /*
                   73472: ** Generate code into the current Vdbe to evaluate the given
                   73473: ** expression.  Attempt to store the results in register "target".
                   73474: ** Return the register where results are stored.
                   73475: **
                   73476: ** With this routine, there is no guarantee that results will
                   73477: ** be stored in target.  The result might be stored in some other
                   73478: ** register if it is convenient to do so.  The calling function
                   73479: ** must check the return code and move the results to the desired
                   73480: ** register.
                   73481: */
                   73482: SQLITE_PRIVATE int sqlite3ExprCodeTarget(Parse *pParse, Expr *pExpr, int target){
                   73483:   Vdbe *v = pParse->pVdbe;  /* The VM under construction */
                   73484:   int op;                   /* The opcode being coded */
                   73485:   int inReg = target;       /* Results stored in register inReg */
                   73486:   int regFree1 = 0;         /* If non-zero free this temporary register */
                   73487:   int regFree2 = 0;         /* If non-zero free this temporary register */
                   73488:   int r1, r2, r3, r4;       /* Various register numbers */
                   73489:   sqlite3 *db = pParse->db; /* The database connection */
                   73490: 
                   73491:   assert( target>0 && target<=pParse->nMem );
                   73492:   if( v==0 ){
                   73493:     assert( pParse->db->mallocFailed );
                   73494:     return 0;
                   73495:   }
                   73496: 
                   73497:   if( pExpr==0 ){
                   73498:     op = TK_NULL;
                   73499:   }else{
                   73500:     op = pExpr->op;
                   73501:   }
                   73502:   switch( op ){
                   73503:     case TK_AGG_COLUMN: {
                   73504:       AggInfo *pAggInfo = pExpr->pAggInfo;
                   73505:       struct AggInfo_col *pCol = &pAggInfo->aCol[pExpr->iAgg];
                   73506:       if( !pAggInfo->directMode ){
                   73507:         assert( pCol->iMem>0 );
                   73508:         inReg = pCol->iMem;
                   73509:         break;
                   73510:       }else if( pAggInfo->useSortingIdx ){
                   73511:         sqlite3VdbeAddOp3(v, OP_Column, pAggInfo->sortingIdx,
                   73512:                               pCol->iSorterColumn, target);
                   73513:         break;
                   73514:       }
                   73515:       /* Otherwise, fall thru into the TK_COLUMN case */
                   73516:     }
                   73517:     case TK_COLUMN: {
                   73518:       if( pExpr->iTable<0 ){
                   73519:         /* This only happens when coding check constraints */
                   73520:         assert( pParse->ckBase>0 );
                   73521:         inReg = pExpr->iColumn + pParse->ckBase;
                   73522:       }else{
                   73523:         inReg = sqlite3ExprCodeGetColumn(pParse, pExpr->pTab,
                   73524:                                  pExpr->iColumn, pExpr->iTable, target);
                   73525:       }
                   73526:       break;
                   73527:     }
                   73528:     case TK_INTEGER: {
                   73529:       codeInteger(pParse, pExpr, 0, target);
                   73530:       break;
                   73531:     }
                   73532: #ifndef SQLITE_OMIT_FLOATING_POINT
                   73533:     case TK_FLOAT: {
                   73534:       assert( !ExprHasProperty(pExpr, EP_IntValue) );
                   73535:       codeReal(v, pExpr->u.zToken, 0, target);
                   73536:       break;
                   73537:     }
                   73538: #endif
                   73539:     case TK_STRING: {
                   73540:       assert( !ExprHasProperty(pExpr, EP_IntValue) );
                   73541:       sqlite3VdbeAddOp4(v, OP_String8, 0, target, 0, pExpr->u.zToken, 0);
                   73542:       break;
                   73543:     }
                   73544:     case TK_NULL: {
                   73545:       sqlite3VdbeAddOp2(v, OP_Null, 0, target);
                   73546:       break;
                   73547:     }
                   73548: #ifndef SQLITE_OMIT_BLOB_LITERAL
                   73549:     case TK_BLOB: {
                   73550:       int n;
                   73551:       const char *z;
                   73552:       char *zBlob;
                   73553:       assert( !ExprHasProperty(pExpr, EP_IntValue) );
                   73554:       assert( pExpr->u.zToken[0]=='x' || pExpr->u.zToken[0]=='X' );
                   73555:       assert( pExpr->u.zToken[1]=='\'' );
                   73556:       z = &pExpr->u.zToken[2];
                   73557:       n = sqlite3Strlen30(z) - 1;
                   73558:       assert( z[n]=='\'' );
                   73559:       zBlob = sqlite3HexToBlob(sqlite3VdbeDb(v), z, n);
                   73560:       sqlite3VdbeAddOp4(v, OP_Blob, n/2, target, 0, zBlob, P4_DYNAMIC);
                   73561:       break;
                   73562:     }
                   73563: #endif
                   73564:     case TK_VARIABLE: {
                   73565:       assert( !ExprHasProperty(pExpr, EP_IntValue) );
                   73566:       assert( pExpr->u.zToken!=0 );
                   73567:       assert( pExpr->u.zToken[0]!=0 );
                   73568:       sqlite3VdbeAddOp2(v, OP_Variable, pExpr->iColumn, target);
                   73569:       if( pExpr->u.zToken[1]!=0 ){
                   73570:         assert( pExpr->u.zToken[0]=='?' 
                   73571:              || strcmp(pExpr->u.zToken, pParse->azVar[pExpr->iColumn-1])==0 );
                   73572:         sqlite3VdbeChangeP4(v, -1, pParse->azVar[pExpr->iColumn-1], P4_STATIC);
                   73573:       }
                   73574:       break;
                   73575:     }
                   73576:     case TK_REGISTER: {
                   73577:       inReg = pExpr->iTable;
                   73578:       break;
                   73579:     }
                   73580:     case TK_AS: {
                   73581:       inReg = sqlite3ExprCodeTarget(pParse, pExpr->pLeft, target);
                   73582:       break;
                   73583:     }
                   73584: #ifndef SQLITE_OMIT_CAST
                   73585:     case TK_CAST: {
                   73586:       /* Expressions of the form:   CAST(pLeft AS token) */
                   73587:       int aff, to_op;
                   73588:       inReg = sqlite3ExprCodeTarget(pParse, pExpr->pLeft, target);
                   73589:       assert( !ExprHasProperty(pExpr, EP_IntValue) );
                   73590:       aff = sqlite3AffinityType(pExpr->u.zToken);
                   73591:       to_op = aff - SQLITE_AFF_TEXT + OP_ToText;
                   73592:       assert( to_op==OP_ToText    || aff!=SQLITE_AFF_TEXT    );
                   73593:       assert( to_op==OP_ToBlob    || aff!=SQLITE_AFF_NONE    );
                   73594:       assert( to_op==OP_ToNumeric || aff!=SQLITE_AFF_NUMERIC );
                   73595:       assert( to_op==OP_ToInt     || aff!=SQLITE_AFF_INTEGER );
                   73596:       assert( to_op==OP_ToReal    || aff!=SQLITE_AFF_REAL    );
                   73597:       testcase( to_op==OP_ToText );
                   73598:       testcase( to_op==OP_ToBlob );
                   73599:       testcase( to_op==OP_ToNumeric );
                   73600:       testcase( to_op==OP_ToInt );
                   73601:       testcase( to_op==OP_ToReal );
                   73602:       if( inReg!=target ){
                   73603:         sqlite3VdbeAddOp2(v, OP_SCopy, inReg, target);
                   73604:         inReg = target;
                   73605:       }
                   73606:       sqlite3VdbeAddOp1(v, to_op, inReg);
                   73607:       testcase( usedAsColumnCache(pParse, inReg, inReg) );
                   73608:       sqlite3ExprCacheAffinityChange(pParse, inReg, 1);
                   73609:       break;
                   73610:     }
                   73611: #endif /* SQLITE_OMIT_CAST */
                   73612:     case TK_LT:
                   73613:     case TK_LE:
                   73614:     case TK_GT:
                   73615:     case TK_GE:
                   73616:     case TK_NE:
                   73617:     case TK_EQ: {
                   73618:       assert( TK_LT==OP_Lt );
                   73619:       assert( TK_LE==OP_Le );
                   73620:       assert( TK_GT==OP_Gt );
                   73621:       assert( TK_GE==OP_Ge );
                   73622:       assert( TK_EQ==OP_Eq );
                   73623:       assert( TK_NE==OP_Ne );
                   73624:       testcase( op==TK_LT );
                   73625:       testcase( op==TK_LE );
                   73626:       testcase( op==TK_GT );
                   73627:       testcase( op==TK_GE );
                   73628:       testcase( op==TK_EQ );
                   73629:       testcase( op==TK_NE );
                   73630:       r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, &regFree1);
                   73631:       r2 = sqlite3ExprCodeTemp(pParse, pExpr->pRight, &regFree2);
                   73632:       codeCompare(pParse, pExpr->pLeft, pExpr->pRight, op,
                   73633:                   r1, r2, inReg, SQLITE_STOREP2);
                   73634:       testcase( regFree1==0 );
                   73635:       testcase( regFree2==0 );
                   73636:       break;
                   73637:     }
                   73638:     case TK_IS:
                   73639:     case TK_ISNOT: {
                   73640:       testcase( op==TK_IS );
                   73641:       testcase( op==TK_ISNOT );
                   73642:       r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, &regFree1);
                   73643:       r2 = sqlite3ExprCodeTemp(pParse, pExpr->pRight, &regFree2);
                   73644:       op = (op==TK_IS) ? TK_EQ : TK_NE;
                   73645:       codeCompare(pParse, pExpr->pLeft, pExpr->pRight, op,
                   73646:                   r1, r2, inReg, SQLITE_STOREP2 | SQLITE_NULLEQ);
                   73647:       testcase( regFree1==0 );
                   73648:       testcase( regFree2==0 );
                   73649:       break;
                   73650:     }
                   73651:     case TK_AND:
                   73652:     case TK_OR:
                   73653:     case TK_PLUS:
                   73654:     case TK_STAR:
                   73655:     case TK_MINUS:
                   73656:     case TK_REM:
                   73657:     case TK_BITAND:
                   73658:     case TK_BITOR:
                   73659:     case TK_SLASH:
                   73660:     case TK_LSHIFT:
                   73661:     case TK_RSHIFT: 
                   73662:     case TK_CONCAT: {
                   73663:       assert( TK_AND==OP_And );
                   73664:       assert( TK_OR==OP_Or );
                   73665:       assert( TK_PLUS==OP_Add );
                   73666:       assert( TK_MINUS==OP_Subtract );
                   73667:       assert( TK_REM==OP_Remainder );
                   73668:       assert( TK_BITAND==OP_BitAnd );
                   73669:       assert( TK_BITOR==OP_BitOr );
                   73670:       assert( TK_SLASH==OP_Divide );
                   73671:       assert( TK_LSHIFT==OP_ShiftLeft );
                   73672:       assert( TK_RSHIFT==OP_ShiftRight );
                   73673:       assert( TK_CONCAT==OP_Concat );
                   73674:       testcase( op==TK_AND );
                   73675:       testcase( op==TK_OR );
                   73676:       testcase( op==TK_PLUS );
                   73677:       testcase( op==TK_MINUS );
                   73678:       testcase( op==TK_REM );
                   73679:       testcase( op==TK_BITAND );
                   73680:       testcase( op==TK_BITOR );
                   73681:       testcase( op==TK_SLASH );
                   73682:       testcase( op==TK_LSHIFT );
                   73683:       testcase( op==TK_RSHIFT );
                   73684:       testcase( op==TK_CONCAT );
                   73685:       r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, &regFree1);
                   73686:       r2 = sqlite3ExprCodeTemp(pParse, pExpr->pRight, &regFree2);
                   73687:       sqlite3VdbeAddOp3(v, op, r2, r1, target);
                   73688:       testcase( regFree1==0 );
                   73689:       testcase( regFree2==0 );
                   73690:       break;
                   73691:     }
                   73692:     case TK_UMINUS: {
                   73693:       Expr *pLeft = pExpr->pLeft;
                   73694:       assert( pLeft );
                   73695:       if( pLeft->op==TK_INTEGER ){
                   73696:         codeInteger(pParse, pLeft, 1, target);
                   73697: #ifndef SQLITE_OMIT_FLOATING_POINT
                   73698:       }else if( pLeft->op==TK_FLOAT ){
                   73699:         assert( !ExprHasProperty(pExpr, EP_IntValue) );
                   73700:         codeReal(v, pLeft->u.zToken, 1, target);
                   73701: #endif
                   73702:       }else{
                   73703:         regFree1 = r1 = sqlite3GetTempReg(pParse);
                   73704:         sqlite3VdbeAddOp2(v, OP_Integer, 0, r1);
                   73705:         r2 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, &regFree2);
                   73706:         sqlite3VdbeAddOp3(v, OP_Subtract, r2, r1, target);
                   73707:         testcase( regFree2==0 );
                   73708:       }
                   73709:       inReg = target;
                   73710:       break;
                   73711:     }
                   73712:     case TK_BITNOT:
                   73713:     case TK_NOT: {
                   73714:       assert( TK_BITNOT==OP_BitNot );
                   73715:       assert( TK_NOT==OP_Not );
                   73716:       testcase( op==TK_BITNOT );
                   73717:       testcase( op==TK_NOT );
                   73718:       r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, &regFree1);
                   73719:       testcase( regFree1==0 );
                   73720:       inReg = target;
                   73721:       sqlite3VdbeAddOp2(v, op, r1, inReg);
                   73722:       break;
                   73723:     }
                   73724:     case TK_ISNULL:
                   73725:     case TK_NOTNULL: {
                   73726:       int addr;
                   73727:       assert( TK_ISNULL==OP_IsNull );
                   73728:       assert( TK_NOTNULL==OP_NotNull );
                   73729:       testcase( op==TK_ISNULL );
                   73730:       testcase( op==TK_NOTNULL );
                   73731:       sqlite3VdbeAddOp2(v, OP_Integer, 1, target);
                   73732:       r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, &regFree1);
                   73733:       testcase( regFree1==0 );
                   73734:       addr = sqlite3VdbeAddOp1(v, op, r1);
                   73735:       sqlite3VdbeAddOp2(v, OP_AddImm, target, -1);
                   73736:       sqlite3VdbeJumpHere(v, addr);
                   73737:       break;
                   73738:     }
                   73739:     case TK_AGG_FUNCTION: {
                   73740:       AggInfo *pInfo = pExpr->pAggInfo;
                   73741:       if( pInfo==0 ){
                   73742:         assert( !ExprHasProperty(pExpr, EP_IntValue) );
                   73743:         sqlite3ErrorMsg(pParse, "misuse of aggregate: %s()", pExpr->u.zToken);
                   73744:       }else{
                   73745:         inReg = pInfo->aFunc[pExpr->iAgg].iMem;
                   73746:       }
                   73747:       break;
                   73748:     }
                   73749:     case TK_CONST_FUNC:
                   73750:     case TK_FUNCTION: {
                   73751:       ExprList *pFarg;       /* List of function arguments */
                   73752:       int nFarg;             /* Number of function arguments */
                   73753:       FuncDef *pDef;         /* The function definition object */
                   73754:       int nId;               /* Length of the function name in bytes */
                   73755:       const char *zId;       /* The function name */
                   73756:       int constMask = 0;     /* Mask of function arguments that are constant */
                   73757:       int i;                 /* Loop counter */
                   73758:       u8 enc = ENC(db);      /* The text encoding used by this database */
                   73759:       CollSeq *pColl = 0;    /* A collating sequence */
                   73760: 
                   73761:       assert( !ExprHasProperty(pExpr, EP_xIsSelect) );
                   73762:       testcase( op==TK_CONST_FUNC );
                   73763:       testcase( op==TK_FUNCTION );
                   73764:       if( ExprHasAnyProperty(pExpr, EP_TokenOnly) ){
                   73765:         pFarg = 0;
                   73766:       }else{
                   73767:         pFarg = pExpr->x.pList;
                   73768:       }
                   73769:       nFarg = pFarg ? pFarg->nExpr : 0;
                   73770:       assert( !ExprHasProperty(pExpr, EP_IntValue) );
                   73771:       zId = pExpr->u.zToken;
                   73772:       nId = sqlite3Strlen30(zId);
                   73773:       pDef = sqlite3FindFunction(db, zId, nId, nFarg, enc, 0);
                   73774:       if( pDef==0 ){
                   73775:         sqlite3ErrorMsg(pParse, "unknown function: %.*s()", nId, zId);
                   73776:         break;
                   73777:       }
                   73778: 
                   73779:       /* Attempt a direct implementation of the built-in COALESCE() and
                   73780:       ** IFNULL() functions.  This avoids unnecessary evalation of
                   73781:       ** arguments past the first non-NULL argument.
                   73782:       */
                   73783:       if( pDef->flags & SQLITE_FUNC_COALESCE ){
                   73784:         int endCoalesce = sqlite3VdbeMakeLabel(v);
                   73785:         assert( nFarg>=2 );
                   73786:         sqlite3ExprCode(pParse, pFarg->a[0].pExpr, target);
                   73787:         for(i=1; i<nFarg; i++){
                   73788:           sqlite3VdbeAddOp2(v, OP_NotNull, target, endCoalesce);
                   73789:           sqlite3ExprCacheRemove(pParse, target, 1);
                   73790:           sqlite3ExprCachePush(pParse);
                   73791:           sqlite3ExprCode(pParse, pFarg->a[i].pExpr, target);
                   73792:           sqlite3ExprCachePop(pParse, 1);
                   73793:         }
                   73794:         sqlite3VdbeResolveLabel(v, endCoalesce);
                   73795:         break;
                   73796:       }
                   73797: 
                   73798: 
                   73799:       if( pFarg ){
                   73800:         r1 = sqlite3GetTempRange(pParse, nFarg);
                   73801:         sqlite3ExprCachePush(pParse);     /* Ticket 2ea2425d34be */
                   73802:         sqlite3ExprCodeExprList(pParse, pFarg, r1, 1);
                   73803:         sqlite3ExprCachePop(pParse, 1);   /* Ticket 2ea2425d34be */
                   73804:       }else{
                   73805:         r1 = 0;
                   73806:       }
                   73807: #ifndef SQLITE_OMIT_VIRTUALTABLE
                   73808:       /* Possibly overload the function if the first argument is
                   73809:       ** a virtual table column.
                   73810:       **
                   73811:       ** For infix functions (LIKE, GLOB, REGEXP, and MATCH) use the
                   73812:       ** second argument, not the first, as the argument to test to
                   73813:       ** see if it is a column in a virtual table.  This is done because
                   73814:       ** the left operand of infix functions (the operand we want to
                   73815:       ** control overloading) ends up as the second argument to the
                   73816:       ** function.  The expression "A glob B" is equivalent to 
                   73817:       ** "glob(B,A).  We want to use the A in "A glob B" to test
                   73818:       ** for function overloading.  But we use the B term in "glob(B,A)".
                   73819:       */
                   73820:       if( nFarg>=2 && (pExpr->flags & EP_InfixFunc) ){
                   73821:         pDef = sqlite3VtabOverloadFunction(db, pDef, nFarg, pFarg->a[1].pExpr);
                   73822:       }else if( nFarg>0 ){
                   73823:         pDef = sqlite3VtabOverloadFunction(db, pDef, nFarg, pFarg->a[0].pExpr);
                   73824:       }
                   73825: #endif
                   73826:       for(i=0; i<nFarg; i++){
                   73827:         if( i<32 && sqlite3ExprIsConstant(pFarg->a[i].pExpr) ){
                   73828:           constMask |= (1<<i);
                   73829:         }
                   73830:         if( (pDef->flags & SQLITE_FUNC_NEEDCOLL)!=0 && !pColl ){
                   73831:           pColl = sqlite3ExprCollSeq(pParse, pFarg->a[i].pExpr);
                   73832:         }
                   73833:       }
                   73834:       if( pDef->flags & SQLITE_FUNC_NEEDCOLL ){
                   73835:         if( !pColl ) pColl = db->pDfltColl; 
                   73836:         sqlite3VdbeAddOp4(v, OP_CollSeq, 0, 0, 0, (char *)pColl, P4_COLLSEQ);
                   73837:       }
                   73838:       sqlite3VdbeAddOp4(v, OP_Function, constMask, r1, target,
                   73839:                         (char*)pDef, P4_FUNCDEF);
                   73840:       sqlite3VdbeChangeP5(v, (u8)nFarg);
                   73841:       if( nFarg ){
                   73842:         sqlite3ReleaseTempRange(pParse, r1, nFarg);
                   73843:       }
                   73844:       break;
                   73845:     }
                   73846: #ifndef SQLITE_OMIT_SUBQUERY
                   73847:     case TK_EXISTS:
                   73848:     case TK_SELECT: {
                   73849:       testcase( op==TK_EXISTS );
                   73850:       testcase( op==TK_SELECT );
                   73851:       inReg = sqlite3CodeSubselect(pParse, pExpr, 0, 0);
                   73852:       break;
                   73853:     }
                   73854:     case TK_IN: {
                   73855:       int destIfFalse = sqlite3VdbeMakeLabel(v);
                   73856:       int destIfNull = sqlite3VdbeMakeLabel(v);
                   73857:       sqlite3VdbeAddOp2(v, OP_Null, 0, target);
                   73858:       sqlite3ExprCodeIN(pParse, pExpr, destIfFalse, destIfNull);
                   73859:       sqlite3VdbeAddOp2(v, OP_Integer, 1, target);
                   73860:       sqlite3VdbeResolveLabel(v, destIfFalse);
                   73861:       sqlite3VdbeAddOp2(v, OP_AddImm, target, 0);
                   73862:       sqlite3VdbeResolveLabel(v, destIfNull);
                   73863:       break;
                   73864:     }
                   73865: #endif /* SQLITE_OMIT_SUBQUERY */
                   73866: 
                   73867: 
                   73868:     /*
                   73869:     **    x BETWEEN y AND z
                   73870:     **
                   73871:     ** This is equivalent to
                   73872:     **
                   73873:     **    x>=y AND x<=z
                   73874:     **
                   73875:     ** X is stored in pExpr->pLeft.
                   73876:     ** Y is stored in pExpr->pList->a[0].pExpr.
                   73877:     ** Z is stored in pExpr->pList->a[1].pExpr.
                   73878:     */
                   73879:     case TK_BETWEEN: {
                   73880:       Expr *pLeft = pExpr->pLeft;
                   73881:       struct ExprList_item *pLItem = pExpr->x.pList->a;
                   73882:       Expr *pRight = pLItem->pExpr;
                   73883: 
                   73884:       r1 = sqlite3ExprCodeTemp(pParse, pLeft, &regFree1);
                   73885:       r2 = sqlite3ExprCodeTemp(pParse, pRight, &regFree2);
                   73886:       testcase( regFree1==0 );
                   73887:       testcase( regFree2==0 );
                   73888:       r3 = sqlite3GetTempReg(pParse);
                   73889:       r4 = sqlite3GetTempReg(pParse);
                   73890:       codeCompare(pParse, pLeft, pRight, OP_Ge,
                   73891:                   r1, r2, r3, SQLITE_STOREP2);
                   73892:       pLItem++;
                   73893:       pRight = pLItem->pExpr;
                   73894:       sqlite3ReleaseTempReg(pParse, regFree2);
                   73895:       r2 = sqlite3ExprCodeTemp(pParse, pRight, &regFree2);
                   73896:       testcase( regFree2==0 );
                   73897:       codeCompare(pParse, pLeft, pRight, OP_Le, r1, r2, r4, SQLITE_STOREP2);
                   73898:       sqlite3VdbeAddOp3(v, OP_And, r3, r4, target);
                   73899:       sqlite3ReleaseTempReg(pParse, r3);
                   73900:       sqlite3ReleaseTempReg(pParse, r4);
                   73901:       break;
                   73902:     }
                   73903:     case TK_UPLUS: {
                   73904:       inReg = sqlite3ExprCodeTarget(pParse, pExpr->pLeft, target);
                   73905:       break;
                   73906:     }
                   73907: 
                   73908:     case TK_TRIGGER: {
                   73909:       /* If the opcode is TK_TRIGGER, then the expression is a reference
                   73910:       ** to a column in the new.* or old.* pseudo-tables available to
                   73911:       ** trigger programs. In this case Expr.iTable is set to 1 for the
                   73912:       ** new.* pseudo-table, or 0 for the old.* pseudo-table. Expr.iColumn
                   73913:       ** is set to the column of the pseudo-table to read, or to -1 to
                   73914:       ** read the rowid field.
                   73915:       **
                   73916:       ** The expression is implemented using an OP_Param opcode. The p1
                   73917:       ** parameter is set to 0 for an old.rowid reference, or to (i+1)
                   73918:       ** to reference another column of the old.* pseudo-table, where 
                   73919:       ** i is the index of the column. For a new.rowid reference, p1 is
                   73920:       ** set to (n+1), where n is the number of columns in each pseudo-table.
                   73921:       ** For a reference to any other column in the new.* pseudo-table, p1
                   73922:       ** is set to (n+2+i), where n and i are as defined previously. For
                   73923:       ** example, if the table on which triggers are being fired is
                   73924:       ** declared as:
                   73925:       **
                   73926:       **   CREATE TABLE t1(a, b);
                   73927:       **
                   73928:       ** Then p1 is interpreted as follows:
                   73929:       **
                   73930:       **   p1==0   ->    old.rowid     p1==3   ->    new.rowid
                   73931:       **   p1==1   ->    old.a         p1==4   ->    new.a
                   73932:       **   p1==2   ->    old.b         p1==5   ->    new.b       
                   73933:       */
                   73934:       Table *pTab = pExpr->pTab;
                   73935:       int p1 = pExpr->iTable * (pTab->nCol+1) + 1 + pExpr->iColumn;
                   73936: 
                   73937:       assert( pExpr->iTable==0 || pExpr->iTable==1 );
                   73938:       assert( pExpr->iColumn>=-1 && pExpr->iColumn<pTab->nCol );
                   73939:       assert( pTab->iPKey<0 || pExpr->iColumn!=pTab->iPKey );
                   73940:       assert( p1>=0 && p1<(pTab->nCol*2+2) );
                   73941: 
                   73942:       sqlite3VdbeAddOp2(v, OP_Param, p1, target);
                   73943:       VdbeComment((v, "%s.%s -> $%d",
                   73944:         (pExpr->iTable ? "new" : "old"),
                   73945:         (pExpr->iColumn<0 ? "rowid" : pExpr->pTab->aCol[pExpr->iColumn].zName),
                   73946:         target
                   73947:       ));
                   73948: 
                   73949: #ifndef SQLITE_OMIT_FLOATING_POINT
                   73950:       /* If the column has REAL affinity, it may currently be stored as an
                   73951:       ** integer. Use OP_RealAffinity to make sure it is really real.  */
                   73952:       if( pExpr->iColumn>=0 
                   73953:        && pTab->aCol[pExpr->iColumn].affinity==SQLITE_AFF_REAL
                   73954:       ){
                   73955:         sqlite3VdbeAddOp1(v, OP_RealAffinity, target);
                   73956:       }
                   73957: #endif
                   73958:       break;
                   73959:     }
                   73960: 
                   73961: 
                   73962:     /*
                   73963:     ** Form A:
                   73964:     **   CASE x WHEN e1 THEN r1 WHEN e2 THEN r2 ... WHEN eN THEN rN ELSE y END
                   73965:     **
                   73966:     ** Form B:
                   73967:     **   CASE WHEN e1 THEN r1 WHEN e2 THEN r2 ... WHEN eN THEN rN ELSE y END
                   73968:     **
                   73969:     ** Form A is can be transformed into the equivalent form B as follows:
                   73970:     **   CASE WHEN x=e1 THEN r1 WHEN x=e2 THEN r2 ...
                   73971:     **        WHEN x=eN THEN rN ELSE y END
                   73972:     **
                   73973:     ** X (if it exists) is in pExpr->pLeft.
                   73974:     ** Y is in pExpr->pRight.  The Y is also optional.  If there is no
                   73975:     ** ELSE clause and no other term matches, then the result of the
                   73976:     ** exprssion is NULL.
                   73977:     ** Ei is in pExpr->pList->a[i*2] and Ri is pExpr->pList->a[i*2+1].
                   73978:     **
                   73979:     ** The result of the expression is the Ri for the first matching Ei,
                   73980:     ** or if there is no matching Ei, the ELSE term Y, or if there is
                   73981:     ** no ELSE term, NULL.
                   73982:     */
                   73983:     default: assert( op==TK_CASE ); {
                   73984:       int endLabel;                     /* GOTO label for end of CASE stmt */
                   73985:       int nextCase;                     /* GOTO label for next WHEN clause */
                   73986:       int nExpr;                        /* 2x number of WHEN terms */
                   73987:       int i;                            /* Loop counter */
                   73988:       ExprList *pEList;                 /* List of WHEN terms */
                   73989:       struct ExprList_item *aListelem;  /* Array of WHEN terms */
                   73990:       Expr opCompare;                   /* The X==Ei expression */
                   73991:       Expr cacheX;                      /* Cached expression X */
                   73992:       Expr *pX;                         /* The X expression */
                   73993:       Expr *pTest = 0;                  /* X==Ei (form A) or just Ei (form B) */
                   73994:       VVA_ONLY( int iCacheLevel = pParse->iCacheLevel; )
                   73995: 
                   73996:       assert( !ExprHasProperty(pExpr, EP_xIsSelect) && pExpr->x.pList );
                   73997:       assert((pExpr->x.pList->nExpr % 2) == 0);
                   73998:       assert(pExpr->x.pList->nExpr > 0);
                   73999:       pEList = pExpr->x.pList;
                   74000:       aListelem = pEList->a;
                   74001:       nExpr = pEList->nExpr;
                   74002:       endLabel = sqlite3VdbeMakeLabel(v);
                   74003:       if( (pX = pExpr->pLeft)!=0 ){
                   74004:         cacheX = *pX;
                   74005:         testcase( pX->op==TK_COLUMN );
                   74006:         testcase( pX->op==TK_REGISTER );
                   74007:         cacheX.iTable = sqlite3ExprCodeTemp(pParse, pX, &regFree1);
                   74008:         testcase( regFree1==0 );
                   74009:         cacheX.op = TK_REGISTER;
                   74010:         opCompare.op = TK_EQ;
                   74011:         opCompare.pLeft = &cacheX;
                   74012:         pTest = &opCompare;
                   74013:         /* Ticket b351d95f9cd5ef17e9d9dbae18f5ca8611190001:
                   74014:         ** The value in regFree1 might get SCopy-ed into the file result.
                   74015:         ** So make sure that the regFree1 register is not reused for other
                   74016:         ** purposes and possibly overwritten.  */
                   74017:         regFree1 = 0;
                   74018:       }
                   74019:       for(i=0; i<nExpr; i=i+2){
                   74020:         sqlite3ExprCachePush(pParse);
                   74021:         if( pX ){
                   74022:           assert( pTest!=0 );
                   74023:           opCompare.pRight = aListelem[i].pExpr;
                   74024:         }else{
                   74025:           pTest = aListelem[i].pExpr;
                   74026:         }
                   74027:         nextCase = sqlite3VdbeMakeLabel(v);
                   74028:         testcase( pTest->op==TK_COLUMN );
                   74029:         sqlite3ExprIfFalse(pParse, pTest, nextCase, SQLITE_JUMPIFNULL);
                   74030:         testcase( aListelem[i+1].pExpr->op==TK_COLUMN );
                   74031:         testcase( aListelem[i+1].pExpr->op==TK_REGISTER );
                   74032:         sqlite3ExprCode(pParse, aListelem[i+1].pExpr, target);
                   74033:         sqlite3VdbeAddOp2(v, OP_Goto, 0, endLabel);
                   74034:         sqlite3ExprCachePop(pParse, 1);
                   74035:         sqlite3VdbeResolveLabel(v, nextCase);
                   74036:       }
                   74037:       if( pExpr->pRight ){
                   74038:         sqlite3ExprCachePush(pParse);
                   74039:         sqlite3ExprCode(pParse, pExpr->pRight, target);
                   74040:         sqlite3ExprCachePop(pParse, 1);
                   74041:       }else{
                   74042:         sqlite3VdbeAddOp2(v, OP_Null, 0, target);
                   74043:       }
                   74044:       assert( db->mallocFailed || pParse->nErr>0 
                   74045:            || pParse->iCacheLevel==iCacheLevel );
                   74046:       sqlite3VdbeResolveLabel(v, endLabel);
                   74047:       break;
                   74048:     }
                   74049: #ifndef SQLITE_OMIT_TRIGGER
                   74050:     case TK_RAISE: {
                   74051:       assert( pExpr->affinity==OE_Rollback 
                   74052:            || pExpr->affinity==OE_Abort
                   74053:            || pExpr->affinity==OE_Fail
                   74054:            || pExpr->affinity==OE_Ignore
                   74055:       );
                   74056:       if( !pParse->pTriggerTab ){
                   74057:         sqlite3ErrorMsg(pParse,
                   74058:                        "RAISE() may only be used within a trigger-program");
                   74059:         return 0;
                   74060:       }
                   74061:       if( pExpr->affinity==OE_Abort ){
                   74062:         sqlite3MayAbort(pParse);
                   74063:       }
                   74064:       assert( !ExprHasProperty(pExpr, EP_IntValue) );
                   74065:       if( pExpr->affinity==OE_Ignore ){
                   74066:         sqlite3VdbeAddOp4(
                   74067:             v, OP_Halt, SQLITE_OK, OE_Ignore, 0, pExpr->u.zToken,0);
                   74068:       }else{
                   74069:         sqlite3HaltConstraint(pParse, pExpr->affinity, pExpr->u.zToken, 0);
                   74070:       }
                   74071: 
                   74072:       break;
                   74073:     }
                   74074: #endif
                   74075:   }
                   74076:   sqlite3ReleaseTempReg(pParse, regFree1);
                   74077:   sqlite3ReleaseTempReg(pParse, regFree2);
                   74078:   return inReg;
                   74079: }
                   74080: 
                   74081: /*
                   74082: ** Generate code to evaluate an expression and store the results
                   74083: ** into a register.  Return the register number where the results
                   74084: ** are stored.
                   74085: **
                   74086: ** If the register is a temporary register that can be deallocated,
                   74087: ** then write its number into *pReg.  If the result register is not
                   74088: ** a temporary, then set *pReg to zero.
                   74089: */
                   74090: SQLITE_PRIVATE int sqlite3ExprCodeTemp(Parse *pParse, Expr *pExpr, int *pReg){
                   74091:   int r1 = sqlite3GetTempReg(pParse);
                   74092:   int r2 = sqlite3ExprCodeTarget(pParse, pExpr, r1);
                   74093:   if( r2==r1 ){
                   74094:     *pReg = r1;
                   74095:   }else{
                   74096:     sqlite3ReleaseTempReg(pParse, r1);
                   74097:     *pReg = 0;
                   74098:   }
                   74099:   return r2;
                   74100: }
                   74101: 
                   74102: /*
                   74103: ** Generate code that will evaluate expression pExpr and store the
                   74104: ** results in register target.  The results are guaranteed to appear
                   74105: ** in register target.
                   74106: */
                   74107: SQLITE_PRIVATE int sqlite3ExprCode(Parse *pParse, Expr *pExpr, int target){
                   74108:   int inReg;
                   74109: 
                   74110:   assert( target>0 && target<=pParse->nMem );
                   74111:   if( pExpr && pExpr->op==TK_REGISTER ){
                   74112:     sqlite3VdbeAddOp2(pParse->pVdbe, OP_Copy, pExpr->iTable, target);
                   74113:   }else{
                   74114:     inReg = sqlite3ExprCodeTarget(pParse, pExpr, target);
                   74115:     assert( pParse->pVdbe || pParse->db->mallocFailed );
                   74116:     if( inReg!=target && pParse->pVdbe ){
                   74117:       sqlite3VdbeAddOp2(pParse->pVdbe, OP_SCopy, inReg, target);
                   74118:     }
                   74119:   }
                   74120:   return target;
                   74121: }
                   74122: 
                   74123: /*
                   74124: ** Generate code that evalutes the given expression and puts the result
                   74125: ** in register target.
                   74126: **
                   74127: ** Also make a copy of the expression results into another "cache" register
                   74128: ** and modify the expression so that the next time it is evaluated,
                   74129: ** the result is a copy of the cache register.
                   74130: **
                   74131: ** This routine is used for expressions that are used multiple 
                   74132: ** times.  They are evaluated once and the results of the expression
                   74133: ** are reused.
                   74134: */
                   74135: SQLITE_PRIVATE int sqlite3ExprCodeAndCache(Parse *pParse, Expr *pExpr, int target){
                   74136:   Vdbe *v = pParse->pVdbe;
                   74137:   int inReg;
                   74138:   inReg = sqlite3ExprCode(pParse, pExpr, target);
                   74139:   assert( target>0 );
                   74140:   /* This routine is called for terms to INSERT or UPDATE.  And the only
                   74141:   ** other place where expressions can be converted into TK_REGISTER is
                   74142:   ** in WHERE clause processing.  So as currently implemented, there is
                   74143:   ** no way for a TK_REGISTER to exist here.  But it seems prudent to
                   74144:   ** keep the ALWAYS() in case the conditions above change with future
                   74145:   ** modifications or enhancements. */
                   74146:   if( ALWAYS(pExpr->op!=TK_REGISTER) ){  
                   74147:     int iMem;
                   74148:     iMem = ++pParse->nMem;
                   74149:     sqlite3VdbeAddOp2(v, OP_Copy, inReg, iMem);
                   74150:     pExpr->iTable = iMem;
                   74151:     pExpr->op2 = pExpr->op;
                   74152:     pExpr->op = TK_REGISTER;
                   74153:   }
                   74154:   return inReg;
                   74155: }
                   74156: 
                   74157: /*
                   74158: ** Return TRUE if pExpr is an constant expression that is appropriate
                   74159: ** for factoring out of a loop.  Appropriate expressions are:
                   74160: **
                   74161: **    *  Any expression that evaluates to two or more opcodes.
                   74162: **
                   74163: **    *  Any OP_Integer, OP_Real, OP_String, OP_Blob, OP_Null, 
                   74164: **       or OP_Variable that does not need to be placed in a 
                   74165: **       specific register.
                   74166: **
                   74167: ** There is no point in factoring out single-instruction constant
                   74168: ** expressions that need to be placed in a particular register.  
                   74169: ** We could factor them out, but then we would end up adding an
                   74170: ** OP_SCopy instruction to move the value into the correct register
                   74171: ** later.  We might as well just use the original instruction and
                   74172: ** avoid the OP_SCopy.
                   74173: */
                   74174: static int isAppropriateForFactoring(Expr *p){
                   74175:   if( !sqlite3ExprIsConstantNotJoin(p) ){
                   74176:     return 0;  /* Only constant expressions are appropriate for factoring */
                   74177:   }
                   74178:   if( (p->flags & EP_FixedDest)==0 ){
                   74179:     return 1;  /* Any constant without a fixed destination is appropriate */
                   74180:   }
                   74181:   while( p->op==TK_UPLUS ) p = p->pLeft;
                   74182:   switch( p->op ){
                   74183: #ifndef SQLITE_OMIT_BLOB_LITERAL
                   74184:     case TK_BLOB:
                   74185: #endif
                   74186:     case TK_VARIABLE:
                   74187:     case TK_INTEGER:
                   74188:     case TK_FLOAT:
                   74189:     case TK_NULL:
                   74190:     case TK_STRING: {
                   74191:       testcase( p->op==TK_BLOB );
                   74192:       testcase( p->op==TK_VARIABLE );
                   74193:       testcase( p->op==TK_INTEGER );
                   74194:       testcase( p->op==TK_FLOAT );
                   74195:       testcase( p->op==TK_NULL );
                   74196:       testcase( p->op==TK_STRING );
                   74197:       /* Single-instruction constants with a fixed destination are
                   74198:       ** better done in-line.  If we factor them, they will just end
                   74199:       ** up generating an OP_SCopy to move the value to the destination
                   74200:       ** register. */
                   74201:       return 0;
                   74202:     }
                   74203:     case TK_UMINUS: {
                   74204:       if( p->pLeft->op==TK_FLOAT || p->pLeft->op==TK_INTEGER ){
                   74205:         return 0;
                   74206:       }
                   74207:       break;
                   74208:     }
                   74209:     default: {
                   74210:       break;
                   74211:     }
                   74212:   }
                   74213:   return 1;
                   74214: }
                   74215: 
                   74216: /*
                   74217: ** If pExpr is a constant expression that is appropriate for
                   74218: ** factoring out of a loop, then evaluate the expression
                   74219: ** into a register and convert the expression into a TK_REGISTER
                   74220: ** expression.
                   74221: */
                   74222: static int evalConstExpr(Walker *pWalker, Expr *pExpr){
                   74223:   Parse *pParse = pWalker->pParse;
                   74224:   switch( pExpr->op ){
                   74225:     case TK_IN:
                   74226:     case TK_REGISTER: {
                   74227:       return WRC_Prune;
                   74228:     }
                   74229:     case TK_FUNCTION:
                   74230:     case TK_AGG_FUNCTION:
                   74231:     case TK_CONST_FUNC: {
                   74232:       /* The arguments to a function have a fixed destination.
                   74233:       ** Mark them this way to avoid generated unneeded OP_SCopy
                   74234:       ** instructions. 
                   74235:       */
                   74236:       ExprList *pList = pExpr->x.pList;
                   74237:       assert( !ExprHasProperty(pExpr, EP_xIsSelect) );
                   74238:       if( pList ){
                   74239:         int i = pList->nExpr;
                   74240:         struct ExprList_item *pItem = pList->a;
                   74241:         for(; i>0; i--, pItem++){
                   74242:           if( ALWAYS(pItem->pExpr) ) pItem->pExpr->flags |= EP_FixedDest;
                   74243:         }
                   74244:       }
                   74245:       break;
                   74246:     }
                   74247:   }
                   74248:   if( isAppropriateForFactoring(pExpr) ){
                   74249:     int r1 = ++pParse->nMem;
                   74250:     int r2;
                   74251:     r2 = sqlite3ExprCodeTarget(pParse, pExpr, r1);
                   74252:     if( NEVER(r1!=r2) ) sqlite3ReleaseTempReg(pParse, r1);
                   74253:     pExpr->op2 = pExpr->op;
                   74254:     pExpr->op = TK_REGISTER;
                   74255:     pExpr->iTable = r2;
                   74256:     return WRC_Prune;
                   74257:   }
                   74258:   return WRC_Continue;
                   74259: }
                   74260: 
                   74261: /*
                   74262: ** Preevaluate constant subexpressions within pExpr and store the
                   74263: ** results in registers.  Modify pExpr so that the constant subexpresions
                   74264: ** are TK_REGISTER opcodes that refer to the precomputed values.
                   74265: **
                   74266: ** This routine is a no-op if the jump to the cookie-check code has
                   74267: ** already occur.  Since the cookie-check jump is generated prior to
                   74268: ** any other serious processing, this check ensures that there is no
                   74269: ** way to accidently bypass the constant initializations.
                   74270: **
                   74271: ** This routine is also a no-op if the SQLITE_FactorOutConst optimization
                   74272: ** is disabled via the sqlite3_test_control(SQLITE_TESTCTRL_OPTIMIZATIONS)
                   74273: ** interface.  This allows test logic to verify that the same answer is
                   74274: ** obtained for queries regardless of whether or not constants are
                   74275: ** precomputed into registers or if they are inserted in-line.
                   74276: */
                   74277: SQLITE_PRIVATE void sqlite3ExprCodeConstants(Parse *pParse, Expr *pExpr){
                   74278:   Walker w;
                   74279:   if( pParse->cookieGoto ) return;
                   74280:   if( (pParse->db->flags & SQLITE_FactorOutConst)!=0 ) return;
                   74281:   w.xExprCallback = evalConstExpr;
                   74282:   w.xSelectCallback = 0;
                   74283:   w.pParse = pParse;
                   74284:   sqlite3WalkExpr(&w, pExpr);
                   74285: }
                   74286: 
                   74287: 
                   74288: /*
                   74289: ** Generate code that pushes the value of every element of the given
                   74290: ** expression list into a sequence of registers beginning at target.
                   74291: **
                   74292: ** Return the number of elements evaluated.
                   74293: */
                   74294: SQLITE_PRIVATE int sqlite3ExprCodeExprList(
                   74295:   Parse *pParse,     /* Parsing context */
                   74296:   ExprList *pList,   /* The expression list to be coded */
                   74297:   int target,        /* Where to write results */
                   74298:   int doHardCopy     /* Make a hard copy of every element */
                   74299: ){
                   74300:   struct ExprList_item *pItem;
                   74301:   int i, n;
                   74302:   assert( pList!=0 );
                   74303:   assert( target>0 );
                   74304:   assert( pParse->pVdbe!=0 );  /* Never gets this far otherwise */
                   74305:   n = pList->nExpr;
                   74306:   for(pItem=pList->a, i=0; i<n; i++, pItem++){
                   74307:     Expr *pExpr = pItem->pExpr;
                   74308:     int inReg = sqlite3ExprCodeTarget(pParse, pExpr, target+i);
                   74309:     if( inReg!=target+i ){
                   74310:       sqlite3VdbeAddOp2(pParse->pVdbe, doHardCopy ? OP_Copy : OP_SCopy,
                   74311:                         inReg, target+i);
                   74312:     }
                   74313:   }
                   74314:   return n;
                   74315: }
                   74316: 
                   74317: /*
                   74318: ** Generate code for a BETWEEN operator.
                   74319: **
                   74320: **    x BETWEEN y AND z
                   74321: **
                   74322: ** The above is equivalent to 
                   74323: **
                   74324: **    x>=y AND x<=z
                   74325: **
                   74326: ** Code it as such, taking care to do the common subexpression
                   74327: ** elementation of x.
                   74328: */
                   74329: static void exprCodeBetween(
                   74330:   Parse *pParse,    /* Parsing and code generating context */
                   74331:   Expr *pExpr,      /* The BETWEEN expression */
                   74332:   int dest,         /* Jump here if the jump is taken */
                   74333:   int jumpIfTrue,   /* Take the jump if the BETWEEN is true */
                   74334:   int jumpIfNull    /* Take the jump if the BETWEEN is NULL */
                   74335: ){
                   74336:   Expr exprAnd;     /* The AND operator in  x>=y AND x<=z  */
                   74337:   Expr compLeft;    /* The  x>=y  term */
                   74338:   Expr compRight;   /* The  x<=z  term */
                   74339:   Expr exprX;       /* The  x  subexpression */
                   74340:   int regFree1 = 0; /* Temporary use register */
                   74341: 
                   74342:   assert( !ExprHasProperty(pExpr, EP_xIsSelect) );
                   74343:   exprX = *pExpr->pLeft;
                   74344:   exprAnd.op = TK_AND;
                   74345:   exprAnd.pLeft = &compLeft;
                   74346:   exprAnd.pRight = &compRight;
                   74347:   compLeft.op = TK_GE;
                   74348:   compLeft.pLeft = &exprX;
                   74349:   compLeft.pRight = pExpr->x.pList->a[0].pExpr;
                   74350:   compRight.op = TK_LE;
                   74351:   compRight.pLeft = &exprX;
                   74352:   compRight.pRight = pExpr->x.pList->a[1].pExpr;
                   74353:   exprX.iTable = sqlite3ExprCodeTemp(pParse, &exprX, &regFree1);
                   74354:   exprX.op = TK_REGISTER;
                   74355:   if( jumpIfTrue ){
                   74356:     sqlite3ExprIfTrue(pParse, &exprAnd, dest, jumpIfNull);
                   74357:   }else{
                   74358:     sqlite3ExprIfFalse(pParse, &exprAnd, dest, jumpIfNull);
                   74359:   }
                   74360:   sqlite3ReleaseTempReg(pParse, regFree1);
                   74361: 
                   74362:   /* Ensure adequate test coverage */
                   74363:   testcase( jumpIfTrue==0 && jumpIfNull==0 && regFree1==0 );
                   74364:   testcase( jumpIfTrue==0 && jumpIfNull==0 && regFree1!=0 );
                   74365:   testcase( jumpIfTrue==0 && jumpIfNull!=0 && regFree1==0 );
                   74366:   testcase( jumpIfTrue==0 && jumpIfNull!=0 && regFree1!=0 );
                   74367:   testcase( jumpIfTrue!=0 && jumpIfNull==0 && regFree1==0 );
                   74368:   testcase( jumpIfTrue!=0 && jumpIfNull==0 && regFree1!=0 );
                   74369:   testcase( jumpIfTrue!=0 && jumpIfNull!=0 && regFree1==0 );
                   74370:   testcase( jumpIfTrue!=0 && jumpIfNull!=0 && regFree1!=0 );
                   74371: }
                   74372: 
                   74373: /*
                   74374: ** Generate code for a boolean expression such that a jump is made
                   74375: ** to the label "dest" if the expression is true but execution
                   74376: ** continues straight thru if the expression is false.
                   74377: **
                   74378: ** If the expression evaluates to NULL (neither true nor false), then
                   74379: ** take the jump if the jumpIfNull flag is SQLITE_JUMPIFNULL.
                   74380: **
                   74381: ** This code depends on the fact that certain token values (ex: TK_EQ)
                   74382: ** are the same as opcode values (ex: OP_Eq) that implement the corresponding
                   74383: ** operation.  Special comments in vdbe.c and the mkopcodeh.awk script in
                   74384: ** the make process cause these values to align.  Assert()s in the code
                   74385: ** below verify that the numbers are aligned correctly.
                   74386: */
                   74387: SQLITE_PRIVATE void sqlite3ExprIfTrue(Parse *pParse, Expr *pExpr, int dest, int jumpIfNull){
                   74388:   Vdbe *v = pParse->pVdbe;
                   74389:   int op = 0;
                   74390:   int regFree1 = 0;
                   74391:   int regFree2 = 0;
                   74392:   int r1, r2;
                   74393: 
                   74394:   assert( jumpIfNull==SQLITE_JUMPIFNULL || jumpIfNull==0 );
1.1.1.3 ! misho    74395:   if( NEVER(v==0) )     return;  /* Existence of VDBE checked by caller */
1.1       misho    74396:   if( NEVER(pExpr==0) ) return;  /* No way this can happen */
                   74397:   op = pExpr->op;
                   74398:   switch( op ){
                   74399:     case TK_AND: {
                   74400:       int d2 = sqlite3VdbeMakeLabel(v);
                   74401:       testcase( jumpIfNull==0 );
                   74402:       sqlite3ExprCachePush(pParse);
                   74403:       sqlite3ExprIfFalse(pParse, pExpr->pLeft, d2,jumpIfNull^SQLITE_JUMPIFNULL);
                   74404:       sqlite3ExprIfTrue(pParse, pExpr->pRight, dest, jumpIfNull);
                   74405:       sqlite3VdbeResolveLabel(v, d2);
                   74406:       sqlite3ExprCachePop(pParse, 1);
                   74407:       break;
                   74408:     }
                   74409:     case TK_OR: {
                   74410:       testcase( jumpIfNull==0 );
                   74411:       sqlite3ExprIfTrue(pParse, pExpr->pLeft, dest, jumpIfNull);
                   74412:       sqlite3ExprIfTrue(pParse, pExpr->pRight, dest, jumpIfNull);
                   74413:       break;
                   74414:     }
                   74415:     case TK_NOT: {
                   74416:       testcase( jumpIfNull==0 );
                   74417:       sqlite3ExprIfFalse(pParse, pExpr->pLeft, dest, jumpIfNull);
                   74418:       break;
                   74419:     }
                   74420:     case TK_LT:
                   74421:     case TK_LE:
                   74422:     case TK_GT:
                   74423:     case TK_GE:
                   74424:     case TK_NE:
                   74425:     case TK_EQ: {
                   74426:       assert( TK_LT==OP_Lt );
                   74427:       assert( TK_LE==OP_Le );
                   74428:       assert( TK_GT==OP_Gt );
                   74429:       assert( TK_GE==OP_Ge );
                   74430:       assert( TK_EQ==OP_Eq );
                   74431:       assert( TK_NE==OP_Ne );
                   74432:       testcase( op==TK_LT );
                   74433:       testcase( op==TK_LE );
                   74434:       testcase( op==TK_GT );
                   74435:       testcase( op==TK_GE );
                   74436:       testcase( op==TK_EQ );
                   74437:       testcase( op==TK_NE );
                   74438:       testcase( jumpIfNull==0 );
                   74439:       r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, &regFree1);
                   74440:       r2 = sqlite3ExprCodeTemp(pParse, pExpr->pRight, &regFree2);
                   74441:       codeCompare(pParse, pExpr->pLeft, pExpr->pRight, op,
                   74442:                   r1, r2, dest, jumpIfNull);
                   74443:       testcase( regFree1==0 );
                   74444:       testcase( regFree2==0 );
                   74445:       break;
                   74446:     }
                   74447:     case TK_IS:
                   74448:     case TK_ISNOT: {
                   74449:       testcase( op==TK_IS );
                   74450:       testcase( op==TK_ISNOT );
                   74451:       r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, &regFree1);
                   74452:       r2 = sqlite3ExprCodeTemp(pParse, pExpr->pRight, &regFree2);
                   74453:       op = (op==TK_IS) ? TK_EQ : TK_NE;
                   74454:       codeCompare(pParse, pExpr->pLeft, pExpr->pRight, op,
                   74455:                   r1, r2, dest, SQLITE_NULLEQ);
                   74456:       testcase( regFree1==0 );
                   74457:       testcase( regFree2==0 );
                   74458:       break;
                   74459:     }
                   74460:     case TK_ISNULL:
                   74461:     case TK_NOTNULL: {
                   74462:       assert( TK_ISNULL==OP_IsNull );
                   74463:       assert( TK_NOTNULL==OP_NotNull );
                   74464:       testcase( op==TK_ISNULL );
                   74465:       testcase( op==TK_NOTNULL );
                   74466:       r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, &regFree1);
                   74467:       sqlite3VdbeAddOp2(v, op, r1, dest);
                   74468:       testcase( regFree1==0 );
                   74469:       break;
                   74470:     }
                   74471:     case TK_BETWEEN: {
                   74472:       testcase( jumpIfNull==0 );
                   74473:       exprCodeBetween(pParse, pExpr, dest, 1, jumpIfNull);
                   74474:       break;
                   74475:     }
                   74476: #ifndef SQLITE_OMIT_SUBQUERY
                   74477:     case TK_IN: {
                   74478:       int destIfFalse = sqlite3VdbeMakeLabel(v);
                   74479:       int destIfNull = jumpIfNull ? dest : destIfFalse;
                   74480:       sqlite3ExprCodeIN(pParse, pExpr, destIfFalse, destIfNull);
                   74481:       sqlite3VdbeAddOp2(v, OP_Goto, 0, dest);
                   74482:       sqlite3VdbeResolveLabel(v, destIfFalse);
                   74483:       break;
                   74484:     }
                   74485: #endif
                   74486:     default: {
                   74487:       r1 = sqlite3ExprCodeTemp(pParse, pExpr, &regFree1);
                   74488:       sqlite3VdbeAddOp3(v, OP_If, r1, dest, jumpIfNull!=0);
                   74489:       testcase( regFree1==0 );
                   74490:       testcase( jumpIfNull==0 );
                   74491:       break;
                   74492:     }
                   74493:   }
                   74494:   sqlite3ReleaseTempReg(pParse, regFree1);
                   74495:   sqlite3ReleaseTempReg(pParse, regFree2);  
                   74496: }
                   74497: 
                   74498: /*
                   74499: ** Generate code for a boolean expression such that a jump is made
                   74500: ** to the label "dest" if the expression is false but execution
                   74501: ** continues straight thru if the expression is true.
                   74502: **
                   74503: ** If the expression evaluates to NULL (neither true nor false) then
                   74504: ** jump if jumpIfNull is SQLITE_JUMPIFNULL or fall through if jumpIfNull
                   74505: ** is 0.
                   74506: */
                   74507: SQLITE_PRIVATE void sqlite3ExprIfFalse(Parse *pParse, Expr *pExpr, int dest, int jumpIfNull){
                   74508:   Vdbe *v = pParse->pVdbe;
                   74509:   int op = 0;
                   74510:   int regFree1 = 0;
                   74511:   int regFree2 = 0;
                   74512:   int r1, r2;
                   74513: 
                   74514:   assert( jumpIfNull==SQLITE_JUMPIFNULL || jumpIfNull==0 );
1.1.1.3 ! misho    74515:   if( NEVER(v==0) ) return; /* Existence of VDBE checked by caller */
1.1       misho    74516:   if( pExpr==0 )    return;
                   74517: 
                   74518:   /* The value of pExpr->op and op are related as follows:
                   74519:   **
                   74520:   **       pExpr->op            op
                   74521:   **       ---------          ----------
                   74522:   **       TK_ISNULL          OP_NotNull
                   74523:   **       TK_NOTNULL         OP_IsNull
                   74524:   **       TK_NE              OP_Eq
                   74525:   **       TK_EQ              OP_Ne
                   74526:   **       TK_GT              OP_Le
                   74527:   **       TK_LE              OP_Gt
                   74528:   **       TK_GE              OP_Lt
                   74529:   **       TK_LT              OP_Ge
                   74530:   **
                   74531:   ** For other values of pExpr->op, op is undefined and unused.
                   74532:   ** The value of TK_ and OP_ constants are arranged such that we
                   74533:   ** can compute the mapping above using the following expression.
                   74534:   ** Assert()s verify that the computation is correct.
                   74535:   */
                   74536:   op = ((pExpr->op+(TK_ISNULL&1))^1)-(TK_ISNULL&1);
                   74537: 
                   74538:   /* Verify correct alignment of TK_ and OP_ constants
                   74539:   */
                   74540:   assert( pExpr->op!=TK_ISNULL || op==OP_NotNull );
                   74541:   assert( pExpr->op!=TK_NOTNULL || op==OP_IsNull );
                   74542:   assert( pExpr->op!=TK_NE || op==OP_Eq );
                   74543:   assert( pExpr->op!=TK_EQ || op==OP_Ne );
                   74544:   assert( pExpr->op!=TK_LT || op==OP_Ge );
                   74545:   assert( pExpr->op!=TK_LE || op==OP_Gt );
                   74546:   assert( pExpr->op!=TK_GT || op==OP_Le );
                   74547:   assert( pExpr->op!=TK_GE || op==OP_Lt );
                   74548: 
                   74549:   switch( pExpr->op ){
                   74550:     case TK_AND: {
                   74551:       testcase( jumpIfNull==0 );
                   74552:       sqlite3ExprIfFalse(pParse, pExpr->pLeft, dest, jumpIfNull);
                   74553:       sqlite3ExprIfFalse(pParse, pExpr->pRight, dest, jumpIfNull);
                   74554:       break;
                   74555:     }
                   74556:     case TK_OR: {
                   74557:       int d2 = sqlite3VdbeMakeLabel(v);
                   74558:       testcase( jumpIfNull==0 );
                   74559:       sqlite3ExprCachePush(pParse);
                   74560:       sqlite3ExprIfTrue(pParse, pExpr->pLeft, d2, jumpIfNull^SQLITE_JUMPIFNULL);
                   74561:       sqlite3ExprIfFalse(pParse, pExpr->pRight, dest, jumpIfNull);
                   74562:       sqlite3VdbeResolveLabel(v, d2);
                   74563:       sqlite3ExprCachePop(pParse, 1);
                   74564:       break;
                   74565:     }
                   74566:     case TK_NOT: {
                   74567:       testcase( jumpIfNull==0 );
                   74568:       sqlite3ExprIfTrue(pParse, pExpr->pLeft, dest, jumpIfNull);
                   74569:       break;
                   74570:     }
                   74571:     case TK_LT:
                   74572:     case TK_LE:
                   74573:     case TK_GT:
                   74574:     case TK_GE:
                   74575:     case TK_NE:
                   74576:     case TK_EQ: {
                   74577:       testcase( op==TK_LT );
                   74578:       testcase( op==TK_LE );
                   74579:       testcase( op==TK_GT );
                   74580:       testcase( op==TK_GE );
                   74581:       testcase( op==TK_EQ );
                   74582:       testcase( op==TK_NE );
                   74583:       testcase( jumpIfNull==0 );
                   74584:       r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, &regFree1);
                   74585:       r2 = sqlite3ExprCodeTemp(pParse, pExpr->pRight, &regFree2);
                   74586:       codeCompare(pParse, pExpr->pLeft, pExpr->pRight, op,
                   74587:                   r1, r2, dest, jumpIfNull);
                   74588:       testcase( regFree1==0 );
                   74589:       testcase( regFree2==0 );
                   74590:       break;
                   74591:     }
                   74592:     case TK_IS:
                   74593:     case TK_ISNOT: {
                   74594:       testcase( pExpr->op==TK_IS );
                   74595:       testcase( pExpr->op==TK_ISNOT );
                   74596:       r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, &regFree1);
                   74597:       r2 = sqlite3ExprCodeTemp(pParse, pExpr->pRight, &regFree2);
                   74598:       op = (pExpr->op==TK_IS) ? TK_NE : TK_EQ;
                   74599:       codeCompare(pParse, pExpr->pLeft, pExpr->pRight, op,
                   74600:                   r1, r2, dest, SQLITE_NULLEQ);
                   74601:       testcase( regFree1==0 );
                   74602:       testcase( regFree2==0 );
                   74603:       break;
                   74604:     }
                   74605:     case TK_ISNULL:
                   74606:     case TK_NOTNULL: {
                   74607:       testcase( op==TK_ISNULL );
                   74608:       testcase( op==TK_NOTNULL );
                   74609:       r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, &regFree1);
                   74610:       sqlite3VdbeAddOp2(v, op, r1, dest);
                   74611:       testcase( regFree1==0 );
                   74612:       break;
                   74613:     }
                   74614:     case TK_BETWEEN: {
                   74615:       testcase( jumpIfNull==0 );
                   74616:       exprCodeBetween(pParse, pExpr, dest, 0, jumpIfNull);
                   74617:       break;
                   74618:     }
                   74619: #ifndef SQLITE_OMIT_SUBQUERY
                   74620:     case TK_IN: {
                   74621:       if( jumpIfNull ){
                   74622:         sqlite3ExprCodeIN(pParse, pExpr, dest, dest);
                   74623:       }else{
                   74624:         int destIfNull = sqlite3VdbeMakeLabel(v);
                   74625:         sqlite3ExprCodeIN(pParse, pExpr, dest, destIfNull);
                   74626:         sqlite3VdbeResolveLabel(v, destIfNull);
                   74627:       }
                   74628:       break;
                   74629:     }
                   74630: #endif
                   74631:     default: {
                   74632:       r1 = sqlite3ExprCodeTemp(pParse, pExpr, &regFree1);
                   74633:       sqlite3VdbeAddOp3(v, OP_IfNot, r1, dest, jumpIfNull!=0);
                   74634:       testcase( regFree1==0 );
                   74635:       testcase( jumpIfNull==0 );
                   74636:       break;
                   74637:     }
                   74638:   }
                   74639:   sqlite3ReleaseTempReg(pParse, regFree1);
                   74640:   sqlite3ReleaseTempReg(pParse, regFree2);
                   74641: }
                   74642: 
                   74643: /*
                   74644: ** Do a deep comparison of two expression trees.  Return 0 if the two
                   74645: ** expressions are completely identical.  Return 1 if they differ only
                   74646: ** by a COLLATE operator at the top level.  Return 2 if there are differences
                   74647: ** other than the top-level COLLATE operator.
                   74648: **
                   74649: ** Sometimes this routine will return 2 even if the two expressions
                   74650: ** really are equivalent.  If we cannot prove that the expressions are
                   74651: ** identical, we return 2 just to be safe.  So if this routine
                   74652: ** returns 2, then you do not really know for certain if the two
                   74653: ** expressions are the same.  But if you get a 0 or 1 return, then you
                   74654: ** can be sure the expressions are the same.  In the places where
                   74655: ** this routine is used, it does not hurt to get an extra 2 - that
                   74656: ** just might result in some slightly slower code.  But returning
                   74657: ** an incorrect 0 or 1 could lead to a malfunction.
                   74658: */
                   74659: SQLITE_PRIVATE int sqlite3ExprCompare(Expr *pA, Expr *pB){
                   74660:   if( pA==0||pB==0 ){
                   74661:     return pB==pA ? 0 : 2;
                   74662:   }
                   74663:   assert( !ExprHasAnyProperty(pA, EP_TokenOnly|EP_Reduced) );
                   74664:   assert( !ExprHasAnyProperty(pB, EP_TokenOnly|EP_Reduced) );
                   74665:   if( ExprHasProperty(pA, EP_xIsSelect) || ExprHasProperty(pB, EP_xIsSelect) ){
                   74666:     return 2;
                   74667:   }
                   74668:   if( (pA->flags & EP_Distinct)!=(pB->flags & EP_Distinct) ) return 2;
                   74669:   if( pA->op!=pB->op ) return 2;
                   74670:   if( sqlite3ExprCompare(pA->pLeft, pB->pLeft) ) return 2;
                   74671:   if( sqlite3ExprCompare(pA->pRight, pB->pRight) ) return 2;
                   74672:   if( sqlite3ExprListCompare(pA->x.pList, pB->x.pList) ) return 2;
                   74673:   if( pA->iTable!=pB->iTable || pA->iColumn!=pB->iColumn ) return 2;
                   74674:   if( ExprHasProperty(pA, EP_IntValue) ){
                   74675:     if( !ExprHasProperty(pB, EP_IntValue) || pA->u.iValue!=pB->u.iValue ){
                   74676:       return 2;
                   74677:     }
                   74678:   }else if( pA->op!=TK_COLUMN && pA->u.zToken ){
                   74679:     if( ExprHasProperty(pB, EP_IntValue) || NEVER(pB->u.zToken==0) ) return 2;
                   74680:     if( sqlite3StrICmp(pA->u.zToken,pB->u.zToken)!=0 ){
                   74681:       return 2;
                   74682:     }
                   74683:   }
                   74684:   if( (pA->flags & EP_ExpCollate)!=(pB->flags & EP_ExpCollate) ) return 1;
                   74685:   if( (pA->flags & EP_ExpCollate)!=0 && pA->pColl!=pB->pColl ) return 2;
                   74686:   return 0;
                   74687: }
                   74688: 
                   74689: /*
                   74690: ** Compare two ExprList objects.  Return 0 if they are identical and 
                   74691: ** non-zero if they differ in any way.
                   74692: **
                   74693: ** This routine might return non-zero for equivalent ExprLists.  The
                   74694: ** only consequence will be disabled optimizations.  But this routine
                   74695: ** must never return 0 if the two ExprList objects are different, or
                   74696: ** a malfunction will result.
                   74697: **
                   74698: ** Two NULL pointers are considered to be the same.  But a NULL pointer
                   74699: ** always differs from a non-NULL pointer.
                   74700: */
                   74701: SQLITE_PRIVATE int sqlite3ExprListCompare(ExprList *pA, ExprList *pB){
                   74702:   int i;
                   74703:   if( pA==0 && pB==0 ) return 0;
                   74704:   if( pA==0 || pB==0 ) return 1;
                   74705:   if( pA->nExpr!=pB->nExpr ) return 1;
                   74706:   for(i=0; i<pA->nExpr; i++){
                   74707:     Expr *pExprA = pA->a[i].pExpr;
                   74708:     Expr *pExprB = pB->a[i].pExpr;
                   74709:     if( pA->a[i].sortOrder!=pB->a[i].sortOrder ) return 1;
                   74710:     if( sqlite3ExprCompare(pExprA, pExprB) ) return 1;
                   74711:   }
                   74712:   return 0;
                   74713: }
                   74714: 
                   74715: /*
                   74716: ** Add a new element to the pAggInfo->aCol[] array.  Return the index of
                   74717: ** the new element.  Return a negative number if malloc fails.
                   74718: */
                   74719: static int addAggInfoColumn(sqlite3 *db, AggInfo *pInfo){
                   74720:   int i;
                   74721:   pInfo->aCol = sqlite3ArrayAllocate(
                   74722:        db,
                   74723:        pInfo->aCol,
                   74724:        sizeof(pInfo->aCol[0]),
                   74725:        3,
                   74726:        &pInfo->nColumn,
                   74727:        &pInfo->nColumnAlloc,
                   74728:        &i
                   74729:   );
                   74730:   return i;
                   74731: }    
                   74732: 
                   74733: /*
                   74734: ** Add a new element to the pAggInfo->aFunc[] array.  Return the index of
                   74735: ** the new element.  Return a negative number if malloc fails.
                   74736: */
                   74737: static int addAggInfoFunc(sqlite3 *db, AggInfo *pInfo){
                   74738:   int i;
                   74739:   pInfo->aFunc = sqlite3ArrayAllocate(
                   74740:        db, 
                   74741:        pInfo->aFunc,
                   74742:        sizeof(pInfo->aFunc[0]),
                   74743:        3,
                   74744:        &pInfo->nFunc,
                   74745:        &pInfo->nFuncAlloc,
                   74746:        &i
                   74747:   );
                   74748:   return i;
                   74749: }    
                   74750: 
                   74751: /*
                   74752: ** This is the xExprCallback for a tree walker.  It is used to
                   74753: ** implement sqlite3ExprAnalyzeAggregates().  See sqlite3ExprAnalyzeAggregates
                   74754: ** for additional information.
                   74755: */
                   74756: static int analyzeAggregate(Walker *pWalker, Expr *pExpr){
                   74757:   int i;
                   74758:   NameContext *pNC = pWalker->u.pNC;
                   74759:   Parse *pParse = pNC->pParse;
                   74760:   SrcList *pSrcList = pNC->pSrcList;
                   74761:   AggInfo *pAggInfo = pNC->pAggInfo;
                   74762: 
                   74763:   switch( pExpr->op ){
                   74764:     case TK_AGG_COLUMN:
                   74765:     case TK_COLUMN: {
                   74766:       testcase( pExpr->op==TK_AGG_COLUMN );
                   74767:       testcase( pExpr->op==TK_COLUMN );
                   74768:       /* Check to see if the column is in one of the tables in the FROM
                   74769:       ** clause of the aggregate query */
                   74770:       if( ALWAYS(pSrcList!=0) ){
                   74771:         struct SrcList_item *pItem = pSrcList->a;
                   74772:         for(i=0; i<pSrcList->nSrc; i++, pItem++){
                   74773:           struct AggInfo_col *pCol;
                   74774:           assert( !ExprHasAnyProperty(pExpr, EP_TokenOnly|EP_Reduced) );
                   74775:           if( pExpr->iTable==pItem->iCursor ){
                   74776:             /* If we reach this point, it means that pExpr refers to a table
                   74777:             ** that is in the FROM clause of the aggregate query.  
                   74778:             **
                   74779:             ** Make an entry for the column in pAggInfo->aCol[] if there
                   74780:             ** is not an entry there already.
                   74781:             */
                   74782:             int k;
                   74783:             pCol = pAggInfo->aCol;
                   74784:             for(k=0; k<pAggInfo->nColumn; k++, pCol++){
                   74785:               if( pCol->iTable==pExpr->iTable &&
                   74786:                   pCol->iColumn==pExpr->iColumn ){
                   74787:                 break;
                   74788:               }
                   74789:             }
                   74790:             if( (k>=pAggInfo->nColumn)
                   74791:              && (k = addAggInfoColumn(pParse->db, pAggInfo))>=0 
                   74792:             ){
                   74793:               pCol = &pAggInfo->aCol[k];
                   74794:               pCol->pTab = pExpr->pTab;
                   74795:               pCol->iTable = pExpr->iTable;
                   74796:               pCol->iColumn = pExpr->iColumn;
                   74797:               pCol->iMem = ++pParse->nMem;
                   74798:               pCol->iSorterColumn = -1;
                   74799:               pCol->pExpr = pExpr;
                   74800:               if( pAggInfo->pGroupBy ){
                   74801:                 int j, n;
                   74802:                 ExprList *pGB = pAggInfo->pGroupBy;
                   74803:                 struct ExprList_item *pTerm = pGB->a;
                   74804:                 n = pGB->nExpr;
                   74805:                 for(j=0; j<n; j++, pTerm++){
                   74806:                   Expr *pE = pTerm->pExpr;
                   74807:                   if( pE->op==TK_COLUMN && pE->iTable==pExpr->iTable &&
                   74808:                       pE->iColumn==pExpr->iColumn ){
                   74809:                     pCol->iSorterColumn = j;
                   74810:                     break;
                   74811:                   }
                   74812:                 }
                   74813:               }
                   74814:               if( pCol->iSorterColumn<0 ){
                   74815:                 pCol->iSorterColumn = pAggInfo->nSortingColumn++;
                   74816:               }
                   74817:             }
                   74818:             /* There is now an entry for pExpr in pAggInfo->aCol[] (either
                   74819:             ** because it was there before or because we just created it).
                   74820:             ** Convert the pExpr to be a TK_AGG_COLUMN referring to that
                   74821:             ** pAggInfo->aCol[] entry.
                   74822:             */
                   74823:             ExprSetIrreducible(pExpr);
                   74824:             pExpr->pAggInfo = pAggInfo;
                   74825:             pExpr->op = TK_AGG_COLUMN;
                   74826:             pExpr->iAgg = (i16)k;
                   74827:             break;
                   74828:           } /* endif pExpr->iTable==pItem->iCursor */
                   74829:         } /* end loop over pSrcList */
                   74830:       }
                   74831:       return WRC_Prune;
                   74832:     }
                   74833:     case TK_AGG_FUNCTION: {
                   74834:       /* The pNC->nDepth==0 test causes aggregate functions in subqueries
                   74835:       ** to be ignored */
                   74836:       if( pNC->nDepth==0 ){
                   74837:         /* Check to see if pExpr is a duplicate of another aggregate 
                   74838:         ** function that is already in the pAggInfo structure
                   74839:         */
                   74840:         struct AggInfo_func *pItem = pAggInfo->aFunc;
                   74841:         for(i=0; i<pAggInfo->nFunc; i++, pItem++){
                   74842:           if( sqlite3ExprCompare(pItem->pExpr, pExpr)==0 ){
                   74843:             break;
                   74844:           }
                   74845:         }
                   74846:         if( i>=pAggInfo->nFunc ){
                   74847:           /* pExpr is original.  Make a new entry in pAggInfo->aFunc[]
                   74848:           */
                   74849:           u8 enc = ENC(pParse->db);
                   74850:           i = addAggInfoFunc(pParse->db, pAggInfo);
                   74851:           if( i>=0 ){
                   74852:             assert( !ExprHasProperty(pExpr, EP_xIsSelect) );
                   74853:             pItem = &pAggInfo->aFunc[i];
                   74854:             pItem->pExpr = pExpr;
                   74855:             pItem->iMem = ++pParse->nMem;
                   74856:             assert( !ExprHasProperty(pExpr, EP_IntValue) );
                   74857:             pItem->pFunc = sqlite3FindFunction(pParse->db,
                   74858:                    pExpr->u.zToken, sqlite3Strlen30(pExpr->u.zToken),
                   74859:                    pExpr->x.pList ? pExpr->x.pList->nExpr : 0, enc, 0);
                   74860:             if( pExpr->flags & EP_Distinct ){
                   74861:               pItem->iDistinct = pParse->nTab++;
                   74862:             }else{
                   74863:               pItem->iDistinct = -1;
                   74864:             }
                   74865:           }
                   74866:         }
                   74867:         /* Make pExpr point to the appropriate pAggInfo->aFunc[] entry
                   74868:         */
                   74869:         assert( !ExprHasAnyProperty(pExpr, EP_TokenOnly|EP_Reduced) );
                   74870:         ExprSetIrreducible(pExpr);
                   74871:         pExpr->iAgg = (i16)i;
                   74872:         pExpr->pAggInfo = pAggInfo;
                   74873:         return WRC_Prune;
                   74874:       }
                   74875:     }
                   74876:   }
                   74877:   return WRC_Continue;
                   74878: }
                   74879: static int analyzeAggregatesInSelect(Walker *pWalker, Select *pSelect){
                   74880:   NameContext *pNC = pWalker->u.pNC;
                   74881:   if( pNC->nDepth==0 ){
                   74882:     pNC->nDepth++;
                   74883:     sqlite3WalkSelect(pWalker, pSelect);
                   74884:     pNC->nDepth--;
                   74885:     return WRC_Prune;
                   74886:   }else{
                   74887:     return WRC_Continue;
                   74888:   }
                   74889: }
                   74890: 
                   74891: /*
                   74892: ** Analyze the given expression looking for aggregate functions and
                   74893: ** for variables that need to be added to the pParse->aAgg[] array.
                   74894: ** Make additional entries to the pParse->aAgg[] array as necessary.
                   74895: **
                   74896: ** This routine should only be called after the expression has been
                   74897: ** analyzed by sqlite3ResolveExprNames().
                   74898: */
                   74899: SQLITE_PRIVATE void sqlite3ExprAnalyzeAggregates(NameContext *pNC, Expr *pExpr){
                   74900:   Walker w;
                   74901:   w.xExprCallback = analyzeAggregate;
                   74902:   w.xSelectCallback = analyzeAggregatesInSelect;
                   74903:   w.u.pNC = pNC;
                   74904:   assert( pNC->pSrcList!=0 );
                   74905:   sqlite3WalkExpr(&w, pExpr);
                   74906: }
                   74907: 
                   74908: /*
                   74909: ** Call sqlite3ExprAnalyzeAggregates() for every expression in an
                   74910: ** expression list.  Return the number of errors.
                   74911: **
                   74912: ** If an error is found, the analysis is cut short.
                   74913: */
                   74914: SQLITE_PRIVATE void sqlite3ExprAnalyzeAggList(NameContext *pNC, ExprList *pList){
                   74915:   struct ExprList_item *pItem;
                   74916:   int i;
                   74917:   if( pList ){
                   74918:     for(pItem=pList->a, i=0; i<pList->nExpr; i++, pItem++){
                   74919:       sqlite3ExprAnalyzeAggregates(pNC, pItem->pExpr);
                   74920:     }
                   74921:   }
                   74922: }
                   74923: 
                   74924: /*
                   74925: ** Allocate a single new register for use to hold some intermediate result.
                   74926: */
                   74927: SQLITE_PRIVATE int sqlite3GetTempReg(Parse *pParse){
                   74928:   if( pParse->nTempReg==0 ){
                   74929:     return ++pParse->nMem;
                   74930:   }
                   74931:   return pParse->aTempReg[--pParse->nTempReg];
                   74932: }
                   74933: 
                   74934: /*
                   74935: ** Deallocate a register, making available for reuse for some other
                   74936: ** purpose.
                   74937: **
                   74938: ** If a register is currently being used by the column cache, then
                   74939: ** the dallocation is deferred until the column cache line that uses
                   74940: ** the register becomes stale.
                   74941: */
                   74942: SQLITE_PRIVATE void sqlite3ReleaseTempReg(Parse *pParse, int iReg){
                   74943:   if( iReg && pParse->nTempReg<ArraySize(pParse->aTempReg) ){
                   74944:     int i;
                   74945:     struct yColCache *p;
                   74946:     for(i=0, p=pParse->aColCache; i<SQLITE_N_COLCACHE; i++, p++){
                   74947:       if( p->iReg==iReg ){
                   74948:         p->tempReg = 1;
                   74949:         return;
                   74950:       }
                   74951:     }
                   74952:     pParse->aTempReg[pParse->nTempReg++] = iReg;
                   74953:   }
                   74954: }
                   74955: 
                   74956: /*
                   74957: ** Allocate or deallocate a block of nReg consecutive registers
                   74958: */
                   74959: SQLITE_PRIVATE int sqlite3GetTempRange(Parse *pParse, int nReg){
                   74960:   int i, n;
                   74961:   i = pParse->iRangeReg;
                   74962:   n = pParse->nRangeReg;
                   74963:   if( nReg<=n ){
                   74964:     assert( !usedAsColumnCache(pParse, i, i+n-1) );
                   74965:     pParse->iRangeReg += nReg;
                   74966:     pParse->nRangeReg -= nReg;
                   74967:   }else{
                   74968:     i = pParse->nMem+1;
                   74969:     pParse->nMem += nReg;
                   74970:   }
                   74971:   return i;
                   74972: }
                   74973: SQLITE_PRIVATE void sqlite3ReleaseTempRange(Parse *pParse, int iReg, int nReg){
                   74974:   sqlite3ExprCacheRemove(pParse, iReg, nReg);
                   74975:   if( nReg>pParse->nRangeReg ){
                   74976:     pParse->nRangeReg = nReg;
                   74977:     pParse->iRangeReg = iReg;
                   74978:   }
                   74979: }
                   74980: 
                   74981: /************** End of expr.c ************************************************/
                   74982: /************** Begin file alter.c *******************************************/
                   74983: /*
                   74984: ** 2005 February 15
                   74985: **
                   74986: ** The author disclaims copyright to this source code.  In place of
                   74987: ** a legal notice, here is a blessing:
                   74988: **
                   74989: **    May you do good and not evil.
                   74990: **    May you find forgiveness for yourself and forgive others.
                   74991: **    May you share freely, never taking more than you give.
                   74992: **
                   74993: *************************************************************************
                   74994: ** This file contains C code routines that used to generate VDBE code
                   74995: ** that implements the ALTER TABLE command.
                   74996: */
                   74997: 
                   74998: /*
                   74999: ** The code in this file only exists if we are not omitting the
                   75000: ** ALTER TABLE logic from the build.
                   75001: */
                   75002: #ifndef SQLITE_OMIT_ALTERTABLE
                   75003: 
                   75004: 
                   75005: /*
                   75006: ** This function is used by SQL generated to implement the 
                   75007: ** ALTER TABLE command. The first argument is the text of a CREATE TABLE or
                   75008: ** CREATE INDEX command. The second is a table name. The table name in 
                   75009: ** the CREATE TABLE or CREATE INDEX statement is replaced with the third
                   75010: ** argument and the result returned. Examples:
                   75011: **
                   75012: ** sqlite_rename_table('CREATE TABLE abc(a, b, c)', 'def')
                   75013: **     -> 'CREATE TABLE def(a, b, c)'
                   75014: **
                   75015: ** sqlite_rename_table('CREATE INDEX i ON abc(a)', 'def')
                   75016: **     -> 'CREATE INDEX i ON def(a, b, c)'
                   75017: */
                   75018: static void renameTableFunc(
                   75019:   sqlite3_context *context,
                   75020:   int NotUsed,
                   75021:   sqlite3_value **argv
                   75022: ){
                   75023:   unsigned char const *zSql = sqlite3_value_text(argv[0]);
                   75024:   unsigned char const *zTableName = sqlite3_value_text(argv[1]);
                   75025: 
                   75026:   int token;
                   75027:   Token tname;
                   75028:   unsigned char const *zCsr = zSql;
                   75029:   int len = 0;
                   75030:   char *zRet;
                   75031: 
                   75032:   sqlite3 *db = sqlite3_context_db_handle(context);
                   75033: 
                   75034:   UNUSED_PARAMETER(NotUsed);
                   75035: 
                   75036:   /* The principle used to locate the table name in the CREATE TABLE 
                   75037:   ** statement is that the table name is the first non-space token that
                   75038:   ** is immediately followed by a TK_LP or TK_USING token.
                   75039:   */
                   75040:   if( zSql ){
                   75041:     do {
                   75042:       if( !*zCsr ){
                   75043:         /* Ran out of input before finding an opening bracket. Return NULL. */
                   75044:         return;
                   75045:       }
                   75046: 
                   75047:       /* Store the token that zCsr points to in tname. */
                   75048:       tname.z = (char*)zCsr;
                   75049:       tname.n = len;
                   75050: 
                   75051:       /* Advance zCsr to the next token. Store that token type in 'token',
                   75052:       ** and its length in 'len' (to be used next iteration of this loop).
                   75053:       */
                   75054:       do {
                   75055:         zCsr += len;
                   75056:         len = sqlite3GetToken(zCsr, &token);
                   75057:       } while( token==TK_SPACE );
                   75058:       assert( len>0 );
                   75059:     } while( token!=TK_LP && token!=TK_USING );
                   75060: 
                   75061:     zRet = sqlite3MPrintf(db, "%.*s\"%w\"%s", ((u8*)tname.z) - zSql, zSql, 
                   75062:        zTableName, tname.z+tname.n);
                   75063:     sqlite3_result_text(context, zRet, -1, SQLITE_DYNAMIC);
                   75064:   }
                   75065: }
                   75066: 
                   75067: /*
                   75068: ** This C function implements an SQL user function that is used by SQL code
                   75069: ** generated by the ALTER TABLE ... RENAME command to modify the definition
                   75070: ** of any foreign key constraints that use the table being renamed as the 
                   75071: ** parent table. It is passed three arguments:
                   75072: **
                   75073: **   1) The complete text of the CREATE TABLE statement being modified,
                   75074: **   2) The old name of the table being renamed, and
                   75075: **   3) The new name of the table being renamed.
                   75076: **
                   75077: ** It returns the new CREATE TABLE statement. For example:
                   75078: **
                   75079: **   sqlite_rename_parent('CREATE TABLE t1(a REFERENCES t2)', 't2', 't3')
                   75080: **       -> 'CREATE TABLE t1(a REFERENCES t3)'
                   75081: */
                   75082: #ifndef SQLITE_OMIT_FOREIGN_KEY
                   75083: static void renameParentFunc(
                   75084:   sqlite3_context *context,
                   75085:   int NotUsed,
                   75086:   sqlite3_value **argv
                   75087: ){
                   75088:   sqlite3 *db = sqlite3_context_db_handle(context);
                   75089:   char *zOutput = 0;
                   75090:   char *zResult;
                   75091:   unsigned char const *zInput = sqlite3_value_text(argv[0]);
                   75092:   unsigned char const *zOld = sqlite3_value_text(argv[1]);
                   75093:   unsigned char const *zNew = sqlite3_value_text(argv[2]);
                   75094: 
                   75095:   unsigned const char *z;         /* Pointer to token */
                   75096:   int n;                          /* Length of token z */
                   75097:   int token;                      /* Type of token */
                   75098: 
                   75099:   UNUSED_PARAMETER(NotUsed);
                   75100:   for(z=zInput; *z; z=z+n){
                   75101:     n = sqlite3GetToken(z, &token);
                   75102:     if( token==TK_REFERENCES ){
                   75103:       char *zParent;
                   75104:       do {
                   75105:         z += n;
                   75106:         n = sqlite3GetToken(z, &token);
                   75107:       }while( token==TK_SPACE );
                   75108: 
                   75109:       zParent = sqlite3DbStrNDup(db, (const char *)z, n);
                   75110:       if( zParent==0 ) break;
                   75111:       sqlite3Dequote(zParent);
                   75112:       if( 0==sqlite3StrICmp((const char *)zOld, zParent) ){
                   75113:         char *zOut = sqlite3MPrintf(db, "%s%.*s\"%w\"", 
                   75114:             (zOutput?zOutput:""), z-zInput, zInput, (const char *)zNew
                   75115:         );
                   75116:         sqlite3DbFree(db, zOutput);
                   75117:         zOutput = zOut;
                   75118:         zInput = &z[n];
                   75119:       }
                   75120:       sqlite3DbFree(db, zParent);
                   75121:     }
                   75122:   }
                   75123: 
                   75124:   zResult = sqlite3MPrintf(db, "%s%s", (zOutput?zOutput:""), zInput), 
                   75125:   sqlite3_result_text(context, zResult, -1, SQLITE_DYNAMIC);
                   75126:   sqlite3DbFree(db, zOutput);
                   75127: }
                   75128: #endif
                   75129: 
                   75130: #ifndef SQLITE_OMIT_TRIGGER
                   75131: /* This function is used by SQL generated to implement the
                   75132: ** ALTER TABLE command. The first argument is the text of a CREATE TRIGGER 
                   75133: ** statement. The second is a table name. The table name in the CREATE 
                   75134: ** TRIGGER statement is replaced with the third argument and the result 
                   75135: ** returned. This is analagous to renameTableFunc() above, except for CREATE
                   75136: ** TRIGGER, not CREATE INDEX and CREATE TABLE.
                   75137: */
                   75138: static void renameTriggerFunc(
                   75139:   sqlite3_context *context,
                   75140:   int NotUsed,
                   75141:   sqlite3_value **argv
                   75142: ){
                   75143:   unsigned char const *zSql = sqlite3_value_text(argv[0]);
                   75144:   unsigned char const *zTableName = sqlite3_value_text(argv[1]);
                   75145: 
                   75146:   int token;
                   75147:   Token tname;
                   75148:   int dist = 3;
                   75149:   unsigned char const *zCsr = zSql;
                   75150:   int len = 0;
                   75151:   char *zRet;
                   75152:   sqlite3 *db = sqlite3_context_db_handle(context);
                   75153: 
                   75154:   UNUSED_PARAMETER(NotUsed);
                   75155: 
                   75156:   /* The principle used to locate the table name in the CREATE TRIGGER 
                   75157:   ** statement is that the table name is the first token that is immediatedly
                   75158:   ** preceded by either TK_ON or TK_DOT and immediatedly followed by one
                   75159:   ** of TK_WHEN, TK_BEGIN or TK_FOR.
                   75160:   */
                   75161:   if( zSql ){
                   75162:     do {
                   75163: 
                   75164:       if( !*zCsr ){
                   75165:         /* Ran out of input before finding the table name. Return NULL. */
                   75166:         return;
                   75167:       }
                   75168: 
                   75169:       /* Store the token that zCsr points to in tname. */
                   75170:       tname.z = (char*)zCsr;
                   75171:       tname.n = len;
                   75172: 
                   75173:       /* Advance zCsr to the next token. Store that token type in 'token',
                   75174:       ** and its length in 'len' (to be used next iteration of this loop).
                   75175:       */
                   75176:       do {
                   75177:         zCsr += len;
                   75178:         len = sqlite3GetToken(zCsr, &token);
                   75179:       }while( token==TK_SPACE );
                   75180:       assert( len>0 );
                   75181: 
                   75182:       /* Variable 'dist' stores the number of tokens read since the most
                   75183:       ** recent TK_DOT or TK_ON. This means that when a WHEN, FOR or BEGIN 
                   75184:       ** token is read and 'dist' equals 2, the condition stated above
                   75185:       ** to be met.
                   75186:       **
                   75187:       ** Note that ON cannot be a database, table or column name, so
                   75188:       ** there is no need to worry about syntax like 
                   75189:       ** "CREATE TRIGGER ... ON ON.ON BEGIN ..." etc.
                   75190:       */
                   75191:       dist++;
                   75192:       if( token==TK_DOT || token==TK_ON ){
                   75193:         dist = 0;
                   75194:       }
                   75195:     } while( dist!=2 || (token!=TK_WHEN && token!=TK_FOR && token!=TK_BEGIN) );
                   75196: 
                   75197:     /* Variable tname now contains the token that is the old table-name
                   75198:     ** in the CREATE TRIGGER statement.
                   75199:     */
                   75200:     zRet = sqlite3MPrintf(db, "%.*s\"%w\"%s", ((u8*)tname.z) - zSql, zSql, 
                   75201:        zTableName, tname.z+tname.n);
                   75202:     sqlite3_result_text(context, zRet, -1, SQLITE_DYNAMIC);
                   75203:   }
                   75204: }
                   75205: #endif   /* !SQLITE_OMIT_TRIGGER */
                   75206: 
                   75207: /*
                   75208: ** Register built-in functions used to help implement ALTER TABLE
                   75209: */
                   75210: SQLITE_PRIVATE void sqlite3AlterFunctions(void){
                   75211:   static SQLITE_WSD FuncDef aAlterTableFuncs[] = {
                   75212:     FUNCTION(sqlite_rename_table,   2, 0, 0, renameTableFunc),
                   75213: #ifndef SQLITE_OMIT_TRIGGER
                   75214:     FUNCTION(sqlite_rename_trigger, 2, 0, 0, renameTriggerFunc),
                   75215: #endif
                   75216: #ifndef SQLITE_OMIT_FOREIGN_KEY
                   75217:     FUNCTION(sqlite_rename_parent,  3, 0, 0, renameParentFunc),
                   75218: #endif
                   75219:   };
                   75220:   int i;
                   75221:   FuncDefHash *pHash = &GLOBAL(FuncDefHash, sqlite3GlobalFunctions);
                   75222:   FuncDef *aFunc = (FuncDef*)&GLOBAL(FuncDef, aAlterTableFuncs);
                   75223: 
                   75224:   for(i=0; i<ArraySize(aAlterTableFuncs); i++){
                   75225:     sqlite3FuncDefInsert(pHash, &aFunc[i]);
                   75226:   }
                   75227: }
                   75228: 
                   75229: /*
                   75230: ** This function is used to create the text of expressions of the form:
                   75231: **
                   75232: **   name=<constant1> OR name=<constant2> OR ...
                   75233: **
                   75234: ** If argument zWhere is NULL, then a pointer string containing the text 
                   75235: ** "name=<constant>" is returned, where <constant> is the quoted version
                   75236: ** of the string passed as argument zConstant. The returned buffer is
                   75237: ** allocated using sqlite3DbMalloc(). It is the responsibility of the
                   75238: ** caller to ensure that it is eventually freed.
                   75239: **
                   75240: ** If argument zWhere is not NULL, then the string returned is 
                   75241: ** "<where> OR name=<constant>", where <where> is the contents of zWhere.
                   75242: ** In this case zWhere is passed to sqlite3DbFree() before returning.
                   75243: ** 
                   75244: */
                   75245: static char *whereOrName(sqlite3 *db, char *zWhere, char *zConstant){
                   75246:   char *zNew;
                   75247:   if( !zWhere ){
                   75248:     zNew = sqlite3MPrintf(db, "name=%Q", zConstant);
                   75249:   }else{
                   75250:     zNew = sqlite3MPrintf(db, "%s OR name=%Q", zWhere, zConstant);
                   75251:     sqlite3DbFree(db, zWhere);
                   75252:   }
                   75253:   return zNew;
                   75254: }
                   75255: 
                   75256: #if !defined(SQLITE_OMIT_FOREIGN_KEY) && !defined(SQLITE_OMIT_TRIGGER)
                   75257: /*
                   75258: ** Generate the text of a WHERE expression which can be used to select all
                   75259: ** tables that have foreign key constraints that refer to table pTab (i.e.
                   75260: ** constraints for which pTab is the parent table) from the sqlite_master
                   75261: ** table.
                   75262: */
                   75263: static char *whereForeignKeys(Parse *pParse, Table *pTab){
                   75264:   FKey *p;
                   75265:   char *zWhere = 0;
                   75266:   for(p=sqlite3FkReferences(pTab); p; p=p->pNextTo){
                   75267:     zWhere = whereOrName(pParse->db, zWhere, p->pFrom->zName);
                   75268:   }
                   75269:   return zWhere;
                   75270: }
                   75271: #endif
                   75272: 
                   75273: /*
                   75274: ** Generate the text of a WHERE expression which can be used to select all
                   75275: ** temporary triggers on table pTab from the sqlite_temp_master table. If
                   75276: ** table pTab has no temporary triggers, or is itself stored in the 
                   75277: ** temporary database, NULL is returned.
                   75278: */
                   75279: static char *whereTempTriggers(Parse *pParse, Table *pTab){
                   75280:   Trigger *pTrig;
                   75281:   char *zWhere = 0;
                   75282:   const Schema *pTempSchema = pParse->db->aDb[1].pSchema; /* Temp db schema */
                   75283: 
                   75284:   /* If the table is not located in the temp-db (in which case NULL is 
                   75285:   ** returned, loop through the tables list of triggers. For each trigger
                   75286:   ** that is not part of the temp-db schema, add a clause to the WHERE 
                   75287:   ** expression being built up in zWhere.
                   75288:   */
                   75289:   if( pTab->pSchema!=pTempSchema ){
                   75290:     sqlite3 *db = pParse->db;
                   75291:     for(pTrig=sqlite3TriggerList(pParse, pTab); pTrig; pTrig=pTrig->pNext){
                   75292:       if( pTrig->pSchema==pTempSchema ){
                   75293:         zWhere = whereOrName(db, zWhere, pTrig->zName);
                   75294:       }
                   75295:     }
                   75296:   }
                   75297:   if( zWhere ){
                   75298:     char *zNew = sqlite3MPrintf(pParse->db, "type='trigger' AND (%s)", zWhere);
                   75299:     sqlite3DbFree(pParse->db, zWhere);
                   75300:     zWhere = zNew;
                   75301:   }
                   75302:   return zWhere;
                   75303: }
                   75304: 
                   75305: /*
                   75306: ** Generate code to drop and reload the internal representation of table
                   75307: ** pTab from the database, including triggers and temporary triggers.
                   75308: ** Argument zName is the name of the table in the database schema at
                   75309: ** the time the generated code is executed. This can be different from
                   75310: ** pTab->zName if this function is being called to code part of an 
                   75311: ** "ALTER TABLE RENAME TO" statement.
                   75312: */
                   75313: static void reloadTableSchema(Parse *pParse, Table *pTab, const char *zName){
                   75314:   Vdbe *v;
                   75315:   char *zWhere;
                   75316:   int iDb;                   /* Index of database containing pTab */
                   75317: #ifndef SQLITE_OMIT_TRIGGER
                   75318:   Trigger *pTrig;
                   75319: #endif
                   75320: 
                   75321:   v = sqlite3GetVdbe(pParse);
                   75322:   if( NEVER(v==0) ) return;
                   75323:   assert( sqlite3BtreeHoldsAllMutexes(pParse->db) );
                   75324:   iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema);
                   75325:   assert( iDb>=0 );
                   75326: 
                   75327: #ifndef SQLITE_OMIT_TRIGGER
                   75328:   /* Drop any table triggers from the internal schema. */
                   75329:   for(pTrig=sqlite3TriggerList(pParse, pTab); pTrig; pTrig=pTrig->pNext){
                   75330:     int iTrigDb = sqlite3SchemaToIndex(pParse->db, pTrig->pSchema);
                   75331:     assert( iTrigDb==iDb || iTrigDb==1 );
                   75332:     sqlite3VdbeAddOp4(v, OP_DropTrigger, iTrigDb, 0, 0, pTrig->zName, 0);
                   75333:   }
                   75334: #endif
                   75335: 
                   75336:   /* Drop the table and index from the internal schema.  */
                   75337:   sqlite3VdbeAddOp4(v, OP_DropTable, iDb, 0, 0, pTab->zName, 0);
                   75338: 
                   75339:   /* Reload the table, index and permanent trigger schemas. */
                   75340:   zWhere = sqlite3MPrintf(pParse->db, "tbl_name=%Q", zName);
                   75341:   if( !zWhere ) return;
                   75342:   sqlite3VdbeAddParseSchemaOp(v, iDb, zWhere);
                   75343: 
                   75344: #ifndef SQLITE_OMIT_TRIGGER
                   75345:   /* Now, if the table is not stored in the temp database, reload any temp 
                   75346:   ** triggers. Don't use IN(...) in case SQLITE_OMIT_SUBQUERY is defined. 
                   75347:   */
                   75348:   if( (zWhere=whereTempTriggers(pParse, pTab))!=0 ){
                   75349:     sqlite3VdbeAddParseSchemaOp(v, 1, zWhere);
                   75350:   }
                   75351: #endif
                   75352: }
                   75353: 
                   75354: /*
                   75355: ** Parameter zName is the name of a table that is about to be altered
                   75356: ** (either with ALTER TABLE ... RENAME TO or ALTER TABLE ... ADD COLUMN).
                   75357: ** If the table is a system table, this function leaves an error message
                   75358: ** in pParse->zErr (system tables may not be altered) and returns non-zero.
                   75359: **
                   75360: ** Or, if zName is not a system table, zero is returned.
                   75361: */
                   75362: static int isSystemTable(Parse *pParse, const char *zName){
                   75363:   if( sqlite3Strlen30(zName)>6 && 0==sqlite3StrNICmp(zName, "sqlite_", 7) ){
                   75364:     sqlite3ErrorMsg(pParse, "table %s may not be altered", zName);
                   75365:     return 1;
                   75366:   }
                   75367:   return 0;
                   75368: }
                   75369: 
                   75370: /*
                   75371: ** Generate code to implement the "ALTER TABLE xxx RENAME TO yyy" 
                   75372: ** command. 
                   75373: */
                   75374: SQLITE_PRIVATE void sqlite3AlterRenameTable(
                   75375:   Parse *pParse,            /* Parser context. */
                   75376:   SrcList *pSrc,            /* The table to rename. */
                   75377:   Token *pName              /* The new table name. */
                   75378: ){
                   75379:   int iDb;                  /* Database that contains the table */
                   75380:   char *zDb;                /* Name of database iDb */
                   75381:   Table *pTab;              /* Table being renamed */
                   75382:   char *zName = 0;          /* NULL-terminated version of pName */ 
                   75383:   sqlite3 *db = pParse->db; /* Database connection */
                   75384:   int nTabName;             /* Number of UTF-8 characters in zTabName */
                   75385:   const char *zTabName;     /* Original name of the table */
                   75386:   Vdbe *v;
                   75387: #ifndef SQLITE_OMIT_TRIGGER
                   75388:   char *zWhere = 0;         /* Where clause to locate temp triggers */
                   75389: #endif
                   75390:   VTable *pVTab = 0;        /* Non-zero if this is a v-tab with an xRename() */
                   75391:   int savedDbFlags;         /* Saved value of db->flags */
                   75392: 
                   75393:   savedDbFlags = db->flags;  
                   75394:   if( NEVER(db->mallocFailed) ) goto exit_rename_table;
                   75395:   assert( pSrc->nSrc==1 );
                   75396:   assert( sqlite3BtreeHoldsAllMutexes(pParse->db) );
                   75397: 
                   75398:   pTab = sqlite3LocateTable(pParse, 0, pSrc->a[0].zName, pSrc->a[0].zDatabase);
                   75399:   if( !pTab ) goto exit_rename_table;
                   75400:   iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema);
                   75401:   zDb = db->aDb[iDb].zName;
                   75402:   db->flags |= SQLITE_PreferBuiltin;
                   75403: 
                   75404:   /* Get a NULL terminated version of the new table name. */
                   75405:   zName = sqlite3NameFromToken(db, pName);
                   75406:   if( !zName ) goto exit_rename_table;
                   75407: 
                   75408:   /* Check that a table or index named 'zName' does not already exist
                   75409:   ** in database iDb. If so, this is an error.
                   75410:   */
                   75411:   if( sqlite3FindTable(db, zName, zDb) || sqlite3FindIndex(db, zName, zDb) ){
                   75412:     sqlite3ErrorMsg(pParse, 
                   75413:         "there is already another table or index with this name: %s", zName);
                   75414:     goto exit_rename_table;
                   75415:   }
                   75416: 
                   75417:   /* Make sure it is not a system table being altered, or a reserved name
                   75418:   ** that the table is being renamed to.
                   75419:   */
                   75420:   if( SQLITE_OK!=isSystemTable(pParse, pTab->zName) ){
                   75421:     goto exit_rename_table;
                   75422:   }
                   75423:   if( SQLITE_OK!=sqlite3CheckObjectName(pParse, zName) ){ goto
                   75424:     exit_rename_table;
                   75425:   }
                   75426: 
                   75427: #ifndef SQLITE_OMIT_VIEW
                   75428:   if( pTab->pSelect ){
                   75429:     sqlite3ErrorMsg(pParse, "view %s may not be altered", pTab->zName);
                   75430:     goto exit_rename_table;
                   75431:   }
                   75432: #endif
                   75433: 
                   75434: #ifndef SQLITE_OMIT_AUTHORIZATION
                   75435:   /* Invoke the authorization callback. */
                   75436:   if( sqlite3AuthCheck(pParse, SQLITE_ALTER_TABLE, zDb, pTab->zName, 0) ){
                   75437:     goto exit_rename_table;
                   75438:   }
                   75439: #endif
                   75440: 
                   75441: #ifndef SQLITE_OMIT_VIRTUALTABLE
                   75442:   if( sqlite3ViewGetColumnNames(pParse, pTab) ){
                   75443:     goto exit_rename_table;
                   75444:   }
                   75445:   if( IsVirtual(pTab) ){
                   75446:     pVTab = sqlite3GetVTable(db, pTab);
                   75447:     if( pVTab->pVtab->pModule->xRename==0 ){
                   75448:       pVTab = 0;
                   75449:     }
                   75450:   }
                   75451: #endif
                   75452: 
                   75453:   /* Begin a transaction and code the VerifyCookie for database iDb. 
                   75454:   ** Then modify the schema cookie (since the ALTER TABLE modifies the
                   75455:   ** schema). Open a statement transaction if the table is a virtual
                   75456:   ** table.
                   75457:   */
                   75458:   v = sqlite3GetVdbe(pParse);
                   75459:   if( v==0 ){
                   75460:     goto exit_rename_table;
                   75461:   }
                   75462:   sqlite3BeginWriteOperation(pParse, pVTab!=0, iDb);
                   75463:   sqlite3ChangeCookie(pParse, iDb);
                   75464: 
                   75465:   /* If this is a virtual table, invoke the xRename() function if
                   75466:   ** one is defined. The xRename() callback will modify the names
                   75467:   ** of any resources used by the v-table implementation (including other
                   75468:   ** SQLite tables) that are identified by the name of the virtual table.
                   75469:   */
                   75470: #ifndef SQLITE_OMIT_VIRTUALTABLE
                   75471:   if( pVTab ){
                   75472:     int i = ++pParse->nMem;
                   75473:     sqlite3VdbeAddOp4(v, OP_String8, 0, i, 0, zName, 0);
                   75474:     sqlite3VdbeAddOp4(v, OP_VRename, i, 0, 0,(const char*)pVTab, P4_VTAB);
                   75475:     sqlite3MayAbort(pParse);
                   75476:   }
                   75477: #endif
                   75478: 
                   75479:   /* figure out how many UTF-8 characters are in zName */
                   75480:   zTabName = pTab->zName;
                   75481:   nTabName = sqlite3Utf8CharLen(zTabName, -1);
                   75482: 
                   75483: #if !defined(SQLITE_OMIT_FOREIGN_KEY) && !defined(SQLITE_OMIT_TRIGGER)
                   75484:   if( db->flags&SQLITE_ForeignKeys ){
                   75485:     /* If foreign-key support is enabled, rewrite the CREATE TABLE 
                   75486:     ** statements corresponding to all child tables of foreign key constraints
                   75487:     ** for which the renamed table is the parent table.  */
                   75488:     if( (zWhere=whereForeignKeys(pParse, pTab))!=0 ){
                   75489:       sqlite3NestedParse(pParse, 
                   75490:           "UPDATE \"%w\".%s SET "
                   75491:               "sql = sqlite_rename_parent(sql, %Q, %Q) "
                   75492:               "WHERE %s;", zDb, SCHEMA_TABLE(iDb), zTabName, zName, zWhere);
                   75493:       sqlite3DbFree(db, zWhere);
                   75494:     }
                   75495:   }
                   75496: #endif
                   75497: 
                   75498:   /* Modify the sqlite_master table to use the new table name. */
                   75499:   sqlite3NestedParse(pParse,
                   75500:       "UPDATE %Q.%s SET "
                   75501: #ifdef SQLITE_OMIT_TRIGGER
                   75502:           "sql = sqlite_rename_table(sql, %Q), "
                   75503: #else
                   75504:           "sql = CASE "
                   75505:             "WHEN type = 'trigger' THEN sqlite_rename_trigger(sql, %Q)"
                   75506:             "ELSE sqlite_rename_table(sql, %Q) END, "
                   75507: #endif
                   75508:           "tbl_name = %Q, "
                   75509:           "name = CASE "
                   75510:             "WHEN type='table' THEN %Q "
                   75511:             "WHEN name LIKE 'sqlite_autoindex%%' AND type='index' THEN "
                   75512:              "'sqlite_autoindex_' || %Q || substr(name,%d+18) "
                   75513:             "ELSE name END "
                   75514:       "WHERE tbl_name=%Q AND "
                   75515:           "(type='table' OR type='index' OR type='trigger');", 
                   75516:       zDb, SCHEMA_TABLE(iDb), zName, zName, zName, 
                   75517: #ifndef SQLITE_OMIT_TRIGGER
                   75518:       zName,
                   75519: #endif
                   75520:       zName, nTabName, zTabName
                   75521:   );
                   75522: 
                   75523: #ifndef SQLITE_OMIT_AUTOINCREMENT
                   75524:   /* If the sqlite_sequence table exists in this database, then update 
                   75525:   ** it with the new table name.
                   75526:   */
                   75527:   if( sqlite3FindTable(db, "sqlite_sequence", zDb) ){
                   75528:     sqlite3NestedParse(pParse,
                   75529:         "UPDATE \"%w\".sqlite_sequence set name = %Q WHERE name = %Q",
                   75530:         zDb, zName, pTab->zName);
                   75531:   }
                   75532: #endif
                   75533: 
                   75534: #ifndef SQLITE_OMIT_TRIGGER
                   75535:   /* If there are TEMP triggers on this table, modify the sqlite_temp_master
                   75536:   ** table. Don't do this if the table being ALTERed is itself located in
                   75537:   ** the temp database.
                   75538:   */
                   75539:   if( (zWhere=whereTempTriggers(pParse, pTab))!=0 ){
                   75540:     sqlite3NestedParse(pParse, 
                   75541:         "UPDATE sqlite_temp_master SET "
                   75542:             "sql = sqlite_rename_trigger(sql, %Q), "
                   75543:             "tbl_name = %Q "
                   75544:             "WHERE %s;", zName, zName, zWhere);
                   75545:     sqlite3DbFree(db, zWhere);
                   75546:   }
                   75547: #endif
                   75548: 
                   75549: #if !defined(SQLITE_OMIT_FOREIGN_KEY) && !defined(SQLITE_OMIT_TRIGGER)
                   75550:   if( db->flags&SQLITE_ForeignKeys ){
                   75551:     FKey *p;
                   75552:     for(p=sqlite3FkReferences(pTab); p; p=p->pNextTo){
                   75553:       Table *pFrom = p->pFrom;
                   75554:       if( pFrom!=pTab ){
                   75555:         reloadTableSchema(pParse, p->pFrom, pFrom->zName);
                   75556:       }
                   75557:     }
                   75558:   }
                   75559: #endif
                   75560: 
                   75561:   /* Drop and reload the internal table schema. */
                   75562:   reloadTableSchema(pParse, pTab, zName);
                   75563: 
                   75564: exit_rename_table:
                   75565:   sqlite3SrcListDelete(db, pSrc);
                   75566:   sqlite3DbFree(db, zName);
                   75567:   db->flags = savedDbFlags;
                   75568: }
                   75569: 
                   75570: 
                   75571: /*
                   75572: ** Generate code to make sure the file format number is at least minFormat.
                   75573: ** The generated code will increase the file format number if necessary.
                   75574: */
                   75575: SQLITE_PRIVATE void sqlite3MinimumFileFormat(Parse *pParse, int iDb, int minFormat){
                   75576:   Vdbe *v;
                   75577:   v = sqlite3GetVdbe(pParse);
                   75578:   /* The VDBE should have been allocated before this routine is called.
                   75579:   ** If that allocation failed, we would have quit before reaching this
                   75580:   ** point */
                   75581:   if( ALWAYS(v) ){
                   75582:     int r1 = sqlite3GetTempReg(pParse);
                   75583:     int r2 = sqlite3GetTempReg(pParse);
                   75584:     int j1;
                   75585:     sqlite3VdbeAddOp3(v, OP_ReadCookie, iDb, r1, BTREE_FILE_FORMAT);
                   75586:     sqlite3VdbeUsesBtree(v, iDb);
                   75587:     sqlite3VdbeAddOp2(v, OP_Integer, minFormat, r2);
                   75588:     j1 = sqlite3VdbeAddOp3(v, OP_Ge, r2, 0, r1);
                   75589:     sqlite3VdbeAddOp3(v, OP_SetCookie, iDb, BTREE_FILE_FORMAT, r2);
                   75590:     sqlite3VdbeJumpHere(v, j1);
                   75591:     sqlite3ReleaseTempReg(pParse, r1);
                   75592:     sqlite3ReleaseTempReg(pParse, r2);
                   75593:   }
                   75594: }
                   75595: 
                   75596: /*
                   75597: ** This function is called after an "ALTER TABLE ... ADD" statement
                   75598: ** has been parsed. Argument pColDef contains the text of the new
                   75599: ** column definition.
                   75600: **
                   75601: ** The Table structure pParse->pNewTable was extended to include
                   75602: ** the new column during parsing.
                   75603: */
                   75604: SQLITE_PRIVATE void sqlite3AlterFinishAddColumn(Parse *pParse, Token *pColDef){
                   75605:   Table *pNew;              /* Copy of pParse->pNewTable */
                   75606:   Table *pTab;              /* Table being altered */
                   75607:   int iDb;                  /* Database number */
                   75608:   const char *zDb;          /* Database name */
                   75609:   const char *zTab;         /* Table name */
                   75610:   char *zCol;               /* Null-terminated column definition */
                   75611:   Column *pCol;             /* The new column */
                   75612:   Expr *pDflt;              /* Default value for the new column */
                   75613:   sqlite3 *db;              /* The database connection; */
                   75614: 
                   75615:   db = pParse->db;
                   75616:   if( pParse->nErr || db->mallocFailed ) return;
                   75617:   pNew = pParse->pNewTable;
                   75618:   assert( pNew );
                   75619: 
                   75620:   assert( sqlite3BtreeHoldsAllMutexes(db) );
                   75621:   iDb = sqlite3SchemaToIndex(db, pNew->pSchema);
                   75622:   zDb = db->aDb[iDb].zName;
                   75623:   zTab = &pNew->zName[16];  /* Skip the "sqlite_altertab_" prefix on the name */
                   75624:   pCol = &pNew->aCol[pNew->nCol-1];
                   75625:   pDflt = pCol->pDflt;
                   75626:   pTab = sqlite3FindTable(db, zTab, zDb);
                   75627:   assert( pTab );
                   75628: 
                   75629: #ifndef SQLITE_OMIT_AUTHORIZATION
                   75630:   /* Invoke the authorization callback. */
                   75631:   if( sqlite3AuthCheck(pParse, SQLITE_ALTER_TABLE, zDb, pTab->zName, 0) ){
                   75632:     return;
                   75633:   }
                   75634: #endif
                   75635: 
                   75636:   /* If the default value for the new column was specified with a 
                   75637:   ** literal NULL, then set pDflt to 0. This simplifies checking
                   75638:   ** for an SQL NULL default below.
                   75639:   */
                   75640:   if( pDflt && pDflt->op==TK_NULL ){
                   75641:     pDflt = 0;
                   75642:   }
                   75643: 
                   75644:   /* Check that the new column is not specified as PRIMARY KEY or UNIQUE.
                   75645:   ** If there is a NOT NULL constraint, then the default value for the
                   75646:   ** column must not be NULL.
                   75647:   */
                   75648:   if( pCol->isPrimKey ){
                   75649:     sqlite3ErrorMsg(pParse, "Cannot add a PRIMARY KEY column");
                   75650:     return;
                   75651:   }
                   75652:   if( pNew->pIndex ){
                   75653:     sqlite3ErrorMsg(pParse, "Cannot add a UNIQUE column");
                   75654:     return;
                   75655:   }
                   75656:   if( (db->flags&SQLITE_ForeignKeys) && pNew->pFKey && pDflt ){
                   75657:     sqlite3ErrorMsg(pParse, 
                   75658:         "Cannot add a REFERENCES column with non-NULL default value");
                   75659:     return;
                   75660:   }
                   75661:   if( pCol->notNull && !pDflt ){
                   75662:     sqlite3ErrorMsg(pParse, 
                   75663:         "Cannot add a NOT NULL column with default value NULL");
                   75664:     return;
                   75665:   }
                   75666: 
                   75667:   /* Ensure the default expression is something that sqlite3ValueFromExpr()
                   75668:   ** can handle (i.e. not CURRENT_TIME etc.)
                   75669:   */
                   75670:   if( pDflt ){
                   75671:     sqlite3_value *pVal;
                   75672:     if( sqlite3ValueFromExpr(db, pDflt, SQLITE_UTF8, SQLITE_AFF_NONE, &pVal) ){
                   75673:       db->mallocFailed = 1;
                   75674:       return;
                   75675:     }
                   75676:     if( !pVal ){
                   75677:       sqlite3ErrorMsg(pParse, "Cannot add a column with non-constant default");
                   75678:       return;
                   75679:     }
                   75680:     sqlite3ValueFree(pVal);
                   75681:   }
                   75682: 
                   75683:   /* Modify the CREATE TABLE statement. */
                   75684:   zCol = sqlite3DbStrNDup(db, (char*)pColDef->z, pColDef->n);
                   75685:   if( zCol ){
                   75686:     char *zEnd = &zCol[pColDef->n-1];
                   75687:     int savedDbFlags = db->flags;
                   75688:     while( zEnd>zCol && (*zEnd==';' || sqlite3Isspace(*zEnd)) ){
                   75689:       *zEnd-- = '\0';
                   75690:     }
                   75691:     db->flags |= SQLITE_PreferBuiltin;
                   75692:     sqlite3NestedParse(pParse, 
                   75693:         "UPDATE \"%w\".%s SET "
                   75694:           "sql = substr(sql,1,%d) || ', ' || %Q || substr(sql,%d) "
                   75695:         "WHERE type = 'table' AND name = %Q", 
                   75696:       zDb, SCHEMA_TABLE(iDb), pNew->addColOffset, zCol, pNew->addColOffset+1,
                   75697:       zTab
                   75698:     );
                   75699:     sqlite3DbFree(db, zCol);
                   75700:     db->flags = savedDbFlags;
                   75701:   }
                   75702: 
                   75703:   /* If the default value of the new column is NULL, then set the file
                   75704:   ** format to 2. If the default value of the new column is not NULL,
                   75705:   ** the file format becomes 3.
                   75706:   */
                   75707:   sqlite3MinimumFileFormat(pParse, iDb, pDflt ? 3 : 2);
                   75708: 
                   75709:   /* Reload the schema of the modified table. */
                   75710:   reloadTableSchema(pParse, pTab, pTab->zName);
                   75711: }
                   75712: 
                   75713: /*
                   75714: ** This function is called by the parser after the table-name in
                   75715: ** an "ALTER TABLE <table-name> ADD" statement is parsed. Argument 
                   75716: ** pSrc is the full-name of the table being altered.
                   75717: **
                   75718: ** This routine makes a (partial) copy of the Table structure
                   75719: ** for the table being altered and sets Parse.pNewTable to point
                   75720: ** to it. Routines called by the parser as the column definition
                   75721: ** is parsed (i.e. sqlite3AddColumn()) add the new Column data to 
                   75722: ** the copy. The copy of the Table structure is deleted by tokenize.c 
                   75723: ** after parsing is finished.
                   75724: **
                   75725: ** Routine sqlite3AlterFinishAddColumn() will be called to complete
                   75726: ** coding the "ALTER TABLE ... ADD" statement.
                   75727: */
                   75728: SQLITE_PRIVATE void sqlite3AlterBeginAddColumn(Parse *pParse, SrcList *pSrc){
                   75729:   Table *pNew;
                   75730:   Table *pTab;
                   75731:   Vdbe *v;
                   75732:   int iDb;
                   75733:   int i;
                   75734:   int nAlloc;
                   75735:   sqlite3 *db = pParse->db;
                   75736: 
                   75737:   /* Look up the table being altered. */
                   75738:   assert( pParse->pNewTable==0 );
                   75739:   assert( sqlite3BtreeHoldsAllMutexes(db) );
                   75740:   if( db->mallocFailed ) goto exit_begin_add_column;
                   75741:   pTab = sqlite3LocateTable(pParse, 0, pSrc->a[0].zName, pSrc->a[0].zDatabase);
                   75742:   if( !pTab ) goto exit_begin_add_column;
                   75743: 
                   75744: #ifndef SQLITE_OMIT_VIRTUALTABLE
                   75745:   if( IsVirtual(pTab) ){
                   75746:     sqlite3ErrorMsg(pParse, "virtual tables may not be altered");
                   75747:     goto exit_begin_add_column;
                   75748:   }
                   75749: #endif
                   75750: 
                   75751:   /* Make sure this is not an attempt to ALTER a view. */
                   75752:   if( pTab->pSelect ){
                   75753:     sqlite3ErrorMsg(pParse, "Cannot add a column to a view");
                   75754:     goto exit_begin_add_column;
                   75755:   }
                   75756:   if( SQLITE_OK!=isSystemTable(pParse, pTab->zName) ){
                   75757:     goto exit_begin_add_column;
                   75758:   }
                   75759: 
                   75760:   assert( pTab->addColOffset>0 );
                   75761:   iDb = sqlite3SchemaToIndex(db, pTab->pSchema);
                   75762: 
                   75763:   /* Put a copy of the Table struct in Parse.pNewTable for the
                   75764:   ** sqlite3AddColumn() function and friends to modify.  But modify
                   75765:   ** the name by adding an "sqlite_altertab_" prefix.  By adding this
                   75766:   ** prefix, we insure that the name will not collide with an existing
                   75767:   ** table because user table are not allowed to have the "sqlite_"
                   75768:   ** prefix on their name.
                   75769:   */
                   75770:   pNew = (Table*)sqlite3DbMallocZero(db, sizeof(Table));
                   75771:   if( !pNew ) goto exit_begin_add_column;
                   75772:   pParse->pNewTable = pNew;
                   75773:   pNew->nRef = 1;
                   75774:   pNew->nCol = pTab->nCol;
                   75775:   assert( pNew->nCol>0 );
                   75776:   nAlloc = (((pNew->nCol-1)/8)*8)+8;
                   75777:   assert( nAlloc>=pNew->nCol && nAlloc%8==0 && nAlloc-pNew->nCol<8 );
                   75778:   pNew->aCol = (Column*)sqlite3DbMallocZero(db, sizeof(Column)*nAlloc);
                   75779:   pNew->zName = sqlite3MPrintf(db, "sqlite_altertab_%s", pTab->zName);
                   75780:   if( !pNew->aCol || !pNew->zName ){
                   75781:     db->mallocFailed = 1;
                   75782:     goto exit_begin_add_column;
                   75783:   }
                   75784:   memcpy(pNew->aCol, pTab->aCol, sizeof(Column)*pNew->nCol);
                   75785:   for(i=0; i<pNew->nCol; i++){
                   75786:     Column *pCol = &pNew->aCol[i];
                   75787:     pCol->zName = sqlite3DbStrDup(db, pCol->zName);
                   75788:     pCol->zColl = 0;
                   75789:     pCol->zType = 0;
                   75790:     pCol->pDflt = 0;
                   75791:     pCol->zDflt = 0;
                   75792:   }
                   75793:   pNew->pSchema = db->aDb[iDb].pSchema;
                   75794:   pNew->addColOffset = pTab->addColOffset;
                   75795:   pNew->nRef = 1;
                   75796: 
                   75797:   /* Begin a transaction and increment the schema cookie.  */
                   75798:   sqlite3BeginWriteOperation(pParse, 0, iDb);
                   75799:   v = sqlite3GetVdbe(pParse);
                   75800:   if( !v ) goto exit_begin_add_column;
                   75801:   sqlite3ChangeCookie(pParse, iDb);
                   75802: 
                   75803: exit_begin_add_column:
                   75804:   sqlite3SrcListDelete(db, pSrc);
                   75805:   return;
                   75806: }
                   75807: #endif  /* SQLITE_ALTER_TABLE */
                   75808: 
                   75809: /************** End of alter.c ***********************************************/
                   75810: /************** Begin file analyze.c *****************************************/
                   75811: /*
                   75812: ** 2005 July 8
                   75813: **
                   75814: ** The author disclaims copyright to this source code.  In place of
                   75815: ** a legal notice, here is a blessing:
                   75816: **
                   75817: **    May you do good and not evil.
                   75818: **    May you find forgiveness for yourself and forgive others.
                   75819: **    May you share freely, never taking more than you give.
                   75820: **
                   75821: *************************************************************************
                   75822: ** This file contains code associated with the ANALYZE command.
                   75823: */
                   75824: #ifndef SQLITE_OMIT_ANALYZE
                   75825: 
                   75826: /*
                   75827: ** This routine generates code that opens the sqlite_stat1 table for
                   75828: ** writing with cursor iStatCur. If the library was built with the
                   75829: ** SQLITE_ENABLE_STAT2 macro defined, then the sqlite_stat2 table is
                   75830: ** opened for writing using cursor (iStatCur+1)
                   75831: **
                   75832: ** If the sqlite_stat1 tables does not previously exist, it is created.
                   75833: ** Similarly, if the sqlite_stat2 table does not exist and the library
                   75834: ** is compiled with SQLITE_ENABLE_STAT2 defined, it is created. 
                   75835: **
                   75836: ** Argument zWhere may be a pointer to a buffer containing a table name,
                   75837: ** or it may be a NULL pointer. If it is not NULL, then all entries in
                   75838: ** the sqlite_stat1 and (if applicable) sqlite_stat2 tables associated
                   75839: ** with the named table are deleted. If zWhere==0, then code is generated
                   75840: ** to delete all stat table entries.
                   75841: */
                   75842: static void openStatTable(
                   75843:   Parse *pParse,          /* Parsing context */
                   75844:   int iDb,                /* The database we are looking in */
                   75845:   int iStatCur,           /* Open the sqlite_stat1 table on this cursor */
                   75846:   const char *zWhere,     /* Delete entries for this table or index */
                   75847:   const char *zWhereType  /* Either "tbl" or "idx" */
                   75848: ){
                   75849:   static const struct {
                   75850:     const char *zName;
                   75851:     const char *zCols;
                   75852:   } aTable[] = {
                   75853:     { "sqlite_stat1", "tbl,idx,stat" },
                   75854: #ifdef SQLITE_ENABLE_STAT2
                   75855:     { "sqlite_stat2", "tbl,idx,sampleno,sample" },
                   75856: #endif
                   75857:   };
                   75858: 
                   75859:   int aRoot[] = {0, 0};
                   75860:   u8 aCreateTbl[] = {0, 0};
                   75861: 
                   75862:   int i;
                   75863:   sqlite3 *db = pParse->db;
                   75864:   Db *pDb;
                   75865:   Vdbe *v = sqlite3GetVdbe(pParse);
                   75866:   if( v==0 ) return;
                   75867:   assert( sqlite3BtreeHoldsAllMutexes(db) );
                   75868:   assert( sqlite3VdbeDb(v)==db );
                   75869:   pDb = &db->aDb[iDb];
                   75870: 
                   75871:   for(i=0; i<ArraySize(aTable); i++){
                   75872:     const char *zTab = aTable[i].zName;
                   75873:     Table *pStat;
                   75874:     if( (pStat = sqlite3FindTable(db, zTab, pDb->zName))==0 ){
                   75875:       /* The sqlite_stat[12] table does not exist. Create it. Note that a 
                   75876:       ** side-effect of the CREATE TABLE statement is to leave the rootpage 
                   75877:       ** of the new table in register pParse->regRoot. This is important 
                   75878:       ** because the OpenWrite opcode below will be needing it. */
                   75879:       sqlite3NestedParse(pParse,
                   75880:           "CREATE TABLE %Q.%s(%s)", pDb->zName, zTab, aTable[i].zCols
                   75881:       );
                   75882:       aRoot[i] = pParse->regRoot;
                   75883:       aCreateTbl[i] = 1;
                   75884:     }else{
                   75885:       /* The table already exists. If zWhere is not NULL, delete all entries 
                   75886:       ** associated with the table zWhere. If zWhere is NULL, delete the
                   75887:       ** entire contents of the table. */
                   75888:       aRoot[i] = pStat->tnum;
                   75889:       sqlite3TableLock(pParse, iDb, aRoot[i], 1, zTab);
                   75890:       if( zWhere ){
                   75891:         sqlite3NestedParse(pParse,
                   75892:            "DELETE FROM %Q.%s WHERE %s=%Q", pDb->zName, zTab, zWhereType, zWhere
                   75893:         );
                   75894:       }else{
                   75895:         /* The sqlite_stat[12] table already exists.  Delete all rows. */
                   75896:         sqlite3VdbeAddOp2(v, OP_Clear, aRoot[i], iDb);
                   75897:       }
                   75898:     }
                   75899:   }
                   75900: 
                   75901:   /* Open the sqlite_stat[12] tables for writing. */
                   75902:   for(i=0; i<ArraySize(aTable); i++){
                   75903:     sqlite3VdbeAddOp3(v, OP_OpenWrite, iStatCur+i, aRoot[i], iDb);
                   75904:     sqlite3VdbeChangeP4(v, -1, (char *)3, P4_INT32);
                   75905:     sqlite3VdbeChangeP5(v, aCreateTbl[i]);
                   75906:   }
                   75907: }
                   75908: 
                   75909: /*
                   75910: ** Generate code to do an analysis of all indices associated with
                   75911: ** a single table.
                   75912: */
                   75913: static void analyzeOneTable(
                   75914:   Parse *pParse,   /* Parser context */
                   75915:   Table *pTab,     /* Table whose indices are to be analyzed */
                   75916:   Index *pOnlyIdx, /* If not NULL, only analyze this one index */
                   75917:   int iStatCur,    /* Index of VdbeCursor that writes the sqlite_stat1 table */
                   75918:   int iMem         /* Available memory locations begin here */
                   75919: ){
                   75920:   sqlite3 *db = pParse->db;    /* Database handle */
                   75921:   Index *pIdx;                 /* An index to being analyzed */
                   75922:   int iIdxCur;                 /* Cursor open on index being analyzed */
                   75923:   Vdbe *v;                     /* The virtual machine being built up */
                   75924:   int i;                       /* Loop counter */
                   75925:   int topOfLoop;               /* The top of the loop */
                   75926:   int endOfLoop;               /* The end of the loop */
                   75927:   int jZeroRows = -1;          /* Jump from here if number of rows is zero */
                   75928:   int iDb;                     /* Index of database containing pTab */
                   75929:   int regTabname = iMem++;     /* Register containing table name */
                   75930:   int regIdxname = iMem++;     /* Register containing index name */
                   75931:   int regSampleno = iMem++;    /* Register containing next sample number */
                   75932:   int regCol = iMem++;         /* Content of a column analyzed table */
                   75933:   int regRec = iMem++;         /* Register holding completed record */
                   75934:   int regTemp = iMem++;        /* Temporary use register */
                   75935:   int regRowid = iMem++;       /* Rowid for the inserted record */
                   75936: 
                   75937: #ifdef SQLITE_ENABLE_STAT2
                   75938:   int addr = 0;                /* Instruction address */
                   75939:   int regTemp2 = iMem++;       /* Temporary use register */
                   75940:   int regSamplerecno = iMem++; /* Index of next sample to record */
                   75941:   int regRecno = iMem++;       /* Current sample index */
                   75942:   int regLast = iMem++;        /* Index of last sample to record */
                   75943:   int regFirst = iMem++;       /* Index of first sample to record */
                   75944: #endif
                   75945: 
                   75946:   v = sqlite3GetVdbe(pParse);
                   75947:   if( v==0 || NEVER(pTab==0) ){
                   75948:     return;
                   75949:   }
                   75950:   if( pTab->tnum==0 ){
                   75951:     /* Do not gather statistics on views or virtual tables */
                   75952:     return;
                   75953:   }
                   75954:   if( memcmp(pTab->zName, "sqlite_", 7)==0 ){
                   75955:     /* Do not gather statistics on system tables */
                   75956:     return;
                   75957:   }
                   75958:   assert( sqlite3BtreeHoldsAllMutexes(db) );
                   75959:   iDb = sqlite3SchemaToIndex(db, pTab->pSchema);
                   75960:   assert( iDb>=0 );
                   75961:   assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
                   75962: #ifndef SQLITE_OMIT_AUTHORIZATION
                   75963:   if( sqlite3AuthCheck(pParse, SQLITE_ANALYZE, pTab->zName, 0,
                   75964:       db->aDb[iDb].zName ) ){
                   75965:     return;
                   75966:   }
                   75967: #endif
                   75968: 
                   75969:   /* Establish a read-lock on the table at the shared-cache level. */
                   75970:   sqlite3TableLock(pParse, iDb, pTab->tnum, 0, pTab->zName);
                   75971: 
                   75972:   iIdxCur = pParse->nTab++;
                   75973:   sqlite3VdbeAddOp4(v, OP_String8, 0, regTabname, 0, pTab->zName, 0);
                   75974:   for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
                   75975:     int nCol;
                   75976:     KeyInfo *pKey;
                   75977: 
                   75978:     if( pOnlyIdx && pOnlyIdx!=pIdx ) continue;
                   75979:     nCol = pIdx->nColumn;
                   75980:     pKey = sqlite3IndexKeyinfo(pParse, pIdx);
                   75981:     if( iMem+1+(nCol*2)>pParse->nMem ){
                   75982:       pParse->nMem = iMem+1+(nCol*2);
                   75983:     }
                   75984: 
                   75985:     /* Open a cursor to the index to be analyzed. */
                   75986:     assert( iDb==sqlite3SchemaToIndex(db, pIdx->pSchema) );
                   75987:     sqlite3VdbeAddOp4(v, OP_OpenRead, iIdxCur, pIdx->tnum, iDb,
                   75988:         (char *)pKey, P4_KEYINFO_HANDOFF);
                   75989:     VdbeComment((v, "%s", pIdx->zName));
                   75990: 
                   75991:     /* Populate the register containing the index name. */
                   75992:     sqlite3VdbeAddOp4(v, OP_String8, 0, regIdxname, 0, pIdx->zName, 0);
                   75993: 
                   75994: #ifdef SQLITE_ENABLE_STAT2
                   75995: 
                   75996:     /* If this iteration of the loop is generating code to analyze the
                   75997:     ** first index in the pTab->pIndex list, then register regLast has
                   75998:     ** not been populated. In this case populate it now.  */
                   75999:     if( pTab->pIndex==pIdx ){
                   76000:       sqlite3VdbeAddOp2(v, OP_Integer, SQLITE_INDEX_SAMPLES, regSamplerecno);
                   76001:       sqlite3VdbeAddOp2(v, OP_Integer, SQLITE_INDEX_SAMPLES*2-1, regTemp);
                   76002:       sqlite3VdbeAddOp2(v, OP_Integer, SQLITE_INDEX_SAMPLES*2, regTemp2);
                   76003: 
                   76004:       sqlite3VdbeAddOp2(v, OP_Count, iIdxCur, regLast);
                   76005:       sqlite3VdbeAddOp2(v, OP_Null, 0, regFirst);
                   76006:       addr = sqlite3VdbeAddOp3(v, OP_Lt, regSamplerecno, 0, regLast);
                   76007:       sqlite3VdbeAddOp3(v, OP_Divide, regTemp2, regLast, regFirst);
                   76008:       sqlite3VdbeAddOp3(v, OP_Multiply, regLast, regTemp, regLast);
                   76009:       sqlite3VdbeAddOp2(v, OP_AddImm, regLast, SQLITE_INDEX_SAMPLES*2-2);
                   76010:       sqlite3VdbeAddOp3(v, OP_Divide,  regTemp2, regLast, regLast);
                   76011:       sqlite3VdbeJumpHere(v, addr);
                   76012:     }
                   76013: 
                   76014:     /* Zero the regSampleno and regRecno registers. */
                   76015:     sqlite3VdbeAddOp2(v, OP_Integer, 0, regSampleno);
                   76016:     sqlite3VdbeAddOp2(v, OP_Integer, 0, regRecno);
                   76017:     sqlite3VdbeAddOp2(v, OP_Copy, regFirst, regSamplerecno);
                   76018: #endif
                   76019: 
                   76020:     /* The block of memory cells initialized here is used as follows.
                   76021:     **
                   76022:     **    iMem:                
                   76023:     **        The total number of rows in the table.
                   76024:     **
                   76025:     **    iMem+1 .. iMem+nCol: 
                   76026:     **        Number of distinct entries in index considering the 
                   76027:     **        left-most N columns only, where N is between 1 and nCol, 
                   76028:     **        inclusive.
                   76029:     **
                   76030:     **    iMem+nCol+1 .. Mem+2*nCol:  
                   76031:     **        Previous value of indexed columns, from left to right.
                   76032:     **
                   76033:     ** Cells iMem through iMem+nCol are initialized to 0. The others are 
                   76034:     ** initialized to contain an SQL NULL.
                   76035:     */
                   76036:     for(i=0; i<=nCol; i++){
                   76037:       sqlite3VdbeAddOp2(v, OP_Integer, 0, iMem+i);
                   76038:     }
                   76039:     for(i=0; i<nCol; i++){
                   76040:       sqlite3VdbeAddOp2(v, OP_Null, 0, iMem+nCol+i+1);
                   76041:     }
                   76042: 
                   76043:     /* Start the analysis loop. This loop runs through all the entries in
                   76044:     ** the index b-tree.  */
                   76045:     endOfLoop = sqlite3VdbeMakeLabel(v);
                   76046:     sqlite3VdbeAddOp2(v, OP_Rewind, iIdxCur, endOfLoop);
                   76047:     topOfLoop = sqlite3VdbeCurrentAddr(v);
                   76048:     sqlite3VdbeAddOp2(v, OP_AddImm, iMem, 1);
                   76049: 
                   76050:     for(i=0; i<nCol; i++){
                   76051:       CollSeq *pColl;
                   76052:       sqlite3VdbeAddOp3(v, OP_Column, iIdxCur, i, regCol);
                   76053:       if( i==0 ){
                   76054: #ifdef SQLITE_ENABLE_STAT2
                   76055:         /* Check if the record that cursor iIdxCur points to contains a
                   76056:         ** value that should be stored in the sqlite_stat2 table. If so,
                   76057:         ** store it.  */
                   76058:         int ne = sqlite3VdbeAddOp3(v, OP_Ne, regRecno, 0, regSamplerecno);
                   76059:         assert( regTabname+1==regIdxname 
                   76060:              && regTabname+2==regSampleno
                   76061:              && regTabname+3==regCol
                   76062:         );
                   76063:         sqlite3VdbeChangeP5(v, SQLITE_JUMPIFNULL);
                   76064:         sqlite3VdbeAddOp4(v, OP_MakeRecord, regTabname, 4, regRec, "aaab", 0);
                   76065:         sqlite3VdbeAddOp2(v, OP_NewRowid, iStatCur+1, regRowid);
                   76066:         sqlite3VdbeAddOp3(v, OP_Insert, iStatCur+1, regRec, regRowid);
                   76067: 
                   76068:         /* Calculate new values for regSamplerecno and regSampleno.
                   76069:         **
                   76070:         **   sampleno = sampleno + 1
                   76071:         **   samplerecno = samplerecno+(remaining records)/(remaining samples)
                   76072:         */
                   76073:         sqlite3VdbeAddOp2(v, OP_AddImm, regSampleno, 1);
                   76074:         sqlite3VdbeAddOp3(v, OP_Subtract, regRecno, regLast, regTemp);
                   76075:         sqlite3VdbeAddOp2(v, OP_AddImm, regTemp, -1);
                   76076:         sqlite3VdbeAddOp2(v, OP_Integer, SQLITE_INDEX_SAMPLES, regTemp2);
                   76077:         sqlite3VdbeAddOp3(v, OP_Subtract, regSampleno, regTemp2, regTemp2);
                   76078:         sqlite3VdbeAddOp3(v, OP_Divide, regTemp2, regTemp, regTemp);
                   76079:         sqlite3VdbeAddOp3(v, OP_Add, regSamplerecno, regTemp, regSamplerecno);
                   76080: 
                   76081:         sqlite3VdbeJumpHere(v, ne);
                   76082:         sqlite3VdbeAddOp2(v, OP_AddImm, regRecno, 1);
                   76083: #endif
                   76084: 
                   76085:         /* Always record the very first row */
                   76086:         sqlite3VdbeAddOp1(v, OP_IfNot, iMem+1);
                   76087:       }
                   76088:       assert( pIdx->azColl!=0 );
                   76089:       assert( pIdx->azColl[i]!=0 );
                   76090:       pColl = sqlite3LocateCollSeq(pParse, pIdx->azColl[i]);
                   76091:       sqlite3VdbeAddOp4(v, OP_Ne, regCol, 0, iMem+nCol+i+1,
                   76092:                        (char*)pColl, P4_COLLSEQ);
                   76093:       sqlite3VdbeChangeP5(v, SQLITE_NULLEQ);
                   76094:     }
                   76095:     if( db->mallocFailed ){
                   76096:       /* If a malloc failure has occurred, then the result of the expression 
                   76097:       ** passed as the second argument to the call to sqlite3VdbeJumpHere() 
                   76098:       ** below may be negative. Which causes an assert() to fail (or an
                   76099:       ** out-of-bounds write if SQLITE_DEBUG is not defined).  */
                   76100:       return;
                   76101:     }
                   76102:     sqlite3VdbeAddOp2(v, OP_Goto, 0, endOfLoop);
                   76103:     for(i=0; i<nCol; i++){
                   76104:       int addr2 = sqlite3VdbeCurrentAddr(v) - (nCol*2);
                   76105:       if( i==0 ){
                   76106:         sqlite3VdbeJumpHere(v, addr2-1);  /* Set jump dest for the OP_IfNot */
                   76107:       }
                   76108:       sqlite3VdbeJumpHere(v, addr2);      /* Set jump dest for the OP_Ne */
                   76109:       sqlite3VdbeAddOp2(v, OP_AddImm, iMem+i+1, 1);
                   76110:       sqlite3VdbeAddOp3(v, OP_Column, iIdxCur, i, iMem+nCol+i+1);
                   76111:     }
                   76112: 
                   76113:     /* End of the analysis loop. */
                   76114:     sqlite3VdbeResolveLabel(v, endOfLoop);
                   76115:     sqlite3VdbeAddOp2(v, OP_Next, iIdxCur, topOfLoop);
                   76116:     sqlite3VdbeAddOp1(v, OP_Close, iIdxCur);
                   76117: 
                   76118:     /* Store the results in sqlite_stat1.
                   76119:     **
                   76120:     ** The result is a single row of the sqlite_stat1 table.  The first
                   76121:     ** two columns are the names of the table and index.  The third column
                   76122:     ** is a string composed of a list of integer statistics about the
                   76123:     ** index.  The first integer in the list is the total number of entries
                   76124:     ** in the index.  There is one additional integer in the list for each
                   76125:     ** column of the table.  This additional integer is a guess of how many
                   76126:     ** rows of the table the index will select.  If D is the count of distinct
                   76127:     ** values and K is the total number of rows, then the integer is computed
                   76128:     ** as:
                   76129:     **
                   76130:     **        I = (K+D-1)/D
                   76131:     **
                   76132:     ** If K==0 then no entry is made into the sqlite_stat1 table.  
                   76133:     ** If K>0 then it is always the case the D>0 so division by zero
                   76134:     ** is never possible.
                   76135:     */
                   76136:     sqlite3VdbeAddOp2(v, OP_SCopy, iMem, regSampleno);
                   76137:     if( jZeroRows<0 ){
                   76138:       jZeroRows = sqlite3VdbeAddOp1(v, OP_IfNot, iMem);
                   76139:     }
                   76140:     for(i=0; i<nCol; i++){
                   76141:       sqlite3VdbeAddOp4(v, OP_String8, 0, regTemp, 0, " ", 0);
                   76142:       sqlite3VdbeAddOp3(v, OP_Concat, regTemp, regSampleno, regSampleno);
                   76143:       sqlite3VdbeAddOp3(v, OP_Add, iMem, iMem+i+1, regTemp);
                   76144:       sqlite3VdbeAddOp2(v, OP_AddImm, regTemp, -1);
                   76145:       sqlite3VdbeAddOp3(v, OP_Divide, iMem+i+1, regTemp, regTemp);
                   76146:       sqlite3VdbeAddOp1(v, OP_ToInt, regTemp);
                   76147:       sqlite3VdbeAddOp3(v, OP_Concat, regTemp, regSampleno, regSampleno);
                   76148:     }
                   76149:     sqlite3VdbeAddOp4(v, OP_MakeRecord, regTabname, 3, regRec, "aaa", 0);
                   76150:     sqlite3VdbeAddOp2(v, OP_NewRowid, iStatCur, regRowid);
                   76151:     sqlite3VdbeAddOp3(v, OP_Insert, iStatCur, regRec, regRowid);
                   76152:     sqlite3VdbeChangeP5(v, OPFLAG_APPEND);
                   76153:   }
                   76154: 
                   76155:   /* If the table has no indices, create a single sqlite_stat1 entry
                   76156:   ** containing NULL as the index name and the row count as the content.
                   76157:   */
                   76158:   if( pTab->pIndex==0 ){
                   76159:     sqlite3VdbeAddOp3(v, OP_OpenRead, iIdxCur, pTab->tnum, iDb);
                   76160:     VdbeComment((v, "%s", pTab->zName));
                   76161:     sqlite3VdbeAddOp2(v, OP_Count, iIdxCur, regSampleno);
                   76162:     sqlite3VdbeAddOp1(v, OP_Close, iIdxCur);
                   76163:     jZeroRows = sqlite3VdbeAddOp1(v, OP_IfNot, regSampleno);
                   76164:   }else{
                   76165:     sqlite3VdbeJumpHere(v, jZeroRows);
                   76166:     jZeroRows = sqlite3VdbeAddOp0(v, OP_Goto);
                   76167:   }
                   76168:   sqlite3VdbeAddOp2(v, OP_Null, 0, regIdxname);
                   76169:   sqlite3VdbeAddOp4(v, OP_MakeRecord, regTabname, 3, regRec, "aaa", 0);
                   76170:   sqlite3VdbeAddOp2(v, OP_NewRowid, iStatCur, regRowid);
                   76171:   sqlite3VdbeAddOp3(v, OP_Insert, iStatCur, regRec, regRowid);
                   76172:   sqlite3VdbeChangeP5(v, OPFLAG_APPEND);
                   76173:   if( pParse->nMem<regRec ) pParse->nMem = regRec;
                   76174:   sqlite3VdbeJumpHere(v, jZeroRows);
                   76175: }
                   76176: 
                   76177: /*
                   76178: ** Generate code that will cause the most recent index analysis to
                   76179: ** be loaded into internal hash tables where is can be used.
                   76180: */
                   76181: static void loadAnalysis(Parse *pParse, int iDb){
                   76182:   Vdbe *v = sqlite3GetVdbe(pParse);
                   76183:   if( v ){
                   76184:     sqlite3VdbeAddOp1(v, OP_LoadAnalysis, iDb);
                   76185:   }
                   76186: }
                   76187: 
                   76188: /*
                   76189: ** Generate code that will do an analysis of an entire database
                   76190: */
                   76191: static void analyzeDatabase(Parse *pParse, int iDb){
                   76192:   sqlite3 *db = pParse->db;
                   76193:   Schema *pSchema = db->aDb[iDb].pSchema;    /* Schema of database iDb */
                   76194:   HashElem *k;
                   76195:   int iStatCur;
                   76196:   int iMem;
                   76197: 
                   76198:   sqlite3BeginWriteOperation(pParse, 0, iDb);
                   76199:   iStatCur = pParse->nTab;
                   76200:   pParse->nTab += 2;
                   76201:   openStatTable(pParse, iDb, iStatCur, 0, 0);
                   76202:   iMem = pParse->nMem+1;
                   76203:   assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
                   76204:   for(k=sqliteHashFirst(&pSchema->tblHash); k; k=sqliteHashNext(k)){
                   76205:     Table *pTab = (Table*)sqliteHashData(k);
                   76206:     analyzeOneTable(pParse, pTab, 0, iStatCur, iMem);
                   76207:   }
                   76208:   loadAnalysis(pParse, iDb);
                   76209: }
                   76210: 
                   76211: /*
                   76212: ** Generate code that will do an analysis of a single table in
                   76213: ** a database.  If pOnlyIdx is not NULL then it is a single index
                   76214: ** in pTab that should be analyzed.
                   76215: */
                   76216: static void analyzeTable(Parse *pParse, Table *pTab, Index *pOnlyIdx){
                   76217:   int iDb;
                   76218:   int iStatCur;
                   76219: 
                   76220:   assert( pTab!=0 );
                   76221:   assert( sqlite3BtreeHoldsAllMutexes(pParse->db) );
                   76222:   iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema);
                   76223:   sqlite3BeginWriteOperation(pParse, 0, iDb);
                   76224:   iStatCur = pParse->nTab;
                   76225:   pParse->nTab += 2;
                   76226:   if( pOnlyIdx ){
                   76227:     openStatTable(pParse, iDb, iStatCur, pOnlyIdx->zName, "idx");
                   76228:   }else{
                   76229:     openStatTable(pParse, iDb, iStatCur, pTab->zName, "tbl");
                   76230:   }
                   76231:   analyzeOneTable(pParse, pTab, pOnlyIdx, iStatCur, pParse->nMem+1);
                   76232:   loadAnalysis(pParse, iDb);
                   76233: }
                   76234: 
                   76235: /*
                   76236: ** Generate code for the ANALYZE command.  The parser calls this routine
                   76237: ** when it recognizes an ANALYZE command.
                   76238: **
                   76239: **        ANALYZE                            -- 1
                   76240: **        ANALYZE  <database>                -- 2
                   76241: **        ANALYZE  ?<database>.?<tablename>  -- 3
                   76242: **
                   76243: ** Form 1 causes all indices in all attached databases to be analyzed.
                   76244: ** Form 2 analyzes all indices the single database named.
                   76245: ** Form 3 analyzes all indices associated with the named table.
                   76246: */
                   76247: SQLITE_PRIVATE void sqlite3Analyze(Parse *pParse, Token *pName1, Token *pName2){
                   76248:   sqlite3 *db = pParse->db;
                   76249:   int iDb;
                   76250:   int i;
                   76251:   char *z, *zDb;
                   76252:   Table *pTab;
                   76253:   Index *pIdx;
                   76254:   Token *pTableName;
                   76255: 
                   76256:   /* Read the database schema. If an error occurs, leave an error message
                   76257:   ** and code in pParse and return NULL. */
                   76258:   assert( sqlite3BtreeHoldsAllMutexes(pParse->db) );
                   76259:   if( SQLITE_OK!=sqlite3ReadSchema(pParse) ){
                   76260:     return;
                   76261:   }
                   76262: 
                   76263:   assert( pName2!=0 || pName1==0 );
                   76264:   if( pName1==0 ){
                   76265:     /* Form 1:  Analyze everything */
                   76266:     for(i=0; i<db->nDb; i++){
                   76267:       if( i==1 ) continue;  /* Do not analyze the TEMP database */
                   76268:       analyzeDatabase(pParse, i);
                   76269:     }
                   76270:   }else if( pName2->n==0 ){
                   76271:     /* Form 2:  Analyze the database or table named */
                   76272:     iDb = sqlite3FindDb(db, pName1);
                   76273:     if( iDb>=0 ){
                   76274:       analyzeDatabase(pParse, iDb);
                   76275:     }else{
                   76276:       z = sqlite3NameFromToken(db, pName1);
                   76277:       if( z ){
                   76278:         if( (pIdx = sqlite3FindIndex(db, z, 0))!=0 ){
                   76279:           analyzeTable(pParse, pIdx->pTable, pIdx);
                   76280:         }else if( (pTab = sqlite3LocateTable(pParse, 0, z, 0))!=0 ){
                   76281:           analyzeTable(pParse, pTab, 0);
                   76282:         }
                   76283:         sqlite3DbFree(db, z);
                   76284:       }
                   76285:     }
                   76286:   }else{
                   76287:     /* Form 3: Analyze the fully qualified table name */
                   76288:     iDb = sqlite3TwoPartName(pParse, pName1, pName2, &pTableName);
                   76289:     if( iDb>=0 ){
                   76290:       zDb = db->aDb[iDb].zName;
                   76291:       z = sqlite3NameFromToken(db, pTableName);
                   76292:       if( z ){
                   76293:         if( (pIdx = sqlite3FindIndex(db, z, zDb))!=0 ){
                   76294:           analyzeTable(pParse, pIdx->pTable, pIdx);
                   76295:         }else if( (pTab = sqlite3LocateTable(pParse, 0, z, zDb))!=0 ){
                   76296:           analyzeTable(pParse, pTab, 0);
                   76297:         }
                   76298:         sqlite3DbFree(db, z);
                   76299:       }
                   76300:     }   
                   76301:   }
                   76302: }
                   76303: 
                   76304: /*
                   76305: ** Used to pass information from the analyzer reader through to the
                   76306: ** callback routine.
                   76307: */
                   76308: typedef struct analysisInfo analysisInfo;
                   76309: struct analysisInfo {
                   76310:   sqlite3 *db;
                   76311:   const char *zDatabase;
                   76312: };
                   76313: 
                   76314: /*
                   76315: ** This callback is invoked once for each index when reading the
                   76316: ** sqlite_stat1 table.  
                   76317: **
                   76318: **     argv[0] = name of the table
                   76319: **     argv[1] = name of the index (might be NULL)
                   76320: **     argv[2] = results of analysis - on integer for each column
                   76321: **
                   76322: ** Entries for which argv[1]==NULL simply record the number of rows in
                   76323: ** the table.
                   76324: */
                   76325: static int analysisLoader(void *pData, int argc, char **argv, char **NotUsed){
                   76326:   analysisInfo *pInfo = (analysisInfo*)pData;
                   76327:   Index *pIndex;
                   76328:   Table *pTable;
                   76329:   int i, c, n;
                   76330:   unsigned int v;
                   76331:   const char *z;
                   76332: 
                   76333:   assert( argc==3 );
                   76334:   UNUSED_PARAMETER2(NotUsed, argc);
                   76335: 
                   76336:   if( argv==0 || argv[0]==0 || argv[2]==0 ){
                   76337:     return 0;
                   76338:   }
                   76339:   pTable = sqlite3FindTable(pInfo->db, argv[0], pInfo->zDatabase);
                   76340:   if( pTable==0 ){
                   76341:     return 0;
                   76342:   }
                   76343:   if( argv[1] ){
                   76344:     pIndex = sqlite3FindIndex(pInfo->db, argv[1], pInfo->zDatabase);
                   76345:   }else{
                   76346:     pIndex = 0;
                   76347:   }
                   76348:   n = pIndex ? pIndex->nColumn : 0;
                   76349:   z = argv[2];
                   76350:   for(i=0; *z && i<=n; i++){
                   76351:     v = 0;
                   76352:     while( (c=z[0])>='0' && c<='9' ){
                   76353:       v = v*10 + c - '0';
                   76354:       z++;
                   76355:     }
                   76356:     if( i==0 ) pTable->nRowEst = v;
                   76357:     if( pIndex==0 ) break;
                   76358:     pIndex->aiRowEst[i] = v;
                   76359:     if( *z==' ' ) z++;
                   76360:     if( memcmp(z, "unordered", 10)==0 ){
                   76361:       pIndex->bUnordered = 1;
                   76362:       break;
                   76363:     }
                   76364:   }
                   76365:   return 0;
                   76366: }
                   76367: 
                   76368: /*
                   76369: ** If the Index.aSample variable is not NULL, delete the aSample[] array
                   76370: ** and its contents.
                   76371: */
                   76372: SQLITE_PRIVATE void sqlite3DeleteIndexSamples(sqlite3 *db, Index *pIdx){
                   76373: #ifdef SQLITE_ENABLE_STAT2
                   76374:   if( pIdx->aSample ){
                   76375:     int j;
                   76376:     for(j=0; j<SQLITE_INDEX_SAMPLES; j++){
                   76377:       IndexSample *p = &pIdx->aSample[j];
                   76378:       if( p->eType==SQLITE_TEXT || p->eType==SQLITE_BLOB ){
                   76379:         sqlite3DbFree(db, p->u.z);
                   76380:       }
                   76381:     }
                   76382:     sqlite3DbFree(db, pIdx->aSample);
                   76383:   }
                   76384: #else
                   76385:   UNUSED_PARAMETER(db);
                   76386:   UNUSED_PARAMETER(pIdx);
                   76387: #endif
                   76388: }
                   76389: 
                   76390: /*
                   76391: ** Load the content of the sqlite_stat1 and sqlite_stat2 tables. The
                   76392: ** contents of sqlite_stat1 are used to populate the Index.aiRowEst[]
                   76393: ** arrays. The contents of sqlite_stat2 are used to populate the
                   76394: ** Index.aSample[] arrays.
                   76395: **
                   76396: ** If the sqlite_stat1 table is not present in the database, SQLITE_ERROR
                   76397: ** is returned. In this case, even if SQLITE_ENABLE_STAT2 was defined 
                   76398: ** during compilation and the sqlite_stat2 table is present, no data is 
                   76399: ** read from it.
                   76400: **
                   76401: ** If SQLITE_ENABLE_STAT2 was defined during compilation and the 
                   76402: ** sqlite_stat2 table is not present in the database, SQLITE_ERROR is
                   76403: ** returned. However, in this case, data is read from the sqlite_stat1
                   76404: ** table (if it is present) before returning.
                   76405: **
                   76406: ** If an OOM error occurs, this function always sets db->mallocFailed.
                   76407: ** This means if the caller does not care about other errors, the return
                   76408: ** code may be ignored.
                   76409: */
                   76410: SQLITE_PRIVATE int sqlite3AnalysisLoad(sqlite3 *db, int iDb){
                   76411:   analysisInfo sInfo;
                   76412:   HashElem *i;
                   76413:   char *zSql;
                   76414:   int rc;
                   76415: 
                   76416:   assert( iDb>=0 && iDb<db->nDb );
                   76417:   assert( db->aDb[iDb].pBt!=0 );
                   76418: 
                   76419:   /* Clear any prior statistics */
                   76420:   assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
                   76421:   for(i=sqliteHashFirst(&db->aDb[iDb].pSchema->idxHash);i;i=sqliteHashNext(i)){
                   76422:     Index *pIdx = sqliteHashData(i);
                   76423:     sqlite3DefaultRowEst(pIdx);
                   76424:     sqlite3DeleteIndexSamples(db, pIdx);
                   76425:     pIdx->aSample = 0;
                   76426:   }
                   76427: 
                   76428:   /* Check to make sure the sqlite_stat1 table exists */
                   76429:   sInfo.db = db;
                   76430:   sInfo.zDatabase = db->aDb[iDb].zName;
                   76431:   if( sqlite3FindTable(db, "sqlite_stat1", sInfo.zDatabase)==0 ){
                   76432:     return SQLITE_ERROR;
                   76433:   }
                   76434: 
                   76435:   /* Load new statistics out of the sqlite_stat1 table */
                   76436:   zSql = sqlite3MPrintf(db, 
                   76437:       "SELECT tbl, idx, stat FROM %Q.sqlite_stat1", sInfo.zDatabase);
                   76438:   if( zSql==0 ){
                   76439:     rc = SQLITE_NOMEM;
                   76440:   }else{
                   76441:     rc = sqlite3_exec(db, zSql, analysisLoader, &sInfo, 0);
                   76442:     sqlite3DbFree(db, zSql);
                   76443:   }
                   76444: 
                   76445: 
                   76446:   /* Load the statistics from the sqlite_stat2 table. */
                   76447: #ifdef SQLITE_ENABLE_STAT2
                   76448:   if( rc==SQLITE_OK && !sqlite3FindTable(db, "sqlite_stat2", sInfo.zDatabase) ){
                   76449:     rc = SQLITE_ERROR;
                   76450:   }
                   76451:   if( rc==SQLITE_OK ){
                   76452:     sqlite3_stmt *pStmt = 0;
                   76453: 
                   76454:     zSql = sqlite3MPrintf(db, 
                   76455:         "SELECT idx,sampleno,sample FROM %Q.sqlite_stat2", sInfo.zDatabase);
                   76456:     if( !zSql ){
                   76457:       rc = SQLITE_NOMEM;
                   76458:     }else{
                   76459:       rc = sqlite3_prepare(db, zSql, -1, &pStmt, 0);
                   76460:       sqlite3DbFree(db, zSql);
                   76461:     }
                   76462: 
                   76463:     if( rc==SQLITE_OK ){
                   76464:       while( sqlite3_step(pStmt)==SQLITE_ROW ){
                   76465:         char *zIndex;   /* Index name */
                   76466:         Index *pIdx;    /* Pointer to the index object */
                   76467: 
                   76468:         zIndex = (char *)sqlite3_column_text(pStmt, 0);
                   76469:         pIdx = zIndex ? sqlite3FindIndex(db, zIndex, sInfo.zDatabase) : 0;
                   76470:         if( pIdx ){
                   76471:           int iSample = sqlite3_column_int(pStmt, 1);
                   76472:           if( iSample<SQLITE_INDEX_SAMPLES && iSample>=0 ){
                   76473:             int eType = sqlite3_column_type(pStmt, 2);
                   76474: 
                   76475:             if( pIdx->aSample==0 ){
                   76476:               static const int sz = sizeof(IndexSample)*SQLITE_INDEX_SAMPLES;
                   76477:               pIdx->aSample = (IndexSample *)sqlite3DbMallocRaw(0, sz);
                   76478:               if( pIdx->aSample==0 ){
                   76479:                 db->mallocFailed = 1;
                   76480:                 break;
                   76481:               }
                   76482:              memset(pIdx->aSample, 0, sz);
                   76483:             }
                   76484: 
                   76485:             assert( pIdx->aSample );
                   76486:             {
                   76487:               IndexSample *pSample = &pIdx->aSample[iSample];
                   76488:               pSample->eType = (u8)eType;
                   76489:               if( eType==SQLITE_INTEGER || eType==SQLITE_FLOAT ){
                   76490:                 pSample->u.r = sqlite3_column_double(pStmt, 2);
                   76491:               }else if( eType==SQLITE_TEXT || eType==SQLITE_BLOB ){
                   76492:                 const char *z = (const char *)(
                   76493:                     (eType==SQLITE_BLOB) ?
                   76494:                     sqlite3_column_blob(pStmt, 2):
                   76495:                     sqlite3_column_text(pStmt, 2)
                   76496:                 );
                   76497:                 int n = sqlite3_column_bytes(pStmt, 2);
                   76498:                 if( n>24 ){
                   76499:                   n = 24;
                   76500:                 }
                   76501:                 pSample->nByte = (u8)n;
                   76502:                 if( n < 1){
                   76503:                   pSample->u.z = 0;
                   76504:                 }else{
                   76505:                   pSample->u.z = sqlite3DbStrNDup(0, z, n);
                   76506:                   if( pSample->u.z==0 ){
                   76507:                     db->mallocFailed = 1;
                   76508:                     break;
                   76509:                   }
                   76510:                 }
                   76511:               }
                   76512:             }
                   76513:           }
                   76514:         }
                   76515:       }
                   76516:       rc = sqlite3_finalize(pStmt);
                   76517:     }
                   76518:   }
                   76519: #endif
                   76520: 
                   76521:   if( rc==SQLITE_NOMEM ){
                   76522:     db->mallocFailed = 1;
                   76523:   }
                   76524:   return rc;
                   76525: }
                   76526: 
                   76527: 
                   76528: #endif /* SQLITE_OMIT_ANALYZE */
                   76529: 
                   76530: /************** End of analyze.c *********************************************/
                   76531: /************** Begin file attach.c ******************************************/
                   76532: /*
                   76533: ** 2003 April 6
                   76534: **
                   76535: ** The author disclaims copyright to this source code.  In place of
                   76536: ** a legal notice, here is a blessing:
                   76537: **
                   76538: **    May you do good and not evil.
                   76539: **    May you find forgiveness for yourself and forgive others.
                   76540: **    May you share freely, never taking more than you give.
                   76541: **
                   76542: *************************************************************************
                   76543: ** This file contains code used to implement the ATTACH and DETACH commands.
                   76544: */
                   76545: 
                   76546: #ifndef SQLITE_OMIT_ATTACH
                   76547: /*
                   76548: ** Resolve an expression that was part of an ATTACH or DETACH statement. This
                   76549: ** is slightly different from resolving a normal SQL expression, because simple
                   76550: ** identifiers are treated as strings, not possible column names or aliases.
                   76551: **
                   76552: ** i.e. if the parser sees:
                   76553: **
                   76554: **     ATTACH DATABASE abc AS def
                   76555: **
                   76556: ** it treats the two expressions as literal strings 'abc' and 'def' instead of
                   76557: ** looking for columns of the same name.
                   76558: **
                   76559: ** This only applies to the root node of pExpr, so the statement:
                   76560: **
                   76561: **     ATTACH DATABASE abc||def AS 'db2'
                   76562: **
                   76563: ** will fail because neither abc or def can be resolved.
                   76564: */
                   76565: static int resolveAttachExpr(NameContext *pName, Expr *pExpr)
                   76566: {
                   76567:   int rc = SQLITE_OK;
                   76568:   if( pExpr ){
                   76569:     if( pExpr->op!=TK_ID ){
                   76570:       rc = sqlite3ResolveExprNames(pName, pExpr);
                   76571:       if( rc==SQLITE_OK && !sqlite3ExprIsConstant(pExpr) ){
                   76572:         sqlite3ErrorMsg(pName->pParse, "invalid name: \"%s\"", pExpr->u.zToken);
                   76573:         return SQLITE_ERROR;
                   76574:       }
                   76575:     }else{
                   76576:       pExpr->op = TK_STRING;
                   76577:     }
                   76578:   }
                   76579:   return rc;
                   76580: }
                   76581: 
                   76582: /*
                   76583: ** An SQL user-function registered to do the work of an ATTACH statement. The
                   76584: ** three arguments to the function come directly from an attach statement:
                   76585: **
                   76586: **     ATTACH DATABASE x AS y KEY z
                   76587: **
                   76588: **     SELECT sqlite_attach(x, y, z)
                   76589: **
                   76590: ** If the optional "KEY z" syntax is omitted, an SQL NULL is passed as the
                   76591: ** third argument.
                   76592: */
                   76593: static void attachFunc(
                   76594:   sqlite3_context *context,
                   76595:   int NotUsed,
                   76596:   sqlite3_value **argv
                   76597: ){
                   76598:   int i;
                   76599:   int rc = 0;
                   76600:   sqlite3 *db = sqlite3_context_db_handle(context);
                   76601:   const char *zName;
                   76602:   const char *zFile;
                   76603:   char *zPath = 0;
                   76604:   char *zErr = 0;
                   76605:   unsigned int flags;
                   76606:   Db *aNew;
                   76607:   char *zErrDyn = 0;
                   76608:   sqlite3_vfs *pVfs;
                   76609: 
                   76610:   UNUSED_PARAMETER(NotUsed);
                   76611: 
                   76612:   zFile = (const char *)sqlite3_value_text(argv[0]);
                   76613:   zName = (const char *)sqlite3_value_text(argv[1]);
                   76614:   if( zFile==0 ) zFile = "";
                   76615:   if( zName==0 ) zName = "";
                   76616: 
                   76617:   /* Check for the following errors:
                   76618:   **
                   76619:   **     * Too many attached databases,
                   76620:   **     * Transaction currently open
                   76621:   **     * Specified database name already being used.
                   76622:   */
                   76623:   if( db->nDb>=db->aLimit[SQLITE_LIMIT_ATTACHED]+2 ){
                   76624:     zErrDyn = sqlite3MPrintf(db, "too many attached databases - max %d", 
                   76625:       db->aLimit[SQLITE_LIMIT_ATTACHED]
                   76626:     );
                   76627:     goto attach_error;
                   76628:   }
                   76629:   if( !db->autoCommit ){
                   76630:     zErrDyn = sqlite3MPrintf(db, "cannot ATTACH database within transaction");
                   76631:     goto attach_error;
                   76632:   }
                   76633:   for(i=0; i<db->nDb; i++){
                   76634:     char *z = db->aDb[i].zName;
                   76635:     assert( z && zName );
                   76636:     if( sqlite3StrICmp(z, zName)==0 ){
                   76637:       zErrDyn = sqlite3MPrintf(db, "database %s is already in use", zName);
                   76638:       goto attach_error;
                   76639:     }
                   76640:   }
                   76641: 
                   76642:   /* Allocate the new entry in the db->aDb[] array and initialise the schema
                   76643:   ** hash tables.
                   76644:   */
                   76645:   if( db->aDb==db->aDbStatic ){
                   76646:     aNew = sqlite3DbMallocRaw(db, sizeof(db->aDb[0])*3 );
                   76647:     if( aNew==0 ) return;
                   76648:     memcpy(aNew, db->aDb, sizeof(db->aDb[0])*2);
                   76649:   }else{
                   76650:     aNew = sqlite3DbRealloc(db, db->aDb, sizeof(db->aDb[0])*(db->nDb+1) );
                   76651:     if( aNew==0 ) return;
                   76652:   }
                   76653:   db->aDb = aNew;
                   76654:   aNew = &db->aDb[db->nDb];
                   76655:   memset(aNew, 0, sizeof(*aNew));
                   76656: 
                   76657:   /* Open the database file. If the btree is successfully opened, use
                   76658:   ** it to obtain the database schema. At this point the schema may
                   76659:   ** or may not be initialised.
                   76660:   */
                   76661:   flags = db->openFlags;
                   76662:   rc = sqlite3ParseUri(db->pVfs->zName, zFile, &flags, &pVfs, &zPath, &zErr);
                   76663:   if( rc!=SQLITE_OK ){
                   76664:     if( rc==SQLITE_NOMEM ) db->mallocFailed = 1;
                   76665:     sqlite3_result_error(context, zErr, -1);
                   76666:     sqlite3_free(zErr);
                   76667:     return;
                   76668:   }
                   76669:   assert( pVfs );
                   76670:   flags |= SQLITE_OPEN_MAIN_DB;
                   76671:   rc = sqlite3BtreeOpen(pVfs, zPath, db, &aNew->pBt, 0, flags);
                   76672:   sqlite3_free( zPath );
                   76673:   db->nDb++;
                   76674:   if( rc==SQLITE_CONSTRAINT ){
                   76675:     rc = SQLITE_ERROR;
                   76676:     zErrDyn = sqlite3MPrintf(db, "database is already attached");
                   76677:   }else if( rc==SQLITE_OK ){
                   76678:     Pager *pPager;
                   76679:     aNew->pSchema = sqlite3SchemaGet(db, aNew->pBt);
                   76680:     if( !aNew->pSchema ){
                   76681:       rc = SQLITE_NOMEM;
                   76682:     }else if( aNew->pSchema->file_format && aNew->pSchema->enc!=ENC(db) ){
                   76683:       zErrDyn = sqlite3MPrintf(db, 
                   76684:         "attached databases must use the same text encoding as main database");
                   76685:       rc = SQLITE_ERROR;
                   76686:     }
                   76687:     pPager = sqlite3BtreePager(aNew->pBt);
                   76688:     sqlite3PagerLockingMode(pPager, db->dfltLockMode);
                   76689:     sqlite3BtreeSecureDelete(aNew->pBt,
                   76690:                              sqlite3BtreeSecureDelete(db->aDb[0].pBt,-1) );
                   76691:   }
                   76692:   aNew->safety_level = 3;
                   76693:   aNew->zName = sqlite3DbStrDup(db, zName);
                   76694:   if( rc==SQLITE_OK && aNew->zName==0 ){
                   76695:     rc = SQLITE_NOMEM;
                   76696:   }
                   76697: 
                   76698: 
                   76699: #ifdef SQLITE_HAS_CODEC
                   76700:   if( rc==SQLITE_OK ){
                   76701:     extern int sqlite3CodecAttach(sqlite3*, int, const void*, int);
                   76702:     extern void sqlite3CodecGetKey(sqlite3*, int, void**, int*);
                   76703:     int nKey;
                   76704:     char *zKey;
                   76705:     int t = sqlite3_value_type(argv[2]);
                   76706:     switch( t ){
                   76707:       case SQLITE_INTEGER:
                   76708:       case SQLITE_FLOAT:
                   76709:         zErrDyn = sqlite3DbStrDup(db, "Invalid key value");
                   76710:         rc = SQLITE_ERROR;
                   76711:         break;
                   76712:         
                   76713:       case SQLITE_TEXT:
                   76714:       case SQLITE_BLOB:
                   76715:         nKey = sqlite3_value_bytes(argv[2]);
                   76716:         zKey = (char *)sqlite3_value_blob(argv[2]);
                   76717:         rc = sqlite3CodecAttach(db, db->nDb-1, zKey, nKey);
                   76718:         break;
                   76719: 
                   76720:       case SQLITE_NULL:
                   76721:         /* No key specified.  Use the key from the main database */
                   76722:         sqlite3CodecGetKey(db, 0, (void**)&zKey, &nKey);
                   76723:         if( nKey>0 || sqlite3BtreeGetReserve(db->aDb[0].pBt)>0 ){
                   76724:           rc = sqlite3CodecAttach(db, db->nDb-1, zKey, nKey);
                   76725:         }
                   76726:         break;
                   76727:     }
                   76728:   }
                   76729: #endif
                   76730: 
                   76731:   /* If the file was opened successfully, read the schema for the new database.
                   76732:   ** If this fails, or if opening the file failed, then close the file and 
                   76733:   ** remove the entry from the db->aDb[] array. i.e. put everything back the way
                   76734:   ** we found it.
                   76735:   */
                   76736:   if( rc==SQLITE_OK ){
                   76737:     sqlite3BtreeEnterAll(db);
                   76738:     rc = sqlite3Init(db, &zErrDyn);
                   76739:     sqlite3BtreeLeaveAll(db);
                   76740:   }
                   76741:   if( rc ){
                   76742:     int iDb = db->nDb - 1;
                   76743:     assert( iDb>=2 );
                   76744:     if( db->aDb[iDb].pBt ){
                   76745:       sqlite3BtreeClose(db->aDb[iDb].pBt);
                   76746:       db->aDb[iDb].pBt = 0;
                   76747:       db->aDb[iDb].pSchema = 0;
                   76748:     }
                   76749:     sqlite3ResetInternalSchema(db, -1);
                   76750:     db->nDb = iDb;
                   76751:     if( rc==SQLITE_NOMEM || rc==SQLITE_IOERR_NOMEM ){
                   76752:       db->mallocFailed = 1;
                   76753:       sqlite3DbFree(db, zErrDyn);
                   76754:       zErrDyn = sqlite3MPrintf(db, "out of memory");
                   76755:     }else if( zErrDyn==0 ){
                   76756:       zErrDyn = sqlite3MPrintf(db, "unable to open database: %s", zFile);
                   76757:     }
                   76758:     goto attach_error;
                   76759:   }
                   76760:   
                   76761:   return;
                   76762: 
                   76763: attach_error:
                   76764:   /* Return an error if we get here */
                   76765:   if( zErrDyn ){
                   76766:     sqlite3_result_error(context, zErrDyn, -1);
                   76767:     sqlite3DbFree(db, zErrDyn);
                   76768:   }
                   76769:   if( rc ) sqlite3_result_error_code(context, rc);
                   76770: }
                   76771: 
                   76772: /*
                   76773: ** An SQL user-function registered to do the work of an DETACH statement. The
                   76774: ** three arguments to the function come directly from a detach statement:
                   76775: **
                   76776: **     DETACH DATABASE x
                   76777: **
                   76778: **     SELECT sqlite_detach(x)
                   76779: */
                   76780: static void detachFunc(
                   76781:   sqlite3_context *context,
                   76782:   int NotUsed,
                   76783:   sqlite3_value **argv
                   76784: ){
                   76785:   const char *zName = (const char *)sqlite3_value_text(argv[0]);
                   76786:   sqlite3 *db = sqlite3_context_db_handle(context);
                   76787:   int i;
                   76788:   Db *pDb = 0;
                   76789:   char zErr[128];
                   76790: 
                   76791:   UNUSED_PARAMETER(NotUsed);
                   76792: 
                   76793:   if( zName==0 ) zName = "";
                   76794:   for(i=0; i<db->nDb; i++){
                   76795:     pDb = &db->aDb[i];
                   76796:     if( pDb->pBt==0 ) continue;
                   76797:     if( sqlite3StrICmp(pDb->zName, zName)==0 ) break;
                   76798:   }
                   76799: 
                   76800:   if( i>=db->nDb ){
                   76801:     sqlite3_snprintf(sizeof(zErr),zErr, "no such database: %s", zName);
                   76802:     goto detach_error;
                   76803:   }
                   76804:   if( i<2 ){
                   76805:     sqlite3_snprintf(sizeof(zErr),zErr, "cannot detach database %s", zName);
                   76806:     goto detach_error;
                   76807:   }
                   76808:   if( !db->autoCommit ){
                   76809:     sqlite3_snprintf(sizeof(zErr), zErr,
                   76810:                      "cannot DETACH database within transaction");
                   76811:     goto detach_error;
                   76812:   }
                   76813:   if( sqlite3BtreeIsInReadTrans(pDb->pBt) || sqlite3BtreeIsInBackup(pDb->pBt) ){
                   76814:     sqlite3_snprintf(sizeof(zErr),zErr, "database %s is locked", zName);
                   76815:     goto detach_error;
                   76816:   }
                   76817: 
                   76818:   sqlite3BtreeClose(pDb->pBt);
                   76819:   pDb->pBt = 0;
                   76820:   pDb->pSchema = 0;
                   76821:   sqlite3ResetInternalSchema(db, -1);
                   76822:   return;
                   76823: 
                   76824: detach_error:
                   76825:   sqlite3_result_error(context, zErr, -1);
                   76826: }
                   76827: 
                   76828: /*
                   76829: ** This procedure generates VDBE code for a single invocation of either the
                   76830: ** sqlite_detach() or sqlite_attach() SQL user functions.
                   76831: */
                   76832: static void codeAttach(
                   76833:   Parse *pParse,       /* The parser context */
                   76834:   int type,            /* Either SQLITE_ATTACH or SQLITE_DETACH */
                   76835:   FuncDef const *pFunc,/* FuncDef wrapper for detachFunc() or attachFunc() */
                   76836:   Expr *pAuthArg,      /* Expression to pass to authorization callback */
                   76837:   Expr *pFilename,     /* Name of database file */
                   76838:   Expr *pDbname,       /* Name of the database to use internally */
                   76839:   Expr *pKey           /* Database key for encryption extension */
                   76840: ){
                   76841:   int rc;
                   76842:   NameContext sName;
                   76843:   Vdbe *v;
                   76844:   sqlite3* db = pParse->db;
                   76845:   int regArgs;
                   76846: 
                   76847:   memset(&sName, 0, sizeof(NameContext));
                   76848:   sName.pParse = pParse;
                   76849: 
                   76850:   if( 
                   76851:       SQLITE_OK!=(rc = resolveAttachExpr(&sName, pFilename)) ||
                   76852:       SQLITE_OK!=(rc = resolveAttachExpr(&sName, pDbname)) ||
                   76853:       SQLITE_OK!=(rc = resolveAttachExpr(&sName, pKey))
                   76854:   ){
                   76855:     pParse->nErr++;
                   76856:     goto attach_end;
                   76857:   }
                   76858: 
                   76859: #ifndef SQLITE_OMIT_AUTHORIZATION
                   76860:   if( pAuthArg ){
                   76861:     char *zAuthArg;
                   76862:     if( pAuthArg->op==TK_STRING ){
                   76863:       zAuthArg = pAuthArg->u.zToken;
                   76864:     }else{
                   76865:       zAuthArg = 0;
                   76866:     }
                   76867:     rc = sqlite3AuthCheck(pParse, type, zAuthArg, 0, 0);
                   76868:     if(rc!=SQLITE_OK ){
                   76869:       goto attach_end;
                   76870:     }
                   76871:   }
                   76872: #endif /* SQLITE_OMIT_AUTHORIZATION */
                   76873: 
                   76874: 
                   76875:   v = sqlite3GetVdbe(pParse);
                   76876:   regArgs = sqlite3GetTempRange(pParse, 4);
                   76877:   sqlite3ExprCode(pParse, pFilename, regArgs);
                   76878:   sqlite3ExprCode(pParse, pDbname, regArgs+1);
                   76879:   sqlite3ExprCode(pParse, pKey, regArgs+2);
                   76880: 
                   76881:   assert( v || db->mallocFailed );
                   76882:   if( v ){
                   76883:     sqlite3VdbeAddOp3(v, OP_Function, 0, regArgs+3-pFunc->nArg, regArgs+3);
                   76884:     assert( pFunc->nArg==-1 || (pFunc->nArg&0xff)==pFunc->nArg );
                   76885:     sqlite3VdbeChangeP5(v, (u8)(pFunc->nArg));
                   76886:     sqlite3VdbeChangeP4(v, -1, (char *)pFunc, P4_FUNCDEF);
                   76887: 
                   76888:     /* Code an OP_Expire. For an ATTACH statement, set P1 to true (expire this
                   76889:     ** statement only). For DETACH, set it to false (expire all existing
                   76890:     ** statements).
                   76891:     */
                   76892:     sqlite3VdbeAddOp1(v, OP_Expire, (type==SQLITE_ATTACH));
                   76893:   }
                   76894:   
                   76895: attach_end:
                   76896:   sqlite3ExprDelete(db, pFilename);
                   76897:   sqlite3ExprDelete(db, pDbname);
                   76898:   sqlite3ExprDelete(db, pKey);
                   76899: }
                   76900: 
                   76901: /*
                   76902: ** Called by the parser to compile a DETACH statement.
                   76903: **
                   76904: **     DETACH pDbname
                   76905: */
                   76906: SQLITE_PRIVATE void sqlite3Detach(Parse *pParse, Expr *pDbname){
                   76907:   static const FuncDef detach_func = {
                   76908:     1,                /* nArg */
                   76909:     SQLITE_UTF8,      /* iPrefEnc */
                   76910:     0,                /* flags */
                   76911:     0,                /* pUserData */
                   76912:     0,                /* pNext */
                   76913:     detachFunc,       /* xFunc */
                   76914:     0,                /* xStep */
                   76915:     0,                /* xFinalize */
                   76916:     "sqlite_detach",  /* zName */
                   76917:     0,                /* pHash */
                   76918:     0                 /* pDestructor */
                   76919:   };
                   76920:   codeAttach(pParse, SQLITE_DETACH, &detach_func, pDbname, 0, 0, pDbname);
                   76921: }
                   76922: 
                   76923: /*
                   76924: ** Called by the parser to compile an ATTACH statement.
                   76925: **
                   76926: **     ATTACH p AS pDbname KEY pKey
                   76927: */
                   76928: SQLITE_PRIVATE void sqlite3Attach(Parse *pParse, Expr *p, Expr *pDbname, Expr *pKey){
                   76929:   static const FuncDef attach_func = {
                   76930:     3,                /* nArg */
                   76931:     SQLITE_UTF8,      /* iPrefEnc */
                   76932:     0,                /* flags */
                   76933:     0,                /* pUserData */
                   76934:     0,                /* pNext */
                   76935:     attachFunc,       /* xFunc */
                   76936:     0,                /* xStep */
                   76937:     0,                /* xFinalize */
                   76938:     "sqlite_attach",  /* zName */
                   76939:     0,                /* pHash */
                   76940:     0                 /* pDestructor */
                   76941:   };
                   76942:   codeAttach(pParse, SQLITE_ATTACH, &attach_func, p, p, pDbname, pKey);
                   76943: }
                   76944: #endif /* SQLITE_OMIT_ATTACH */
                   76945: 
                   76946: /*
                   76947: ** Initialize a DbFixer structure.  This routine must be called prior
                   76948: ** to passing the structure to one of the sqliteFixAAAA() routines below.
                   76949: **
                   76950: ** The return value indicates whether or not fixation is required.  TRUE
                   76951: ** means we do need to fix the database references, FALSE means we do not.
                   76952: */
                   76953: SQLITE_PRIVATE int sqlite3FixInit(
                   76954:   DbFixer *pFix,      /* The fixer to be initialized */
                   76955:   Parse *pParse,      /* Error messages will be written here */
                   76956:   int iDb,            /* This is the database that must be used */
                   76957:   const char *zType,  /* "view", "trigger", or "index" */
                   76958:   const Token *pName  /* Name of the view, trigger, or index */
                   76959: ){
                   76960:   sqlite3 *db;
                   76961: 
                   76962:   if( NEVER(iDb<0) || iDb==1 ) return 0;
                   76963:   db = pParse->db;
                   76964:   assert( db->nDb>iDb );
                   76965:   pFix->pParse = pParse;
                   76966:   pFix->zDb = db->aDb[iDb].zName;
                   76967:   pFix->zType = zType;
                   76968:   pFix->pName = pName;
                   76969:   return 1;
                   76970: }
                   76971: 
                   76972: /*
                   76973: ** The following set of routines walk through the parse tree and assign
                   76974: ** a specific database to all table references where the database name
                   76975: ** was left unspecified in the original SQL statement.  The pFix structure
                   76976: ** must have been initialized by a prior call to sqlite3FixInit().
                   76977: **
                   76978: ** These routines are used to make sure that an index, trigger, or
                   76979: ** view in one database does not refer to objects in a different database.
                   76980: ** (Exception: indices, triggers, and views in the TEMP database are
                   76981: ** allowed to refer to anything.)  If a reference is explicitly made
                   76982: ** to an object in a different database, an error message is added to
                   76983: ** pParse->zErrMsg and these routines return non-zero.  If everything
                   76984: ** checks out, these routines return 0.
                   76985: */
                   76986: SQLITE_PRIVATE int sqlite3FixSrcList(
                   76987:   DbFixer *pFix,       /* Context of the fixation */
                   76988:   SrcList *pList       /* The Source list to check and modify */
                   76989: ){
                   76990:   int i;
                   76991:   const char *zDb;
                   76992:   struct SrcList_item *pItem;
                   76993: 
                   76994:   if( NEVER(pList==0) ) return 0;
                   76995:   zDb = pFix->zDb;
                   76996:   for(i=0, pItem=pList->a; i<pList->nSrc; i++, pItem++){
                   76997:     if( pItem->zDatabase==0 ){
                   76998:       pItem->zDatabase = sqlite3DbStrDup(pFix->pParse->db, zDb);
                   76999:     }else if( sqlite3StrICmp(pItem->zDatabase,zDb)!=0 ){
                   77000:       sqlite3ErrorMsg(pFix->pParse,
                   77001:          "%s %T cannot reference objects in database %s",
                   77002:          pFix->zType, pFix->pName, pItem->zDatabase);
                   77003:       return 1;
                   77004:     }
                   77005: #if !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_TRIGGER)
                   77006:     if( sqlite3FixSelect(pFix, pItem->pSelect) ) return 1;
                   77007:     if( sqlite3FixExpr(pFix, pItem->pOn) ) return 1;
                   77008: #endif
                   77009:   }
                   77010:   return 0;
                   77011: }
                   77012: #if !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_TRIGGER)
                   77013: SQLITE_PRIVATE int sqlite3FixSelect(
                   77014:   DbFixer *pFix,       /* Context of the fixation */
                   77015:   Select *pSelect      /* The SELECT statement to be fixed to one database */
                   77016: ){
                   77017:   while( pSelect ){
                   77018:     if( sqlite3FixExprList(pFix, pSelect->pEList) ){
                   77019:       return 1;
                   77020:     }
                   77021:     if( sqlite3FixSrcList(pFix, pSelect->pSrc) ){
                   77022:       return 1;
                   77023:     }
                   77024:     if( sqlite3FixExpr(pFix, pSelect->pWhere) ){
                   77025:       return 1;
                   77026:     }
                   77027:     if( sqlite3FixExpr(pFix, pSelect->pHaving) ){
                   77028:       return 1;
                   77029:     }
                   77030:     pSelect = pSelect->pPrior;
                   77031:   }
                   77032:   return 0;
                   77033: }
                   77034: SQLITE_PRIVATE int sqlite3FixExpr(
                   77035:   DbFixer *pFix,     /* Context of the fixation */
                   77036:   Expr *pExpr        /* The expression to be fixed to one database */
                   77037: ){
                   77038:   while( pExpr ){
                   77039:     if( ExprHasAnyProperty(pExpr, EP_TokenOnly) ) break;
                   77040:     if( ExprHasProperty(pExpr, EP_xIsSelect) ){
                   77041:       if( sqlite3FixSelect(pFix, pExpr->x.pSelect) ) return 1;
                   77042:     }else{
                   77043:       if( sqlite3FixExprList(pFix, pExpr->x.pList) ) return 1;
                   77044:     }
                   77045:     if( sqlite3FixExpr(pFix, pExpr->pRight) ){
                   77046:       return 1;
                   77047:     }
                   77048:     pExpr = pExpr->pLeft;
                   77049:   }
                   77050:   return 0;
                   77051: }
                   77052: SQLITE_PRIVATE int sqlite3FixExprList(
                   77053:   DbFixer *pFix,     /* Context of the fixation */
                   77054:   ExprList *pList    /* The expression to be fixed to one database */
                   77055: ){
                   77056:   int i;
                   77057:   struct ExprList_item *pItem;
                   77058:   if( pList==0 ) return 0;
                   77059:   for(i=0, pItem=pList->a; i<pList->nExpr; i++, pItem++){
                   77060:     if( sqlite3FixExpr(pFix, pItem->pExpr) ){
                   77061:       return 1;
                   77062:     }
                   77063:   }
                   77064:   return 0;
                   77065: }
                   77066: #endif
                   77067: 
                   77068: #ifndef SQLITE_OMIT_TRIGGER
                   77069: SQLITE_PRIVATE int sqlite3FixTriggerStep(
                   77070:   DbFixer *pFix,     /* Context of the fixation */
                   77071:   TriggerStep *pStep /* The trigger step be fixed to one database */
                   77072: ){
                   77073:   while( pStep ){
                   77074:     if( sqlite3FixSelect(pFix, pStep->pSelect) ){
                   77075:       return 1;
                   77076:     }
                   77077:     if( sqlite3FixExpr(pFix, pStep->pWhere) ){
                   77078:       return 1;
                   77079:     }
                   77080:     if( sqlite3FixExprList(pFix, pStep->pExprList) ){
                   77081:       return 1;
                   77082:     }
                   77083:     pStep = pStep->pNext;
                   77084:   }
                   77085:   return 0;
                   77086: }
                   77087: #endif
                   77088: 
                   77089: /************** End of attach.c **********************************************/
                   77090: /************** Begin file auth.c ********************************************/
                   77091: /*
                   77092: ** 2003 January 11
                   77093: **
                   77094: ** The author disclaims copyright to this source code.  In place of
                   77095: ** a legal notice, here is a blessing:
                   77096: **
                   77097: **    May you do good and not evil.
                   77098: **    May you find forgiveness for yourself and forgive others.
                   77099: **    May you share freely, never taking more than you give.
                   77100: **
                   77101: *************************************************************************
                   77102: ** This file contains code used to implement the sqlite3_set_authorizer()
                   77103: ** API.  This facility is an optional feature of the library.  Embedded
                   77104: ** systems that do not need this facility may omit it by recompiling
                   77105: ** the library with -DSQLITE_OMIT_AUTHORIZATION=1
                   77106: */
                   77107: 
                   77108: /*
                   77109: ** All of the code in this file may be omitted by defining a single
                   77110: ** macro.
                   77111: */
                   77112: #ifndef SQLITE_OMIT_AUTHORIZATION
                   77113: 
                   77114: /*
                   77115: ** Set or clear the access authorization function.
                   77116: **
                   77117: ** The access authorization function is be called during the compilation
                   77118: ** phase to verify that the user has read and/or write access permission on
                   77119: ** various fields of the database.  The first argument to the auth function
                   77120: ** is a copy of the 3rd argument to this routine.  The second argument
                   77121: ** to the auth function is one of these constants:
                   77122: **
                   77123: **       SQLITE_CREATE_INDEX
                   77124: **       SQLITE_CREATE_TABLE
                   77125: **       SQLITE_CREATE_TEMP_INDEX
                   77126: **       SQLITE_CREATE_TEMP_TABLE
                   77127: **       SQLITE_CREATE_TEMP_TRIGGER
                   77128: **       SQLITE_CREATE_TEMP_VIEW
                   77129: **       SQLITE_CREATE_TRIGGER
                   77130: **       SQLITE_CREATE_VIEW
                   77131: **       SQLITE_DELETE
                   77132: **       SQLITE_DROP_INDEX
                   77133: **       SQLITE_DROP_TABLE
                   77134: **       SQLITE_DROP_TEMP_INDEX
                   77135: **       SQLITE_DROP_TEMP_TABLE
                   77136: **       SQLITE_DROP_TEMP_TRIGGER
                   77137: **       SQLITE_DROP_TEMP_VIEW
                   77138: **       SQLITE_DROP_TRIGGER
                   77139: **       SQLITE_DROP_VIEW
                   77140: **       SQLITE_INSERT
                   77141: **       SQLITE_PRAGMA
                   77142: **       SQLITE_READ
                   77143: **       SQLITE_SELECT
                   77144: **       SQLITE_TRANSACTION
                   77145: **       SQLITE_UPDATE
                   77146: **
                   77147: ** The third and fourth arguments to the auth function are the name of
                   77148: ** the table and the column that are being accessed.  The auth function
                   77149: ** should return either SQLITE_OK, SQLITE_DENY, or SQLITE_IGNORE.  If
                   77150: ** SQLITE_OK is returned, it means that access is allowed.  SQLITE_DENY
                   77151: ** means that the SQL statement will never-run - the sqlite3_exec() call
                   77152: ** will return with an error.  SQLITE_IGNORE means that the SQL statement
                   77153: ** should run but attempts to read the specified column will return NULL
                   77154: ** and attempts to write the column will be ignored.
                   77155: **
                   77156: ** Setting the auth function to NULL disables this hook.  The default
                   77157: ** setting of the auth function is NULL.
                   77158: */
                   77159: SQLITE_API int sqlite3_set_authorizer(
                   77160:   sqlite3 *db,
                   77161:   int (*xAuth)(void*,int,const char*,const char*,const char*,const char*),
                   77162:   void *pArg
                   77163: ){
                   77164:   sqlite3_mutex_enter(db->mutex);
                   77165:   db->xAuth = xAuth;
                   77166:   db->pAuthArg = pArg;
                   77167:   sqlite3ExpirePreparedStatements(db);
                   77168:   sqlite3_mutex_leave(db->mutex);
                   77169:   return SQLITE_OK;
                   77170: }
                   77171: 
                   77172: /*
                   77173: ** Write an error message into pParse->zErrMsg that explains that the
                   77174: ** user-supplied authorization function returned an illegal value.
                   77175: */
                   77176: static void sqliteAuthBadReturnCode(Parse *pParse){
                   77177:   sqlite3ErrorMsg(pParse, "authorizer malfunction");
                   77178:   pParse->rc = SQLITE_ERROR;
                   77179: }
                   77180: 
                   77181: /*
                   77182: ** Invoke the authorization callback for permission to read column zCol from
                   77183: ** table zTab in database zDb. This function assumes that an authorization
                   77184: ** callback has been registered (i.e. that sqlite3.xAuth is not NULL).
                   77185: **
                   77186: ** If SQLITE_IGNORE is returned and pExpr is not NULL, then pExpr is changed
                   77187: ** to an SQL NULL expression. Otherwise, if pExpr is NULL, then SQLITE_IGNORE
                   77188: ** is treated as SQLITE_DENY. In this case an error is left in pParse.
                   77189: */
                   77190: SQLITE_PRIVATE int sqlite3AuthReadCol(
                   77191:   Parse *pParse,                  /* The parser context */
                   77192:   const char *zTab,               /* Table name */
                   77193:   const char *zCol,               /* Column name */
                   77194:   int iDb                         /* Index of containing database. */
                   77195: ){
                   77196:   sqlite3 *db = pParse->db;       /* Database handle */
                   77197:   char *zDb = db->aDb[iDb].zName; /* Name of attached database */
                   77198:   int rc;                         /* Auth callback return code */
                   77199: 
                   77200:   rc = db->xAuth(db->pAuthArg, SQLITE_READ, zTab,zCol,zDb,pParse->zAuthContext);
                   77201:   if( rc==SQLITE_DENY ){
                   77202:     if( db->nDb>2 || iDb!=0 ){
                   77203:       sqlite3ErrorMsg(pParse, "access to %s.%s.%s is prohibited",zDb,zTab,zCol);
                   77204:     }else{
                   77205:       sqlite3ErrorMsg(pParse, "access to %s.%s is prohibited", zTab, zCol);
                   77206:     }
                   77207:     pParse->rc = SQLITE_AUTH;
                   77208:   }else if( rc!=SQLITE_IGNORE && rc!=SQLITE_OK ){
                   77209:     sqliteAuthBadReturnCode(pParse);
                   77210:   }
                   77211:   return rc;
                   77212: }
                   77213: 
                   77214: /*
                   77215: ** The pExpr should be a TK_COLUMN expression.  The table referred to
                   77216: ** is in pTabList or else it is the NEW or OLD table of a trigger.  
                   77217: ** Check to see if it is OK to read this particular column.
                   77218: **
                   77219: ** If the auth function returns SQLITE_IGNORE, change the TK_COLUMN 
                   77220: ** instruction into a TK_NULL.  If the auth function returns SQLITE_DENY,
                   77221: ** then generate an error.
                   77222: */
                   77223: SQLITE_PRIVATE void sqlite3AuthRead(
                   77224:   Parse *pParse,        /* The parser context */
                   77225:   Expr *pExpr,          /* The expression to check authorization on */
                   77226:   Schema *pSchema,      /* The schema of the expression */
                   77227:   SrcList *pTabList     /* All table that pExpr might refer to */
                   77228: ){
                   77229:   sqlite3 *db = pParse->db;
                   77230:   Table *pTab = 0;      /* The table being read */
                   77231:   const char *zCol;     /* Name of the column of the table */
                   77232:   int iSrc;             /* Index in pTabList->a[] of table being read */
                   77233:   int iDb;              /* The index of the database the expression refers to */
                   77234:   int iCol;             /* Index of column in table */
                   77235: 
                   77236:   if( db->xAuth==0 ) return;
                   77237:   iDb = sqlite3SchemaToIndex(pParse->db, pSchema);
                   77238:   if( iDb<0 ){
                   77239:     /* An attempt to read a column out of a subquery or other
                   77240:     ** temporary table. */
                   77241:     return;
                   77242:   }
                   77243: 
                   77244:   assert( pExpr->op==TK_COLUMN || pExpr->op==TK_TRIGGER );
                   77245:   if( pExpr->op==TK_TRIGGER ){
                   77246:     pTab = pParse->pTriggerTab;
                   77247:   }else{
                   77248:     assert( pTabList );
                   77249:     for(iSrc=0; ALWAYS(iSrc<pTabList->nSrc); iSrc++){
                   77250:       if( pExpr->iTable==pTabList->a[iSrc].iCursor ){
                   77251:         pTab = pTabList->a[iSrc].pTab;
                   77252:         break;
                   77253:       }
                   77254:     }
                   77255:   }
                   77256:   iCol = pExpr->iColumn;
                   77257:   if( NEVER(pTab==0) ) return;
                   77258: 
                   77259:   if( iCol>=0 ){
                   77260:     assert( iCol<pTab->nCol );
                   77261:     zCol = pTab->aCol[iCol].zName;
                   77262:   }else if( pTab->iPKey>=0 ){
                   77263:     assert( pTab->iPKey<pTab->nCol );
                   77264:     zCol = pTab->aCol[pTab->iPKey].zName;
                   77265:   }else{
                   77266:     zCol = "ROWID";
                   77267:   }
                   77268:   assert( iDb>=0 && iDb<db->nDb );
                   77269:   if( SQLITE_IGNORE==sqlite3AuthReadCol(pParse, pTab->zName, zCol, iDb) ){
                   77270:     pExpr->op = TK_NULL;
                   77271:   }
                   77272: }
                   77273: 
                   77274: /*
                   77275: ** Do an authorization check using the code and arguments given.  Return
                   77276: ** either SQLITE_OK (zero) or SQLITE_IGNORE or SQLITE_DENY.  If SQLITE_DENY
                   77277: ** is returned, then the error count and error message in pParse are
                   77278: ** modified appropriately.
                   77279: */
                   77280: SQLITE_PRIVATE int sqlite3AuthCheck(
                   77281:   Parse *pParse,
                   77282:   int code,
                   77283:   const char *zArg1,
                   77284:   const char *zArg2,
                   77285:   const char *zArg3
                   77286: ){
                   77287:   sqlite3 *db = pParse->db;
                   77288:   int rc;
                   77289: 
                   77290:   /* Don't do any authorization checks if the database is initialising
                   77291:   ** or if the parser is being invoked from within sqlite3_declare_vtab.
                   77292:   */
                   77293:   if( db->init.busy || IN_DECLARE_VTAB ){
                   77294:     return SQLITE_OK;
                   77295:   }
                   77296: 
                   77297:   if( db->xAuth==0 ){
                   77298:     return SQLITE_OK;
                   77299:   }
                   77300:   rc = db->xAuth(db->pAuthArg, code, zArg1, zArg2, zArg3, pParse->zAuthContext);
                   77301:   if( rc==SQLITE_DENY ){
                   77302:     sqlite3ErrorMsg(pParse, "not authorized");
                   77303:     pParse->rc = SQLITE_AUTH;
                   77304:   }else if( rc!=SQLITE_OK && rc!=SQLITE_IGNORE ){
                   77305:     rc = SQLITE_DENY;
                   77306:     sqliteAuthBadReturnCode(pParse);
                   77307:   }
                   77308:   return rc;
                   77309: }
                   77310: 
                   77311: /*
                   77312: ** Push an authorization context.  After this routine is called, the
                   77313: ** zArg3 argument to authorization callbacks will be zContext until
                   77314: ** popped.  Or if pParse==0, this routine is a no-op.
                   77315: */
                   77316: SQLITE_PRIVATE void sqlite3AuthContextPush(
                   77317:   Parse *pParse,
                   77318:   AuthContext *pContext, 
                   77319:   const char *zContext
                   77320: ){
                   77321:   assert( pParse );
                   77322:   pContext->pParse = pParse;
                   77323:   pContext->zAuthContext = pParse->zAuthContext;
                   77324:   pParse->zAuthContext = zContext;
                   77325: }
                   77326: 
                   77327: /*
                   77328: ** Pop an authorization context that was previously pushed
                   77329: ** by sqlite3AuthContextPush
                   77330: */
                   77331: SQLITE_PRIVATE void sqlite3AuthContextPop(AuthContext *pContext){
                   77332:   if( pContext->pParse ){
                   77333:     pContext->pParse->zAuthContext = pContext->zAuthContext;
                   77334:     pContext->pParse = 0;
                   77335:   }
                   77336: }
                   77337: 
                   77338: #endif /* SQLITE_OMIT_AUTHORIZATION */
                   77339: 
                   77340: /************** End of auth.c ************************************************/
                   77341: /************** Begin file build.c *******************************************/
                   77342: /*
                   77343: ** 2001 September 15
                   77344: **
                   77345: ** The author disclaims copyright to this source code.  In place of
                   77346: ** a legal notice, here is a blessing:
                   77347: **
                   77348: **    May you do good and not evil.
                   77349: **    May you find forgiveness for yourself and forgive others.
                   77350: **    May you share freely, never taking more than you give.
                   77351: **
                   77352: *************************************************************************
                   77353: ** This file contains C code routines that are called by the SQLite parser
                   77354: ** when syntax rules are reduced.  The routines in this file handle the
                   77355: ** following kinds of SQL syntax:
                   77356: **
                   77357: **     CREATE TABLE
                   77358: **     DROP TABLE
                   77359: **     CREATE INDEX
                   77360: **     DROP INDEX
                   77361: **     creating ID lists
                   77362: **     BEGIN TRANSACTION
                   77363: **     COMMIT
                   77364: **     ROLLBACK
                   77365: */
                   77366: 
                   77367: /*
                   77368: ** This routine is called when a new SQL statement is beginning to
                   77369: ** be parsed.  Initialize the pParse structure as needed.
                   77370: */
                   77371: SQLITE_PRIVATE void sqlite3BeginParse(Parse *pParse, int explainFlag){
                   77372:   pParse->explain = (u8)explainFlag;
                   77373:   pParse->nVar = 0;
                   77374: }
                   77375: 
                   77376: #ifndef SQLITE_OMIT_SHARED_CACHE
                   77377: /*
                   77378: ** The TableLock structure is only used by the sqlite3TableLock() and
                   77379: ** codeTableLocks() functions.
                   77380: */
                   77381: struct TableLock {
                   77382:   int iDb;             /* The database containing the table to be locked */
                   77383:   int iTab;            /* The root page of the table to be locked */
                   77384:   u8 isWriteLock;      /* True for write lock.  False for a read lock */
                   77385:   const char *zName;   /* Name of the table */
                   77386: };
                   77387: 
                   77388: /*
                   77389: ** Record the fact that we want to lock a table at run-time.  
                   77390: **
                   77391: ** The table to be locked has root page iTab and is found in database iDb.
                   77392: ** A read or a write lock can be taken depending on isWritelock.
                   77393: **
                   77394: ** This routine just records the fact that the lock is desired.  The
                   77395: ** code to make the lock occur is generated by a later call to
                   77396: ** codeTableLocks() which occurs during sqlite3FinishCoding().
                   77397: */
                   77398: SQLITE_PRIVATE void sqlite3TableLock(
                   77399:   Parse *pParse,     /* Parsing context */
                   77400:   int iDb,           /* Index of the database containing the table to lock */
                   77401:   int iTab,          /* Root page number of the table to be locked */
                   77402:   u8 isWriteLock,    /* True for a write lock */
                   77403:   const char *zName  /* Name of the table to be locked */
                   77404: ){
                   77405:   Parse *pToplevel = sqlite3ParseToplevel(pParse);
                   77406:   int i;
                   77407:   int nBytes;
                   77408:   TableLock *p;
                   77409:   assert( iDb>=0 );
                   77410: 
                   77411:   for(i=0; i<pToplevel->nTableLock; i++){
                   77412:     p = &pToplevel->aTableLock[i];
                   77413:     if( p->iDb==iDb && p->iTab==iTab ){
                   77414:       p->isWriteLock = (p->isWriteLock || isWriteLock);
                   77415:       return;
                   77416:     }
                   77417:   }
                   77418: 
                   77419:   nBytes = sizeof(TableLock) * (pToplevel->nTableLock+1);
                   77420:   pToplevel->aTableLock =
                   77421:       sqlite3DbReallocOrFree(pToplevel->db, pToplevel->aTableLock, nBytes);
                   77422:   if( pToplevel->aTableLock ){
                   77423:     p = &pToplevel->aTableLock[pToplevel->nTableLock++];
                   77424:     p->iDb = iDb;
                   77425:     p->iTab = iTab;
                   77426:     p->isWriteLock = isWriteLock;
                   77427:     p->zName = zName;
                   77428:   }else{
                   77429:     pToplevel->nTableLock = 0;
                   77430:     pToplevel->db->mallocFailed = 1;
                   77431:   }
                   77432: }
                   77433: 
                   77434: /*
                   77435: ** Code an OP_TableLock instruction for each table locked by the
                   77436: ** statement (configured by calls to sqlite3TableLock()).
                   77437: */
                   77438: static void codeTableLocks(Parse *pParse){
                   77439:   int i;
                   77440:   Vdbe *pVdbe; 
                   77441: 
                   77442:   pVdbe = sqlite3GetVdbe(pParse);
                   77443:   assert( pVdbe!=0 ); /* sqlite3GetVdbe cannot fail: VDBE already allocated */
                   77444: 
                   77445:   for(i=0; i<pParse->nTableLock; i++){
                   77446:     TableLock *p = &pParse->aTableLock[i];
                   77447:     int p1 = p->iDb;
                   77448:     sqlite3VdbeAddOp4(pVdbe, OP_TableLock, p1, p->iTab, p->isWriteLock,
                   77449:                       p->zName, P4_STATIC);
                   77450:   }
                   77451: }
                   77452: #else
                   77453:   #define codeTableLocks(x)
                   77454: #endif
                   77455: 
                   77456: /*
                   77457: ** This routine is called after a single SQL statement has been
                   77458: ** parsed and a VDBE program to execute that statement has been
                   77459: ** prepared.  This routine puts the finishing touches on the
                   77460: ** VDBE program and resets the pParse structure for the next
                   77461: ** parse.
                   77462: **
                   77463: ** Note that if an error occurred, it might be the case that
                   77464: ** no VDBE code was generated.
                   77465: */
                   77466: SQLITE_PRIVATE void sqlite3FinishCoding(Parse *pParse){
                   77467:   sqlite3 *db;
                   77468:   Vdbe *v;
                   77469: 
                   77470:   db = pParse->db;
                   77471:   if( db->mallocFailed ) return;
                   77472:   if( pParse->nested ) return;
                   77473:   if( pParse->nErr ) return;
                   77474: 
                   77475:   /* Begin by generating some termination code at the end of the
                   77476:   ** vdbe program
                   77477:   */
                   77478:   v = sqlite3GetVdbe(pParse);
                   77479:   assert( !pParse->isMultiWrite 
                   77480:        || sqlite3VdbeAssertMayAbort(v, pParse->mayAbort));
                   77481:   if( v ){
                   77482:     sqlite3VdbeAddOp0(v, OP_Halt);
                   77483: 
                   77484:     /* The cookie mask contains one bit for each database file open.
                   77485:     ** (Bit 0 is for main, bit 1 is for temp, and so forth.)  Bits are
                   77486:     ** set for each database that is used.  Generate code to start a
                   77487:     ** transaction on each used database and to verify the schema cookie
                   77488:     ** on each used database.
                   77489:     */
                   77490:     if( pParse->cookieGoto>0 ){
                   77491:       yDbMask mask;
                   77492:       int iDb;
                   77493:       sqlite3VdbeJumpHere(v, pParse->cookieGoto-1);
                   77494:       for(iDb=0, mask=1; iDb<db->nDb; mask<<=1, iDb++){
                   77495:         if( (mask & pParse->cookieMask)==0 ) continue;
                   77496:         sqlite3VdbeUsesBtree(v, iDb);
                   77497:         sqlite3VdbeAddOp2(v,OP_Transaction, iDb, (mask & pParse->writeMask)!=0);
                   77498:         if( db->init.busy==0 ){
                   77499:           assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
                   77500:           sqlite3VdbeAddOp3(v, OP_VerifyCookie,
                   77501:                             iDb, pParse->cookieValue[iDb],
                   77502:                             db->aDb[iDb].pSchema->iGeneration);
                   77503:         }
                   77504:       }
                   77505: #ifndef SQLITE_OMIT_VIRTUALTABLE
                   77506:       {
                   77507:         int i;
                   77508:         for(i=0; i<pParse->nVtabLock; i++){
                   77509:           char *vtab = (char *)sqlite3GetVTable(db, pParse->apVtabLock[i]);
                   77510:           sqlite3VdbeAddOp4(v, OP_VBegin, 0, 0, 0, vtab, P4_VTAB);
                   77511:         }
                   77512:         pParse->nVtabLock = 0;
                   77513:       }
                   77514: #endif
                   77515: 
                   77516:       /* Once all the cookies have been verified and transactions opened, 
                   77517:       ** obtain the required table-locks. This is a no-op unless the 
                   77518:       ** shared-cache feature is enabled.
                   77519:       */
                   77520:       codeTableLocks(pParse);
                   77521: 
                   77522:       /* Initialize any AUTOINCREMENT data structures required.
                   77523:       */
                   77524:       sqlite3AutoincrementBegin(pParse);
                   77525: 
                   77526:       /* Finally, jump back to the beginning of the executable code. */
                   77527:       sqlite3VdbeAddOp2(v, OP_Goto, 0, pParse->cookieGoto);
                   77528:     }
                   77529:   }
                   77530: 
                   77531: 
                   77532:   /* Get the VDBE program ready for execution
                   77533:   */
                   77534:   if( v && ALWAYS(pParse->nErr==0) && !db->mallocFailed ){
                   77535: #ifdef SQLITE_DEBUG
                   77536:     FILE *trace = (db->flags & SQLITE_VdbeTrace)!=0 ? stdout : 0;
                   77537:     sqlite3VdbeTrace(v, trace);
                   77538: #endif
                   77539:     assert( pParse->iCacheLevel==0 );  /* Disables and re-enables match */
                   77540:     /* A minimum of one cursor is required if autoincrement is used
                   77541:     *  See ticket [a696379c1f08866] */
                   77542:     if( pParse->pAinc!=0 && pParse->nTab==0 ) pParse->nTab = 1;
                   77543:     sqlite3VdbeMakeReady(v, pParse);
                   77544:     pParse->rc = SQLITE_DONE;
                   77545:     pParse->colNamesSet = 0;
                   77546:   }else{
                   77547:     pParse->rc = SQLITE_ERROR;
                   77548:   }
                   77549:   pParse->nTab = 0;
                   77550:   pParse->nMem = 0;
                   77551:   pParse->nSet = 0;
                   77552:   pParse->nVar = 0;
                   77553:   pParse->cookieMask = 0;
                   77554:   pParse->cookieGoto = 0;
                   77555: }
                   77556: 
                   77557: /*
                   77558: ** Run the parser and code generator recursively in order to generate
                   77559: ** code for the SQL statement given onto the end of the pParse context
                   77560: ** currently under construction.  When the parser is run recursively
                   77561: ** this way, the final OP_Halt is not appended and other initialization
                   77562: ** and finalization steps are omitted because those are handling by the
                   77563: ** outermost parser.
                   77564: **
                   77565: ** Not everything is nestable.  This facility is designed to permit
                   77566: ** INSERT, UPDATE, and DELETE operations against SQLITE_MASTER.  Use
                   77567: ** care if you decide to try to use this routine for some other purposes.
                   77568: */
                   77569: SQLITE_PRIVATE void sqlite3NestedParse(Parse *pParse, const char *zFormat, ...){
                   77570:   va_list ap;
                   77571:   char *zSql;
                   77572:   char *zErrMsg = 0;
                   77573:   sqlite3 *db = pParse->db;
                   77574: # define SAVE_SZ  (sizeof(Parse) - offsetof(Parse,nVar))
                   77575:   char saveBuf[SAVE_SZ];
                   77576: 
                   77577:   if( pParse->nErr ) return;
                   77578:   assert( pParse->nested<10 );  /* Nesting should only be of limited depth */
                   77579:   va_start(ap, zFormat);
                   77580:   zSql = sqlite3VMPrintf(db, zFormat, ap);
                   77581:   va_end(ap);
                   77582:   if( zSql==0 ){
                   77583:     return;   /* A malloc must have failed */
                   77584:   }
                   77585:   pParse->nested++;
                   77586:   memcpy(saveBuf, &pParse->nVar, SAVE_SZ);
                   77587:   memset(&pParse->nVar, 0, SAVE_SZ);
                   77588:   sqlite3RunParser(pParse, zSql, &zErrMsg);
                   77589:   sqlite3DbFree(db, zErrMsg);
                   77590:   sqlite3DbFree(db, zSql);
                   77591:   memcpy(&pParse->nVar, saveBuf, SAVE_SZ);
                   77592:   pParse->nested--;
                   77593: }
                   77594: 
                   77595: /*
                   77596: ** Locate the in-memory structure that describes a particular database
                   77597: ** table given the name of that table and (optionally) the name of the
                   77598: ** database containing the table.  Return NULL if not found.
                   77599: **
                   77600: ** If zDatabase is 0, all databases are searched for the table and the
                   77601: ** first matching table is returned.  (No checking for duplicate table
                   77602: ** names is done.)  The search order is TEMP first, then MAIN, then any
                   77603: ** auxiliary databases added using the ATTACH command.
                   77604: **
                   77605: ** See also sqlite3LocateTable().
                   77606: */
                   77607: SQLITE_PRIVATE Table *sqlite3FindTable(sqlite3 *db, const char *zName, const char *zDatabase){
                   77608:   Table *p = 0;
                   77609:   int i;
                   77610:   int nName;
                   77611:   assert( zName!=0 );
                   77612:   nName = sqlite3Strlen30(zName);
                   77613:   /* All mutexes are required for schema access.  Make sure we hold them. */
                   77614:   assert( zDatabase!=0 || sqlite3BtreeHoldsAllMutexes(db) );
                   77615:   for(i=OMIT_TEMPDB; i<db->nDb; i++){
                   77616:     int j = (i<2) ? i^1 : i;   /* Search TEMP before MAIN */
                   77617:     if( zDatabase!=0 && sqlite3StrICmp(zDatabase, db->aDb[j].zName) ) continue;
                   77618:     assert( sqlite3SchemaMutexHeld(db, j, 0) );
                   77619:     p = sqlite3HashFind(&db->aDb[j].pSchema->tblHash, zName, nName);
                   77620:     if( p ) break;
                   77621:   }
                   77622:   return p;
                   77623: }
                   77624: 
                   77625: /*
                   77626: ** Locate the in-memory structure that describes a particular database
                   77627: ** table given the name of that table and (optionally) the name of the
                   77628: ** database containing the table.  Return NULL if not found.  Also leave an
                   77629: ** error message in pParse->zErrMsg.
                   77630: **
                   77631: ** The difference between this routine and sqlite3FindTable() is that this
                   77632: ** routine leaves an error message in pParse->zErrMsg where
                   77633: ** sqlite3FindTable() does not.
                   77634: */
                   77635: SQLITE_PRIVATE Table *sqlite3LocateTable(
                   77636:   Parse *pParse,         /* context in which to report errors */
                   77637:   int isView,            /* True if looking for a VIEW rather than a TABLE */
                   77638:   const char *zName,     /* Name of the table we are looking for */
                   77639:   const char *zDbase     /* Name of the database.  Might be NULL */
                   77640: ){
                   77641:   Table *p;
                   77642: 
                   77643:   /* Read the database schema. If an error occurs, leave an error message
                   77644:   ** and code in pParse and return NULL. */
                   77645:   if( SQLITE_OK!=sqlite3ReadSchema(pParse) ){
                   77646:     return 0;
                   77647:   }
                   77648: 
                   77649:   p = sqlite3FindTable(pParse->db, zName, zDbase);
                   77650:   if( p==0 ){
                   77651:     const char *zMsg = isView ? "no such view" : "no such table";
                   77652:     if( zDbase ){
                   77653:       sqlite3ErrorMsg(pParse, "%s: %s.%s", zMsg, zDbase, zName);
                   77654:     }else{
                   77655:       sqlite3ErrorMsg(pParse, "%s: %s", zMsg, zName);
                   77656:     }
                   77657:     pParse->checkSchema = 1;
                   77658:   }
                   77659:   return p;
                   77660: }
                   77661: 
                   77662: /*
                   77663: ** Locate the in-memory structure that describes 
                   77664: ** a particular index given the name of that index
                   77665: ** and the name of the database that contains the index.
                   77666: ** Return NULL if not found.
                   77667: **
                   77668: ** If zDatabase is 0, all databases are searched for the
                   77669: ** table and the first matching index is returned.  (No checking
                   77670: ** for duplicate index names is done.)  The search order is
                   77671: ** TEMP first, then MAIN, then any auxiliary databases added
                   77672: ** using the ATTACH command.
                   77673: */
                   77674: SQLITE_PRIVATE Index *sqlite3FindIndex(sqlite3 *db, const char *zName, const char *zDb){
                   77675:   Index *p = 0;
                   77676:   int i;
                   77677:   int nName = sqlite3Strlen30(zName);
                   77678:   /* All mutexes are required for schema access.  Make sure we hold them. */
                   77679:   assert( zDb!=0 || sqlite3BtreeHoldsAllMutexes(db) );
                   77680:   for(i=OMIT_TEMPDB; i<db->nDb; i++){
                   77681:     int j = (i<2) ? i^1 : i;  /* Search TEMP before MAIN */
                   77682:     Schema *pSchema = db->aDb[j].pSchema;
                   77683:     assert( pSchema );
                   77684:     if( zDb && sqlite3StrICmp(zDb, db->aDb[j].zName) ) continue;
                   77685:     assert( sqlite3SchemaMutexHeld(db, j, 0) );
                   77686:     p = sqlite3HashFind(&pSchema->idxHash, zName, nName);
                   77687:     if( p ) break;
                   77688:   }
                   77689:   return p;
                   77690: }
                   77691: 
                   77692: /*
                   77693: ** Reclaim the memory used by an index
                   77694: */
                   77695: static void freeIndex(sqlite3 *db, Index *p){
                   77696: #ifndef SQLITE_OMIT_ANALYZE
                   77697:   sqlite3DeleteIndexSamples(db, p);
                   77698: #endif
                   77699:   sqlite3DbFree(db, p->zColAff);
                   77700:   sqlite3DbFree(db, p);
                   77701: }
                   77702: 
                   77703: /*
                   77704: ** For the index called zIdxName which is found in the database iDb,
                   77705: ** unlike that index from its Table then remove the index from
                   77706: ** the index hash table and free all memory structures associated
                   77707: ** with the index.
                   77708: */
                   77709: SQLITE_PRIVATE void sqlite3UnlinkAndDeleteIndex(sqlite3 *db, int iDb, const char *zIdxName){
                   77710:   Index *pIndex;
                   77711:   int len;
                   77712:   Hash *pHash;
                   77713: 
                   77714:   assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
                   77715:   pHash = &db->aDb[iDb].pSchema->idxHash;
                   77716:   len = sqlite3Strlen30(zIdxName);
                   77717:   pIndex = sqlite3HashInsert(pHash, zIdxName, len, 0);
                   77718:   if( ALWAYS(pIndex) ){
                   77719:     if( pIndex->pTable->pIndex==pIndex ){
                   77720:       pIndex->pTable->pIndex = pIndex->pNext;
                   77721:     }else{
                   77722:       Index *p;
                   77723:       /* Justification of ALWAYS();  The index must be on the list of
                   77724:       ** indices. */
                   77725:       p = pIndex->pTable->pIndex;
                   77726:       while( ALWAYS(p) && p->pNext!=pIndex ){ p = p->pNext; }
                   77727:       if( ALWAYS(p && p->pNext==pIndex) ){
                   77728:         p->pNext = pIndex->pNext;
                   77729:       }
                   77730:     }
                   77731:     freeIndex(db, pIndex);
                   77732:   }
                   77733:   db->flags |= SQLITE_InternChanges;
                   77734: }
                   77735: 
                   77736: /*
                   77737: ** Erase all schema information from the in-memory hash tables of
                   77738: ** a single database.  This routine is called to reclaim memory
                   77739: ** before the database closes.  It is also called during a rollback
                   77740: ** if there were schema changes during the transaction or if a
                   77741: ** schema-cookie mismatch occurs.
                   77742: **
                   77743: ** If iDb<0 then reset the internal schema tables for all database
                   77744: ** files.  If iDb>=0 then reset the internal schema for only the
                   77745: ** single file indicated.
                   77746: */
                   77747: SQLITE_PRIVATE void sqlite3ResetInternalSchema(sqlite3 *db, int iDb){
                   77748:   int i, j;
                   77749:   assert( iDb<db->nDb );
                   77750: 
                   77751:   if( iDb>=0 ){
                   77752:     /* Case 1:  Reset the single schema identified by iDb */
                   77753:     Db *pDb = &db->aDb[iDb];
                   77754:     assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
                   77755:     assert( pDb->pSchema!=0 );
                   77756:     sqlite3SchemaClear(pDb->pSchema);
                   77757: 
                   77758:     /* If any database other than TEMP is reset, then also reset TEMP
                   77759:     ** since TEMP might be holding triggers that reference tables in the
                   77760:     ** other database.
                   77761:     */
                   77762:     if( iDb!=1 ){
                   77763:       pDb = &db->aDb[1];
                   77764:       assert( pDb->pSchema!=0 );
                   77765:       sqlite3SchemaClear(pDb->pSchema);
                   77766:     }
                   77767:     return;
                   77768:   }
                   77769:   /* Case 2 (from here to the end): Reset all schemas for all attached
                   77770:   ** databases. */
                   77771:   assert( iDb<0 );
                   77772:   sqlite3BtreeEnterAll(db);
                   77773:   for(i=0; i<db->nDb; i++){
                   77774:     Db *pDb = &db->aDb[i];
                   77775:     if( pDb->pSchema ){
                   77776:       sqlite3SchemaClear(pDb->pSchema);
                   77777:     }
                   77778:   }
                   77779:   db->flags &= ~SQLITE_InternChanges;
                   77780:   sqlite3VtabUnlockList(db);
                   77781:   sqlite3BtreeLeaveAll(db);
                   77782: 
                   77783:   /* If one or more of the auxiliary database files has been closed,
                   77784:   ** then remove them from the auxiliary database list.  We take the
                   77785:   ** opportunity to do this here since we have just deleted all of the
                   77786:   ** schema hash tables and therefore do not have to make any changes
                   77787:   ** to any of those tables.
                   77788:   */
                   77789:   for(i=j=2; i<db->nDb; i++){
                   77790:     struct Db *pDb = &db->aDb[i];
                   77791:     if( pDb->pBt==0 ){
                   77792:       sqlite3DbFree(db, pDb->zName);
                   77793:       pDb->zName = 0;
                   77794:       continue;
                   77795:     }
                   77796:     if( j<i ){
                   77797:       db->aDb[j] = db->aDb[i];
                   77798:     }
                   77799:     j++;
                   77800:   }
                   77801:   memset(&db->aDb[j], 0, (db->nDb-j)*sizeof(db->aDb[j]));
                   77802:   db->nDb = j;
                   77803:   if( db->nDb<=2 && db->aDb!=db->aDbStatic ){
                   77804:     memcpy(db->aDbStatic, db->aDb, 2*sizeof(db->aDb[0]));
                   77805:     sqlite3DbFree(db, db->aDb);
                   77806:     db->aDb = db->aDbStatic;
                   77807:   }
                   77808: }
                   77809: 
                   77810: /*
                   77811: ** This routine is called when a commit occurs.
                   77812: */
                   77813: SQLITE_PRIVATE void sqlite3CommitInternalChanges(sqlite3 *db){
                   77814:   db->flags &= ~SQLITE_InternChanges;
                   77815: }
                   77816: 
                   77817: /*
                   77818: ** Delete memory allocated for the column names of a table or view (the
                   77819: ** Table.aCol[] array).
                   77820: */
                   77821: static void sqliteDeleteColumnNames(sqlite3 *db, Table *pTable){
                   77822:   int i;
                   77823:   Column *pCol;
                   77824:   assert( pTable!=0 );
                   77825:   if( (pCol = pTable->aCol)!=0 ){
                   77826:     for(i=0; i<pTable->nCol; i++, pCol++){
                   77827:       sqlite3DbFree(db, pCol->zName);
                   77828:       sqlite3ExprDelete(db, pCol->pDflt);
                   77829:       sqlite3DbFree(db, pCol->zDflt);
                   77830:       sqlite3DbFree(db, pCol->zType);
                   77831:       sqlite3DbFree(db, pCol->zColl);
                   77832:     }
                   77833:     sqlite3DbFree(db, pTable->aCol);
                   77834:   }
                   77835: }
                   77836: 
                   77837: /*
                   77838: ** Remove the memory data structures associated with the given
                   77839: ** Table.  No changes are made to disk by this routine.
                   77840: **
                   77841: ** This routine just deletes the data structure.  It does not unlink
                   77842: ** the table data structure from the hash table.  But it does destroy
                   77843: ** memory structures of the indices and foreign keys associated with 
                   77844: ** the table.
                   77845: */
                   77846: SQLITE_PRIVATE void sqlite3DeleteTable(sqlite3 *db, Table *pTable){
                   77847:   Index *pIndex, *pNext;
                   77848: 
                   77849:   assert( !pTable || pTable->nRef>0 );
                   77850: 
                   77851:   /* Do not delete the table until the reference count reaches zero. */
                   77852:   if( !pTable ) return;
                   77853:   if( ((!db || db->pnBytesFreed==0) && (--pTable->nRef)>0) ) return;
                   77854: 
                   77855:   /* Delete all indices associated with this table. */
                   77856:   for(pIndex = pTable->pIndex; pIndex; pIndex=pNext){
                   77857:     pNext = pIndex->pNext;
                   77858:     assert( pIndex->pSchema==pTable->pSchema );
                   77859:     if( !db || db->pnBytesFreed==0 ){
                   77860:       char *zName = pIndex->zName; 
                   77861:       TESTONLY ( Index *pOld = ) sqlite3HashInsert(
                   77862:          &pIndex->pSchema->idxHash, zName, sqlite3Strlen30(zName), 0
                   77863:       );
                   77864:       assert( db==0 || sqlite3SchemaMutexHeld(db, 0, pIndex->pSchema) );
                   77865:       assert( pOld==pIndex || pOld==0 );
                   77866:     }
                   77867:     freeIndex(db, pIndex);
                   77868:   }
                   77869: 
                   77870:   /* Delete any foreign keys attached to this table. */
                   77871:   sqlite3FkDelete(db, pTable);
                   77872: 
                   77873:   /* Delete the Table structure itself.
                   77874:   */
                   77875:   sqliteDeleteColumnNames(db, pTable);
                   77876:   sqlite3DbFree(db, pTable->zName);
                   77877:   sqlite3DbFree(db, pTable->zColAff);
                   77878:   sqlite3SelectDelete(db, pTable->pSelect);
                   77879: #ifndef SQLITE_OMIT_CHECK
                   77880:   sqlite3ExprDelete(db, pTable->pCheck);
                   77881: #endif
                   77882: #ifndef SQLITE_OMIT_VIRTUALTABLE
                   77883:   sqlite3VtabClear(db, pTable);
                   77884: #endif
                   77885:   sqlite3DbFree(db, pTable);
                   77886: }
                   77887: 
                   77888: /*
                   77889: ** Unlink the given table from the hash tables and the delete the
                   77890: ** table structure with all its indices and foreign keys.
                   77891: */
                   77892: SQLITE_PRIVATE void sqlite3UnlinkAndDeleteTable(sqlite3 *db, int iDb, const char *zTabName){
                   77893:   Table *p;
                   77894:   Db *pDb;
                   77895: 
                   77896:   assert( db!=0 );
                   77897:   assert( iDb>=0 && iDb<db->nDb );
                   77898:   assert( zTabName );
                   77899:   assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
                   77900:   testcase( zTabName[0]==0 );  /* Zero-length table names are allowed */
                   77901:   pDb = &db->aDb[iDb];
                   77902:   p = sqlite3HashInsert(&pDb->pSchema->tblHash, zTabName,
                   77903:                         sqlite3Strlen30(zTabName),0);
                   77904:   sqlite3DeleteTable(db, p);
                   77905:   db->flags |= SQLITE_InternChanges;
                   77906: }
                   77907: 
                   77908: /*
                   77909: ** Given a token, return a string that consists of the text of that
                   77910: ** token.  Space to hold the returned string
                   77911: ** is obtained from sqliteMalloc() and must be freed by the calling
                   77912: ** function.
                   77913: **
                   77914: ** Any quotation marks (ex:  "name", 'name', [name], or `name`) that
                   77915: ** surround the body of the token are removed.
                   77916: **
                   77917: ** Tokens are often just pointers into the original SQL text and so
                   77918: ** are not \000 terminated and are not persistent.  The returned string
                   77919: ** is \000 terminated and is persistent.
                   77920: */
                   77921: SQLITE_PRIVATE char *sqlite3NameFromToken(sqlite3 *db, Token *pName){
                   77922:   char *zName;
                   77923:   if( pName ){
                   77924:     zName = sqlite3DbStrNDup(db, (char*)pName->z, pName->n);
                   77925:     sqlite3Dequote(zName);
                   77926:   }else{
                   77927:     zName = 0;
                   77928:   }
                   77929:   return zName;
                   77930: }
                   77931: 
                   77932: /*
                   77933: ** Open the sqlite_master table stored in database number iDb for
                   77934: ** writing. The table is opened using cursor 0.
                   77935: */
                   77936: SQLITE_PRIVATE void sqlite3OpenMasterTable(Parse *p, int iDb){
                   77937:   Vdbe *v = sqlite3GetVdbe(p);
                   77938:   sqlite3TableLock(p, iDb, MASTER_ROOT, 1, SCHEMA_TABLE(iDb));
                   77939:   sqlite3VdbeAddOp3(v, OP_OpenWrite, 0, MASTER_ROOT, iDb);
                   77940:   sqlite3VdbeChangeP4(v, -1, (char *)5, P4_INT32);  /* 5 column table */
                   77941:   if( p->nTab==0 ){
                   77942:     p->nTab = 1;
                   77943:   }
                   77944: }
                   77945: 
                   77946: /*
                   77947: ** Parameter zName points to a nul-terminated buffer containing the name
                   77948: ** of a database ("main", "temp" or the name of an attached db). This
                   77949: ** function returns the index of the named database in db->aDb[], or
                   77950: ** -1 if the named db cannot be found.
                   77951: */
                   77952: SQLITE_PRIVATE int sqlite3FindDbName(sqlite3 *db, const char *zName){
                   77953:   int i = -1;         /* Database number */
                   77954:   if( zName ){
                   77955:     Db *pDb;
                   77956:     int n = sqlite3Strlen30(zName);
                   77957:     for(i=(db->nDb-1), pDb=&db->aDb[i]; i>=0; i--, pDb--){
                   77958:       if( (!OMIT_TEMPDB || i!=1 ) && n==sqlite3Strlen30(pDb->zName) && 
                   77959:           0==sqlite3StrICmp(pDb->zName, zName) ){
                   77960:         break;
                   77961:       }
                   77962:     }
                   77963:   }
                   77964:   return i;
                   77965: }
                   77966: 
                   77967: /*
                   77968: ** The token *pName contains the name of a database (either "main" or
                   77969: ** "temp" or the name of an attached db). This routine returns the
                   77970: ** index of the named database in db->aDb[], or -1 if the named db 
                   77971: ** does not exist.
                   77972: */
                   77973: SQLITE_PRIVATE int sqlite3FindDb(sqlite3 *db, Token *pName){
                   77974:   int i;                               /* Database number */
                   77975:   char *zName;                         /* Name we are searching for */
                   77976:   zName = sqlite3NameFromToken(db, pName);
                   77977:   i = sqlite3FindDbName(db, zName);
                   77978:   sqlite3DbFree(db, zName);
                   77979:   return i;
                   77980: }
                   77981: 
                   77982: /* The table or view or trigger name is passed to this routine via tokens
                   77983: ** pName1 and pName2. If the table name was fully qualified, for example:
                   77984: **
                   77985: ** CREATE TABLE xxx.yyy (...);
                   77986: ** 
                   77987: ** Then pName1 is set to "xxx" and pName2 "yyy". On the other hand if
                   77988: ** the table name is not fully qualified, i.e.:
                   77989: **
                   77990: ** CREATE TABLE yyy(...);
                   77991: **
                   77992: ** Then pName1 is set to "yyy" and pName2 is "".
                   77993: **
                   77994: ** This routine sets the *ppUnqual pointer to point at the token (pName1 or
                   77995: ** pName2) that stores the unqualified table name.  The index of the
                   77996: ** database "xxx" is returned.
                   77997: */
                   77998: SQLITE_PRIVATE int sqlite3TwoPartName(
                   77999:   Parse *pParse,      /* Parsing and code generating context */
                   78000:   Token *pName1,      /* The "xxx" in the name "xxx.yyy" or "xxx" */
                   78001:   Token *pName2,      /* The "yyy" in the name "xxx.yyy" */
                   78002:   Token **pUnqual     /* Write the unqualified object name here */
                   78003: ){
                   78004:   int iDb;                    /* Database holding the object */
                   78005:   sqlite3 *db = pParse->db;
                   78006: 
                   78007:   if( ALWAYS(pName2!=0) && pName2->n>0 ){
                   78008:     if( db->init.busy ) {
                   78009:       sqlite3ErrorMsg(pParse, "corrupt database");
                   78010:       pParse->nErr++;
                   78011:       return -1;
                   78012:     }
                   78013:     *pUnqual = pName2;
                   78014:     iDb = sqlite3FindDb(db, pName1);
                   78015:     if( iDb<0 ){
                   78016:       sqlite3ErrorMsg(pParse, "unknown database %T", pName1);
                   78017:       pParse->nErr++;
                   78018:       return -1;
                   78019:     }
                   78020:   }else{
                   78021:     assert( db->init.iDb==0 || db->init.busy );
                   78022:     iDb = db->init.iDb;
                   78023:     *pUnqual = pName1;
                   78024:   }
                   78025:   return iDb;
                   78026: }
                   78027: 
                   78028: /*
                   78029: ** This routine is used to check if the UTF-8 string zName is a legal
                   78030: ** unqualified name for a new schema object (table, index, view or
                   78031: ** trigger). All names are legal except those that begin with the string
                   78032: ** "sqlite_" (in upper, lower or mixed case). This portion of the namespace
                   78033: ** is reserved for internal use.
                   78034: */
                   78035: SQLITE_PRIVATE int sqlite3CheckObjectName(Parse *pParse, const char *zName){
                   78036:   if( !pParse->db->init.busy && pParse->nested==0 
                   78037:           && (pParse->db->flags & SQLITE_WriteSchema)==0
                   78038:           && 0==sqlite3StrNICmp(zName, "sqlite_", 7) ){
                   78039:     sqlite3ErrorMsg(pParse, "object name reserved for internal use: %s", zName);
                   78040:     return SQLITE_ERROR;
                   78041:   }
                   78042:   return SQLITE_OK;
                   78043: }
                   78044: 
                   78045: /*
                   78046: ** Begin constructing a new table representation in memory.  This is
                   78047: ** the first of several action routines that get called in response
                   78048: ** to a CREATE TABLE statement.  In particular, this routine is called
                   78049: ** after seeing tokens "CREATE" and "TABLE" and the table name. The isTemp
                   78050: ** flag is true if the table should be stored in the auxiliary database
                   78051: ** file instead of in the main database file.  This is normally the case
                   78052: ** when the "TEMP" or "TEMPORARY" keyword occurs in between
                   78053: ** CREATE and TABLE.
                   78054: **
                   78055: ** The new table record is initialized and put in pParse->pNewTable.
                   78056: ** As more of the CREATE TABLE statement is parsed, additional action
                   78057: ** routines will be called to add more information to this record.
                   78058: ** At the end of the CREATE TABLE statement, the sqlite3EndTable() routine
                   78059: ** is called to complete the construction of the new table record.
                   78060: */
                   78061: SQLITE_PRIVATE void sqlite3StartTable(
                   78062:   Parse *pParse,   /* Parser context */
                   78063:   Token *pName1,   /* First part of the name of the table or view */
                   78064:   Token *pName2,   /* Second part of the name of the table or view */
                   78065:   int isTemp,      /* True if this is a TEMP table */
                   78066:   int isView,      /* True if this is a VIEW */
                   78067:   int isVirtual,   /* True if this is a VIRTUAL table */
                   78068:   int noErr        /* Do nothing if table already exists */
                   78069: ){
                   78070:   Table *pTable;
                   78071:   char *zName = 0; /* The name of the new table */
                   78072:   sqlite3 *db = pParse->db;
                   78073:   Vdbe *v;
                   78074:   int iDb;         /* Database number to create the table in */
                   78075:   Token *pName;    /* Unqualified name of the table to create */
                   78076: 
                   78077:   /* The table or view name to create is passed to this routine via tokens
                   78078:   ** pName1 and pName2. If the table name was fully qualified, for example:
                   78079:   **
                   78080:   ** CREATE TABLE xxx.yyy (...);
                   78081:   ** 
                   78082:   ** Then pName1 is set to "xxx" and pName2 "yyy". On the other hand if
                   78083:   ** the table name is not fully qualified, i.e.:
                   78084:   **
                   78085:   ** CREATE TABLE yyy(...);
                   78086:   **
                   78087:   ** Then pName1 is set to "yyy" and pName2 is "".
                   78088:   **
                   78089:   ** The call below sets the pName pointer to point at the token (pName1 or
                   78090:   ** pName2) that stores the unqualified table name. The variable iDb is
                   78091:   ** set to the index of the database that the table or view is to be
                   78092:   ** created in.
                   78093:   */
                   78094:   iDb = sqlite3TwoPartName(pParse, pName1, pName2, &pName);
                   78095:   if( iDb<0 ) return;
                   78096:   if( !OMIT_TEMPDB && isTemp && pName2->n>0 && iDb!=1 ){
                   78097:     /* If creating a temp table, the name may not be qualified. Unless 
                   78098:     ** the database name is "temp" anyway.  */
                   78099:     sqlite3ErrorMsg(pParse, "temporary table name must be unqualified");
                   78100:     return;
                   78101:   }
                   78102:   if( !OMIT_TEMPDB && isTemp ) iDb = 1;
                   78103: 
                   78104:   pParse->sNameToken = *pName;
                   78105:   zName = sqlite3NameFromToken(db, pName);
                   78106:   if( zName==0 ) return;
                   78107:   if( SQLITE_OK!=sqlite3CheckObjectName(pParse, zName) ){
                   78108:     goto begin_table_error;
                   78109:   }
                   78110:   if( db->init.iDb==1 ) isTemp = 1;
                   78111: #ifndef SQLITE_OMIT_AUTHORIZATION
                   78112:   assert( (isTemp & 1)==isTemp );
                   78113:   {
                   78114:     int code;
                   78115:     char *zDb = db->aDb[iDb].zName;
                   78116:     if( sqlite3AuthCheck(pParse, SQLITE_INSERT, SCHEMA_TABLE(isTemp), 0, zDb) ){
                   78117:       goto begin_table_error;
                   78118:     }
                   78119:     if( isView ){
                   78120:       if( !OMIT_TEMPDB && isTemp ){
                   78121:         code = SQLITE_CREATE_TEMP_VIEW;
                   78122:       }else{
                   78123:         code = SQLITE_CREATE_VIEW;
                   78124:       }
                   78125:     }else{
                   78126:       if( !OMIT_TEMPDB && isTemp ){
                   78127:         code = SQLITE_CREATE_TEMP_TABLE;
                   78128:       }else{
                   78129:         code = SQLITE_CREATE_TABLE;
                   78130:       }
                   78131:     }
                   78132:     if( !isVirtual && sqlite3AuthCheck(pParse, code, zName, 0, zDb) ){
                   78133:       goto begin_table_error;
                   78134:     }
                   78135:   }
                   78136: #endif
                   78137: 
                   78138:   /* Make sure the new table name does not collide with an existing
                   78139:   ** index or table name in the same database.  Issue an error message if
                   78140:   ** it does. The exception is if the statement being parsed was passed
                   78141:   ** to an sqlite3_declare_vtab() call. In that case only the column names
                   78142:   ** and types will be used, so there is no need to test for namespace
                   78143:   ** collisions.
                   78144:   */
                   78145:   if( !IN_DECLARE_VTAB ){
                   78146:     char *zDb = db->aDb[iDb].zName;
                   78147:     if( SQLITE_OK!=sqlite3ReadSchema(pParse) ){
                   78148:       goto begin_table_error;
                   78149:     }
                   78150:     pTable = sqlite3FindTable(db, zName, zDb);
                   78151:     if( pTable ){
                   78152:       if( !noErr ){
                   78153:         sqlite3ErrorMsg(pParse, "table %T already exists", pName);
                   78154:       }else{
                   78155:         assert( !db->init.busy );
                   78156:         sqlite3CodeVerifySchema(pParse, iDb);
                   78157:       }
                   78158:       goto begin_table_error;
                   78159:     }
                   78160:     if( sqlite3FindIndex(db, zName, zDb)!=0 ){
                   78161:       sqlite3ErrorMsg(pParse, "there is already an index named %s", zName);
                   78162:       goto begin_table_error;
                   78163:     }
                   78164:   }
                   78165: 
                   78166:   pTable = sqlite3DbMallocZero(db, sizeof(Table));
                   78167:   if( pTable==0 ){
                   78168:     db->mallocFailed = 1;
                   78169:     pParse->rc = SQLITE_NOMEM;
                   78170:     pParse->nErr++;
                   78171:     goto begin_table_error;
                   78172:   }
                   78173:   pTable->zName = zName;
                   78174:   pTable->iPKey = -1;
                   78175:   pTable->pSchema = db->aDb[iDb].pSchema;
                   78176:   pTable->nRef = 1;
                   78177:   pTable->nRowEst = 1000000;
                   78178:   assert( pParse->pNewTable==0 );
                   78179:   pParse->pNewTable = pTable;
                   78180: 
                   78181:   /* If this is the magic sqlite_sequence table used by autoincrement,
                   78182:   ** then record a pointer to this table in the main database structure
                   78183:   ** so that INSERT can find the table easily.
                   78184:   */
                   78185: #ifndef SQLITE_OMIT_AUTOINCREMENT
                   78186:   if( !pParse->nested && strcmp(zName, "sqlite_sequence")==0 ){
                   78187:     assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
                   78188:     pTable->pSchema->pSeqTab = pTable;
                   78189:   }
                   78190: #endif
                   78191: 
                   78192:   /* Begin generating the code that will insert the table record into
                   78193:   ** the SQLITE_MASTER table.  Note in particular that we must go ahead
                   78194:   ** and allocate the record number for the table entry now.  Before any
                   78195:   ** PRIMARY KEY or UNIQUE keywords are parsed.  Those keywords will cause
                   78196:   ** indices to be created and the table record must come before the 
                   78197:   ** indices.  Hence, the record number for the table must be allocated
                   78198:   ** now.
                   78199:   */
                   78200:   if( !db->init.busy && (v = sqlite3GetVdbe(pParse))!=0 ){
                   78201:     int j1;
                   78202:     int fileFormat;
                   78203:     int reg1, reg2, reg3;
                   78204:     sqlite3BeginWriteOperation(pParse, 0, iDb);
                   78205: 
                   78206: #ifndef SQLITE_OMIT_VIRTUALTABLE
                   78207:     if( isVirtual ){
                   78208:       sqlite3VdbeAddOp0(v, OP_VBegin);
                   78209:     }
                   78210: #endif
                   78211: 
                   78212:     /* If the file format and encoding in the database have not been set, 
                   78213:     ** set them now.
                   78214:     */
                   78215:     reg1 = pParse->regRowid = ++pParse->nMem;
                   78216:     reg2 = pParse->regRoot = ++pParse->nMem;
                   78217:     reg3 = ++pParse->nMem;
                   78218:     sqlite3VdbeAddOp3(v, OP_ReadCookie, iDb, reg3, BTREE_FILE_FORMAT);
                   78219:     sqlite3VdbeUsesBtree(v, iDb);
                   78220:     j1 = sqlite3VdbeAddOp1(v, OP_If, reg3);
                   78221:     fileFormat = (db->flags & SQLITE_LegacyFileFmt)!=0 ?
                   78222:                   1 : SQLITE_MAX_FILE_FORMAT;
                   78223:     sqlite3VdbeAddOp2(v, OP_Integer, fileFormat, reg3);
                   78224:     sqlite3VdbeAddOp3(v, OP_SetCookie, iDb, BTREE_FILE_FORMAT, reg3);
                   78225:     sqlite3VdbeAddOp2(v, OP_Integer, ENC(db), reg3);
                   78226:     sqlite3VdbeAddOp3(v, OP_SetCookie, iDb, BTREE_TEXT_ENCODING, reg3);
                   78227:     sqlite3VdbeJumpHere(v, j1);
                   78228: 
                   78229:     /* This just creates a place-holder record in the sqlite_master table.
                   78230:     ** The record created does not contain anything yet.  It will be replaced
                   78231:     ** by the real entry in code generated at sqlite3EndTable().
                   78232:     **
                   78233:     ** The rowid for the new entry is left in register pParse->regRowid.
                   78234:     ** The root page number of the new table is left in reg pParse->regRoot.
                   78235:     ** The rowid and root page number values are needed by the code that
                   78236:     ** sqlite3EndTable will generate.
                   78237:     */
                   78238: #if !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_VIRTUALTABLE)
                   78239:     if( isView || isVirtual ){
                   78240:       sqlite3VdbeAddOp2(v, OP_Integer, 0, reg2);
                   78241:     }else
                   78242: #endif
                   78243:     {
                   78244:       sqlite3VdbeAddOp2(v, OP_CreateTable, iDb, reg2);
                   78245:     }
                   78246:     sqlite3OpenMasterTable(pParse, iDb);
                   78247:     sqlite3VdbeAddOp2(v, OP_NewRowid, 0, reg1);
                   78248:     sqlite3VdbeAddOp2(v, OP_Null, 0, reg3);
                   78249:     sqlite3VdbeAddOp3(v, OP_Insert, 0, reg3, reg1);
                   78250:     sqlite3VdbeChangeP5(v, OPFLAG_APPEND);
                   78251:     sqlite3VdbeAddOp0(v, OP_Close);
                   78252:   }
                   78253: 
                   78254:   /* Normal (non-error) return. */
                   78255:   return;
                   78256: 
                   78257:   /* If an error occurs, we jump here */
                   78258: begin_table_error:
                   78259:   sqlite3DbFree(db, zName);
                   78260:   return;
                   78261: }
                   78262: 
                   78263: /*
                   78264: ** This macro is used to compare two strings in a case-insensitive manner.
                   78265: ** It is slightly faster than calling sqlite3StrICmp() directly, but
                   78266: ** produces larger code.
                   78267: **
                   78268: ** WARNING: This macro is not compatible with the strcmp() family. It
                   78269: ** returns true if the two strings are equal, otherwise false.
                   78270: */
                   78271: #define STRICMP(x, y) (\
                   78272: sqlite3UpperToLower[*(unsigned char *)(x)]==   \
                   78273: sqlite3UpperToLower[*(unsigned char *)(y)]     \
                   78274: && sqlite3StrICmp((x)+1,(y)+1)==0 )
                   78275: 
                   78276: /*
                   78277: ** Add a new column to the table currently being constructed.
                   78278: **
                   78279: ** The parser calls this routine once for each column declaration
                   78280: ** in a CREATE TABLE statement.  sqlite3StartTable() gets called
                   78281: ** first to get things going.  Then this routine is called for each
                   78282: ** column.
                   78283: */
                   78284: SQLITE_PRIVATE void sqlite3AddColumn(Parse *pParse, Token *pName){
                   78285:   Table *p;
                   78286:   int i;
                   78287:   char *z;
                   78288:   Column *pCol;
                   78289:   sqlite3 *db = pParse->db;
                   78290:   if( (p = pParse->pNewTable)==0 ) return;
                   78291: #if SQLITE_MAX_COLUMN
                   78292:   if( p->nCol+1>db->aLimit[SQLITE_LIMIT_COLUMN] ){
                   78293:     sqlite3ErrorMsg(pParse, "too many columns on %s", p->zName);
                   78294:     return;
                   78295:   }
                   78296: #endif
                   78297:   z = sqlite3NameFromToken(db, pName);
                   78298:   if( z==0 ) return;
                   78299:   for(i=0; i<p->nCol; i++){
                   78300:     if( STRICMP(z, p->aCol[i].zName) ){
                   78301:       sqlite3ErrorMsg(pParse, "duplicate column name: %s", z);
                   78302:       sqlite3DbFree(db, z);
                   78303:       return;
                   78304:     }
                   78305:   }
                   78306:   if( (p->nCol & 0x7)==0 ){
                   78307:     Column *aNew;
                   78308:     aNew = sqlite3DbRealloc(db,p->aCol,(p->nCol+8)*sizeof(p->aCol[0]));
                   78309:     if( aNew==0 ){
                   78310:       sqlite3DbFree(db, z);
                   78311:       return;
                   78312:     }
                   78313:     p->aCol = aNew;
                   78314:   }
                   78315:   pCol = &p->aCol[p->nCol];
                   78316:   memset(pCol, 0, sizeof(p->aCol[0]));
                   78317:   pCol->zName = z;
                   78318:  
                   78319:   /* If there is no type specified, columns have the default affinity
                   78320:   ** 'NONE'. If there is a type specified, then sqlite3AddColumnType() will
                   78321:   ** be called next to set pCol->affinity correctly.
                   78322:   */
                   78323:   pCol->affinity = SQLITE_AFF_NONE;
                   78324:   p->nCol++;
                   78325: }
                   78326: 
                   78327: /*
                   78328: ** This routine is called by the parser while in the middle of
                   78329: ** parsing a CREATE TABLE statement.  A "NOT NULL" constraint has
                   78330: ** been seen on a column.  This routine sets the notNull flag on
                   78331: ** the column currently under construction.
                   78332: */
                   78333: SQLITE_PRIVATE void sqlite3AddNotNull(Parse *pParse, int onError){
                   78334:   Table *p;
                   78335:   p = pParse->pNewTable;
                   78336:   if( p==0 || NEVER(p->nCol<1) ) return;
                   78337:   p->aCol[p->nCol-1].notNull = (u8)onError;
                   78338: }
                   78339: 
                   78340: /*
                   78341: ** Scan the column type name zType (length nType) and return the
                   78342: ** associated affinity type.
                   78343: **
                   78344: ** This routine does a case-independent search of zType for the 
                   78345: ** substrings in the following table. If one of the substrings is
                   78346: ** found, the corresponding affinity is returned. If zType contains
                   78347: ** more than one of the substrings, entries toward the top of 
                   78348: ** the table take priority. For example, if zType is 'BLOBINT', 
                   78349: ** SQLITE_AFF_INTEGER is returned.
                   78350: **
                   78351: ** Substring     | Affinity
                   78352: ** --------------------------------
                   78353: ** 'INT'         | SQLITE_AFF_INTEGER
                   78354: ** 'CHAR'        | SQLITE_AFF_TEXT
                   78355: ** 'CLOB'        | SQLITE_AFF_TEXT
                   78356: ** 'TEXT'        | SQLITE_AFF_TEXT
                   78357: ** 'BLOB'        | SQLITE_AFF_NONE
                   78358: ** 'REAL'        | SQLITE_AFF_REAL
                   78359: ** 'FLOA'        | SQLITE_AFF_REAL
                   78360: ** 'DOUB'        | SQLITE_AFF_REAL
                   78361: **
                   78362: ** If none of the substrings in the above table are found,
                   78363: ** SQLITE_AFF_NUMERIC is returned.
                   78364: */
                   78365: SQLITE_PRIVATE char sqlite3AffinityType(const char *zIn){
                   78366:   u32 h = 0;
                   78367:   char aff = SQLITE_AFF_NUMERIC;
                   78368: 
                   78369:   if( zIn ) while( zIn[0] ){
                   78370:     h = (h<<8) + sqlite3UpperToLower[(*zIn)&0xff];
                   78371:     zIn++;
                   78372:     if( h==(('c'<<24)+('h'<<16)+('a'<<8)+'r') ){             /* CHAR */
                   78373:       aff = SQLITE_AFF_TEXT; 
                   78374:     }else if( h==(('c'<<24)+('l'<<16)+('o'<<8)+'b') ){       /* CLOB */
                   78375:       aff = SQLITE_AFF_TEXT;
                   78376:     }else if( h==(('t'<<24)+('e'<<16)+('x'<<8)+'t') ){       /* TEXT */
                   78377:       aff = SQLITE_AFF_TEXT;
                   78378:     }else if( h==(('b'<<24)+('l'<<16)+('o'<<8)+'b')          /* BLOB */
                   78379:         && (aff==SQLITE_AFF_NUMERIC || aff==SQLITE_AFF_REAL) ){
                   78380:       aff = SQLITE_AFF_NONE;
                   78381: #ifndef SQLITE_OMIT_FLOATING_POINT
                   78382:     }else if( h==(('r'<<24)+('e'<<16)+('a'<<8)+'l')          /* REAL */
                   78383:         && aff==SQLITE_AFF_NUMERIC ){
                   78384:       aff = SQLITE_AFF_REAL;
                   78385:     }else if( h==(('f'<<24)+('l'<<16)+('o'<<8)+'a')          /* FLOA */
                   78386:         && aff==SQLITE_AFF_NUMERIC ){
                   78387:       aff = SQLITE_AFF_REAL;
                   78388:     }else if( h==(('d'<<24)+('o'<<16)+('u'<<8)+'b')          /* DOUB */
                   78389:         && aff==SQLITE_AFF_NUMERIC ){
                   78390:       aff = SQLITE_AFF_REAL;
                   78391: #endif
                   78392:     }else if( (h&0x00FFFFFF)==(('i'<<16)+('n'<<8)+'t') ){    /* INT */
                   78393:       aff = SQLITE_AFF_INTEGER;
                   78394:       break;
                   78395:     }
                   78396:   }
                   78397: 
                   78398:   return aff;
                   78399: }
                   78400: 
                   78401: /*
                   78402: ** This routine is called by the parser while in the middle of
                   78403: ** parsing a CREATE TABLE statement.  The pFirst token is the first
                   78404: ** token in the sequence of tokens that describe the type of the
                   78405: ** column currently under construction.   pLast is the last token
                   78406: ** in the sequence.  Use this information to construct a string
                   78407: ** that contains the typename of the column and store that string
                   78408: ** in zType.
                   78409: */ 
                   78410: SQLITE_PRIVATE void sqlite3AddColumnType(Parse *pParse, Token *pType){
                   78411:   Table *p;
                   78412:   Column *pCol;
                   78413: 
                   78414:   p = pParse->pNewTable;
                   78415:   if( p==0 || NEVER(p->nCol<1) ) return;
                   78416:   pCol = &p->aCol[p->nCol-1];
                   78417:   assert( pCol->zType==0 );
                   78418:   pCol->zType = sqlite3NameFromToken(pParse->db, pType);
                   78419:   pCol->affinity = sqlite3AffinityType(pCol->zType);
                   78420: }
                   78421: 
                   78422: /*
                   78423: ** The expression is the default value for the most recently added column
                   78424: ** of the table currently under construction.
                   78425: **
                   78426: ** Default value expressions must be constant.  Raise an exception if this
                   78427: ** is not the case.
                   78428: **
                   78429: ** This routine is called by the parser while in the middle of
                   78430: ** parsing a CREATE TABLE statement.
                   78431: */
                   78432: SQLITE_PRIVATE void sqlite3AddDefaultValue(Parse *pParse, ExprSpan *pSpan){
                   78433:   Table *p;
                   78434:   Column *pCol;
                   78435:   sqlite3 *db = pParse->db;
                   78436:   p = pParse->pNewTable;
                   78437:   if( p!=0 ){
                   78438:     pCol = &(p->aCol[p->nCol-1]);
                   78439:     if( !sqlite3ExprIsConstantOrFunction(pSpan->pExpr) ){
                   78440:       sqlite3ErrorMsg(pParse, "default value of column [%s] is not constant",
                   78441:           pCol->zName);
                   78442:     }else{
                   78443:       /* A copy of pExpr is used instead of the original, as pExpr contains
                   78444:       ** tokens that point to volatile memory. The 'span' of the expression
                   78445:       ** is required by pragma table_info.
                   78446:       */
                   78447:       sqlite3ExprDelete(db, pCol->pDflt);
                   78448:       pCol->pDflt = sqlite3ExprDup(db, pSpan->pExpr, EXPRDUP_REDUCE);
                   78449:       sqlite3DbFree(db, pCol->zDflt);
                   78450:       pCol->zDflt = sqlite3DbStrNDup(db, (char*)pSpan->zStart,
                   78451:                                      (int)(pSpan->zEnd - pSpan->zStart));
                   78452:     }
                   78453:   }
                   78454:   sqlite3ExprDelete(db, pSpan->pExpr);
                   78455: }
                   78456: 
                   78457: /*
                   78458: ** Designate the PRIMARY KEY for the table.  pList is a list of names 
                   78459: ** of columns that form the primary key.  If pList is NULL, then the
                   78460: ** most recently added column of the table is the primary key.
                   78461: **
                   78462: ** A table can have at most one primary key.  If the table already has
                   78463: ** a primary key (and this is the second primary key) then create an
                   78464: ** error.
                   78465: **
                   78466: ** If the PRIMARY KEY is on a single column whose datatype is INTEGER,
                   78467: ** then we will try to use that column as the rowid.  Set the Table.iPKey
                   78468: ** field of the table under construction to be the index of the
                   78469: ** INTEGER PRIMARY KEY column.  Table.iPKey is set to -1 if there is
                   78470: ** no INTEGER PRIMARY KEY.
                   78471: **
                   78472: ** If the key is not an INTEGER PRIMARY KEY, then create a unique
                   78473: ** index for the key.  No index is created for INTEGER PRIMARY KEYs.
                   78474: */
                   78475: SQLITE_PRIVATE void sqlite3AddPrimaryKey(
                   78476:   Parse *pParse,    /* Parsing context */
                   78477:   ExprList *pList,  /* List of field names to be indexed */
                   78478:   int onError,      /* What to do with a uniqueness conflict */
                   78479:   int autoInc,      /* True if the AUTOINCREMENT keyword is present */
                   78480:   int sortOrder     /* SQLITE_SO_ASC or SQLITE_SO_DESC */
                   78481: ){
                   78482:   Table *pTab = pParse->pNewTable;
                   78483:   char *zType = 0;
                   78484:   int iCol = -1, i;
                   78485:   if( pTab==0 || IN_DECLARE_VTAB ) goto primary_key_exit;
                   78486:   if( pTab->tabFlags & TF_HasPrimaryKey ){
                   78487:     sqlite3ErrorMsg(pParse, 
                   78488:       "table \"%s\" has more than one primary key", pTab->zName);
                   78489:     goto primary_key_exit;
                   78490:   }
                   78491:   pTab->tabFlags |= TF_HasPrimaryKey;
                   78492:   if( pList==0 ){
                   78493:     iCol = pTab->nCol - 1;
                   78494:     pTab->aCol[iCol].isPrimKey = 1;
                   78495:   }else{
                   78496:     for(i=0; i<pList->nExpr; i++){
                   78497:       for(iCol=0; iCol<pTab->nCol; iCol++){
                   78498:         if( sqlite3StrICmp(pList->a[i].zName, pTab->aCol[iCol].zName)==0 ){
                   78499:           break;
                   78500:         }
                   78501:       }
                   78502:       if( iCol<pTab->nCol ){
                   78503:         pTab->aCol[iCol].isPrimKey = 1;
                   78504:       }
                   78505:     }
                   78506:     if( pList->nExpr>1 ) iCol = -1;
                   78507:   }
                   78508:   if( iCol>=0 && iCol<pTab->nCol ){
                   78509:     zType = pTab->aCol[iCol].zType;
                   78510:   }
                   78511:   if( zType && sqlite3StrICmp(zType, "INTEGER")==0
                   78512:         && sortOrder==SQLITE_SO_ASC ){
                   78513:     pTab->iPKey = iCol;
                   78514:     pTab->keyConf = (u8)onError;
                   78515:     assert( autoInc==0 || autoInc==1 );
                   78516:     pTab->tabFlags |= autoInc*TF_Autoincrement;
                   78517:   }else if( autoInc ){
                   78518: #ifndef SQLITE_OMIT_AUTOINCREMENT
                   78519:     sqlite3ErrorMsg(pParse, "AUTOINCREMENT is only allowed on an "
                   78520:        "INTEGER PRIMARY KEY");
                   78521: #endif
                   78522:   }else{
                   78523:     Index *p;
                   78524:     p = sqlite3CreateIndex(pParse, 0, 0, 0, pList, onError, 0, 0, sortOrder, 0);
                   78525:     if( p ){
                   78526:       p->autoIndex = 2;
                   78527:     }
                   78528:     pList = 0;
                   78529:   }
                   78530: 
                   78531: primary_key_exit:
                   78532:   sqlite3ExprListDelete(pParse->db, pList);
                   78533:   return;
                   78534: }
                   78535: 
                   78536: /*
                   78537: ** Add a new CHECK constraint to the table currently under construction.
                   78538: */
                   78539: SQLITE_PRIVATE void sqlite3AddCheckConstraint(
                   78540:   Parse *pParse,    /* Parsing context */
                   78541:   Expr *pCheckExpr  /* The check expression */
                   78542: ){
                   78543:   sqlite3 *db = pParse->db;
                   78544: #ifndef SQLITE_OMIT_CHECK
                   78545:   Table *pTab = pParse->pNewTable;
                   78546:   if( pTab && !IN_DECLARE_VTAB ){
                   78547:     pTab->pCheck = sqlite3ExprAnd(db, pTab->pCheck, pCheckExpr);
                   78548:   }else
                   78549: #endif
                   78550:   {
                   78551:     sqlite3ExprDelete(db, pCheckExpr);
                   78552:   }
                   78553: }
                   78554: 
                   78555: /*
                   78556: ** Set the collation function of the most recently parsed table column
                   78557: ** to the CollSeq given.
                   78558: */
                   78559: SQLITE_PRIVATE void sqlite3AddCollateType(Parse *pParse, Token *pToken){
                   78560:   Table *p;
                   78561:   int i;
                   78562:   char *zColl;              /* Dequoted name of collation sequence */
                   78563:   sqlite3 *db;
                   78564: 
                   78565:   if( (p = pParse->pNewTable)==0 ) return;
                   78566:   i = p->nCol-1;
                   78567:   db = pParse->db;
                   78568:   zColl = sqlite3NameFromToken(db, pToken);
                   78569:   if( !zColl ) return;
                   78570: 
                   78571:   if( sqlite3LocateCollSeq(pParse, zColl) ){
                   78572:     Index *pIdx;
                   78573:     p->aCol[i].zColl = zColl;
                   78574:   
                   78575:     /* If the column is declared as "<name> PRIMARY KEY COLLATE <type>",
                   78576:     ** then an index may have been created on this column before the
                   78577:     ** collation type was added. Correct this if it is the case.
                   78578:     */
                   78579:     for(pIdx=p->pIndex; pIdx; pIdx=pIdx->pNext){
                   78580:       assert( pIdx->nColumn==1 );
                   78581:       if( pIdx->aiColumn[0]==i ){
                   78582:         pIdx->azColl[0] = p->aCol[i].zColl;
                   78583:       }
                   78584:     }
                   78585:   }else{
                   78586:     sqlite3DbFree(db, zColl);
                   78587:   }
                   78588: }
                   78589: 
                   78590: /*
                   78591: ** This function returns the collation sequence for database native text
                   78592: ** encoding identified by the string zName, length nName.
                   78593: **
                   78594: ** If the requested collation sequence is not available, or not available
                   78595: ** in the database native encoding, the collation factory is invoked to
                   78596: ** request it. If the collation factory does not supply such a sequence,
                   78597: ** and the sequence is available in another text encoding, then that is
                   78598: ** returned instead.
                   78599: **
                   78600: ** If no versions of the requested collations sequence are available, or
                   78601: ** another error occurs, NULL is returned and an error message written into
                   78602: ** pParse.
                   78603: **
                   78604: ** This routine is a wrapper around sqlite3FindCollSeq().  This routine
                   78605: ** invokes the collation factory if the named collation cannot be found
                   78606: ** and generates an error message.
                   78607: **
                   78608: ** See also: sqlite3FindCollSeq(), sqlite3GetCollSeq()
                   78609: */
                   78610: SQLITE_PRIVATE CollSeq *sqlite3LocateCollSeq(Parse *pParse, const char *zName){
                   78611:   sqlite3 *db = pParse->db;
                   78612:   u8 enc = ENC(db);
                   78613:   u8 initbusy = db->init.busy;
                   78614:   CollSeq *pColl;
                   78615: 
                   78616:   pColl = sqlite3FindCollSeq(db, enc, zName, initbusy);
                   78617:   if( !initbusy && (!pColl || !pColl->xCmp) ){
                   78618:     pColl = sqlite3GetCollSeq(db, enc, pColl, zName);
                   78619:     if( !pColl ){
                   78620:       sqlite3ErrorMsg(pParse, "no such collation sequence: %s", zName);
                   78621:     }
                   78622:   }
                   78623: 
                   78624:   return pColl;
                   78625: }
                   78626: 
                   78627: 
                   78628: /*
                   78629: ** Generate code that will increment the schema cookie.
                   78630: **
                   78631: ** The schema cookie is used to determine when the schema for the
                   78632: ** database changes.  After each schema change, the cookie value
                   78633: ** changes.  When a process first reads the schema it records the
                   78634: ** cookie.  Thereafter, whenever it goes to access the database,
                   78635: ** it checks the cookie to make sure the schema has not changed
                   78636: ** since it was last read.
                   78637: **
                   78638: ** This plan is not completely bullet-proof.  It is possible for
                   78639: ** the schema to change multiple times and for the cookie to be
                   78640: ** set back to prior value.  But schema changes are infrequent
                   78641: ** and the probability of hitting the same cookie value is only
                   78642: ** 1 chance in 2^32.  So we're safe enough.
                   78643: */
                   78644: SQLITE_PRIVATE void sqlite3ChangeCookie(Parse *pParse, int iDb){
                   78645:   int r1 = sqlite3GetTempReg(pParse);
                   78646:   sqlite3 *db = pParse->db;
                   78647:   Vdbe *v = pParse->pVdbe;
                   78648:   assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
                   78649:   sqlite3VdbeAddOp2(v, OP_Integer, db->aDb[iDb].pSchema->schema_cookie+1, r1);
                   78650:   sqlite3VdbeAddOp3(v, OP_SetCookie, iDb, BTREE_SCHEMA_VERSION, r1);
                   78651:   sqlite3ReleaseTempReg(pParse, r1);
                   78652: }
                   78653: 
                   78654: /*
                   78655: ** Measure the number of characters needed to output the given
                   78656: ** identifier.  The number returned includes any quotes used
                   78657: ** but does not include the null terminator.
                   78658: **
                   78659: ** The estimate is conservative.  It might be larger that what is
                   78660: ** really needed.
                   78661: */
                   78662: static int identLength(const char *z){
                   78663:   int n;
                   78664:   for(n=0; *z; n++, z++){
                   78665:     if( *z=='"' ){ n++; }
                   78666:   }
                   78667:   return n + 2;
                   78668: }
                   78669: 
                   78670: /*
                   78671: ** The first parameter is a pointer to an output buffer. The second 
                   78672: ** parameter is a pointer to an integer that contains the offset at
                   78673: ** which to write into the output buffer. This function copies the
                   78674: ** nul-terminated string pointed to by the third parameter, zSignedIdent,
                   78675: ** to the specified offset in the buffer and updates *pIdx to refer
                   78676: ** to the first byte after the last byte written before returning.
                   78677: ** 
                   78678: ** If the string zSignedIdent consists entirely of alpha-numeric
                   78679: ** characters, does not begin with a digit and is not an SQL keyword,
                   78680: ** then it is copied to the output buffer exactly as it is. Otherwise,
                   78681: ** it is quoted using double-quotes.
                   78682: */
                   78683: static void identPut(char *z, int *pIdx, char *zSignedIdent){
                   78684:   unsigned char *zIdent = (unsigned char*)zSignedIdent;
                   78685:   int i, j, needQuote;
                   78686:   i = *pIdx;
                   78687: 
                   78688:   for(j=0; zIdent[j]; j++){
                   78689:     if( !sqlite3Isalnum(zIdent[j]) && zIdent[j]!='_' ) break;
                   78690:   }
                   78691:   needQuote = sqlite3Isdigit(zIdent[0]) || sqlite3KeywordCode(zIdent, j)!=TK_ID;
                   78692:   if( !needQuote ){
                   78693:     needQuote = zIdent[j];
                   78694:   }
                   78695: 
                   78696:   if( needQuote ) z[i++] = '"';
                   78697:   for(j=0; zIdent[j]; j++){
                   78698:     z[i++] = zIdent[j];
                   78699:     if( zIdent[j]=='"' ) z[i++] = '"';
                   78700:   }
                   78701:   if( needQuote ) z[i++] = '"';
                   78702:   z[i] = 0;
                   78703:   *pIdx = i;
                   78704: }
                   78705: 
                   78706: /*
                   78707: ** Generate a CREATE TABLE statement appropriate for the given
                   78708: ** table.  Memory to hold the text of the statement is obtained
                   78709: ** from sqliteMalloc() and must be freed by the calling function.
                   78710: */
                   78711: static char *createTableStmt(sqlite3 *db, Table *p){
                   78712:   int i, k, n;
                   78713:   char *zStmt;
                   78714:   char *zSep, *zSep2, *zEnd;
                   78715:   Column *pCol;
                   78716:   n = 0;
                   78717:   for(pCol = p->aCol, i=0; i<p->nCol; i++, pCol++){
                   78718:     n += identLength(pCol->zName) + 5;
                   78719:   }
                   78720:   n += identLength(p->zName);
                   78721:   if( n<50 ){ 
                   78722:     zSep = "";
                   78723:     zSep2 = ",";
                   78724:     zEnd = ")";
                   78725:   }else{
                   78726:     zSep = "\n  ";
                   78727:     zSep2 = ",\n  ";
                   78728:     zEnd = "\n)";
                   78729:   }
                   78730:   n += 35 + 6*p->nCol;
                   78731:   zStmt = sqlite3DbMallocRaw(0, n);
                   78732:   if( zStmt==0 ){
                   78733:     db->mallocFailed = 1;
                   78734:     return 0;
                   78735:   }
                   78736:   sqlite3_snprintf(n, zStmt, "CREATE TABLE ");
                   78737:   k = sqlite3Strlen30(zStmt);
                   78738:   identPut(zStmt, &k, p->zName);
                   78739:   zStmt[k++] = '(';
                   78740:   for(pCol=p->aCol, i=0; i<p->nCol; i++, pCol++){
                   78741:     static const char * const azType[] = {
                   78742:         /* SQLITE_AFF_TEXT    */ " TEXT",
                   78743:         /* SQLITE_AFF_NONE    */ "",
                   78744:         /* SQLITE_AFF_NUMERIC */ " NUM",
                   78745:         /* SQLITE_AFF_INTEGER */ " INT",
                   78746:         /* SQLITE_AFF_REAL    */ " REAL"
                   78747:     };
                   78748:     int len;
                   78749:     const char *zType;
                   78750: 
                   78751:     sqlite3_snprintf(n-k, &zStmt[k], zSep);
                   78752:     k += sqlite3Strlen30(&zStmt[k]);
                   78753:     zSep = zSep2;
                   78754:     identPut(zStmt, &k, pCol->zName);
                   78755:     assert( pCol->affinity-SQLITE_AFF_TEXT >= 0 );
                   78756:     assert( pCol->affinity-SQLITE_AFF_TEXT < ArraySize(azType) );
                   78757:     testcase( pCol->affinity==SQLITE_AFF_TEXT );
                   78758:     testcase( pCol->affinity==SQLITE_AFF_NONE );
                   78759:     testcase( pCol->affinity==SQLITE_AFF_NUMERIC );
                   78760:     testcase( pCol->affinity==SQLITE_AFF_INTEGER );
                   78761:     testcase( pCol->affinity==SQLITE_AFF_REAL );
                   78762:     
                   78763:     zType = azType[pCol->affinity - SQLITE_AFF_TEXT];
                   78764:     len = sqlite3Strlen30(zType);
                   78765:     assert( pCol->affinity==SQLITE_AFF_NONE 
                   78766:             || pCol->affinity==sqlite3AffinityType(zType) );
                   78767:     memcpy(&zStmt[k], zType, len);
                   78768:     k += len;
                   78769:     assert( k<=n );
                   78770:   }
                   78771:   sqlite3_snprintf(n-k, &zStmt[k], "%s", zEnd);
                   78772:   return zStmt;
                   78773: }
                   78774: 
                   78775: /*
                   78776: ** This routine is called to report the final ")" that terminates
                   78777: ** a CREATE TABLE statement.
                   78778: **
                   78779: ** The table structure that other action routines have been building
                   78780: ** is added to the internal hash tables, assuming no errors have
                   78781: ** occurred.
                   78782: **
                   78783: ** An entry for the table is made in the master table on disk, unless
                   78784: ** this is a temporary table or db->init.busy==1.  When db->init.busy==1
                   78785: ** it means we are reading the sqlite_master table because we just
                   78786: ** connected to the database or because the sqlite_master table has
                   78787: ** recently changed, so the entry for this table already exists in
                   78788: ** the sqlite_master table.  We do not want to create it again.
                   78789: **
                   78790: ** If the pSelect argument is not NULL, it means that this routine
                   78791: ** was called to create a table generated from a 
                   78792: ** "CREATE TABLE ... AS SELECT ..." statement.  The column names of
                   78793: ** the new table will match the result set of the SELECT.
                   78794: */
                   78795: SQLITE_PRIVATE void sqlite3EndTable(
                   78796:   Parse *pParse,          /* Parse context */
                   78797:   Token *pCons,           /* The ',' token after the last column defn. */
                   78798:   Token *pEnd,            /* The final ')' token in the CREATE TABLE */
                   78799:   Select *pSelect         /* Select from a "CREATE ... AS SELECT" */
                   78800: ){
                   78801:   Table *p;
                   78802:   sqlite3 *db = pParse->db;
                   78803:   int iDb;
                   78804: 
                   78805:   if( (pEnd==0 && pSelect==0) || db->mallocFailed ){
                   78806:     return;
                   78807:   }
                   78808:   p = pParse->pNewTable;
                   78809:   if( p==0 ) return;
                   78810: 
                   78811:   assert( !db->init.busy || !pSelect );
                   78812: 
                   78813:   iDb = sqlite3SchemaToIndex(db, p->pSchema);
                   78814: 
                   78815: #ifndef SQLITE_OMIT_CHECK
                   78816:   /* Resolve names in all CHECK constraint expressions.
                   78817:   */
                   78818:   if( p->pCheck ){
                   78819:     SrcList sSrc;                   /* Fake SrcList for pParse->pNewTable */
                   78820:     NameContext sNC;                /* Name context for pParse->pNewTable */
                   78821: 
                   78822:     memset(&sNC, 0, sizeof(sNC));
                   78823:     memset(&sSrc, 0, sizeof(sSrc));
                   78824:     sSrc.nSrc = 1;
                   78825:     sSrc.a[0].zName = p->zName;
                   78826:     sSrc.a[0].pTab = p;
                   78827:     sSrc.a[0].iCursor = -1;
                   78828:     sNC.pParse = pParse;
                   78829:     sNC.pSrcList = &sSrc;
                   78830:     sNC.isCheck = 1;
                   78831:     if( sqlite3ResolveExprNames(&sNC, p->pCheck) ){
                   78832:       return;
                   78833:     }
                   78834:   }
                   78835: #endif /* !defined(SQLITE_OMIT_CHECK) */
                   78836: 
                   78837:   /* If the db->init.busy is 1 it means we are reading the SQL off the
                   78838:   ** "sqlite_master" or "sqlite_temp_master" table on the disk.
                   78839:   ** So do not write to the disk again.  Extract the root page number
                   78840:   ** for the table from the db->init.newTnum field.  (The page number
                   78841:   ** should have been put there by the sqliteOpenCb routine.)
                   78842:   */
                   78843:   if( db->init.busy ){
                   78844:     p->tnum = db->init.newTnum;
                   78845:   }
                   78846: 
                   78847:   /* If not initializing, then create a record for the new table
                   78848:   ** in the SQLITE_MASTER table of the database.
                   78849:   **
                   78850:   ** If this is a TEMPORARY table, write the entry into the auxiliary
                   78851:   ** file instead of into the main database file.
                   78852:   */
                   78853:   if( !db->init.busy ){
                   78854:     int n;
                   78855:     Vdbe *v;
                   78856:     char *zType;    /* "view" or "table" */
                   78857:     char *zType2;   /* "VIEW" or "TABLE" */
                   78858:     char *zStmt;    /* Text of the CREATE TABLE or CREATE VIEW statement */
                   78859: 
                   78860:     v = sqlite3GetVdbe(pParse);
                   78861:     if( NEVER(v==0) ) return;
                   78862: 
                   78863:     sqlite3VdbeAddOp1(v, OP_Close, 0);
                   78864: 
                   78865:     /* 
                   78866:     ** Initialize zType for the new view or table.
                   78867:     */
                   78868:     if( p->pSelect==0 ){
                   78869:       /* A regular table */
                   78870:       zType = "table";
                   78871:       zType2 = "TABLE";
                   78872: #ifndef SQLITE_OMIT_VIEW
                   78873:     }else{
                   78874:       /* A view */
                   78875:       zType = "view";
                   78876:       zType2 = "VIEW";
                   78877: #endif
                   78878:     }
                   78879: 
                   78880:     /* If this is a CREATE TABLE xx AS SELECT ..., execute the SELECT
                   78881:     ** statement to populate the new table. The root-page number for the
                   78882:     ** new table is in register pParse->regRoot.
                   78883:     **
                   78884:     ** Once the SELECT has been coded by sqlite3Select(), it is in a
                   78885:     ** suitable state to query for the column names and types to be used
                   78886:     ** by the new table.
                   78887:     **
                   78888:     ** A shared-cache write-lock is not required to write to the new table,
                   78889:     ** as a schema-lock must have already been obtained to create it. Since
                   78890:     ** a schema-lock excludes all other database users, the write-lock would
                   78891:     ** be redundant.
                   78892:     */
                   78893:     if( pSelect ){
                   78894:       SelectDest dest;
                   78895:       Table *pSelTab;
                   78896: 
                   78897:       assert(pParse->nTab==1);
                   78898:       sqlite3VdbeAddOp3(v, OP_OpenWrite, 1, pParse->regRoot, iDb);
                   78899:       sqlite3VdbeChangeP5(v, 1);
                   78900:       pParse->nTab = 2;
                   78901:       sqlite3SelectDestInit(&dest, SRT_Table, 1);
                   78902:       sqlite3Select(pParse, pSelect, &dest);
                   78903:       sqlite3VdbeAddOp1(v, OP_Close, 1);
                   78904:       if( pParse->nErr==0 ){
                   78905:         pSelTab = sqlite3ResultSetOfSelect(pParse, pSelect);
                   78906:         if( pSelTab==0 ) return;
                   78907:         assert( p->aCol==0 );
                   78908:         p->nCol = pSelTab->nCol;
                   78909:         p->aCol = pSelTab->aCol;
                   78910:         pSelTab->nCol = 0;
                   78911:         pSelTab->aCol = 0;
                   78912:         sqlite3DeleteTable(db, pSelTab);
                   78913:       }
                   78914:     }
                   78915: 
                   78916:     /* Compute the complete text of the CREATE statement */
                   78917:     if( pSelect ){
                   78918:       zStmt = createTableStmt(db, p);
                   78919:     }else{
                   78920:       n = (int)(pEnd->z - pParse->sNameToken.z) + 1;
                   78921:       zStmt = sqlite3MPrintf(db, 
                   78922:           "CREATE %s %.*s", zType2, n, pParse->sNameToken.z
                   78923:       );
                   78924:     }
                   78925: 
                   78926:     /* A slot for the record has already been allocated in the 
                   78927:     ** SQLITE_MASTER table.  We just need to update that slot with all
                   78928:     ** the information we've collected.
                   78929:     */
                   78930:     sqlite3NestedParse(pParse,
                   78931:       "UPDATE %Q.%s "
                   78932:          "SET type='%s', name=%Q, tbl_name=%Q, rootpage=#%d, sql=%Q "
                   78933:        "WHERE rowid=#%d",
                   78934:       db->aDb[iDb].zName, SCHEMA_TABLE(iDb),
                   78935:       zType,
                   78936:       p->zName,
                   78937:       p->zName,
                   78938:       pParse->regRoot,
                   78939:       zStmt,
                   78940:       pParse->regRowid
                   78941:     );
                   78942:     sqlite3DbFree(db, zStmt);
                   78943:     sqlite3ChangeCookie(pParse, iDb);
                   78944: 
                   78945: #ifndef SQLITE_OMIT_AUTOINCREMENT
                   78946:     /* Check to see if we need to create an sqlite_sequence table for
                   78947:     ** keeping track of autoincrement keys.
                   78948:     */
                   78949:     if( p->tabFlags & TF_Autoincrement ){
                   78950:       Db *pDb = &db->aDb[iDb];
                   78951:       assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
                   78952:       if( pDb->pSchema->pSeqTab==0 ){
                   78953:         sqlite3NestedParse(pParse,
                   78954:           "CREATE TABLE %Q.sqlite_sequence(name,seq)",
                   78955:           pDb->zName
                   78956:         );
                   78957:       }
                   78958:     }
                   78959: #endif
                   78960: 
                   78961:     /* Reparse everything to update our internal data structures */
                   78962:     sqlite3VdbeAddParseSchemaOp(v, iDb,
                   78963:                sqlite3MPrintf(db, "tbl_name='%q'", p->zName));
                   78964:   }
                   78965: 
                   78966: 
                   78967:   /* Add the table to the in-memory representation of the database.
                   78968:   */
                   78969:   if( db->init.busy ){
                   78970:     Table *pOld;
                   78971:     Schema *pSchema = p->pSchema;
                   78972:     assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
                   78973:     pOld = sqlite3HashInsert(&pSchema->tblHash, p->zName,
                   78974:                              sqlite3Strlen30(p->zName),p);
                   78975:     if( pOld ){
                   78976:       assert( p==pOld );  /* Malloc must have failed inside HashInsert() */
                   78977:       db->mallocFailed = 1;
                   78978:       return;
                   78979:     }
                   78980:     pParse->pNewTable = 0;
                   78981:     db->nTable++;
                   78982:     db->flags |= SQLITE_InternChanges;
                   78983: 
                   78984: #ifndef SQLITE_OMIT_ALTERTABLE
                   78985:     if( !p->pSelect ){
                   78986:       const char *zName = (const char *)pParse->sNameToken.z;
                   78987:       int nName;
                   78988:       assert( !pSelect && pCons && pEnd );
                   78989:       if( pCons->z==0 ){
                   78990:         pCons = pEnd;
                   78991:       }
                   78992:       nName = (int)((const char *)pCons->z - zName);
                   78993:       p->addColOffset = 13 + sqlite3Utf8CharLen(zName, nName);
                   78994:     }
                   78995: #endif
                   78996:   }
                   78997: }
                   78998: 
                   78999: #ifndef SQLITE_OMIT_VIEW
                   79000: /*
                   79001: ** The parser calls this routine in order to create a new VIEW
                   79002: */
                   79003: SQLITE_PRIVATE void sqlite3CreateView(
                   79004:   Parse *pParse,     /* The parsing context */
                   79005:   Token *pBegin,     /* The CREATE token that begins the statement */
                   79006:   Token *pName1,     /* The token that holds the name of the view */
                   79007:   Token *pName2,     /* The token that holds the name of the view */
                   79008:   Select *pSelect,   /* A SELECT statement that will become the new view */
                   79009:   int isTemp,        /* TRUE for a TEMPORARY view */
                   79010:   int noErr          /* Suppress error messages if VIEW already exists */
                   79011: ){
                   79012:   Table *p;
                   79013:   int n;
                   79014:   const char *z;
                   79015:   Token sEnd;
                   79016:   DbFixer sFix;
                   79017:   Token *pName;
                   79018:   int iDb;
                   79019:   sqlite3 *db = pParse->db;
                   79020: 
                   79021:   if( pParse->nVar>0 ){
                   79022:     sqlite3ErrorMsg(pParse, "parameters are not allowed in views");
                   79023:     sqlite3SelectDelete(db, pSelect);
                   79024:     return;
                   79025:   }
                   79026:   sqlite3StartTable(pParse, pName1, pName2, isTemp, 1, 0, noErr);
                   79027:   p = pParse->pNewTable;
                   79028:   if( p==0 || pParse->nErr ){
                   79029:     sqlite3SelectDelete(db, pSelect);
                   79030:     return;
                   79031:   }
                   79032:   sqlite3TwoPartName(pParse, pName1, pName2, &pName);
                   79033:   iDb = sqlite3SchemaToIndex(db, p->pSchema);
                   79034:   if( sqlite3FixInit(&sFix, pParse, iDb, "view", pName)
                   79035:     && sqlite3FixSelect(&sFix, pSelect)
                   79036:   ){
                   79037:     sqlite3SelectDelete(db, pSelect);
                   79038:     return;
                   79039:   }
                   79040: 
                   79041:   /* Make a copy of the entire SELECT statement that defines the view.
                   79042:   ** This will force all the Expr.token.z values to be dynamically
                   79043:   ** allocated rather than point to the input string - which means that
                   79044:   ** they will persist after the current sqlite3_exec() call returns.
                   79045:   */
                   79046:   p->pSelect = sqlite3SelectDup(db, pSelect, EXPRDUP_REDUCE);
                   79047:   sqlite3SelectDelete(db, pSelect);
                   79048:   if( db->mallocFailed ){
                   79049:     return;
                   79050:   }
                   79051:   if( !db->init.busy ){
                   79052:     sqlite3ViewGetColumnNames(pParse, p);
                   79053:   }
                   79054: 
                   79055:   /* Locate the end of the CREATE VIEW statement.  Make sEnd point to
                   79056:   ** the end.
                   79057:   */
                   79058:   sEnd = pParse->sLastToken;
                   79059:   if( ALWAYS(sEnd.z[0]!=0) && sEnd.z[0]!=';' ){
                   79060:     sEnd.z += sEnd.n;
                   79061:   }
                   79062:   sEnd.n = 0;
                   79063:   n = (int)(sEnd.z - pBegin->z);
                   79064:   z = pBegin->z;
                   79065:   while( ALWAYS(n>0) && sqlite3Isspace(z[n-1]) ){ n--; }
                   79066:   sEnd.z = &z[n-1];
                   79067:   sEnd.n = 1;
                   79068: 
                   79069:   /* Use sqlite3EndTable() to add the view to the SQLITE_MASTER table */
                   79070:   sqlite3EndTable(pParse, 0, &sEnd, 0);
                   79071:   return;
                   79072: }
                   79073: #endif /* SQLITE_OMIT_VIEW */
                   79074: 
                   79075: #if !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_VIRTUALTABLE)
                   79076: /*
                   79077: ** The Table structure pTable is really a VIEW.  Fill in the names of
                   79078: ** the columns of the view in the pTable structure.  Return the number
                   79079: ** of errors.  If an error is seen leave an error message in pParse->zErrMsg.
                   79080: */
                   79081: SQLITE_PRIVATE int sqlite3ViewGetColumnNames(Parse *pParse, Table *pTable){
                   79082:   Table *pSelTab;   /* A fake table from which we get the result set */
                   79083:   Select *pSel;     /* Copy of the SELECT that implements the view */
                   79084:   int nErr = 0;     /* Number of errors encountered */
                   79085:   int n;            /* Temporarily holds the number of cursors assigned */
                   79086:   sqlite3 *db = pParse->db;  /* Database connection for malloc errors */
                   79087:   int (*xAuth)(void*,int,const char*,const char*,const char*,const char*);
                   79088: 
                   79089:   assert( pTable );
                   79090: 
                   79091: #ifndef SQLITE_OMIT_VIRTUALTABLE
                   79092:   if( sqlite3VtabCallConnect(pParse, pTable) ){
                   79093:     return SQLITE_ERROR;
                   79094:   }
                   79095:   if( IsVirtual(pTable) ) return 0;
                   79096: #endif
                   79097: 
                   79098: #ifndef SQLITE_OMIT_VIEW
                   79099:   /* A positive nCol means the columns names for this view are
                   79100:   ** already known.
                   79101:   */
                   79102:   if( pTable->nCol>0 ) return 0;
                   79103: 
                   79104:   /* A negative nCol is a special marker meaning that we are currently
                   79105:   ** trying to compute the column names.  If we enter this routine with
                   79106:   ** a negative nCol, it means two or more views form a loop, like this:
                   79107:   **
                   79108:   **     CREATE VIEW one AS SELECT * FROM two;
                   79109:   **     CREATE VIEW two AS SELECT * FROM one;
                   79110:   **
                   79111:   ** Actually, the error above is now caught prior to reaching this point.
                   79112:   ** But the following test is still important as it does come up
                   79113:   ** in the following:
                   79114:   ** 
                   79115:   **     CREATE TABLE main.ex1(a);
                   79116:   **     CREATE TEMP VIEW ex1 AS SELECT a FROM ex1;
                   79117:   **     SELECT * FROM temp.ex1;
                   79118:   */
                   79119:   if( pTable->nCol<0 ){
                   79120:     sqlite3ErrorMsg(pParse, "view %s is circularly defined", pTable->zName);
                   79121:     return 1;
                   79122:   }
                   79123:   assert( pTable->nCol>=0 );
                   79124: 
                   79125:   /* If we get this far, it means we need to compute the table names.
                   79126:   ** Note that the call to sqlite3ResultSetOfSelect() will expand any
                   79127:   ** "*" elements in the results set of the view and will assign cursors
                   79128:   ** to the elements of the FROM clause.  But we do not want these changes
                   79129:   ** to be permanent.  So the computation is done on a copy of the SELECT
                   79130:   ** statement that defines the view.
                   79131:   */
                   79132:   assert( pTable->pSelect );
                   79133:   pSel = sqlite3SelectDup(db, pTable->pSelect, 0);
                   79134:   if( pSel ){
                   79135:     u8 enableLookaside = db->lookaside.bEnabled;
                   79136:     n = pParse->nTab;
                   79137:     sqlite3SrcListAssignCursors(pParse, pSel->pSrc);
                   79138:     pTable->nCol = -1;
                   79139:     db->lookaside.bEnabled = 0;
                   79140: #ifndef SQLITE_OMIT_AUTHORIZATION
                   79141:     xAuth = db->xAuth;
                   79142:     db->xAuth = 0;
                   79143:     pSelTab = sqlite3ResultSetOfSelect(pParse, pSel);
                   79144:     db->xAuth = xAuth;
                   79145: #else
                   79146:     pSelTab = sqlite3ResultSetOfSelect(pParse, pSel);
                   79147: #endif
                   79148:     db->lookaside.bEnabled = enableLookaside;
                   79149:     pParse->nTab = n;
                   79150:     if( pSelTab ){
                   79151:       assert( pTable->aCol==0 );
                   79152:       pTable->nCol = pSelTab->nCol;
                   79153:       pTable->aCol = pSelTab->aCol;
                   79154:       pSelTab->nCol = 0;
                   79155:       pSelTab->aCol = 0;
                   79156:       sqlite3DeleteTable(db, pSelTab);
                   79157:       assert( sqlite3SchemaMutexHeld(db, 0, pTable->pSchema) );
                   79158:       pTable->pSchema->flags |= DB_UnresetViews;
                   79159:     }else{
                   79160:       pTable->nCol = 0;
                   79161:       nErr++;
                   79162:     }
                   79163:     sqlite3SelectDelete(db, pSel);
                   79164:   } else {
                   79165:     nErr++;
                   79166:   }
                   79167: #endif /* SQLITE_OMIT_VIEW */
                   79168:   return nErr;  
                   79169: }
                   79170: #endif /* !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_VIRTUALTABLE) */
                   79171: 
                   79172: #ifndef SQLITE_OMIT_VIEW
                   79173: /*
                   79174: ** Clear the column names from every VIEW in database idx.
                   79175: */
                   79176: static void sqliteViewResetAll(sqlite3 *db, int idx){
                   79177:   HashElem *i;
                   79178:   assert( sqlite3SchemaMutexHeld(db, idx, 0) );
                   79179:   if( !DbHasProperty(db, idx, DB_UnresetViews) ) return;
                   79180:   for(i=sqliteHashFirst(&db->aDb[idx].pSchema->tblHash); i;i=sqliteHashNext(i)){
                   79181:     Table *pTab = sqliteHashData(i);
                   79182:     if( pTab->pSelect ){
                   79183:       sqliteDeleteColumnNames(db, pTab);
                   79184:       pTab->aCol = 0;
                   79185:       pTab->nCol = 0;
                   79186:     }
                   79187:   }
                   79188:   DbClearProperty(db, idx, DB_UnresetViews);
                   79189: }
                   79190: #else
                   79191: # define sqliteViewResetAll(A,B)
                   79192: #endif /* SQLITE_OMIT_VIEW */
                   79193: 
                   79194: /*
                   79195: ** This function is called by the VDBE to adjust the internal schema
                   79196: ** used by SQLite when the btree layer moves a table root page. The
                   79197: ** root-page of a table or index in database iDb has changed from iFrom
                   79198: ** to iTo.
                   79199: **
                   79200: ** Ticket #1728:  The symbol table might still contain information
                   79201: ** on tables and/or indices that are the process of being deleted.
                   79202: ** If you are unlucky, one of those deleted indices or tables might
                   79203: ** have the same rootpage number as the real table or index that is
                   79204: ** being moved.  So we cannot stop searching after the first match 
                   79205: ** because the first match might be for one of the deleted indices
                   79206: ** or tables and not the table/index that is actually being moved.
                   79207: ** We must continue looping until all tables and indices with
                   79208: ** rootpage==iFrom have been converted to have a rootpage of iTo
                   79209: ** in order to be certain that we got the right one.
                   79210: */
                   79211: #ifndef SQLITE_OMIT_AUTOVACUUM
                   79212: SQLITE_PRIVATE void sqlite3RootPageMoved(sqlite3 *db, int iDb, int iFrom, int iTo){
                   79213:   HashElem *pElem;
                   79214:   Hash *pHash;
                   79215:   Db *pDb;
                   79216: 
                   79217:   assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
                   79218:   pDb = &db->aDb[iDb];
                   79219:   pHash = &pDb->pSchema->tblHash;
                   79220:   for(pElem=sqliteHashFirst(pHash); pElem; pElem=sqliteHashNext(pElem)){
                   79221:     Table *pTab = sqliteHashData(pElem);
                   79222:     if( pTab->tnum==iFrom ){
                   79223:       pTab->tnum = iTo;
                   79224:     }
                   79225:   }
                   79226:   pHash = &pDb->pSchema->idxHash;
                   79227:   for(pElem=sqliteHashFirst(pHash); pElem; pElem=sqliteHashNext(pElem)){
                   79228:     Index *pIdx = sqliteHashData(pElem);
                   79229:     if( pIdx->tnum==iFrom ){
                   79230:       pIdx->tnum = iTo;
                   79231:     }
                   79232:   }
                   79233: }
                   79234: #endif
                   79235: 
                   79236: /*
                   79237: ** Write code to erase the table with root-page iTable from database iDb.
                   79238: ** Also write code to modify the sqlite_master table and internal schema
                   79239: ** if a root-page of another table is moved by the btree-layer whilst
                   79240: ** erasing iTable (this can happen with an auto-vacuum database).
                   79241: */ 
                   79242: static void destroyRootPage(Parse *pParse, int iTable, int iDb){
                   79243:   Vdbe *v = sqlite3GetVdbe(pParse);
                   79244:   int r1 = sqlite3GetTempReg(pParse);
                   79245:   sqlite3VdbeAddOp3(v, OP_Destroy, iTable, r1, iDb);
                   79246:   sqlite3MayAbort(pParse);
                   79247: #ifndef SQLITE_OMIT_AUTOVACUUM
                   79248:   /* OP_Destroy stores an in integer r1. If this integer
                   79249:   ** is non-zero, then it is the root page number of a table moved to
                   79250:   ** location iTable. The following code modifies the sqlite_master table to
                   79251:   ** reflect this.
                   79252:   **
                   79253:   ** The "#NNN" in the SQL is a special constant that means whatever value
                   79254:   ** is in register NNN.  See grammar rules associated with the TK_REGISTER
                   79255:   ** token for additional information.
                   79256:   */
                   79257:   sqlite3NestedParse(pParse, 
                   79258:      "UPDATE %Q.%s SET rootpage=%d WHERE #%d AND rootpage=#%d",
                   79259:      pParse->db->aDb[iDb].zName, SCHEMA_TABLE(iDb), iTable, r1, r1);
                   79260: #endif
                   79261:   sqlite3ReleaseTempReg(pParse, r1);
                   79262: }
                   79263: 
                   79264: /*
                   79265: ** Write VDBE code to erase table pTab and all associated indices on disk.
                   79266: ** Code to update the sqlite_master tables and internal schema definitions
                   79267: ** in case a root-page belonging to another table is moved by the btree layer
                   79268: ** is also added (this can happen with an auto-vacuum database).
                   79269: */
                   79270: static void destroyTable(Parse *pParse, Table *pTab){
                   79271: #ifdef SQLITE_OMIT_AUTOVACUUM
                   79272:   Index *pIdx;
                   79273:   int iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema);
                   79274:   destroyRootPage(pParse, pTab->tnum, iDb);
                   79275:   for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
                   79276:     destroyRootPage(pParse, pIdx->tnum, iDb);
                   79277:   }
                   79278: #else
                   79279:   /* If the database may be auto-vacuum capable (if SQLITE_OMIT_AUTOVACUUM
                   79280:   ** is not defined), then it is important to call OP_Destroy on the
                   79281:   ** table and index root-pages in order, starting with the numerically 
                   79282:   ** largest root-page number. This guarantees that none of the root-pages
                   79283:   ** to be destroyed is relocated by an earlier OP_Destroy. i.e. if the
                   79284:   ** following were coded:
                   79285:   **
                   79286:   ** OP_Destroy 4 0
                   79287:   ** ...
                   79288:   ** OP_Destroy 5 0
                   79289:   **
                   79290:   ** and root page 5 happened to be the largest root-page number in the
                   79291:   ** database, then root page 5 would be moved to page 4 by the 
                   79292:   ** "OP_Destroy 4 0" opcode. The subsequent "OP_Destroy 5 0" would hit
                   79293:   ** a free-list page.
                   79294:   */
                   79295:   int iTab = pTab->tnum;
                   79296:   int iDestroyed = 0;
                   79297: 
                   79298:   while( 1 ){
                   79299:     Index *pIdx;
                   79300:     int iLargest = 0;
                   79301: 
                   79302:     if( iDestroyed==0 || iTab<iDestroyed ){
                   79303:       iLargest = iTab;
                   79304:     }
                   79305:     for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
                   79306:       int iIdx = pIdx->tnum;
                   79307:       assert( pIdx->pSchema==pTab->pSchema );
                   79308:       if( (iDestroyed==0 || (iIdx<iDestroyed)) && iIdx>iLargest ){
                   79309:         iLargest = iIdx;
                   79310:       }
                   79311:     }
                   79312:     if( iLargest==0 ){
                   79313:       return;
                   79314:     }else{
                   79315:       int iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema);
                   79316:       destroyRootPage(pParse, iLargest, iDb);
                   79317:       iDestroyed = iLargest;
                   79318:     }
                   79319:   }
                   79320: #endif
                   79321: }
                   79322: 
                   79323: /*
                   79324: ** This routine is called to do the work of a DROP TABLE statement.
                   79325: ** pName is the name of the table to be dropped.
                   79326: */
                   79327: SQLITE_PRIVATE void sqlite3DropTable(Parse *pParse, SrcList *pName, int isView, int noErr){
                   79328:   Table *pTab;
                   79329:   Vdbe *v;
                   79330:   sqlite3 *db = pParse->db;
                   79331:   int iDb;
                   79332: 
                   79333:   if( db->mallocFailed ){
                   79334:     goto exit_drop_table;
                   79335:   }
                   79336:   assert( pParse->nErr==0 );
                   79337:   assert( pName->nSrc==1 );
                   79338:   if( noErr ) db->suppressErr++;
                   79339:   pTab = sqlite3LocateTable(pParse, isView, 
                   79340:                             pName->a[0].zName, pName->a[0].zDatabase);
                   79341:   if( noErr ) db->suppressErr--;
                   79342: 
                   79343:   if( pTab==0 ){
                   79344:     if( noErr ) sqlite3CodeVerifyNamedSchema(pParse, pName->a[0].zDatabase);
                   79345:     goto exit_drop_table;
                   79346:   }
                   79347:   iDb = sqlite3SchemaToIndex(db, pTab->pSchema);
                   79348:   assert( iDb>=0 && iDb<db->nDb );
                   79349: 
                   79350:   /* If pTab is a virtual table, call ViewGetColumnNames() to ensure
                   79351:   ** it is initialized.
                   79352:   */
                   79353:   if( IsVirtual(pTab) && sqlite3ViewGetColumnNames(pParse, pTab) ){
                   79354:     goto exit_drop_table;
                   79355:   }
                   79356: #ifndef SQLITE_OMIT_AUTHORIZATION
                   79357:   {
                   79358:     int code;
                   79359:     const char *zTab = SCHEMA_TABLE(iDb);
                   79360:     const char *zDb = db->aDb[iDb].zName;
                   79361:     const char *zArg2 = 0;
                   79362:     if( sqlite3AuthCheck(pParse, SQLITE_DELETE, zTab, 0, zDb)){
                   79363:       goto exit_drop_table;
                   79364:     }
                   79365:     if( isView ){
                   79366:       if( !OMIT_TEMPDB && iDb==1 ){
                   79367:         code = SQLITE_DROP_TEMP_VIEW;
                   79368:       }else{
                   79369:         code = SQLITE_DROP_VIEW;
                   79370:       }
                   79371: #ifndef SQLITE_OMIT_VIRTUALTABLE
                   79372:     }else if( IsVirtual(pTab) ){
                   79373:       code = SQLITE_DROP_VTABLE;
                   79374:       zArg2 = sqlite3GetVTable(db, pTab)->pMod->zName;
                   79375: #endif
                   79376:     }else{
                   79377:       if( !OMIT_TEMPDB && iDb==1 ){
                   79378:         code = SQLITE_DROP_TEMP_TABLE;
                   79379:       }else{
                   79380:         code = SQLITE_DROP_TABLE;
                   79381:       }
                   79382:     }
                   79383:     if( sqlite3AuthCheck(pParse, code, pTab->zName, zArg2, zDb) ){
                   79384:       goto exit_drop_table;
                   79385:     }
                   79386:     if( sqlite3AuthCheck(pParse, SQLITE_DELETE, pTab->zName, 0, zDb) ){
                   79387:       goto exit_drop_table;
                   79388:     }
                   79389:   }
                   79390: #endif
                   79391:   if( sqlite3StrNICmp(pTab->zName, "sqlite_", 7)==0 ){
                   79392:     sqlite3ErrorMsg(pParse, "table %s may not be dropped", pTab->zName);
                   79393:     goto exit_drop_table;
                   79394:   }
                   79395: 
                   79396: #ifndef SQLITE_OMIT_VIEW
                   79397:   /* Ensure DROP TABLE is not used on a view, and DROP VIEW is not used
                   79398:   ** on a table.
                   79399:   */
                   79400:   if( isView && pTab->pSelect==0 ){
                   79401:     sqlite3ErrorMsg(pParse, "use DROP TABLE to delete table %s", pTab->zName);
                   79402:     goto exit_drop_table;
                   79403:   }
                   79404:   if( !isView && pTab->pSelect ){
                   79405:     sqlite3ErrorMsg(pParse, "use DROP VIEW to delete view %s", pTab->zName);
                   79406:     goto exit_drop_table;
                   79407:   }
                   79408: #endif
                   79409: 
                   79410:   /* Generate code to remove the table from the master table
                   79411:   ** on disk.
                   79412:   */
                   79413:   v = sqlite3GetVdbe(pParse);
                   79414:   if( v ){
                   79415:     Trigger *pTrigger;
                   79416:     Db *pDb = &db->aDb[iDb];
                   79417:     sqlite3BeginWriteOperation(pParse, 1, iDb);
                   79418: 
                   79419: #ifndef SQLITE_OMIT_VIRTUALTABLE
                   79420:     if( IsVirtual(pTab) ){
                   79421:       sqlite3VdbeAddOp0(v, OP_VBegin);
                   79422:     }
                   79423: #endif
                   79424:     sqlite3FkDropTable(pParse, pName, pTab);
                   79425: 
                   79426:     /* Drop all triggers associated with the table being dropped. Code
                   79427:     ** is generated to remove entries from sqlite_master and/or
                   79428:     ** sqlite_temp_master if required.
                   79429:     */
                   79430:     pTrigger = sqlite3TriggerList(pParse, pTab);
                   79431:     while( pTrigger ){
                   79432:       assert( pTrigger->pSchema==pTab->pSchema || 
                   79433:           pTrigger->pSchema==db->aDb[1].pSchema );
                   79434:       sqlite3DropTriggerPtr(pParse, pTrigger);
                   79435:       pTrigger = pTrigger->pNext;
                   79436:     }
                   79437: 
                   79438: #ifndef SQLITE_OMIT_AUTOINCREMENT
                   79439:     /* Remove any entries of the sqlite_sequence table associated with
                   79440:     ** the table being dropped. This is done before the table is dropped
                   79441:     ** at the btree level, in case the sqlite_sequence table needs to
                   79442:     ** move as a result of the drop (can happen in auto-vacuum mode).
                   79443:     */
                   79444:     if( pTab->tabFlags & TF_Autoincrement ){
                   79445:       sqlite3NestedParse(pParse,
                   79446:         "DELETE FROM %s.sqlite_sequence WHERE name=%Q",
                   79447:         pDb->zName, pTab->zName
                   79448:       );
                   79449:     }
                   79450: #endif
                   79451: 
                   79452:     /* Drop all SQLITE_MASTER table and index entries that refer to the
                   79453:     ** table. The program name loops through the master table and deletes
                   79454:     ** every row that refers to a table of the same name as the one being
1.1.1.3 ! misho    79455:     ** dropped. Triggers are handled separately because a trigger can be
1.1       misho    79456:     ** created in the temp database that refers to a table in another
                   79457:     ** database.
                   79458:     */
                   79459:     sqlite3NestedParse(pParse, 
                   79460:         "DELETE FROM %Q.%s WHERE tbl_name=%Q and type!='trigger'",
                   79461:         pDb->zName, SCHEMA_TABLE(iDb), pTab->zName);
                   79462: 
                   79463:     /* Drop any statistics from the sqlite_stat1 table, if it exists */
                   79464:     if( sqlite3FindTable(db, "sqlite_stat1", db->aDb[iDb].zName) ){
                   79465:       sqlite3NestedParse(pParse,
                   79466:         "DELETE FROM %Q.sqlite_stat1 WHERE tbl=%Q", pDb->zName, pTab->zName
                   79467:       );
                   79468:     }
                   79469: 
                   79470:     if( !isView && !IsVirtual(pTab) ){
                   79471:       destroyTable(pParse, pTab);
                   79472:     }
                   79473: 
                   79474:     /* Remove the table entry from SQLite's internal schema and modify
                   79475:     ** the schema cookie.
                   79476:     */
                   79477:     if( IsVirtual(pTab) ){
                   79478:       sqlite3VdbeAddOp4(v, OP_VDestroy, iDb, 0, 0, pTab->zName, 0);
                   79479:     }
                   79480:     sqlite3VdbeAddOp4(v, OP_DropTable, iDb, 0, 0, pTab->zName, 0);
                   79481:     sqlite3ChangeCookie(pParse, iDb);
                   79482:   }
                   79483:   sqliteViewResetAll(db, iDb);
                   79484: 
                   79485: exit_drop_table:
                   79486:   sqlite3SrcListDelete(db, pName);
                   79487: }
                   79488: 
                   79489: /*
                   79490: ** This routine is called to create a new foreign key on the table
                   79491: ** currently under construction.  pFromCol determines which columns
                   79492: ** in the current table point to the foreign key.  If pFromCol==0 then
                   79493: ** connect the key to the last column inserted.  pTo is the name of
                   79494: ** the table referred to.  pToCol is a list of tables in the other
                   79495: ** pTo table that the foreign key points to.  flags contains all
                   79496: ** information about the conflict resolution algorithms specified
                   79497: ** in the ON DELETE, ON UPDATE and ON INSERT clauses.
                   79498: **
                   79499: ** An FKey structure is created and added to the table currently
                   79500: ** under construction in the pParse->pNewTable field.
                   79501: **
                   79502: ** The foreign key is set for IMMEDIATE processing.  A subsequent call
                   79503: ** to sqlite3DeferForeignKey() might change this to DEFERRED.
                   79504: */
                   79505: SQLITE_PRIVATE void sqlite3CreateForeignKey(
                   79506:   Parse *pParse,       /* Parsing context */
                   79507:   ExprList *pFromCol,  /* Columns in this table that point to other table */
                   79508:   Token *pTo,          /* Name of the other table */
                   79509:   ExprList *pToCol,    /* Columns in the other table */
                   79510:   int flags            /* Conflict resolution algorithms. */
                   79511: ){
                   79512:   sqlite3 *db = pParse->db;
                   79513: #ifndef SQLITE_OMIT_FOREIGN_KEY
                   79514:   FKey *pFKey = 0;
                   79515:   FKey *pNextTo;
                   79516:   Table *p = pParse->pNewTable;
                   79517:   int nByte;
                   79518:   int i;
                   79519:   int nCol;
                   79520:   char *z;
                   79521: 
                   79522:   assert( pTo!=0 );
                   79523:   if( p==0 || IN_DECLARE_VTAB ) goto fk_end;
                   79524:   if( pFromCol==0 ){
                   79525:     int iCol = p->nCol-1;
                   79526:     if( NEVER(iCol<0) ) goto fk_end;
                   79527:     if( pToCol && pToCol->nExpr!=1 ){
                   79528:       sqlite3ErrorMsg(pParse, "foreign key on %s"
                   79529:          " should reference only one column of table %T",
                   79530:          p->aCol[iCol].zName, pTo);
                   79531:       goto fk_end;
                   79532:     }
                   79533:     nCol = 1;
                   79534:   }else if( pToCol && pToCol->nExpr!=pFromCol->nExpr ){
                   79535:     sqlite3ErrorMsg(pParse,
                   79536:         "number of columns in foreign key does not match the number of "
                   79537:         "columns in the referenced table");
                   79538:     goto fk_end;
                   79539:   }else{
                   79540:     nCol = pFromCol->nExpr;
                   79541:   }
                   79542:   nByte = sizeof(*pFKey) + (nCol-1)*sizeof(pFKey->aCol[0]) + pTo->n + 1;
                   79543:   if( pToCol ){
                   79544:     for(i=0; i<pToCol->nExpr; i++){
                   79545:       nByte += sqlite3Strlen30(pToCol->a[i].zName) + 1;
                   79546:     }
                   79547:   }
                   79548:   pFKey = sqlite3DbMallocZero(db, nByte );
                   79549:   if( pFKey==0 ){
                   79550:     goto fk_end;
                   79551:   }
                   79552:   pFKey->pFrom = p;
                   79553:   pFKey->pNextFrom = p->pFKey;
                   79554:   z = (char*)&pFKey->aCol[nCol];
                   79555:   pFKey->zTo = z;
                   79556:   memcpy(z, pTo->z, pTo->n);
                   79557:   z[pTo->n] = 0;
                   79558:   sqlite3Dequote(z);
                   79559:   z += pTo->n+1;
                   79560:   pFKey->nCol = nCol;
                   79561:   if( pFromCol==0 ){
                   79562:     pFKey->aCol[0].iFrom = p->nCol-1;
                   79563:   }else{
                   79564:     for(i=0; i<nCol; i++){
                   79565:       int j;
                   79566:       for(j=0; j<p->nCol; j++){
                   79567:         if( sqlite3StrICmp(p->aCol[j].zName, pFromCol->a[i].zName)==0 ){
                   79568:           pFKey->aCol[i].iFrom = j;
                   79569:           break;
                   79570:         }
                   79571:       }
                   79572:       if( j>=p->nCol ){
                   79573:         sqlite3ErrorMsg(pParse, 
                   79574:           "unknown column \"%s\" in foreign key definition", 
                   79575:           pFromCol->a[i].zName);
                   79576:         goto fk_end;
                   79577:       }
                   79578:     }
                   79579:   }
                   79580:   if( pToCol ){
                   79581:     for(i=0; i<nCol; i++){
                   79582:       int n = sqlite3Strlen30(pToCol->a[i].zName);
                   79583:       pFKey->aCol[i].zCol = z;
                   79584:       memcpy(z, pToCol->a[i].zName, n);
                   79585:       z[n] = 0;
                   79586:       z += n+1;
                   79587:     }
                   79588:   }
                   79589:   pFKey->isDeferred = 0;
                   79590:   pFKey->aAction[0] = (u8)(flags & 0xff);            /* ON DELETE action */
                   79591:   pFKey->aAction[1] = (u8)((flags >> 8 ) & 0xff);    /* ON UPDATE action */
                   79592: 
                   79593:   assert( sqlite3SchemaMutexHeld(db, 0, p->pSchema) );
                   79594:   pNextTo = (FKey *)sqlite3HashInsert(&p->pSchema->fkeyHash, 
                   79595:       pFKey->zTo, sqlite3Strlen30(pFKey->zTo), (void *)pFKey
                   79596:   );
                   79597:   if( pNextTo==pFKey ){
                   79598:     db->mallocFailed = 1;
                   79599:     goto fk_end;
                   79600:   }
                   79601:   if( pNextTo ){
                   79602:     assert( pNextTo->pPrevTo==0 );
                   79603:     pFKey->pNextTo = pNextTo;
                   79604:     pNextTo->pPrevTo = pFKey;
                   79605:   }
                   79606: 
                   79607:   /* Link the foreign key to the table as the last step.
                   79608:   */
                   79609:   p->pFKey = pFKey;
                   79610:   pFKey = 0;
                   79611: 
                   79612: fk_end:
                   79613:   sqlite3DbFree(db, pFKey);
                   79614: #endif /* !defined(SQLITE_OMIT_FOREIGN_KEY) */
                   79615:   sqlite3ExprListDelete(db, pFromCol);
                   79616:   sqlite3ExprListDelete(db, pToCol);
                   79617: }
                   79618: 
                   79619: /*
                   79620: ** This routine is called when an INITIALLY IMMEDIATE or INITIALLY DEFERRED
                   79621: ** clause is seen as part of a foreign key definition.  The isDeferred
                   79622: ** parameter is 1 for INITIALLY DEFERRED and 0 for INITIALLY IMMEDIATE.
                   79623: ** The behavior of the most recently created foreign key is adjusted
                   79624: ** accordingly.
                   79625: */
                   79626: SQLITE_PRIVATE void sqlite3DeferForeignKey(Parse *pParse, int isDeferred){
                   79627: #ifndef SQLITE_OMIT_FOREIGN_KEY
                   79628:   Table *pTab;
                   79629:   FKey *pFKey;
                   79630:   if( (pTab = pParse->pNewTable)==0 || (pFKey = pTab->pFKey)==0 ) return;
                   79631:   assert( isDeferred==0 || isDeferred==1 ); /* EV: R-30323-21917 */
                   79632:   pFKey->isDeferred = (u8)isDeferred;
                   79633: #endif
                   79634: }
                   79635: 
                   79636: /*
                   79637: ** Generate code that will erase and refill index *pIdx.  This is
                   79638: ** used to initialize a newly created index or to recompute the
                   79639: ** content of an index in response to a REINDEX command.
                   79640: **
                   79641: ** if memRootPage is not negative, it means that the index is newly
                   79642: ** created.  The register specified by memRootPage contains the
                   79643: ** root page number of the index.  If memRootPage is negative, then
                   79644: ** the index already exists and must be cleared before being refilled and
                   79645: ** the root page number of the index is taken from pIndex->tnum.
                   79646: */
                   79647: static void sqlite3RefillIndex(Parse *pParse, Index *pIndex, int memRootPage){
                   79648:   Table *pTab = pIndex->pTable;  /* The table that is indexed */
                   79649:   int iTab = pParse->nTab++;     /* Btree cursor used for pTab */
                   79650:   int iIdx = pParse->nTab++;     /* Btree cursor used for pIndex */
                   79651:   int addr1;                     /* Address of top of loop */
                   79652:   int tnum;                      /* Root page of index */
                   79653:   Vdbe *v;                       /* Generate code into this virtual machine */
                   79654:   KeyInfo *pKey;                 /* KeyInfo for index */
                   79655:   int regIdxKey;                 /* Registers containing the index key */
                   79656:   int regRecord;                 /* Register holding assemblied index record */
                   79657:   sqlite3 *db = pParse->db;      /* The database connection */
                   79658:   int iDb = sqlite3SchemaToIndex(db, pIndex->pSchema);
                   79659: 
                   79660: #ifndef SQLITE_OMIT_AUTHORIZATION
                   79661:   if( sqlite3AuthCheck(pParse, SQLITE_REINDEX, pIndex->zName, 0,
                   79662:       db->aDb[iDb].zName ) ){
                   79663:     return;
                   79664:   }
                   79665: #endif
                   79666: 
                   79667:   /* Require a write-lock on the table to perform this operation */
                   79668:   sqlite3TableLock(pParse, iDb, pTab->tnum, 1, pTab->zName);
                   79669: 
                   79670:   v = sqlite3GetVdbe(pParse);
                   79671:   if( v==0 ) return;
                   79672:   if( memRootPage>=0 ){
                   79673:     tnum = memRootPage;
                   79674:   }else{
                   79675:     tnum = pIndex->tnum;
                   79676:     sqlite3VdbeAddOp2(v, OP_Clear, tnum, iDb);
                   79677:   }
                   79678:   pKey = sqlite3IndexKeyinfo(pParse, pIndex);
                   79679:   sqlite3VdbeAddOp4(v, OP_OpenWrite, iIdx, tnum, iDb, 
                   79680:                     (char *)pKey, P4_KEYINFO_HANDOFF);
                   79681:   if( memRootPage>=0 ){
                   79682:     sqlite3VdbeChangeP5(v, 1);
                   79683:   }
                   79684:   sqlite3OpenTable(pParse, iTab, iDb, pTab, OP_OpenRead);
                   79685:   addr1 = sqlite3VdbeAddOp2(v, OP_Rewind, iTab, 0);
                   79686:   regRecord = sqlite3GetTempReg(pParse);
                   79687:   regIdxKey = sqlite3GenerateIndexKey(pParse, pIndex, iTab, regRecord, 1);
                   79688:   if( pIndex->onError!=OE_None ){
                   79689:     const int regRowid = regIdxKey + pIndex->nColumn;
                   79690:     const int j2 = sqlite3VdbeCurrentAddr(v) + 2;
                   79691:     void * const pRegKey = SQLITE_INT_TO_PTR(regIdxKey);
                   79692: 
                   79693:     /* The registers accessed by the OP_IsUnique opcode were allocated
                   79694:     ** using sqlite3GetTempRange() inside of the sqlite3GenerateIndexKey()
                   79695:     ** call above. Just before that function was freed they were released
                   79696:     ** (made available to the compiler for reuse) using 
                   79697:     ** sqlite3ReleaseTempRange(). So in some ways having the OP_IsUnique
                   79698:     ** opcode use the values stored within seems dangerous. However, since
                   79699:     ** we can be sure that no other temp registers have been allocated
                   79700:     ** since sqlite3ReleaseTempRange() was called, it is safe to do so.
                   79701:     */
                   79702:     sqlite3VdbeAddOp4(v, OP_IsUnique, iIdx, j2, regRowid, pRegKey, P4_INT32);
                   79703:     sqlite3HaltConstraint(
                   79704:         pParse, OE_Abort, "indexed columns are not unique", P4_STATIC);
                   79705:   }
                   79706:   sqlite3VdbeAddOp2(v, OP_IdxInsert, iIdx, regRecord);
                   79707:   sqlite3VdbeChangeP5(v, OPFLAG_USESEEKRESULT);
                   79708:   sqlite3ReleaseTempReg(pParse, regRecord);
                   79709:   sqlite3VdbeAddOp2(v, OP_Next, iTab, addr1+1);
                   79710:   sqlite3VdbeJumpHere(v, addr1);
                   79711:   sqlite3VdbeAddOp1(v, OP_Close, iTab);
                   79712:   sqlite3VdbeAddOp1(v, OP_Close, iIdx);
                   79713: }
                   79714: 
                   79715: /*
                   79716: ** Create a new index for an SQL table.  pName1.pName2 is the name of the index 
                   79717: ** and pTblList is the name of the table that is to be indexed.  Both will 
                   79718: ** be NULL for a primary key or an index that is created to satisfy a
                   79719: ** UNIQUE constraint.  If pTable and pIndex are NULL, use pParse->pNewTable
                   79720: ** as the table to be indexed.  pParse->pNewTable is a table that is
                   79721: ** currently being constructed by a CREATE TABLE statement.
                   79722: **
                   79723: ** pList is a list of columns to be indexed.  pList will be NULL if this
                   79724: ** is a primary key or unique-constraint on the most recent column added
                   79725: ** to the table currently under construction.  
                   79726: **
                   79727: ** If the index is created successfully, return a pointer to the new Index
                   79728: ** structure. This is used by sqlite3AddPrimaryKey() to mark the index
                   79729: ** as the tables primary key (Index.autoIndex==2).
                   79730: */
                   79731: SQLITE_PRIVATE Index *sqlite3CreateIndex(
                   79732:   Parse *pParse,     /* All information about this parse */
                   79733:   Token *pName1,     /* First part of index name. May be NULL */
                   79734:   Token *pName2,     /* Second part of index name. May be NULL */
                   79735:   SrcList *pTblName, /* Table to index. Use pParse->pNewTable if 0 */
                   79736:   ExprList *pList,   /* A list of columns to be indexed */
                   79737:   int onError,       /* OE_Abort, OE_Ignore, OE_Replace, or OE_None */
                   79738:   Token *pStart,     /* The CREATE token that begins this statement */
                   79739:   Token *pEnd,       /* The ")" that closes the CREATE INDEX statement */
                   79740:   int sortOrder,     /* Sort order of primary key when pList==NULL */
                   79741:   int ifNotExist     /* Omit error if index already exists */
                   79742: ){
                   79743:   Index *pRet = 0;     /* Pointer to return */
                   79744:   Table *pTab = 0;     /* Table to be indexed */
                   79745:   Index *pIndex = 0;   /* The index to be created */
                   79746:   char *zName = 0;     /* Name of the index */
                   79747:   int nName;           /* Number of characters in zName */
                   79748:   int i, j;
                   79749:   Token nullId;        /* Fake token for an empty ID list */
                   79750:   DbFixer sFix;        /* For assigning database names to pTable */
                   79751:   int sortOrderMask;   /* 1 to honor DESC in index.  0 to ignore. */
                   79752:   sqlite3 *db = pParse->db;
                   79753:   Db *pDb;             /* The specific table containing the indexed database */
                   79754:   int iDb;             /* Index of the database that is being written */
                   79755:   Token *pName = 0;    /* Unqualified name of the index to create */
                   79756:   struct ExprList_item *pListItem; /* For looping over pList */
                   79757:   int nCol;
                   79758:   int nExtra = 0;
                   79759:   char *zExtra;
                   79760: 
                   79761:   assert( pStart==0 || pEnd!=0 ); /* pEnd must be non-NULL if pStart is */
                   79762:   assert( pParse->nErr==0 );      /* Never called with prior errors */
                   79763:   if( db->mallocFailed || IN_DECLARE_VTAB ){
                   79764:     goto exit_create_index;
                   79765:   }
                   79766:   if( SQLITE_OK!=sqlite3ReadSchema(pParse) ){
                   79767:     goto exit_create_index;
                   79768:   }
                   79769: 
                   79770:   /*
                   79771:   ** Find the table that is to be indexed.  Return early if not found.
                   79772:   */
                   79773:   if( pTblName!=0 ){
                   79774: 
                   79775:     /* Use the two-part index name to determine the database 
                   79776:     ** to search for the table. 'Fix' the table name to this db
                   79777:     ** before looking up the table.
                   79778:     */
                   79779:     assert( pName1 && pName2 );
                   79780:     iDb = sqlite3TwoPartName(pParse, pName1, pName2, &pName);
                   79781:     if( iDb<0 ) goto exit_create_index;
                   79782: 
                   79783: #ifndef SQLITE_OMIT_TEMPDB
                   79784:     /* If the index name was unqualified, check if the the table
                   79785:     ** is a temp table. If so, set the database to 1. Do not do this
                   79786:     ** if initialising a database schema.
                   79787:     */
                   79788:     if( !db->init.busy ){
                   79789:       pTab = sqlite3SrcListLookup(pParse, pTblName);
                   79790:       if( pName2->n==0 && pTab && pTab->pSchema==db->aDb[1].pSchema ){
                   79791:         iDb = 1;
                   79792:       }
                   79793:     }
                   79794: #endif
                   79795: 
                   79796:     if( sqlite3FixInit(&sFix, pParse, iDb, "index", pName) &&
                   79797:         sqlite3FixSrcList(&sFix, pTblName)
                   79798:     ){
                   79799:       /* Because the parser constructs pTblName from a single identifier,
                   79800:       ** sqlite3FixSrcList can never fail. */
                   79801:       assert(0);
                   79802:     }
                   79803:     pTab = sqlite3LocateTable(pParse, 0, pTblName->a[0].zName, 
                   79804:         pTblName->a[0].zDatabase);
                   79805:     if( !pTab || db->mallocFailed ) goto exit_create_index;
                   79806:     assert( db->aDb[iDb].pSchema==pTab->pSchema );
                   79807:   }else{
                   79808:     assert( pName==0 );
                   79809:     pTab = pParse->pNewTable;
                   79810:     if( !pTab ) goto exit_create_index;
                   79811:     iDb = sqlite3SchemaToIndex(db, pTab->pSchema);
                   79812:   }
                   79813:   pDb = &db->aDb[iDb];
                   79814: 
                   79815:   assert( pTab!=0 );
                   79816:   assert( pParse->nErr==0 );
                   79817:   if( sqlite3StrNICmp(pTab->zName, "sqlite_", 7)==0 
                   79818:        && memcmp(&pTab->zName[7],"altertab_",9)!=0 ){
                   79819:     sqlite3ErrorMsg(pParse, "table %s may not be indexed", pTab->zName);
                   79820:     goto exit_create_index;
                   79821:   }
                   79822: #ifndef SQLITE_OMIT_VIEW
                   79823:   if( pTab->pSelect ){
                   79824:     sqlite3ErrorMsg(pParse, "views may not be indexed");
                   79825:     goto exit_create_index;
                   79826:   }
                   79827: #endif
                   79828: #ifndef SQLITE_OMIT_VIRTUALTABLE
                   79829:   if( IsVirtual(pTab) ){
                   79830:     sqlite3ErrorMsg(pParse, "virtual tables may not be indexed");
                   79831:     goto exit_create_index;
                   79832:   }
                   79833: #endif
                   79834: 
                   79835:   /*
                   79836:   ** Find the name of the index.  Make sure there is not already another
                   79837:   ** index or table with the same name.  
                   79838:   **
                   79839:   ** Exception:  If we are reading the names of permanent indices from the
                   79840:   ** sqlite_master table (because some other process changed the schema) and
                   79841:   ** one of the index names collides with the name of a temporary table or
                   79842:   ** index, then we will continue to process this index.
                   79843:   **
                   79844:   ** If pName==0 it means that we are
                   79845:   ** dealing with a primary key or UNIQUE constraint.  We have to invent our
                   79846:   ** own name.
                   79847:   */
                   79848:   if( pName ){
                   79849:     zName = sqlite3NameFromToken(db, pName);
                   79850:     if( zName==0 ) goto exit_create_index;
                   79851:     if( SQLITE_OK!=sqlite3CheckObjectName(pParse, zName) ){
                   79852:       goto exit_create_index;
                   79853:     }
                   79854:     if( !db->init.busy ){
                   79855:       if( sqlite3FindTable(db, zName, 0)!=0 ){
                   79856:         sqlite3ErrorMsg(pParse, "there is already a table named %s", zName);
                   79857:         goto exit_create_index;
                   79858:       }
                   79859:     }
                   79860:     if( sqlite3FindIndex(db, zName, pDb->zName)!=0 ){
                   79861:       if( !ifNotExist ){
                   79862:         sqlite3ErrorMsg(pParse, "index %s already exists", zName);
                   79863:       }else{
                   79864:         assert( !db->init.busy );
                   79865:         sqlite3CodeVerifySchema(pParse, iDb);
                   79866:       }
                   79867:       goto exit_create_index;
                   79868:     }
                   79869:   }else{
                   79870:     int n;
                   79871:     Index *pLoop;
                   79872:     for(pLoop=pTab->pIndex, n=1; pLoop; pLoop=pLoop->pNext, n++){}
                   79873:     zName = sqlite3MPrintf(db, "sqlite_autoindex_%s_%d", pTab->zName, n);
                   79874:     if( zName==0 ){
                   79875:       goto exit_create_index;
                   79876:     }
                   79877:   }
                   79878: 
                   79879:   /* Check for authorization to create an index.
                   79880:   */
                   79881: #ifndef SQLITE_OMIT_AUTHORIZATION
                   79882:   {
                   79883:     const char *zDb = pDb->zName;
                   79884:     if( sqlite3AuthCheck(pParse, SQLITE_INSERT, SCHEMA_TABLE(iDb), 0, zDb) ){
                   79885:       goto exit_create_index;
                   79886:     }
                   79887:     i = SQLITE_CREATE_INDEX;
                   79888:     if( !OMIT_TEMPDB && iDb==1 ) i = SQLITE_CREATE_TEMP_INDEX;
                   79889:     if( sqlite3AuthCheck(pParse, i, zName, pTab->zName, zDb) ){
                   79890:       goto exit_create_index;
                   79891:     }
                   79892:   }
                   79893: #endif
                   79894: 
                   79895:   /* If pList==0, it means this routine was called to make a primary
                   79896:   ** key out of the last column added to the table under construction.
                   79897:   ** So create a fake list to simulate this.
                   79898:   */
                   79899:   if( pList==0 ){
                   79900:     nullId.z = pTab->aCol[pTab->nCol-1].zName;
                   79901:     nullId.n = sqlite3Strlen30((char*)nullId.z);
                   79902:     pList = sqlite3ExprListAppend(pParse, 0, 0);
                   79903:     if( pList==0 ) goto exit_create_index;
                   79904:     sqlite3ExprListSetName(pParse, pList, &nullId, 0);
                   79905:     pList->a[0].sortOrder = (u8)sortOrder;
                   79906:   }
                   79907: 
                   79908:   /* Figure out how many bytes of space are required to store explicitly
                   79909:   ** specified collation sequence names.
                   79910:   */
                   79911:   for(i=0; i<pList->nExpr; i++){
                   79912:     Expr *pExpr = pList->a[i].pExpr;
                   79913:     if( pExpr ){
                   79914:       CollSeq *pColl = pExpr->pColl;
                   79915:       /* Either pColl!=0 or there was an OOM failure.  But if an OOM
                   79916:       ** failure we have quit before reaching this point. */
                   79917:       if( ALWAYS(pColl) ){
                   79918:         nExtra += (1 + sqlite3Strlen30(pColl->zName));
                   79919:       }
                   79920:     }
                   79921:   }
                   79922: 
                   79923:   /* 
                   79924:   ** Allocate the index structure. 
                   79925:   */
                   79926:   nName = sqlite3Strlen30(zName);
                   79927:   nCol = pList->nExpr;
                   79928:   pIndex = sqlite3DbMallocZero(db, 
                   79929:       sizeof(Index) +              /* Index structure  */
                   79930:       sizeof(int)*nCol +           /* Index.aiColumn   */
                   79931:       sizeof(int)*(nCol+1) +       /* Index.aiRowEst   */
                   79932:       sizeof(char *)*nCol +        /* Index.azColl     */
                   79933:       sizeof(u8)*nCol +            /* Index.aSortOrder */
                   79934:       nName + 1 +                  /* Index.zName      */
                   79935:       nExtra                       /* Collation sequence names */
                   79936:   );
                   79937:   if( db->mallocFailed ){
                   79938:     goto exit_create_index;
                   79939:   }
                   79940:   pIndex->azColl = (char**)(&pIndex[1]);
                   79941:   pIndex->aiColumn = (int *)(&pIndex->azColl[nCol]);
                   79942:   pIndex->aiRowEst = (unsigned *)(&pIndex->aiColumn[nCol]);
                   79943:   pIndex->aSortOrder = (u8 *)(&pIndex->aiRowEst[nCol+1]);
                   79944:   pIndex->zName = (char *)(&pIndex->aSortOrder[nCol]);
                   79945:   zExtra = (char *)(&pIndex->zName[nName+1]);
                   79946:   memcpy(pIndex->zName, zName, nName+1);
                   79947:   pIndex->pTable = pTab;
                   79948:   pIndex->nColumn = pList->nExpr;
                   79949:   pIndex->onError = (u8)onError;
                   79950:   pIndex->autoIndex = (u8)(pName==0);
                   79951:   pIndex->pSchema = db->aDb[iDb].pSchema;
                   79952:   assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
                   79953: 
                   79954:   /* Check to see if we should honor DESC requests on index columns
                   79955:   */
                   79956:   if( pDb->pSchema->file_format>=4 ){
                   79957:     sortOrderMask = -1;   /* Honor DESC */
                   79958:   }else{
                   79959:     sortOrderMask = 0;    /* Ignore DESC */
                   79960:   }
                   79961: 
                   79962:   /* Scan the names of the columns of the table to be indexed and
                   79963:   ** load the column indices into the Index structure.  Report an error
                   79964:   ** if any column is not found.
                   79965:   **
                   79966:   ** TODO:  Add a test to make sure that the same column is not named
                   79967:   ** more than once within the same index.  Only the first instance of
                   79968:   ** the column will ever be used by the optimizer.  Note that using the
                   79969:   ** same column more than once cannot be an error because that would 
                   79970:   ** break backwards compatibility - it needs to be a warning.
                   79971:   */
                   79972:   for(i=0, pListItem=pList->a; i<pList->nExpr; i++, pListItem++){
                   79973:     const char *zColName = pListItem->zName;
                   79974:     Column *pTabCol;
                   79975:     int requestedSortOrder;
                   79976:     char *zColl;                   /* Collation sequence name */
                   79977: 
                   79978:     for(j=0, pTabCol=pTab->aCol; j<pTab->nCol; j++, pTabCol++){
                   79979:       if( sqlite3StrICmp(zColName, pTabCol->zName)==0 ) break;
                   79980:     }
                   79981:     if( j>=pTab->nCol ){
                   79982:       sqlite3ErrorMsg(pParse, "table %s has no column named %s",
                   79983:         pTab->zName, zColName);
                   79984:       pParse->checkSchema = 1;
                   79985:       goto exit_create_index;
                   79986:     }
                   79987:     pIndex->aiColumn[i] = j;
                   79988:     /* Justification of the ALWAYS(pListItem->pExpr->pColl):  Because of
                   79989:     ** the way the "idxlist" non-terminal is constructed by the parser,
                   79990:     ** if pListItem->pExpr is not null then either pListItem->pExpr->pColl
                   79991:     ** must exist or else there must have been an OOM error.  But if there
                   79992:     ** was an OOM error, we would never reach this point. */
                   79993:     if( pListItem->pExpr && ALWAYS(pListItem->pExpr->pColl) ){
                   79994:       int nColl;
                   79995:       zColl = pListItem->pExpr->pColl->zName;
                   79996:       nColl = sqlite3Strlen30(zColl) + 1;
                   79997:       assert( nExtra>=nColl );
                   79998:       memcpy(zExtra, zColl, nColl);
                   79999:       zColl = zExtra;
                   80000:       zExtra += nColl;
                   80001:       nExtra -= nColl;
                   80002:     }else{
                   80003:       zColl = pTab->aCol[j].zColl;
                   80004:       if( !zColl ){
                   80005:         zColl = db->pDfltColl->zName;
                   80006:       }
                   80007:     }
                   80008:     if( !db->init.busy && !sqlite3LocateCollSeq(pParse, zColl) ){
                   80009:       goto exit_create_index;
                   80010:     }
                   80011:     pIndex->azColl[i] = zColl;
                   80012:     requestedSortOrder = pListItem->sortOrder & sortOrderMask;
                   80013:     pIndex->aSortOrder[i] = (u8)requestedSortOrder;
                   80014:   }
                   80015:   sqlite3DefaultRowEst(pIndex);
                   80016: 
                   80017:   if( pTab==pParse->pNewTable ){
                   80018:     /* This routine has been called to create an automatic index as a
                   80019:     ** result of a PRIMARY KEY or UNIQUE clause on a column definition, or
                   80020:     ** a PRIMARY KEY or UNIQUE clause following the column definitions.
                   80021:     ** i.e. one of:
                   80022:     **
                   80023:     ** CREATE TABLE t(x PRIMARY KEY, y);
                   80024:     ** CREATE TABLE t(x, y, UNIQUE(x, y));
                   80025:     **
                   80026:     ** Either way, check to see if the table already has such an index. If
                   80027:     ** so, don't bother creating this one. This only applies to
                   80028:     ** automatically created indices. Users can do as they wish with
                   80029:     ** explicit indices.
                   80030:     **
                   80031:     ** Two UNIQUE or PRIMARY KEY constraints are considered equivalent
                   80032:     ** (and thus suppressing the second one) even if they have different
                   80033:     ** sort orders.
                   80034:     **
                   80035:     ** If there are different collating sequences or if the columns of
                   80036:     ** the constraint occur in different orders, then the constraints are
                   80037:     ** considered distinct and both result in separate indices.
                   80038:     */
                   80039:     Index *pIdx;
                   80040:     for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
                   80041:       int k;
                   80042:       assert( pIdx->onError!=OE_None );
                   80043:       assert( pIdx->autoIndex );
                   80044:       assert( pIndex->onError!=OE_None );
                   80045: 
                   80046:       if( pIdx->nColumn!=pIndex->nColumn ) continue;
                   80047:       for(k=0; k<pIdx->nColumn; k++){
                   80048:         const char *z1;
                   80049:         const char *z2;
                   80050:         if( pIdx->aiColumn[k]!=pIndex->aiColumn[k] ) break;
                   80051:         z1 = pIdx->azColl[k];
                   80052:         z2 = pIndex->azColl[k];
                   80053:         if( z1!=z2 && sqlite3StrICmp(z1, z2) ) break;
                   80054:       }
                   80055:       if( k==pIdx->nColumn ){
                   80056:         if( pIdx->onError!=pIndex->onError ){
                   80057:           /* This constraint creates the same index as a previous
                   80058:           ** constraint specified somewhere in the CREATE TABLE statement.
                   80059:           ** However the ON CONFLICT clauses are different. If both this 
                   80060:           ** constraint and the previous equivalent constraint have explicit
                   80061:           ** ON CONFLICT clauses this is an error. Otherwise, use the
                   80062:           ** explicitly specified behaviour for the index.
                   80063:           */
                   80064:           if( !(pIdx->onError==OE_Default || pIndex->onError==OE_Default) ){
                   80065:             sqlite3ErrorMsg(pParse, 
                   80066:                 "conflicting ON CONFLICT clauses specified", 0);
                   80067:           }
                   80068:           if( pIdx->onError==OE_Default ){
                   80069:             pIdx->onError = pIndex->onError;
                   80070:           }
                   80071:         }
                   80072:         goto exit_create_index;
                   80073:       }
                   80074:     }
                   80075:   }
                   80076: 
                   80077:   /* Link the new Index structure to its table and to the other
                   80078:   ** in-memory database structures. 
                   80079:   */
                   80080:   if( db->init.busy ){
                   80081:     Index *p;
                   80082:     assert( sqlite3SchemaMutexHeld(db, 0, pIndex->pSchema) );
                   80083:     p = sqlite3HashInsert(&pIndex->pSchema->idxHash, 
                   80084:                           pIndex->zName, sqlite3Strlen30(pIndex->zName),
                   80085:                           pIndex);
                   80086:     if( p ){
                   80087:       assert( p==pIndex );  /* Malloc must have failed */
                   80088:       db->mallocFailed = 1;
                   80089:       goto exit_create_index;
                   80090:     }
                   80091:     db->flags |= SQLITE_InternChanges;
                   80092:     if( pTblName!=0 ){
                   80093:       pIndex->tnum = db->init.newTnum;
                   80094:     }
                   80095:   }
                   80096: 
                   80097:   /* If the db->init.busy is 0 then create the index on disk.  This
                   80098:   ** involves writing the index into the master table and filling in the
                   80099:   ** index with the current table contents.
                   80100:   **
                   80101:   ** The db->init.busy is 0 when the user first enters a CREATE INDEX 
                   80102:   ** command.  db->init.busy is 1 when a database is opened and 
                   80103:   ** CREATE INDEX statements are read out of the master table.  In
                   80104:   ** the latter case the index already exists on disk, which is why
                   80105:   ** we don't want to recreate it.
                   80106:   **
                   80107:   ** If pTblName==0 it means this index is generated as a primary key
                   80108:   ** or UNIQUE constraint of a CREATE TABLE statement.  Since the table
                   80109:   ** has just been created, it contains no data and the index initialization
                   80110:   ** step can be skipped.
                   80111:   */
                   80112:   else{ /* if( db->init.busy==0 ) */
                   80113:     Vdbe *v;
                   80114:     char *zStmt;
                   80115:     int iMem = ++pParse->nMem;
                   80116: 
                   80117:     v = sqlite3GetVdbe(pParse);
                   80118:     if( v==0 ) goto exit_create_index;
                   80119: 
                   80120: 
                   80121:     /* Create the rootpage for the index
                   80122:     */
                   80123:     sqlite3BeginWriteOperation(pParse, 1, iDb);
                   80124:     sqlite3VdbeAddOp2(v, OP_CreateIndex, iDb, iMem);
                   80125: 
                   80126:     /* Gather the complete text of the CREATE INDEX statement into
                   80127:     ** the zStmt variable
                   80128:     */
                   80129:     if( pStart ){
                   80130:       assert( pEnd!=0 );
                   80131:       /* A named index with an explicit CREATE INDEX statement */
                   80132:       zStmt = sqlite3MPrintf(db, "CREATE%s INDEX %.*s",
                   80133:         onError==OE_None ? "" : " UNIQUE",
                   80134:         pEnd->z - pName->z + 1,
                   80135:         pName->z);
                   80136:     }else{
                   80137:       /* An automatic index created by a PRIMARY KEY or UNIQUE constraint */
                   80138:       /* zStmt = sqlite3MPrintf(""); */
                   80139:       zStmt = 0;
                   80140:     }
                   80141: 
                   80142:     /* Add an entry in sqlite_master for this index
                   80143:     */
                   80144:     sqlite3NestedParse(pParse, 
                   80145:         "INSERT INTO %Q.%s VALUES('index',%Q,%Q,#%d,%Q);",
                   80146:         db->aDb[iDb].zName, SCHEMA_TABLE(iDb),
                   80147:         pIndex->zName,
                   80148:         pTab->zName,
                   80149:         iMem,
                   80150:         zStmt
                   80151:     );
                   80152:     sqlite3DbFree(db, zStmt);
                   80153: 
                   80154:     /* Fill the index with data and reparse the schema. Code an OP_Expire
                   80155:     ** to invalidate all pre-compiled statements.
                   80156:     */
                   80157:     if( pTblName ){
                   80158:       sqlite3RefillIndex(pParse, pIndex, iMem);
                   80159:       sqlite3ChangeCookie(pParse, iDb);
                   80160:       sqlite3VdbeAddParseSchemaOp(v, iDb,
                   80161:          sqlite3MPrintf(db, "name='%q' AND type='index'", pIndex->zName));
                   80162:       sqlite3VdbeAddOp1(v, OP_Expire, 0);
                   80163:     }
                   80164:   }
                   80165: 
                   80166:   /* When adding an index to the list of indices for a table, make
                   80167:   ** sure all indices labeled OE_Replace come after all those labeled
                   80168:   ** OE_Ignore.  This is necessary for the correct constraint check
                   80169:   ** processing (in sqlite3GenerateConstraintChecks()) as part of
                   80170:   ** UPDATE and INSERT statements.  
                   80171:   */
                   80172:   if( db->init.busy || pTblName==0 ){
                   80173:     if( onError!=OE_Replace || pTab->pIndex==0
                   80174:          || pTab->pIndex->onError==OE_Replace){
                   80175:       pIndex->pNext = pTab->pIndex;
                   80176:       pTab->pIndex = pIndex;
                   80177:     }else{
                   80178:       Index *pOther = pTab->pIndex;
                   80179:       while( pOther->pNext && pOther->pNext->onError!=OE_Replace ){
                   80180:         pOther = pOther->pNext;
                   80181:       }
                   80182:       pIndex->pNext = pOther->pNext;
                   80183:       pOther->pNext = pIndex;
                   80184:     }
                   80185:     pRet = pIndex;
                   80186:     pIndex = 0;
                   80187:   }
                   80188: 
                   80189:   /* Clean up before exiting */
                   80190: exit_create_index:
                   80191:   if( pIndex ){
                   80192:     sqlite3DbFree(db, pIndex->zColAff);
                   80193:     sqlite3DbFree(db, pIndex);
                   80194:   }
                   80195:   sqlite3ExprListDelete(db, pList);
                   80196:   sqlite3SrcListDelete(db, pTblName);
                   80197:   sqlite3DbFree(db, zName);
                   80198:   return pRet;
                   80199: }
                   80200: 
                   80201: /*
                   80202: ** Fill the Index.aiRowEst[] array with default information - information
                   80203: ** to be used when we have not run the ANALYZE command.
                   80204: **
                   80205: ** aiRowEst[0] is suppose to contain the number of elements in the index.
                   80206: ** Since we do not know, guess 1 million.  aiRowEst[1] is an estimate of the
                   80207: ** number of rows in the table that match any particular value of the
                   80208: ** first column of the index.  aiRowEst[2] is an estimate of the number
                   80209: ** of rows that match any particular combiniation of the first 2 columns
                   80210: ** of the index.  And so forth.  It must always be the case that
                   80211: *
                   80212: **           aiRowEst[N]<=aiRowEst[N-1]
                   80213: **           aiRowEst[N]>=1
                   80214: **
                   80215: ** Apart from that, we have little to go on besides intuition as to
                   80216: ** how aiRowEst[] should be initialized.  The numbers generated here
                   80217: ** are based on typical values found in actual indices.
                   80218: */
                   80219: SQLITE_PRIVATE void sqlite3DefaultRowEst(Index *pIdx){
                   80220:   unsigned *a = pIdx->aiRowEst;
                   80221:   int i;
                   80222:   unsigned n;
                   80223:   assert( a!=0 );
                   80224:   a[0] = pIdx->pTable->nRowEst;
                   80225:   if( a[0]<10 ) a[0] = 10;
                   80226:   n = 10;
                   80227:   for(i=1; i<=pIdx->nColumn; i++){
                   80228:     a[i] = n;
                   80229:     if( n>5 ) n--;
                   80230:   }
                   80231:   if( pIdx->onError!=OE_None ){
                   80232:     a[pIdx->nColumn] = 1;
                   80233:   }
                   80234: }
                   80235: 
                   80236: /*
                   80237: ** This routine will drop an existing named index.  This routine
                   80238: ** implements the DROP INDEX statement.
                   80239: */
                   80240: SQLITE_PRIVATE void sqlite3DropIndex(Parse *pParse, SrcList *pName, int ifExists){
                   80241:   Index *pIndex;
                   80242:   Vdbe *v;
                   80243:   sqlite3 *db = pParse->db;
                   80244:   int iDb;
                   80245: 
                   80246:   assert( pParse->nErr==0 );   /* Never called with prior errors */
                   80247:   if( db->mallocFailed ){
                   80248:     goto exit_drop_index;
                   80249:   }
                   80250:   assert( pName->nSrc==1 );
                   80251:   if( SQLITE_OK!=sqlite3ReadSchema(pParse) ){
                   80252:     goto exit_drop_index;
                   80253:   }
                   80254:   pIndex = sqlite3FindIndex(db, pName->a[0].zName, pName->a[0].zDatabase);
                   80255:   if( pIndex==0 ){
                   80256:     if( !ifExists ){
                   80257:       sqlite3ErrorMsg(pParse, "no such index: %S", pName, 0);
                   80258:     }else{
                   80259:       sqlite3CodeVerifyNamedSchema(pParse, pName->a[0].zDatabase);
                   80260:     }
                   80261:     pParse->checkSchema = 1;
                   80262:     goto exit_drop_index;
                   80263:   }
                   80264:   if( pIndex->autoIndex ){
                   80265:     sqlite3ErrorMsg(pParse, "index associated with UNIQUE "
                   80266:       "or PRIMARY KEY constraint cannot be dropped", 0);
                   80267:     goto exit_drop_index;
                   80268:   }
                   80269:   iDb = sqlite3SchemaToIndex(db, pIndex->pSchema);
                   80270: #ifndef SQLITE_OMIT_AUTHORIZATION
                   80271:   {
                   80272:     int code = SQLITE_DROP_INDEX;
                   80273:     Table *pTab = pIndex->pTable;
                   80274:     const char *zDb = db->aDb[iDb].zName;
                   80275:     const char *zTab = SCHEMA_TABLE(iDb);
                   80276:     if( sqlite3AuthCheck(pParse, SQLITE_DELETE, zTab, 0, zDb) ){
                   80277:       goto exit_drop_index;
                   80278:     }
                   80279:     if( !OMIT_TEMPDB && iDb ) code = SQLITE_DROP_TEMP_INDEX;
                   80280:     if( sqlite3AuthCheck(pParse, code, pIndex->zName, pTab->zName, zDb) ){
                   80281:       goto exit_drop_index;
                   80282:     }
                   80283:   }
                   80284: #endif
                   80285: 
                   80286:   /* Generate code to remove the index and from the master table */
                   80287:   v = sqlite3GetVdbe(pParse);
                   80288:   if( v ){
                   80289:     sqlite3BeginWriteOperation(pParse, 1, iDb);
                   80290:     sqlite3NestedParse(pParse,
                   80291:        "DELETE FROM %Q.%s WHERE name=%Q AND type='index'",
                   80292:        db->aDb[iDb].zName, SCHEMA_TABLE(iDb),
                   80293:        pIndex->zName
                   80294:     );
                   80295:     if( sqlite3FindTable(db, "sqlite_stat1", db->aDb[iDb].zName) ){
                   80296:       sqlite3NestedParse(pParse,
                   80297:         "DELETE FROM %Q.sqlite_stat1 WHERE idx=%Q",
                   80298:         db->aDb[iDb].zName, pIndex->zName
                   80299:       );
                   80300:     }
                   80301:     sqlite3ChangeCookie(pParse, iDb);
                   80302:     destroyRootPage(pParse, pIndex->tnum, iDb);
                   80303:     sqlite3VdbeAddOp4(v, OP_DropIndex, iDb, 0, 0, pIndex->zName, 0);
                   80304:   }
                   80305: 
                   80306: exit_drop_index:
                   80307:   sqlite3SrcListDelete(db, pName);
                   80308: }
                   80309: 
                   80310: /*
                   80311: ** pArray is a pointer to an array of objects.  Each object in the
                   80312: ** array is szEntry bytes in size.  This routine allocates a new
                   80313: ** object on the end of the array.
                   80314: **
                   80315: ** *pnEntry is the number of entries already in use.  *pnAlloc is
                   80316: ** the previously allocated size of the array.  initSize is the
                   80317: ** suggested initial array size allocation.
                   80318: **
                   80319: ** The index of the new entry is returned in *pIdx.
                   80320: **
                   80321: ** This routine returns a pointer to the array of objects.  This
                   80322: ** might be the same as the pArray parameter or it might be a different
                   80323: ** pointer if the array was resized.
                   80324: */
                   80325: SQLITE_PRIVATE void *sqlite3ArrayAllocate(
                   80326:   sqlite3 *db,      /* Connection to notify of malloc failures */
                   80327:   void *pArray,     /* Array of objects.  Might be reallocated */
                   80328:   int szEntry,      /* Size of each object in the array */
                   80329:   int initSize,     /* Suggested initial allocation, in elements */
                   80330:   int *pnEntry,     /* Number of objects currently in use */
                   80331:   int *pnAlloc,     /* Current size of the allocation, in elements */
                   80332:   int *pIdx         /* Write the index of a new slot here */
                   80333: ){
                   80334:   char *z;
                   80335:   if( *pnEntry >= *pnAlloc ){
                   80336:     void *pNew;
                   80337:     int newSize;
                   80338:     newSize = (*pnAlloc)*2 + initSize;
                   80339:     pNew = sqlite3DbRealloc(db, pArray, newSize*szEntry);
                   80340:     if( pNew==0 ){
                   80341:       *pIdx = -1;
                   80342:       return pArray;
                   80343:     }
                   80344:     *pnAlloc = sqlite3DbMallocSize(db, pNew)/szEntry;
                   80345:     pArray = pNew;
                   80346:   }
                   80347:   z = (char*)pArray;
                   80348:   memset(&z[*pnEntry * szEntry], 0, szEntry);
                   80349:   *pIdx = *pnEntry;
                   80350:   ++*pnEntry;
                   80351:   return pArray;
                   80352: }
                   80353: 
                   80354: /*
                   80355: ** Append a new element to the given IdList.  Create a new IdList if
                   80356: ** need be.
                   80357: **
                   80358: ** A new IdList is returned, or NULL if malloc() fails.
                   80359: */
                   80360: SQLITE_PRIVATE IdList *sqlite3IdListAppend(sqlite3 *db, IdList *pList, Token *pToken){
                   80361:   int i;
                   80362:   if( pList==0 ){
                   80363:     pList = sqlite3DbMallocZero(db, sizeof(IdList) );
                   80364:     if( pList==0 ) return 0;
                   80365:     pList->nAlloc = 0;
                   80366:   }
                   80367:   pList->a = sqlite3ArrayAllocate(
                   80368:       db,
                   80369:       pList->a,
                   80370:       sizeof(pList->a[0]),
                   80371:       5,
                   80372:       &pList->nId,
                   80373:       &pList->nAlloc,
                   80374:       &i
                   80375:   );
                   80376:   if( i<0 ){
                   80377:     sqlite3IdListDelete(db, pList);
                   80378:     return 0;
                   80379:   }
                   80380:   pList->a[i].zName = sqlite3NameFromToken(db, pToken);
                   80381:   return pList;
                   80382: }
                   80383: 
                   80384: /*
                   80385: ** Delete an IdList.
                   80386: */
                   80387: SQLITE_PRIVATE void sqlite3IdListDelete(sqlite3 *db, IdList *pList){
                   80388:   int i;
                   80389:   if( pList==0 ) return;
                   80390:   for(i=0; i<pList->nId; i++){
                   80391:     sqlite3DbFree(db, pList->a[i].zName);
                   80392:   }
                   80393:   sqlite3DbFree(db, pList->a);
                   80394:   sqlite3DbFree(db, pList);
                   80395: }
                   80396: 
                   80397: /*
                   80398: ** Return the index in pList of the identifier named zId.  Return -1
                   80399: ** if not found.
                   80400: */
                   80401: SQLITE_PRIVATE int sqlite3IdListIndex(IdList *pList, const char *zName){
                   80402:   int i;
                   80403:   if( pList==0 ) return -1;
                   80404:   for(i=0; i<pList->nId; i++){
                   80405:     if( sqlite3StrICmp(pList->a[i].zName, zName)==0 ) return i;
                   80406:   }
                   80407:   return -1;
                   80408: }
                   80409: 
                   80410: /*
                   80411: ** Expand the space allocated for the given SrcList object by
                   80412: ** creating nExtra new slots beginning at iStart.  iStart is zero based.
                   80413: ** New slots are zeroed.
                   80414: **
                   80415: ** For example, suppose a SrcList initially contains two entries: A,B.
                   80416: ** To append 3 new entries onto the end, do this:
                   80417: **
                   80418: **    sqlite3SrcListEnlarge(db, pSrclist, 3, 2);
                   80419: **
                   80420: ** After the call above it would contain:  A, B, nil, nil, nil.
                   80421: ** If the iStart argument had been 1 instead of 2, then the result
                   80422: ** would have been:  A, nil, nil, nil, B.  To prepend the new slots,
                   80423: ** the iStart value would be 0.  The result then would
                   80424: ** be: nil, nil, nil, A, B.
                   80425: **
                   80426: ** If a memory allocation fails the SrcList is unchanged.  The
                   80427: ** db->mallocFailed flag will be set to true.
                   80428: */
                   80429: SQLITE_PRIVATE SrcList *sqlite3SrcListEnlarge(
                   80430:   sqlite3 *db,       /* Database connection to notify of OOM errors */
                   80431:   SrcList *pSrc,     /* The SrcList to be enlarged */
                   80432:   int nExtra,        /* Number of new slots to add to pSrc->a[] */
                   80433:   int iStart         /* Index in pSrc->a[] of first new slot */
                   80434: ){
                   80435:   int i;
                   80436: 
                   80437:   /* Sanity checking on calling parameters */
                   80438:   assert( iStart>=0 );
                   80439:   assert( nExtra>=1 );
                   80440:   assert( pSrc!=0 );
                   80441:   assert( iStart<=pSrc->nSrc );
                   80442: 
                   80443:   /* Allocate additional space if needed */
                   80444:   if( pSrc->nSrc+nExtra>pSrc->nAlloc ){
                   80445:     SrcList *pNew;
                   80446:     int nAlloc = pSrc->nSrc+nExtra;
                   80447:     int nGot;
                   80448:     pNew = sqlite3DbRealloc(db, pSrc,
                   80449:                sizeof(*pSrc) + (nAlloc-1)*sizeof(pSrc->a[0]) );
                   80450:     if( pNew==0 ){
                   80451:       assert( db->mallocFailed );
                   80452:       return pSrc;
                   80453:     }
                   80454:     pSrc = pNew;
                   80455:     nGot = (sqlite3DbMallocSize(db, pNew) - sizeof(*pSrc))/sizeof(pSrc->a[0])+1;
                   80456:     pSrc->nAlloc = (u16)nGot;
                   80457:   }
                   80458: 
                   80459:   /* Move existing slots that come after the newly inserted slots
                   80460:   ** out of the way */
                   80461:   for(i=pSrc->nSrc-1; i>=iStart; i--){
                   80462:     pSrc->a[i+nExtra] = pSrc->a[i];
                   80463:   }
                   80464:   pSrc->nSrc += (i16)nExtra;
                   80465: 
                   80466:   /* Zero the newly allocated slots */
                   80467:   memset(&pSrc->a[iStart], 0, sizeof(pSrc->a[0])*nExtra);
                   80468:   for(i=iStart; i<iStart+nExtra; i++){
                   80469:     pSrc->a[i].iCursor = -1;
                   80470:   }
                   80471: 
                   80472:   /* Return a pointer to the enlarged SrcList */
                   80473:   return pSrc;
                   80474: }
                   80475: 
                   80476: 
                   80477: /*
                   80478: ** Append a new table name to the given SrcList.  Create a new SrcList if
                   80479: ** need be.  A new entry is created in the SrcList even if pTable is NULL.
                   80480: **
                   80481: ** A SrcList is returned, or NULL if there is an OOM error.  The returned
                   80482: ** SrcList might be the same as the SrcList that was input or it might be
                   80483: ** a new one.  If an OOM error does occurs, then the prior value of pList
                   80484: ** that is input to this routine is automatically freed.
                   80485: **
                   80486: ** If pDatabase is not null, it means that the table has an optional
                   80487: ** database name prefix.  Like this:  "database.table".  The pDatabase
                   80488: ** points to the table name and the pTable points to the database name.
                   80489: ** The SrcList.a[].zName field is filled with the table name which might
                   80490: ** come from pTable (if pDatabase is NULL) or from pDatabase.  
                   80491: ** SrcList.a[].zDatabase is filled with the database name from pTable,
                   80492: ** or with NULL if no database is specified.
                   80493: **
                   80494: ** In other words, if call like this:
                   80495: **
                   80496: **         sqlite3SrcListAppend(D,A,B,0);
                   80497: **
                   80498: ** Then B is a table name and the database name is unspecified.  If called
                   80499: ** like this:
                   80500: **
                   80501: **         sqlite3SrcListAppend(D,A,B,C);
                   80502: **
                   80503: ** Then C is the table name and B is the database name.  If C is defined
                   80504: ** then so is B.  In other words, we never have a case where:
                   80505: **
                   80506: **         sqlite3SrcListAppend(D,A,0,C);
                   80507: **
                   80508: ** Both pTable and pDatabase are assumed to be quoted.  They are dequoted
                   80509: ** before being added to the SrcList.
                   80510: */
                   80511: SQLITE_PRIVATE SrcList *sqlite3SrcListAppend(
                   80512:   sqlite3 *db,        /* Connection to notify of malloc failures */
                   80513:   SrcList *pList,     /* Append to this SrcList. NULL creates a new SrcList */
                   80514:   Token *pTable,      /* Table to append */
                   80515:   Token *pDatabase    /* Database of the table */
                   80516: ){
                   80517:   struct SrcList_item *pItem;
                   80518:   assert( pDatabase==0 || pTable!=0 );  /* Cannot have C without B */
                   80519:   if( pList==0 ){
                   80520:     pList = sqlite3DbMallocZero(db, sizeof(SrcList) );
                   80521:     if( pList==0 ) return 0;
                   80522:     pList->nAlloc = 1;
                   80523:   }
                   80524:   pList = sqlite3SrcListEnlarge(db, pList, 1, pList->nSrc);
                   80525:   if( db->mallocFailed ){
                   80526:     sqlite3SrcListDelete(db, pList);
                   80527:     return 0;
                   80528:   }
                   80529:   pItem = &pList->a[pList->nSrc-1];
                   80530:   if( pDatabase && pDatabase->z==0 ){
                   80531:     pDatabase = 0;
                   80532:   }
                   80533:   if( pDatabase ){
                   80534:     Token *pTemp = pDatabase;
                   80535:     pDatabase = pTable;
                   80536:     pTable = pTemp;
                   80537:   }
                   80538:   pItem->zName = sqlite3NameFromToken(db, pTable);
                   80539:   pItem->zDatabase = sqlite3NameFromToken(db, pDatabase);
                   80540:   return pList;
                   80541: }
                   80542: 
                   80543: /*
                   80544: ** Assign VdbeCursor index numbers to all tables in a SrcList
                   80545: */
                   80546: SQLITE_PRIVATE void sqlite3SrcListAssignCursors(Parse *pParse, SrcList *pList){
                   80547:   int i;
                   80548:   struct SrcList_item *pItem;
                   80549:   assert(pList || pParse->db->mallocFailed );
                   80550:   if( pList ){
                   80551:     for(i=0, pItem=pList->a; i<pList->nSrc; i++, pItem++){
                   80552:       if( pItem->iCursor>=0 ) break;
                   80553:       pItem->iCursor = pParse->nTab++;
                   80554:       if( pItem->pSelect ){
                   80555:         sqlite3SrcListAssignCursors(pParse, pItem->pSelect->pSrc);
                   80556:       }
                   80557:     }
                   80558:   }
                   80559: }
                   80560: 
                   80561: /*
                   80562: ** Delete an entire SrcList including all its substructure.
                   80563: */
                   80564: SQLITE_PRIVATE void sqlite3SrcListDelete(sqlite3 *db, SrcList *pList){
                   80565:   int i;
                   80566:   struct SrcList_item *pItem;
                   80567:   if( pList==0 ) return;
                   80568:   for(pItem=pList->a, i=0; i<pList->nSrc; i++, pItem++){
                   80569:     sqlite3DbFree(db, pItem->zDatabase);
                   80570:     sqlite3DbFree(db, pItem->zName);
                   80571:     sqlite3DbFree(db, pItem->zAlias);
                   80572:     sqlite3DbFree(db, pItem->zIndex);
                   80573:     sqlite3DeleteTable(db, pItem->pTab);
                   80574:     sqlite3SelectDelete(db, pItem->pSelect);
                   80575:     sqlite3ExprDelete(db, pItem->pOn);
                   80576:     sqlite3IdListDelete(db, pItem->pUsing);
                   80577:   }
                   80578:   sqlite3DbFree(db, pList);
                   80579: }
                   80580: 
                   80581: /*
                   80582: ** This routine is called by the parser to add a new term to the
                   80583: ** end of a growing FROM clause.  The "p" parameter is the part of
                   80584: ** the FROM clause that has already been constructed.  "p" is NULL
                   80585: ** if this is the first term of the FROM clause.  pTable and pDatabase
                   80586: ** are the name of the table and database named in the FROM clause term.
                   80587: ** pDatabase is NULL if the database name qualifier is missing - the
                   80588: ** usual case.  If the term has a alias, then pAlias points to the
                   80589: ** alias token.  If the term is a subquery, then pSubquery is the
                   80590: ** SELECT statement that the subquery encodes.  The pTable and
                   80591: ** pDatabase parameters are NULL for subqueries.  The pOn and pUsing
                   80592: ** parameters are the content of the ON and USING clauses.
                   80593: **
                   80594: ** Return a new SrcList which encodes is the FROM with the new
                   80595: ** term added.
                   80596: */
                   80597: SQLITE_PRIVATE SrcList *sqlite3SrcListAppendFromTerm(
                   80598:   Parse *pParse,          /* Parsing context */
                   80599:   SrcList *p,             /* The left part of the FROM clause already seen */
                   80600:   Token *pTable,          /* Name of the table to add to the FROM clause */
                   80601:   Token *pDatabase,       /* Name of the database containing pTable */
                   80602:   Token *pAlias,          /* The right-hand side of the AS subexpression */
                   80603:   Select *pSubquery,      /* A subquery used in place of a table name */
                   80604:   Expr *pOn,              /* The ON clause of a join */
                   80605:   IdList *pUsing          /* The USING clause of a join */
                   80606: ){
                   80607:   struct SrcList_item *pItem;
                   80608:   sqlite3 *db = pParse->db;
                   80609:   if( !p && (pOn || pUsing) ){
                   80610:     sqlite3ErrorMsg(pParse, "a JOIN clause is required before %s", 
                   80611:       (pOn ? "ON" : "USING")
                   80612:     );
                   80613:     goto append_from_error;
                   80614:   }
                   80615:   p = sqlite3SrcListAppend(db, p, pTable, pDatabase);
                   80616:   if( p==0 || NEVER(p->nSrc==0) ){
                   80617:     goto append_from_error;
                   80618:   }
                   80619:   pItem = &p->a[p->nSrc-1];
                   80620:   assert( pAlias!=0 );
                   80621:   if( pAlias->n ){
                   80622:     pItem->zAlias = sqlite3NameFromToken(db, pAlias);
                   80623:   }
                   80624:   pItem->pSelect = pSubquery;
                   80625:   pItem->pOn = pOn;
                   80626:   pItem->pUsing = pUsing;
                   80627:   return p;
                   80628: 
                   80629:  append_from_error:
                   80630:   assert( p==0 );
                   80631:   sqlite3ExprDelete(db, pOn);
                   80632:   sqlite3IdListDelete(db, pUsing);
                   80633:   sqlite3SelectDelete(db, pSubquery);
                   80634:   return 0;
                   80635: }
                   80636: 
                   80637: /*
                   80638: ** Add an INDEXED BY or NOT INDEXED clause to the most recently added 
                   80639: ** element of the source-list passed as the second argument.
                   80640: */
                   80641: SQLITE_PRIVATE void sqlite3SrcListIndexedBy(Parse *pParse, SrcList *p, Token *pIndexedBy){
                   80642:   assert( pIndexedBy!=0 );
                   80643:   if( p && ALWAYS(p->nSrc>0) ){
                   80644:     struct SrcList_item *pItem = &p->a[p->nSrc-1];
                   80645:     assert( pItem->notIndexed==0 && pItem->zIndex==0 );
                   80646:     if( pIndexedBy->n==1 && !pIndexedBy->z ){
                   80647:       /* A "NOT INDEXED" clause was supplied. See parse.y 
                   80648:       ** construct "indexed_opt" for details. */
                   80649:       pItem->notIndexed = 1;
                   80650:     }else{
                   80651:       pItem->zIndex = sqlite3NameFromToken(pParse->db, pIndexedBy);
                   80652:     }
                   80653:   }
                   80654: }
                   80655: 
                   80656: /*
                   80657: ** When building up a FROM clause in the parser, the join operator
                   80658: ** is initially attached to the left operand.  But the code generator
                   80659: ** expects the join operator to be on the right operand.  This routine
                   80660: ** Shifts all join operators from left to right for an entire FROM
                   80661: ** clause.
                   80662: **
                   80663: ** Example: Suppose the join is like this:
                   80664: **
                   80665: **           A natural cross join B
                   80666: **
                   80667: ** The operator is "natural cross join".  The A and B operands are stored
                   80668: ** in p->a[0] and p->a[1], respectively.  The parser initially stores the
                   80669: ** operator with A.  This routine shifts that operator over to B.
                   80670: */
                   80671: SQLITE_PRIVATE void sqlite3SrcListShiftJoinType(SrcList *p){
                   80672:   if( p && p->a ){
                   80673:     int i;
                   80674:     for(i=p->nSrc-1; i>0; i--){
                   80675:       p->a[i].jointype = p->a[i-1].jointype;
                   80676:     }
                   80677:     p->a[0].jointype = 0;
                   80678:   }
                   80679: }
                   80680: 
                   80681: /*
                   80682: ** Begin a transaction
                   80683: */
                   80684: SQLITE_PRIVATE void sqlite3BeginTransaction(Parse *pParse, int type){
                   80685:   sqlite3 *db;
                   80686:   Vdbe *v;
                   80687:   int i;
                   80688: 
                   80689:   assert( pParse!=0 );
                   80690:   db = pParse->db;
                   80691:   assert( db!=0 );
                   80692: /*  if( db->aDb[0].pBt==0 ) return; */
                   80693:   if( sqlite3AuthCheck(pParse, SQLITE_TRANSACTION, "BEGIN", 0, 0) ){
                   80694:     return;
                   80695:   }
                   80696:   v = sqlite3GetVdbe(pParse);
                   80697:   if( !v ) return;
                   80698:   if( type!=TK_DEFERRED ){
                   80699:     for(i=0; i<db->nDb; i++){
                   80700:       sqlite3VdbeAddOp2(v, OP_Transaction, i, (type==TK_EXCLUSIVE)+1);
                   80701:       sqlite3VdbeUsesBtree(v, i);
                   80702:     }
                   80703:   }
                   80704:   sqlite3VdbeAddOp2(v, OP_AutoCommit, 0, 0);
                   80705: }
                   80706: 
                   80707: /*
                   80708: ** Commit a transaction
                   80709: */
                   80710: SQLITE_PRIVATE void sqlite3CommitTransaction(Parse *pParse){
                   80711:   sqlite3 *db;
                   80712:   Vdbe *v;
                   80713: 
                   80714:   assert( pParse!=0 );
                   80715:   db = pParse->db;
                   80716:   assert( db!=0 );
                   80717: /*  if( db->aDb[0].pBt==0 ) return; */
                   80718:   if( sqlite3AuthCheck(pParse, SQLITE_TRANSACTION, "COMMIT", 0, 0) ){
                   80719:     return;
                   80720:   }
                   80721:   v = sqlite3GetVdbe(pParse);
                   80722:   if( v ){
                   80723:     sqlite3VdbeAddOp2(v, OP_AutoCommit, 1, 0);
                   80724:   }
                   80725: }
                   80726: 
                   80727: /*
                   80728: ** Rollback a transaction
                   80729: */
                   80730: SQLITE_PRIVATE void sqlite3RollbackTransaction(Parse *pParse){
                   80731:   sqlite3 *db;
                   80732:   Vdbe *v;
                   80733: 
                   80734:   assert( pParse!=0 );
                   80735:   db = pParse->db;
                   80736:   assert( db!=0 );
                   80737: /*  if( db->aDb[0].pBt==0 ) return; */
                   80738:   if( sqlite3AuthCheck(pParse, SQLITE_TRANSACTION, "ROLLBACK", 0, 0) ){
                   80739:     return;
                   80740:   }
                   80741:   v = sqlite3GetVdbe(pParse);
                   80742:   if( v ){
                   80743:     sqlite3VdbeAddOp2(v, OP_AutoCommit, 1, 1);
                   80744:   }
                   80745: }
                   80746: 
                   80747: /*
                   80748: ** This function is called by the parser when it parses a command to create,
                   80749: ** release or rollback an SQL savepoint. 
                   80750: */
                   80751: SQLITE_PRIVATE void sqlite3Savepoint(Parse *pParse, int op, Token *pName){
                   80752:   char *zName = sqlite3NameFromToken(pParse->db, pName);
                   80753:   if( zName ){
                   80754:     Vdbe *v = sqlite3GetVdbe(pParse);
                   80755: #ifndef SQLITE_OMIT_AUTHORIZATION
                   80756:     static const char * const az[] = { "BEGIN", "RELEASE", "ROLLBACK" };
                   80757:     assert( !SAVEPOINT_BEGIN && SAVEPOINT_RELEASE==1 && SAVEPOINT_ROLLBACK==2 );
                   80758: #endif
                   80759:     if( !v || sqlite3AuthCheck(pParse, SQLITE_SAVEPOINT, az[op], zName, 0) ){
                   80760:       sqlite3DbFree(pParse->db, zName);
                   80761:       return;
                   80762:     }
                   80763:     sqlite3VdbeAddOp4(v, OP_Savepoint, op, 0, 0, zName, P4_DYNAMIC);
                   80764:   }
                   80765: }
                   80766: 
                   80767: /*
                   80768: ** Make sure the TEMP database is open and available for use.  Return
                   80769: ** the number of errors.  Leave any error messages in the pParse structure.
                   80770: */
                   80771: SQLITE_PRIVATE int sqlite3OpenTempDatabase(Parse *pParse){
                   80772:   sqlite3 *db = pParse->db;
                   80773:   if( db->aDb[1].pBt==0 && !pParse->explain ){
                   80774:     int rc;
                   80775:     Btree *pBt;
                   80776:     static const int flags = 
                   80777:           SQLITE_OPEN_READWRITE |
                   80778:           SQLITE_OPEN_CREATE |
                   80779:           SQLITE_OPEN_EXCLUSIVE |
                   80780:           SQLITE_OPEN_DELETEONCLOSE |
                   80781:           SQLITE_OPEN_TEMP_DB;
                   80782: 
                   80783:     rc = sqlite3BtreeOpen(db->pVfs, 0, db, &pBt, 0, flags);
                   80784:     if( rc!=SQLITE_OK ){
                   80785:       sqlite3ErrorMsg(pParse, "unable to open a temporary database "
                   80786:         "file for storing temporary tables");
                   80787:       pParse->rc = rc;
                   80788:       return 1;
                   80789:     }
                   80790:     db->aDb[1].pBt = pBt;
                   80791:     assert( db->aDb[1].pSchema );
                   80792:     if( SQLITE_NOMEM==sqlite3BtreeSetPageSize(pBt, db->nextPagesize, -1, 0) ){
                   80793:       db->mallocFailed = 1;
                   80794:       return 1;
                   80795:     }
                   80796:   }
                   80797:   return 0;
                   80798: }
                   80799: 
                   80800: /*
                   80801: ** Generate VDBE code that will verify the schema cookie and start
                   80802: ** a read-transaction for all named database files.
                   80803: **
                   80804: ** It is important that all schema cookies be verified and all
                   80805: ** read transactions be started before anything else happens in
                   80806: ** the VDBE program.  But this routine can be called after much other
                   80807: ** code has been generated.  So here is what we do:
                   80808: **
                   80809: ** The first time this routine is called, we code an OP_Goto that
                   80810: ** will jump to a subroutine at the end of the program.  Then we
                   80811: ** record every database that needs its schema verified in the
                   80812: ** pParse->cookieMask field.  Later, after all other code has been
                   80813: ** generated, the subroutine that does the cookie verifications and
                   80814: ** starts the transactions will be coded and the OP_Goto P2 value
                   80815: ** will be made to point to that subroutine.  The generation of the
                   80816: ** cookie verification subroutine code happens in sqlite3FinishCoding().
                   80817: **
                   80818: ** If iDb<0 then code the OP_Goto only - don't set flag to verify the
                   80819: ** schema on any databases.  This can be used to position the OP_Goto
                   80820: ** early in the code, before we know if any database tables will be used.
                   80821: */
                   80822: SQLITE_PRIVATE void sqlite3CodeVerifySchema(Parse *pParse, int iDb){
                   80823:   Parse *pToplevel = sqlite3ParseToplevel(pParse);
                   80824: 
                   80825:   if( pToplevel->cookieGoto==0 ){
                   80826:     Vdbe *v = sqlite3GetVdbe(pToplevel);
                   80827:     if( v==0 ) return;  /* This only happens if there was a prior error */
                   80828:     pToplevel->cookieGoto = sqlite3VdbeAddOp2(v, OP_Goto, 0, 0)+1;
                   80829:   }
                   80830:   if( iDb>=0 ){
                   80831:     sqlite3 *db = pToplevel->db;
                   80832:     yDbMask mask;
                   80833: 
                   80834:     assert( iDb<db->nDb );
                   80835:     assert( db->aDb[iDb].pBt!=0 || iDb==1 );
                   80836:     assert( iDb<SQLITE_MAX_ATTACHED+2 );
                   80837:     assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
                   80838:     mask = ((yDbMask)1)<<iDb;
                   80839:     if( (pToplevel->cookieMask & mask)==0 ){
                   80840:       pToplevel->cookieMask |= mask;
                   80841:       pToplevel->cookieValue[iDb] = db->aDb[iDb].pSchema->schema_cookie;
                   80842:       if( !OMIT_TEMPDB && iDb==1 ){
                   80843:         sqlite3OpenTempDatabase(pToplevel);
                   80844:       }
                   80845:     }
                   80846:   }
                   80847: }
                   80848: 
                   80849: /*
                   80850: ** If argument zDb is NULL, then call sqlite3CodeVerifySchema() for each 
                   80851: ** attached database. Otherwise, invoke it for the database named zDb only.
                   80852: */
                   80853: SQLITE_PRIVATE void sqlite3CodeVerifyNamedSchema(Parse *pParse, const char *zDb){
                   80854:   sqlite3 *db = pParse->db;
                   80855:   int i;
                   80856:   for(i=0; i<db->nDb; i++){
                   80857:     Db *pDb = &db->aDb[i];
                   80858:     if( pDb->pBt && (!zDb || 0==sqlite3StrICmp(zDb, pDb->zName)) ){
                   80859:       sqlite3CodeVerifySchema(pParse, i);
                   80860:     }
                   80861:   }
                   80862: }
                   80863: 
                   80864: /*
                   80865: ** Generate VDBE code that prepares for doing an operation that
                   80866: ** might change the database.
                   80867: **
                   80868: ** This routine starts a new transaction if we are not already within
                   80869: ** a transaction.  If we are already within a transaction, then a checkpoint
                   80870: ** is set if the setStatement parameter is true.  A checkpoint should
                   80871: ** be set for operations that might fail (due to a constraint) part of
                   80872: ** the way through and which will need to undo some writes without having to
                   80873: ** rollback the whole transaction.  For operations where all constraints
                   80874: ** can be checked before any changes are made to the database, it is never
                   80875: ** necessary to undo a write and the checkpoint should not be set.
                   80876: */
                   80877: SQLITE_PRIVATE void sqlite3BeginWriteOperation(Parse *pParse, int setStatement, int iDb){
                   80878:   Parse *pToplevel = sqlite3ParseToplevel(pParse);
                   80879:   sqlite3CodeVerifySchema(pParse, iDb);
                   80880:   pToplevel->writeMask |= ((yDbMask)1)<<iDb;
                   80881:   pToplevel->isMultiWrite |= setStatement;
                   80882: }
                   80883: 
                   80884: /*
                   80885: ** Indicate that the statement currently under construction might write
                   80886: ** more than one entry (example: deleting one row then inserting another,
                   80887: ** inserting multiple rows in a table, or inserting a row and index entries.)
                   80888: ** If an abort occurs after some of these writes have completed, then it will
                   80889: ** be necessary to undo the completed writes.
                   80890: */
                   80891: SQLITE_PRIVATE void sqlite3MultiWrite(Parse *pParse){
                   80892:   Parse *pToplevel = sqlite3ParseToplevel(pParse);
                   80893:   pToplevel->isMultiWrite = 1;
                   80894: }
                   80895: 
                   80896: /* 
                   80897: ** The code generator calls this routine if is discovers that it is
                   80898: ** possible to abort a statement prior to completion.  In order to 
                   80899: ** perform this abort without corrupting the database, we need to make
                   80900: ** sure that the statement is protected by a statement transaction.
                   80901: **
                   80902: ** Technically, we only need to set the mayAbort flag if the
                   80903: ** isMultiWrite flag was previously set.  There is a time dependency
                   80904: ** such that the abort must occur after the multiwrite.  This makes
                   80905: ** some statements involving the REPLACE conflict resolution algorithm
                   80906: ** go a little faster.  But taking advantage of this time dependency
                   80907: ** makes it more difficult to prove that the code is correct (in 
                   80908: ** particular, it prevents us from writing an effective
                   80909: ** implementation of sqlite3AssertMayAbort()) and so we have chosen
                   80910: ** to take the safe route and skip the optimization.
                   80911: */
                   80912: SQLITE_PRIVATE void sqlite3MayAbort(Parse *pParse){
                   80913:   Parse *pToplevel = sqlite3ParseToplevel(pParse);
                   80914:   pToplevel->mayAbort = 1;
                   80915: }
                   80916: 
                   80917: /*
                   80918: ** Code an OP_Halt that causes the vdbe to return an SQLITE_CONSTRAINT
                   80919: ** error. The onError parameter determines which (if any) of the statement
                   80920: ** and/or current transaction is rolled back.
                   80921: */
                   80922: SQLITE_PRIVATE void sqlite3HaltConstraint(Parse *pParse, int onError, char *p4, int p4type){
                   80923:   Vdbe *v = sqlite3GetVdbe(pParse);
                   80924:   if( onError==OE_Abort ){
                   80925:     sqlite3MayAbort(pParse);
                   80926:   }
                   80927:   sqlite3VdbeAddOp4(v, OP_Halt, SQLITE_CONSTRAINT, onError, 0, p4, p4type);
                   80928: }
                   80929: 
                   80930: /*
                   80931: ** Check to see if pIndex uses the collating sequence pColl.  Return
                   80932: ** true if it does and false if it does not.
                   80933: */
                   80934: #ifndef SQLITE_OMIT_REINDEX
                   80935: static int collationMatch(const char *zColl, Index *pIndex){
                   80936:   int i;
                   80937:   assert( zColl!=0 );
                   80938:   for(i=0; i<pIndex->nColumn; i++){
                   80939:     const char *z = pIndex->azColl[i];
                   80940:     assert( z!=0 );
                   80941:     if( 0==sqlite3StrICmp(z, zColl) ){
                   80942:       return 1;
                   80943:     }
                   80944:   }
                   80945:   return 0;
                   80946: }
                   80947: #endif
                   80948: 
                   80949: /*
                   80950: ** Recompute all indices of pTab that use the collating sequence pColl.
                   80951: ** If pColl==0 then recompute all indices of pTab.
                   80952: */
                   80953: #ifndef SQLITE_OMIT_REINDEX
                   80954: static void reindexTable(Parse *pParse, Table *pTab, char const *zColl){
                   80955:   Index *pIndex;              /* An index associated with pTab */
                   80956: 
                   80957:   for(pIndex=pTab->pIndex; pIndex; pIndex=pIndex->pNext){
                   80958:     if( zColl==0 || collationMatch(zColl, pIndex) ){
                   80959:       int iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema);
                   80960:       sqlite3BeginWriteOperation(pParse, 0, iDb);
                   80961:       sqlite3RefillIndex(pParse, pIndex, -1);
                   80962:     }
                   80963:   }
                   80964: }
                   80965: #endif
                   80966: 
                   80967: /*
                   80968: ** Recompute all indices of all tables in all databases where the
                   80969: ** indices use the collating sequence pColl.  If pColl==0 then recompute
                   80970: ** all indices everywhere.
                   80971: */
                   80972: #ifndef SQLITE_OMIT_REINDEX
                   80973: static void reindexDatabases(Parse *pParse, char const *zColl){
                   80974:   Db *pDb;                    /* A single database */
                   80975:   int iDb;                    /* The database index number */
                   80976:   sqlite3 *db = pParse->db;   /* The database connection */
                   80977:   HashElem *k;                /* For looping over tables in pDb */
                   80978:   Table *pTab;                /* A table in the database */
                   80979: 
                   80980:   assert( sqlite3BtreeHoldsAllMutexes(db) );  /* Needed for schema access */
                   80981:   for(iDb=0, pDb=db->aDb; iDb<db->nDb; iDb++, pDb++){
                   80982:     assert( pDb!=0 );
                   80983:     for(k=sqliteHashFirst(&pDb->pSchema->tblHash);  k; k=sqliteHashNext(k)){
                   80984:       pTab = (Table*)sqliteHashData(k);
                   80985:       reindexTable(pParse, pTab, zColl);
                   80986:     }
                   80987:   }
                   80988: }
                   80989: #endif
                   80990: 
                   80991: /*
                   80992: ** Generate code for the REINDEX command.
                   80993: **
                   80994: **        REINDEX                            -- 1
                   80995: **        REINDEX  <collation>               -- 2
                   80996: **        REINDEX  ?<database>.?<tablename>  -- 3
                   80997: **        REINDEX  ?<database>.?<indexname>  -- 4
                   80998: **
                   80999: ** Form 1 causes all indices in all attached databases to be rebuilt.
                   81000: ** Form 2 rebuilds all indices in all databases that use the named
                   81001: ** collating function.  Forms 3 and 4 rebuild the named index or all
                   81002: ** indices associated with the named table.
                   81003: */
                   81004: #ifndef SQLITE_OMIT_REINDEX
                   81005: SQLITE_PRIVATE void sqlite3Reindex(Parse *pParse, Token *pName1, Token *pName2){
                   81006:   CollSeq *pColl;             /* Collating sequence to be reindexed, or NULL */
                   81007:   char *z;                    /* Name of a table or index */
                   81008:   const char *zDb;            /* Name of the database */
                   81009:   Table *pTab;                /* A table in the database */
                   81010:   Index *pIndex;              /* An index associated with pTab */
                   81011:   int iDb;                    /* The database index number */
                   81012:   sqlite3 *db = pParse->db;   /* The database connection */
                   81013:   Token *pObjName;            /* Name of the table or index to be reindexed */
                   81014: 
                   81015:   /* Read the database schema. If an error occurs, leave an error message
                   81016:   ** and code in pParse and return NULL. */
                   81017:   if( SQLITE_OK!=sqlite3ReadSchema(pParse) ){
                   81018:     return;
                   81019:   }
                   81020: 
                   81021:   if( pName1==0 ){
                   81022:     reindexDatabases(pParse, 0);
                   81023:     return;
                   81024:   }else if( NEVER(pName2==0) || pName2->z==0 ){
                   81025:     char *zColl;
                   81026:     assert( pName1->z );
                   81027:     zColl = sqlite3NameFromToken(pParse->db, pName1);
                   81028:     if( !zColl ) return;
                   81029:     pColl = sqlite3FindCollSeq(db, ENC(db), zColl, 0);
                   81030:     if( pColl ){
                   81031:       reindexDatabases(pParse, zColl);
                   81032:       sqlite3DbFree(db, zColl);
                   81033:       return;
                   81034:     }
                   81035:     sqlite3DbFree(db, zColl);
                   81036:   }
                   81037:   iDb = sqlite3TwoPartName(pParse, pName1, pName2, &pObjName);
                   81038:   if( iDb<0 ) return;
                   81039:   z = sqlite3NameFromToken(db, pObjName);
                   81040:   if( z==0 ) return;
                   81041:   zDb = db->aDb[iDb].zName;
                   81042:   pTab = sqlite3FindTable(db, z, zDb);
                   81043:   if( pTab ){
                   81044:     reindexTable(pParse, pTab, 0);
                   81045:     sqlite3DbFree(db, z);
                   81046:     return;
                   81047:   }
                   81048:   pIndex = sqlite3FindIndex(db, z, zDb);
                   81049:   sqlite3DbFree(db, z);
                   81050:   if( pIndex ){
                   81051:     sqlite3BeginWriteOperation(pParse, 0, iDb);
                   81052:     sqlite3RefillIndex(pParse, pIndex, -1);
                   81053:     return;
                   81054:   }
                   81055:   sqlite3ErrorMsg(pParse, "unable to identify the object to be reindexed");
                   81056: }
                   81057: #endif
                   81058: 
                   81059: /*
                   81060: ** Return a dynamicly allocated KeyInfo structure that can be used
                   81061: ** with OP_OpenRead or OP_OpenWrite to access database index pIdx.
                   81062: **
                   81063: ** If successful, a pointer to the new structure is returned. In this case
                   81064: ** the caller is responsible for calling sqlite3DbFree(db, ) on the returned 
                   81065: ** pointer. If an error occurs (out of memory or missing collation 
                   81066: ** sequence), NULL is returned and the state of pParse updated to reflect
                   81067: ** the error.
                   81068: */
                   81069: SQLITE_PRIVATE KeyInfo *sqlite3IndexKeyinfo(Parse *pParse, Index *pIdx){
                   81070:   int i;
                   81071:   int nCol = pIdx->nColumn;
                   81072:   int nBytes = sizeof(KeyInfo) + (nCol-1)*sizeof(CollSeq*) + nCol;
                   81073:   sqlite3 *db = pParse->db;
                   81074:   KeyInfo *pKey = (KeyInfo *)sqlite3DbMallocZero(db, nBytes);
                   81075: 
                   81076:   if( pKey ){
                   81077:     pKey->db = pParse->db;
                   81078:     pKey->aSortOrder = (u8 *)&(pKey->aColl[nCol]);
                   81079:     assert( &pKey->aSortOrder[nCol]==&(((u8 *)pKey)[nBytes]) );
                   81080:     for(i=0; i<nCol; i++){
                   81081:       char *zColl = pIdx->azColl[i];
                   81082:       assert( zColl );
                   81083:       pKey->aColl[i] = sqlite3LocateCollSeq(pParse, zColl);
                   81084:       pKey->aSortOrder[i] = pIdx->aSortOrder[i];
                   81085:     }
                   81086:     pKey->nField = (u16)nCol;
                   81087:   }
                   81088: 
                   81089:   if( pParse->nErr ){
                   81090:     sqlite3DbFree(db, pKey);
                   81091:     pKey = 0;
                   81092:   }
                   81093:   return pKey;
                   81094: }
                   81095: 
                   81096: /************** End of build.c ***********************************************/
                   81097: /************** Begin file callback.c ****************************************/
                   81098: /*
                   81099: ** 2005 May 23 
                   81100: **
                   81101: ** The author disclaims copyright to this source code.  In place of
                   81102: ** a legal notice, here is a blessing:
                   81103: **
                   81104: **    May you do good and not evil.
                   81105: **    May you find forgiveness for yourself and forgive others.
                   81106: **    May you share freely, never taking more than you give.
                   81107: **
                   81108: *************************************************************************
                   81109: **
                   81110: ** This file contains functions used to access the internal hash tables
                   81111: ** of user defined functions and collation sequences.
                   81112: */
                   81113: 
                   81114: 
                   81115: /*
                   81116: ** Invoke the 'collation needed' callback to request a collation sequence
                   81117: ** in the encoding enc of name zName, length nName.
                   81118: */
                   81119: static void callCollNeeded(sqlite3 *db, int enc, const char *zName){
                   81120:   assert( !db->xCollNeeded || !db->xCollNeeded16 );
                   81121:   if( db->xCollNeeded ){
                   81122:     char *zExternal = sqlite3DbStrDup(db, zName);
                   81123:     if( !zExternal ) return;
                   81124:     db->xCollNeeded(db->pCollNeededArg, db, enc, zExternal);
                   81125:     sqlite3DbFree(db, zExternal);
                   81126:   }
                   81127: #ifndef SQLITE_OMIT_UTF16
                   81128:   if( db->xCollNeeded16 ){
                   81129:     char const *zExternal;
                   81130:     sqlite3_value *pTmp = sqlite3ValueNew(db);
                   81131:     sqlite3ValueSetStr(pTmp, -1, zName, SQLITE_UTF8, SQLITE_STATIC);
                   81132:     zExternal = sqlite3ValueText(pTmp, SQLITE_UTF16NATIVE);
                   81133:     if( zExternal ){
                   81134:       db->xCollNeeded16(db->pCollNeededArg, db, (int)ENC(db), zExternal);
                   81135:     }
                   81136:     sqlite3ValueFree(pTmp);
                   81137:   }
                   81138: #endif
                   81139: }
                   81140: 
                   81141: /*
                   81142: ** This routine is called if the collation factory fails to deliver a
                   81143: ** collation function in the best encoding but there may be other versions
                   81144: ** of this collation function (for other text encodings) available. Use one
                   81145: ** of these instead if they exist. Avoid a UTF-8 <-> UTF-16 conversion if
                   81146: ** possible.
                   81147: */
                   81148: static int synthCollSeq(sqlite3 *db, CollSeq *pColl){
                   81149:   CollSeq *pColl2;
                   81150:   char *z = pColl->zName;
                   81151:   int i;
                   81152:   static const u8 aEnc[] = { SQLITE_UTF16BE, SQLITE_UTF16LE, SQLITE_UTF8 };
                   81153:   for(i=0; i<3; i++){
                   81154:     pColl2 = sqlite3FindCollSeq(db, aEnc[i], z, 0);
                   81155:     if( pColl2->xCmp!=0 ){
                   81156:       memcpy(pColl, pColl2, sizeof(CollSeq));
                   81157:       pColl->xDel = 0;         /* Do not copy the destructor */
                   81158:       return SQLITE_OK;
                   81159:     }
                   81160:   }
                   81161:   return SQLITE_ERROR;
                   81162: }
                   81163: 
                   81164: /*
                   81165: ** This function is responsible for invoking the collation factory callback
                   81166: ** or substituting a collation sequence of a different encoding when the
                   81167: ** requested collation sequence is not available in the desired encoding.
                   81168: ** 
                   81169: ** If it is not NULL, then pColl must point to the database native encoding 
                   81170: ** collation sequence with name zName, length nName.
                   81171: **
                   81172: ** The return value is either the collation sequence to be used in database
                   81173: ** db for collation type name zName, length nName, or NULL, if no collation
                   81174: ** sequence can be found.
                   81175: **
                   81176: ** See also: sqlite3LocateCollSeq(), sqlite3FindCollSeq()
                   81177: */
                   81178: SQLITE_PRIVATE CollSeq *sqlite3GetCollSeq(
                   81179:   sqlite3* db,          /* The database connection */
                   81180:   u8 enc,               /* The desired encoding for the collating sequence */
                   81181:   CollSeq *pColl,       /* Collating sequence with native encoding, or NULL */
                   81182:   const char *zName     /* Collating sequence name */
                   81183: ){
                   81184:   CollSeq *p;
                   81185: 
                   81186:   p = pColl;
                   81187:   if( !p ){
                   81188:     p = sqlite3FindCollSeq(db, enc, zName, 0);
                   81189:   }
                   81190:   if( !p || !p->xCmp ){
                   81191:     /* No collation sequence of this type for this encoding is registered.
                   81192:     ** Call the collation factory to see if it can supply us with one.
                   81193:     */
                   81194:     callCollNeeded(db, enc, zName);
                   81195:     p = sqlite3FindCollSeq(db, enc, zName, 0);
                   81196:   }
                   81197:   if( p && !p->xCmp && synthCollSeq(db, p) ){
                   81198:     p = 0;
                   81199:   }
                   81200:   assert( !p || p->xCmp );
                   81201:   return p;
                   81202: }
                   81203: 
                   81204: /*
                   81205: ** This routine is called on a collation sequence before it is used to
                   81206: ** check that it is defined. An undefined collation sequence exists when
                   81207: ** a database is loaded that contains references to collation sequences
                   81208: ** that have not been defined by sqlite3_create_collation() etc.
                   81209: **
                   81210: ** If required, this routine calls the 'collation needed' callback to
                   81211: ** request a definition of the collating sequence. If this doesn't work, 
                   81212: ** an equivalent collating sequence that uses a text encoding different
                   81213: ** from the main database is substituted, if one is available.
                   81214: */
                   81215: SQLITE_PRIVATE int sqlite3CheckCollSeq(Parse *pParse, CollSeq *pColl){
                   81216:   if( pColl ){
                   81217:     const char *zName = pColl->zName;
                   81218:     sqlite3 *db = pParse->db;
                   81219:     CollSeq *p = sqlite3GetCollSeq(db, ENC(db), pColl, zName);
                   81220:     if( !p ){
                   81221:       sqlite3ErrorMsg(pParse, "no such collation sequence: %s", zName);
                   81222:       pParse->nErr++;
                   81223:       return SQLITE_ERROR;
                   81224:     }
                   81225:     assert( p==pColl );
                   81226:   }
                   81227:   return SQLITE_OK;
                   81228: }
                   81229: 
                   81230: 
                   81231: 
                   81232: /*
                   81233: ** Locate and return an entry from the db.aCollSeq hash table. If the entry
                   81234: ** specified by zName and nName is not found and parameter 'create' is
                   81235: ** true, then create a new entry. Otherwise return NULL.
                   81236: **
                   81237: ** Each pointer stored in the sqlite3.aCollSeq hash table contains an
                   81238: ** array of three CollSeq structures. The first is the collation sequence
                   81239: ** prefferred for UTF-8, the second UTF-16le, and the third UTF-16be.
                   81240: **
                   81241: ** Stored immediately after the three collation sequences is a copy of
                   81242: ** the collation sequence name. A pointer to this string is stored in
                   81243: ** each collation sequence structure.
                   81244: */
                   81245: static CollSeq *findCollSeqEntry(
                   81246:   sqlite3 *db,          /* Database connection */
                   81247:   const char *zName,    /* Name of the collating sequence */
                   81248:   int create            /* Create a new entry if true */
                   81249: ){
                   81250:   CollSeq *pColl;
                   81251:   int nName = sqlite3Strlen30(zName);
                   81252:   pColl = sqlite3HashFind(&db->aCollSeq, zName, nName);
                   81253: 
                   81254:   if( 0==pColl && create ){
                   81255:     pColl = sqlite3DbMallocZero(db, 3*sizeof(*pColl) + nName + 1 );
                   81256:     if( pColl ){
                   81257:       CollSeq *pDel = 0;
                   81258:       pColl[0].zName = (char*)&pColl[3];
                   81259:       pColl[0].enc = SQLITE_UTF8;
                   81260:       pColl[1].zName = (char*)&pColl[3];
                   81261:       pColl[1].enc = SQLITE_UTF16LE;
                   81262:       pColl[2].zName = (char*)&pColl[3];
                   81263:       pColl[2].enc = SQLITE_UTF16BE;
                   81264:       memcpy(pColl[0].zName, zName, nName);
                   81265:       pColl[0].zName[nName] = 0;
                   81266:       pDel = sqlite3HashInsert(&db->aCollSeq, pColl[0].zName, nName, pColl);
                   81267: 
                   81268:       /* If a malloc() failure occurred in sqlite3HashInsert(), it will 
                   81269:       ** return the pColl pointer to be deleted (because it wasn't added
                   81270:       ** to the hash table).
                   81271:       */
                   81272:       assert( pDel==0 || pDel==pColl );
                   81273:       if( pDel!=0 ){
                   81274:         db->mallocFailed = 1;
                   81275:         sqlite3DbFree(db, pDel);
                   81276:         pColl = 0;
                   81277:       }
                   81278:     }
                   81279:   }
                   81280:   return pColl;
                   81281: }
                   81282: 
                   81283: /*
                   81284: ** Parameter zName points to a UTF-8 encoded string nName bytes long.
                   81285: ** Return the CollSeq* pointer for the collation sequence named zName
                   81286: ** for the encoding 'enc' from the database 'db'.
                   81287: **
                   81288: ** If the entry specified is not found and 'create' is true, then create a
                   81289: ** new entry.  Otherwise return NULL.
                   81290: **
                   81291: ** A separate function sqlite3LocateCollSeq() is a wrapper around
                   81292: ** this routine.  sqlite3LocateCollSeq() invokes the collation factory
                   81293: ** if necessary and generates an error message if the collating sequence
                   81294: ** cannot be found.
                   81295: **
                   81296: ** See also: sqlite3LocateCollSeq(), sqlite3GetCollSeq()
                   81297: */
                   81298: SQLITE_PRIVATE CollSeq *sqlite3FindCollSeq(
                   81299:   sqlite3 *db,
                   81300:   u8 enc,
                   81301:   const char *zName,
                   81302:   int create
                   81303: ){
                   81304:   CollSeq *pColl;
                   81305:   if( zName ){
                   81306:     pColl = findCollSeqEntry(db, zName, create);
                   81307:   }else{
                   81308:     pColl = db->pDfltColl;
                   81309:   }
                   81310:   assert( SQLITE_UTF8==1 && SQLITE_UTF16LE==2 && SQLITE_UTF16BE==3 );
                   81311:   assert( enc>=SQLITE_UTF8 && enc<=SQLITE_UTF16BE );
                   81312:   if( pColl ) pColl += enc-1;
                   81313:   return pColl;
                   81314: }
                   81315: 
                   81316: /* During the search for the best function definition, this procedure
                   81317: ** is called to test how well the function passed as the first argument
                   81318: ** matches the request for a function with nArg arguments in a system
                   81319: ** that uses encoding enc. The value returned indicates how well the
                   81320: ** request is matched. A higher value indicates a better match.
                   81321: **
                   81322: ** The returned value is always between 0 and 6, as follows:
                   81323: **
                   81324: ** 0: Not a match, or if nArg<0 and the function is has no implementation.
                   81325: ** 1: A variable arguments function that prefers UTF-8 when a UTF-16
                   81326: **    encoding is requested, or vice versa.
                   81327: ** 2: A variable arguments function that uses UTF-16BE when UTF-16LE is
                   81328: **    requested, or vice versa.
                   81329: ** 3: A variable arguments function using the same text encoding.
                   81330: ** 4: A function with the exact number of arguments requested that
                   81331: **    prefers UTF-8 when a UTF-16 encoding is requested, or vice versa.
                   81332: ** 5: A function with the exact number of arguments requested that
                   81333: **    prefers UTF-16LE when UTF-16BE is requested, or vice versa.
                   81334: ** 6: An exact match.
                   81335: **
                   81336: */
                   81337: static int matchQuality(FuncDef *p, int nArg, u8 enc){
                   81338:   int match = 0;
                   81339:   if( p->nArg==-1 || p->nArg==nArg 
                   81340:    || (nArg==-1 && (p->xFunc!=0 || p->xStep!=0))
                   81341:   ){
                   81342:     match = 1;
                   81343:     if( p->nArg==nArg || nArg==-1 ){
                   81344:       match = 4;
                   81345:     }
                   81346:     if( enc==p->iPrefEnc ){
                   81347:       match += 2;
                   81348:     }
                   81349:     else if( (enc==SQLITE_UTF16LE && p->iPrefEnc==SQLITE_UTF16BE) ||
                   81350:              (enc==SQLITE_UTF16BE && p->iPrefEnc==SQLITE_UTF16LE) ){
                   81351:       match += 1;
                   81352:     }
                   81353:   }
                   81354:   return match;
                   81355: }
                   81356: 
                   81357: /*
                   81358: ** Search a FuncDefHash for a function with the given name.  Return
                   81359: ** a pointer to the matching FuncDef if found, or 0 if there is no match.
                   81360: */
                   81361: static FuncDef *functionSearch(
                   81362:   FuncDefHash *pHash,  /* Hash table to search */
                   81363:   int h,               /* Hash of the name */
                   81364:   const char *zFunc,   /* Name of function */
                   81365:   int nFunc            /* Number of bytes in zFunc */
                   81366: ){
                   81367:   FuncDef *p;
                   81368:   for(p=pHash->a[h]; p; p=p->pHash){
                   81369:     if( sqlite3StrNICmp(p->zName, zFunc, nFunc)==0 && p->zName[nFunc]==0 ){
                   81370:       return p;
                   81371:     }
                   81372:   }
                   81373:   return 0;
                   81374: }
                   81375: 
                   81376: /*
                   81377: ** Insert a new FuncDef into a FuncDefHash hash table.
                   81378: */
                   81379: SQLITE_PRIVATE void sqlite3FuncDefInsert(
                   81380:   FuncDefHash *pHash,  /* The hash table into which to insert */
                   81381:   FuncDef *pDef        /* The function definition to insert */
                   81382: ){
                   81383:   FuncDef *pOther;
                   81384:   int nName = sqlite3Strlen30(pDef->zName);
                   81385:   u8 c1 = (u8)pDef->zName[0];
                   81386:   int h = (sqlite3UpperToLower[c1] + nName) % ArraySize(pHash->a);
                   81387:   pOther = functionSearch(pHash, h, pDef->zName, nName);
                   81388:   if( pOther ){
                   81389:     assert( pOther!=pDef && pOther->pNext!=pDef );
                   81390:     pDef->pNext = pOther->pNext;
                   81391:     pOther->pNext = pDef;
                   81392:   }else{
                   81393:     pDef->pNext = 0;
                   81394:     pDef->pHash = pHash->a[h];
                   81395:     pHash->a[h] = pDef;
                   81396:   }
                   81397: }
                   81398:   
                   81399:   
                   81400: 
                   81401: /*
                   81402: ** Locate a user function given a name, a number of arguments and a flag
                   81403: ** indicating whether the function prefers UTF-16 over UTF-8.  Return a
                   81404: ** pointer to the FuncDef structure that defines that function, or return
                   81405: ** NULL if the function does not exist.
                   81406: **
                   81407: ** If the createFlag argument is true, then a new (blank) FuncDef
                   81408: ** structure is created and liked into the "db" structure if a
                   81409: ** no matching function previously existed.  When createFlag is true
                   81410: ** and the nArg parameter is -1, then only a function that accepts
                   81411: ** any number of arguments will be returned.
                   81412: **
                   81413: ** If createFlag is false and nArg is -1, then the first valid
                   81414: ** function found is returned.  A function is valid if either xFunc
                   81415: ** or xStep is non-zero.
                   81416: **
                   81417: ** If createFlag is false, then a function with the required name and
                   81418: ** number of arguments may be returned even if the eTextRep flag does not
                   81419: ** match that requested.
                   81420: */
                   81421: SQLITE_PRIVATE FuncDef *sqlite3FindFunction(
                   81422:   sqlite3 *db,       /* An open database */
                   81423:   const char *zName, /* Name of the function.  Not null-terminated */
                   81424:   int nName,         /* Number of characters in the name */
                   81425:   int nArg,          /* Number of arguments.  -1 means any number */
                   81426:   u8 enc,            /* Preferred text encoding */
                   81427:   int createFlag     /* Create new entry if true and does not otherwise exist */
                   81428: ){
                   81429:   FuncDef *p;         /* Iterator variable */
                   81430:   FuncDef *pBest = 0; /* Best match found so far */
                   81431:   int bestScore = 0;  /* Score of best match */
                   81432:   int h;              /* Hash value */
                   81433: 
                   81434: 
                   81435:   assert( enc==SQLITE_UTF8 || enc==SQLITE_UTF16LE || enc==SQLITE_UTF16BE );
                   81436:   h = (sqlite3UpperToLower[(u8)zName[0]] + nName) % ArraySize(db->aFunc.a);
                   81437: 
                   81438:   /* First search for a match amongst the application-defined functions.
                   81439:   */
                   81440:   p = functionSearch(&db->aFunc, h, zName, nName);
                   81441:   while( p ){
                   81442:     int score = matchQuality(p, nArg, enc);
                   81443:     if( score>bestScore ){
                   81444:       pBest = p;
                   81445:       bestScore = score;
                   81446:     }
                   81447:     p = p->pNext;
                   81448:   }
                   81449: 
                   81450:   /* If no match is found, search the built-in functions.
                   81451:   **
                   81452:   ** If the SQLITE_PreferBuiltin flag is set, then search the built-in
                   81453:   ** functions even if a prior app-defined function was found.  And give
                   81454:   ** priority to built-in functions.
                   81455:   **
                   81456:   ** Except, if createFlag is true, that means that we are trying to
                   81457:   ** install a new function.  Whatever FuncDef structure is returned it will
                   81458:   ** have fields overwritten with new information appropriate for the
                   81459:   ** new function.  But the FuncDefs for built-in functions are read-only.
                   81460:   ** So we must not search for built-ins when creating a new function.
                   81461:   */ 
                   81462:   if( !createFlag && (pBest==0 || (db->flags & SQLITE_PreferBuiltin)!=0) ){
                   81463:     FuncDefHash *pHash = &GLOBAL(FuncDefHash, sqlite3GlobalFunctions);
                   81464:     bestScore = 0;
                   81465:     p = functionSearch(pHash, h, zName, nName);
                   81466:     while( p ){
                   81467:       int score = matchQuality(p, nArg, enc);
                   81468:       if( score>bestScore ){
                   81469:         pBest = p;
                   81470:         bestScore = score;
                   81471:       }
                   81472:       p = p->pNext;
                   81473:     }
                   81474:   }
                   81475: 
                   81476:   /* If the createFlag parameter is true and the search did not reveal an
                   81477:   ** exact match for the name, number of arguments and encoding, then add a
                   81478:   ** new entry to the hash table and return it.
                   81479:   */
                   81480:   if( createFlag && (bestScore<6 || pBest->nArg!=nArg) && 
                   81481:       (pBest = sqlite3DbMallocZero(db, sizeof(*pBest)+nName+1))!=0 ){
                   81482:     pBest->zName = (char *)&pBest[1];
                   81483:     pBest->nArg = (u16)nArg;
                   81484:     pBest->iPrefEnc = enc;
                   81485:     memcpy(pBest->zName, zName, nName);
                   81486:     pBest->zName[nName] = 0;
                   81487:     sqlite3FuncDefInsert(&db->aFunc, pBest);
                   81488:   }
                   81489: 
                   81490:   if( pBest && (pBest->xStep || pBest->xFunc || createFlag) ){
                   81491:     return pBest;
                   81492:   }
                   81493:   return 0;
                   81494: }
                   81495: 
                   81496: /*
                   81497: ** Free all resources held by the schema structure. The void* argument points
                   81498: ** at a Schema struct. This function does not call sqlite3DbFree(db, ) on the 
                   81499: ** pointer itself, it just cleans up subsidiary resources (i.e. the contents
                   81500: ** of the schema hash tables).
                   81501: **
                   81502: ** The Schema.cache_size variable is not cleared.
                   81503: */
                   81504: SQLITE_PRIVATE void sqlite3SchemaClear(void *p){
                   81505:   Hash temp1;
                   81506:   Hash temp2;
                   81507:   HashElem *pElem;
                   81508:   Schema *pSchema = (Schema *)p;
                   81509: 
                   81510:   temp1 = pSchema->tblHash;
                   81511:   temp2 = pSchema->trigHash;
                   81512:   sqlite3HashInit(&pSchema->trigHash);
                   81513:   sqlite3HashClear(&pSchema->idxHash);
                   81514:   for(pElem=sqliteHashFirst(&temp2); pElem; pElem=sqliteHashNext(pElem)){
                   81515:     sqlite3DeleteTrigger(0, (Trigger*)sqliteHashData(pElem));
                   81516:   }
                   81517:   sqlite3HashClear(&temp2);
                   81518:   sqlite3HashInit(&pSchema->tblHash);
                   81519:   for(pElem=sqliteHashFirst(&temp1); pElem; pElem=sqliteHashNext(pElem)){
                   81520:     Table *pTab = sqliteHashData(pElem);
                   81521:     sqlite3DeleteTable(0, pTab);
                   81522:   }
                   81523:   sqlite3HashClear(&temp1);
                   81524:   sqlite3HashClear(&pSchema->fkeyHash);
                   81525:   pSchema->pSeqTab = 0;
                   81526:   if( pSchema->flags & DB_SchemaLoaded ){
                   81527:     pSchema->iGeneration++;
                   81528:     pSchema->flags &= ~DB_SchemaLoaded;
                   81529:   }
                   81530: }
                   81531: 
                   81532: /*
                   81533: ** Find and return the schema associated with a BTree.  Create
                   81534: ** a new one if necessary.
                   81535: */
                   81536: SQLITE_PRIVATE Schema *sqlite3SchemaGet(sqlite3 *db, Btree *pBt){
                   81537:   Schema * p;
                   81538:   if( pBt ){
                   81539:     p = (Schema *)sqlite3BtreeSchema(pBt, sizeof(Schema), sqlite3SchemaClear);
                   81540:   }else{
                   81541:     p = (Schema *)sqlite3DbMallocZero(0, sizeof(Schema));
                   81542:   }
                   81543:   if( !p ){
                   81544:     db->mallocFailed = 1;
                   81545:   }else if ( 0==p->file_format ){
                   81546:     sqlite3HashInit(&p->tblHash);
                   81547:     sqlite3HashInit(&p->idxHash);
                   81548:     sqlite3HashInit(&p->trigHash);
                   81549:     sqlite3HashInit(&p->fkeyHash);
                   81550:     p->enc = SQLITE_UTF8;
                   81551:   }
                   81552:   return p;
                   81553: }
                   81554: 
                   81555: /************** End of callback.c ********************************************/
                   81556: /************** Begin file delete.c ******************************************/
                   81557: /*
                   81558: ** 2001 September 15
                   81559: **
                   81560: ** The author disclaims copyright to this source code.  In place of
                   81561: ** a legal notice, here is a blessing:
                   81562: **
                   81563: **    May you do good and not evil.
                   81564: **    May you find forgiveness for yourself and forgive others.
                   81565: **    May you share freely, never taking more than you give.
                   81566: **
                   81567: *************************************************************************
                   81568: ** This file contains C code routines that are called by the parser
                   81569: ** in order to generate code for DELETE FROM statements.
                   81570: */
                   81571: 
                   81572: /*
                   81573: ** While a SrcList can in general represent multiple tables and subqueries
                   81574: ** (as in the FROM clause of a SELECT statement) in this case it contains
                   81575: ** the name of a single table, as one might find in an INSERT, DELETE,
                   81576: ** or UPDATE statement.  Look up that table in the symbol table and
                   81577: ** return a pointer.  Set an error message and return NULL if the table 
                   81578: ** name is not found or if any other error occurs.
                   81579: **
                   81580: ** The following fields are initialized appropriate in pSrc:
                   81581: **
                   81582: **    pSrc->a[0].pTab       Pointer to the Table object
                   81583: **    pSrc->a[0].pIndex     Pointer to the INDEXED BY index, if there is one
                   81584: **
                   81585: */
                   81586: SQLITE_PRIVATE Table *sqlite3SrcListLookup(Parse *pParse, SrcList *pSrc){
                   81587:   struct SrcList_item *pItem = pSrc->a;
                   81588:   Table *pTab;
                   81589:   assert( pItem && pSrc->nSrc==1 );
                   81590:   pTab = sqlite3LocateTable(pParse, 0, pItem->zName, pItem->zDatabase);
                   81591:   sqlite3DeleteTable(pParse->db, pItem->pTab);
                   81592:   pItem->pTab = pTab;
                   81593:   if( pTab ){
                   81594:     pTab->nRef++;
                   81595:   }
                   81596:   if( sqlite3IndexedByLookup(pParse, pItem) ){
                   81597:     pTab = 0;
                   81598:   }
                   81599:   return pTab;
                   81600: }
                   81601: 
                   81602: /*
                   81603: ** Check to make sure the given table is writable.  If it is not
                   81604: ** writable, generate an error message and return 1.  If it is
                   81605: ** writable return 0;
                   81606: */
                   81607: SQLITE_PRIVATE int sqlite3IsReadOnly(Parse *pParse, Table *pTab, int viewOk){
                   81608:   /* A table is not writable under the following circumstances:
                   81609:   **
                   81610:   **   1) It is a virtual table and no implementation of the xUpdate method
                   81611:   **      has been provided, or
                   81612:   **   2) It is a system table (i.e. sqlite_master), this call is not
                   81613:   **      part of a nested parse and writable_schema pragma has not 
                   81614:   **      been specified.
                   81615:   **
                   81616:   ** In either case leave an error message in pParse and return non-zero.
                   81617:   */
                   81618:   if( ( IsVirtual(pTab) 
                   81619:      && sqlite3GetVTable(pParse->db, pTab)->pMod->pModule->xUpdate==0 )
                   81620:    || ( (pTab->tabFlags & TF_Readonly)!=0
                   81621:      && (pParse->db->flags & SQLITE_WriteSchema)==0
                   81622:      && pParse->nested==0 )
                   81623:   ){
                   81624:     sqlite3ErrorMsg(pParse, "table %s may not be modified", pTab->zName);
                   81625:     return 1;
                   81626:   }
                   81627: 
                   81628: #ifndef SQLITE_OMIT_VIEW
                   81629:   if( !viewOk && pTab->pSelect ){
                   81630:     sqlite3ErrorMsg(pParse,"cannot modify %s because it is a view",pTab->zName);
                   81631:     return 1;
                   81632:   }
                   81633: #endif
                   81634:   return 0;
                   81635: }
                   81636: 
                   81637: 
                   81638: #if !defined(SQLITE_OMIT_VIEW) && !defined(SQLITE_OMIT_TRIGGER)
                   81639: /*
                   81640: ** Evaluate a view and store its result in an ephemeral table.  The
                   81641: ** pWhere argument is an optional WHERE clause that restricts the
                   81642: ** set of rows in the view that are to be added to the ephemeral table.
                   81643: */
                   81644: SQLITE_PRIVATE void sqlite3MaterializeView(
                   81645:   Parse *pParse,       /* Parsing context */
                   81646:   Table *pView,        /* View definition */
                   81647:   Expr *pWhere,        /* Optional WHERE clause to be added */
                   81648:   int iCur             /* Cursor number for ephemerial table */
                   81649: ){
                   81650:   SelectDest dest;
                   81651:   Select *pDup;
                   81652:   sqlite3 *db = pParse->db;
                   81653: 
                   81654:   pDup = sqlite3SelectDup(db, pView->pSelect, 0);
                   81655:   if( pWhere ){
                   81656:     SrcList *pFrom;
                   81657:     
                   81658:     pWhere = sqlite3ExprDup(db, pWhere, 0);
                   81659:     pFrom = sqlite3SrcListAppend(db, 0, 0, 0);
                   81660:     if( pFrom ){
                   81661:       assert( pFrom->nSrc==1 );
                   81662:       pFrom->a[0].zAlias = sqlite3DbStrDup(db, pView->zName);
                   81663:       pFrom->a[0].pSelect = pDup;
                   81664:       assert( pFrom->a[0].pOn==0 );
                   81665:       assert( pFrom->a[0].pUsing==0 );
                   81666:     }else{
                   81667:       sqlite3SelectDelete(db, pDup);
                   81668:     }
                   81669:     pDup = sqlite3SelectNew(pParse, 0, pFrom, pWhere, 0, 0, 0, 0, 0, 0);
                   81670:   }
                   81671:   sqlite3SelectDestInit(&dest, SRT_EphemTab, iCur);
                   81672:   sqlite3Select(pParse, pDup, &dest);
                   81673:   sqlite3SelectDelete(db, pDup);
                   81674: }
                   81675: #endif /* !defined(SQLITE_OMIT_VIEW) && !defined(SQLITE_OMIT_TRIGGER) */
                   81676: 
                   81677: #if defined(SQLITE_ENABLE_UPDATE_DELETE_LIMIT) && !defined(SQLITE_OMIT_SUBQUERY)
                   81678: /*
                   81679: ** Generate an expression tree to implement the WHERE, ORDER BY,
                   81680: ** and LIMIT/OFFSET portion of DELETE and UPDATE statements.
                   81681: **
                   81682: **     DELETE FROM table_wxyz WHERE a<5 ORDER BY a LIMIT 1;
                   81683: **                            \__________________________/
                   81684: **                               pLimitWhere (pInClause)
                   81685: */
                   81686: SQLITE_PRIVATE Expr *sqlite3LimitWhere(
                   81687:   Parse *pParse,               /* The parser context */
                   81688:   SrcList *pSrc,               /* the FROM clause -- which tables to scan */
                   81689:   Expr *pWhere,                /* The WHERE clause.  May be null */
                   81690:   ExprList *pOrderBy,          /* The ORDER BY clause.  May be null */
                   81691:   Expr *pLimit,                /* The LIMIT clause.  May be null */
                   81692:   Expr *pOffset,               /* The OFFSET clause.  May be null */
                   81693:   char *zStmtType              /* Either DELETE or UPDATE.  For error messages. */
                   81694: ){
                   81695:   Expr *pWhereRowid = NULL;    /* WHERE rowid .. */
                   81696:   Expr *pInClause = NULL;      /* WHERE rowid IN ( select ) */
                   81697:   Expr *pSelectRowid = NULL;   /* SELECT rowid ... */
                   81698:   ExprList *pEList = NULL;     /* Expression list contaning only pSelectRowid */
                   81699:   SrcList *pSelectSrc = NULL;  /* SELECT rowid FROM x ... (dup of pSrc) */
                   81700:   Select *pSelect = NULL;      /* Complete SELECT tree */
                   81701: 
                   81702:   /* Check that there isn't an ORDER BY without a LIMIT clause.
                   81703:   */
                   81704:   if( pOrderBy && (pLimit == 0) ) {
                   81705:     sqlite3ErrorMsg(pParse, "ORDER BY without LIMIT on %s", zStmtType);
                   81706:     pParse->parseError = 1;
                   81707:     goto limit_where_cleanup_2;
                   81708:   }
                   81709: 
                   81710:   /* We only need to generate a select expression if there
                   81711:   ** is a limit/offset term to enforce.
                   81712:   */
                   81713:   if( pLimit == 0 ) {
                   81714:     /* if pLimit is null, pOffset will always be null as well. */
                   81715:     assert( pOffset == 0 );
                   81716:     return pWhere;
                   81717:   }
                   81718: 
                   81719:   /* Generate a select expression tree to enforce the limit/offset 
                   81720:   ** term for the DELETE or UPDATE statement.  For example:
                   81721:   **   DELETE FROM table_a WHERE col1=1 ORDER BY col2 LIMIT 1 OFFSET 1
                   81722:   ** becomes:
                   81723:   **   DELETE FROM table_a WHERE rowid IN ( 
                   81724:   **     SELECT rowid FROM table_a WHERE col1=1 ORDER BY col2 LIMIT 1 OFFSET 1
                   81725:   **   );
                   81726:   */
                   81727: 
                   81728:   pSelectRowid = sqlite3PExpr(pParse, TK_ROW, 0, 0, 0);
                   81729:   if( pSelectRowid == 0 ) goto limit_where_cleanup_2;
                   81730:   pEList = sqlite3ExprListAppend(pParse, 0, pSelectRowid);
                   81731:   if( pEList == 0 ) goto limit_where_cleanup_2;
                   81732: 
                   81733:   /* duplicate the FROM clause as it is needed by both the DELETE/UPDATE tree
                   81734:   ** and the SELECT subtree. */
                   81735:   pSelectSrc = sqlite3SrcListDup(pParse->db, pSrc, 0);
                   81736:   if( pSelectSrc == 0 ) {
                   81737:     sqlite3ExprListDelete(pParse->db, pEList);
                   81738:     goto limit_where_cleanup_2;
                   81739:   }
                   81740: 
                   81741:   /* generate the SELECT expression tree. */
                   81742:   pSelect = sqlite3SelectNew(pParse,pEList,pSelectSrc,pWhere,0,0,
                   81743:                              pOrderBy,0,pLimit,pOffset);
                   81744:   if( pSelect == 0 ) return 0;
                   81745: 
                   81746:   /* now generate the new WHERE rowid IN clause for the DELETE/UDPATE */
                   81747:   pWhereRowid = sqlite3PExpr(pParse, TK_ROW, 0, 0, 0);
                   81748:   if( pWhereRowid == 0 ) goto limit_where_cleanup_1;
                   81749:   pInClause = sqlite3PExpr(pParse, TK_IN, pWhereRowid, 0, 0);
                   81750:   if( pInClause == 0 ) goto limit_where_cleanup_1;
                   81751: 
                   81752:   pInClause->x.pSelect = pSelect;
                   81753:   pInClause->flags |= EP_xIsSelect;
                   81754:   sqlite3ExprSetHeight(pParse, pInClause);
                   81755:   return pInClause;
                   81756: 
                   81757:   /* something went wrong. clean up anything allocated. */
                   81758: limit_where_cleanup_1:
                   81759:   sqlite3SelectDelete(pParse->db, pSelect);
                   81760:   return 0;
                   81761: 
                   81762: limit_where_cleanup_2:
                   81763:   sqlite3ExprDelete(pParse->db, pWhere);
                   81764:   sqlite3ExprListDelete(pParse->db, pOrderBy);
                   81765:   sqlite3ExprDelete(pParse->db, pLimit);
                   81766:   sqlite3ExprDelete(pParse->db, pOffset);
                   81767:   return 0;
                   81768: }
                   81769: #endif /* defined(SQLITE_ENABLE_UPDATE_DELETE_LIMIT) && !defined(SQLITE_OMIT_SUBQUERY) */
                   81770: 
                   81771: /*
                   81772: ** Generate code for a DELETE FROM statement.
                   81773: **
                   81774: **     DELETE FROM table_wxyz WHERE a<5 AND b NOT NULL;
                   81775: **                 \________/       \________________/
                   81776: **                  pTabList              pWhere
                   81777: */
                   81778: SQLITE_PRIVATE void sqlite3DeleteFrom(
                   81779:   Parse *pParse,         /* The parser context */
                   81780:   SrcList *pTabList,     /* The table from which we should delete things */
                   81781:   Expr *pWhere           /* The WHERE clause.  May be null */
                   81782: ){
                   81783:   Vdbe *v;               /* The virtual database engine */
                   81784:   Table *pTab;           /* The table from which records will be deleted */
                   81785:   const char *zDb;       /* Name of database holding pTab */
                   81786:   int end, addr = 0;     /* A couple addresses of generated code */
                   81787:   int i;                 /* Loop counter */
                   81788:   WhereInfo *pWInfo;     /* Information about the WHERE clause */
                   81789:   Index *pIdx;           /* For looping over indices of the table */
                   81790:   int iCur;              /* VDBE Cursor number for pTab */
                   81791:   sqlite3 *db;           /* Main database structure */
                   81792:   AuthContext sContext;  /* Authorization context */
                   81793:   NameContext sNC;       /* Name context to resolve expressions in */
                   81794:   int iDb;               /* Database number */
                   81795:   int memCnt = -1;       /* Memory cell used for change counting */
                   81796:   int rcauth;            /* Value returned by authorization callback */
                   81797: 
                   81798: #ifndef SQLITE_OMIT_TRIGGER
                   81799:   int isView;                  /* True if attempting to delete from a view */
                   81800:   Trigger *pTrigger;           /* List of table triggers, if required */
                   81801: #endif
                   81802: 
                   81803:   memset(&sContext, 0, sizeof(sContext));
                   81804:   db = pParse->db;
                   81805:   if( pParse->nErr || db->mallocFailed ){
                   81806:     goto delete_from_cleanup;
                   81807:   }
                   81808:   assert( pTabList->nSrc==1 );
                   81809: 
                   81810:   /* Locate the table which we want to delete.  This table has to be
                   81811:   ** put in an SrcList structure because some of the subroutines we
                   81812:   ** will be calling are designed to work with multiple tables and expect
                   81813:   ** an SrcList* parameter instead of just a Table* parameter.
                   81814:   */
                   81815:   pTab = sqlite3SrcListLookup(pParse, pTabList);
                   81816:   if( pTab==0 )  goto delete_from_cleanup;
                   81817: 
                   81818:   /* Figure out if we have any triggers and if the table being
                   81819:   ** deleted from is a view
                   81820:   */
                   81821: #ifndef SQLITE_OMIT_TRIGGER
                   81822:   pTrigger = sqlite3TriggersExist(pParse, pTab, TK_DELETE, 0, 0);
                   81823:   isView = pTab->pSelect!=0;
                   81824: #else
                   81825: # define pTrigger 0
                   81826: # define isView 0
                   81827: #endif
                   81828: #ifdef SQLITE_OMIT_VIEW
                   81829: # undef isView
                   81830: # define isView 0
                   81831: #endif
                   81832: 
                   81833:   /* If pTab is really a view, make sure it has been initialized.
                   81834:   */
                   81835:   if( sqlite3ViewGetColumnNames(pParse, pTab) ){
                   81836:     goto delete_from_cleanup;
                   81837:   }
                   81838: 
                   81839:   if( sqlite3IsReadOnly(pParse, pTab, (pTrigger?1:0)) ){
                   81840:     goto delete_from_cleanup;
                   81841:   }
                   81842:   iDb = sqlite3SchemaToIndex(db, pTab->pSchema);
                   81843:   assert( iDb<db->nDb );
                   81844:   zDb = db->aDb[iDb].zName;
                   81845:   rcauth = sqlite3AuthCheck(pParse, SQLITE_DELETE, pTab->zName, 0, zDb);
                   81846:   assert( rcauth==SQLITE_OK || rcauth==SQLITE_DENY || rcauth==SQLITE_IGNORE );
                   81847:   if( rcauth==SQLITE_DENY ){
                   81848:     goto delete_from_cleanup;
                   81849:   }
                   81850:   assert(!isView || pTrigger);
                   81851: 
                   81852:   /* Assign  cursor number to the table and all its indices.
                   81853:   */
                   81854:   assert( pTabList->nSrc==1 );
                   81855:   iCur = pTabList->a[0].iCursor = pParse->nTab++;
                   81856:   for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
                   81857:     pParse->nTab++;
                   81858:   }
                   81859: 
                   81860:   /* Start the view context
                   81861:   */
                   81862:   if( isView ){
                   81863:     sqlite3AuthContextPush(pParse, &sContext, pTab->zName);
                   81864:   }
                   81865: 
                   81866:   /* Begin generating code.
                   81867:   */
                   81868:   v = sqlite3GetVdbe(pParse);
                   81869:   if( v==0 ){
                   81870:     goto delete_from_cleanup;
                   81871:   }
                   81872:   if( pParse->nested==0 ) sqlite3VdbeCountChanges(v);
                   81873:   sqlite3BeginWriteOperation(pParse, 1, iDb);
                   81874: 
                   81875:   /* If we are trying to delete from a view, realize that view into
                   81876:   ** a ephemeral table.
                   81877:   */
                   81878: #if !defined(SQLITE_OMIT_VIEW) && !defined(SQLITE_OMIT_TRIGGER)
                   81879:   if( isView ){
                   81880:     sqlite3MaterializeView(pParse, pTab, pWhere, iCur);
                   81881:   }
                   81882: #endif
                   81883: 
                   81884:   /* Resolve the column names in the WHERE clause.
                   81885:   */
                   81886:   memset(&sNC, 0, sizeof(sNC));
                   81887:   sNC.pParse = pParse;
                   81888:   sNC.pSrcList = pTabList;
                   81889:   if( sqlite3ResolveExprNames(&sNC, pWhere) ){
                   81890:     goto delete_from_cleanup;
                   81891:   }
                   81892: 
                   81893:   /* Initialize the counter of the number of rows deleted, if
                   81894:   ** we are counting rows.
                   81895:   */
                   81896:   if( db->flags & SQLITE_CountRows ){
                   81897:     memCnt = ++pParse->nMem;
                   81898:     sqlite3VdbeAddOp2(v, OP_Integer, 0, memCnt);
                   81899:   }
                   81900: 
                   81901: #ifndef SQLITE_OMIT_TRUNCATE_OPTIMIZATION
                   81902:   /* Special case: A DELETE without a WHERE clause deletes everything.
                   81903:   ** It is easier just to erase the whole table. Prior to version 3.6.5,
                   81904:   ** this optimization caused the row change count (the value returned by 
                   81905:   ** API function sqlite3_count_changes) to be set incorrectly.  */
                   81906:   if( rcauth==SQLITE_OK && pWhere==0 && !pTrigger && !IsVirtual(pTab) 
                   81907:    && 0==sqlite3FkRequired(pParse, pTab, 0, 0)
                   81908:   ){
                   81909:     assert( !isView );
                   81910:     sqlite3VdbeAddOp4(v, OP_Clear, pTab->tnum, iDb, memCnt,
                   81911:                       pTab->zName, P4_STATIC);
                   81912:     for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
                   81913:       assert( pIdx->pSchema==pTab->pSchema );
                   81914:       sqlite3VdbeAddOp2(v, OP_Clear, pIdx->tnum, iDb);
                   81915:     }
                   81916:   }else
                   81917: #endif /* SQLITE_OMIT_TRUNCATE_OPTIMIZATION */
                   81918:   /* The usual case: There is a WHERE clause so we have to scan through
                   81919:   ** the table and pick which records to delete.
                   81920:   */
                   81921:   {
                   81922:     int iRowSet = ++pParse->nMem;   /* Register for rowset of rows to delete */
                   81923:     int iRowid = ++pParse->nMem;    /* Used for storing rowid values. */
                   81924:     int regRowid;                   /* Actual register containing rowids */
                   81925: 
                   81926:     /* Collect rowids of every row to be deleted.
                   81927:     */
                   81928:     sqlite3VdbeAddOp2(v, OP_Null, 0, iRowSet);
                   81929:     pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere,0,WHERE_DUPLICATES_OK);
                   81930:     if( pWInfo==0 ) goto delete_from_cleanup;
                   81931:     regRowid = sqlite3ExprCodeGetColumn(pParse, pTab, -1, iCur, iRowid);
                   81932:     sqlite3VdbeAddOp2(v, OP_RowSetAdd, iRowSet, regRowid);
                   81933:     if( db->flags & SQLITE_CountRows ){
                   81934:       sqlite3VdbeAddOp2(v, OP_AddImm, memCnt, 1);
                   81935:     }
                   81936:     sqlite3WhereEnd(pWInfo);
                   81937: 
                   81938:     /* Delete every item whose key was written to the list during the
                   81939:     ** database scan.  We have to delete items after the scan is complete
                   81940:     ** because deleting an item can change the scan order.  */
                   81941:     end = sqlite3VdbeMakeLabel(v);
                   81942: 
                   81943:     /* Unless this is a view, open cursors for the table we are 
                   81944:     ** deleting from and all its indices. If this is a view, then the
                   81945:     ** only effect this statement has is to fire the INSTEAD OF 
                   81946:     ** triggers.  */
                   81947:     if( !isView ){
                   81948:       sqlite3OpenTableAndIndices(pParse, pTab, iCur, OP_OpenWrite);
                   81949:     }
                   81950: 
                   81951:     addr = sqlite3VdbeAddOp3(v, OP_RowSetRead, iRowSet, end, iRowid);
                   81952: 
                   81953:     /* Delete the row */
                   81954: #ifndef SQLITE_OMIT_VIRTUALTABLE
                   81955:     if( IsVirtual(pTab) ){
                   81956:       const char *pVTab = (const char *)sqlite3GetVTable(db, pTab);
                   81957:       sqlite3VtabMakeWritable(pParse, pTab);
                   81958:       sqlite3VdbeAddOp4(v, OP_VUpdate, 0, 1, iRowid, pVTab, P4_VTAB);
                   81959:       sqlite3VdbeChangeP5(v, OE_Abort);
                   81960:       sqlite3MayAbort(pParse);
                   81961:     }else
                   81962: #endif
                   81963:     {
                   81964:       int count = (pParse->nested==0);    /* True to count changes */
                   81965:       sqlite3GenerateRowDelete(pParse, pTab, iCur, iRowid, count, pTrigger, OE_Default);
                   81966:     }
                   81967: 
                   81968:     /* End of the delete loop */
                   81969:     sqlite3VdbeAddOp2(v, OP_Goto, 0, addr);
                   81970:     sqlite3VdbeResolveLabel(v, end);
                   81971: 
                   81972:     /* Close the cursors open on the table and its indexes. */
                   81973:     if( !isView && !IsVirtual(pTab) ){
                   81974:       for(i=1, pIdx=pTab->pIndex; pIdx; i++, pIdx=pIdx->pNext){
                   81975:         sqlite3VdbeAddOp2(v, OP_Close, iCur + i, pIdx->tnum);
                   81976:       }
                   81977:       sqlite3VdbeAddOp1(v, OP_Close, iCur);
                   81978:     }
                   81979:   }
                   81980: 
                   81981:   /* Update the sqlite_sequence table by storing the content of the
                   81982:   ** maximum rowid counter values recorded while inserting into
                   81983:   ** autoincrement tables.
                   81984:   */
                   81985:   if( pParse->nested==0 && pParse->pTriggerTab==0 ){
                   81986:     sqlite3AutoincrementEnd(pParse);
                   81987:   }
                   81988: 
                   81989:   /* Return the number of rows that were deleted. If this routine is 
                   81990:   ** generating code because of a call to sqlite3NestedParse(), do not
                   81991:   ** invoke the callback function.
                   81992:   */
                   81993:   if( (db->flags&SQLITE_CountRows) && !pParse->nested && !pParse->pTriggerTab ){
                   81994:     sqlite3VdbeAddOp2(v, OP_ResultRow, memCnt, 1);
                   81995:     sqlite3VdbeSetNumCols(v, 1);
                   81996:     sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "rows deleted", SQLITE_STATIC);
                   81997:   }
                   81998: 
                   81999: delete_from_cleanup:
                   82000:   sqlite3AuthContextPop(&sContext);
                   82001:   sqlite3SrcListDelete(db, pTabList);
                   82002:   sqlite3ExprDelete(db, pWhere);
                   82003:   return;
                   82004: }
                   82005: /* Make sure "isView" and other macros defined above are undefined. Otherwise
                   82006: ** thely may interfere with compilation of other functions in this file
                   82007: ** (or in another file, if this file becomes part of the amalgamation).  */
                   82008: #ifdef isView
                   82009:  #undef isView
                   82010: #endif
                   82011: #ifdef pTrigger
                   82012:  #undef pTrigger
                   82013: #endif
                   82014: 
                   82015: /*
                   82016: ** This routine generates VDBE code that causes a single row of a
                   82017: ** single table to be deleted.
                   82018: **
                   82019: ** The VDBE must be in a particular state when this routine is called.
                   82020: ** These are the requirements:
                   82021: **
                   82022: **   1.  A read/write cursor pointing to pTab, the table containing the row
                   82023: **       to be deleted, must be opened as cursor number $iCur.
                   82024: **
                   82025: **   2.  Read/write cursors for all indices of pTab must be open as
                   82026: **       cursor number base+i for the i-th index.
                   82027: **
                   82028: **   3.  The record number of the row to be deleted must be stored in
                   82029: **       memory cell iRowid.
                   82030: **
                   82031: ** This routine generates code to remove both the table record and all 
                   82032: ** index entries that point to that record.
                   82033: */
                   82034: SQLITE_PRIVATE void sqlite3GenerateRowDelete(
                   82035:   Parse *pParse,     /* Parsing context */
                   82036:   Table *pTab,       /* Table containing the row to be deleted */
                   82037:   int iCur,          /* Cursor number for the table */
                   82038:   int iRowid,        /* Memory cell that contains the rowid to delete */
                   82039:   int count,         /* If non-zero, increment the row change counter */
                   82040:   Trigger *pTrigger, /* List of triggers to (potentially) fire */
                   82041:   int onconf         /* Default ON CONFLICT policy for triggers */
                   82042: ){
                   82043:   Vdbe *v = pParse->pVdbe;        /* Vdbe */
                   82044:   int iOld = 0;                   /* First register in OLD.* array */
                   82045:   int iLabel;                     /* Label resolved to end of generated code */
                   82046: 
                   82047:   /* Vdbe is guaranteed to have been allocated by this stage. */
                   82048:   assert( v );
                   82049: 
                   82050:   /* Seek cursor iCur to the row to delete. If this row no longer exists 
                   82051:   ** (this can happen if a trigger program has already deleted it), do
                   82052:   ** not attempt to delete it or fire any DELETE triggers.  */
                   82053:   iLabel = sqlite3VdbeMakeLabel(v);
                   82054:   sqlite3VdbeAddOp3(v, OP_NotExists, iCur, iLabel, iRowid);
                   82055:  
                   82056:   /* If there are any triggers to fire, allocate a range of registers to
                   82057:   ** use for the old.* references in the triggers.  */
                   82058:   if( sqlite3FkRequired(pParse, pTab, 0, 0) || pTrigger ){
                   82059:     u32 mask;                     /* Mask of OLD.* columns in use */
                   82060:     int iCol;                     /* Iterator used while populating OLD.* */
                   82061: 
                   82062:     /* TODO: Could use temporary registers here. Also could attempt to
                   82063:     ** avoid copying the contents of the rowid register.  */
                   82064:     mask = sqlite3TriggerColmask(
                   82065:         pParse, pTrigger, 0, 0, TRIGGER_BEFORE|TRIGGER_AFTER, pTab, onconf
                   82066:     );
                   82067:     mask |= sqlite3FkOldmask(pParse, pTab);
                   82068:     iOld = pParse->nMem+1;
                   82069:     pParse->nMem += (1 + pTab->nCol);
                   82070: 
                   82071:     /* Populate the OLD.* pseudo-table register array. These values will be 
                   82072:     ** used by any BEFORE and AFTER triggers that exist.  */
                   82073:     sqlite3VdbeAddOp2(v, OP_Copy, iRowid, iOld);
                   82074:     for(iCol=0; iCol<pTab->nCol; iCol++){
                   82075:       if( mask==0xffffffff || mask&(1<<iCol) ){
                   82076:         sqlite3ExprCodeGetColumnOfTable(v, pTab, iCur, iCol, iOld+iCol+1);
                   82077:       }
                   82078:     }
                   82079: 
                   82080:     /* Invoke BEFORE DELETE trigger programs. */
                   82081:     sqlite3CodeRowTrigger(pParse, pTrigger, 
                   82082:         TK_DELETE, 0, TRIGGER_BEFORE, pTab, iOld, onconf, iLabel
                   82083:     );
                   82084: 
                   82085:     /* Seek the cursor to the row to be deleted again. It may be that
                   82086:     ** the BEFORE triggers coded above have already removed the row
                   82087:     ** being deleted. Do not attempt to delete the row a second time, and 
                   82088:     ** do not fire AFTER triggers.  */
                   82089:     sqlite3VdbeAddOp3(v, OP_NotExists, iCur, iLabel, iRowid);
                   82090: 
                   82091:     /* Do FK processing. This call checks that any FK constraints that
                   82092:     ** refer to this table (i.e. constraints attached to other tables) 
                   82093:     ** are not violated by deleting this row.  */
                   82094:     sqlite3FkCheck(pParse, pTab, iOld, 0);
                   82095:   }
                   82096: 
                   82097:   /* Delete the index and table entries. Skip this step if pTab is really
                   82098:   ** a view (in which case the only effect of the DELETE statement is to
                   82099:   ** fire the INSTEAD OF triggers).  */ 
                   82100:   if( pTab->pSelect==0 ){
                   82101:     sqlite3GenerateRowIndexDelete(pParse, pTab, iCur, 0);
                   82102:     sqlite3VdbeAddOp2(v, OP_Delete, iCur, (count?OPFLAG_NCHANGE:0));
                   82103:     if( count ){
                   82104:       sqlite3VdbeChangeP4(v, -1, pTab->zName, P4_TRANSIENT);
                   82105:     }
                   82106:   }
                   82107: 
                   82108:   /* Do any ON CASCADE, SET NULL or SET DEFAULT operations required to
                   82109:   ** handle rows (possibly in other tables) that refer via a foreign key
                   82110:   ** to the row just deleted. */ 
                   82111:   sqlite3FkActions(pParse, pTab, 0, iOld);
                   82112: 
                   82113:   /* Invoke AFTER DELETE trigger programs. */
                   82114:   sqlite3CodeRowTrigger(pParse, pTrigger, 
                   82115:       TK_DELETE, 0, TRIGGER_AFTER, pTab, iOld, onconf, iLabel
                   82116:   );
                   82117: 
                   82118:   /* Jump here if the row had already been deleted before any BEFORE
                   82119:   ** trigger programs were invoked. Or if a trigger program throws a 
                   82120:   ** RAISE(IGNORE) exception.  */
                   82121:   sqlite3VdbeResolveLabel(v, iLabel);
                   82122: }
                   82123: 
                   82124: /*
                   82125: ** This routine generates VDBE code that causes the deletion of all
                   82126: ** index entries associated with a single row of a single table.
                   82127: **
                   82128: ** The VDBE must be in a particular state when this routine is called.
                   82129: ** These are the requirements:
                   82130: **
                   82131: **   1.  A read/write cursor pointing to pTab, the table containing the row
                   82132: **       to be deleted, must be opened as cursor number "iCur".
                   82133: **
                   82134: **   2.  Read/write cursors for all indices of pTab must be open as
                   82135: **       cursor number iCur+i for the i-th index.
                   82136: **
                   82137: **   3.  The "iCur" cursor must be pointing to the row that is to be
                   82138: **       deleted.
                   82139: */
                   82140: SQLITE_PRIVATE void sqlite3GenerateRowIndexDelete(
                   82141:   Parse *pParse,     /* Parsing and code generating context */
                   82142:   Table *pTab,       /* Table containing the row to be deleted */
                   82143:   int iCur,          /* Cursor number for the table */
                   82144:   int *aRegIdx       /* Only delete if aRegIdx!=0 && aRegIdx[i]>0 */
                   82145: ){
                   82146:   int i;
                   82147:   Index *pIdx;
                   82148:   int r1;
                   82149: 
                   82150:   for(i=1, pIdx=pTab->pIndex; pIdx; i++, pIdx=pIdx->pNext){
                   82151:     if( aRegIdx!=0 && aRegIdx[i-1]==0 ) continue;
                   82152:     r1 = sqlite3GenerateIndexKey(pParse, pIdx, iCur, 0, 0);
                   82153:     sqlite3VdbeAddOp3(pParse->pVdbe, OP_IdxDelete, iCur+i, r1,pIdx->nColumn+1);
                   82154:   }
                   82155: }
                   82156: 
                   82157: /*
                   82158: ** Generate code that will assemble an index key and put it in register
                   82159: ** regOut.  The key with be for index pIdx which is an index on pTab.
                   82160: ** iCur is the index of a cursor open on the pTab table and pointing to
                   82161: ** the entry that needs indexing.
                   82162: **
                   82163: ** Return a register number which is the first in a block of
                   82164: ** registers that holds the elements of the index key.  The
                   82165: ** block of registers has already been deallocated by the time
                   82166: ** this routine returns.
                   82167: */
                   82168: SQLITE_PRIVATE int sqlite3GenerateIndexKey(
                   82169:   Parse *pParse,     /* Parsing context */
                   82170:   Index *pIdx,       /* The index for which to generate a key */
                   82171:   int iCur,          /* Cursor number for the pIdx->pTable table */
                   82172:   int regOut,        /* Write the new index key to this register */
                   82173:   int doMakeRec      /* Run the OP_MakeRecord instruction if true */
                   82174: ){
                   82175:   Vdbe *v = pParse->pVdbe;
                   82176:   int j;
                   82177:   Table *pTab = pIdx->pTable;
                   82178:   int regBase;
                   82179:   int nCol;
                   82180: 
                   82181:   nCol = pIdx->nColumn;
                   82182:   regBase = sqlite3GetTempRange(pParse, nCol+1);
                   82183:   sqlite3VdbeAddOp2(v, OP_Rowid, iCur, regBase+nCol);
                   82184:   for(j=0; j<nCol; j++){
                   82185:     int idx = pIdx->aiColumn[j];
                   82186:     if( idx==pTab->iPKey ){
                   82187:       sqlite3VdbeAddOp2(v, OP_SCopy, regBase+nCol, regBase+j);
                   82188:     }else{
                   82189:       sqlite3VdbeAddOp3(v, OP_Column, iCur, idx, regBase+j);
                   82190:       sqlite3ColumnDefault(v, pTab, idx, -1);
                   82191:     }
                   82192:   }
                   82193:   if( doMakeRec ){
                   82194:     const char *zAff;
                   82195:     if( pTab->pSelect || (pParse->db->flags & SQLITE_IdxRealAsInt)!=0 ){
                   82196:       zAff = 0;
                   82197:     }else{
                   82198:       zAff = sqlite3IndexAffinityStr(v, pIdx);
                   82199:     }
                   82200:     sqlite3VdbeAddOp3(v, OP_MakeRecord, regBase, nCol+1, regOut);
                   82201:     sqlite3VdbeChangeP4(v, -1, zAff, P4_TRANSIENT);
                   82202:   }
                   82203:   sqlite3ReleaseTempRange(pParse, regBase, nCol+1);
                   82204:   return regBase;
                   82205: }
                   82206: 
                   82207: /************** End of delete.c **********************************************/
                   82208: /************** Begin file func.c ********************************************/
                   82209: /*
                   82210: ** 2002 February 23
                   82211: **
                   82212: ** The author disclaims copyright to this source code.  In place of
                   82213: ** a legal notice, here is a blessing:
                   82214: **
                   82215: **    May you do good and not evil.
                   82216: **    May you find forgiveness for yourself and forgive others.
                   82217: **    May you share freely, never taking more than you give.
                   82218: **
                   82219: *************************************************************************
                   82220: ** This file contains the C functions that implement various SQL
                   82221: ** functions of SQLite.  
                   82222: **
                   82223: ** There is only one exported symbol in this file - the function
                   82224: ** sqliteRegisterBuildinFunctions() found at the bottom of the file.
                   82225: ** All other code has file scope.
                   82226: */
                   82227: 
                   82228: /*
                   82229: ** Return the collating function associated with a function.
                   82230: */
                   82231: static CollSeq *sqlite3GetFuncCollSeq(sqlite3_context *context){
                   82232:   return context->pColl;
                   82233: }
                   82234: 
                   82235: /*
                   82236: ** Implementation of the non-aggregate min() and max() functions
                   82237: */
                   82238: static void minmaxFunc(
                   82239:   sqlite3_context *context,
                   82240:   int argc,
                   82241:   sqlite3_value **argv
                   82242: ){
                   82243:   int i;
                   82244:   int mask;    /* 0 for min() or 0xffffffff for max() */
                   82245:   int iBest;
                   82246:   CollSeq *pColl;
                   82247: 
                   82248:   assert( argc>1 );
                   82249:   mask = sqlite3_user_data(context)==0 ? 0 : -1;
                   82250:   pColl = sqlite3GetFuncCollSeq(context);
                   82251:   assert( pColl );
                   82252:   assert( mask==-1 || mask==0 );
                   82253:   iBest = 0;
                   82254:   if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
                   82255:   for(i=1; i<argc; i++){
                   82256:     if( sqlite3_value_type(argv[i])==SQLITE_NULL ) return;
                   82257:     if( (sqlite3MemCompare(argv[iBest], argv[i], pColl)^mask)>=0 ){
                   82258:       testcase( mask==0 );
                   82259:       iBest = i;
                   82260:     }
                   82261:   }
                   82262:   sqlite3_result_value(context, argv[iBest]);
                   82263: }
                   82264: 
                   82265: /*
                   82266: ** Return the type of the argument.
                   82267: */
                   82268: static void typeofFunc(
                   82269:   sqlite3_context *context,
                   82270:   int NotUsed,
                   82271:   sqlite3_value **argv
                   82272: ){
                   82273:   const char *z = 0;
                   82274:   UNUSED_PARAMETER(NotUsed);
                   82275:   switch( sqlite3_value_type(argv[0]) ){
                   82276:     case SQLITE_INTEGER: z = "integer"; break;
                   82277:     case SQLITE_TEXT:    z = "text";    break;
                   82278:     case SQLITE_FLOAT:   z = "real";    break;
                   82279:     case SQLITE_BLOB:    z = "blob";    break;
                   82280:     default:             z = "null";    break;
                   82281:   }
                   82282:   sqlite3_result_text(context, z, -1, SQLITE_STATIC);
                   82283: }
                   82284: 
                   82285: 
                   82286: /*
                   82287: ** Implementation of the length() function
                   82288: */
                   82289: static void lengthFunc(
                   82290:   sqlite3_context *context,
                   82291:   int argc,
                   82292:   sqlite3_value **argv
                   82293: ){
                   82294:   int len;
                   82295: 
                   82296:   assert( argc==1 );
                   82297:   UNUSED_PARAMETER(argc);
                   82298:   switch( sqlite3_value_type(argv[0]) ){
                   82299:     case SQLITE_BLOB:
                   82300:     case SQLITE_INTEGER:
                   82301:     case SQLITE_FLOAT: {
                   82302:       sqlite3_result_int(context, sqlite3_value_bytes(argv[0]));
                   82303:       break;
                   82304:     }
                   82305:     case SQLITE_TEXT: {
                   82306:       const unsigned char *z = sqlite3_value_text(argv[0]);
                   82307:       if( z==0 ) return;
                   82308:       len = 0;
                   82309:       while( *z ){
                   82310:         len++;
                   82311:         SQLITE_SKIP_UTF8(z);
                   82312:       }
                   82313:       sqlite3_result_int(context, len);
                   82314:       break;
                   82315:     }
                   82316:     default: {
                   82317:       sqlite3_result_null(context);
                   82318:       break;
                   82319:     }
                   82320:   }
                   82321: }
                   82322: 
                   82323: /*
                   82324: ** Implementation of the abs() function.
                   82325: **
                   82326: ** IMP: R-23979-26855 The abs(X) function returns the absolute value of
                   82327: ** the numeric argument X. 
                   82328: */
                   82329: static void absFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
                   82330:   assert( argc==1 );
                   82331:   UNUSED_PARAMETER(argc);
                   82332:   switch( sqlite3_value_type(argv[0]) ){
                   82333:     case SQLITE_INTEGER: {
                   82334:       i64 iVal = sqlite3_value_int64(argv[0]);
                   82335:       if( iVal<0 ){
                   82336:         if( (iVal<<1)==0 ){
                   82337:           /* IMP: R-35460-15084 If X is the integer -9223372036854775807 then
                   82338:           ** abs(X) throws an integer overflow error since there is no
                   82339:           ** equivalent positive 64-bit two complement value. */
                   82340:           sqlite3_result_error(context, "integer overflow", -1);
                   82341:           return;
                   82342:         }
                   82343:         iVal = -iVal;
                   82344:       } 
                   82345:       sqlite3_result_int64(context, iVal);
                   82346:       break;
                   82347:     }
                   82348:     case SQLITE_NULL: {
                   82349:       /* IMP: R-37434-19929 Abs(X) returns NULL if X is NULL. */
                   82350:       sqlite3_result_null(context);
                   82351:       break;
                   82352:     }
                   82353:     default: {
                   82354:       /* Because sqlite3_value_double() returns 0.0 if the argument is not
                   82355:       ** something that can be converted into a number, we have:
                   82356:       ** IMP: R-57326-31541 Abs(X) return 0.0 if X is a string or blob that
                   82357:       ** cannot be converted to a numeric value. 
                   82358:       */
                   82359:       double rVal = sqlite3_value_double(argv[0]);
                   82360:       if( rVal<0 ) rVal = -rVal;
                   82361:       sqlite3_result_double(context, rVal);
                   82362:       break;
                   82363:     }
                   82364:   }
                   82365: }
                   82366: 
                   82367: /*
                   82368: ** Implementation of the substr() function.
                   82369: **
                   82370: ** substr(x,p1,p2)  returns p2 characters of x[] beginning with p1.
                   82371: ** p1 is 1-indexed.  So substr(x,1,1) returns the first character
                   82372: ** of x.  If x is text, then we actually count UTF-8 characters.
                   82373: ** If x is a blob, then we count bytes.
                   82374: **
                   82375: ** If p1 is negative, then we begin abs(p1) from the end of x[].
                   82376: **
1.1.1.3 ! misho    82377: ** If p2 is negative, return the p2 characters preceding p1.
1.1       misho    82378: */
                   82379: static void substrFunc(
                   82380:   sqlite3_context *context,
                   82381:   int argc,
                   82382:   sqlite3_value **argv
                   82383: ){
                   82384:   const unsigned char *z;
                   82385:   const unsigned char *z2;
                   82386:   int len;
                   82387:   int p0type;
                   82388:   i64 p1, p2;
                   82389:   int negP2 = 0;
                   82390: 
                   82391:   assert( argc==3 || argc==2 );
                   82392:   if( sqlite3_value_type(argv[1])==SQLITE_NULL
                   82393:    || (argc==3 && sqlite3_value_type(argv[2])==SQLITE_NULL)
                   82394:   ){
                   82395:     return;
                   82396:   }
                   82397:   p0type = sqlite3_value_type(argv[0]);
                   82398:   p1 = sqlite3_value_int(argv[1]);
                   82399:   if( p0type==SQLITE_BLOB ){
                   82400:     len = sqlite3_value_bytes(argv[0]);
                   82401:     z = sqlite3_value_blob(argv[0]);
                   82402:     if( z==0 ) return;
                   82403:     assert( len==sqlite3_value_bytes(argv[0]) );
                   82404:   }else{
                   82405:     z = sqlite3_value_text(argv[0]);
                   82406:     if( z==0 ) return;
                   82407:     len = 0;
                   82408:     if( p1<0 ){
                   82409:       for(z2=z; *z2; len++){
                   82410:         SQLITE_SKIP_UTF8(z2);
                   82411:       }
                   82412:     }
                   82413:   }
                   82414:   if( argc==3 ){
                   82415:     p2 = sqlite3_value_int(argv[2]);
                   82416:     if( p2<0 ){
                   82417:       p2 = -p2;
                   82418:       negP2 = 1;
                   82419:     }
                   82420:   }else{
                   82421:     p2 = sqlite3_context_db_handle(context)->aLimit[SQLITE_LIMIT_LENGTH];
                   82422:   }
                   82423:   if( p1<0 ){
                   82424:     p1 += len;
                   82425:     if( p1<0 ){
                   82426:       p2 += p1;
                   82427:       if( p2<0 ) p2 = 0;
                   82428:       p1 = 0;
                   82429:     }
                   82430:   }else if( p1>0 ){
                   82431:     p1--;
                   82432:   }else if( p2>0 ){
                   82433:     p2--;
                   82434:   }
                   82435:   if( negP2 ){
                   82436:     p1 -= p2;
                   82437:     if( p1<0 ){
                   82438:       p2 += p1;
                   82439:       p1 = 0;
                   82440:     }
                   82441:   }
                   82442:   assert( p1>=0 && p2>=0 );
                   82443:   if( p0type!=SQLITE_BLOB ){
                   82444:     while( *z && p1 ){
                   82445:       SQLITE_SKIP_UTF8(z);
                   82446:       p1--;
                   82447:     }
                   82448:     for(z2=z; *z2 && p2; p2--){
                   82449:       SQLITE_SKIP_UTF8(z2);
                   82450:     }
                   82451:     sqlite3_result_text(context, (char*)z, (int)(z2-z), SQLITE_TRANSIENT);
                   82452:   }else{
                   82453:     if( p1+p2>len ){
                   82454:       p2 = len-p1;
                   82455:       if( p2<0 ) p2 = 0;
                   82456:     }
                   82457:     sqlite3_result_blob(context, (char*)&z[p1], (int)p2, SQLITE_TRANSIENT);
                   82458:   }
                   82459: }
                   82460: 
                   82461: /*
                   82462: ** Implementation of the round() function
                   82463: */
                   82464: #ifndef SQLITE_OMIT_FLOATING_POINT
                   82465: static void roundFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
                   82466:   int n = 0;
                   82467:   double r;
                   82468:   char *zBuf;
                   82469:   assert( argc==1 || argc==2 );
                   82470:   if( argc==2 ){
                   82471:     if( SQLITE_NULL==sqlite3_value_type(argv[1]) ) return;
                   82472:     n = sqlite3_value_int(argv[1]);
                   82473:     if( n>30 ) n = 30;
                   82474:     if( n<0 ) n = 0;
                   82475:   }
                   82476:   if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
                   82477:   r = sqlite3_value_double(argv[0]);
                   82478:   /* If Y==0 and X will fit in a 64-bit int,
                   82479:   ** handle the rounding directly,
                   82480:   ** otherwise use printf.
                   82481:   */
                   82482:   if( n==0 && r>=0 && r<LARGEST_INT64-1 ){
                   82483:     r = (double)((sqlite_int64)(r+0.5));
                   82484:   }else if( n==0 && r<0 && (-r)<LARGEST_INT64-1 ){
                   82485:     r = -(double)((sqlite_int64)((-r)+0.5));
                   82486:   }else{
                   82487:     zBuf = sqlite3_mprintf("%.*f",n,r);
                   82488:     if( zBuf==0 ){
                   82489:       sqlite3_result_error_nomem(context);
                   82490:       return;
                   82491:     }
                   82492:     sqlite3AtoF(zBuf, &r, sqlite3Strlen30(zBuf), SQLITE_UTF8);
                   82493:     sqlite3_free(zBuf);
                   82494:   }
                   82495:   sqlite3_result_double(context, r);
                   82496: }
                   82497: #endif
                   82498: 
                   82499: /*
                   82500: ** Allocate nByte bytes of space using sqlite3_malloc(). If the
                   82501: ** allocation fails, call sqlite3_result_error_nomem() to notify
                   82502: ** the database handle that malloc() has failed and return NULL.
                   82503: ** If nByte is larger than the maximum string or blob length, then
                   82504: ** raise an SQLITE_TOOBIG exception and return NULL.
                   82505: */
                   82506: static void *contextMalloc(sqlite3_context *context, i64 nByte){
                   82507:   char *z;
                   82508:   sqlite3 *db = sqlite3_context_db_handle(context);
                   82509:   assert( nByte>0 );
                   82510:   testcase( nByte==db->aLimit[SQLITE_LIMIT_LENGTH] );
                   82511:   testcase( nByte==db->aLimit[SQLITE_LIMIT_LENGTH]+1 );
                   82512:   if( nByte>db->aLimit[SQLITE_LIMIT_LENGTH] ){
                   82513:     sqlite3_result_error_toobig(context);
                   82514:     z = 0;
                   82515:   }else{
                   82516:     z = sqlite3Malloc((int)nByte);
                   82517:     if( !z ){
                   82518:       sqlite3_result_error_nomem(context);
                   82519:     }
                   82520:   }
                   82521:   return z;
                   82522: }
                   82523: 
                   82524: /*
                   82525: ** Implementation of the upper() and lower() SQL functions.
                   82526: */
                   82527: static void upperFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
                   82528:   char *z1;
                   82529:   const char *z2;
                   82530:   int i, n;
                   82531:   UNUSED_PARAMETER(argc);
                   82532:   z2 = (char*)sqlite3_value_text(argv[0]);
                   82533:   n = sqlite3_value_bytes(argv[0]);
                   82534:   /* Verify that the call to _bytes() does not invalidate the _text() pointer */
                   82535:   assert( z2==(char*)sqlite3_value_text(argv[0]) );
                   82536:   if( z2 ){
                   82537:     z1 = contextMalloc(context, ((i64)n)+1);
                   82538:     if( z1 ){
                   82539:       memcpy(z1, z2, n+1);
                   82540:       for(i=0; z1[i]; i++){
                   82541:         z1[i] = (char)sqlite3Toupper(z1[i]);
                   82542:       }
                   82543:       sqlite3_result_text(context, z1, -1, sqlite3_free);
                   82544:     }
                   82545:   }
                   82546: }
                   82547: static void lowerFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
                   82548:   u8 *z1;
                   82549:   const char *z2;
                   82550:   int i, n;
                   82551:   UNUSED_PARAMETER(argc);
                   82552:   z2 = (char*)sqlite3_value_text(argv[0]);
                   82553:   n = sqlite3_value_bytes(argv[0]);
                   82554:   /* Verify that the call to _bytes() does not invalidate the _text() pointer */
                   82555:   assert( z2==(char*)sqlite3_value_text(argv[0]) );
                   82556:   if( z2 ){
                   82557:     z1 = contextMalloc(context, ((i64)n)+1);
                   82558:     if( z1 ){
                   82559:       memcpy(z1, z2, n+1);
                   82560:       for(i=0; z1[i]; i++){
                   82561:         z1[i] = sqlite3Tolower(z1[i]);
                   82562:       }
                   82563:       sqlite3_result_text(context, (char *)z1, -1, sqlite3_free);
                   82564:     }
                   82565:   }
                   82566: }
                   82567: 
                   82568: 
                   82569: #if 0  /* This function is never used. */
                   82570: /*
                   82571: ** The COALESCE() and IFNULL() functions used to be implemented as shown
                   82572: ** here.  But now they are implemented as VDBE code so that unused arguments
                   82573: ** do not have to be computed.  This legacy implementation is retained as
                   82574: ** comment.
                   82575: */
                   82576: /*
                   82577: ** Implementation of the IFNULL(), NVL(), and COALESCE() functions.  
                   82578: ** All three do the same thing.  They return the first non-NULL
                   82579: ** argument.
                   82580: */
                   82581: static void ifnullFunc(
                   82582:   sqlite3_context *context,
                   82583:   int argc,
                   82584:   sqlite3_value **argv
                   82585: ){
                   82586:   int i;
                   82587:   for(i=0; i<argc; i++){
                   82588:     if( SQLITE_NULL!=sqlite3_value_type(argv[i]) ){
                   82589:       sqlite3_result_value(context, argv[i]);
                   82590:       break;
                   82591:     }
                   82592:   }
                   82593: }
                   82594: #endif /* NOT USED */
                   82595: #define ifnullFunc versionFunc   /* Substitute function - never called */
                   82596: 
                   82597: /*
                   82598: ** Implementation of random().  Return a random integer.  
                   82599: */
                   82600: static void randomFunc(
                   82601:   sqlite3_context *context,
                   82602:   int NotUsed,
                   82603:   sqlite3_value **NotUsed2
                   82604: ){
                   82605:   sqlite_int64 r;
                   82606:   UNUSED_PARAMETER2(NotUsed, NotUsed2);
                   82607:   sqlite3_randomness(sizeof(r), &r);
                   82608:   if( r<0 ){
                   82609:     /* We need to prevent a random number of 0x8000000000000000 
                   82610:     ** (or -9223372036854775808) since when you do abs() of that
                   82611:     ** number of you get the same value back again.  To do this
                   82612:     ** in a way that is testable, mask the sign bit off of negative
                   82613:     ** values, resulting in a positive value.  Then take the 
                   82614:     ** 2s complement of that positive value.  The end result can
                   82615:     ** therefore be no less than -9223372036854775807.
                   82616:     */
                   82617:     r = -(r ^ (((sqlite3_int64)1)<<63));
                   82618:   }
                   82619:   sqlite3_result_int64(context, r);
                   82620: }
                   82621: 
                   82622: /*
                   82623: ** Implementation of randomblob(N).  Return a random blob
                   82624: ** that is N bytes long.
                   82625: */
                   82626: static void randomBlob(
                   82627:   sqlite3_context *context,
                   82628:   int argc,
                   82629:   sqlite3_value **argv
                   82630: ){
                   82631:   int n;
                   82632:   unsigned char *p;
                   82633:   assert( argc==1 );
                   82634:   UNUSED_PARAMETER(argc);
                   82635:   n = sqlite3_value_int(argv[0]);
                   82636:   if( n<1 ){
                   82637:     n = 1;
                   82638:   }
                   82639:   p = contextMalloc(context, n);
                   82640:   if( p ){
                   82641:     sqlite3_randomness(n, p);
                   82642:     sqlite3_result_blob(context, (char*)p, n, sqlite3_free);
                   82643:   }
                   82644: }
                   82645: 
                   82646: /*
                   82647: ** Implementation of the last_insert_rowid() SQL function.  The return
                   82648: ** value is the same as the sqlite3_last_insert_rowid() API function.
                   82649: */
                   82650: static void last_insert_rowid(
                   82651:   sqlite3_context *context, 
                   82652:   int NotUsed, 
                   82653:   sqlite3_value **NotUsed2
                   82654: ){
                   82655:   sqlite3 *db = sqlite3_context_db_handle(context);
                   82656:   UNUSED_PARAMETER2(NotUsed, NotUsed2);
                   82657:   /* IMP: R-51513-12026 The last_insert_rowid() SQL function is a
                   82658:   ** wrapper around the sqlite3_last_insert_rowid() C/C++ interface
                   82659:   ** function. */
                   82660:   sqlite3_result_int64(context, sqlite3_last_insert_rowid(db));
                   82661: }
                   82662: 
                   82663: /*
                   82664: ** Implementation of the changes() SQL function.
                   82665: **
                   82666: ** IMP: R-62073-11209 The changes() SQL function is a wrapper
                   82667: ** around the sqlite3_changes() C/C++ function and hence follows the same
                   82668: ** rules for counting changes.
                   82669: */
                   82670: static void changes(
                   82671:   sqlite3_context *context,
                   82672:   int NotUsed,
                   82673:   sqlite3_value **NotUsed2
                   82674: ){
                   82675:   sqlite3 *db = sqlite3_context_db_handle(context);
                   82676:   UNUSED_PARAMETER2(NotUsed, NotUsed2);
                   82677:   sqlite3_result_int(context, sqlite3_changes(db));
                   82678: }
                   82679: 
                   82680: /*
                   82681: ** Implementation of the total_changes() SQL function.  The return value is
                   82682: ** the same as the sqlite3_total_changes() API function.
                   82683: */
                   82684: static void total_changes(
                   82685:   sqlite3_context *context,
                   82686:   int NotUsed,
                   82687:   sqlite3_value **NotUsed2
                   82688: ){
                   82689:   sqlite3 *db = sqlite3_context_db_handle(context);
                   82690:   UNUSED_PARAMETER2(NotUsed, NotUsed2);
                   82691:   /* IMP: R-52756-41993 This function is a wrapper around the
                   82692:   ** sqlite3_total_changes() C/C++ interface. */
                   82693:   sqlite3_result_int(context, sqlite3_total_changes(db));
                   82694: }
                   82695: 
                   82696: /*
                   82697: ** A structure defining how to do GLOB-style comparisons.
                   82698: */
                   82699: struct compareInfo {
                   82700:   u8 matchAll;
                   82701:   u8 matchOne;
                   82702:   u8 matchSet;
                   82703:   u8 noCase;
                   82704: };
                   82705: 
                   82706: /*
                   82707: ** For LIKE and GLOB matching on EBCDIC machines, assume that every
                   82708: ** character is exactly one byte in size.  Also, all characters are
                   82709: ** able to participate in upper-case-to-lower-case mappings in EBCDIC
                   82710: ** whereas only characters less than 0x80 do in ASCII.
                   82711: */
                   82712: #if defined(SQLITE_EBCDIC)
                   82713: # define sqlite3Utf8Read(A,C)  (*(A++))
                   82714: # define GlogUpperToLower(A)   A = sqlite3UpperToLower[A]
                   82715: #else
                   82716: # define GlogUpperToLower(A)   if( !((A)&~0x7f) ){ A = sqlite3UpperToLower[A]; }
                   82717: #endif
                   82718: 
                   82719: static const struct compareInfo globInfo = { '*', '?', '[', 0 };
                   82720: /* The correct SQL-92 behavior is for the LIKE operator to ignore
                   82721: ** case.  Thus  'a' LIKE 'A' would be true. */
                   82722: static const struct compareInfo likeInfoNorm = { '%', '_',   0, 1 };
                   82723: /* If SQLITE_CASE_SENSITIVE_LIKE is defined, then the LIKE operator
                   82724: ** is case sensitive causing 'a' LIKE 'A' to be false */
                   82725: static const struct compareInfo likeInfoAlt = { '%', '_',   0, 0 };
                   82726: 
                   82727: /*
                   82728: ** Compare two UTF-8 strings for equality where the first string can
                   82729: ** potentially be a "glob" expression.  Return true (1) if they
                   82730: ** are the same and false (0) if they are different.
                   82731: **
                   82732: ** Globbing rules:
                   82733: **
                   82734: **      '*'       Matches any sequence of zero or more characters.
                   82735: **
                   82736: **      '?'       Matches exactly one character.
                   82737: **
                   82738: **     [...]      Matches one character from the enclosed list of
                   82739: **                characters.
                   82740: **
                   82741: **     [^...]     Matches one character not in the enclosed list.
                   82742: **
                   82743: ** With the [...] and [^...] matching, a ']' character can be included
                   82744: ** in the list by making it the first character after '[' or '^'.  A
                   82745: ** range of characters can be specified using '-'.  Example:
                   82746: ** "[a-z]" matches any single lower-case letter.  To match a '-', make
                   82747: ** it the last character in the list.
                   82748: **
                   82749: ** This routine is usually quick, but can be N**2 in the worst case.
                   82750: **
                   82751: ** Hints: to match '*' or '?', put them in "[]".  Like this:
                   82752: **
                   82753: **         abc[*]xyz        Matches "abc*xyz" only
                   82754: */
                   82755: static int patternCompare(
                   82756:   const u8 *zPattern,              /* The glob pattern */
                   82757:   const u8 *zString,               /* The string to compare against the glob */
                   82758:   const struct compareInfo *pInfo, /* Information about how to do the compare */
                   82759:   u32 esc                          /* The escape character */
                   82760: ){
                   82761:   u32 c, c2;
                   82762:   int invert;
                   82763:   int seen;
                   82764:   u8 matchOne = pInfo->matchOne;
                   82765:   u8 matchAll = pInfo->matchAll;
                   82766:   u8 matchSet = pInfo->matchSet;
                   82767:   u8 noCase = pInfo->noCase; 
                   82768:   int prevEscape = 0;     /* True if the previous character was 'escape' */
                   82769: 
                   82770:   while( (c = sqlite3Utf8Read(zPattern,&zPattern))!=0 ){
                   82771:     if( !prevEscape && c==matchAll ){
                   82772:       while( (c=sqlite3Utf8Read(zPattern,&zPattern)) == matchAll
                   82773:                || c == matchOne ){
                   82774:         if( c==matchOne && sqlite3Utf8Read(zString, &zString)==0 ){
                   82775:           return 0;
                   82776:         }
                   82777:       }
                   82778:       if( c==0 ){
                   82779:         return 1;
                   82780:       }else if( c==esc ){
                   82781:         c = sqlite3Utf8Read(zPattern, &zPattern);
                   82782:         if( c==0 ){
                   82783:           return 0;
                   82784:         }
                   82785:       }else if( c==matchSet ){
                   82786:         assert( esc==0 );         /* This is GLOB, not LIKE */
                   82787:         assert( matchSet<0x80 );  /* '[' is a single-byte character */
                   82788:         while( *zString && patternCompare(&zPattern[-1],zString,pInfo,esc)==0 ){
                   82789:           SQLITE_SKIP_UTF8(zString);
                   82790:         }
                   82791:         return *zString!=0;
                   82792:       }
                   82793:       while( (c2 = sqlite3Utf8Read(zString,&zString))!=0 ){
                   82794:         if( noCase ){
                   82795:           GlogUpperToLower(c2);
                   82796:           GlogUpperToLower(c);
                   82797:           while( c2 != 0 && c2 != c ){
                   82798:             c2 = sqlite3Utf8Read(zString, &zString);
                   82799:             GlogUpperToLower(c2);
                   82800:           }
                   82801:         }else{
                   82802:           while( c2 != 0 && c2 != c ){
                   82803:             c2 = sqlite3Utf8Read(zString, &zString);
                   82804:           }
                   82805:         }
                   82806:         if( c2==0 ) return 0;
                   82807:         if( patternCompare(zPattern,zString,pInfo,esc) ) return 1;
                   82808:       }
                   82809:       return 0;
                   82810:     }else if( !prevEscape && c==matchOne ){
                   82811:       if( sqlite3Utf8Read(zString, &zString)==0 ){
                   82812:         return 0;
                   82813:       }
                   82814:     }else if( c==matchSet ){
                   82815:       u32 prior_c = 0;
                   82816:       assert( esc==0 );    /* This only occurs for GLOB, not LIKE */
                   82817:       seen = 0;
                   82818:       invert = 0;
                   82819:       c = sqlite3Utf8Read(zString, &zString);
                   82820:       if( c==0 ) return 0;
                   82821:       c2 = sqlite3Utf8Read(zPattern, &zPattern);
                   82822:       if( c2=='^' ){
                   82823:         invert = 1;
                   82824:         c2 = sqlite3Utf8Read(zPattern, &zPattern);
                   82825:       }
                   82826:       if( c2==']' ){
                   82827:         if( c==']' ) seen = 1;
                   82828:         c2 = sqlite3Utf8Read(zPattern, &zPattern);
                   82829:       }
                   82830:       while( c2 && c2!=']' ){
                   82831:         if( c2=='-' && zPattern[0]!=']' && zPattern[0]!=0 && prior_c>0 ){
                   82832:           c2 = sqlite3Utf8Read(zPattern, &zPattern);
                   82833:           if( c>=prior_c && c<=c2 ) seen = 1;
                   82834:           prior_c = 0;
                   82835:         }else{
                   82836:           if( c==c2 ){
                   82837:             seen = 1;
                   82838:           }
                   82839:           prior_c = c2;
                   82840:         }
                   82841:         c2 = sqlite3Utf8Read(zPattern, &zPattern);
                   82842:       }
                   82843:       if( c2==0 || (seen ^ invert)==0 ){
                   82844:         return 0;
                   82845:       }
                   82846:     }else if( esc==c && !prevEscape ){
                   82847:       prevEscape = 1;
                   82848:     }else{
                   82849:       c2 = sqlite3Utf8Read(zString, &zString);
                   82850:       if( noCase ){
                   82851:         GlogUpperToLower(c);
                   82852:         GlogUpperToLower(c2);
                   82853:       }
                   82854:       if( c!=c2 ){
                   82855:         return 0;
                   82856:       }
                   82857:       prevEscape = 0;
                   82858:     }
                   82859:   }
                   82860:   return *zString==0;
                   82861: }
                   82862: 
                   82863: /*
                   82864: ** Count the number of times that the LIKE operator (or GLOB which is
                   82865: ** just a variation of LIKE) gets called.  This is used for testing
                   82866: ** only.
                   82867: */
                   82868: #ifdef SQLITE_TEST
                   82869: SQLITE_API int sqlite3_like_count = 0;
                   82870: #endif
                   82871: 
                   82872: 
                   82873: /*
                   82874: ** Implementation of the like() SQL function.  This function implements
                   82875: ** the build-in LIKE operator.  The first argument to the function is the
                   82876: ** pattern and the second argument is the string.  So, the SQL statements:
                   82877: **
                   82878: **       A LIKE B
                   82879: **
                   82880: ** is implemented as like(B,A).
                   82881: **
                   82882: ** This same function (with a different compareInfo structure) computes
                   82883: ** the GLOB operator.
                   82884: */
                   82885: static void likeFunc(
                   82886:   sqlite3_context *context, 
                   82887:   int argc, 
                   82888:   sqlite3_value **argv
                   82889: ){
                   82890:   const unsigned char *zA, *zB;
                   82891:   u32 escape = 0;
                   82892:   int nPat;
                   82893:   sqlite3 *db = sqlite3_context_db_handle(context);
                   82894: 
                   82895:   zB = sqlite3_value_text(argv[0]);
                   82896:   zA = sqlite3_value_text(argv[1]);
                   82897: 
                   82898:   /* Limit the length of the LIKE or GLOB pattern to avoid problems
                   82899:   ** of deep recursion and N*N behavior in patternCompare().
                   82900:   */
                   82901:   nPat = sqlite3_value_bytes(argv[0]);
                   82902:   testcase( nPat==db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH] );
                   82903:   testcase( nPat==db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH]+1 );
                   82904:   if( nPat > db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH] ){
                   82905:     sqlite3_result_error(context, "LIKE or GLOB pattern too complex", -1);
                   82906:     return;
                   82907:   }
                   82908:   assert( zB==sqlite3_value_text(argv[0]) );  /* Encoding did not change */
                   82909: 
                   82910:   if( argc==3 ){
                   82911:     /* The escape character string must consist of a single UTF-8 character.
                   82912:     ** Otherwise, return an error.
                   82913:     */
                   82914:     const unsigned char *zEsc = sqlite3_value_text(argv[2]);
                   82915:     if( zEsc==0 ) return;
                   82916:     if( sqlite3Utf8CharLen((char*)zEsc, -1)!=1 ){
                   82917:       sqlite3_result_error(context, 
                   82918:           "ESCAPE expression must be a single character", -1);
                   82919:       return;
                   82920:     }
                   82921:     escape = sqlite3Utf8Read(zEsc, &zEsc);
                   82922:   }
                   82923:   if( zA && zB ){
                   82924:     struct compareInfo *pInfo = sqlite3_user_data(context);
                   82925: #ifdef SQLITE_TEST
                   82926:     sqlite3_like_count++;
                   82927: #endif
                   82928:     
                   82929:     sqlite3_result_int(context, patternCompare(zB, zA, pInfo, escape));
                   82930:   }
                   82931: }
                   82932: 
                   82933: /*
                   82934: ** Implementation of the NULLIF(x,y) function.  The result is the first
                   82935: ** argument if the arguments are different.  The result is NULL if the
                   82936: ** arguments are equal to each other.
                   82937: */
                   82938: static void nullifFunc(
                   82939:   sqlite3_context *context,
                   82940:   int NotUsed,
                   82941:   sqlite3_value **argv
                   82942: ){
                   82943:   CollSeq *pColl = sqlite3GetFuncCollSeq(context);
                   82944:   UNUSED_PARAMETER(NotUsed);
                   82945:   if( sqlite3MemCompare(argv[0], argv[1], pColl)!=0 ){
                   82946:     sqlite3_result_value(context, argv[0]);
                   82947:   }
                   82948: }
                   82949: 
                   82950: /*
                   82951: ** Implementation of the sqlite_version() function.  The result is the version
                   82952: ** of the SQLite library that is running.
                   82953: */
                   82954: static void versionFunc(
                   82955:   sqlite3_context *context,
                   82956:   int NotUsed,
                   82957:   sqlite3_value **NotUsed2
                   82958: ){
                   82959:   UNUSED_PARAMETER2(NotUsed, NotUsed2);
                   82960:   /* IMP: R-48699-48617 This function is an SQL wrapper around the
                   82961:   ** sqlite3_libversion() C-interface. */
                   82962:   sqlite3_result_text(context, sqlite3_libversion(), -1, SQLITE_STATIC);
                   82963: }
                   82964: 
                   82965: /*
                   82966: ** Implementation of the sqlite_source_id() function. The result is a string
                   82967: ** that identifies the particular version of the source code used to build
                   82968: ** SQLite.
                   82969: */
                   82970: static void sourceidFunc(
                   82971:   sqlite3_context *context,
                   82972:   int NotUsed,
                   82973:   sqlite3_value **NotUsed2
                   82974: ){
                   82975:   UNUSED_PARAMETER2(NotUsed, NotUsed2);
                   82976:   /* IMP: R-24470-31136 This function is an SQL wrapper around the
                   82977:   ** sqlite3_sourceid() C interface. */
                   82978:   sqlite3_result_text(context, sqlite3_sourceid(), -1, SQLITE_STATIC);
                   82979: }
                   82980: 
                   82981: /*
                   82982: ** Implementation of the sqlite_log() function.  This is a wrapper around
                   82983: ** sqlite3_log().  The return value is NULL.  The function exists purely for
                   82984: ** its side-effects.
                   82985: */
                   82986: static void errlogFunc(
                   82987:   sqlite3_context *context,
                   82988:   int argc,
                   82989:   sqlite3_value **argv
                   82990: ){
                   82991:   UNUSED_PARAMETER(argc);
                   82992:   UNUSED_PARAMETER(context);
                   82993:   sqlite3_log(sqlite3_value_int(argv[0]), "%s", sqlite3_value_text(argv[1]));
                   82994: }
                   82995: 
                   82996: /*
                   82997: ** Implementation of the sqlite_compileoption_used() function.
                   82998: ** The result is an integer that identifies if the compiler option
                   82999: ** was used to build SQLite.
                   83000: */
                   83001: #ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
                   83002: static void compileoptionusedFunc(
                   83003:   sqlite3_context *context,
                   83004:   int argc,
                   83005:   sqlite3_value **argv
                   83006: ){
                   83007:   const char *zOptName;
                   83008:   assert( argc==1 );
                   83009:   UNUSED_PARAMETER(argc);
                   83010:   /* IMP: R-39564-36305 The sqlite_compileoption_used() SQL
                   83011:   ** function is a wrapper around the sqlite3_compileoption_used() C/C++
                   83012:   ** function.
                   83013:   */
                   83014:   if( (zOptName = (const char*)sqlite3_value_text(argv[0]))!=0 ){
                   83015:     sqlite3_result_int(context, sqlite3_compileoption_used(zOptName));
                   83016:   }
                   83017: }
                   83018: #endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */
                   83019: 
                   83020: /*
                   83021: ** Implementation of the sqlite_compileoption_get() function. 
                   83022: ** The result is a string that identifies the compiler options 
                   83023: ** used to build SQLite.
                   83024: */
                   83025: #ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
                   83026: static void compileoptiongetFunc(
                   83027:   sqlite3_context *context,
                   83028:   int argc,
                   83029:   sqlite3_value **argv
                   83030: ){
                   83031:   int n;
                   83032:   assert( argc==1 );
                   83033:   UNUSED_PARAMETER(argc);
                   83034:   /* IMP: R-04922-24076 The sqlite_compileoption_get() SQL function
                   83035:   ** is a wrapper around the sqlite3_compileoption_get() C/C++ function.
                   83036:   */
                   83037:   n = sqlite3_value_int(argv[0]);
                   83038:   sqlite3_result_text(context, sqlite3_compileoption_get(n), -1, SQLITE_STATIC);
                   83039: }
                   83040: #endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */
                   83041: 
                   83042: /* Array for converting from half-bytes (nybbles) into ASCII hex
                   83043: ** digits. */
                   83044: static const char hexdigits[] = {
                   83045:   '0', '1', '2', '3', '4', '5', '6', '7',
                   83046:   '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' 
                   83047: };
                   83048: 
                   83049: /*
                   83050: ** EXPERIMENTAL - This is not an official function.  The interface may
                   83051: ** change.  This function may disappear.  Do not write code that depends
                   83052: ** on this function.
                   83053: **
                   83054: ** Implementation of the QUOTE() function.  This function takes a single
                   83055: ** argument.  If the argument is numeric, the return value is the same as
                   83056: ** the argument.  If the argument is NULL, the return value is the string
                   83057: ** "NULL".  Otherwise, the argument is enclosed in single quotes with
                   83058: ** single-quote escapes.
                   83059: */
                   83060: static void quoteFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
                   83061:   assert( argc==1 );
                   83062:   UNUSED_PARAMETER(argc);
                   83063:   switch( sqlite3_value_type(argv[0]) ){
                   83064:     case SQLITE_INTEGER:
                   83065:     case SQLITE_FLOAT: {
                   83066:       sqlite3_result_value(context, argv[0]);
                   83067:       break;
                   83068:     }
                   83069:     case SQLITE_BLOB: {
                   83070:       char *zText = 0;
                   83071:       char const *zBlob = sqlite3_value_blob(argv[0]);
                   83072:       int nBlob = sqlite3_value_bytes(argv[0]);
                   83073:       assert( zBlob==sqlite3_value_blob(argv[0]) ); /* No encoding change */
                   83074:       zText = (char *)contextMalloc(context, (2*(i64)nBlob)+4); 
                   83075:       if( zText ){
                   83076:         int i;
                   83077:         for(i=0; i<nBlob; i++){
                   83078:           zText[(i*2)+2] = hexdigits[(zBlob[i]>>4)&0x0F];
                   83079:           zText[(i*2)+3] = hexdigits[(zBlob[i])&0x0F];
                   83080:         }
                   83081:         zText[(nBlob*2)+2] = '\'';
                   83082:         zText[(nBlob*2)+3] = '\0';
                   83083:         zText[0] = 'X';
                   83084:         zText[1] = '\'';
                   83085:         sqlite3_result_text(context, zText, -1, SQLITE_TRANSIENT);
                   83086:         sqlite3_free(zText);
                   83087:       }
                   83088:       break;
                   83089:     }
                   83090:     case SQLITE_TEXT: {
                   83091:       int i,j;
                   83092:       u64 n;
                   83093:       const unsigned char *zArg = sqlite3_value_text(argv[0]);
                   83094:       char *z;
                   83095: 
                   83096:       if( zArg==0 ) return;
                   83097:       for(i=0, n=0; zArg[i]; i++){ if( zArg[i]=='\'' ) n++; }
                   83098:       z = contextMalloc(context, ((i64)i)+((i64)n)+3);
                   83099:       if( z ){
                   83100:         z[0] = '\'';
                   83101:         for(i=0, j=1; zArg[i]; i++){
                   83102:           z[j++] = zArg[i];
                   83103:           if( zArg[i]=='\'' ){
                   83104:             z[j++] = '\'';
                   83105:           }
                   83106:         }
                   83107:         z[j++] = '\'';
                   83108:         z[j] = 0;
                   83109:         sqlite3_result_text(context, z, j, sqlite3_free);
                   83110:       }
                   83111:       break;
                   83112:     }
                   83113:     default: {
                   83114:       assert( sqlite3_value_type(argv[0])==SQLITE_NULL );
                   83115:       sqlite3_result_text(context, "NULL", 4, SQLITE_STATIC);
                   83116:       break;
                   83117:     }
                   83118:   }
                   83119: }
                   83120: 
                   83121: /*
                   83122: ** The hex() function.  Interpret the argument as a blob.  Return
                   83123: ** a hexadecimal rendering as text.
                   83124: */
                   83125: static void hexFunc(
                   83126:   sqlite3_context *context,
                   83127:   int argc,
                   83128:   sqlite3_value **argv
                   83129: ){
                   83130:   int i, n;
                   83131:   const unsigned char *pBlob;
                   83132:   char *zHex, *z;
                   83133:   assert( argc==1 );
                   83134:   UNUSED_PARAMETER(argc);
                   83135:   pBlob = sqlite3_value_blob(argv[0]);
                   83136:   n = sqlite3_value_bytes(argv[0]);
                   83137:   assert( pBlob==sqlite3_value_blob(argv[0]) );  /* No encoding change */
                   83138:   z = zHex = contextMalloc(context, ((i64)n)*2 + 1);
                   83139:   if( zHex ){
                   83140:     for(i=0; i<n; i++, pBlob++){
                   83141:       unsigned char c = *pBlob;
                   83142:       *(z++) = hexdigits[(c>>4)&0xf];
                   83143:       *(z++) = hexdigits[c&0xf];
                   83144:     }
                   83145:     *z = 0;
                   83146:     sqlite3_result_text(context, zHex, n*2, sqlite3_free);
                   83147:   }
                   83148: }
                   83149: 
                   83150: /*
                   83151: ** The zeroblob(N) function returns a zero-filled blob of size N bytes.
                   83152: */
                   83153: static void zeroblobFunc(
                   83154:   sqlite3_context *context,
                   83155:   int argc,
                   83156:   sqlite3_value **argv
                   83157: ){
                   83158:   i64 n;
                   83159:   sqlite3 *db = sqlite3_context_db_handle(context);
                   83160:   assert( argc==1 );
                   83161:   UNUSED_PARAMETER(argc);
                   83162:   n = sqlite3_value_int64(argv[0]);
                   83163:   testcase( n==db->aLimit[SQLITE_LIMIT_LENGTH] );
                   83164:   testcase( n==db->aLimit[SQLITE_LIMIT_LENGTH]+1 );
                   83165:   if( n>db->aLimit[SQLITE_LIMIT_LENGTH] ){
                   83166:     sqlite3_result_error_toobig(context);
                   83167:   }else{
                   83168:     sqlite3_result_zeroblob(context, (int)n); /* IMP: R-00293-64994 */
                   83169:   }
                   83170: }
                   83171: 
                   83172: /*
                   83173: ** The replace() function.  Three arguments are all strings: call
                   83174: ** them A, B, and C. The result is also a string which is derived
1.1.1.3 ! misho    83175: ** from A by replacing every occurrence of B with C.  The match
1.1       misho    83176: ** must be exact.  Collating sequences are not used.
                   83177: */
                   83178: static void replaceFunc(
                   83179:   sqlite3_context *context,
                   83180:   int argc,
                   83181:   sqlite3_value **argv
                   83182: ){
                   83183:   const unsigned char *zStr;        /* The input string A */
                   83184:   const unsigned char *zPattern;    /* The pattern string B */
                   83185:   const unsigned char *zRep;        /* The replacement string C */
                   83186:   unsigned char *zOut;              /* The output */
                   83187:   int nStr;                /* Size of zStr */
                   83188:   int nPattern;            /* Size of zPattern */
                   83189:   int nRep;                /* Size of zRep */
                   83190:   i64 nOut;                /* Maximum size of zOut */
                   83191:   int loopLimit;           /* Last zStr[] that might match zPattern[] */
                   83192:   int i, j;                /* Loop counters */
                   83193: 
                   83194:   assert( argc==3 );
                   83195:   UNUSED_PARAMETER(argc);
                   83196:   zStr = sqlite3_value_text(argv[0]);
                   83197:   if( zStr==0 ) return;
                   83198:   nStr = sqlite3_value_bytes(argv[0]);
                   83199:   assert( zStr==sqlite3_value_text(argv[0]) );  /* No encoding change */
                   83200:   zPattern = sqlite3_value_text(argv[1]);
                   83201:   if( zPattern==0 ){
                   83202:     assert( sqlite3_value_type(argv[1])==SQLITE_NULL
                   83203:             || sqlite3_context_db_handle(context)->mallocFailed );
                   83204:     return;
                   83205:   }
                   83206:   if( zPattern[0]==0 ){
                   83207:     assert( sqlite3_value_type(argv[1])!=SQLITE_NULL );
                   83208:     sqlite3_result_value(context, argv[0]);
                   83209:     return;
                   83210:   }
                   83211:   nPattern = sqlite3_value_bytes(argv[1]);
                   83212:   assert( zPattern==sqlite3_value_text(argv[1]) );  /* No encoding change */
                   83213:   zRep = sqlite3_value_text(argv[2]);
                   83214:   if( zRep==0 ) return;
                   83215:   nRep = sqlite3_value_bytes(argv[2]);
                   83216:   assert( zRep==sqlite3_value_text(argv[2]) );
                   83217:   nOut = nStr + 1;
                   83218:   assert( nOut<SQLITE_MAX_LENGTH );
                   83219:   zOut = contextMalloc(context, (i64)nOut);
                   83220:   if( zOut==0 ){
                   83221:     return;
                   83222:   }
                   83223:   loopLimit = nStr - nPattern;  
                   83224:   for(i=j=0; i<=loopLimit; i++){
                   83225:     if( zStr[i]!=zPattern[0] || memcmp(&zStr[i], zPattern, nPattern) ){
                   83226:       zOut[j++] = zStr[i];
                   83227:     }else{
                   83228:       u8 *zOld;
                   83229:       sqlite3 *db = sqlite3_context_db_handle(context);
                   83230:       nOut += nRep - nPattern;
                   83231:       testcase( nOut-1==db->aLimit[SQLITE_LIMIT_LENGTH] );
                   83232:       testcase( nOut-2==db->aLimit[SQLITE_LIMIT_LENGTH] );
                   83233:       if( nOut-1>db->aLimit[SQLITE_LIMIT_LENGTH] ){
                   83234:         sqlite3_result_error_toobig(context);
                   83235:         sqlite3_free(zOut);
                   83236:         return;
                   83237:       }
                   83238:       zOld = zOut;
                   83239:       zOut = sqlite3_realloc(zOut, (int)nOut);
                   83240:       if( zOut==0 ){
                   83241:         sqlite3_result_error_nomem(context);
                   83242:         sqlite3_free(zOld);
                   83243:         return;
                   83244:       }
                   83245:       memcpy(&zOut[j], zRep, nRep);
                   83246:       j += nRep;
                   83247:       i += nPattern-1;
                   83248:     }
                   83249:   }
                   83250:   assert( j+nStr-i+1==nOut );
                   83251:   memcpy(&zOut[j], &zStr[i], nStr-i);
                   83252:   j += nStr - i;
                   83253:   assert( j<=nOut );
                   83254:   zOut[j] = 0;
                   83255:   sqlite3_result_text(context, (char*)zOut, j, sqlite3_free);
                   83256: }
                   83257: 
                   83258: /*
                   83259: ** Implementation of the TRIM(), LTRIM(), and RTRIM() functions.
                   83260: ** The userdata is 0x1 for left trim, 0x2 for right trim, 0x3 for both.
                   83261: */
                   83262: static void trimFunc(
                   83263:   sqlite3_context *context,
                   83264:   int argc,
                   83265:   sqlite3_value **argv
                   83266: ){
                   83267:   const unsigned char *zIn;         /* Input string */
                   83268:   const unsigned char *zCharSet;    /* Set of characters to trim */
                   83269:   int nIn;                          /* Number of bytes in input */
                   83270:   int flags;                        /* 1: trimleft  2: trimright  3: trim */
                   83271:   int i;                            /* Loop counter */
                   83272:   unsigned char *aLen = 0;          /* Length of each character in zCharSet */
                   83273:   unsigned char **azChar = 0;       /* Individual characters in zCharSet */
                   83274:   int nChar;                        /* Number of characters in zCharSet */
                   83275: 
                   83276:   if( sqlite3_value_type(argv[0])==SQLITE_NULL ){
                   83277:     return;
                   83278:   }
                   83279:   zIn = sqlite3_value_text(argv[0]);
                   83280:   if( zIn==0 ) return;
                   83281:   nIn = sqlite3_value_bytes(argv[0]);
                   83282:   assert( zIn==sqlite3_value_text(argv[0]) );
                   83283:   if( argc==1 ){
                   83284:     static const unsigned char lenOne[] = { 1 };
                   83285:     static unsigned char * const azOne[] = { (u8*)" " };
                   83286:     nChar = 1;
                   83287:     aLen = (u8*)lenOne;
                   83288:     azChar = (unsigned char **)azOne;
                   83289:     zCharSet = 0;
                   83290:   }else if( (zCharSet = sqlite3_value_text(argv[1]))==0 ){
                   83291:     return;
                   83292:   }else{
                   83293:     const unsigned char *z;
                   83294:     for(z=zCharSet, nChar=0; *z; nChar++){
                   83295:       SQLITE_SKIP_UTF8(z);
                   83296:     }
                   83297:     if( nChar>0 ){
                   83298:       azChar = contextMalloc(context, ((i64)nChar)*(sizeof(char*)+1));
                   83299:       if( azChar==0 ){
                   83300:         return;
                   83301:       }
                   83302:       aLen = (unsigned char*)&azChar[nChar];
                   83303:       for(z=zCharSet, nChar=0; *z; nChar++){
                   83304:         azChar[nChar] = (unsigned char *)z;
                   83305:         SQLITE_SKIP_UTF8(z);
                   83306:         aLen[nChar] = (u8)(z - azChar[nChar]);
                   83307:       }
                   83308:     }
                   83309:   }
                   83310:   if( nChar>0 ){
                   83311:     flags = SQLITE_PTR_TO_INT(sqlite3_user_data(context));
                   83312:     if( flags & 1 ){
                   83313:       while( nIn>0 ){
                   83314:         int len = 0;
                   83315:         for(i=0; i<nChar; i++){
                   83316:           len = aLen[i];
                   83317:           if( len<=nIn && memcmp(zIn, azChar[i], len)==0 ) break;
                   83318:         }
                   83319:         if( i>=nChar ) break;
                   83320:         zIn += len;
                   83321:         nIn -= len;
                   83322:       }
                   83323:     }
                   83324:     if( flags & 2 ){
                   83325:       while( nIn>0 ){
                   83326:         int len = 0;
                   83327:         for(i=0; i<nChar; i++){
                   83328:           len = aLen[i];
                   83329:           if( len<=nIn && memcmp(&zIn[nIn-len],azChar[i],len)==0 ) break;
                   83330:         }
                   83331:         if( i>=nChar ) break;
                   83332:         nIn -= len;
                   83333:       }
                   83334:     }
                   83335:     if( zCharSet ){
                   83336:       sqlite3_free(azChar);
                   83337:     }
                   83338:   }
                   83339:   sqlite3_result_text(context, (char*)zIn, nIn, SQLITE_TRANSIENT);
                   83340: }
                   83341: 
                   83342: 
                   83343: /* IMP: R-25361-16150 This function is omitted from SQLite by default. It
                   83344: ** is only available if the SQLITE_SOUNDEX compile-time option is used
                   83345: ** when SQLite is built.
                   83346: */
                   83347: #ifdef SQLITE_SOUNDEX
                   83348: /*
                   83349: ** Compute the soundex encoding of a word.
                   83350: **
                   83351: ** IMP: R-59782-00072 The soundex(X) function returns a string that is the
                   83352: ** soundex encoding of the string X. 
                   83353: */
                   83354: static void soundexFunc(
                   83355:   sqlite3_context *context,
                   83356:   int argc,
                   83357:   sqlite3_value **argv
                   83358: ){
                   83359:   char zResult[8];
                   83360:   const u8 *zIn;
                   83361:   int i, j;
                   83362:   static const unsigned char iCode[] = {
                   83363:     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                   83364:     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                   83365:     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                   83366:     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                   83367:     0, 0, 1, 2, 3, 0, 1, 2, 0, 0, 2, 2, 4, 5, 5, 0,
                   83368:     1, 2, 6, 2, 3, 0, 1, 0, 2, 0, 2, 0, 0, 0, 0, 0,
                   83369:     0, 0, 1, 2, 3, 0, 1, 2, 0, 0, 2, 2, 4, 5, 5, 0,
                   83370:     1, 2, 6, 2, 3, 0, 1, 0, 2, 0, 2, 0, 0, 0, 0, 0,
                   83371:   };
                   83372:   assert( argc==1 );
                   83373:   zIn = (u8*)sqlite3_value_text(argv[0]);
                   83374:   if( zIn==0 ) zIn = (u8*)"";
                   83375:   for(i=0; zIn[i] && !sqlite3Isalpha(zIn[i]); i++){}
                   83376:   if( zIn[i] ){
                   83377:     u8 prevcode = iCode[zIn[i]&0x7f];
                   83378:     zResult[0] = sqlite3Toupper(zIn[i]);
                   83379:     for(j=1; j<4 && zIn[i]; i++){
                   83380:       int code = iCode[zIn[i]&0x7f];
                   83381:       if( code>0 ){
                   83382:         if( code!=prevcode ){
                   83383:           prevcode = code;
                   83384:           zResult[j++] = code + '0';
                   83385:         }
                   83386:       }else{
                   83387:         prevcode = 0;
                   83388:       }
                   83389:     }
                   83390:     while( j<4 ){
                   83391:       zResult[j++] = '0';
                   83392:     }
                   83393:     zResult[j] = 0;
                   83394:     sqlite3_result_text(context, zResult, 4, SQLITE_TRANSIENT);
                   83395:   }else{
                   83396:     /* IMP: R-64894-50321 The string "?000" is returned if the argument
                   83397:     ** is NULL or contains no ASCII alphabetic characters. */
                   83398:     sqlite3_result_text(context, "?000", 4, SQLITE_STATIC);
                   83399:   }
                   83400: }
                   83401: #endif /* SQLITE_SOUNDEX */
                   83402: 
                   83403: #ifndef SQLITE_OMIT_LOAD_EXTENSION
                   83404: /*
                   83405: ** A function that loads a shared-library extension then returns NULL.
                   83406: */
                   83407: static void loadExt(sqlite3_context *context, int argc, sqlite3_value **argv){
                   83408:   const char *zFile = (const char *)sqlite3_value_text(argv[0]);
                   83409:   const char *zProc;
                   83410:   sqlite3 *db = sqlite3_context_db_handle(context);
                   83411:   char *zErrMsg = 0;
                   83412: 
                   83413:   if( argc==2 ){
                   83414:     zProc = (const char *)sqlite3_value_text(argv[1]);
                   83415:   }else{
                   83416:     zProc = 0;
                   83417:   }
                   83418:   if( zFile && sqlite3_load_extension(db, zFile, zProc, &zErrMsg) ){
                   83419:     sqlite3_result_error(context, zErrMsg, -1);
                   83420:     sqlite3_free(zErrMsg);
                   83421:   }
                   83422: }
                   83423: #endif
                   83424: 
                   83425: 
                   83426: /*
                   83427: ** An instance of the following structure holds the context of a
                   83428: ** sum() or avg() aggregate computation.
                   83429: */
                   83430: typedef struct SumCtx SumCtx;
                   83431: struct SumCtx {
                   83432:   double rSum;      /* Floating point sum */
                   83433:   i64 iSum;         /* Integer sum */   
                   83434:   i64 cnt;          /* Number of elements summed */
                   83435:   u8 overflow;      /* True if integer overflow seen */
                   83436:   u8 approx;        /* True if non-integer value was input to the sum */
                   83437: };
                   83438: 
                   83439: /*
                   83440: ** Routines used to compute the sum, average, and total.
                   83441: **
                   83442: ** The SUM() function follows the (broken) SQL standard which means
                   83443: ** that it returns NULL if it sums over no inputs.  TOTAL returns
                   83444: ** 0.0 in that case.  In addition, TOTAL always returns a float where
                   83445: ** SUM might return an integer if it never encounters a floating point
                   83446: ** value.  TOTAL never fails, but SUM might through an exception if
                   83447: ** it overflows an integer.
                   83448: */
                   83449: static void sumStep(sqlite3_context *context, int argc, sqlite3_value **argv){
                   83450:   SumCtx *p;
                   83451:   int type;
                   83452:   assert( argc==1 );
                   83453:   UNUSED_PARAMETER(argc);
                   83454:   p = sqlite3_aggregate_context(context, sizeof(*p));
                   83455:   type = sqlite3_value_numeric_type(argv[0]);
                   83456:   if( p && type!=SQLITE_NULL ){
                   83457:     p->cnt++;
                   83458:     if( type==SQLITE_INTEGER ){
                   83459:       i64 v = sqlite3_value_int64(argv[0]);
                   83460:       p->rSum += v;
                   83461:       if( (p->approx|p->overflow)==0 && sqlite3AddInt64(&p->iSum, v) ){
                   83462:         p->overflow = 1;
                   83463:       }
                   83464:     }else{
                   83465:       p->rSum += sqlite3_value_double(argv[0]);
                   83466:       p->approx = 1;
                   83467:     }
                   83468:   }
                   83469: }
                   83470: static void sumFinalize(sqlite3_context *context){
                   83471:   SumCtx *p;
                   83472:   p = sqlite3_aggregate_context(context, 0);
                   83473:   if( p && p->cnt>0 ){
                   83474:     if( p->overflow ){
                   83475:       sqlite3_result_error(context,"integer overflow",-1);
                   83476:     }else if( p->approx ){
                   83477:       sqlite3_result_double(context, p->rSum);
                   83478:     }else{
                   83479:       sqlite3_result_int64(context, p->iSum);
                   83480:     }
                   83481:   }
                   83482: }
                   83483: static void avgFinalize(sqlite3_context *context){
                   83484:   SumCtx *p;
                   83485:   p = sqlite3_aggregate_context(context, 0);
                   83486:   if( p && p->cnt>0 ){
                   83487:     sqlite3_result_double(context, p->rSum/(double)p->cnt);
                   83488:   }
                   83489: }
                   83490: static void totalFinalize(sqlite3_context *context){
                   83491:   SumCtx *p;
                   83492:   p = sqlite3_aggregate_context(context, 0);
                   83493:   /* (double)0 In case of SQLITE_OMIT_FLOATING_POINT... */
                   83494:   sqlite3_result_double(context, p ? p->rSum : (double)0);
                   83495: }
                   83496: 
                   83497: /*
                   83498: ** The following structure keeps track of state information for the
                   83499: ** count() aggregate function.
                   83500: */
                   83501: typedef struct CountCtx CountCtx;
                   83502: struct CountCtx {
                   83503:   i64 n;
                   83504: };
                   83505: 
                   83506: /*
                   83507: ** Routines to implement the count() aggregate function.
                   83508: */
                   83509: static void countStep(sqlite3_context *context, int argc, sqlite3_value **argv){
                   83510:   CountCtx *p;
                   83511:   p = sqlite3_aggregate_context(context, sizeof(*p));
                   83512:   if( (argc==0 || SQLITE_NULL!=sqlite3_value_type(argv[0])) && p ){
                   83513:     p->n++;
                   83514:   }
                   83515: 
                   83516: #ifndef SQLITE_OMIT_DEPRECATED
                   83517:   /* The sqlite3_aggregate_count() function is deprecated.  But just to make
                   83518:   ** sure it still operates correctly, verify that its count agrees with our 
                   83519:   ** internal count when using count(*) and when the total count can be
                   83520:   ** expressed as a 32-bit integer. */
                   83521:   assert( argc==1 || p==0 || p->n>0x7fffffff
                   83522:           || p->n==sqlite3_aggregate_count(context) );
                   83523: #endif
                   83524: }   
                   83525: static void countFinalize(sqlite3_context *context){
                   83526:   CountCtx *p;
                   83527:   p = sqlite3_aggregate_context(context, 0);
                   83528:   sqlite3_result_int64(context, p ? p->n : 0);
                   83529: }
                   83530: 
                   83531: /*
                   83532: ** Routines to implement min() and max() aggregate functions.
                   83533: */
                   83534: static void minmaxStep(
                   83535:   sqlite3_context *context, 
                   83536:   int NotUsed, 
                   83537:   sqlite3_value **argv
                   83538: ){
                   83539:   Mem *pArg  = (Mem *)argv[0];
                   83540:   Mem *pBest;
                   83541:   UNUSED_PARAMETER(NotUsed);
                   83542: 
                   83543:   if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
                   83544:   pBest = (Mem *)sqlite3_aggregate_context(context, sizeof(*pBest));
                   83545:   if( !pBest ) return;
                   83546: 
                   83547:   if( pBest->flags ){
                   83548:     int max;
                   83549:     int cmp;
                   83550:     CollSeq *pColl = sqlite3GetFuncCollSeq(context);
                   83551:     /* This step function is used for both the min() and max() aggregates,
                   83552:     ** the only difference between the two being that the sense of the
                   83553:     ** comparison is inverted. For the max() aggregate, the
                   83554:     ** sqlite3_user_data() function returns (void *)-1. For min() it
                   83555:     ** returns (void *)db, where db is the sqlite3* database pointer.
                   83556:     ** Therefore the next statement sets variable 'max' to 1 for the max()
                   83557:     ** aggregate, or 0 for min().
                   83558:     */
                   83559:     max = sqlite3_user_data(context)!=0;
                   83560:     cmp = sqlite3MemCompare(pBest, pArg, pColl);
                   83561:     if( (max && cmp<0) || (!max && cmp>0) ){
                   83562:       sqlite3VdbeMemCopy(pBest, pArg);
                   83563:     }
                   83564:   }else{
                   83565:     sqlite3VdbeMemCopy(pBest, pArg);
                   83566:   }
                   83567: }
                   83568: static void minMaxFinalize(sqlite3_context *context){
                   83569:   sqlite3_value *pRes;
                   83570:   pRes = (sqlite3_value *)sqlite3_aggregate_context(context, 0);
                   83571:   if( pRes ){
                   83572:     if( ALWAYS(pRes->flags) ){
                   83573:       sqlite3_result_value(context, pRes);
                   83574:     }
                   83575:     sqlite3VdbeMemRelease(pRes);
                   83576:   }
                   83577: }
                   83578: 
                   83579: /*
                   83580: ** group_concat(EXPR, ?SEPARATOR?)
                   83581: */
                   83582: static void groupConcatStep(
                   83583:   sqlite3_context *context,
                   83584:   int argc,
                   83585:   sqlite3_value **argv
                   83586: ){
                   83587:   const char *zVal;
                   83588:   StrAccum *pAccum;
                   83589:   const char *zSep;
                   83590:   int nVal, nSep;
                   83591:   assert( argc==1 || argc==2 );
                   83592:   if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
                   83593:   pAccum = (StrAccum*)sqlite3_aggregate_context(context, sizeof(*pAccum));
                   83594: 
                   83595:   if( pAccum ){
                   83596:     sqlite3 *db = sqlite3_context_db_handle(context);
                   83597:     int firstTerm = pAccum->useMalloc==0;
                   83598:     pAccum->useMalloc = 2;
                   83599:     pAccum->mxAlloc = db->aLimit[SQLITE_LIMIT_LENGTH];
                   83600:     if( !firstTerm ){
                   83601:       if( argc==2 ){
                   83602:         zSep = (char*)sqlite3_value_text(argv[1]);
                   83603:         nSep = sqlite3_value_bytes(argv[1]);
                   83604:       }else{
                   83605:         zSep = ",";
                   83606:         nSep = 1;
                   83607:       }
                   83608:       sqlite3StrAccumAppend(pAccum, zSep, nSep);
                   83609:     }
                   83610:     zVal = (char*)sqlite3_value_text(argv[0]);
                   83611:     nVal = sqlite3_value_bytes(argv[0]);
                   83612:     sqlite3StrAccumAppend(pAccum, zVal, nVal);
                   83613:   }
                   83614: }
                   83615: static void groupConcatFinalize(sqlite3_context *context){
                   83616:   StrAccum *pAccum;
                   83617:   pAccum = sqlite3_aggregate_context(context, 0);
                   83618:   if( pAccum ){
                   83619:     if( pAccum->tooBig ){
                   83620:       sqlite3_result_error_toobig(context);
                   83621:     }else if( pAccum->mallocFailed ){
                   83622:       sqlite3_result_error_nomem(context);
                   83623:     }else{    
                   83624:       sqlite3_result_text(context, sqlite3StrAccumFinish(pAccum), -1, 
                   83625:                           sqlite3_free);
                   83626:     }
                   83627:   }
                   83628: }
                   83629: 
                   83630: /*
                   83631: ** This routine does per-connection function registration.  Most
                   83632: ** of the built-in functions above are part of the global function set.
                   83633: ** This routine only deals with those that are not global.
                   83634: */
                   83635: SQLITE_PRIVATE void sqlite3RegisterBuiltinFunctions(sqlite3 *db){
                   83636:   int rc = sqlite3_overload_function(db, "MATCH", 2);
                   83637:   assert( rc==SQLITE_NOMEM || rc==SQLITE_OK );
                   83638:   if( rc==SQLITE_NOMEM ){
                   83639:     db->mallocFailed = 1;
                   83640:   }
                   83641: }
                   83642: 
                   83643: /*
                   83644: ** Set the LIKEOPT flag on the 2-argument function with the given name.
                   83645: */
                   83646: static void setLikeOptFlag(sqlite3 *db, const char *zName, u8 flagVal){
                   83647:   FuncDef *pDef;
                   83648:   pDef = sqlite3FindFunction(db, zName, sqlite3Strlen30(zName),
                   83649:                              2, SQLITE_UTF8, 0);
                   83650:   if( ALWAYS(pDef) ){
                   83651:     pDef->flags = flagVal;
                   83652:   }
                   83653: }
                   83654: 
                   83655: /*
                   83656: ** Register the built-in LIKE and GLOB functions.  The caseSensitive
                   83657: ** parameter determines whether or not the LIKE operator is case
                   83658: ** sensitive.  GLOB is always case sensitive.
                   83659: */
                   83660: SQLITE_PRIVATE void sqlite3RegisterLikeFunctions(sqlite3 *db, int caseSensitive){
                   83661:   struct compareInfo *pInfo;
                   83662:   if( caseSensitive ){
                   83663:     pInfo = (struct compareInfo*)&likeInfoAlt;
                   83664:   }else{
                   83665:     pInfo = (struct compareInfo*)&likeInfoNorm;
                   83666:   }
                   83667:   sqlite3CreateFunc(db, "like", 2, SQLITE_UTF8, pInfo, likeFunc, 0, 0, 0);
                   83668:   sqlite3CreateFunc(db, "like", 3, SQLITE_UTF8, pInfo, likeFunc, 0, 0, 0);
                   83669:   sqlite3CreateFunc(db, "glob", 2, SQLITE_UTF8, 
                   83670:       (struct compareInfo*)&globInfo, likeFunc, 0, 0, 0);
                   83671:   setLikeOptFlag(db, "glob", SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE);
                   83672:   setLikeOptFlag(db, "like", 
                   83673:       caseSensitive ? (SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE) : SQLITE_FUNC_LIKE);
                   83674: }
                   83675: 
                   83676: /*
                   83677: ** pExpr points to an expression which implements a function.  If
                   83678: ** it is appropriate to apply the LIKE optimization to that function
                   83679: ** then set aWc[0] through aWc[2] to the wildcard characters and
                   83680: ** return TRUE.  If the function is not a LIKE-style function then
                   83681: ** return FALSE.
                   83682: */
                   83683: SQLITE_PRIVATE int sqlite3IsLikeFunction(sqlite3 *db, Expr *pExpr, int *pIsNocase, char *aWc){
                   83684:   FuncDef *pDef;
                   83685:   if( pExpr->op!=TK_FUNCTION 
                   83686:    || !pExpr->x.pList 
                   83687:    || pExpr->x.pList->nExpr!=2
                   83688:   ){
                   83689:     return 0;
                   83690:   }
                   83691:   assert( !ExprHasProperty(pExpr, EP_xIsSelect) );
                   83692:   pDef = sqlite3FindFunction(db, pExpr->u.zToken, 
                   83693:                              sqlite3Strlen30(pExpr->u.zToken),
                   83694:                              2, SQLITE_UTF8, 0);
                   83695:   if( NEVER(pDef==0) || (pDef->flags & SQLITE_FUNC_LIKE)==0 ){
                   83696:     return 0;
                   83697:   }
                   83698: 
                   83699:   /* The memcpy() statement assumes that the wildcard characters are
                   83700:   ** the first three statements in the compareInfo structure.  The
                   83701:   ** asserts() that follow verify that assumption
                   83702:   */
                   83703:   memcpy(aWc, pDef->pUserData, 3);
                   83704:   assert( (char*)&likeInfoAlt == (char*)&likeInfoAlt.matchAll );
                   83705:   assert( &((char*)&likeInfoAlt)[1] == (char*)&likeInfoAlt.matchOne );
                   83706:   assert( &((char*)&likeInfoAlt)[2] == (char*)&likeInfoAlt.matchSet );
                   83707:   *pIsNocase = (pDef->flags & SQLITE_FUNC_CASE)==0;
                   83708:   return 1;
                   83709: }
                   83710: 
                   83711: /*
                   83712: ** All all of the FuncDef structures in the aBuiltinFunc[] array above
                   83713: ** to the global function hash table.  This occurs at start-time (as
                   83714: ** a consequence of calling sqlite3_initialize()).
                   83715: **
                   83716: ** After this routine runs
                   83717: */
                   83718: SQLITE_PRIVATE void sqlite3RegisterGlobalFunctions(void){
                   83719:   /*
                   83720:   ** The following array holds FuncDef structures for all of the functions
                   83721:   ** defined in this file.
                   83722:   **
                   83723:   ** The array cannot be constant since changes are made to the
                   83724:   ** FuncDef.pHash elements at start-time.  The elements of this array
                   83725:   ** are read-only after initialization is complete.
                   83726:   */
                   83727:   static SQLITE_WSD FuncDef aBuiltinFunc[] = {
                   83728:     FUNCTION(ltrim,              1, 1, 0, trimFunc         ),
                   83729:     FUNCTION(ltrim,              2, 1, 0, trimFunc         ),
                   83730:     FUNCTION(rtrim,              1, 2, 0, trimFunc         ),
                   83731:     FUNCTION(rtrim,              2, 2, 0, trimFunc         ),
                   83732:     FUNCTION(trim,               1, 3, 0, trimFunc         ),
                   83733:     FUNCTION(trim,               2, 3, 0, trimFunc         ),
                   83734:     FUNCTION(min,               -1, 0, 1, minmaxFunc       ),
                   83735:     FUNCTION(min,                0, 0, 1, 0                ),
                   83736:     AGGREGATE(min,               1, 0, 1, minmaxStep,      minMaxFinalize ),
                   83737:     FUNCTION(max,               -1, 1, 1, minmaxFunc       ),
                   83738:     FUNCTION(max,                0, 1, 1, 0                ),
                   83739:     AGGREGATE(max,               1, 1, 1, minmaxStep,      minMaxFinalize ),
                   83740:     FUNCTION(typeof,             1, 0, 0, typeofFunc       ),
                   83741:     FUNCTION(length,             1, 0, 0, lengthFunc       ),
                   83742:     FUNCTION(substr,             2, 0, 0, substrFunc       ),
                   83743:     FUNCTION(substr,             3, 0, 0, substrFunc       ),
                   83744:     FUNCTION(abs,                1, 0, 0, absFunc          ),
                   83745: #ifndef SQLITE_OMIT_FLOATING_POINT
                   83746:     FUNCTION(round,              1, 0, 0, roundFunc        ),
                   83747:     FUNCTION(round,              2, 0, 0, roundFunc        ),
                   83748: #endif
                   83749:     FUNCTION(upper,              1, 0, 0, upperFunc        ),
                   83750:     FUNCTION(lower,              1, 0, 0, lowerFunc        ),
                   83751:     FUNCTION(coalesce,           1, 0, 0, 0                ),
                   83752:     FUNCTION(coalesce,           0, 0, 0, 0                ),
                   83753: /*  FUNCTION(coalesce,          -1, 0, 0, ifnullFunc       ), */
                   83754:     {-1,SQLITE_UTF8,SQLITE_FUNC_COALESCE,0,0,ifnullFunc,0,0,"coalesce",0,0},
                   83755:     FUNCTION(hex,                1, 0, 0, hexFunc          ),
                   83756: /*  FUNCTION(ifnull,             2, 0, 0, ifnullFunc       ), */
                   83757:     {2,SQLITE_UTF8,SQLITE_FUNC_COALESCE,0,0,ifnullFunc,0,0,"ifnull",0,0},
                   83758:     FUNCTION(random,             0, 0, 0, randomFunc       ),
                   83759:     FUNCTION(randomblob,         1, 0, 0, randomBlob       ),
                   83760:     FUNCTION(nullif,             2, 0, 1, nullifFunc       ),
                   83761:     FUNCTION(sqlite_version,     0, 0, 0, versionFunc      ),
                   83762:     FUNCTION(sqlite_source_id,   0, 0, 0, sourceidFunc     ),
                   83763:     FUNCTION(sqlite_log,         2, 0, 0, errlogFunc       ),
                   83764: #ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
                   83765:     FUNCTION(sqlite_compileoption_used,1, 0, 0, compileoptionusedFunc  ),
                   83766:     FUNCTION(sqlite_compileoption_get, 1, 0, 0, compileoptiongetFunc  ),
                   83767: #endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */
                   83768:     FUNCTION(quote,              1, 0, 0, quoteFunc        ),
                   83769:     FUNCTION(last_insert_rowid,  0, 0, 0, last_insert_rowid),
                   83770:     FUNCTION(changes,            0, 0, 0, changes          ),
                   83771:     FUNCTION(total_changes,      0, 0, 0, total_changes    ),
                   83772:     FUNCTION(replace,            3, 0, 0, replaceFunc      ),
                   83773:     FUNCTION(zeroblob,           1, 0, 0, zeroblobFunc     ),
                   83774:   #ifdef SQLITE_SOUNDEX
                   83775:     FUNCTION(soundex,            1, 0, 0, soundexFunc      ),
                   83776:   #endif
                   83777:   #ifndef SQLITE_OMIT_LOAD_EXTENSION
                   83778:     FUNCTION(load_extension,     1, 0, 0, loadExt          ),
                   83779:     FUNCTION(load_extension,     2, 0, 0, loadExt          ),
                   83780:   #endif
                   83781:     AGGREGATE(sum,               1, 0, 0, sumStep,         sumFinalize    ),
                   83782:     AGGREGATE(total,             1, 0, 0, sumStep,         totalFinalize    ),
                   83783:     AGGREGATE(avg,               1, 0, 0, sumStep,         avgFinalize    ),
                   83784:  /* AGGREGATE(count,             0, 0, 0, countStep,       countFinalize  ), */
                   83785:     {0,SQLITE_UTF8,SQLITE_FUNC_COUNT,0,0,0,countStep,countFinalize,"count",0,0},
                   83786:     AGGREGATE(count,             1, 0, 0, countStep,       countFinalize  ),
                   83787:     AGGREGATE(group_concat,      1, 0, 0, groupConcatStep, groupConcatFinalize),
                   83788:     AGGREGATE(group_concat,      2, 0, 0, groupConcatStep, groupConcatFinalize),
                   83789:   
                   83790:     LIKEFUNC(glob, 2, &globInfo, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE),
                   83791:   #ifdef SQLITE_CASE_SENSITIVE_LIKE
                   83792:     LIKEFUNC(like, 2, &likeInfoAlt, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE),
                   83793:     LIKEFUNC(like, 3, &likeInfoAlt, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE),
                   83794:   #else
                   83795:     LIKEFUNC(like, 2, &likeInfoNorm, SQLITE_FUNC_LIKE),
                   83796:     LIKEFUNC(like, 3, &likeInfoNorm, SQLITE_FUNC_LIKE),
                   83797:   #endif
                   83798:   };
                   83799: 
                   83800:   int i;
                   83801:   FuncDefHash *pHash = &GLOBAL(FuncDefHash, sqlite3GlobalFunctions);
                   83802:   FuncDef *aFunc = (FuncDef*)&GLOBAL(FuncDef, aBuiltinFunc);
                   83803: 
                   83804:   for(i=0; i<ArraySize(aBuiltinFunc); i++){
                   83805:     sqlite3FuncDefInsert(pHash, &aFunc[i]);
                   83806:   }
                   83807:   sqlite3RegisterDateTimeFunctions();
                   83808: #ifndef SQLITE_OMIT_ALTERTABLE
                   83809:   sqlite3AlterFunctions();
                   83810: #endif
                   83811: }
                   83812: 
                   83813: /************** End of func.c ************************************************/
                   83814: /************** Begin file fkey.c ********************************************/
                   83815: /*
                   83816: **
                   83817: ** The author disclaims copyright to this source code.  In place of
                   83818: ** a legal notice, here is a blessing:
                   83819: **
                   83820: **    May you do good and not evil.
                   83821: **    May you find forgiveness for yourself and forgive others.
                   83822: **    May you share freely, never taking more than you give.
                   83823: **
                   83824: *************************************************************************
                   83825: ** This file contains code used by the compiler to add foreign key
                   83826: ** support to compiled SQL statements.
                   83827: */
                   83828: 
                   83829: #ifndef SQLITE_OMIT_FOREIGN_KEY
                   83830: #ifndef SQLITE_OMIT_TRIGGER
                   83831: 
                   83832: /*
                   83833: ** Deferred and Immediate FKs
                   83834: ** --------------------------
                   83835: **
                   83836: ** Foreign keys in SQLite come in two flavours: deferred and immediate.
                   83837: ** If an immediate foreign key constraint is violated, SQLITE_CONSTRAINT
                   83838: ** is returned and the current statement transaction rolled back. If a 
                   83839: ** deferred foreign key constraint is violated, no action is taken 
                   83840: ** immediately. However if the application attempts to commit the 
                   83841: ** transaction before fixing the constraint violation, the attempt fails.
                   83842: **
                   83843: ** Deferred constraints are implemented using a simple counter associated
                   83844: ** with the database handle. The counter is set to zero each time a 
                   83845: ** database transaction is opened. Each time a statement is executed 
                   83846: ** that causes a foreign key violation, the counter is incremented. Each
                   83847: ** time a statement is executed that removes an existing violation from
                   83848: ** the database, the counter is decremented. When the transaction is
                   83849: ** committed, the commit fails if the current value of the counter is
                   83850: ** greater than zero. This scheme has two big drawbacks:
                   83851: **
                   83852: **   * When a commit fails due to a deferred foreign key constraint, 
                   83853: **     there is no way to tell which foreign constraint is not satisfied,
                   83854: **     or which row it is not satisfied for.
                   83855: **
                   83856: **   * If the database contains foreign key violations when the 
                   83857: **     transaction is opened, this may cause the mechanism to malfunction.
                   83858: **
                   83859: ** Despite these problems, this approach is adopted as it seems simpler
                   83860: ** than the alternatives.
                   83861: **
                   83862: ** INSERT operations:
                   83863: **
                   83864: **   I.1) For each FK for which the table is the child table, search
                   83865: **        the parent table for a match. If none is found increment the
                   83866: **        constraint counter.
                   83867: **
                   83868: **   I.2) For each FK for which the table is the parent table, 
                   83869: **        search the child table for rows that correspond to the new
                   83870: **        row in the parent table. Decrement the counter for each row
                   83871: **        found (as the constraint is now satisfied).
                   83872: **
                   83873: ** DELETE operations:
                   83874: **
                   83875: **   D.1) For each FK for which the table is the child table, 
                   83876: **        search the parent table for a row that corresponds to the 
                   83877: **        deleted row in the child table. If such a row is not found, 
                   83878: **        decrement the counter.
                   83879: **
                   83880: **   D.2) For each FK for which the table is the parent table, search 
                   83881: **        the child table for rows that correspond to the deleted row 
                   83882: **        in the parent table. For each found increment the counter.
                   83883: **
                   83884: ** UPDATE operations:
                   83885: **
                   83886: **   An UPDATE command requires that all 4 steps above are taken, but only
                   83887: **   for FK constraints for which the affected columns are actually 
                   83888: **   modified (values must be compared at runtime).
                   83889: **
                   83890: ** Note that I.1 and D.1 are very similar operations, as are I.2 and D.2.
                   83891: ** This simplifies the implementation a bit.
                   83892: **
                   83893: ** For the purposes of immediate FK constraints, the OR REPLACE conflict
                   83894: ** resolution is considered to delete rows before the new row is inserted.
                   83895: ** If a delete caused by OR REPLACE violates an FK constraint, an exception
                   83896: ** is thrown, even if the FK constraint would be satisfied after the new 
                   83897: ** row is inserted.
                   83898: **
                   83899: ** Immediate constraints are usually handled similarly. The only difference 
                   83900: ** is that the counter used is stored as part of each individual statement
                   83901: ** object (struct Vdbe). If, after the statement has run, its immediate
                   83902: ** constraint counter is greater than zero, it returns SQLITE_CONSTRAINT
                   83903: ** and the statement transaction is rolled back. An exception is an INSERT
                   83904: ** statement that inserts a single row only (no triggers). In this case,
                   83905: ** instead of using a counter, an exception is thrown immediately if the
                   83906: ** INSERT violates a foreign key constraint. This is necessary as such
                   83907: ** an INSERT does not open a statement transaction.
                   83908: **
                   83909: ** TODO: How should dropping a table be handled? How should renaming a 
                   83910: ** table be handled?
                   83911: **
                   83912: **
                   83913: ** Query API Notes
                   83914: ** ---------------
                   83915: **
                   83916: ** Before coding an UPDATE or DELETE row operation, the code-generator
                   83917: ** for those two operations needs to know whether or not the operation
                   83918: ** requires any FK processing and, if so, which columns of the original
                   83919: ** row are required by the FK processing VDBE code (i.e. if FKs were
                   83920: ** implemented using triggers, which of the old.* columns would be 
                   83921: ** accessed). No information is required by the code-generator before
                   83922: ** coding an INSERT operation. The functions used by the UPDATE/DELETE
                   83923: ** generation code to query for this information are:
                   83924: **
                   83925: **   sqlite3FkRequired() - Test to see if FK processing is required.
                   83926: **   sqlite3FkOldmask()  - Query for the set of required old.* columns.
                   83927: **
                   83928: **
                   83929: ** Externally accessible module functions
                   83930: ** --------------------------------------
                   83931: **
                   83932: **   sqlite3FkCheck()    - Check for foreign key violations.
                   83933: **   sqlite3FkActions()  - Code triggers for ON UPDATE/ON DELETE actions.
                   83934: **   sqlite3FkDelete()   - Delete an FKey structure.
                   83935: */
                   83936: 
                   83937: /*
                   83938: ** VDBE Calling Convention
                   83939: ** -----------------------
                   83940: **
                   83941: ** Example:
                   83942: **
                   83943: **   For the following INSERT statement:
                   83944: **
                   83945: **     CREATE TABLE t1(a, b INTEGER PRIMARY KEY, c);
                   83946: **     INSERT INTO t1 VALUES(1, 2, 3.1);
                   83947: **
                   83948: **   Register (x):        2    (type integer)
                   83949: **   Register (x+1):      1    (type integer)
                   83950: **   Register (x+2):      NULL (type NULL)
                   83951: **   Register (x+3):      3.1  (type real)
                   83952: */
                   83953: 
                   83954: /*
                   83955: ** A foreign key constraint requires that the key columns in the parent
                   83956: ** table are collectively subject to a UNIQUE or PRIMARY KEY constraint.
                   83957: ** Given that pParent is the parent table for foreign key constraint pFKey, 
                   83958: ** search the schema a unique index on the parent key columns. 
                   83959: **
                   83960: ** If successful, zero is returned. If the parent key is an INTEGER PRIMARY 
                   83961: ** KEY column, then output variable *ppIdx is set to NULL. Otherwise, *ppIdx 
                   83962: ** is set to point to the unique index. 
                   83963: ** 
                   83964: ** If the parent key consists of a single column (the foreign key constraint
                   83965: ** is not a composite foreign key), output variable *paiCol is set to NULL.
                   83966: ** Otherwise, it is set to point to an allocated array of size N, where
                   83967: ** N is the number of columns in the parent key. The first element of the
                   83968: ** array is the index of the child table column that is mapped by the FK
                   83969: ** constraint to the parent table column stored in the left-most column
                   83970: ** of index *ppIdx. The second element of the array is the index of the
                   83971: ** child table column that corresponds to the second left-most column of
                   83972: ** *ppIdx, and so on.
                   83973: **
                   83974: ** If the required index cannot be found, either because:
                   83975: **
                   83976: **   1) The named parent key columns do not exist, or
                   83977: **
                   83978: **   2) The named parent key columns do exist, but are not subject to a
                   83979: **      UNIQUE or PRIMARY KEY constraint, or
                   83980: **
                   83981: **   3) No parent key columns were provided explicitly as part of the
                   83982: **      foreign key definition, and the parent table does not have a
                   83983: **      PRIMARY KEY, or
                   83984: **
                   83985: **   4) No parent key columns were provided explicitly as part of the
                   83986: **      foreign key definition, and the PRIMARY KEY of the parent table 
                   83987: **      consists of a a different number of columns to the child key in 
                   83988: **      the child table.
                   83989: **
                   83990: ** then non-zero is returned, and a "foreign key mismatch" error loaded
                   83991: ** into pParse. If an OOM error occurs, non-zero is returned and the
                   83992: ** pParse->db->mallocFailed flag is set.
                   83993: */
                   83994: static int locateFkeyIndex(
                   83995:   Parse *pParse,                  /* Parse context to store any error in */
                   83996:   Table *pParent,                 /* Parent table of FK constraint pFKey */
                   83997:   FKey *pFKey,                    /* Foreign key to find index for */
                   83998:   Index **ppIdx,                  /* OUT: Unique index on parent table */
                   83999:   int **paiCol                    /* OUT: Map of index columns in pFKey */
                   84000: ){
                   84001:   Index *pIdx = 0;                    /* Value to return via *ppIdx */
                   84002:   int *aiCol = 0;                     /* Value to return via *paiCol */
                   84003:   int nCol = pFKey->nCol;             /* Number of columns in parent key */
                   84004:   char *zKey = pFKey->aCol[0].zCol;   /* Name of left-most parent key column */
                   84005: 
                   84006:   /* The caller is responsible for zeroing output parameters. */
                   84007:   assert( ppIdx && *ppIdx==0 );
                   84008:   assert( !paiCol || *paiCol==0 );
                   84009:   assert( pParse );
                   84010: 
                   84011:   /* If this is a non-composite (single column) foreign key, check if it 
                   84012:   ** maps to the INTEGER PRIMARY KEY of table pParent. If so, leave *ppIdx 
                   84013:   ** and *paiCol set to zero and return early. 
                   84014:   **
                   84015:   ** Otherwise, for a composite foreign key (more than one column), allocate
                   84016:   ** space for the aiCol array (returned via output parameter *paiCol).
                   84017:   ** Non-composite foreign keys do not require the aiCol array.
                   84018:   */
                   84019:   if( nCol==1 ){
                   84020:     /* The FK maps to the IPK if any of the following are true:
                   84021:     **
                   84022:     **   1) There is an INTEGER PRIMARY KEY column and the FK is implicitly 
                   84023:     **      mapped to the primary key of table pParent, or
                   84024:     **   2) The FK is explicitly mapped to a column declared as INTEGER
                   84025:     **      PRIMARY KEY.
                   84026:     */
                   84027:     if( pParent->iPKey>=0 ){
                   84028:       if( !zKey ) return 0;
                   84029:       if( !sqlite3StrICmp(pParent->aCol[pParent->iPKey].zName, zKey) ) return 0;
                   84030:     }
                   84031:   }else if( paiCol ){
                   84032:     assert( nCol>1 );
                   84033:     aiCol = (int *)sqlite3DbMallocRaw(pParse->db, nCol*sizeof(int));
                   84034:     if( !aiCol ) return 1;
                   84035:     *paiCol = aiCol;
                   84036:   }
                   84037: 
                   84038:   for(pIdx=pParent->pIndex; pIdx; pIdx=pIdx->pNext){
                   84039:     if( pIdx->nColumn==nCol && pIdx->onError!=OE_None ){ 
                   84040:       /* pIdx is a UNIQUE index (or a PRIMARY KEY) and has the right number
                   84041:       ** of columns. If each indexed column corresponds to a foreign key
                   84042:       ** column of pFKey, then this index is a winner.  */
                   84043: 
                   84044:       if( zKey==0 ){
                   84045:         /* If zKey is NULL, then this foreign key is implicitly mapped to 
                   84046:         ** the PRIMARY KEY of table pParent. The PRIMARY KEY index may be 
                   84047:         ** identified by the test (Index.autoIndex==2).  */
                   84048:         if( pIdx->autoIndex==2 ){
                   84049:           if( aiCol ){
                   84050:             int i;
                   84051:             for(i=0; i<nCol; i++) aiCol[i] = pFKey->aCol[i].iFrom;
                   84052:           }
                   84053:           break;
                   84054:         }
                   84055:       }else{
                   84056:         /* If zKey is non-NULL, then this foreign key was declared to
                   84057:         ** map to an explicit list of columns in table pParent. Check if this
                   84058:         ** index matches those columns. Also, check that the index uses
                   84059:         ** the default collation sequences for each column. */
                   84060:         int i, j;
                   84061:         for(i=0; i<nCol; i++){
                   84062:           int iCol = pIdx->aiColumn[i];     /* Index of column in parent tbl */
                   84063:           char *zDfltColl;                  /* Def. collation for column */
                   84064:           char *zIdxCol;                    /* Name of indexed column */
                   84065: 
                   84066:           /* If the index uses a collation sequence that is different from
                   84067:           ** the default collation sequence for the column, this index is
                   84068:           ** unusable. Bail out early in this case.  */
                   84069:           zDfltColl = pParent->aCol[iCol].zColl;
                   84070:           if( !zDfltColl ){
                   84071:             zDfltColl = "BINARY";
                   84072:           }
                   84073:           if( sqlite3StrICmp(pIdx->azColl[i], zDfltColl) ) break;
                   84074: 
                   84075:           zIdxCol = pParent->aCol[iCol].zName;
                   84076:           for(j=0; j<nCol; j++){
                   84077:             if( sqlite3StrICmp(pFKey->aCol[j].zCol, zIdxCol)==0 ){
                   84078:               if( aiCol ) aiCol[i] = pFKey->aCol[j].iFrom;
                   84079:               break;
                   84080:             }
                   84081:           }
                   84082:           if( j==nCol ) break;
                   84083:         }
                   84084:         if( i==nCol ) break;      /* pIdx is usable */
                   84085:       }
                   84086:     }
                   84087:   }
                   84088: 
                   84089:   if( !pIdx ){
                   84090:     if( !pParse->disableTriggers ){
                   84091:       sqlite3ErrorMsg(pParse, "foreign key mismatch");
                   84092:     }
                   84093:     sqlite3DbFree(pParse->db, aiCol);
                   84094:     return 1;
                   84095:   }
                   84096: 
                   84097:   *ppIdx = pIdx;
                   84098:   return 0;
                   84099: }
                   84100: 
                   84101: /*
                   84102: ** This function is called when a row is inserted into or deleted from the 
                   84103: ** child table of foreign key constraint pFKey. If an SQL UPDATE is executed 
                   84104: ** on the child table of pFKey, this function is invoked twice for each row
                   84105: ** affected - once to "delete" the old row, and then again to "insert" the
                   84106: ** new row.
                   84107: **
                   84108: ** Each time it is called, this function generates VDBE code to locate the
                   84109: ** row in the parent table that corresponds to the row being inserted into 
                   84110: ** or deleted from the child table. If the parent row can be found, no 
                   84111: ** special action is taken. Otherwise, if the parent row can *not* be
                   84112: ** found in the parent table:
                   84113: **
                   84114: **   Operation | FK type   | Action taken
                   84115: **   --------------------------------------------------------------------------
                   84116: **   INSERT      immediate   Increment the "immediate constraint counter".
                   84117: **
                   84118: **   DELETE      immediate   Decrement the "immediate constraint counter".
                   84119: **
                   84120: **   INSERT      deferred    Increment the "deferred constraint counter".
                   84121: **
                   84122: **   DELETE      deferred    Decrement the "deferred constraint counter".
                   84123: **
                   84124: ** These operations are identified in the comment at the top of this file 
                   84125: ** (fkey.c) as "I.1" and "D.1".
                   84126: */
                   84127: static void fkLookupParent(
                   84128:   Parse *pParse,        /* Parse context */
                   84129:   int iDb,              /* Index of database housing pTab */
                   84130:   Table *pTab,          /* Parent table of FK pFKey */
                   84131:   Index *pIdx,          /* Unique index on parent key columns in pTab */
                   84132:   FKey *pFKey,          /* Foreign key constraint */
                   84133:   int *aiCol,           /* Map from parent key columns to child table columns */
                   84134:   int regData,          /* Address of array containing child table row */
                   84135:   int nIncr,            /* Increment constraint counter by this */
                   84136:   int isIgnore          /* If true, pretend pTab contains all NULL values */
                   84137: ){
                   84138:   int i;                                    /* Iterator variable */
                   84139:   Vdbe *v = sqlite3GetVdbe(pParse);         /* Vdbe to add code to */
                   84140:   int iCur = pParse->nTab - 1;              /* Cursor number to use */
                   84141:   int iOk = sqlite3VdbeMakeLabel(v);        /* jump here if parent key found */
                   84142: 
                   84143:   /* If nIncr is less than zero, then check at runtime if there are any
                   84144:   ** outstanding constraints to resolve. If there are not, there is no need
                   84145:   ** to check if deleting this row resolves any outstanding violations.
                   84146:   **
                   84147:   ** Check if any of the key columns in the child table row are NULL. If 
                   84148:   ** any are, then the constraint is considered satisfied. No need to 
                   84149:   ** search for a matching row in the parent table.  */
                   84150:   if( nIncr<0 ){
                   84151:     sqlite3VdbeAddOp2(v, OP_FkIfZero, pFKey->isDeferred, iOk);
                   84152:   }
                   84153:   for(i=0; i<pFKey->nCol; i++){
                   84154:     int iReg = aiCol[i] + regData + 1;
                   84155:     sqlite3VdbeAddOp2(v, OP_IsNull, iReg, iOk);
                   84156:   }
                   84157: 
                   84158:   if( isIgnore==0 ){
                   84159:     if( pIdx==0 ){
                   84160:       /* If pIdx is NULL, then the parent key is the INTEGER PRIMARY KEY
                   84161:       ** column of the parent table (table pTab).  */
                   84162:       int iMustBeInt;               /* Address of MustBeInt instruction */
                   84163:       int regTemp = sqlite3GetTempReg(pParse);
                   84164:   
                   84165:       /* Invoke MustBeInt to coerce the child key value to an integer (i.e. 
                   84166:       ** apply the affinity of the parent key). If this fails, then there
                   84167:       ** is no matching parent key. Before using MustBeInt, make a copy of
                   84168:       ** the value. Otherwise, the value inserted into the child key column
                   84169:       ** will have INTEGER affinity applied to it, which may not be correct.  */
                   84170:       sqlite3VdbeAddOp2(v, OP_SCopy, aiCol[0]+1+regData, regTemp);
                   84171:       iMustBeInt = sqlite3VdbeAddOp2(v, OP_MustBeInt, regTemp, 0);
                   84172:   
                   84173:       /* If the parent table is the same as the child table, and we are about
                   84174:       ** to increment the constraint-counter (i.e. this is an INSERT operation),
                   84175:       ** then check if the row being inserted matches itself. If so, do not
                   84176:       ** increment the constraint-counter.  */
                   84177:       if( pTab==pFKey->pFrom && nIncr==1 ){
                   84178:         sqlite3VdbeAddOp3(v, OP_Eq, regData, iOk, regTemp);
                   84179:       }
                   84180:   
                   84181:       sqlite3OpenTable(pParse, iCur, iDb, pTab, OP_OpenRead);
                   84182:       sqlite3VdbeAddOp3(v, OP_NotExists, iCur, 0, regTemp);
                   84183:       sqlite3VdbeAddOp2(v, OP_Goto, 0, iOk);
                   84184:       sqlite3VdbeJumpHere(v, sqlite3VdbeCurrentAddr(v)-2);
                   84185:       sqlite3VdbeJumpHere(v, iMustBeInt);
                   84186:       sqlite3ReleaseTempReg(pParse, regTemp);
                   84187:     }else{
                   84188:       int nCol = pFKey->nCol;
                   84189:       int regTemp = sqlite3GetTempRange(pParse, nCol);
                   84190:       int regRec = sqlite3GetTempReg(pParse);
                   84191:       KeyInfo *pKey = sqlite3IndexKeyinfo(pParse, pIdx);
                   84192:   
                   84193:       sqlite3VdbeAddOp3(v, OP_OpenRead, iCur, pIdx->tnum, iDb);
                   84194:       sqlite3VdbeChangeP4(v, -1, (char*)pKey, P4_KEYINFO_HANDOFF);
                   84195:       for(i=0; i<nCol; i++){
                   84196:         sqlite3VdbeAddOp2(v, OP_Copy, aiCol[i]+1+regData, regTemp+i);
                   84197:       }
                   84198:   
                   84199:       /* If the parent table is the same as the child table, and we are about
                   84200:       ** to increment the constraint-counter (i.e. this is an INSERT operation),
                   84201:       ** then check if the row being inserted matches itself. If so, do not
                   84202:       ** increment the constraint-counter. 
                   84203:       **
                   84204:       ** If any of the parent-key values are NULL, then the row cannot match 
                   84205:       ** itself. So set JUMPIFNULL to make sure we do the OP_Found if any
                   84206:       ** of the parent-key values are NULL (at this point it is known that
                   84207:       ** none of the child key values are).
                   84208:       */
                   84209:       if( pTab==pFKey->pFrom && nIncr==1 ){
                   84210:         int iJump = sqlite3VdbeCurrentAddr(v) + nCol + 1;
                   84211:         for(i=0; i<nCol; i++){
                   84212:           int iChild = aiCol[i]+1+regData;
                   84213:           int iParent = pIdx->aiColumn[i]+1+regData;
                   84214:           assert( aiCol[i]!=pTab->iPKey );
                   84215:           if( pIdx->aiColumn[i]==pTab->iPKey ){
                   84216:             /* The parent key is a composite key that includes the IPK column */
                   84217:             iParent = regData;
                   84218:           }
                   84219:           sqlite3VdbeAddOp3(v, OP_Ne, iChild, iJump, iParent);
                   84220:           sqlite3VdbeChangeP5(v, SQLITE_JUMPIFNULL);
                   84221:         }
                   84222:         sqlite3VdbeAddOp2(v, OP_Goto, 0, iOk);
                   84223:       }
                   84224:   
                   84225:       sqlite3VdbeAddOp3(v, OP_MakeRecord, regTemp, nCol, regRec);
                   84226:       sqlite3VdbeChangeP4(v, -1, sqlite3IndexAffinityStr(v,pIdx), P4_TRANSIENT);
                   84227:       sqlite3VdbeAddOp4Int(v, OP_Found, iCur, iOk, regRec, 0);
                   84228:   
                   84229:       sqlite3ReleaseTempReg(pParse, regRec);
                   84230:       sqlite3ReleaseTempRange(pParse, regTemp, nCol);
                   84231:     }
                   84232:   }
                   84233: 
                   84234:   if( !pFKey->isDeferred && !pParse->pToplevel && !pParse->isMultiWrite ){
                   84235:     /* Special case: If this is an INSERT statement that will insert exactly
                   84236:     ** one row into the table, raise a constraint immediately instead of
                   84237:     ** incrementing a counter. This is necessary as the VM code is being
                   84238:     ** generated for will not open a statement transaction.  */
                   84239:     assert( nIncr==1 );
                   84240:     sqlite3HaltConstraint(
                   84241:         pParse, OE_Abort, "foreign key constraint failed", P4_STATIC
                   84242:     );
                   84243:   }else{
                   84244:     if( nIncr>0 && pFKey->isDeferred==0 ){
                   84245:       sqlite3ParseToplevel(pParse)->mayAbort = 1;
                   84246:     }
                   84247:     sqlite3VdbeAddOp2(v, OP_FkCounter, pFKey->isDeferred, nIncr);
                   84248:   }
                   84249: 
                   84250:   sqlite3VdbeResolveLabel(v, iOk);
                   84251:   sqlite3VdbeAddOp1(v, OP_Close, iCur);
                   84252: }
                   84253: 
                   84254: /*
                   84255: ** This function is called to generate code executed when a row is deleted
                   84256: ** from the parent table of foreign key constraint pFKey and, if pFKey is 
                   84257: ** deferred, when a row is inserted into the same table. When generating
                   84258: ** code for an SQL UPDATE operation, this function may be called twice -
                   84259: ** once to "delete" the old row and once to "insert" the new row.
                   84260: **
                   84261: ** The code generated by this function scans through the rows in the child
                   84262: ** table that correspond to the parent table row being deleted or inserted.
                   84263: ** For each child row found, one of the following actions is taken:
                   84264: **
                   84265: **   Operation | FK type   | Action taken
                   84266: **   --------------------------------------------------------------------------
                   84267: **   DELETE      immediate   Increment the "immediate constraint counter".
                   84268: **                           Or, if the ON (UPDATE|DELETE) action is RESTRICT,
                   84269: **                           throw a "foreign key constraint failed" exception.
                   84270: **
                   84271: **   INSERT      immediate   Decrement the "immediate constraint counter".
                   84272: **
                   84273: **   DELETE      deferred    Increment the "deferred constraint counter".
                   84274: **                           Or, if the ON (UPDATE|DELETE) action is RESTRICT,
                   84275: **                           throw a "foreign key constraint failed" exception.
                   84276: **
                   84277: **   INSERT      deferred    Decrement the "deferred constraint counter".
                   84278: **
                   84279: ** These operations are identified in the comment at the top of this file 
                   84280: ** (fkey.c) as "I.2" and "D.2".
                   84281: */
                   84282: static void fkScanChildren(
                   84283:   Parse *pParse,                  /* Parse context */
                   84284:   SrcList *pSrc,                  /* SrcList containing the table to scan */
                   84285:   Table *pTab,
                   84286:   Index *pIdx,                    /* Foreign key index */
                   84287:   FKey *pFKey,                    /* Foreign key relationship */
                   84288:   int *aiCol,                     /* Map from pIdx cols to child table cols */
                   84289:   int regData,                    /* Referenced table data starts here */
                   84290:   int nIncr                       /* Amount to increment deferred counter by */
                   84291: ){
                   84292:   sqlite3 *db = pParse->db;       /* Database handle */
                   84293:   int i;                          /* Iterator variable */
                   84294:   Expr *pWhere = 0;               /* WHERE clause to scan with */
                   84295:   NameContext sNameContext;       /* Context used to resolve WHERE clause */
                   84296:   WhereInfo *pWInfo;              /* Context used by sqlite3WhereXXX() */
                   84297:   int iFkIfZero = 0;              /* Address of OP_FkIfZero */
                   84298:   Vdbe *v = sqlite3GetVdbe(pParse);
                   84299: 
                   84300:   assert( !pIdx || pIdx->pTable==pTab );
                   84301: 
                   84302:   if( nIncr<0 ){
                   84303:     iFkIfZero = sqlite3VdbeAddOp2(v, OP_FkIfZero, pFKey->isDeferred, 0);
                   84304:   }
                   84305: 
                   84306:   /* Create an Expr object representing an SQL expression like:
                   84307:   **
                   84308:   **   <parent-key1> = <child-key1> AND <parent-key2> = <child-key2> ...
                   84309:   **
                   84310:   ** The collation sequence used for the comparison should be that of
                   84311:   ** the parent key columns. The affinity of the parent key column should
                   84312:   ** be applied to each child key value before the comparison takes place.
                   84313:   */
                   84314:   for(i=0; i<pFKey->nCol; i++){
                   84315:     Expr *pLeft;                  /* Value from parent table row */
                   84316:     Expr *pRight;                 /* Column ref to child table */
                   84317:     Expr *pEq;                    /* Expression (pLeft = pRight) */
                   84318:     int iCol;                     /* Index of column in child table */ 
                   84319:     const char *zCol;             /* Name of column in child table */
                   84320: 
                   84321:     pLeft = sqlite3Expr(db, TK_REGISTER, 0);
                   84322:     if( pLeft ){
                   84323:       /* Set the collation sequence and affinity of the LHS of each TK_EQ
                   84324:       ** expression to the parent key column defaults.  */
                   84325:       if( pIdx ){
                   84326:         Column *pCol;
                   84327:         iCol = pIdx->aiColumn[i];
                   84328:         pCol = &pTab->aCol[iCol];
                   84329:         if( pTab->iPKey==iCol ) iCol = -1;
                   84330:         pLeft->iTable = regData+iCol+1;
                   84331:         pLeft->affinity = pCol->affinity;
                   84332:         pLeft->pColl = sqlite3LocateCollSeq(pParse, pCol->zColl);
                   84333:       }else{
                   84334:         pLeft->iTable = regData;
                   84335:         pLeft->affinity = SQLITE_AFF_INTEGER;
                   84336:       }
                   84337:     }
                   84338:     iCol = aiCol ? aiCol[i] : pFKey->aCol[0].iFrom;
                   84339:     assert( iCol>=0 );
                   84340:     zCol = pFKey->pFrom->aCol[iCol].zName;
                   84341:     pRight = sqlite3Expr(db, TK_ID, zCol);
                   84342:     pEq = sqlite3PExpr(pParse, TK_EQ, pLeft, pRight, 0);
                   84343:     pWhere = sqlite3ExprAnd(db, pWhere, pEq);
                   84344:   }
                   84345: 
                   84346:   /* If the child table is the same as the parent table, and this scan
                   84347:   ** is taking place as part of a DELETE operation (operation D.2), omit the
                   84348:   ** row being deleted from the scan by adding ($rowid != rowid) to the WHERE 
                   84349:   ** clause, where $rowid is the rowid of the row being deleted.  */
                   84350:   if( pTab==pFKey->pFrom && nIncr>0 ){
                   84351:     Expr *pEq;                    /* Expression (pLeft = pRight) */
                   84352:     Expr *pLeft;                  /* Value from parent table row */
                   84353:     Expr *pRight;                 /* Column ref to child table */
                   84354:     pLeft = sqlite3Expr(db, TK_REGISTER, 0);
                   84355:     pRight = sqlite3Expr(db, TK_COLUMN, 0);
                   84356:     if( pLeft && pRight ){
                   84357:       pLeft->iTable = regData;
                   84358:       pLeft->affinity = SQLITE_AFF_INTEGER;
                   84359:       pRight->iTable = pSrc->a[0].iCursor;
                   84360:       pRight->iColumn = -1;
                   84361:     }
                   84362:     pEq = sqlite3PExpr(pParse, TK_NE, pLeft, pRight, 0);
                   84363:     pWhere = sqlite3ExprAnd(db, pWhere, pEq);
                   84364:   }
                   84365: 
                   84366:   /* Resolve the references in the WHERE clause. */
                   84367:   memset(&sNameContext, 0, sizeof(NameContext));
                   84368:   sNameContext.pSrcList = pSrc;
                   84369:   sNameContext.pParse = pParse;
                   84370:   sqlite3ResolveExprNames(&sNameContext, pWhere);
                   84371: 
                   84372:   /* Create VDBE to loop through the entries in pSrc that match the WHERE
                   84373:   ** clause. If the constraint is not deferred, throw an exception for
                   84374:   ** each row found. Otherwise, for deferred constraints, increment the
                   84375:   ** deferred constraint counter by nIncr for each row selected.  */
                   84376:   pWInfo = sqlite3WhereBegin(pParse, pSrc, pWhere, 0, 0);
                   84377:   if( nIncr>0 && pFKey->isDeferred==0 ){
                   84378:     sqlite3ParseToplevel(pParse)->mayAbort = 1;
                   84379:   }
                   84380:   sqlite3VdbeAddOp2(v, OP_FkCounter, pFKey->isDeferred, nIncr);
                   84381:   if( pWInfo ){
                   84382:     sqlite3WhereEnd(pWInfo);
                   84383:   }
                   84384: 
                   84385:   /* Clean up the WHERE clause constructed above. */
                   84386:   sqlite3ExprDelete(db, pWhere);
                   84387:   if( iFkIfZero ){
                   84388:     sqlite3VdbeJumpHere(v, iFkIfZero);
                   84389:   }
                   84390: }
                   84391: 
                   84392: /*
                   84393: ** This function returns a pointer to the head of a linked list of FK
                   84394: ** constraints for which table pTab is the parent table. For example,
                   84395: ** given the following schema:
                   84396: **
                   84397: **   CREATE TABLE t1(a PRIMARY KEY);
                   84398: **   CREATE TABLE t2(b REFERENCES t1(a);
                   84399: **
                   84400: ** Calling this function with table "t1" as an argument returns a pointer
                   84401: ** to the FKey structure representing the foreign key constraint on table
                   84402: ** "t2". Calling this function with "t2" as the argument would return a
                   84403: ** NULL pointer (as there are no FK constraints for which t2 is the parent
                   84404: ** table).
                   84405: */
                   84406: SQLITE_PRIVATE FKey *sqlite3FkReferences(Table *pTab){
                   84407:   int nName = sqlite3Strlen30(pTab->zName);
                   84408:   return (FKey *)sqlite3HashFind(&pTab->pSchema->fkeyHash, pTab->zName, nName);
                   84409: }
                   84410: 
                   84411: /*
                   84412: ** The second argument is a Trigger structure allocated by the 
                   84413: ** fkActionTrigger() routine. This function deletes the Trigger structure
                   84414: ** and all of its sub-components.
                   84415: **
                   84416: ** The Trigger structure or any of its sub-components may be allocated from
                   84417: ** the lookaside buffer belonging to database handle dbMem.
                   84418: */
                   84419: static void fkTriggerDelete(sqlite3 *dbMem, Trigger *p){
                   84420:   if( p ){
                   84421:     TriggerStep *pStep = p->step_list;
                   84422:     sqlite3ExprDelete(dbMem, pStep->pWhere);
                   84423:     sqlite3ExprListDelete(dbMem, pStep->pExprList);
                   84424:     sqlite3SelectDelete(dbMem, pStep->pSelect);
                   84425:     sqlite3ExprDelete(dbMem, p->pWhen);
                   84426:     sqlite3DbFree(dbMem, p);
                   84427:   }
                   84428: }
                   84429: 
                   84430: /*
                   84431: ** This function is called to generate code that runs when table pTab is
                   84432: ** being dropped from the database. The SrcList passed as the second argument
                   84433: ** to this function contains a single entry guaranteed to resolve to
                   84434: ** table pTab.
                   84435: **
                   84436: ** Normally, no code is required. However, if either
                   84437: **
                   84438: **   (a) The table is the parent table of a FK constraint, or
                   84439: **   (b) The table is the child table of a deferred FK constraint and it is
                   84440: **       determined at runtime that there are outstanding deferred FK 
                   84441: **       constraint violations in the database,
                   84442: **
                   84443: ** then the equivalent of "DELETE FROM <tbl>" is executed before dropping
                   84444: ** the table from the database. Triggers are disabled while running this
                   84445: ** DELETE, but foreign key actions are not.
                   84446: */
                   84447: SQLITE_PRIVATE void sqlite3FkDropTable(Parse *pParse, SrcList *pName, Table *pTab){
                   84448:   sqlite3 *db = pParse->db;
                   84449:   if( (db->flags&SQLITE_ForeignKeys) && !IsVirtual(pTab) && !pTab->pSelect ){
                   84450:     int iSkip = 0;
                   84451:     Vdbe *v = sqlite3GetVdbe(pParse);
                   84452: 
                   84453:     assert( v );                  /* VDBE has already been allocated */
                   84454:     if( sqlite3FkReferences(pTab)==0 ){
                   84455:       /* Search for a deferred foreign key constraint for which this table
                   84456:       ** is the child table. If one cannot be found, return without 
                   84457:       ** generating any VDBE code. If one can be found, then jump over
                   84458:       ** the entire DELETE if there are no outstanding deferred constraints
                   84459:       ** when this statement is run.  */
                   84460:       FKey *p;
                   84461:       for(p=pTab->pFKey; p; p=p->pNextFrom){
                   84462:         if( p->isDeferred ) break;
                   84463:       }
                   84464:       if( !p ) return;
                   84465:       iSkip = sqlite3VdbeMakeLabel(v);
                   84466:       sqlite3VdbeAddOp2(v, OP_FkIfZero, 1, iSkip);
                   84467:     }
                   84468: 
                   84469:     pParse->disableTriggers = 1;
                   84470:     sqlite3DeleteFrom(pParse, sqlite3SrcListDup(db, pName, 0), 0);
                   84471:     pParse->disableTriggers = 0;
                   84472: 
                   84473:     /* If the DELETE has generated immediate foreign key constraint 
                   84474:     ** violations, halt the VDBE and return an error at this point, before
                   84475:     ** any modifications to the schema are made. This is because statement
                   84476:     ** transactions are not able to rollback schema changes.  */
                   84477:     sqlite3VdbeAddOp2(v, OP_FkIfZero, 0, sqlite3VdbeCurrentAddr(v)+2);
                   84478:     sqlite3HaltConstraint(
                   84479:         pParse, OE_Abort, "foreign key constraint failed", P4_STATIC
                   84480:     );
                   84481: 
                   84482:     if( iSkip ){
                   84483:       sqlite3VdbeResolveLabel(v, iSkip);
                   84484:     }
                   84485:   }
                   84486: }
                   84487: 
                   84488: /*
                   84489: ** This function is called when inserting, deleting or updating a row of
                   84490: ** table pTab to generate VDBE code to perform foreign key constraint 
                   84491: ** processing for the operation.
                   84492: **
                   84493: ** For a DELETE operation, parameter regOld is passed the index of the
                   84494: ** first register in an array of (pTab->nCol+1) registers containing the
                   84495: ** rowid of the row being deleted, followed by each of the column values
                   84496: ** of the row being deleted, from left to right. Parameter regNew is passed
                   84497: ** zero in this case.
                   84498: **
                   84499: ** For an INSERT operation, regOld is passed zero and regNew is passed the
                   84500: ** first register of an array of (pTab->nCol+1) registers containing the new
                   84501: ** row data.
                   84502: **
                   84503: ** For an UPDATE operation, this function is called twice. Once before
                   84504: ** the original record is deleted from the table using the calling convention
                   84505: ** described for DELETE. Then again after the original record is deleted
                   84506: ** but before the new record is inserted using the INSERT convention. 
                   84507: */
                   84508: SQLITE_PRIVATE void sqlite3FkCheck(
                   84509:   Parse *pParse,                  /* Parse context */
                   84510:   Table *pTab,                    /* Row is being deleted from this table */ 
                   84511:   int regOld,                     /* Previous row data is stored here */
                   84512:   int regNew                      /* New row data is stored here */
                   84513: ){
                   84514:   sqlite3 *db = pParse->db;       /* Database handle */
                   84515:   FKey *pFKey;                    /* Used to iterate through FKs */
                   84516:   int iDb;                        /* Index of database containing pTab */
                   84517:   const char *zDb;                /* Name of database containing pTab */
                   84518:   int isIgnoreErrors = pParse->disableTriggers;
                   84519: 
                   84520:   /* Exactly one of regOld and regNew should be non-zero. */
                   84521:   assert( (regOld==0)!=(regNew==0) );
                   84522: 
                   84523:   /* If foreign-keys are disabled, this function is a no-op. */
                   84524:   if( (db->flags&SQLITE_ForeignKeys)==0 ) return;
                   84525: 
                   84526:   iDb = sqlite3SchemaToIndex(db, pTab->pSchema);
                   84527:   zDb = db->aDb[iDb].zName;
                   84528: 
                   84529:   /* Loop through all the foreign key constraints for which pTab is the
                   84530:   ** child table (the table that the foreign key definition is part of).  */
                   84531:   for(pFKey=pTab->pFKey; pFKey; pFKey=pFKey->pNextFrom){
                   84532:     Table *pTo;                   /* Parent table of foreign key pFKey */
                   84533:     Index *pIdx = 0;              /* Index on key columns in pTo */
                   84534:     int *aiFree = 0;
                   84535:     int *aiCol;
                   84536:     int iCol;
                   84537:     int i;
                   84538:     int isIgnore = 0;
                   84539: 
                   84540:     /* Find the parent table of this foreign key. Also find a unique index 
                   84541:     ** on the parent key columns in the parent table. If either of these 
                   84542:     ** schema items cannot be located, set an error in pParse and return 
                   84543:     ** early.  */
                   84544:     if( pParse->disableTriggers ){
                   84545:       pTo = sqlite3FindTable(db, pFKey->zTo, zDb);
                   84546:     }else{
                   84547:       pTo = sqlite3LocateTable(pParse, 0, pFKey->zTo, zDb);
                   84548:     }
                   84549:     if( !pTo || locateFkeyIndex(pParse, pTo, pFKey, &pIdx, &aiFree) ){
                   84550:       if( !isIgnoreErrors || db->mallocFailed ) return;
                   84551:       continue;
                   84552:     }
                   84553:     assert( pFKey->nCol==1 || (aiFree && pIdx) );
                   84554: 
                   84555:     if( aiFree ){
                   84556:       aiCol = aiFree;
                   84557:     }else{
                   84558:       iCol = pFKey->aCol[0].iFrom;
                   84559:       aiCol = &iCol;
                   84560:     }
                   84561:     for(i=0; i<pFKey->nCol; i++){
                   84562:       if( aiCol[i]==pTab->iPKey ){
                   84563:         aiCol[i] = -1;
                   84564:       }
                   84565: #ifndef SQLITE_OMIT_AUTHORIZATION
                   84566:       /* Request permission to read the parent key columns. If the 
                   84567:       ** authorization callback returns SQLITE_IGNORE, behave as if any
                   84568:       ** values read from the parent table are NULL. */
                   84569:       if( db->xAuth ){
                   84570:         int rcauth;
                   84571:         char *zCol = pTo->aCol[pIdx ? pIdx->aiColumn[i] : pTo->iPKey].zName;
                   84572:         rcauth = sqlite3AuthReadCol(pParse, pTo->zName, zCol, iDb);
                   84573:         isIgnore = (rcauth==SQLITE_IGNORE);
                   84574:       }
                   84575: #endif
                   84576:     }
                   84577: 
                   84578:     /* Take a shared-cache advisory read-lock on the parent table. Allocate 
                   84579:     ** a cursor to use to search the unique index on the parent key columns 
                   84580:     ** in the parent table.  */
                   84581:     sqlite3TableLock(pParse, iDb, pTo->tnum, 0, pTo->zName);
                   84582:     pParse->nTab++;
                   84583: 
                   84584:     if( regOld!=0 ){
                   84585:       /* A row is being removed from the child table. Search for the parent.
                   84586:       ** If the parent does not exist, removing the child row resolves an 
                   84587:       ** outstanding foreign key constraint violation. */
                   84588:       fkLookupParent(pParse, iDb, pTo, pIdx, pFKey, aiCol, regOld, -1,isIgnore);
                   84589:     }
                   84590:     if( regNew!=0 ){
                   84591:       /* A row is being added to the child table. If a parent row cannot
                   84592:       ** be found, adding the child row has violated the FK constraint. */ 
                   84593:       fkLookupParent(pParse, iDb, pTo, pIdx, pFKey, aiCol, regNew, +1,isIgnore);
                   84594:     }
                   84595: 
                   84596:     sqlite3DbFree(db, aiFree);
                   84597:   }
                   84598: 
                   84599:   /* Loop through all the foreign key constraints that refer to this table */
                   84600:   for(pFKey = sqlite3FkReferences(pTab); pFKey; pFKey=pFKey->pNextTo){
                   84601:     Index *pIdx = 0;              /* Foreign key index for pFKey */
                   84602:     SrcList *pSrc;
                   84603:     int *aiCol = 0;
                   84604: 
                   84605:     if( !pFKey->isDeferred && !pParse->pToplevel && !pParse->isMultiWrite ){
                   84606:       assert( regOld==0 && regNew!=0 );
                   84607:       /* Inserting a single row into a parent table cannot cause an immediate
                   84608:       ** foreign key violation. So do nothing in this case.  */
                   84609:       continue;
                   84610:     }
                   84611: 
                   84612:     if( locateFkeyIndex(pParse, pTab, pFKey, &pIdx, &aiCol) ){
                   84613:       if( !isIgnoreErrors || db->mallocFailed ) return;
                   84614:       continue;
                   84615:     }
                   84616:     assert( aiCol || pFKey->nCol==1 );
                   84617: 
                   84618:     /* Create a SrcList structure containing a single table (the table 
                   84619:     ** the foreign key that refers to this table is attached to). This
                   84620:     ** is required for the sqlite3WhereXXX() interface.  */
                   84621:     pSrc = sqlite3SrcListAppend(db, 0, 0, 0);
                   84622:     if( pSrc ){
                   84623:       struct SrcList_item *pItem = pSrc->a;
                   84624:       pItem->pTab = pFKey->pFrom;
                   84625:       pItem->zName = pFKey->pFrom->zName;
                   84626:       pItem->pTab->nRef++;
                   84627:       pItem->iCursor = pParse->nTab++;
                   84628:   
                   84629:       if( regNew!=0 ){
                   84630:         fkScanChildren(pParse, pSrc, pTab, pIdx, pFKey, aiCol, regNew, -1);
                   84631:       }
                   84632:       if( regOld!=0 ){
                   84633:         /* If there is a RESTRICT action configured for the current operation
                   84634:         ** on the parent table of this FK, then throw an exception 
                   84635:         ** immediately if the FK constraint is violated, even if this is a
                   84636:         ** deferred trigger. That's what RESTRICT means. To defer checking
                   84637:         ** the constraint, the FK should specify NO ACTION (represented
                   84638:         ** using OE_None). NO ACTION is the default.  */
                   84639:         fkScanChildren(pParse, pSrc, pTab, pIdx, pFKey, aiCol, regOld, 1);
                   84640:       }
                   84641:       pItem->zName = 0;
                   84642:       sqlite3SrcListDelete(db, pSrc);
                   84643:     }
                   84644:     sqlite3DbFree(db, aiCol);
                   84645:   }
                   84646: }
                   84647: 
                   84648: #define COLUMN_MASK(x) (((x)>31) ? 0xffffffff : ((u32)1<<(x)))
                   84649: 
                   84650: /*
                   84651: ** This function is called before generating code to update or delete a 
                   84652: ** row contained in table pTab.
                   84653: */
                   84654: SQLITE_PRIVATE u32 sqlite3FkOldmask(
                   84655:   Parse *pParse,                  /* Parse context */
                   84656:   Table *pTab                     /* Table being modified */
                   84657: ){
                   84658:   u32 mask = 0;
                   84659:   if( pParse->db->flags&SQLITE_ForeignKeys ){
                   84660:     FKey *p;
                   84661:     int i;
                   84662:     for(p=pTab->pFKey; p; p=p->pNextFrom){
                   84663:       for(i=0; i<p->nCol; i++) mask |= COLUMN_MASK(p->aCol[i].iFrom);
                   84664:     }
                   84665:     for(p=sqlite3FkReferences(pTab); p; p=p->pNextTo){
                   84666:       Index *pIdx = 0;
                   84667:       locateFkeyIndex(pParse, pTab, p, &pIdx, 0);
                   84668:       if( pIdx ){
                   84669:         for(i=0; i<pIdx->nColumn; i++) mask |= COLUMN_MASK(pIdx->aiColumn[i]);
                   84670:       }
                   84671:     }
                   84672:   }
                   84673:   return mask;
                   84674: }
                   84675: 
                   84676: /*
                   84677: ** This function is called before generating code to update or delete a 
                   84678: ** row contained in table pTab. If the operation is a DELETE, then
                   84679: ** parameter aChange is passed a NULL value. For an UPDATE, aChange points
                   84680: ** to an array of size N, where N is the number of columns in table pTab.
                   84681: ** If the i'th column is not modified by the UPDATE, then the corresponding 
                   84682: ** entry in the aChange[] array is set to -1. If the column is modified,
                   84683: ** the value is 0 or greater. Parameter chngRowid is set to true if the
                   84684: ** UPDATE statement modifies the rowid fields of the table.
                   84685: **
                   84686: ** If any foreign key processing will be required, this function returns
                   84687: ** true. If there is no foreign key related processing, this function 
                   84688: ** returns false.
                   84689: */
                   84690: SQLITE_PRIVATE int sqlite3FkRequired(
                   84691:   Parse *pParse,                  /* Parse context */
                   84692:   Table *pTab,                    /* Table being modified */
                   84693:   int *aChange,                   /* Non-NULL for UPDATE operations */
                   84694:   int chngRowid                   /* True for UPDATE that affects rowid */
                   84695: ){
                   84696:   if( pParse->db->flags&SQLITE_ForeignKeys ){
                   84697:     if( !aChange ){
                   84698:       /* A DELETE operation. Foreign key processing is required if the 
                   84699:       ** table in question is either the child or parent table for any 
                   84700:       ** foreign key constraint.  */
                   84701:       return (sqlite3FkReferences(pTab) || pTab->pFKey);
                   84702:     }else{
                   84703:       /* This is an UPDATE. Foreign key processing is only required if the
                   84704:       ** operation modifies one or more child or parent key columns. */
                   84705:       int i;
                   84706:       FKey *p;
                   84707: 
                   84708:       /* Check if any child key columns are being modified. */
                   84709:       for(p=pTab->pFKey; p; p=p->pNextFrom){
                   84710:         for(i=0; i<p->nCol; i++){
                   84711:           int iChildKey = p->aCol[i].iFrom;
                   84712:           if( aChange[iChildKey]>=0 ) return 1;
                   84713:           if( iChildKey==pTab->iPKey && chngRowid ) return 1;
                   84714:         }
                   84715:       }
                   84716: 
                   84717:       /* Check if any parent key columns are being modified. */
                   84718:       for(p=sqlite3FkReferences(pTab); p; p=p->pNextTo){
                   84719:         for(i=0; i<p->nCol; i++){
                   84720:           char *zKey = p->aCol[i].zCol;
                   84721:           int iKey;
                   84722:           for(iKey=0; iKey<pTab->nCol; iKey++){
                   84723:             Column *pCol = &pTab->aCol[iKey];
                   84724:             if( (zKey ? !sqlite3StrICmp(pCol->zName, zKey) : pCol->isPrimKey) ){
                   84725:               if( aChange[iKey]>=0 ) return 1;
                   84726:               if( iKey==pTab->iPKey && chngRowid ) return 1;
                   84727:             }
                   84728:           }
                   84729:         }
                   84730:       }
                   84731:     }
                   84732:   }
                   84733:   return 0;
                   84734: }
                   84735: 
                   84736: /*
                   84737: ** This function is called when an UPDATE or DELETE operation is being 
                   84738: ** compiled on table pTab, which is the parent table of foreign-key pFKey.
                   84739: ** If the current operation is an UPDATE, then the pChanges parameter is
                   84740: ** passed a pointer to the list of columns being modified. If it is a
                   84741: ** DELETE, pChanges is passed a NULL pointer.
                   84742: **
                   84743: ** It returns a pointer to a Trigger structure containing a trigger
                   84744: ** equivalent to the ON UPDATE or ON DELETE action specified by pFKey.
                   84745: ** If the action is "NO ACTION" or "RESTRICT", then a NULL pointer is
                   84746: ** returned (these actions require no special handling by the triggers
                   84747: ** sub-system, code for them is created by fkScanChildren()).
                   84748: **
                   84749: ** For example, if pFKey is the foreign key and pTab is table "p" in 
                   84750: ** the following schema:
                   84751: **
                   84752: **   CREATE TABLE p(pk PRIMARY KEY);
                   84753: **   CREATE TABLE c(ck REFERENCES p ON DELETE CASCADE);
                   84754: **
                   84755: ** then the returned trigger structure is equivalent to:
                   84756: **
                   84757: **   CREATE TRIGGER ... DELETE ON p BEGIN
                   84758: **     DELETE FROM c WHERE ck = old.pk;
                   84759: **   END;
                   84760: **
                   84761: ** The returned pointer is cached as part of the foreign key object. It
                   84762: ** is eventually freed along with the rest of the foreign key object by 
                   84763: ** sqlite3FkDelete().
                   84764: */
                   84765: static Trigger *fkActionTrigger(
                   84766:   Parse *pParse,                  /* Parse context */
                   84767:   Table *pTab,                    /* Table being updated or deleted from */
                   84768:   FKey *pFKey,                    /* Foreign key to get action for */
                   84769:   ExprList *pChanges              /* Change-list for UPDATE, NULL for DELETE */
                   84770: ){
                   84771:   sqlite3 *db = pParse->db;       /* Database handle */
                   84772:   int action;                     /* One of OE_None, OE_Cascade etc. */
                   84773:   Trigger *pTrigger;              /* Trigger definition to return */
                   84774:   int iAction = (pChanges!=0);    /* 1 for UPDATE, 0 for DELETE */
                   84775: 
                   84776:   action = pFKey->aAction[iAction];
                   84777:   pTrigger = pFKey->apTrigger[iAction];
                   84778: 
                   84779:   if( action!=OE_None && !pTrigger ){
                   84780:     u8 enableLookaside;           /* Copy of db->lookaside.bEnabled */
                   84781:     char const *zFrom;            /* Name of child table */
                   84782:     int nFrom;                    /* Length in bytes of zFrom */
                   84783:     Index *pIdx = 0;              /* Parent key index for this FK */
                   84784:     int *aiCol = 0;               /* child table cols -> parent key cols */
                   84785:     TriggerStep *pStep = 0;        /* First (only) step of trigger program */
                   84786:     Expr *pWhere = 0;             /* WHERE clause of trigger step */
                   84787:     ExprList *pList = 0;          /* Changes list if ON UPDATE CASCADE */
                   84788:     Select *pSelect = 0;          /* If RESTRICT, "SELECT RAISE(...)" */
                   84789:     int i;                        /* Iterator variable */
                   84790:     Expr *pWhen = 0;              /* WHEN clause for the trigger */
                   84791: 
                   84792:     if( locateFkeyIndex(pParse, pTab, pFKey, &pIdx, &aiCol) ) return 0;
                   84793:     assert( aiCol || pFKey->nCol==1 );
                   84794: 
                   84795:     for(i=0; i<pFKey->nCol; i++){
                   84796:       Token tOld = { "old", 3 };  /* Literal "old" token */
                   84797:       Token tNew = { "new", 3 };  /* Literal "new" token */
                   84798:       Token tFromCol;             /* Name of column in child table */
                   84799:       Token tToCol;               /* Name of column in parent table */
                   84800:       int iFromCol;               /* Idx of column in child table */
                   84801:       Expr *pEq;                  /* tFromCol = OLD.tToCol */
                   84802: 
                   84803:       iFromCol = aiCol ? aiCol[i] : pFKey->aCol[0].iFrom;
                   84804:       assert( iFromCol>=0 );
                   84805:       tToCol.z = pIdx ? pTab->aCol[pIdx->aiColumn[i]].zName : "oid";
                   84806:       tFromCol.z = pFKey->pFrom->aCol[iFromCol].zName;
                   84807: 
                   84808:       tToCol.n = sqlite3Strlen30(tToCol.z);
                   84809:       tFromCol.n = sqlite3Strlen30(tFromCol.z);
                   84810: 
                   84811:       /* Create the expression "OLD.zToCol = zFromCol". It is important
                   84812:       ** that the "OLD.zToCol" term is on the LHS of the = operator, so
                   84813:       ** that the affinity and collation sequence associated with the
                   84814:       ** parent table are used for the comparison. */
                   84815:       pEq = sqlite3PExpr(pParse, TK_EQ,
                   84816:           sqlite3PExpr(pParse, TK_DOT, 
                   84817:             sqlite3PExpr(pParse, TK_ID, 0, 0, &tOld),
                   84818:             sqlite3PExpr(pParse, TK_ID, 0, 0, &tToCol)
                   84819:           , 0),
                   84820:           sqlite3PExpr(pParse, TK_ID, 0, 0, &tFromCol)
                   84821:       , 0);
                   84822:       pWhere = sqlite3ExprAnd(db, pWhere, pEq);
                   84823: 
                   84824:       /* For ON UPDATE, construct the next term of the WHEN clause.
                   84825:       ** The final WHEN clause will be like this:
                   84826:       **
                   84827:       **    WHEN NOT(old.col1 IS new.col1 AND ... AND old.colN IS new.colN)
                   84828:       */
                   84829:       if( pChanges ){
                   84830:         pEq = sqlite3PExpr(pParse, TK_IS,
                   84831:             sqlite3PExpr(pParse, TK_DOT, 
                   84832:               sqlite3PExpr(pParse, TK_ID, 0, 0, &tOld),
                   84833:               sqlite3PExpr(pParse, TK_ID, 0, 0, &tToCol),
                   84834:               0),
                   84835:             sqlite3PExpr(pParse, TK_DOT, 
                   84836:               sqlite3PExpr(pParse, TK_ID, 0, 0, &tNew),
                   84837:               sqlite3PExpr(pParse, TK_ID, 0, 0, &tToCol),
                   84838:               0),
                   84839:             0);
                   84840:         pWhen = sqlite3ExprAnd(db, pWhen, pEq);
                   84841:       }
                   84842:   
                   84843:       if( action!=OE_Restrict && (action!=OE_Cascade || pChanges) ){
                   84844:         Expr *pNew;
                   84845:         if( action==OE_Cascade ){
                   84846:           pNew = sqlite3PExpr(pParse, TK_DOT, 
                   84847:             sqlite3PExpr(pParse, TK_ID, 0, 0, &tNew),
                   84848:             sqlite3PExpr(pParse, TK_ID, 0, 0, &tToCol)
                   84849:           , 0);
                   84850:         }else if( action==OE_SetDflt ){
                   84851:           Expr *pDflt = pFKey->pFrom->aCol[iFromCol].pDflt;
                   84852:           if( pDflt ){
                   84853:             pNew = sqlite3ExprDup(db, pDflt, 0);
                   84854:           }else{
                   84855:             pNew = sqlite3PExpr(pParse, TK_NULL, 0, 0, 0);
                   84856:           }
                   84857:         }else{
                   84858:           pNew = sqlite3PExpr(pParse, TK_NULL, 0, 0, 0);
                   84859:         }
                   84860:         pList = sqlite3ExprListAppend(pParse, pList, pNew);
                   84861:         sqlite3ExprListSetName(pParse, pList, &tFromCol, 0);
                   84862:       }
                   84863:     }
                   84864:     sqlite3DbFree(db, aiCol);
                   84865: 
                   84866:     zFrom = pFKey->pFrom->zName;
                   84867:     nFrom = sqlite3Strlen30(zFrom);
                   84868: 
                   84869:     if( action==OE_Restrict ){
                   84870:       Token tFrom;
                   84871:       Expr *pRaise; 
                   84872: 
                   84873:       tFrom.z = zFrom;
                   84874:       tFrom.n = nFrom;
                   84875:       pRaise = sqlite3Expr(db, TK_RAISE, "foreign key constraint failed");
                   84876:       if( pRaise ){
                   84877:         pRaise->affinity = OE_Abort;
                   84878:       }
                   84879:       pSelect = sqlite3SelectNew(pParse, 
                   84880:           sqlite3ExprListAppend(pParse, 0, pRaise),
                   84881:           sqlite3SrcListAppend(db, 0, &tFrom, 0),
                   84882:           pWhere,
                   84883:           0, 0, 0, 0, 0, 0
                   84884:       );
                   84885:       pWhere = 0;
                   84886:     }
                   84887: 
                   84888:     /* Disable lookaside memory allocation */
                   84889:     enableLookaside = db->lookaside.bEnabled;
                   84890:     db->lookaside.bEnabled = 0;
                   84891: 
                   84892:     pTrigger = (Trigger *)sqlite3DbMallocZero(db, 
                   84893:         sizeof(Trigger) +         /* struct Trigger */
                   84894:         sizeof(TriggerStep) +     /* Single step in trigger program */
                   84895:         nFrom + 1                 /* Space for pStep->target.z */
                   84896:     );
                   84897:     if( pTrigger ){
                   84898:       pStep = pTrigger->step_list = (TriggerStep *)&pTrigger[1];
                   84899:       pStep->target.z = (char *)&pStep[1];
                   84900:       pStep->target.n = nFrom;
                   84901:       memcpy((char *)pStep->target.z, zFrom, nFrom);
                   84902:   
                   84903:       pStep->pWhere = sqlite3ExprDup(db, pWhere, EXPRDUP_REDUCE);
                   84904:       pStep->pExprList = sqlite3ExprListDup(db, pList, EXPRDUP_REDUCE);
                   84905:       pStep->pSelect = sqlite3SelectDup(db, pSelect, EXPRDUP_REDUCE);
                   84906:       if( pWhen ){
                   84907:         pWhen = sqlite3PExpr(pParse, TK_NOT, pWhen, 0, 0);
                   84908:         pTrigger->pWhen = sqlite3ExprDup(db, pWhen, EXPRDUP_REDUCE);
                   84909:       }
                   84910:     }
                   84911: 
                   84912:     /* Re-enable the lookaside buffer, if it was disabled earlier. */
                   84913:     db->lookaside.bEnabled = enableLookaside;
                   84914: 
                   84915:     sqlite3ExprDelete(db, pWhere);
                   84916:     sqlite3ExprDelete(db, pWhen);
                   84917:     sqlite3ExprListDelete(db, pList);
                   84918:     sqlite3SelectDelete(db, pSelect);
                   84919:     if( db->mallocFailed==1 ){
                   84920:       fkTriggerDelete(db, pTrigger);
                   84921:       return 0;
                   84922:     }
                   84923: 
                   84924:     switch( action ){
                   84925:       case OE_Restrict:
                   84926:         pStep->op = TK_SELECT; 
                   84927:         break;
                   84928:       case OE_Cascade: 
                   84929:         if( !pChanges ){ 
                   84930:           pStep->op = TK_DELETE; 
                   84931:           break; 
                   84932:         }
                   84933:       default:
                   84934:         pStep->op = TK_UPDATE;
                   84935:     }
                   84936:     pStep->pTrig = pTrigger;
                   84937:     pTrigger->pSchema = pTab->pSchema;
                   84938:     pTrigger->pTabSchema = pTab->pSchema;
                   84939:     pFKey->apTrigger[iAction] = pTrigger;
                   84940:     pTrigger->op = (pChanges ? TK_UPDATE : TK_DELETE);
                   84941:   }
                   84942: 
                   84943:   return pTrigger;
                   84944: }
                   84945: 
                   84946: /*
                   84947: ** This function is called when deleting or updating a row to implement
                   84948: ** any required CASCADE, SET NULL or SET DEFAULT actions.
                   84949: */
                   84950: SQLITE_PRIVATE void sqlite3FkActions(
                   84951:   Parse *pParse,                  /* Parse context */
                   84952:   Table *pTab,                    /* Table being updated or deleted from */
                   84953:   ExprList *pChanges,             /* Change-list for UPDATE, NULL for DELETE */
                   84954:   int regOld                      /* Address of array containing old row */
                   84955: ){
                   84956:   /* If foreign-key support is enabled, iterate through all FKs that 
                   84957:   ** refer to table pTab. If there is an action associated with the FK 
                   84958:   ** for this operation (either update or delete), invoke the associated 
                   84959:   ** trigger sub-program.  */
                   84960:   if( pParse->db->flags&SQLITE_ForeignKeys ){
                   84961:     FKey *pFKey;                  /* Iterator variable */
                   84962:     for(pFKey = sqlite3FkReferences(pTab); pFKey; pFKey=pFKey->pNextTo){
                   84963:       Trigger *pAction = fkActionTrigger(pParse, pTab, pFKey, pChanges);
                   84964:       if( pAction ){
                   84965:         sqlite3CodeRowTriggerDirect(pParse, pAction, pTab, regOld, OE_Abort, 0);
                   84966:       }
                   84967:     }
                   84968:   }
                   84969: }
                   84970: 
                   84971: #endif /* ifndef SQLITE_OMIT_TRIGGER */
                   84972: 
                   84973: /*
                   84974: ** Free all memory associated with foreign key definitions attached to
                   84975: ** table pTab. Remove the deleted foreign keys from the Schema.fkeyHash
                   84976: ** hash table.
                   84977: */
                   84978: SQLITE_PRIVATE void sqlite3FkDelete(sqlite3 *db, Table *pTab){
                   84979:   FKey *pFKey;                    /* Iterator variable */
                   84980:   FKey *pNext;                    /* Copy of pFKey->pNextFrom */
                   84981: 
                   84982:   assert( db==0 || sqlite3SchemaMutexHeld(db, 0, pTab->pSchema) );
                   84983:   for(pFKey=pTab->pFKey; pFKey; pFKey=pNext){
                   84984: 
                   84985:     /* Remove the FK from the fkeyHash hash table. */
                   84986:     if( !db || db->pnBytesFreed==0 ){
                   84987:       if( pFKey->pPrevTo ){
                   84988:         pFKey->pPrevTo->pNextTo = pFKey->pNextTo;
                   84989:       }else{
                   84990:         void *p = (void *)pFKey->pNextTo;
                   84991:         const char *z = (p ? pFKey->pNextTo->zTo : pFKey->zTo);
                   84992:         sqlite3HashInsert(&pTab->pSchema->fkeyHash, z, sqlite3Strlen30(z), p);
                   84993:       }
                   84994:       if( pFKey->pNextTo ){
                   84995:         pFKey->pNextTo->pPrevTo = pFKey->pPrevTo;
                   84996:       }
                   84997:     }
                   84998: 
                   84999:     /* EV: R-30323-21917 Each foreign key constraint in SQLite is
                   85000:     ** classified as either immediate or deferred.
                   85001:     */
                   85002:     assert( pFKey->isDeferred==0 || pFKey->isDeferred==1 );
                   85003: 
                   85004:     /* Delete any triggers created to implement actions for this FK. */
                   85005: #ifndef SQLITE_OMIT_TRIGGER
                   85006:     fkTriggerDelete(db, pFKey->apTrigger[0]);
                   85007:     fkTriggerDelete(db, pFKey->apTrigger[1]);
                   85008: #endif
                   85009: 
                   85010:     pNext = pFKey->pNextFrom;
                   85011:     sqlite3DbFree(db, pFKey);
                   85012:   }
                   85013: }
                   85014: #endif /* ifndef SQLITE_OMIT_FOREIGN_KEY */
                   85015: 
                   85016: /************** End of fkey.c ************************************************/
                   85017: /************** Begin file insert.c ******************************************/
                   85018: /*
                   85019: ** 2001 September 15
                   85020: **
                   85021: ** The author disclaims copyright to this source code.  In place of
                   85022: ** a legal notice, here is a blessing:
                   85023: **
                   85024: **    May you do good and not evil.
                   85025: **    May you find forgiveness for yourself and forgive others.
                   85026: **    May you share freely, never taking more than you give.
                   85027: **
                   85028: *************************************************************************
                   85029: ** This file contains C code routines that are called by the parser
                   85030: ** to handle INSERT statements in SQLite.
                   85031: */
                   85032: 
                   85033: /*
                   85034: ** Generate code that will open a table for reading.
                   85035: */
                   85036: SQLITE_PRIVATE void sqlite3OpenTable(
                   85037:   Parse *p,       /* Generate code into this VDBE */
                   85038:   int iCur,       /* The cursor number of the table */
                   85039:   int iDb,        /* The database index in sqlite3.aDb[] */
                   85040:   Table *pTab,    /* The table to be opened */
                   85041:   int opcode      /* OP_OpenRead or OP_OpenWrite */
                   85042: ){
                   85043:   Vdbe *v;
                   85044:   if( IsVirtual(pTab) ) return;
                   85045:   v = sqlite3GetVdbe(p);
                   85046:   assert( opcode==OP_OpenWrite || opcode==OP_OpenRead );
                   85047:   sqlite3TableLock(p, iDb, pTab->tnum, (opcode==OP_OpenWrite)?1:0, pTab->zName);
                   85048:   sqlite3VdbeAddOp3(v, opcode, iCur, pTab->tnum, iDb);
                   85049:   sqlite3VdbeChangeP4(v, -1, SQLITE_INT_TO_PTR(pTab->nCol), P4_INT32);
                   85050:   VdbeComment((v, "%s", pTab->zName));
                   85051: }
                   85052: 
                   85053: /*
                   85054: ** Return a pointer to the column affinity string associated with index
                   85055: ** pIdx. A column affinity string has one character for each column in 
                   85056: ** the table, according to the affinity of the column:
                   85057: **
                   85058: **  Character      Column affinity
                   85059: **  ------------------------------
                   85060: **  'a'            TEXT
                   85061: **  'b'            NONE
                   85062: **  'c'            NUMERIC
                   85063: **  'd'            INTEGER
                   85064: **  'e'            REAL
                   85065: **
                   85066: ** An extra 'b' is appended to the end of the string to cover the
                   85067: ** rowid that appears as the last column in every index.
                   85068: **
                   85069: ** Memory for the buffer containing the column index affinity string
                   85070: ** is managed along with the rest of the Index structure. It will be
                   85071: ** released when sqlite3DeleteIndex() is called.
                   85072: */
                   85073: SQLITE_PRIVATE const char *sqlite3IndexAffinityStr(Vdbe *v, Index *pIdx){
                   85074:   if( !pIdx->zColAff ){
                   85075:     /* The first time a column affinity string for a particular index is
                   85076:     ** required, it is allocated and populated here. It is then stored as
                   85077:     ** a member of the Index structure for subsequent use.
                   85078:     **
                   85079:     ** The column affinity string will eventually be deleted by
                   85080:     ** sqliteDeleteIndex() when the Index structure itself is cleaned
                   85081:     ** up.
                   85082:     */
                   85083:     int n;
                   85084:     Table *pTab = pIdx->pTable;
                   85085:     sqlite3 *db = sqlite3VdbeDb(v);
                   85086:     pIdx->zColAff = (char *)sqlite3DbMallocRaw(0, pIdx->nColumn+2);
                   85087:     if( !pIdx->zColAff ){
                   85088:       db->mallocFailed = 1;
                   85089:       return 0;
                   85090:     }
                   85091:     for(n=0; n<pIdx->nColumn; n++){
                   85092:       pIdx->zColAff[n] = pTab->aCol[pIdx->aiColumn[n]].affinity;
                   85093:     }
                   85094:     pIdx->zColAff[n++] = SQLITE_AFF_NONE;
                   85095:     pIdx->zColAff[n] = 0;
                   85096:   }
                   85097:  
                   85098:   return pIdx->zColAff;
                   85099: }
                   85100: 
                   85101: /*
                   85102: ** Set P4 of the most recently inserted opcode to a column affinity
                   85103: ** string for table pTab. A column affinity string has one character
                   85104: ** for each column indexed by the index, according to the affinity of the
                   85105: ** column:
                   85106: **
                   85107: **  Character      Column affinity
                   85108: **  ------------------------------
                   85109: **  'a'            TEXT
                   85110: **  'b'            NONE
                   85111: **  'c'            NUMERIC
                   85112: **  'd'            INTEGER
                   85113: **  'e'            REAL
                   85114: */
                   85115: SQLITE_PRIVATE void sqlite3TableAffinityStr(Vdbe *v, Table *pTab){
                   85116:   /* The first time a column affinity string for a particular table
                   85117:   ** is required, it is allocated and populated here. It is then 
                   85118:   ** stored as a member of the Table structure for subsequent use.
                   85119:   **
                   85120:   ** The column affinity string will eventually be deleted by
                   85121:   ** sqlite3DeleteTable() when the Table structure itself is cleaned up.
                   85122:   */
                   85123:   if( !pTab->zColAff ){
                   85124:     char *zColAff;
                   85125:     int i;
                   85126:     sqlite3 *db = sqlite3VdbeDb(v);
                   85127: 
                   85128:     zColAff = (char *)sqlite3DbMallocRaw(0, pTab->nCol+1);
                   85129:     if( !zColAff ){
                   85130:       db->mallocFailed = 1;
                   85131:       return;
                   85132:     }
                   85133: 
                   85134:     for(i=0; i<pTab->nCol; i++){
                   85135:       zColAff[i] = pTab->aCol[i].affinity;
                   85136:     }
                   85137:     zColAff[pTab->nCol] = '\0';
                   85138: 
                   85139:     pTab->zColAff = zColAff;
                   85140:   }
                   85141: 
                   85142:   sqlite3VdbeChangeP4(v, -1, pTab->zColAff, P4_TRANSIENT);
                   85143: }
                   85144: 
                   85145: /*
                   85146: ** Return non-zero if the table pTab in database iDb or any of its indices
                   85147: ** have been opened at any point in the VDBE program beginning at location
                   85148: ** iStartAddr throught the end of the program.  This is used to see if 
                   85149: ** a statement of the form  "INSERT INTO <iDb, pTab> SELECT ..." can 
                   85150: ** run without using temporary table for the results of the SELECT. 
                   85151: */
                   85152: static int readsTable(Parse *p, int iStartAddr, int iDb, Table *pTab){
                   85153:   Vdbe *v = sqlite3GetVdbe(p);
                   85154:   int i;
                   85155:   int iEnd = sqlite3VdbeCurrentAddr(v);
                   85156: #ifndef SQLITE_OMIT_VIRTUALTABLE
                   85157:   VTable *pVTab = IsVirtual(pTab) ? sqlite3GetVTable(p->db, pTab) : 0;
                   85158: #endif
                   85159: 
                   85160:   for(i=iStartAddr; i<iEnd; i++){
                   85161:     VdbeOp *pOp = sqlite3VdbeGetOp(v, i);
                   85162:     assert( pOp!=0 );
                   85163:     if( pOp->opcode==OP_OpenRead && pOp->p3==iDb ){
                   85164:       Index *pIndex;
                   85165:       int tnum = pOp->p2;
                   85166:       if( tnum==pTab->tnum ){
                   85167:         return 1;
                   85168:       }
                   85169:       for(pIndex=pTab->pIndex; pIndex; pIndex=pIndex->pNext){
                   85170:         if( tnum==pIndex->tnum ){
                   85171:           return 1;
                   85172:         }
                   85173:       }
                   85174:     }
                   85175: #ifndef SQLITE_OMIT_VIRTUALTABLE
                   85176:     if( pOp->opcode==OP_VOpen && pOp->p4.pVtab==pVTab ){
                   85177:       assert( pOp->p4.pVtab!=0 );
                   85178:       assert( pOp->p4type==P4_VTAB );
                   85179:       return 1;
                   85180:     }
                   85181: #endif
                   85182:   }
                   85183:   return 0;
                   85184: }
                   85185: 
                   85186: #ifndef SQLITE_OMIT_AUTOINCREMENT
                   85187: /*
                   85188: ** Locate or create an AutoincInfo structure associated with table pTab
                   85189: ** which is in database iDb.  Return the register number for the register
                   85190: ** that holds the maximum rowid.
                   85191: **
                   85192: ** There is at most one AutoincInfo structure per table even if the
                   85193: ** same table is autoincremented multiple times due to inserts within
                   85194: ** triggers.  A new AutoincInfo structure is created if this is the
                   85195: ** first use of table pTab.  On 2nd and subsequent uses, the original
                   85196: ** AutoincInfo structure is used.
                   85197: **
                   85198: ** Three memory locations are allocated:
                   85199: **
                   85200: **   (1)  Register to hold the name of the pTab table.
                   85201: **   (2)  Register to hold the maximum ROWID of pTab.
                   85202: **   (3)  Register to hold the rowid in sqlite_sequence of pTab
                   85203: **
                   85204: ** The 2nd register is the one that is returned.  That is all the
                   85205: ** insert routine needs to know about.
                   85206: */
                   85207: static int autoIncBegin(
                   85208:   Parse *pParse,      /* Parsing context */
                   85209:   int iDb,            /* Index of the database holding pTab */
                   85210:   Table *pTab         /* The table we are writing to */
                   85211: ){
                   85212:   int memId = 0;      /* Register holding maximum rowid */
                   85213:   if( pTab->tabFlags & TF_Autoincrement ){
                   85214:     Parse *pToplevel = sqlite3ParseToplevel(pParse);
                   85215:     AutoincInfo *pInfo;
                   85216: 
                   85217:     pInfo = pToplevel->pAinc;
                   85218:     while( pInfo && pInfo->pTab!=pTab ){ pInfo = pInfo->pNext; }
                   85219:     if( pInfo==0 ){
                   85220:       pInfo = sqlite3DbMallocRaw(pParse->db, sizeof(*pInfo));
                   85221:       if( pInfo==0 ) return 0;
                   85222:       pInfo->pNext = pToplevel->pAinc;
                   85223:       pToplevel->pAinc = pInfo;
                   85224:       pInfo->pTab = pTab;
                   85225:       pInfo->iDb = iDb;
                   85226:       pToplevel->nMem++;                  /* Register to hold name of table */
                   85227:       pInfo->regCtr = ++pToplevel->nMem;  /* Max rowid register */
                   85228:       pToplevel->nMem++;                  /* Rowid in sqlite_sequence */
                   85229:     }
                   85230:     memId = pInfo->regCtr;
                   85231:   }
                   85232:   return memId;
                   85233: }
                   85234: 
                   85235: /*
                   85236: ** This routine generates code that will initialize all of the
                   85237: ** register used by the autoincrement tracker.  
                   85238: */
                   85239: SQLITE_PRIVATE void sqlite3AutoincrementBegin(Parse *pParse){
                   85240:   AutoincInfo *p;            /* Information about an AUTOINCREMENT */
                   85241:   sqlite3 *db = pParse->db;  /* The database connection */
                   85242:   Db *pDb;                   /* Database only autoinc table */
                   85243:   int memId;                 /* Register holding max rowid */
                   85244:   int addr;                  /* A VDBE address */
                   85245:   Vdbe *v = pParse->pVdbe;   /* VDBE under construction */
                   85246: 
                   85247:   /* This routine is never called during trigger-generation.  It is
                   85248:   ** only called from the top-level */
                   85249:   assert( pParse->pTriggerTab==0 );
                   85250:   assert( pParse==sqlite3ParseToplevel(pParse) );
                   85251: 
                   85252:   assert( v );   /* We failed long ago if this is not so */
                   85253:   for(p = pParse->pAinc; p; p = p->pNext){
                   85254:     pDb = &db->aDb[p->iDb];
                   85255:     memId = p->regCtr;
                   85256:     assert( sqlite3SchemaMutexHeld(db, 0, pDb->pSchema) );
                   85257:     sqlite3OpenTable(pParse, 0, p->iDb, pDb->pSchema->pSeqTab, OP_OpenRead);
                   85258:     addr = sqlite3VdbeCurrentAddr(v);
                   85259:     sqlite3VdbeAddOp4(v, OP_String8, 0, memId-1, 0, p->pTab->zName, 0);
                   85260:     sqlite3VdbeAddOp2(v, OP_Rewind, 0, addr+9);
                   85261:     sqlite3VdbeAddOp3(v, OP_Column, 0, 0, memId);
                   85262:     sqlite3VdbeAddOp3(v, OP_Ne, memId-1, addr+7, memId);
                   85263:     sqlite3VdbeChangeP5(v, SQLITE_JUMPIFNULL);
                   85264:     sqlite3VdbeAddOp2(v, OP_Rowid, 0, memId+1);
                   85265:     sqlite3VdbeAddOp3(v, OP_Column, 0, 1, memId);
                   85266:     sqlite3VdbeAddOp2(v, OP_Goto, 0, addr+9);
                   85267:     sqlite3VdbeAddOp2(v, OP_Next, 0, addr+2);
                   85268:     sqlite3VdbeAddOp2(v, OP_Integer, 0, memId);
                   85269:     sqlite3VdbeAddOp0(v, OP_Close);
                   85270:   }
                   85271: }
                   85272: 
                   85273: /*
                   85274: ** Update the maximum rowid for an autoincrement calculation.
                   85275: **
                   85276: ** This routine should be called when the top of the stack holds a
                   85277: ** new rowid that is about to be inserted.  If that new rowid is
                   85278: ** larger than the maximum rowid in the memId memory cell, then the
                   85279: ** memory cell is updated.  The stack is unchanged.
                   85280: */
                   85281: static void autoIncStep(Parse *pParse, int memId, int regRowid){
                   85282:   if( memId>0 ){
                   85283:     sqlite3VdbeAddOp2(pParse->pVdbe, OP_MemMax, memId, regRowid);
                   85284:   }
                   85285: }
                   85286: 
                   85287: /*
                   85288: ** This routine generates the code needed to write autoincrement
                   85289: ** maximum rowid values back into the sqlite_sequence register.
                   85290: ** Every statement that might do an INSERT into an autoincrement
                   85291: ** table (either directly or through triggers) needs to call this
                   85292: ** routine just before the "exit" code.
                   85293: */
                   85294: SQLITE_PRIVATE void sqlite3AutoincrementEnd(Parse *pParse){
                   85295:   AutoincInfo *p;
                   85296:   Vdbe *v = pParse->pVdbe;
                   85297:   sqlite3 *db = pParse->db;
                   85298: 
                   85299:   assert( v );
                   85300:   for(p = pParse->pAinc; p; p = p->pNext){
                   85301:     Db *pDb = &db->aDb[p->iDb];
                   85302:     int j1, j2, j3, j4, j5;
                   85303:     int iRec;
                   85304:     int memId = p->regCtr;
                   85305: 
                   85306:     iRec = sqlite3GetTempReg(pParse);
                   85307:     assert( sqlite3SchemaMutexHeld(db, 0, pDb->pSchema) );
                   85308:     sqlite3OpenTable(pParse, 0, p->iDb, pDb->pSchema->pSeqTab, OP_OpenWrite);
                   85309:     j1 = sqlite3VdbeAddOp1(v, OP_NotNull, memId+1);
                   85310:     j2 = sqlite3VdbeAddOp0(v, OP_Rewind);
                   85311:     j3 = sqlite3VdbeAddOp3(v, OP_Column, 0, 0, iRec);
                   85312:     j4 = sqlite3VdbeAddOp3(v, OP_Eq, memId-1, 0, iRec);
                   85313:     sqlite3VdbeAddOp2(v, OP_Next, 0, j3);
                   85314:     sqlite3VdbeJumpHere(v, j2);
                   85315:     sqlite3VdbeAddOp2(v, OP_NewRowid, 0, memId+1);
                   85316:     j5 = sqlite3VdbeAddOp0(v, OP_Goto);
                   85317:     sqlite3VdbeJumpHere(v, j4);
                   85318:     sqlite3VdbeAddOp2(v, OP_Rowid, 0, memId+1);
                   85319:     sqlite3VdbeJumpHere(v, j1);
                   85320:     sqlite3VdbeJumpHere(v, j5);
                   85321:     sqlite3VdbeAddOp3(v, OP_MakeRecord, memId-1, 2, iRec);
                   85322:     sqlite3VdbeAddOp3(v, OP_Insert, 0, iRec, memId+1);
                   85323:     sqlite3VdbeChangeP5(v, OPFLAG_APPEND);
                   85324:     sqlite3VdbeAddOp0(v, OP_Close);
                   85325:     sqlite3ReleaseTempReg(pParse, iRec);
                   85326:   }
                   85327: }
                   85328: #else
                   85329: /*
                   85330: ** If SQLITE_OMIT_AUTOINCREMENT is defined, then the three routines
                   85331: ** above are all no-ops
                   85332: */
                   85333: # define autoIncBegin(A,B,C) (0)
                   85334: # define autoIncStep(A,B,C)
                   85335: #endif /* SQLITE_OMIT_AUTOINCREMENT */
                   85336: 
                   85337: 
                   85338: /* Forward declaration */
                   85339: static int xferOptimization(
                   85340:   Parse *pParse,        /* Parser context */
                   85341:   Table *pDest,         /* The table we are inserting into */
                   85342:   Select *pSelect,      /* A SELECT statement to use as the data source */
                   85343:   int onError,          /* How to handle constraint errors */
                   85344:   int iDbDest           /* The database of pDest */
                   85345: );
                   85346: 
                   85347: /*
                   85348: ** This routine is call to handle SQL of the following forms:
                   85349: **
                   85350: **    insert into TABLE (IDLIST) values(EXPRLIST)
                   85351: **    insert into TABLE (IDLIST) select
                   85352: **
                   85353: ** The IDLIST following the table name is always optional.  If omitted,
                   85354: ** then a list of all columns for the table is substituted.  The IDLIST
                   85355: ** appears in the pColumn parameter.  pColumn is NULL if IDLIST is omitted.
                   85356: **
                   85357: ** The pList parameter holds EXPRLIST in the first form of the INSERT
                   85358: ** statement above, and pSelect is NULL.  For the second form, pList is
                   85359: ** NULL and pSelect is a pointer to the select statement used to generate
                   85360: ** data for the insert.
                   85361: **
                   85362: ** The code generated follows one of four templates.  For a simple
                   85363: ** select with data coming from a VALUES clause, the code executes
                   85364: ** once straight down through.  Pseudo-code follows (we call this
                   85365: ** the "1st template"):
                   85366: **
                   85367: **         open write cursor to <table> and its indices
                   85368: **         puts VALUES clause expressions onto the stack
                   85369: **         write the resulting record into <table>
                   85370: **         cleanup
                   85371: **
                   85372: ** The three remaining templates assume the statement is of the form
                   85373: **
                   85374: **   INSERT INTO <table> SELECT ...
                   85375: **
                   85376: ** If the SELECT clause is of the restricted form "SELECT * FROM <table2>" -
                   85377: ** in other words if the SELECT pulls all columns from a single table
                   85378: ** and there is no WHERE or LIMIT or GROUP BY or ORDER BY clauses, and
                   85379: ** if <table2> and <table1> are distinct tables but have identical
                   85380: ** schemas, including all the same indices, then a special optimization
                   85381: ** is invoked that copies raw records from <table2> over to <table1>.
                   85382: ** See the xferOptimization() function for the implementation of this
                   85383: ** template.  This is the 2nd template.
                   85384: **
                   85385: **         open a write cursor to <table>
                   85386: **         open read cursor on <table2>
                   85387: **         transfer all records in <table2> over to <table>
                   85388: **         close cursors
                   85389: **         foreach index on <table>
                   85390: **           open a write cursor on the <table> index
                   85391: **           open a read cursor on the corresponding <table2> index
                   85392: **           transfer all records from the read to the write cursors
                   85393: **           close cursors
                   85394: **         end foreach
                   85395: **
                   85396: ** The 3rd template is for when the second template does not apply
                   85397: ** and the SELECT clause does not read from <table> at any time.
                   85398: ** The generated code follows this template:
                   85399: **
                   85400: **         EOF <- 0
                   85401: **         X <- A
                   85402: **         goto B
                   85403: **      A: setup for the SELECT
                   85404: **         loop over the rows in the SELECT
                   85405: **           load values into registers R..R+n
                   85406: **           yield X
                   85407: **         end loop
                   85408: **         cleanup after the SELECT
                   85409: **         EOF <- 1
                   85410: **         yield X
                   85411: **         goto A
                   85412: **      B: open write cursor to <table> and its indices
                   85413: **      C: yield X
                   85414: **         if EOF goto D
                   85415: **         insert the select result into <table> from R..R+n
                   85416: **         goto C
                   85417: **      D: cleanup
                   85418: **
                   85419: ** The 4th template is used if the insert statement takes its
                   85420: ** values from a SELECT but the data is being inserted into a table
                   85421: ** that is also read as part of the SELECT.  In the third form,
                   85422: ** we have to use a intermediate table to store the results of
                   85423: ** the select.  The template is like this:
                   85424: **
                   85425: **         EOF <- 0
                   85426: **         X <- A
                   85427: **         goto B
                   85428: **      A: setup for the SELECT
                   85429: **         loop over the tables in the SELECT
                   85430: **           load value into register R..R+n
                   85431: **           yield X
                   85432: **         end loop
                   85433: **         cleanup after the SELECT
                   85434: **         EOF <- 1
                   85435: **         yield X
                   85436: **         halt-error
                   85437: **      B: open temp table
                   85438: **      L: yield X
                   85439: **         if EOF goto M
                   85440: **         insert row from R..R+n into temp table
                   85441: **         goto L
                   85442: **      M: open write cursor to <table> and its indices
                   85443: **         rewind temp table
                   85444: **      C: loop over rows of intermediate table
                   85445: **           transfer values form intermediate table into <table>
                   85446: **         end loop
                   85447: **      D: cleanup
                   85448: */
                   85449: SQLITE_PRIVATE void sqlite3Insert(
                   85450:   Parse *pParse,        /* Parser context */
                   85451:   SrcList *pTabList,    /* Name of table into which we are inserting */
                   85452:   ExprList *pList,      /* List of values to be inserted */
                   85453:   Select *pSelect,      /* A SELECT statement to use as the data source */
                   85454:   IdList *pColumn,      /* Column names corresponding to IDLIST. */
                   85455:   int onError           /* How to handle constraint errors */
                   85456: ){
                   85457:   sqlite3 *db;          /* The main database structure */
                   85458:   Table *pTab;          /* The table to insert into.  aka TABLE */
                   85459:   char *zTab;           /* Name of the table into which we are inserting */
                   85460:   const char *zDb;      /* Name of the database holding this table */
                   85461:   int i, j, idx;        /* Loop counters */
                   85462:   Vdbe *v;              /* Generate code into this virtual machine */
                   85463:   Index *pIdx;          /* For looping over indices of the table */
                   85464:   int nColumn;          /* Number of columns in the data */
                   85465:   int nHidden = 0;      /* Number of hidden columns if TABLE is virtual */
                   85466:   int baseCur = 0;      /* VDBE Cursor number for pTab */
                   85467:   int keyColumn = -1;   /* Column that is the INTEGER PRIMARY KEY */
                   85468:   int endOfLoop;        /* Label for the end of the insertion loop */
                   85469:   int useTempTable = 0; /* Store SELECT results in intermediate table */
                   85470:   int srcTab = 0;       /* Data comes from this temporary cursor if >=0 */
                   85471:   int addrInsTop = 0;   /* Jump to label "D" */
                   85472:   int addrCont = 0;     /* Top of insert loop. Label "C" in templates 3 and 4 */
                   85473:   int addrSelect = 0;   /* Address of coroutine that implements the SELECT */
                   85474:   SelectDest dest;      /* Destination for SELECT on rhs of INSERT */
                   85475:   int iDb;              /* Index of database holding TABLE */
                   85476:   Db *pDb;              /* The database containing table being inserted into */
                   85477:   int appendFlag = 0;   /* True if the insert is likely to be an append */
                   85478: 
                   85479:   /* Register allocations */
                   85480:   int regFromSelect = 0;/* Base register for data coming from SELECT */
                   85481:   int regAutoinc = 0;   /* Register holding the AUTOINCREMENT counter */
                   85482:   int regRowCount = 0;  /* Memory cell used for the row counter */
                   85483:   int regIns;           /* Block of regs holding rowid+data being inserted */
                   85484:   int regRowid;         /* registers holding insert rowid */
                   85485:   int regData;          /* register holding first column to insert */
                   85486:   int regEof = 0;       /* Register recording end of SELECT data */
                   85487:   int *aRegIdx = 0;     /* One register allocated to each index */
                   85488: 
                   85489: #ifndef SQLITE_OMIT_TRIGGER
                   85490:   int isView;                 /* True if attempting to insert into a view */
                   85491:   Trigger *pTrigger;          /* List of triggers on pTab, if required */
                   85492:   int tmask;                  /* Mask of trigger times */
                   85493: #endif
                   85494: 
                   85495:   db = pParse->db;
                   85496:   memset(&dest, 0, sizeof(dest));
                   85497:   if( pParse->nErr || db->mallocFailed ){
                   85498:     goto insert_cleanup;
                   85499:   }
                   85500: 
                   85501:   /* Locate the table into which we will be inserting new information.
                   85502:   */
                   85503:   assert( pTabList->nSrc==1 );
                   85504:   zTab = pTabList->a[0].zName;
                   85505:   if( NEVER(zTab==0) ) goto insert_cleanup;
                   85506:   pTab = sqlite3SrcListLookup(pParse, pTabList);
                   85507:   if( pTab==0 ){
                   85508:     goto insert_cleanup;
                   85509:   }
                   85510:   iDb = sqlite3SchemaToIndex(db, pTab->pSchema);
                   85511:   assert( iDb<db->nDb );
                   85512:   pDb = &db->aDb[iDb];
                   85513:   zDb = pDb->zName;
                   85514:   if( sqlite3AuthCheck(pParse, SQLITE_INSERT, pTab->zName, 0, zDb) ){
                   85515:     goto insert_cleanup;
                   85516:   }
                   85517: 
                   85518:   /* Figure out if we have any triggers and if the table being
                   85519:   ** inserted into is a view
                   85520:   */
                   85521: #ifndef SQLITE_OMIT_TRIGGER
                   85522:   pTrigger = sqlite3TriggersExist(pParse, pTab, TK_INSERT, 0, &tmask);
                   85523:   isView = pTab->pSelect!=0;
                   85524: #else
                   85525: # define pTrigger 0
                   85526: # define tmask 0
                   85527: # define isView 0
                   85528: #endif
                   85529: #ifdef SQLITE_OMIT_VIEW
                   85530: # undef isView
                   85531: # define isView 0
                   85532: #endif
                   85533:   assert( (pTrigger && tmask) || (pTrigger==0 && tmask==0) );
                   85534: 
                   85535:   /* If pTab is really a view, make sure it has been initialized.
                   85536:   ** ViewGetColumnNames() is a no-op if pTab is not a view (or virtual 
                   85537:   ** module table).
                   85538:   */
                   85539:   if( sqlite3ViewGetColumnNames(pParse, pTab) ){
                   85540:     goto insert_cleanup;
                   85541:   }
                   85542: 
                   85543:   /* Ensure that:
                   85544:   *  (a) the table is not read-only, 
                   85545:   *  (b) that if it is a view then ON INSERT triggers exist
                   85546:   */
                   85547:   if( sqlite3IsReadOnly(pParse, pTab, tmask) ){
                   85548:     goto insert_cleanup;
                   85549:   }
                   85550: 
                   85551:   /* Allocate a VDBE
                   85552:   */
                   85553:   v = sqlite3GetVdbe(pParse);
                   85554:   if( v==0 ) goto insert_cleanup;
                   85555:   if( pParse->nested==0 ) sqlite3VdbeCountChanges(v);
                   85556:   sqlite3BeginWriteOperation(pParse, pSelect || pTrigger, iDb);
                   85557: 
                   85558: #ifndef SQLITE_OMIT_XFER_OPT
                   85559:   /* If the statement is of the form
                   85560:   **
                   85561:   **       INSERT INTO <table1> SELECT * FROM <table2>;
                   85562:   **
                   85563:   ** Then special optimizations can be applied that make the transfer
                   85564:   ** very fast and which reduce fragmentation of indices.
                   85565:   **
                   85566:   ** This is the 2nd template.
                   85567:   */
                   85568:   if( pColumn==0 && xferOptimization(pParse, pTab, pSelect, onError, iDb) ){
                   85569:     assert( !pTrigger );
                   85570:     assert( pList==0 );
                   85571:     goto insert_end;
                   85572:   }
                   85573: #endif /* SQLITE_OMIT_XFER_OPT */
                   85574: 
                   85575:   /* If this is an AUTOINCREMENT table, look up the sequence number in the
                   85576:   ** sqlite_sequence table and store it in memory cell regAutoinc.
                   85577:   */
                   85578:   regAutoinc = autoIncBegin(pParse, iDb, pTab);
                   85579: 
                   85580:   /* Figure out how many columns of data are supplied.  If the data
                   85581:   ** is coming from a SELECT statement, then generate a co-routine that
                   85582:   ** produces a single row of the SELECT on each invocation.  The
                   85583:   ** co-routine is the common header to the 3rd and 4th templates.
                   85584:   */
                   85585:   if( pSelect ){
                   85586:     /* Data is coming from a SELECT.  Generate code to implement that SELECT
                   85587:     ** as a co-routine.  The code is common to both the 3rd and 4th
                   85588:     ** templates:
                   85589:     **
                   85590:     **         EOF <- 0
                   85591:     **         X <- A
                   85592:     **         goto B
                   85593:     **      A: setup for the SELECT
                   85594:     **         loop over the tables in the SELECT
                   85595:     **           load value into register R..R+n
                   85596:     **           yield X
                   85597:     **         end loop
                   85598:     **         cleanup after the SELECT
                   85599:     **         EOF <- 1
                   85600:     **         yield X
                   85601:     **         halt-error
                   85602:     **
                   85603:     ** On each invocation of the co-routine, it puts a single row of the
                   85604:     ** SELECT result into registers dest.iMem...dest.iMem+dest.nMem-1.
                   85605:     ** (These output registers are allocated by sqlite3Select().)  When
                   85606:     ** the SELECT completes, it sets the EOF flag stored in regEof.
                   85607:     */
                   85608:     int rc, j1;
                   85609: 
                   85610:     regEof = ++pParse->nMem;
                   85611:     sqlite3VdbeAddOp2(v, OP_Integer, 0, regEof);      /* EOF <- 0 */
                   85612:     VdbeComment((v, "SELECT eof flag"));
                   85613:     sqlite3SelectDestInit(&dest, SRT_Coroutine, ++pParse->nMem);
                   85614:     addrSelect = sqlite3VdbeCurrentAddr(v)+2;
                   85615:     sqlite3VdbeAddOp2(v, OP_Integer, addrSelect-1, dest.iParm);
                   85616:     j1 = sqlite3VdbeAddOp2(v, OP_Goto, 0, 0);
                   85617:     VdbeComment((v, "Jump over SELECT coroutine"));
                   85618: 
                   85619:     /* Resolve the expressions in the SELECT statement and execute it. */
                   85620:     rc = sqlite3Select(pParse, pSelect, &dest);
                   85621:     assert( pParse->nErr==0 || rc );
                   85622:     if( rc || NEVER(pParse->nErr) || db->mallocFailed ){
                   85623:       goto insert_cleanup;
                   85624:     }
                   85625:     sqlite3VdbeAddOp2(v, OP_Integer, 1, regEof);         /* EOF <- 1 */
                   85626:     sqlite3VdbeAddOp1(v, OP_Yield, dest.iParm);   /* yield X */
                   85627:     sqlite3VdbeAddOp2(v, OP_Halt, SQLITE_INTERNAL, OE_Abort);
                   85628:     VdbeComment((v, "End of SELECT coroutine"));
                   85629:     sqlite3VdbeJumpHere(v, j1);                          /* label B: */
                   85630: 
                   85631:     regFromSelect = dest.iMem;
                   85632:     assert( pSelect->pEList );
                   85633:     nColumn = pSelect->pEList->nExpr;
                   85634:     assert( dest.nMem==nColumn );
                   85635: 
                   85636:     /* Set useTempTable to TRUE if the result of the SELECT statement
                   85637:     ** should be written into a temporary table (template 4).  Set to
                   85638:     ** FALSE if each* row of the SELECT can be written directly into
                   85639:     ** the destination table (template 3).
                   85640:     **
                   85641:     ** A temp table must be used if the table being updated is also one
                   85642:     ** of the tables being read by the SELECT statement.  Also use a 
                   85643:     ** temp table in the case of row triggers.
                   85644:     */
                   85645:     if( pTrigger || readsTable(pParse, addrSelect, iDb, pTab) ){
                   85646:       useTempTable = 1;
                   85647:     }
                   85648: 
                   85649:     if( useTempTable ){
                   85650:       /* Invoke the coroutine to extract information from the SELECT
                   85651:       ** and add it to a transient table srcTab.  The code generated
                   85652:       ** here is from the 4th template:
                   85653:       **
                   85654:       **      B: open temp table
                   85655:       **      L: yield X
                   85656:       **         if EOF goto M
                   85657:       **         insert row from R..R+n into temp table
                   85658:       **         goto L
                   85659:       **      M: ...
                   85660:       */
                   85661:       int regRec;          /* Register to hold packed record */
                   85662:       int regTempRowid;    /* Register to hold temp table ROWID */
                   85663:       int addrTop;         /* Label "L" */
                   85664:       int addrIf;          /* Address of jump to M */
                   85665: 
                   85666:       srcTab = pParse->nTab++;
                   85667:       regRec = sqlite3GetTempReg(pParse);
                   85668:       regTempRowid = sqlite3GetTempReg(pParse);
                   85669:       sqlite3VdbeAddOp2(v, OP_OpenEphemeral, srcTab, nColumn);
                   85670:       addrTop = sqlite3VdbeAddOp1(v, OP_Yield, dest.iParm);
                   85671:       addrIf = sqlite3VdbeAddOp1(v, OP_If, regEof);
                   85672:       sqlite3VdbeAddOp3(v, OP_MakeRecord, regFromSelect, nColumn, regRec);
                   85673:       sqlite3VdbeAddOp2(v, OP_NewRowid, srcTab, regTempRowid);
                   85674:       sqlite3VdbeAddOp3(v, OP_Insert, srcTab, regRec, regTempRowid);
                   85675:       sqlite3VdbeAddOp2(v, OP_Goto, 0, addrTop);
                   85676:       sqlite3VdbeJumpHere(v, addrIf);
                   85677:       sqlite3ReleaseTempReg(pParse, regRec);
                   85678:       sqlite3ReleaseTempReg(pParse, regTempRowid);
                   85679:     }
                   85680:   }else{
                   85681:     /* This is the case if the data for the INSERT is coming from a VALUES
                   85682:     ** clause
                   85683:     */
                   85684:     NameContext sNC;
                   85685:     memset(&sNC, 0, sizeof(sNC));
                   85686:     sNC.pParse = pParse;
                   85687:     srcTab = -1;
                   85688:     assert( useTempTable==0 );
                   85689:     nColumn = pList ? pList->nExpr : 0;
                   85690:     for(i=0; i<nColumn; i++){
                   85691:       if( sqlite3ResolveExprNames(&sNC, pList->a[i].pExpr) ){
                   85692:         goto insert_cleanup;
                   85693:       }
                   85694:     }
                   85695:   }
                   85696: 
                   85697:   /* Make sure the number of columns in the source data matches the number
                   85698:   ** of columns to be inserted into the table.
                   85699:   */
                   85700:   if( IsVirtual(pTab) ){
                   85701:     for(i=0; i<pTab->nCol; i++){
                   85702:       nHidden += (IsHiddenColumn(&pTab->aCol[i]) ? 1 : 0);
                   85703:     }
                   85704:   }
                   85705:   if( pColumn==0 && nColumn && nColumn!=(pTab->nCol-nHidden) ){
                   85706:     sqlite3ErrorMsg(pParse, 
                   85707:        "table %S has %d columns but %d values were supplied",
                   85708:        pTabList, 0, pTab->nCol-nHidden, nColumn);
                   85709:     goto insert_cleanup;
                   85710:   }
                   85711:   if( pColumn!=0 && nColumn!=pColumn->nId ){
                   85712:     sqlite3ErrorMsg(pParse, "%d values for %d columns", nColumn, pColumn->nId);
                   85713:     goto insert_cleanup;
                   85714:   }
                   85715: 
                   85716:   /* If the INSERT statement included an IDLIST term, then make sure
                   85717:   ** all elements of the IDLIST really are columns of the table and 
                   85718:   ** remember the column indices.
                   85719:   **
                   85720:   ** If the table has an INTEGER PRIMARY KEY column and that column
                   85721:   ** is named in the IDLIST, then record in the keyColumn variable
                   85722:   ** the index into IDLIST of the primary key column.  keyColumn is
                   85723:   ** the index of the primary key as it appears in IDLIST, not as
                   85724:   ** is appears in the original table.  (The index of the primary
                   85725:   ** key in the original table is pTab->iPKey.)
                   85726:   */
                   85727:   if( pColumn ){
                   85728:     for(i=0; i<pColumn->nId; i++){
                   85729:       pColumn->a[i].idx = -1;
                   85730:     }
                   85731:     for(i=0; i<pColumn->nId; i++){
                   85732:       for(j=0; j<pTab->nCol; j++){
                   85733:         if( sqlite3StrICmp(pColumn->a[i].zName, pTab->aCol[j].zName)==0 ){
                   85734:           pColumn->a[i].idx = j;
                   85735:           if( j==pTab->iPKey ){
                   85736:             keyColumn = i;
                   85737:           }
                   85738:           break;
                   85739:         }
                   85740:       }
                   85741:       if( j>=pTab->nCol ){
                   85742:         if( sqlite3IsRowid(pColumn->a[i].zName) ){
                   85743:           keyColumn = i;
                   85744:         }else{
                   85745:           sqlite3ErrorMsg(pParse, "table %S has no column named %s",
                   85746:               pTabList, 0, pColumn->a[i].zName);
                   85747:           pParse->checkSchema = 1;
                   85748:           goto insert_cleanup;
                   85749:         }
                   85750:       }
                   85751:     }
                   85752:   }
                   85753: 
                   85754:   /* If there is no IDLIST term but the table has an integer primary
                   85755:   ** key, the set the keyColumn variable to the primary key column index
                   85756:   ** in the original table definition.
                   85757:   */
                   85758:   if( pColumn==0 && nColumn>0 ){
                   85759:     keyColumn = pTab->iPKey;
                   85760:   }
                   85761:     
                   85762:   /* Initialize the count of rows to be inserted
                   85763:   */
                   85764:   if( db->flags & SQLITE_CountRows ){
                   85765:     regRowCount = ++pParse->nMem;
                   85766:     sqlite3VdbeAddOp2(v, OP_Integer, 0, regRowCount);
                   85767:   }
                   85768: 
                   85769:   /* If this is not a view, open the table and and all indices */
                   85770:   if( !isView ){
                   85771:     int nIdx;
                   85772: 
                   85773:     baseCur = pParse->nTab;
                   85774:     nIdx = sqlite3OpenTableAndIndices(pParse, pTab, baseCur, OP_OpenWrite);
                   85775:     aRegIdx = sqlite3DbMallocRaw(db, sizeof(int)*(nIdx+1));
                   85776:     if( aRegIdx==0 ){
                   85777:       goto insert_cleanup;
                   85778:     }
                   85779:     for(i=0; i<nIdx; i++){
                   85780:       aRegIdx[i] = ++pParse->nMem;
                   85781:     }
                   85782:   }
                   85783: 
                   85784:   /* This is the top of the main insertion loop */
                   85785:   if( useTempTable ){
                   85786:     /* This block codes the top of loop only.  The complete loop is the
                   85787:     ** following pseudocode (template 4):
                   85788:     **
                   85789:     **         rewind temp table
                   85790:     **      C: loop over rows of intermediate table
                   85791:     **           transfer values form intermediate table into <table>
                   85792:     **         end loop
                   85793:     **      D: ...
                   85794:     */
                   85795:     addrInsTop = sqlite3VdbeAddOp1(v, OP_Rewind, srcTab);
                   85796:     addrCont = sqlite3VdbeCurrentAddr(v);
                   85797:   }else if( pSelect ){
                   85798:     /* This block codes the top of loop only.  The complete loop is the
                   85799:     ** following pseudocode (template 3):
                   85800:     **
                   85801:     **      C: yield X
                   85802:     **         if EOF goto D
                   85803:     **         insert the select result into <table> from R..R+n
                   85804:     **         goto C
                   85805:     **      D: ...
                   85806:     */
                   85807:     addrCont = sqlite3VdbeAddOp1(v, OP_Yield, dest.iParm);
                   85808:     addrInsTop = sqlite3VdbeAddOp1(v, OP_If, regEof);
                   85809:   }
                   85810: 
                   85811:   /* Allocate registers for holding the rowid of the new row,
                   85812:   ** the content of the new row, and the assemblied row record.
                   85813:   */
                   85814:   regRowid = regIns = pParse->nMem+1;
                   85815:   pParse->nMem += pTab->nCol + 1;
                   85816:   if( IsVirtual(pTab) ){
                   85817:     regRowid++;
                   85818:     pParse->nMem++;
                   85819:   }
                   85820:   regData = regRowid+1;
                   85821: 
                   85822:   /* Run the BEFORE and INSTEAD OF triggers, if there are any
                   85823:   */
                   85824:   endOfLoop = sqlite3VdbeMakeLabel(v);
                   85825:   if( tmask & TRIGGER_BEFORE ){
                   85826:     int regCols = sqlite3GetTempRange(pParse, pTab->nCol+1);
                   85827: 
                   85828:     /* build the NEW.* reference row.  Note that if there is an INTEGER
                   85829:     ** PRIMARY KEY into which a NULL is being inserted, that NULL will be
                   85830:     ** translated into a unique ID for the row.  But on a BEFORE trigger,
                   85831:     ** we do not know what the unique ID will be (because the insert has
                   85832:     ** not happened yet) so we substitute a rowid of -1
                   85833:     */
                   85834:     if( keyColumn<0 ){
                   85835:       sqlite3VdbeAddOp2(v, OP_Integer, -1, regCols);
                   85836:     }else{
                   85837:       int j1;
                   85838:       if( useTempTable ){
                   85839:         sqlite3VdbeAddOp3(v, OP_Column, srcTab, keyColumn, regCols);
                   85840:       }else{
                   85841:         assert( pSelect==0 );  /* Otherwise useTempTable is true */
                   85842:         sqlite3ExprCode(pParse, pList->a[keyColumn].pExpr, regCols);
                   85843:       }
                   85844:       j1 = sqlite3VdbeAddOp1(v, OP_NotNull, regCols);
                   85845:       sqlite3VdbeAddOp2(v, OP_Integer, -1, regCols);
                   85846:       sqlite3VdbeJumpHere(v, j1);
                   85847:       sqlite3VdbeAddOp1(v, OP_MustBeInt, regCols);
                   85848:     }
                   85849: 
                   85850:     /* Cannot have triggers on a virtual table. If it were possible,
                   85851:     ** this block would have to account for hidden column.
                   85852:     */
                   85853:     assert( !IsVirtual(pTab) );
                   85854: 
                   85855:     /* Create the new column data
                   85856:     */
                   85857:     for(i=0; i<pTab->nCol; i++){
                   85858:       if( pColumn==0 ){
                   85859:         j = i;
                   85860:       }else{
                   85861:         for(j=0; j<pColumn->nId; j++){
                   85862:           if( pColumn->a[j].idx==i ) break;
                   85863:         }
                   85864:       }
                   85865:       if( (!useTempTable && !pList) || (pColumn && j>=pColumn->nId) ){
                   85866:         sqlite3ExprCode(pParse, pTab->aCol[i].pDflt, regCols+i+1);
                   85867:       }else if( useTempTable ){
                   85868:         sqlite3VdbeAddOp3(v, OP_Column, srcTab, j, regCols+i+1); 
                   85869:       }else{
                   85870:         assert( pSelect==0 ); /* Otherwise useTempTable is true */
                   85871:         sqlite3ExprCodeAndCache(pParse, pList->a[j].pExpr, regCols+i+1);
                   85872:       }
                   85873:     }
                   85874: 
                   85875:     /* If this is an INSERT on a view with an INSTEAD OF INSERT trigger,
                   85876:     ** do not attempt any conversions before assembling the record.
                   85877:     ** If this is a real table, attempt conversions as required by the
                   85878:     ** table column affinities.
                   85879:     */
                   85880:     if( !isView ){
                   85881:       sqlite3VdbeAddOp2(v, OP_Affinity, regCols+1, pTab->nCol);
                   85882:       sqlite3TableAffinityStr(v, pTab);
                   85883:     }
                   85884: 
                   85885:     /* Fire BEFORE or INSTEAD OF triggers */
                   85886:     sqlite3CodeRowTrigger(pParse, pTrigger, TK_INSERT, 0, TRIGGER_BEFORE, 
                   85887:         pTab, regCols-pTab->nCol-1, onError, endOfLoop);
                   85888: 
                   85889:     sqlite3ReleaseTempRange(pParse, regCols, pTab->nCol+1);
                   85890:   }
                   85891: 
                   85892:   /* Push the record number for the new entry onto the stack.  The
                   85893:   ** record number is a randomly generate integer created by NewRowid
                   85894:   ** except when the table has an INTEGER PRIMARY KEY column, in which
                   85895:   ** case the record number is the same as that column. 
                   85896:   */
                   85897:   if( !isView ){
                   85898:     if( IsVirtual(pTab) ){
                   85899:       /* The row that the VUpdate opcode will delete: none */
                   85900:       sqlite3VdbeAddOp2(v, OP_Null, 0, regIns);
                   85901:     }
                   85902:     if( keyColumn>=0 ){
                   85903:       if( useTempTable ){
                   85904:         sqlite3VdbeAddOp3(v, OP_Column, srcTab, keyColumn, regRowid);
                   85905:       }else if( pSelect ){
                   85906:         sqlite3VdbeAddOp2(v, OP_SCopy, regFromSelect+keyColumn, regRowid);
                   85907:       }else{
                   85908:         VdbeOp *pOp;
                   85909:         sqlite3ExprCode(pParse, pList->a[keyColumn].pExpr, regRowid);
                   85910:         pOp = sqlite3VdbeGetOp(v, -1);
                   85911:         if( ALWAYS(pOp) && pOp->opcode==OP_Null && !IsVirtual(pTab) ){
                   85912:           appendFlag = 1;
                   85913:           pOp->opcode = OP_NewRowid;
                   85914:           pOp->p1 = baseCur;
                   85915:           pOp->p2 = regRowid;
                   85916:           pOp->p3 = regAutoinc;
                   85917:         }
                   85918:       }
                   85919:       /* If the PRIMARY KEY expression is NULL, then use OP_NewRowid
                   85920:       ** to generate a unique primary key value.
                   85921:       */
                   85922:       if( !appendFlag ){
                   85923:         int j1;
                   85924:         if( !IsVirtual(pTab) ){
                   85925:           j1 = sqlite3VdbeAddOp1(v, OP_NotNull, regRowid);
                   85926:           sqlite3VdbeAddOp3(v, OP_NewRowid, baseCur, regRowid, regAutoinc);
                   85927:           sqlite3VdbeJumpHere(v, j1);
                   85928:         }else{
                   85929:           j1 = sqlite3VdbeCurrentAddr(v);
                   85930:           sqlite3VdbeAddOp2(v, OP_IsNull, regRowid, j1+2);
                   85931:         }
                   85932:         sqlite3VdbeAddOp1(v, OP_MustBeInt, regRowid);
                   85933:       }
                   85934:     }else if( IsVirtual(pTab) ){
                   85935:       sqlite3VdbeAddOp2(v, OP_Null, 0, regRowid);
                   85936:     }else{
                   85937:       sqlite3VdbeAddOp3(v, OP_NewRowid, baseCur, regRowid, regAutoinc);
                   85938:       appendFlag = 1;
                   85939:     }
                   85940:     autoIncStep(pParse, regAutoinc, regRowid);
                   85941: 
                   85942:     /* Push onto the stack, data for all columns of the new entry, beginning
                   85943:     ** with the first column.
                   85944:     */
                   85945:     nHidden = 0;
                   85946:     for(i=0; i<pTab->nCol; i++){
                   85947:       int iRegStore = regRowid+1+i;
                   85948:       if( i==pTab->iPKey ){
                   85949:         /* The value of the INTEGER PRIMARY KEY column is always a NULL.
                   85950:         ** Whenever this column is read, the record number will be substituted
                   85951:         ** in its place.  So will fill this column with a NULL to avoid
                   85952:         ** taking up data space with information that will never be used. */
                   85953:         sqlite3VdbeAddOp2(v, OP_Null, 0, iRegStore);
                   85954:         continue;
                   85955:       }
                   85956:       if( pColumn==0 ){
                   85957:         if( IsHiddenColumn(&pTab->aCol[i]) ){
                   85958:           assert( IsVirtual(pTab) );
                   85959:           j = -1;
                   85960:           nHidden++;
                   85961:         }else{
                   85962:           j = i - nHidden;
                   85963:         }
                   85964:       }else{
                   85965:         for(j=0; j<pColumn->nId; j++){
                   85966:           if( pColumn->a[j].idx==i ) break;
                   85967:         }
                   85968:       }
                   85969:       if( j<0 || nColumn==0 || (pColumn && j>=pColumn->nId) ){
                   85970:         sqlite3ExprCode(pParse, pTab->aCol[i].pDflt, iRegStore);
                   85971:       }else if( useTempTable ){
                   85972:         sqlite3VdbeAddOp3(v, OP_Column, srcTab, j, iRegStore); 
                   85973:       }else if( pSelect ){
                   85974:         sqlite3VdbeAddOp2(v, OP_SCopy, regFromSelect+j, iRegStore);
                   85975:       }else{
                   85976:         sqlite3ExprCode(pParse, pList->a[j].pExpr, iRegStore);
                   85977:       }
                   85978:     }
                   85979: 
                   85980:     /* Generate code to check constraints and generate index keys and
                   85981:     ** do the insertion.
                   85982:     */
                   85983: #ifndef SQLITE_OMIT_VIRTUALTABLE
                   85984:     if( IsVirtual(pTab) ){
                   85985:       const char *pVTab = (const char *)sqlite3GetVTable(db, pTab);
                   85986:       sqlite3VtabMakeWritable(pParse, pTab);
                   85987:       sqlite3VdbeAddOp4(v, OP_VUpdate, 1, pTab->nCol+2, regIns, pVTab, P4_VTAB);
                   85988:       sqlite3VdbeChangeP5(v, onError==OE_Default ? OE_Abort : onError);
                   85989:       sqlite3MayAbort(pParse);
                   85990:     }else
                   85991: #endif
                   85992:     {
                   85993:       int isReplace;    /* Set to true if constraints may cause a replace */
                   85994:       sqlite3GenerateConstraintChecks(pParse, pTab, baseCur, regIns, aRegIdx,
                   85995:           keyColumn>=0, 0, onError, endOfLoop, &isReplace
                   85996:       );
                   85997:       sqlite3FkCheck(pParse, pTab, 0, regIns);
                   85998:       sqlite3CompleteInsertion(
                   85999:           pParse, pTab, baseCur, regIns, aRegIdx, 0, appendFlag, isReplace==0
                   86000:       );
                   86001:     }
                   86002:   }
                   86003: 
                   86004:   /* Update the count of rows that are inserted
                   86005:   */
                   86006:   if( (db->flags & SQLITE_CountRows)!=0 ){
                   86007:     sqlite3VdbeAddOp2(v, OP_AddImm, regRowCount, 1);
                   86008:   }
                   86009: 
                   86010:   if( pTrigger ){
                   86011:     /* Code AFTER triggers */
                   86012:     sqlite3CodeRowTrigger(pParse, pTrigger, TK_INSERT, 0, TRIGGER_AFTER, 
                   86013:         pTab, regData-2-pTab->nCol, onError, endOfLoop);
                   86014:   }
                   86015: 
                   86016:   /* The bottom of the main insertion loop, if the data source
                   86017:   ** is a SELECT statement.
                   86018:   */
                   86019:   sqlite3VdbeResolveLabel(v, endOfLoop);
                   86020:   if( useTempTable ){
                   86021:     sqlite3VdbeAddOp2(v, OP_Next, srcTab, addrCont);
                   86022:     sqlite3VdbeJumpHere(v, addrInsTop);
                   86023:     sqlite3VdbeAddOp1(v, OP_Close, srcTab);
                   86024:   }else if( pSelect ){
                   86025:     sqlite3VdbeAddOp2(v, OP_Goto, 0, addrCont);
                   86026:     sqlite3VdbeJumpHere(v, addrInsTop);
                   86027:   }
                   86028: 
                   86029:   if( !IsVirtual(pTab) && !isView ){
                   86030:     /* Close all tables opened */
                   86031:     sqlite3VdbeAddOp1(v, OP_Close, baseCur);
                   86032:     for(idx=1, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, idx++){
                   86033:       sqlite3VdbeAddOp1(v, OP_Close, idx+baseCur);
                   86034:     }
                   86035:   }
                   86036: 
                   86037: insert_end:
                   86038:   /* Update the sqlite_sequence table by storing the content of the
                   86039:   ** maximum rowid counter values recorded while inserting into
                   86040:   ** autoincrement tables.
                   86041:   */
                   86042:   if( pParse->nested==0 && pParse->pTriggerTab==0 ){
                   86043:     sqlite3AutoincrementEnd(pParse);
                   86044:   }
                   86045: 
                   86046:   /*
                   86047:   ** Return the number of rows inserted. If this routine is 
                   86048:   ** generating code because of a call to sqlite3NestedParse(), do not
                   86049:   ** invoke the callback function.
                   86050:   */
                   86051:   if( (db->flags&SQLITE_CountRows) && !pParse->nested && !pParse->pTriggerTab ){
                   86052:     sqlite3VdbeAddOp2(v, OP_ResultRow, regRowCount, 1);
                   86053:     sqlite3VdbeSetNumCols(v, 1);
                   86054:     sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "rows inserted", SQLITE_STATIC);
                   86055:   }
                   86056: 
                   86057: insert_cleanup:
                   86058:   sqlite3SrcListDelete(db, pTabList);
                   86059:   sqlite3ExprListDelete(db, pList);
                   86060:   sqlite3SelectDelete(db, pSelect);
                   86061:   sqlite3IdListDelete(db, pColumn);
                   86062:   sqlite3DbFree(db, aRegIdx);
                   86063: }
                   86064: 
                   86065: /* Make sure "isView" and other macros defined above are undefined. Otherwise
                   86066: ** thely may interfere with compilation of other functions in this file
                   86067: ** (or in another file, if this file becomes part of the amalgamation).  */
                   86068: #ifdef isView
                   86069:  #undef isView
                   86070: #endif
                   86071: #ifdef pTrigger
                   86072:  #undef pTrigger
                   86073: #endif
                   86074: #ifdef tmask
                   86075:  #undef tmask
                   86076: #endif
                   86077: 
                   86078: 
                   86079: /*
                   86080: ** Generate code to do constraint checks prior to an INSERT or an UPDATE.
                   86081: **
                   86082: ** The input is a range of consecutive registers as follows:
                   86083: **
                   86084: **    1.  The rowid of the row after the update.
                   86085: **
                   86086: **    2.  The data in the first column of the entry after the update.
                   86087: **
                   86088: **    i.  Data from middle columns...
                   86089: **
                   86090: **    N.  The data in the last column of the entry after the update.
                   86091: **
                   86092: ** The regRowid parameter is the index of the register containing (1).
                   86093: **
                   86094: ** If isUpdate is true and rowidChng is non-zero, then rowidChng contains
                   86095: ** the address of a register containing the rowid before the update takes
                   86096: ** place. isUpdate is true for UPDATEs and false for INSERTs. If isUpdate
                   86097: ** is false, indicating an INSERT statement, then a non-zero rowidChng 
                   86098: ** indicates that the rowid was explicitly specified as part of the
                   86099: ** INSERT statement. If rowidChng is false, it means that  the rowid is
                   86100: ** computed automatically in an insert or that the rowid value is not 
                   86101: ** modified by an update.
                   86102: **
                   86103: ** The code generated by this routine store new index entries into
                   86104: ** registers identified by aRegIdx[].  No index entry is created for
                   86105: ** indices where aRegIdx[i]==0.  The order of indices in aRegIdx[] is
                   86106: ** the same as the order of indices on the linked list of indices
                   86107: ** attached to the table.
                   86108: **
                   86109: ** This routine also generates code to check constraints.  NOT NULL,
                   86110: ** CHECK, and UNIQUE constraints are all checked.  If a constraint fails,
                   86111: ** then the appropriate action is performed.  There are five possible
                   86112: ** actions: ROLLBACK, ABORT, FAIL, REPLACE, and IGNORE.
                   86113: **
                   86114: **  Constraint type  Action       What Happens
                   86115: **  ---------------  ----------   ----------------------------------------
                   86116: **  any              ROLLBACK     The current transaction is rolled back and
                   86117: **                                sqlite3_exec() returns immediately with a
                   86118: **                                return code of SQLITE_CONSTRAINT.
                   86119: **
                   86120: **  any              ABORT        Back out changes from the current command
                   86121: **                                only (do not do a complete rollback) then
                   86122: **                                cause sqlite3_exec() to return immediately
                   86123: **                                with SQLITE_CONSTRAINT.
                   86124: **
                   86125: **  any              FAIL         Sqlite_exec() returns immediately with a
                   86126: **                                return code of SQLITE_CONSTRAINT.  The
                   86127: **                                transaction is not rolled back and any
                   86128: **                                prior changes are retained.
                   86129: **
                   86130: **  any              IGNORE       The record number and data is popped from
                   86131: **                                the stack and there is an immediate jump
                   86132: **                                to label ignoreDest.
                   86133: **
                   86134: **  NOT NULL         REPLACE      The NULL value is replace by the default
                   86135: **                                value for that column.  If the default value
                   86136: **                                is NULL, the action is the same as ABORT.
                   86137: **
                   86138: **  UNIQUE           REPLACE      The other row that conflicts with the row
                   86139: **                                being inserted is removed.
                   86140: **
                   86141: **  CHECK            REPLACE      Illegal.  The results in an exception.
                   86142: **
                   86143: ** Which action to take is determined by the overrideError parameter.
                   86144: ** Or if overrideError==OE_Default, then the pParse->onError parameter
                   86145: ** is used.  Or if pParse->onError==OE_Default then the onError value
                   86146: ** for the constraint is used.
                   86147: **
                   86148: ** The calling routine must open a read/write cursor for pTab with
                   86149: ** cursor number "baseCur".  All indices of pTab must also have open
                   86150: ** read/write cursors with cursor number baseCur+i for the i-th cursor.
                   86151: ** Except, if there is no possibility of a REPLACE action then
                   86152: ** cursors do not need to be open for indices where aRegIdx[i]==0.
                   86153: */
                   86154: SQLITE_PRIVATE void sqlite3GenerateConstraintChecks(
                   86155:   Parse *pParse,      /* The parser context */
                   86156:   Table *pTab,        /* the table into which we are inserting */
                   86157:   int baseCur,        /* Index of a read/write cursor pointing at pTab */
                   86158:   int regRowid,       /* Index of the range of input registers */
                   86159:   int *aRegIdx,       /* Register used by each index.  0 for unused indices */
                   86160:   int rowidChng,      /* True if the rowid might collide with existing entry */
                   86161:   int isUpdate,       /* True for UPDATE, False for INSERT */
                   86162:   int overrideError,  /* Override onError to this if not OE_Default */
                   86163:   int ignoreDest,     /* Jump to this label on an OE_Ignore resolution */
                   86164:   int *pbMayReplace   /* OUT: Set to true if constraint may cause a replace */
                   86165: ){
                   86166:   int i;              /* loop counter */
                   86167:   Vdbe *v;            /* VDBE under constrution */
                   86168:   int nCol;           /* Number of columns */
                   86169:   int onError;        /* Conflict resolution strategy */
                   86170:   int j1;             /* Addresss of jump instruction */
                   86171:   int j2 = 0, j3;     /* Addresses of jump instructions */
                   86172:   int regData;        /* Register containing first data column */
                   86173:   int iCur;           /* Table cursor number */
                   86174:   Index *pIdx;         /* Pointer to one of the indices */
                   86175:   int seenReplace = 0; /* True if REPLACE is used to resolve INT PK conflict */
                   86176:   int regOldRowid = (rowidChng && isUpdate) ? rowidChng : regRowid;
                   86177: 
                   86178:   v = sqlite3GetVdbe(pParse);
                   86179:   assert( v!=0 );
                   86180:   assert( pTab->pSelect==0 );  /* This table is not a VIEW */
                   86181:   nCol = pTab->nCol;
                   86182:   regData = regRowid + 1;
                   86183: 
                   86184:   /* Test all NOT NULL constraints.
                   86185:   */
                   86186:   for(i=0; i<nCol; i++){
                   86187:     if( i==pTab->iPKey ){
                   86188:       continue;
                   86189:     }
                   86190:     onError = pTab->aCol[i].notNull;
                   86191:     if( onError==OE_None ) continue;
                   86192:     if( overrideError!=OE_Default ){
                   86193:       onError = overrideError;
                   86194:     }else if( onError==OE_Default ){
                   86195:       onError = OE_Abort;
                   86196:     }
                   86197:     if( onError==OE_Replace && pTab->aCol[i].pDflt==0 ){
                   86198:       onError = OE_Abort;
                   86199:     }
                   86200:     assert( onError==OE_Rollback || onError==OE_Abort || onError==OE_Fail
                   86201:         || onError==OE_Ignore || onError==OE_Replace );
                   86202:     switch( onError ){
                   86203:       case OE_Abort:
                   86204:         sqlite3MayAbort(pParse);
                   86205:       case OE_Rollback:
                   86206:       case OE_Fail: {
                   86207:         char *zMsg;
                   86208:         sqlite3VdbeAddOp3(v, OP_HaltIfNull,
                   86209:                                   SQLITE_CONSTRAINT, onError, regData+i);
                   86210:         zMsg = sqlite3MPrintf(pParse->db, "%s.%s may not be NULL",
                   86211:                               pTab->zName, pTab->aCol[i].zName);
                   86212:         sqlite3VdbeChangeP4(v, -1, zMsg, P4_DYNAMIC);
                   86213:         break;
                   86214:       }
                   86215:       case OE_Ignore: {
                   86216:         sqlite3VdbeAddOp2(v, OP_IsNull, regData+i, ignoreDest);
                   86217:         break;
                   86218:       }
                   86219:       default: {
                   86220:         assert( onError==OE_Replace );
                   86221:         j1 = sqlite3VdbeAddOp1(v, OP_NotNull, regData+i);
                   86222:         sqlite3ExprCode(pParse, pTab->aCol[i].pDflt, regData+i);
                   86223:         sqlite3VdbeJumpHere(v, j1);
                   86224:         break;
                   86225:       }
                   86226:     }
                   86227:   }
                   86228: 
                   86229:   /* Test all CHECK constraints
                   86230:   */
                   86231: #ifndef SQLITE_OMIT_CHECK
                   86232:   if( pTab->pCheck && (pParse->db->flags & SQLITE_IgnoreChecks)==0 ){
                   86233:     int allOk = sqlite3VdbeMakeLabel(v);
                   86234:     pParse->ckBase = regData;
                   86235:     sqlite3ExprIfTrue(pParse, pTab->pCheck, allOk, SQLITE_JUMPIFNULL);
                   86236:     onError = overrideError!=OE_Default ? overrideError : OE_Abort;
                   86237:     if( onError==OE_Ignore ){
                   86238:       sqlite3VdbeAddOp2(v, OP_Goto, 0, ignoreDest);
                   86239:     }else{
                   86240:       if( onError==OE_Replace ) onError = OE_Abort; /* IMP: R-15569-63625 */
                   86241:       sqlite3HaltConstraint(pParse, onError, 0, 0);
                   86242:     }
                   86243:     sqlite3VdbeResolveLabel(v, allOk);
                   86244:   }
                   86245: #endif /* !defined(SQLITE_OMIT_CHECK) */
                   86246: 
                   86247:   /* If we have an INTEGER PRIMARY KEY, make sure the primary key
                   86248:   ** of the new record does not previously exist.  Except, if this
                   86249:   ** is an UPDATE and the primary key is not changing, that is OK.
                   86250:   */
                   86251:   if( rowidChng ){
                   86252:     onError = pTab->keyConf;
                   86253:     if( overrideError!=OE_Default ){
                   86254:       onError = overrideError;
                   86255:     }else if( onError==OE_Default ){
                   86256:       onError = OE_Abort;
                   86257:     }
                   86258:     
                   86259:     if( isUpdate ){
                   86260:       j2 = sqlite3VdbeAddOp3(v, OP_Eq, regRowid, 0, rowidChng);
                   86261:     }
                   86262:     j3 = sqlite3VdbeAddOp3(v, OP_NotExists, baseCur, 0, regRowid);
                   86263:     switch( onError ){
                   86264:       default: {
                   86265:         onError = OE_Abort;
                   86266:         /* Fall thru into the next case */
                   86267:       }
                   86268:       case OE_Rollback:
                   86269:       case OE_Abort:
                   86270:       case OE_Fail: {
                   86271:         sqlite3HaltConstraint(
                   86272:           pParse, onError, "PRIMARY KEY must be unique", P4_STATIC);
                   86273:         break;
                   86274:       }
                   86275:       case OE_Replace: {
                   86276:         /* If there are DELETE triggers on this table and the
                   86277:         ** recursive-triggers flag is set, call GenerateRowDelete() to
                   86278:         ** remove the conflicting row from the the table. This will fire
                   86279:         ** the triggers and remove both the table and index b-tree entries.
                   86280:         **
                   86281:         ** Otherwise, if there are no triggers or the recursive-triggers
                   86282:         ** flag is not set, but the table has one or more indexes, call 
                   86283:         ** GenerateRowIndexDelete(). This removes the index b-tree entries 
                   86284:         ** only. The table b-tree entry will be replaced by the new entry 
                   86285:         ** when it is inserted.  
                   86286:         **
                   86287:         ** If either GenerateRowDelete() or GenerateRowIndexDelete() is called,
                   86288:         ** also invoke MultiWrite() to indicate that this VDBE may require
                   86289:         ** statement rollback (if the statement is aborted after the delete
                   86290:         ** takes place). Earlier versions called sqlite3MultiWrite() regardless,
                   86291:         ** but being more selective here allows statements like:
                   86292:         **
                   86293:         **   REPLACE INTO t(rowid) VALUES($newrowid)
                   86294:         **
                   86295:         ** to run without a statement journal if there are no indexes on the
                   86296:         ** table.
                   86297:         */
                   86298:         Trigger *pTrigger = 0;
                   86299:         if( pParse->db->flags&SQLITE_RecTriggers ){
                   86300:           pTrigger = sqlite3TriggersExist(pParse, pTab, TK_DELETE, 0, 0);
                   86301:         }
                   86302:         if( pTrigger || sqlite3FkRequired(pParse, pTab, 0, 0) ){
                   86303:           sqlite3MultiWrite(pParse);
                   86304:           sqlite3GenerateRowDelete(
                   86305:               pParse, pTab, baseCur, regRowid, 0, pTrigger, OE_Replace
                   86306:           );
                   86307:         }else if( pTab->pIndex ){
                   86308:           sqlite3MultiWrite(pParse);
                   86309:           sqlite3GenerateRowIndexDelete(pParse, pTab, baseCur, 0);
                   86310:         }
                   86311:         seenReplace = 1;
                   86312:         break;
                   86313:       }
                   86314:       case OE_Ignore: {
                   86315:         assert( seenReplace==0 );
                   86316:         sqlite3VdbeAddOp2(v, OP_Goto, 0, ignoreDest);
                   86317:         break;
                   86318:       }
                   86319:     }
                   86320:     sqlite3VdbeJumpHere(v, j3);
                   86321:     if( isUpdate ){
                   86322:       sqlite3VdbeJumpHere(v, j2);
                   86323:     }
                   86324:   }
                   86325: 
                   86326:   /* Test all UNIQUE constraints by creating entries for each UNIQUE
                   86327:   ** index and making sure that duplicate entries do not already exist.
                   86328:   ** Add the new records to the indices as we go.
                   86329:   */
                   86330:   for(iCur=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, iCur++){
                   86331:     int regIdx;
                   86332:     int regR;
                   86333: 
                   86334:     if( aRegIdx[iCur]==0 ) continue;  /* Skip unused indices */
                   86335: 
                   86336:     /* Create a key for accessing the index entry */
                   86337:     regIdx = sqlite3GetTempRange(pParse, pIdx->nColumn+1);
                   86338:     for(i=0; i<pIdx->nColumn; i++){
                   86339:       int idx = pIdx->aiColumn[i];
                   86340:       if( idx==pTab->iPKey ){
                   86341:         sqlite3VdbeAddOp2(v, OP_SCopy, regRowid, regIdx+i);
                   86342:       }else{
                   86343:         sqlite3VdbeAddOp2(v, OP_SCopy, regData+idx, regIdx+i);
                   86344:       }
                   86345:     }
                   86346:     sqlite3VdbeAddOp2(v, OP_SCopy, regRowid, regIdx+i);
                   86347:     sqlite3VdbeAddOp3(v, OP_MakeRecord, regIdx, pIdx->nColumn+1, aRegIdx[iCur]);
                   86348:     sqlite3VdbeChangeP4(v, -1, sqlite3IndexAffinityStr(v, pIdx), P4_TRANSIENT);
                   86349:     sqlite3ExprCacheAffinityChange(pParse, regIdx, pIdx->nColumn+1);
                   86350: 
                   86351:     /* Find out what action to take in case there is an indexing conflict */
                   86352:     onError = pIdx->onError;
                   86353:     if( onError==OE_None ){ 
                   86354:       sqlite3ReleaseTempRange(pParse, regIdx, pIdx->nColumn+1);
                   86355:       continue;  /* pIdx is not a UNIQUE index */
                   86356:     }
                   86357:     if( overrideError!=OE_Default ){
                   86358:       onError = overrideError;
                   86359:     }else if( onError==OE_Default ){
                   86360:       onError = OE_Abort;
                   86361:     }
                   86362:     if( seenReplace ){
                   86363:       if( onError==OE_Ignore ) onError = OE_Replace;
                   86364:       else if( onError==OE_Fail ) onError = OE_Abort;
                   86365:     }
                   86366:     
                   86367:     /* Check to see if the new index entry will be unique */
                   86368:     regR = sqlite3GetTempReg(pParse);
                   86369:     sqlite3VdbeAddOp2(v, OP_SCopy, regOldRowid, regR);
                   86370:     j3 = sqlite3VdbeAddOp4(v, OP_IsUnique, baseCur+iCur+1, 0,
                   86371:                            regR, SQLITE_INT_TO_PTR(regIdx),
                   86372:                            P4_INT32);
                   86373:     sqlite3ReleaseTempRange(pParse, regIdx, pIdx->nColumn+1);
                   86374: 
                   86375:     /* Generate code that executes if the new index entry is not unique */
                   86376:     assert( onError==OE_Rollback || onError==OE_Abort || onError==OE_Fail
                   86377:         || onError==OE_Ignore || onError==OE_Replace );
                   86378:     switch( onError ){
                   86379:       case OE_Rollback:
                   86380:       case OE_Abort:
                   86381:       case OE_Fail: {
                   86382:         int j;
                   86383:         StrAccum errMsg;
                   86384:         const char *zSep;
                   86385:         char *zErr;
                   86386: 
                   86387:         sqlite3StrAccumInit(&errMsg, 0, 0, 200);
                   86388:         errMsg.db = pParse->db;
                   86389:         zSep = pIdx->nColumn>1 ? "columns " : "column ";
                   86390:         for(j=0; j<pIdx->nColumn; j++){
                   86391:           char *zCol = pTab->aCol[pIdx->aiColumn[j]].zName;
                   86392:           sqlite3StrAccumAppend(&errMsg, zSep, -1);
                   86393:           zSep = ", ";
                   86394:           sqlite3StrAccumAppend(&errMsg, zCol, -1);
                   86395:         }
                   86396:         sqlite3StrAccumAppend(&errMsg,
                   86397:             pIdx->nColumn>1 ? " are not unique" : " is not unique", -1);
                   86398:         zErr = sqlite3StrAccumFinish(&errMsg);
                   86399:         sqlite3HaltConstraint(pParse, onError, zErr, 0);
                   86400:         sqlite3DbFree(errMsg.db, zErr);
                   86401:         break;
                   86402:       }
                   86403:       case OE_Ignore: {
                   86404:         assert( seenReplace==0 );
                   86405:         sqlite3VdbeAddOp2(v, OP_Goto, 0, ignoreDest);
                   86406:         break;
                   86407:       }
                   86408:       default: {
                   86409:         Trigger *pTrigger = 0;
                   86410:         assert( onError==OE_Replace );
                   86411:         sqlite3MultiWrite(pParse);
                   86412:         if( pParse->db->flags&SQLITE_RecTriggers ){
                   86413:           pTrigger = sqlite3TriggersExist(pParse, pTab, TK_DELETE, 0, 0);
                   86414:         }
                   86415:         sqlite3GenerateRowDelete(
                   86416:             pParse, pTab, baseCur, regR, 0, pTrigger, OE_Replace
                   86417:         );
                   86418:         seenReplace = 1;
                   86419:         break;
                   86420:       }
                   86421:     }
                   86422:     sqlite3VdbeJumpHere(v, j3);
                   86423:     sqlite3ReleaseTempReg(pParse, regR);
                   86424:   }
                   86425:   
                   86426:   if( pbMayReplace ){
                   86427:     *pbMayReplace = seenReplace;
                   86428:   }
                   86429: }
                   86430: 
                   86431: /*
                   86432: ** This routine generates code to finish the INSERT or UPDATE operation
                   86433: ** that was started by a prior call to sqlite3GenerateConstraintChecks.
                   86434: ** A consecutive range of registers starting at regRowid contains the
                   86435: ** rowid and the content to be inserted.
                   86436: **
                   86437: ** The arguments to this routine should be the same as the first six
                   86438: ** arguments to sqlite3GenerateConstraintChecks.
                   86439: */
                   86440: SQLITE_PRIVATE void sqlite3CompleteInsertion(
                   86441:   Parse *pParse,      /* The parser context */
                   86442:   Table *pTab,        /* the table into which we are inserting */
                   86443:   int baseCur,        /* Index of a read/write cursor pointing at pTab */
                   86444:   int regRowid,       /* Range of content */
                   86445:   int *aRegIdx,       /* Register used by each index.  0 for unused indices */
                   86446:   int isUpdate,       /* True for UPDATE, False for INSERT */
                   86447:   int appendBias,     /* True if this is likely to be an append */
                   86448:   int useSeekResult   /* True to set the USESEEKRESULT flag on OP_[Idx]Insert */
                   86449: ){
                   86450:   int i;
                   86451:   Vdbe *v;
                   86452:   int nIdx;
                   86453:   Index *pIdx;
                   86454:   u8 pik_flags;
                   86455:   int regData;
                   86456:   int regRec;
                   86457: 
                   86458:   v = sqlite3GetVdbe(pParse);
                   86459:   assert( v!=0 );
                   86460:   assert( pTab->pSelect==0 );  /* This table is not a VIEW */
                   86461:   for(nIdx=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, nIdx++){}
                   86462:   for(i=nIdx-1; i>=0; i--){
                   86463:     if( aRegIdx[i]==0 ) continue;
                   86464:     sqlite3VdbeAddOp2(v, OP_IdxInsert, baseCur+i+1, aRegIdx[i]);
                   86465:     if( useSeekResult ){
                   86466:       sqlite3VdbeChangeP5(v, OPFLAG_USESEEKRESULT);
                   86467:     }
                   86468:   }
                   86469:   regData = regRowid + 1;
                   86470:   regRec = sqlite3GetTempReg(pParse);
                   86471:   sqlite3VdbeAddOp3(v, OP_MakeRecord, regData, pTab->nCol, regRec);
                   86472:   sqlite3TableAffinityStr(v, pTab);
                   86473:   sqlite3ExprCacheAffinityChange(pParse, regData, pTab->nCol);
                   86474:   if( pParse->nested ){
                   86475:     pik_flags = 0;
                   86476:   }else{
                   86477:     pik_flags = OPFLAG_NCHANGE;
                   86478:     pik_flags |= (isUpdate?OPFLAG_ISUPDATE:OPFLAG_LASTROWID);
                   86479:   }
                   86480:   if( appendBias ){
                   86481:     pik_flags |= OPFLAG_APPEND;
                   86482:   }
                   86483:   if( useSeekResult ){
                   86484:     pik_flags |= OPFLAG_USESEEKRESULT;
                   86485:   }
                   86486:   sqlite3VdbeAddOp3(v, OP_Insert, baseCur, regRec, regRowid);
                   86487:   if( !pParse->nested ){
                   86488:     sqlite3VdbeChangeP4(v, -1, pTab->zName, P4_TRANSIENT);
                   86489:   }
                   86490:   sqlite3VdbeChangeP5(v, pik_flags);
                   86491: }
                   86492: 
                   86493: /*
                   86494: ** Generate code that will open cursors for a table and for all
                   86495: ** indices of that table.  The "baseCur" parameter is the cursor number used
                   86496: ** for the table.  Indices are opened on subsequent cursors.
                   86497: **
                   86498: ** Return the number of indices on the table.
                   86499: */
                   86500: SQLITE_PRIVATE int sqlite3OpenTableAndIndices(
                   86501:   Parse *pParse,   /* Parsing context */
                   86502:   Table *pTab,     /* Table to be opened */
                   86503:   int baseCur,     /* Cursor number assigned to the table */
                   86504:   int op           /* OP_OpenRead or OP_OpenWrite */
                   86505: ){
                   86506:   int i;
                   86507:   int iDb;
                   86508:   Index *pIdx;
                   86509:   Vdbe *v;
                   86510: 
                   86511:   if( IsVirtual(pTab) ) return 0;
                   86512:   iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema);
                   86513:   v = sqlite3GetVdbe(pParse);
                   86514:   assert( v!=0 );
                   86515:   sqlite3OpenTable(pParse, baseCur, iDb, pTab, op);
                   86516:   for(i=1, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, i++){
                   86517:     KeyInfo *pKey = sqlite3IndexKeyinfo(pParse, pIdx);
                   86518:     assert( pIdx->pSchema==pTab->pSchema );
                   86519:     sqlite3VdbeAddOp4(v, op, i+baseCur, pIdx->tnum, iDb,
                   86520:                       (char*)pKey, P4_KEYINFO_HANDOFF);
                   86521:     VdbeComment((v, "%s", pIdx->zName));
                   86522:   }
                   86523:   if( pParse->nTab<baseCur+i ){
                   86524:     pParse->nTab = baseCur+i;
                   86525:   }
                   86526:   return i-1;
                   86527: }
                   86528: 
                   86529: 
                   86530: #ifdef SQLITE_TEST
                   86531: /*
                   86532: ** The following global variable is incremented whenever the
                   86533: ** transfer optimization is used.  This is used for testing
                   86534: ** purposes only - to make sure the transfer optimization really
                   86535: ** is happening when it is suppose to.
                   86536: */
                   86537: SQLITE_API int sqlite3_xferopt_count;
                   86538: #endif /* SQLITE_TEST */
                   86539: 
                   86540: 
                   86541: #ifndef SQLITE_OMIT_XFER_OPT
                   86542: /*
                   86543: ** Check to collation names to see if they are compatible.
                   86544: */
                   86545: static int xferCompatibleCollation(const char *z1, const char *z2){
                   86546:   if( z1==0 ){
                   86547:     return z2==0;
                   86548:   }
                   86549:   if( z2==0 ){
                   86550:     return 0;
                   86551:   }
                   86552:   return sqlite3StrICmp(z1, z2)==0;
                   86553: }
                   86554: 
                   86555: 
                   86556: /*
                   86557: ** Check to see if index pSrc is compatible as a source of data
                   86558: ** for index pDest in an insert transfer optimization.  The rules
                   86559: ** for a compatible index:
                   86560: **
                   86561: **    *   The index is over the same set of columns
                   86562: **    *   The same DESC and ASC markings occurs on all columns
                   86563: **    *   The same onError processing (OE_Abort, OE_Ignore, etc)
                   86564: **    *   The same collating sequence on each column
                   86565: */
                   86566: static int xferCompatibleIndex(Index *pDest, Index *pSrc){
                   86567:   int i;
                   86568:   assert( pDest && pSrc );
                   86569:   assert( pDest->pTable!=pSrc->pTable );
                   86570:   if( pDest->nColumn!=pSrc->nColumn ){
                   86571:     return 0;   /* Different number of columns */
                   86572:   }
                   86573:   if( pDest->onError!=pSrc->onError ){
                   86574:     return 0;   /* Different conflict resolution strategies */
                   86575:   }
                   86576:   for(i=0; i<pSrc->nColumn; i++){
                   86577:     if( pSrc->aiColumn[i]!=pDest->aiColumn[i] ){
                   86578:       return 0;   /* Different columns indexed */
                   86579:     }
                   86580:     if( pSrc->aSortOrder[i]!=pDest->aSortOrder[i] ){
                   86581:       return 0;   /* Different sort orders */
                   86582:     }
                   86583:     if( !xferCompatibleCollation(pSrc->azColl[i],pDest->azColl[i]) ){
                   86584:       return 0;   /* Different collating sequences */
                   86585:     }
                   86586:   }
                   86587: 
                   86588:   /* If no test above fails then the indices must be compatible */
                   86589:   return 1;
                   86590: }
                   86591: 
                   86592: /*
                   86593: ** Attempt the transfer optimization on INSERTs of the form
                   86594: **
                   86595: **     INSERT INTO tab1 SELECT * FROM tab2;
                   86596: **
                   86597: ** This optimization is only attempted if
                   86598: **
                   86599: **    (1)  tab1 and tab2 have identical schemas including all the
                   86600: **         same indices and constraints
                   86601: **
                   86602: **    (2)  tab1 and tab2 are different tables
                   86603: **
                   86604: **    (3)  There must be no triggers on tab1
                   86605: **
                   86606: **    (4)  The result set of the SELECT statement is "*"
                   86607: **
                   86608: **    (5)  The SELECT statement has no WHERE, HAVING, ORDER BY, GROUP BY,
                   86609: **         or LIMIT clause.
                   86610: **
                   86611: **    (6)  The SELECT statement is a simple (not a compound) select that
                   86612: **         contains only tab2 in its FROM clause
                   86613: **
                   86614: ** This method for implementing the INSERT transfers raw records from
                   86615: ** tab2 over to tab1.  The columns are not decoded.  Raw records from
                   86616: ** the indices of tab2 are transfered to tab1 as well.  In so doing,
                   86617: ** the resulting tab1 has much less fragmentation.
                   86618: **
                   86619: ** This routine returns TRUE if the optimization is attempted.  If any
                   86620: ** of the conditions above fail so that the optimization should not
                   86621: ** be attempted, then this routine returns FALSE.
                   86622: */
                   86623: static int xferOptimization(
                   86624:   Parse *pParse,        /* Parser context */
                   86625:   Table *pDest,         /* The table we are inserting into */
                   86626:   Select *pSelect,      /* A SELECT statement to use as the data source */
                   86627:   int onError,          /* How to handle constraint errors */
                   86628:   int iDbDest           /* The database of pDest */
                   86629: ){
                   86630:   ExprList *pEList;                /* The result set of the SELECT */
                   86631:   Table *pSrc;                     /* The table in the FROM clause of SELECT */
                   86632:   Index *pSrcIdx, *pDestIdx;       /* Source and destination indices */
                   86633:   struct SrcList_item *pItem;      /* An element of pSelect->pSrc */
                   86634:   int i;                           /* Loop counter */
                   86635:   int iDbSrc;                      /* The database of pSrc */
                   86636:   int iSrc, iDest;                 /* Cursors from source and destination */
                   86637:   int addr1, addr2;                /* Loop addresses */
                   86638:   int emptyDestTest;               /* Address of test for empty pDest */
                   86639:   int emptySrcTest;                /* Address of test for empty pSrc */
                   86640:   Vdbe *v;                         /* The VDBE we are building */
                   86641:   KeyInfo *pKey;                   /* Key information for an index */
                   86642:   int regAutoinc;                  /* Memory register used by AUTOINC */
                   86643:   int destHasUniqueIdx = 0;        /* True if pDest has a UNIQUE index */
                   86644:   int regData, regRowid;           /* Registers holding data and rowid */
                   86645: 
                   86646:   if( pSelect==0 ){
                   86647:     return 0;   /* Must be of the form  INSERT INTO ... SELECT ... */
                   86648:   }
                   86649:   if( sqlite3TriggerList(pParse, pDest) ){
                   86650:     return 0;   /* tab1 must not have triggers */
                   86651:   }
                   86652: #ifndef SQLITE_OMIT_VIRTUALTABLE
                   86653:   if( pDest->tabFlags & TF_Virtual ){
                   86654:     return 0;   /* tab1 must not be a virtual table */
                   86655:   }
                   86656: #endif
                   86657:   if( onError==OE_Default ){
                   86658:     onError = OE_Abort;
                   86659:   }
                   86660:   if( onError!=OE_Abort && onError!=OE_Rollback ){
                   86661:     return 0;   /* Cannot do OR REPLACE or OR IGNORE or OR FAIL */
                   86662:   }
                   86663:   assert(pSelect->pSrc);   /* allocated even if there is no FROM clause */
                   86664:   if( pSelect->pSrc->nSrc!=1 ){
                   86665:     return 0;   /* FROM clause must have exactly one term */
                   86666:   }
                   86667:   if( pSelect->pSrc->a[0].pSelect ){
                   86668:     return 0;   /* FROM clause cannot contain a subquery */
                   86669:   }
                   86670:   if( pSelect->pWhere ){
                   86671:     return 0;   /* SELECT may not have a WHERE clause */
                   86672:   }
                   86673:   if( pSelect->pOrderBy ){
                   86674:     return 0;   /* SELECT may not have an ORDER BY clause */
                   86675:   }
                   86676:   /* Do not need to test for a HAVING clause.  If HAVING is present but
                   86677:   ** there is no ORDER BY, we will get an error. */
                   86678:   if( pSelect->pGroupBy ){
                   86679:     return 0;   /* SELECT may not have a GROUP BY clause */
                   86680:   }
                   86681:   if( pSelect->pLimit ){
                   86682:     return 0;   /* SELECT may not have a LIMIT clause */
                   86683:   }
                   86684:   assert( pSelect->pOffset==0 );  /* Must be so if pLimit==0 */
                   86685:   if( pSelect->pPrior ){
                   86686:     return 0;   /* SELECT may not be a compound query */
                   86687:   }
                   86688:   if( pSelect->selFlags & SF_Distinct ){
                   86689:     return 0;   /* SELECT may not be DISTINCT */
                   86690:   }
                   86691:   pEList = pSelect->pEList;
                   86692:   assert( pEList!=0 );
                   86693:   if( pEList->nExpr!=1 ){
                   86694:     return 0;   /* The result set must have exactly one column */
                   86695:   }
                   86696:   assert( pEList->a[0].pExpr );
                   86697:   if( pEList->a[0].pExpr->op!=TK_ALL ){
                   86698:     return 0;   /* The result set must be the special operator "*" */
                   86699:   }
                   86700: 
                   86701:   /* At this point we have established that the statement is of the
                   86702:   ** correct syntactic form to participate in this optimization.  Now
                   86703:   ** we have to check the semantics.
                   86704:   */
                   86705:   pItem = pSelect->pSrc->a;
                   86706:   pSrc = sqlite3LocateTable(pParse, 0, pItem->zName, pItem->zDatabase);
                   86707:   if( pSrc==0 ){
                   86708:     return 0;   /* FROM clause does not contain a real table */
                   86709:   }
                   86710:   if( pSrc==pDest ){
                   86711:     return 0;   /* tab1 and tab2 may not be the same table */
                   86712:   }
                   86713: #ifndef SQLITE_OMIT_VIRTUALTABLE
                   86714:   if( pSrc->tabFlags & TF_Virtual ){
                   86715:     return 0;   /* tab2 must not be a virtual table */
                   86716:   }
                   86717: #endif
                   86718:   if( pSrc->pSelect ){
                   86719:     return 0;   /* tab2 may not be a view */
                   86720:   }
                   86721:   if( pDest->nCol!=pSrc->nCol ){
                   86722:     return 0;   /* Number of columns must be the same in tab1 and tab2 */
                   86723:   }
                   86724:   if( pDest->iPKey!=pSrc->iPKey ){
                   86725:     return 0;   /* Both tables must have the same INTEGER PRIMARY KEY */
                   86726:   }
                   86727:   for(i=0; i<pDest->nCol; i++){
                   86728:     if( pDest->aCol[i].affinity!=pSrc->aCol[i].affinity ){
                   86729:       return 0;    /* Affinity must be the same on all columns */
                   86730:     }
                   86731:     if( !xferCompatibleCollation(pDest->aCol[i].zColl, pSrc->aCol[i].zColl) ){
                   86732:       return 0;    /* Collating sequence must be the same on all columns */
                   86733:     }
                   86734:     if( pDest->aCol[i].notNull && !pSrc->aCol[i].notNull ){
                   86735:       return 0;    /* tab2 must be NOT NULL if tab1 is */
                   86736:     }
                   86737:   }
                   86738:   for(pDestIdx=pDest->pIndex; pDestIdx; pDestIdx=pDestIdx->pNext){
                   86739:     if( pDestIdx->onError!=OE_None ){
                   86740:       destHasUniqueIdx = 1;
                   86741:     }
                   86742:     for(pSrcIdx=pSrc->pIndex; pSrcIdx; pSrcIdx=pSrcIdx->pNext){
                   86743:       if( xferCompatibleIndex(pDestIdx, pSrcIdx) ) break;
                   86744:     }
                   86745:     if( pSrcIdx==0 ){
                   86746:       return 0;    /* pDestIdx has no corresponding index in pSrc */
                   86747:     }
                   86748:   }
                   86749: #ifndef SQLITE_OMIT_CHECK
                   86750:   if( pDest->pCheck && sqlite3ExprCompare(pSrc->pCheck, pDest->pCheck) ){
                   86751:     return 0;   /* Tables have different CHECK constraints.  Ticket #2252 */
                   86752:   }
                   86753: #endif
                   86754: #ifndef SQLITE_OMIT_FOREIGN_KEY
                   86755:   /* Disallow the transfer optimization if the destination table constains
                   86756:   ** any foreign key constraints.  This is more restrictive than necessary.
                   86757:   ** But the main beneficiary of the transfer optimization is the VACUUM 
                   86758:   ** command, and the VACUUM command disables foreign key constraints.  So
                   86759:   ** the extra complication to make this rule less restrictive is probably
                   86760:   ** not worth the effort.  Ticket [6284df89debdfa61db8073e062908af0c9b6118e]
                   86761:   */
                   86762:   if( (pParse->db->flags & SQLITE_ForeignKeys)!=0 && pDest->pFKey!=0 ){
                   86763:     return 0;
                   86764:   }
                   86765: #endif
                   86766: 
                   86767:   /* If we get this far, it means either:
                   86768:   **
                   86769:   **    *   We can always do the transfer if the table contains an
                   86770:   **        an integer primary key
                   86771:   **
                   86772:   **    *   We can conditionally do the transfer if the destination
                   86773:   **        table is empty.
                   86774:   */
                   86775: #ifdef SQLITE_TEST
                   86776:   sqlite3_xferopt_count++;
                   86777: #endif
                   86778:   iDbSrc = sqlite3SchemaToIndex(pParse->db, pSrc->pSchema);
                   86779:   v = sqlite3GetVdbe(pParse);
                   86780:   sqlite3CodeVerifySchema(pParse, iDbSrc);
                   86781:   iSrc = pParse->nTab++;
                   86782:   iDest = pParse->nTab++;
                   86783:   regAutoinc = autoIncBegin(pParse, iDbDest, pDest);
                   86784:   sqlite3OpenTable(pParse, iDest, iDbDest, pDest, OP_OpenWrite);
                   86785:   if( (pDest->iPKey<0 && pDest->pIndex!=0) || destHasUniqueIdx ){
                   86786:     /* If tables do not have an INTEGER PRIMARY KEY and there
                   86787:     ** are indices to be copied and the destination is not empty,
                   86788:     ** we have to disallow the transfer optimization because the
                   86789:     ** the rowids might change which will mess up indexing.
                   86790:     **
                   86791:     ** Or if the destination has a UNIQUE index and is not empty,
                   86792:     ** we also disallow the transfer optimization because we cannot
                   86793:     ** insure that all entries in the union of DEST and SRC will be
                   86794:     ** unique.
                   86795:     */
                   86796:     addr1 = sqlite3VdbeAddOp2(v, OP_Rewind, iDest, 0);
                   86797:     emptyDestTest = sqlite3VdbeAddOp2(v, OP_Goto, 0, 0);
                   86798:     sqlite3VdbeJumpHere(v, addr1);
                   86799:   }else{
                   86800:     emptyDestTest = 0;
                   86801:   }
                   86802:   sqlite3OpenTable(pParse, iSrc, iDbSrc, pSrc, OP_OpenRead);
                   86803:   emptySrcTest = sqlite3VdbeAddOp2(v, OP_Rewind, iSrc, 0);
                   86804:   regData = sqlite3GetTempReg(pParse);
                   86805:   regRowid = sqlite3GetTempReg(pParse);
                   86806:   if( pDest->iPKey>=0 ){
                   86807:     addr1 = sqlite3VdbeAddOp2(v, OP_Rowid, iSrc, regRowid);
                   86808:     addr2 = sqlite3VdbeAddOp3(v, OP_NotExists, iDest, 0, regRowid);
                   86809:     sqlite3HaltConstraint(
                   86810:         pParse, onError, "PRIMARY KEY must be unique", P4_STATIC);
                   86811:     sqlite3VdbeJumpHere(v, addr2);
                   86812:     autoIncStep(pParse, regAutoinc, regRowid);
                   86813:   }else if( pDest->pIndex==0 ){
                   86814:     addr1 = sqlite3VdbeAddOp2(v, OP_NewRowid, iDest, regRowid);
                   86815:   }else{
                   86816:     addr1 = sqlite3VdbeAddOp2(v, OP_Rowid, iSrc, regRowid);
                   86817:     assert( (pDest->tabFlags & TF_Autoincrement)==0 );
                   86818:   }
                   86819:   sqlite3VdbeAddOp2(v, OP_RowData, iSrc, regData);
                   86820:   sqlite3VdbeAddOp3(v, OP_Insert, iDest, regData, regRowid);
                   86821:   sqlite3VdbeChangeP5(v, OPFLAG_NCHANGE|OPFLAG_LASTROWID|OPFLAG_APPEND);
                   86822:   sqlite3VdbeChangeP4(v, -1, pDest->zName, 0);
                   86823:   sqlite3VdbeAddOp2(v, OP_Next, iSrc, addr1);
                   86824:   for(pDestIdx=pDest->pIndex; pDestIdx; pDestIdx=pDestIdx->pNext){
                   86825:     for(pSrcIdx=pSrc->pIndex; ALWAYS(pSrcIdx); pSrcIdx=pSrcIdx->pNext){
                   86826:       if( xferCompatibleIndex(pDestIdx, pSrcIdx) ) break;
                   86827:     }
                   86828:     assert( pSrcIdx );
                   86829:     sqlite3VdbeAddOp2(v, OP_Close, iSrc, 0);
                   86830:     sqlite3VdbeAddOp2(v, OP_Close, iDest, 0);
                   86831:     pKey = sqlite3IndexKeyinfo(pParse, pSrcIdx);
                   86832:     sqlite3VdbeAddOp4(v, OP_OpenRead, iSrc, pSrcIdx->tnum, iDbSrc,
                   86833:                       (char*)pKey, P4_KEYINFO_HANDOFF);
                   86834:     VdbeComment((v, "%s", pSrcIdx->zName));
                   86835:     pKey = sqlite3IndexKeyinfo(pParse, pDestIdx);
                   86836:     sqlite3VdbeAddOp4(v, OP_OpenWrite, iDest, pDestIdx->tnum, iDbDest,
                   86837:                       (char*)pKey, P4_KEYINFO_HANDOFF);
                   86838:     VdbeComment((v, "%s", pDestIdx->zName));
                   86839:     addr1 = sqlite3VdbeAddOp2(v, OP_Rewind, iSrc, 0);
                   86840:     sqlite3VdbeAddOp2(v, OP_RowKey, iSrc, regData);
                   86841:     sqlite3VdbeAddOp3(v, OP_IdxInsert, iDest, regData, 1);
                   86842:     sqlite3VdbeAddOp2(v, OP_Next, iSrc, addr1+1);
                   86843:     sqlite3VdbeJumpHere(v, addr1);
                   86844:   }
                   86845:   sqlite3VdbeJumpHere(v, emptySrcTest);
                   86846:   sqlite3ReleaseTempReg(pParse, regRowid);
                   86847:   sqlite3ReleaseTempReg(pParse, regData);
                   86848:   sqlite3VdbeAddOp2(v, OP_Close, iSrc, 0);
                   86849:   sqlite3VdbeAddOp2(v, OP_Close, iDest, 0);
                   86850:   if( emptyDestTest ){
                   86851:     sqlite3VdbeAddOp2(v, OP_Halt, SQLITE_OK, 0);
                   86852:     sqlite3VdbeJumpHere(v, emptyDestTest);
                   86853:     sqlite3VdbeAddOp2(v, OP_Close, iDest, 0);
                   86854:     return 0;
                   86855:   }else{
                   86856:     return 1;
                   86857:   }
                   86858: }
                   86859: #endif /* SQLITE_OMIT_XFER_OPT */
                   86860: 
                   86861: /************** End of insert.c **********************************************/
                   86862: /************** Begin file legacy.c ******************************************/
                   86863: /*
                   86864: ** 2001 September 15
                   86865: **
                   86866: ** The author disclaims copyright to this source code.  In place of
                   86867: ** a legal notice, here is a blessing:
                   86868: **
                   86869: **    May you do good and not evil.
                   86870: **    May you find forgiveness for yourself and forgive others.
                   86871: **    May you share freely, never taking more than you give.
                   86872: **
                   86873: *************************************************************************
                   86874: ** Main file for the SQLite library.  The routines in this file
                   86875: ** implement the programmer interface to the library.  Routines in
                   86876: ** other files are for internal use by SQLite and should not be
                   86877: ** accessed by users of the library.
                   86878: */
                   86879: 
                   86880: 
                   86881: /*
                   86882: ** Execute SQL code.  Return one of the SQLITE_ success/failure
                   86883: ** codes.  Also write an error message into memory obtained from
                   86884: ** malloc() and make *pzErrMsg point to that message.
                   86885: **
                   86886: ** If the SQL is a query, then for each row in the query result
                   86887: ** the xCallback() function is called.  pArg becomes the first
                   86888: ** argument to xCallback().  If xCallback=NULL then no callback
                   86889: ** is invoked, even for queries.
                   86890: */
                   86891: SQLITE_API int sqlite3_exec(
                   86892:   sqlite3 *db,                /* The database on which the SQL executes */
                   86893:   const char *zSql,           /* The SQL to be executed */
                   86894:   sqlite3_callback xCallback, /* Invoke this callback routine */
                   86895:   void *pArg,                 /* First argument to xCallback() */
                   86896:   char **pzErrMsg             /* Write error messages here */
                   86897: ){
                   86898:   int rc = SQLITE_OK;         /* Return code */
                   86899:   const char *zLeftover;      /* Tail of unprocessed SQL */
                   86900:   sqlite3_stmt *pStmt = 0;    /* The current SQL statement */
                   86901:   char **azCols = 0;          /* Names of result columns */
                   86902:   int nRetry = 0;             /* Number of retry attempts */
                   86903:   int callbackIsInit;         /* True if callback data is initialized */
                   86904: 
                   86905:   if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT;
                   86906:   if( zSql==0 ) zSql = "";
                   86907: 
                   86908:   sqlite3_mutex_enter(db->mutex);
                   86909:   sqlite3Error(db, SQLITE_OK, 0);
                   86910:   while( (rc==SQLITE_OK || (rc==SQLITE_SCHEMA && (++nRetry)<2)) && zSql[0] ){
                   86911:     int nCol;
                   86912:     char **azVals = 0;
                   86913: 
                   86914:     pStmt = 0;
                   86915:     rc = sqlite3_prepare(db, zSql, -1, &pStmt, &zLeftover);
                   86916:     assert( rc==SQLITE_OK || pStmt==0 );
                   86917:     if( rc!=SQLITE_OK ){
                   86918:       continue;
                   86919:     }
                   86920:     if( !pStmt ){
                   86921:       /* this happens for a comment or white-space */
                   86922:       zSql = zLeftover;
                   86923:       continue;
                   86924:     }
                   86925: 
                   86926:     callbackIsInit = 0;
                   86927:     nCol = sqlite3_column_count(pStmt);
                   86928: 
                   86929:     while( 1 ){
                   86930:       int i;
                   86931:       rc = sqlite3_step(pStmt);
                   86932: 
                   86933:       /* Invoke the callback function if required */
                   86934:       if( xCallback && (SQLITE_ROW==rc || 
                   86935:           (SQLITE_DONE==rc && !callbackIsInit
                   86936:                            && db->flags&SQLITE_NullCallback)) ){
                   86937:         if( !callbackIsInit ){
                   86938:           azCols = sqlite3DbMallocZero(db, 2*nCol*sizeof(const char*) + 1);
                   86939:           if( azCols==0 ){
                   86940:             goto exec_out;
                   86941:           }
                   86942:           for(i=0; i<nCol; i++){
                   86943:             azCols[i] = (char *)sqlite3_column_name(pStmt, i);
                   86944:             /* sqlite3VdbeSetColName() installs column names as UTF8
                   86945:             ** strings so there is no way for sqlite3_column_name() to fail. */
                   86946:             assert( azCols[i]!=0 );
                   86947:           }
                   86948:           callbackIsInit = 1;
                   86949:         }
                   86950:         if( rc==SQLITE_ROW ){
                   86951:           azVals = &azCols[nCol];
                   86952:           for(i=0; i<nCol; i++){
                   86953:             azVals[i] = (char *)sqlite3_column_text(pStmt, i);
                   86954:             if( !azVals[i] && sqlite3_column_type(pStmt, i)!=SQLITE_NULL ){
                   86955:               db->mallocFailed = 1;
                   86956:               goto exec_out;
                   86957:             }
                   86958:           }
                   86959:         }
                   86960:         if( xCallback(pArg, nCol, azVals, azCols) ){
                   86961:           rc = SQLITE_ABORT;
                   86962:           sqlite3VdbeFinalize((Vdbe *)pStmt);
                   86963:           pStmt = 0;
                   86964:           sqlite3Error(db, SQLITE_ABORT, 0);
                   86965:           goto exec_out;
                   86966:         }
                   86967:       }
                   86968: 
                   86969:       if( rc!=SQLITE_ROW ){
                   86970:         rc = sqlite3VdbeFinalize((Vdbe *)pStmt);
                   86971:         pStmt = 0;
                   86972:         if( rc!=SQLITE_SCHEMA ){
                   86973:           nRetry = 0;
                   86974:           zSql = zLeftover;
                   86975:           while( sqlite3Isspace(zSql[0]) ) zSql++;
                   86976:         }
                   86977:         break;
                   86978:       }
                   86979:     }
                   86980: 
                   86981:     sqlite3DbFree(db, azCols);
                   86982:     azCols = 0;
                   86983:   }
                   86984: 
                   86985: exec_out:
                   86986:   if( pStmt ) sqlite3VdbeFinalize((Vdbe *)pStmt);
                   86987:   sqlite3DbFree(db, azCols);
                   86988: 
                   86989:   rc = sqlite3ApiExit(db, rc);
                   86990:   if( rc!=SQLITE_OK && ALWAYS(rc==sqlite3_errcode(db)) && pzErrMsg ){
                   86991:     int nErrMsg = 1 + sqlite3Strlen30(sqlite3_errmsg(db));
                   86992:     *pzErrMsg = sqlite3Malloc(nErrMsg);
                   86993:     if( *pzErrMsg ){
                   86994:       memcpy(*pzErrMsg, sqlite3_errmsg(db), nErrMsg);
                   86995:     }else{
                   86996:       rc = SQLITE_NOMEM;
                   86997:       sqlite3Error(db, SQLITE_NOMEM, 0);
                   86998:     }
                   86999:   }else if( pzErrMsg ){
                   87000:     *pzErrMsg = 0;
                   87001:   }
                   87002: 
                   87003:   assert( (rc&db->errMask)==rc );
                   87004:   sqlite3_mutex_leave(db->mutex);
                   87005:   return rc;
                   87006: }
                   87007: 
                   87008: /************** End of legacy.c **********************************************/
                   87009: /************** Begin file loadext.c *****************************************/
                   87010: /*
                   87011: ** 2006 June 7
                   87012: **
                   87013: ** The author disclaims copyright to this source code.  In place of
                   87014: ** a legal notice, here is a blessing:
                   87015: **
                   87016: **    May you do good and not evil.
                   87017: **    May you find forgiveness for yourself and forgive others.
                   87018: **    May you share freely, never taking more than you give.
                   87019: **
                   87020: *************************************************************************
                   87021: ** This file contains code used to dynamically load extensions into
                   87022: ** the SQLite library.
                   87023: */
                   87024: 
                   87025: #ifndef SQLITE_CORE
                   87026:   #define SQLITE_CORE 1  /* Disable the API redefinition in sqlite3ext.h */
                   87027: #endif
                   87028: /************** Include sqlite3ext.h in the middle of loadext.c **************/
                   87029: /************** Begin file sqlite3ext.h **************************************/
                   87030: /*
                   87031: ** 2006 June 7
                   87032: **
                   87033: ** The author disclaims copyright to this source code.  In place of
                   87034: ** a legal notice, here is a blessing:
                   87035: **
                   87036: **    May you do good and not evil.
                   87037: **    May you find forgiveness for yourself and forgive others.
                   87038: **    May you share freely, never taking more than you give.
                   87039: **
                   87040: *************************************************************************
                   87041: ** This header file defines the SQLite interface for use by
                   87042: ** shared libraries that want to be imported as extensions into
                   87043: ** an SQLite instance.  Shared libraries that intend to be loaded
                   87044: ** as extensions by SQLite should #include this file instead of 
                   87045: ** sqlite3.h.
                   87046: */
                   87047: #ifndef _SQLITE3EXT_H_
                   87048: #define _SQLITE3EXT_H_
                   87049: 
                   87050: typedef struct sqlite3_api_routines sqlite3_api_routines;
                   87051: 
                   87052: /*
                   87053: ** The following structure holds pointers to all of the SQLite API
                   87054: ** routines.
                   87055: **
                   87056: ** WARNING:  In order to maintain backwards compatibility, add new
                   87057: ** interfaces to the end of this structure only.  If you insert new
                   87058: ** interfaces in the middle of this structure, then older different
                   87059: ** versions of SQLite will not be able to load each others' shared
                   87060: ** libraries!
                   87061: */
                   87062: struct sqlite3_api_routines {
                   87063:   void * (*aggregate_context)(sqlite3_context*,int nBytes);
                   87064:   int  (*aggregate_count)(sqlite3_context*);
                   87065:   int  (*bind_blob)(sqlite3_stmt*,int,const void*,int n,void(*)(void*));
                   87066:   int  (*bind_double)(sqlite3_stmt*,int,double);
                   87067:   int  (*bind_int)(sqlite3_stmt*,int,int);
                   87068:   int  (*bind_int64)(sqlite3_stmt*,int,sqlite_int64);
                   87069:   int  (*bind_null)(sqlite3_stmt*,int);
                   87070:   int  (*bind_parameter_count)(sqlite3_stmt*);
                   87071:   int  (*bind_parameter_index)(sqlite3_stmt*,const char*zName);
                   87072:   const char * (*bind_parameter_name)(sqlite3_stmt*,int);
                   87073:   int  (*bind_text)(sqlite3_stmt*,int,const char*,int n,void(*)(void*));
                   87074:   int  (*bind_text16)(sqlite3_stmt*,int,const void*,int,void(*)(void*));
                   87075:   int  (*bind_value)(sqlite3_stmt*,int,const sqlite3_value*);
                   87076:   int  (*busy_handler)(sqlite3*,int(*)(void*,int),void*);
                   87077:   int  (*busy_timeout)(sqlite3*,int ms);
                   87078:   int  (*changes)(sqlite3*);
                   87079:   int  (*close)(sqlite3*);
                   87080:   int  (*collation_needed)(sqlite3*,void*,void(*)(void*,sqlite3*,int eTextRep,const char*));
                   87081:   int  (*collation_needed16)(sqlite3*,void*,void(*)(void*,sqlite3*,int eTextRep,const void*));
                   87082:   const void * (*column_blob)(sqlite3_stmt*,int iCol);
                   87083:   int  (*column_bytes)(sqlite3_stmt*,int iCol);
                   87084:   int  (*column_bytes16)(sqlite3_stmt*,int iCol);
                   87085:   int  (*column_count)(sqlite3_stmt*pStmt);
                   87086:   const char * (*column_database_name)(sqlite3_stmt*,int);
                   87087:   const void * (*column_database_name16)(sqlite3_stmt*,int);
                   87088:   const char * (*column_decltype)(sqlite3_stmt*,int i);
                   87089:   const void * (*column_decltype16)(sqlite3_stmt*,int);
                   87090:   double  (*column_double)(sqlite3_stmt*,int iCol);
                   87091:   int  (*column_int)(sqlite3_stmt*,int iCol);
                   87092:   sqlite_int64  (*column_int64)(sqlite3_stmt*,int iCol);
                   87093:   const char * (*column_name)(sqlite3_stmt*,int);
                   87094:   const void * (*column_name16)(sqlite3_stmt*,int);
                   87095:   const char * (*column_origin_name)(sqlite3_stmt*,int);
                   87096:   const void * (*column_origin_name16)(sqlite3_stmt*,int);
                   87097:   const char * (*column_table_name)(sqlite3_stmt*,int);
                   87098:   const void * (*column_table_name16)(sqlite3_stmt*,int);
                   87099:   const unsigned char * (*column_text)(sqlite3_stmt*,int iCol);
                   87100:   const void * (*column_text16)(sqlite3_stmt*,int iCol);
                   87101:   int  (*column_type)(sqlite3_stmt*,int iCol);
                   87102:   sqlite3_value* (*column_value)(sqlite3_stmt*,int iCol);
                   87103:   void * (*commit_hook)(sqlite3*,int(*)(void*),void*);
                   87104:   int  (*complete)(const char*sql);
                   87105:   int  (*complete16)(const void*sql);
                   87106:   int  (*create_collation)(sqlite3*,const char*,int,void*,int(*)(void*,int,const void*,int,const void*));
                   87107:   int  (*create_collation16)(sqlite3*,const void*,int,void*,int(*)(void*,int,const void*,int,const void*));
                   87108:   int  (*create_function)(sqlite3*,const char*,int,int,void*,void (*xFunc)(sqlite3_context*,int,sqlite3_value**),void (*xStep)(sqlite3_context*,int,sqlite3_value**),void (*xFinal)(sqlite3_context*));
                   87109:   int  (*create_function16)(sqlite3*,const void*,int,int,void*,void (*xFunc)(sqlite3_context*,int,sqlite3_value**),void (*xStep)(sqlite3_context*,int,sqlite3_value**),void (*xFinal)(sqlite3_context*));
                   87110:   int (*create_module)(sqlite3*,const char*,const sqlite3_module*,void*);
                   87111:   int  (*data_count)(sqlite3_stmt*pStmt);
                   87112:   sqlite3 * (*db_handle)(sqlite3_stmt*);
                   87113:   int (*declare_vtab)(sqlite3*,const char*);
                   87114:   int  (*enable_shared_cache)(int);
                   87115:   int  (*errcode)(sqlite3*db);
                   87116:   const char * (*errmsg)(sqlite3*);
                   87117:   const void * (*errmsg16)(sqlite3*);
                   87118:   int  (*exec)(sqlite3*,const char*,sqlite3_callback,void*,char**);
                   87119:   int  (*expired)(sqlite3_stmt*);
                   87120:   int  (*finalize)(sqlite3_stmt*pStmt);
                   87121:   void  (*free)(void*);
                   87122:   void  (*free_table)(char**result);
                   87123:   int  (*get_autocommit)(sqlite3*);
                   87124:   void * (*get_auxdata)(sqlite3_context*,int);
                   87125:   int  (*get_table)(sqlite3*,const char*,char***,int*,int*,char**);
                   87126:   int  (*global_recover)(void);
                   87127:   void  (*interruptx)(sqlite3*);
                   87128:   sqlite_int64  (*last_insert_rowid)(sqlite3*);
                   87129:   const char * (*libversion)(void);
                   87130:   int  (*libversion_number)(void);
                   87131:   void *(*malloc)(int);
                   87132:   char * (*mprintf)(const char*,...);
                   87133:   int  (*open)(const char*,sqlite3**);
                   87134:   int  (*open16)(const void*,sqlite3**);
                   87135:   int  (*prepare)(sqlite3*,const char*,int,sqlite3_stmt**,const char**);
                   87136:   int  (*prepare16)(sqlite3*,const void*,int,sqlite3_stmt**,const void**);
                   87137:   void * (*profile)(sqlite3*,void(*)(void*,const char*,sqlite_uint64),void*);
                   87138:   void  (*progress_handler)(sqlite3*,int,int(*)(void*),void*);
                   87139:   void *(*realloc)(void*,int);
                   87140:   int  (*reset)(sqlite3_stmt*pStmt);
                   87141:   void  (*result_blob)(sqlite3_context*,const void*,int,void(*)(void*));
                   87142:   void  (*result_double)(sqlite3_context*,double);
                   87143:   void  (*result_error)(sqlite3_context*,const char*,int);
                   87144:   void  (*result_error16)(sqlite3_context*,const void*,int);
                   87145:   void  (*result_int)(sqlite3_context*,int);
                   87146:   void  (*result_int64)(sqlite3_context*,sqlite_int64);
                   87147:   void  (*result_null)(sqlite3_context*);
                   87148:   void  (*result_text)(sqlite3_context*,const char*,int,void(*)(void*));
                   87149:   void  (*result_text16)(sqlite3_context*,const void*,int,void(*)(void*));
                   87150:   void  (*result_text16be)(sqlite3_context*,const void*,int,void(*)(void*));
                   87151:   void  (*result_text16le)(sqlite3_context*,const void*,int,void(*)(void*));
                   87152:   void  (*result_value)(sqlite3_context*,sqlite3_value*);
                   87153:   void * (*rollback_hook)(sqlite3*,void(*)(void*),void*);
                   87154:   int  (*set_authorizer)(sqlite3*,int(*)(void*,int,const char*,const char*,const char*,const char*),void*);
                   87155:   void  (*set_auxdata)(sqlite3_context*,int,void*,void (*)(void*));
                   87156:   char * (*snprintf)(int,char*,const char*,...);
                   87157:   int  (*step)(sqlite3_stmt*);
                   87158:   int  (*table_column_metadata)(sqlite3*,const char*,const char*,const char*,char const**,char const**,int*,int*,int*);
                   87159:   void  (*thread_cleanup)(void);
                   87160:   int  (*total_changes)(sqlite3*);
                   87161:   void * (*trace)(sqlite3*,void(*xTrace)(void*,const char*),void*);
                   87162:   int  (*transfer_bindings)(sqlite3_stmt*,sqlite3_stmt*);
                   87163:   void * (*update_hook)(sqlite3*,void(*)(void*,int ,char const*,char const*,sqlite_int64),void*);
                   87164:   void * (*user_data)(sqlite3_context*);
                   87165:   const void * (*value_blob)(sqlite3_value*);
                   87166:   int  (*value_bytes)(sqlite3_value*);
                   87167:   int  (*value_bytes16)(sqlite3_value*);
                   87168:   double  (*value_double)(sqlite3_value*);
                   87169:   int  (*value_int)(sqlite3_value*);
                   87170:   sqlite_int64  (*value_int64)(sqlite3_value*);
                   87171:   int  (*value_numeric_type)(sqlite3_value*);
                   87172:   const unsigned char * (*value_text)(sqlite3_value*);
                   87173:   const void * (*value_text16)(sqlite3_value*);
                   87174:   const void * (*value_text16be)(sqlite3_value*);
                   87175:   const void * (*value_text16le)(sqlite3_value*);
                   87176:   int  (*value_type)(sqlite3_value*);
                   87177:   char *(*vmprintf)(const char*,va_list);
                   87178:   /* Added ??? */
                   87179:   int (*overload_function)(sqlite3*, const char *zFuncName, int nArg);
                   87180:   /* Added by 3.3.13 */
                   87181:   int (*prepare_v2)(sqlite3*,const char*,int,sqlite3_stmt**,const char**);
                   87182:   int (*prepare16_v2)(sqlite3*,const void*,int,sqlite3_stmt**,const void**);
                   87183:   int (*clear_bindings)(sqlite3_stmt*);
                   87184:   /* Added by 3.4.1 */
                   87185:   int (*create_module_v2)(sqlite3*,const char*,const sqlite3_module*,void*,void (*xDestroy)(void *));
                   87186:   /* Added by 3.5.0 */
                   87187:   int (*bind_zeroblob)(sqlite3_stmt*,int,int);
                   87188:   int (*blob_bytes)(sqlite3_blob*);
                   87189:   int (*blob_close)(sqlite3_blob*);
                   87190:   int (*blob_open)(sqlite3*,const char*,const char*,const char*,sqlite3_int64,int,sqlite3_blob**);
                   87191:   int (*blob_read)(sqlite3_blob*,void*,int,int);
                   87192:   int (*blob_write)(sqlite3_blob*,const void*,int,int);
                   87193:   int (*create_collation_v2)(sqlite3*,const char*,int,void*,int(*)(void*,int,const void*,int,const void*),void(*)(void*));
                   87194:   int (*file_control)(sqlite3*,const char*,int,void*);
                   87195:   sqlite3_int64 (*memory_highwater)(int);
                   87196:   sqlite3_int64 (*memory_used)(void);
                   87197:   sqlite3_mutex *(*mutex_alloc)(int);
                   87198:   void (*mutex_enter)(sqlite3_mutex*);
                   87199:   void (*mutex_free)(sqlite3_mutex*);
                   87200:   void (*mutex_leave)(sqlite3_mutex*);
                   87201:   int (*mutex_try)(sqlite3_mutex*);
                   87202:   int (*open_v2)(const char*,sqlite3**,int,const char*);
                   87203:   int (*release_memory)(int);
                   87204:   void (*result_error_nomem)(sqlite3_context*);
                   87205:   void (*result_error_toobig)(sqlite3_context*);
                   87206:   int (*sleep)(int);
                   87207:   void (*soft_heap_limit)(int);
                   87208:   sqlite3_vfs *(*vfs_find)(const char*);
                   87209:   int (*vfs_register)(sqlite3_vfs*,int);
                   87210:   int (*vfs_unregister)(sqlite3_vfs*);
                   87211:   int (*xthreadsafe)(void);
                   87212:   void (*result_zeroblob)(sqlite3_context*,int);
                   87213:   void (*result_error_code)(sqlite3_context*,int);
                   87214:   int (*test_control)(int, ...);
                   87215:   void (*randomness)(int,void*);
                   87216:   sqlite3 *(*context_db_handle)(sqlite3_context*);
                   87217:   int (*extended_result_codes)(sqlite3*,int);
                   87218:   int (*limit)(sqlite3*,int,int);
                   87219:   sqlite3_stmt *(*next_stmt)(sqlite3*,sqlite3_stmt*);
                   87220:   const char *(*sql)(sqlite3_stmt*);
                   87221:   int (*status)(int,int*,int*,int);
                   87222:   int (*backup_finish)(sqlite3_backup*);
                   87223:   sqlite3_backup *(*backup_init)(sqlite3*,const char*,sqlite3*,const char*);
                   87224:   int (*backup_pagecount)(sqlite3_backup*);
                   87225:   int (*backup_remaining)(sqlite3_backup*);
                   87226:   int (*backup_step)(sqlite3_backup*,int);
                   87227:   const char *(*compileoption_get)(int);
                   87228:   int (*compileoption_used)(const char*);
                   87229:   int (*create_function_v2)(sqlite3*,const char*,int,int,void*,void (*xFunc)(sqlite3_context*,int,sqlite3_value**),void (*xStep)(sqlite3_context*,int,sqlite3_value**),void (*xFinal)(sqlite3_context*),void(*xDestroy)(void*));
                   87230:   int (*db_config)(sqlite3*,int,...);
                   87231:   sqlite3_mutex *(*db_mutex)(sqlite3*);
                   87232:   int (*db_status)(sqlite3*,int,int*,int*,int);
                   87233:   int (*extended_errcode)(sqlite3*);
                   87234:   void (*log)(int,const char*,...);
                   87235:   sqlite3_int64 (*soft_heap_limit64)(sqlite3_int64);
                   87236:   const char *(*sourceid)(void);
                   87237:   int (*stmt_status)(sqlite3_stmt*,int,int);
                   87238:   int (*strnicmp)(const char*,const char*,int);
                   87239:   int (*unlock_notify)(sqlite3*,void(*)(void**,int),void*);
                   87240:   int (*wal_autocheckpoint)(sqlite3*,int);
                   87241:   int (*wal_checkpoint)(sqlite3*,const char*);
                   87242:   void *(*wal_hook)(sqlite3*,int(*)(void*,sqlite3*,const char*,int),void*);
                   87243: };
                   87244: 
                   87245: /*
                   87246: ** The following macros redefine the API routines so that they are
                   87247: ** redirected throught the global sqlite3_api structure.
                   87248: **
                   87249: ** This header file is also used by the loadext.c source file
                   87250: ** (part of the main SQLite library - not an extension) so that
                   87251: ** it can get access to the sqlite3_api_routines structure
                   87252: ** definition.  But the main library does not want to redefine
                   87253: ** the API.  So the redefinition macros are only valid if the
                   87254: ** SQLITE_CORE macros is undefined.
                   87255: */
                   87256: #ifndef SQLITE_CORE
                   87257: #define sqlite3_aggregate_context      sqlite3_api->aggregate_context
                   87258: #ifndef SQLITE_OMIT_DEPRECATED
                   87259: #define sqlite3_aggregate_count        sqlite3_api->aggregate_count
                   87260: #endif
                   87261: #define sqlite3_bind_blob              sqlite3_api->bind_blob
                   87262: #define sqlite3_bind_double            sqlite3_api->bind_double
                   87263: #define sqlite3_bind_int               sqlite3_api->bind_int
                   87264: #define sqlite3_bind_int64             sqlite3_api->bind_int64
                   87265: #define sqlite3_bind_null              sqlite3_api->bind_null
                   87266: #define sqlite3_bind_parameter_count   sqlite3_api->bind_parameter_count
                   87267: #define sqlite3_bind_parameter_index   sqlite3_api->bind_parameter_index
                   87268: #define sqlite3_bind_parameter_name    sqlite3_api->bind_parameter_name
                   87269: #define sqlite3_bind_text              sqlite3_api->bind_text
                   87270: #define sqlite3_bind_text16            sqlite3_api->bind_text16
                   87271: #define sqlite3_bind_value             sqlite3_api->bind_value
                   87272: #define sqlite3_busy_handler           sqlite3_api->busy_handler
                   87273: #define sqlite3_busy_timeout           sqlite3_api->busy_timeout
                   87274: #define sqlite3_changes                sqlite3_api->changes
                   87275: #define sqlite3_close                  sqlite3_api->close
                   87276: #define sqlite3_collation_needed       sqlite3_api->collation_needed
                   87277: #define sqlite3_collation_needed16     sqlite3_api->collation_needed16
                   87278: #define sqlite3_column_blob            sqlite3_api->column_blob
                   87279: #define sqlite3_column_bytes           sqlite3_api->column_bytes
                   87280: #define sqlite3_column_bytes16         sqlite3_api->column_bytes16
                   87281: #define sqlite3_column_count           sqlite3_api->column_count
                   87282: #define sqlite3_column_database_name   sqlite3_api->column_database_name
                   87283: #define sqlite3_column_database_name16 sqlite3_api->column_database_name16
                   87284: #define sqlite3_column_decltype        sqlite3_api->column_decltype
                   87285: #define sqlite3_column_decltype16      sqlite3_api->column_decltype16
                   87286: #define sqlite3_column_double          sqlite3_api->column_double
                   87287: #define sqlite3_column_int             sqlite3_api->column_int
                   87288: #define sqlite3_column_int64           sqlite3_api->column_int64
                   87289: #define sqlite3_column_name            sqlite3_api->column_name
                   87290: #define sqlite3_column_name16          sqlite3_api->column_name16
                   87291: #define sqlite3_column_origin_name     sqlite3_api->column_origin_name
                   87292: #define sqlite3_column_origin_name16   sqlite3_api->column_origin_name16
                   87293: #define sqlite3_column_table_name      sqlite3_api->column_table_name
                   87294: #define sqlite3_column_table_name16    sqlite3_api->column_table_name16
                   87295: #define sqlite3_column_text            sqlite3_api->column_text
                   87296: #define sqlite3_column_text16          sqlite3_api->column_text16
                   87297: #define sqlite3_column_type            sqlite3_api->column_type
                   87298: #define sqlite3_column_value           sqlite3_api->column_value
                   87299: #define sqlite3_commit_hook            sqlite3_api->commit_hook
                   87300: #define sqlite3_complete               sqlite3_api->complete
                   87301: #define sqlite3_complete16             sqlite3_api->complete16
                   87302: #define sqlite3_create_collation       sqlite3_api->create_collation
                   87303: #define sqlite3_create_collation16     sqlite3_api->create_collation16
                   87304: #define sqlite3_create_function        sqlite3_api->create_function
                   87305: #define sqlite3_create_function16      sqlite3_api->create_function16
                   87306: #define sqlite3_create_module          sqlite3_api->create_module
                   87307: #define sqlite3_create_module_v2       sqlite3_api->create_module_v2
                   87308: #define sqlite3_data_count             sqlite3_api->data_count
                   87309: #define sqlite3_db_handle              sqlite3_api->db_handle
                   87310: #define sqlite3_declare_vtab           sqlite3_api->declare_vtab
                   87311: #define sqlite3_enable_shared_cache    sqlite3_api->enable_shared_cache
                   87312: #define sqlite3_errcode                sqlite3_api->errcode
                   87313: #define sqlite3_errmsg                 sqlite3_api->errmsg
                   87314: #define sqlite3_errmsg16               sqlite3_api->errmsg16
                   87315: #define sqlite3_exec                   sqlite3_api->exec
                   87316: #ifndef SQLITE_OMIT_DEPRECATED
                   87317: #define sqlite3_expired                sqlite3_api->expired
                   87318: #endif
                   87319: #define sqlite3_finalize               sqlite3_api->finalize
                   87320: #define sqlite3_free                   sqlite3_api->free
                   87321: #define sqlite3_free_table             sqlite3_api->free_table
                   87322: #define sqlite3_get_autocommit         sqlite3_api->get_autocommit
                   87323: #define sqlite3_get_auxdata            sqlite3_api->get_auxdata
                   87324: #define sqlite3_get_table              sqlite3_api->get_table
                   87325: #ifndef SQLITE_OMIT_DEPRECATED
                   87326: #define sqlite3_global_recover         sqlite3_api->global_recover
                   87327: #endif
                   87328: #define sqlite3_interrupt              sqlite3_api->interruptx
                   87329: #define sqlite3_last_insert_rowid      sqlite3_api->last_insert_rowid
                   87330: #define sqlite3_libversion             sqlite3_api->libversion
                   87331: #define sqlite3_libversion_number      sqlite3_api->libversion_number
                   87332: #define sqlite3_malloc                 sqlite3_api->malloc
                   87333: #define sqlite3_mprintf                sqlite3_api->mprintf
                   87334: #define sqlite3_open                   sqlite3_api->open
                   87335: #define sqlite3_open16                 sqlite3_api->open16
                   87336: #define sqlite3_prepare                sqlite3_api->prepare
                   87337: #define sqlite3_prepare16              sqlite3_api->prepare16
                   87338: #define sqlite3_prepare_v2             sqlite3_api->prepare_v2
                   87339: #define sqlite3_prepare16_v2           sqlite3_api->prepare16_v2
                   87340: #define sqlite3_profile                sqlite3_api->profile
                   87341: #define sqlite3_progress_handler       sqlite3_api->progress_handler
                   87342: #define sqlite3_realloc                sqlite3_api->realloc
                   87343: #define sqlite3_reset                  sqlite3_api->reset
                   87344: #define sqlite3_result_blob            sqlite3_api->result_blob
                   87345: #define sqlite3_result_double          sqlite3_api->result_double
                   87346: #define sqlite3_result_error           sqlite3_api->result_error
                   87347: #define sqlite3_result_error16         sqlite3_api->result_error16
                   87348: #define sqlite3_result_int             sqlite3_api->result_int
                   87349: #define sqlite3_result_int64           sqlite3_api->result_int64
                   87350: #define sqlite3_result_null            sqlite3_api->result_null
                   87351: #define sqlite3_result_text            sqlite3_api->result_text
                   87352: #define sqlite3_result_text16          sqlite3_api->result_text16
                   87353: #define sqlite3_result_text16be        sqlite3_api->result_text16be
                   87354: #define sqlite3_result_text16le        sqlite3_api->result_text16le
                   87355: #define sqlite3_result_value           sqlite3_api->result_value
                   87356: #define sqlite3_rollback_hook          sqlite3_api->rollback_hook
                   87357: #define sqlite3_set_authorizer         sqlite3_api->set_authorizer
                   87358: #define sqlite3_set_auxdata            sqlite3_api->set_auxdata
                   87359: #define sqlite3_snprintf               sqlite3_api->snprintf
                   87360: #define sqlite3_step                   sqlite3_api->step
                   87361: #define sqlite3_table_column_metadata  sqlite3_api->table_column_metadata
                   87362: #define sqlite3_thread_cleanup         sqlite3_api->thread_cleanup
                   87363: #define sqlite3_total_changes          sqlite3_api->total_changes
                   87364: #define sqlite3_trace                  sqlite3_api->trace
                   87365: #ifndef SQLITE_OMIT_DEPRECATED
                   87366: #define sqlite3_transfer_bindings      sqlite3_api->transfer_bindings
                   87367: #endif
                   87368: #define sqlite3_update_hook            sqlite3_api->update_hook
                   87369: #define sqlite3_user_data              sqlite3_api->user_data
                   87370: #define sqlite3_value_blob             sqlite3_api->value_blob
                   87371: #define sqlite3_value_bytes            sqlite3_api->value_bytes
                   87372: #define sqlite3_value_bytes16          sqlite3_api->value_bytes16
                   87373: #define sqlite3_value_double           sqlite3_api->value_double
                   87374: #define sqlite3_value_int              sqlite3_api->value_int
                   87375: #define sqlite3_value_int64            sqlite3_api->value_int64
                   87376: #define sqlite3_value_numeric_type     sqlite3_api->value_numeric_type
                   87377: #define sqlite3_value_text             sqlite3_api->value_text
                   87378: #define sqlite3_value_text16           sqlite3_api->value_text16
                   87379: #define sqlite3_value_text16be         sqlite3_api->value_text16be
                   87380: #define sqlite3_value_text16le         sqlite3_api->value_text16le
                   87381: #define sqlite3_value_type             sqlite3_api->value_type
                   87382: #define sqlite3_vmprintf               sqlite3_api->vmprintf
                   87383: #define sqlite3_overload_function      sqlite3_api->overload_function
                   87384: #define sqlite3_prepare_v2             sqlite3_api->prepare_v2
                   87385: #define sqlite3_prepare16_v2           sqlite3_api->prepare16_v2
                   87386: #define sqlite3_clear_bindings         sqlite3_api->clear_bindings
                   87387: #define sqlite3_bind_zeroblob          sqlite3_api->bind_zeroblob
                   87388: #define sqlite3_blob_bytes             sqlite3_api->blob_bytes
                   87389: #define sqlite3_blob_close             sqlite3_api->blob_close
                   87390: #define sqlite3_blob_open              sqlite3_api->blob_open
                   87391: #define sqlite3_blob_read              sqlite3_api->blob_read
                   87392: #define sqlite3_blob_write             sqlite3_api->blob_write
                   87393: #define sqlite3_create_collation_v2    sqlite3_api->create_collation_v2
                   87394: #define sqlite3_file_control           sqlite3_api->file_control
                   87395: #define sqlite3_memory_highwater       sqlite3_api->memory_highwater
                   87396: #define sqlite3_memory_used            sqlite3_api->memory_used
                   87397: #define sqlite3_mutex_alloc            sqlite3_api->mutex_alloc
                   87398: #define sqlite3_mutex_enter            sqlite3_api->mutex_enter
                   87399: #define sqlite3_mutex_free             sqlite3_api->mutex_free
                   87400: #define sqlite3_mutex_leave            sqlite3_api->mutex_leave
                   87401: #define sqlite3_mutex_try              sqlite3_api->mutex_try
                   87402: #define sqlite3_open_v2                sqlite3_api->open_v2
                   87403: #define sqlite3_release_memory         sqlite3_api->release_memory
                   87404: #define sqlite3_result_error_nomem     sqlite3_api->result_error_nomem
                   87405: #define sqlite3_result_error_toobig    sqlite3_api->result_error_toobig
                   87406: #define sqlite3_sleep                  sqlite3_api->sleep
                   87407: #define sqlite3_soft_heap_limit        sqlite3_api->soft_heap_limit
                   87408: #define sqlite3_vfs_find               sqlite3_api->vfs_find
                   87409: #define sqlite3_vfs_register           sqlite3_api->vfs_register
                   87410: #define sqlite3_vfs_unregister         sqlite3_api->vfs_unregister
                   87411: #define sqlite3_threadsafe             sqlite3_api->xthreadsafe
                   87412: #define sqlite3_result_zeroblob        sqlite3_api->result_zeroblob
                   87413: #define sqlite3_result_error_code      sqlite3_api->result_error_code
                   87414: #define sqlite3_test_control           sqlite3_api->test_control
                   87415: #define sqlite3_randomness             sqlite3_api->randomness
                   87416: #define sqlite3_context_db_handle      sqlite3_api->context_db_handle
                   87417: #define sqlite3_extended_result_codes  sqlite3_api->extended_result_codes
                   87418: #define sqlite3_limit                  sqlite3_api->limit
                   87419: #define sqlite3_next_stmt              sqlite3_api->next_stmt
                   87420: #define sqlite3_sql                    sqlite3_api->sql
                   87421: #define sqlite3_status                 sqlite3_api->status
                   87422: #define sqlite3_backup_finish          sqlite3_api->backup_finish
                   87423: #define sqlite3_backup_init            sqlite3_api->backup_init
                   87424: #define sqlite3_backup_pagecount       sqlite3_api->backup_pagecount
                   87425: #define sqlite3_backup_remaining       sqlite3_api->backup_remaining
                   87426: #define sqlite3_backup_step            sqlite3_api->backup_step
                   87427: #define sqlite3_compileoption_get      sqlite3_api->compileoption_get
                   87428: #define sqlite3_compileoption_used     sqlite3_api->compileoption_used
                   87429: #define sqlite3_create_function_v2     sqlite3_api->create_function_v2
                   87430: #define sqlite3_db_config              sqlite3_api->db_config
                   87431: #define sqlite3_db_mutex               sqlite3_api->db_mutex
                   87432: #define sqlite3_db_status              sqlite3_api->db_status
                   87433: #define sqlite3_extended_errcode       sqlite3_api->extended_errcode
                   87434: #define sqlite3_log                    sqlite3_api->log
                   87435: #define sqlite3_soft_heap_limit64      sqlite3_api->soft_heap_limit64
                   87436: #define sqlite3_sourceid               sqlite3_api->sourceid
                   87437: #define sqlite3_stmt_status            sqlite3_api->stmt_status
                   87438: #define sqlite3_strnicmp               sqlite3_api->strnicmp
                   87439: #define sqlite3_unlock_notify          sqlite3_api->unlock_notify
                   87440: #define sqlite3_wal_autocheckpoint     sqlite3_api->wal_autocheckpoint
                   87441: #define sqlite3_wal_checkpoint         sqlite3_api->wal_checkpoint
                   87442: #define sqlite3_wal_hook               sqlite3_api->wal_hook
                   87443: #endif /* SQLITE_CORE */
                   87444: 
                   87445: #define SQLITE_EXTENSION_INIT1     const sqlite3_api_routines *sqlite3_api = 0;
                   87446: #define SQLITE_EXTENSION_INIT2(v)  sqlite3_api = v;
                   87447: 
                   87448: #endif /* _SQLITE3EXT_H_ */
                   87449: 
                   87450: /************** End of sqlite3ext.h ******************************************/
                   87451: /************** Continuing where we left off in loadext.c ********************/
                   87452: 
                   87453: #ifndef SQLITE_OMIT_LOAD_EXTENSION
                   87454: 
                   87455: /*
                   87456: ** Some API routines are omitted when various features are
                   87457: ** excluded from a build of SQLite.  Substitute a NULL pointer
                   87458: ** for any missing APIs.
                   87459: */
                   87460: #ifndef SQLITE_ENABLE_COLUMN_METADATA
                   87461: # define sqlite3_column_database_name   0
                   87462: # define sqlite3_column_database_name16 0
                   87463: # define sqlite3_column_table_name      0
                   87464: # define sqlite3_column_table_name16    0
                   87465: # define sqlite3_column_origin_name     0
                   87466: # define sqlite3_column_origin_name16   0
                   87467: # define sqlite3_table_column_metadata  0
                   87468: #endif
                   87469: 
                   87470: #ifdef SQLITE_OMIT_AUTHORIZATION
                   87471: # define sqlite3_set_authorizer         0
                   87472: #endif
                   87473: 
                   87474: #ifdef SQLITE_OMIT_UTF16
                   87475: # define sqlite3_bind_text16            0
                   87476: # define sqlite3_collation_needed16     0
                   87477: # define sqlite3_column_decltype16      0
                   87478: # define sqlite3_column_name16          0
                   87479: # define sqlite3_column_text16          0
                   87480: # define sqlite3_complete16             0
                   87481: # define sqlite3_create_collation16     0
                   87482: # define sqlite3_create_function16      0
                   87483: # define sqlite3_errmsg16               0
                   87484: # define sqlite3_open16                 0
                   87485: # define sqlite3_prepare16              0
                   87486: # define sqlite3_prepare16_v2           0
                   87487: # define sqlite3_result_error16         0
                   87488: # define sqlite3_result_text16          0
                   87489: # define sqlite3_result_text16be        0
                   87490: # define sqlite3_result_text16le        0
                   87491: # define sqlite3_value_text16           0
                   87492: # define sqlite3_value_text16be         0
                   87493: # define sqlite3_value_text16le         0
                   87494: # define sqlite3_column_database_name16 0
                   87495: # define sqlite3_column_table_name16    0
                   87496: # define sqlite3_column_origin_name16   0
                   87497: #endif
                   87498: 
                   87499: #ifdef SQLITE_OMIT_COMPLETE
                   87500: # define sqlite3_complete 0
                   87501: # define sqlite3_complete16 0
                   87502: #endif
                   87503: 
                   87504: #ifdef SQLITE_OMIT_DECLTYPE
                   87505: # define sqlite3_column_decltype16      0
                   87506: # define sqlite3_column_decltype        0
                   87507: #endif
                   87508: 
                   87509: #ifdef SQLITE_OMIT_PROGRESS_CALLBACK
                   87510: # define sqlite3_progress_handler 0
                   87511: #endif
                   87512: 
                   87513: #ifdef SQLITE_OMIT_VIRTUALTABLE
                   87514: # define sqlite3_create_module 0
                   87515: # define sqlite3_create_module_v2 0
                   87516: # define sqlite3_declare_vtab 0
                   87517: #endif
                   87518: 
                   87519: #ifdef SQLITE_OMIT_SHARED_CACHE
                   87520: # define sqlite3_enable_shared_cache 0
                   87521: #endif
                   87522: 
                   87523: #ifdef SQLITE_OMIT_TRACE
                   87524: # define sqlite3_profile       0
                   87525: # define sqlite3_trace         0
                   87526: #endif
                   87527: 
                   87528: #ifdef SQLITE_OMIT_GET_TABLE
                   87529: # define sqlite3_free_table    0
                   87530: # define sqlite3_get_table     0
                   87531: #endif
                   87532: 
                   87533: #ifdef SQLITE_OMIT_INCRBLOB
                   87534: #define sqlite3_bind_zeroblob  0
                   87535: #define sqlite3_blob_bytes     0
                   87536: #define sqlite3_blob_close     0
                   87537: #define sqlite3_blob_open      0
                   87538: #define sqlite3_blob_read      0
                   87539: #define sqlite3_blob_write     0
                   87540: #endif
                   87541: 
                   87542: /*
                   87543: ** The following structure contains pointers to all SQLite API routines.
                   87544: ** A pointer to this structure is passed into extensions when they are
                   87545: ** loaded so that the extension can make calls back into the SQLite
                   87546: ** library.
                   87547: **
                   87548: ** When adding new APIs, add them to the bottom of this structure
                   87549: ** in order to preserve backwards compatibility.
                   87550: **
                   87551: ** Extensions that use newer APIs should first call the
                   87552: ** sqlite3_libversion_number() to make sure that the API they
                   87553: ** intend to use is supported by the library.  Extensions should
                   87554: ** also check to make sure that the pointer to the function is
                   87555: ** not NULL before calling it.
                   87556: */
                   87557: static const sqlite3_api_routines sqlite3Apis = {
                   87558:   sqlite3_aggregate_context,
                   87559: #ifndef SQLITE_OMIT_DEPRECATED
                   87560:   sqlite3_aggregate_count,
                   87561: #else
                   87562:   0,
                   87563: #endif
                   87564:   sqlite3_bind_blob,
                   87565:   sqlite3_bind_double,
                   87566:   sqlite3_bind_int,
                   87567:   sqlite3_bind_int64,
                   87568:   sqlite3_bind_null,
                   87569:   sqlite3_bind_parameter_count,
                   87570:   sqlite3_bind_parameter_index,
                   87571:   sqlite3_bind_parameter_name,
                   87572:   sqlite3_bind_text,
                   87573:   sqlite3_bind_text16,
                   87574:   sqlite3_bind_value,
                   87575:   sqlite3_busy_handler,
                   87576:   sqlite3_busy_timeout,
                   87577:   sqlite3_changes,
                   87578:   sqlite3_close,
                   87579:   sqlite3_collation_needed,
                   87580:   sqlite3_collation_needed16,
                   87581:   sqlite3_column_blob,
                   87582:   sqlite3_column_bytes,
                   87583:   sqlite3_column_bytes16,
                   87584:   sqlite3_column_count,
                   87585:   sqlite3_column_database_name,
                   87586:   sqlite3_column_database_name16,
                   87587:   sqlite3_column_decltype,
                   87588:   sqlite3_column_decltype16,
                   87589:   sqlite3_column_double,
                   87590:   sqlite3_column_int,
                   87591:   sqlite3_column_int64,
                   87592:   sqlite3_column_name,
                   87593:   sqlite3_column_name16,
                   87594:   sqlite3_column_origin_name,
                   87595:   sqlite3_column_origin_name16,
                   87596:   sqlite3_column_table_name,
                   87597:   sqlite3_column_table_name16,
                   87598:   sqlite3_column_text,
                   87599:   sqlite3_column_text16,
                   87600:   sqlite3_column_type,
                   87601:   sqlite3_column_value,
                   87602:   sqlite3_commit_hook,
                   87603:   sqlite3_complete,
                   87604:   sqlite3_complete16,
                   87605:   sqlite3_create_collation,
                   87606:   sqlite3_create_collation16,
                   87607:   sqlite3_create_function,
                   87608:   sqlite3_create_function16,
                   87609:   sqlite3_create_module,
                   87610:   sqlite3_data_count,
                   87611:   sqlite3_db_handle,
                   87612:   sqlite3_declare_vtab,
                   87613:   sqlite3_enable_shared_cache,
                   87614:   sqlite3_errcode,
                   87615:   sqlite3_errmsg,
                   87616:   sqlite3_errmsg16,
                   87617:   sqlite3_exec,
                   87618: #ifndef SQLITE_OMIT_DEPRECATED
                   87619:   sqlite3_expired,
                   87620: #else
                   87621:   0,
                   87622: #endif
                   87623:   sqlite3_finalize,
                   87624:   sqlite3_free,
                   87625:   sqlite3_free_table,
                   87626:   sqlite3_get_autocommit,
                   87627:   sqlite3_get_auxdata,
                   87628:   sqlite3_get_table,
                   87629:   0,     /* Was sqlite3_global_recover(), but that function is deprecated */
                   87630:   sqlite3_interrupt,
                   87631:   sqlite3_last_insert_rowid,
                   87632:   sqlite3_libversion,
                   87633:   sqlite3_libversion_number,
                   87634:   sqlite3_malloc,
                   87635:   sqlite3_mprintf,
                   87636:   sqlite3_open,
                   87637:   sqlite3_open16,
                   87638:   sqlite3_prepare,
                   87639:   sqlite3_prepare16,
                   87640:   sqlite3_profile,
                   87641:   sqlite3_progress_handler,
                   87642:   sqlite3_realloc,
                   87643:   sqlite3_reset,
                   87644:   sqlite3_result_blob,
                   87645:   sqlite3_result_double,
                   87646:   sqlite3_result_error,
                   87647:   sqlite3_result_error16,
                   87648:   sqlite3_result_int,
                   87649:   sqlite3_result_int64,
                   87650:   sqlite3_result_null,
                   87651:   sqlite3_result_text,
                   87652:   sqlite3_result_text16,
                   87653:   sqlite3_result_text16be,
                   87654:   sqlite3_result_text16le,
                   87655:   sqlite3_result_value,
                   87656:   sqlite3_rollback_hook,
                   87657:   sqlite3_set_authorizer,
                   87658:   sqlite3_set_auxdata,
                   87659:   sqlite3_snprintf,
                   87660:   sqlite3_step,
                   87661:   sqlite3_table_column_metadata,
                   87662: #ifndef SQLITE_OMIT_DEPRECATED
                   87663:   sqlite3_thread_cleanup,
                   87664: #else
                   87665:   0,
                   87666: #endif
                   87667:   sqlite3_total_changes,
                   87668:   sqlite3_trace,
                   87669: #ifndef SQLITE_OMIT_DEPRECATED
                   87670:   sqlite3_transfer_bindings,
                   87671: #else
                   87672:   0,
                   87673: #endif
                   87674:   sqlite3_update_hook,
                   87675:   sqlite3_user_data,
                   87676:   sqlite3_value_blob,
                   87677:   sqlite3_value_bytes,
                   87678:   sqlite3_value_bytes16,
                   87679:   sqlite3_value_double,
                   87680:   sqlite3_value_int,
                   87681:   sqlite3_value_int64,
                   87682:   sqlite3_value_numeric_type,
                   87683:   sqlite3_value_text,
                   87684:   sqlite3_value_text16,
                   87685:   sqlite3_value_text16be,
                   87686:   sqlite3_value_text16le,
                   87687:   sqlite3_value_type,
                   87688:   sqlite3_vmprintf,
                   87689:   /*
                   87690:   ** The original API set ends here.  All extensions can call any
                   87691:   ** of the APIs above provided that the pointer is not NULL.  But
                   87692:   ** before calling APIs that follow, extension should check the
                   87693:   ** sqlite3_libversion_number() to make sure they are dealing with
                   87694:   ** a library that is new enough to support that API.
                   87695:   *************************************************************************
                   87696:   */
                   87697:   sqlite3_overload_function,
                   87698: 
                   87699:   /*
                   87700:   ** Added after 3.3.13
                   87701:   */
                   87702:   sqlite3_prepare_v2,
                   87703:   sqlite3_prepare16_v2,
                   87704:   sqlite3_clear_bindings,
                   87705: 
                   87706:   /*
                   87707:   ** Added for 3.4.1
                   87708:   */
                   87709:   sqlite3_create_module_v2,
                   87710: 
                   87711:   /*
                   87712:   ** Added for 3.5.0
                   87713:   */
                   87714:   sqlite3_bind_zeroblob,
                   87715:   sqlite3_blob_bytes,
                   87716:   sqlite3_blob_close,
                   87717:   sqlite3_blob_open,
                   87718:   sqlite3_blob_read,
                   87719:   sqlite3_blob_write,
                   87720:   sqlite3_create_collation_v2,
                   87721:   sqlite3_file_control,
                   87722:   sqlite3_memory_highwater,
                   87723:   sqlite3_memory_used,
                   87724: #ifdef SQLITE_MUTEX_OMIT
                   87725:   0, 
                   87726:   0, 
                   87727:   0,
                   87728:   0,
                   87729:   0,
                   87730: #else
                   87731:   sqlite3_mutex_alloc,
                   87732:   sqlite3_mutex_enter,
                   87733:   sqlite3_mutex_free,
                   87734:   sqlite3_mutex_leave,
                   87735:   sqlite3_mutex_try,
                   87736: #endif
                   87737:   sqlite3_open_v2,
                   87738:   sqlite3_release_memory,
                   87739:   sqlite3_result_error_nomem,
                   87740:   sqlite3_result_error_toobig,
                   87741:   sqlite3_sleep,
                   87742:   sqlite3_soft_heap_limit,
                   87743:   sqlite3_vfs_find,
                   87744:   sqlite3_vfs_register,
                   87745:   sqlite3_vfs_unregister,
                   87746: 
                   87747:   /*
                   87748:   ** Added for 3.5.8
                   87749:   */
                   87750:   sqlite3_threadsafe,
                   87751:   sqlite3_result_zeroblob,
                   87752:   sqlite3_result_error_code,
                   87753:   sqlite3_test_control,
                   87754:   sqlite3_randomness,
                   87755:   sqlite3_context_db_handle,
                   87756: 
                   87757:   /*
                   87758:   ** Added for 3.6.0
                   87759:   */
                   87760:   sqlite3_extended_result_codes,
                   87761:   sqlite3_limit,
                   87762:   sqlite3_next_stmt,
                   87763:   sqlite3_sql,
                   87764:   sqlite3_status,
                   87765: 
                   87766:   /*
                   87767:   ** Added for 3.7.4
                   87768:   */
                   87769:   sqlite3_backup_finish,
                   87770:   sqlite3_backup_init,
                   87771:   sqlite3_backup_pagecount,
                   87772:   sqlite3_backup_remaining,
                   87773:   sqlite3_backup_step,
                   87774: #ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
                   87775:   sqlite3_compileoption_get,
                   87776:   sqlite3_compileoption_used,
                   87777: #else
                   87778:   0,
                   87779:   0,
                   87780: #endif
                   87781:   sqlite3_create_function_v2,
                   87782:   sqlite3_db_config,
                   87783:   sqlite3_db_mutex,
                   87784:   sqlite3_db_status,
                   87785:   sqlite3_extended_errcode,
                   87786:   sqlite3_log,
                   87787:   sqlite3_soft_heap_limit64,
                   87788:   sqlite3_sourceid,
                   87789:   sqlite3_stmt_status,
                   87790:   sqlite3_strnicmp,
                   87791: #ifdef SQLITE_ENABLE_UNLOCK_NOTIFY
                   87792:   sqlite3_unlock_notify,
                   87793: #else
                   87794:   0,
                   87795: #endif
                   87796: #ifndef SQLITE_OMIT_WAL
                   87797:   sqlite3_wal_autocheckpoint,
                   87798:   sqlite3_wal_checkpoint,
                   87799:   sqlite3_wal_hook,
                   87800: #else
                   87801:   0,
                   87802:   0,
                   87803:   0,
                   87804: #endif
                   87805: };
                   87806: 
                   87807: /*
                   87808: ** Attempt to load an SQLite extension library contained in the file
                   87809: ** zFile.  The entry point is zProc.  zProc may be 0 in which case a
                   87810: ** default entry point name (sqlite3_extension_init) is used.  Use
                   87811: ** of the default name is recommended.
                   87812: **
                   87813: ** Return SQLITE_OK on success and SQLITE_ERROR if something goes wrong.
                   87814: **
                   87815: ** If an error occurs and pzErrMsg is not 0, then fill *pzErrMsg with 
                   87816: ** error message text.  The calling function should free this memory
                   87817: ** by calling sqlite3DbFree(db, ).
                   87818: */
                   87819: static int sqlite3LoadExtension(
                   87820:   sqlite3 *db,          /* Load the extension into this database connection */
                   87821:   const char *zFile,    /* Name of the shared library containing extension */
                   87822:   const char *zProc,    /* Entry point.  Use "sqlite3_extension_init" if 0 */
                   87823:   char **pzErrMsg       /* Put error message here if not 0 */
                   87824: ){
                   87825:   sqlite3_vfs *pVfs = db->pVfs;
                   87826:   void *handle;
                   87827:   int (*xInit)(sqlite3*,char**,const sqlite3_api_routines*);
                   87828:   char *zErrmsg = 0;
                   87829:   void **aHandle;
                   87830:   const int nMsg = 300;
                   87831: 
                   87832:   if( pzErrMsg ) *pzErrMsg = 0;
                   87833: 
                   87834:   /* Ticket #1863.  To avoid a creating security problems for older
                   87835:   ** applications that relink against newer versions of SQLite, the
                   87836:   ** ability to run load_extension is turned off by default.  One
                   87837:   ** must call sqlite3_enable_load_extension() to turn on extension
                   87838:   ** loading.  Otherwise you get the following error.
                   87839:   */
                   87840:   if( (db->flags & SQLITE_LoadExtension)==0 ){
                   87841:     if( pzErrMsg ){
                   87842:       *pzErrMsg = sqlite3_mprintf("not authorized");
                   87843:     }
                   87844:     return SQLITE_ERROR;
                   87845:   }
                   87846: 
                   87847:   if( zProc==0 ){
                   87848:     zProc = "sqlite3_extension_init";
                   87849:   }
                   87850: 
                   87851:   handle = sqlite3OsDlOpen(pVfs, zFile);
                   87852:   if( handle==0 ){
                   87853:     if( pzErrMsg ){
                   87854:       *pzErrMsg = zErrmsg = sqlite3_malloc(nMsg);
                   87855:       if( zErrmsg ){
                   87856:         sqlite3_snprintf(nMsg, zErrmsg, 
                   87857:             "unable to open shared library [%s]", zFile);
                   87858:         sqlite3OsDlError(pVfs, nMsg-1, zErrmsg);
                   87859:       }
                   87860:     }
                   87861:     return SQLITE_ERROR;
                   87862:   }
                   87863:   xInit = (int(*)(sqlite3*,char**,const sqlite3_api_routines*))
                   87864:                    sqlite3OsDlSym(pVfs, handle, zProc);
                   87865:   if( xInit==0 ){
                   87866:     if( pzErrMsg ){
                   87867:       *pzErrMsg = zErrmsg = sqlite3_malloc(nMsg);
                   87868:       if( zErrmsg ){
                   87869:         sqlite3_snprintf(nMsg, zErrmsg,
                   87870:             "no entry point [%s] in shared library [%s]", zProc,zFile);
                   87871:         sqlite3OsDlError(pVfs, nMsg-1, zErrmsg);
                   87872:       }
                   87873:       sqlite3OsDlClose(pVfs, handle);
                   87874:     }
                   87875:     return SQLITE_ERROR;
                   87876:   }else if( xInit(db, &zErrmsg, &sqlite3Apis) ){
                   87877:     if( pzErrMsg ){
                   87878:       *pzErrMsg = sqlite3_mprintf("error during initialization: %s", zErrmsg);
                   87879:     }
                   87880:     sqlite3_free(zErrmsg);
                   87881:     sqlite3OsDlClose(pVfs, handle);
                   87882:     return SQLITE_ERROR;
                   87883:   }
                   87884: 
                   87885:   /* Append the new shared library handle to the db->aExtension array. */
                   87886:   aHandle = sqlite3DbMallocZero(db, sizeof(handle)*(db->nExtension+1));
                   87887:   if( aHandle==0 ){
                   87888:     return SQLITE_NOMEM;
                   87889:   }
                   87890:   if( db->nExtension>0 ){
                   87891:     memcpy(aHandle, db->aExtension, sizeof(handle)*db->nExtension);
                   87892:   }
                   87893:   sqlite3DbFree(db, db->aExtension);
                   87894:   db->aExtension = aHandle;
                   87895: 
                   87896:   db->aExtension[db->nExtension++] = handle;
                   87897:   return SQLITE_OK;
                   87898: }
                   87899: SQLITE_API int sqlite3_load_extension(
                   87900:   sqlite3 *db,          /* Load the extension into this database connection */
                   87901:   const char *zFile,    /* Name of the shared library containing extension */
                   87902:   const char *zProc,    /* Entry point.  Use "sqlite3_extension_init" if 0 */
                   87903:   char **pzErrMsg       /* Put error message here if not 0 */
                   87904: ){
                   87905:   int rc;
                   87906:   sqlite3_mutex_enter(db->mutex);
                   87907:   rc = sqlite3LoadExtension(db, zFile, zProc, pzErrMsg);
                   87908:   rc = sqlite3ApiExit(db, rc);
                   87909:   sqlite3_mutex_leave(db->mutex);
                   87910:   return rc;
                   87911: }
                   87912: 
                   87913: /*
                   87914: ** Call this routine when the database connection is closing in order
                   87915: ** to clean up loaded extensions
                   87916: */
                   87917: SQLITE_PRIVATE void sqlite3CloseExtensions(sqlite3 *db){
                   87918:   int i;
                   87919:   assert( sqlite3_mutex_held(db->mutex) );
                   87920:   for(i=0; i<db->nExtension; i++){
                   87921:     sqlite3OsDlClose(db->pVfs, db->aExtension[i]);
                   87922:   }
                   87923:   sqlite3DbFree(db, db->aExtension);
                   87924: }
                   87925: 
                   87926: /*
                   87927: ** Enable or disable extension loading.  Extension loading is disabled by
                   87928: ** default so as not to open security holes in older applications.
                   87929: */
                   87930: SQLITE_API int sqlite3_enable_load_extension(sqlite3 *db, int onoff){
                   87931:   sqlite3_mutex_enter(db->mutex);
                   87932:   if( onoff ){
                   87933:     db->flags |= SQLITE_LoadExtension;
                   87934:   }else{
                   87935:     db->flags &= ~SQLITE_LoadExtension;
                   87936:   }
                   87937:   sqlite3_mutex_leave(db->mutex);
                   87938:   return SQLITE_OK;
                   87939: }
                   87940: 
                   87941: #endif /* SQLITE_OMIT_LOAD_EXTENSION */
                   87942: 
                   87943: /*
                   87944: ** The auto-extension code added regardless of whether or not extension
                   87945: ** loading is supported.  We need a dummy sqlite3Apis pointer for that
                   87946: ** code if regular extension loading is not available.  This is that
                   87947: ** dummy pointer.
                   87948: */
                   87949: #ifdef SQLITE_OMIT_LOAD_EXTENSION
                   87950: static const sqlite3_api_routines sqlite3Apis = { 0 };
                   87951: #endif
                   87952: 
                   87953: 
                   87954: /*
                   87955: ** The following object holds the list of automatically loaded
                   87956: ** extensions.
                   87957: **
                   87958: ** This list is shared across threads.  The SQLITE_MUTEX_STATIC_MASTER
                   87959: ** mutex must be held while accessing this list.
                   87960: */
                   87961: typedef struct sqlite3AutoExtList sqlite3AutoExtList;
                   87962: static SQLITE_WSD struct sqlite3AutoExtList {
                   87963:   int nExt;              /* Number of entries in aExt[] */          
                   87964:   void (**aExt)(void);   /* Pointers to the extension init functions */
                   87965: } sqlite3Autoext = { 0, 0 };
                   87966: 
                   87967: /* The "wsdAutoext" macro will resolve to the autoextension
                   87968: ** state vector.  If writable static data is unsupported on the target,
                   87969: ** we have to locate the state vector at run-time.  In the more common
                   87970: ** case where writable static data is supported, wsdStat can refer directly
                   87971: ** to the "sqlite3Autoext" state vector declared above.
                   87972: */
                   87973: #ifdef SQLITE_OMIT_WSD
                   87974: # define wsdAutoextInit \
                   87975:   sqlite3AutoExtList *x = &GLOBAL(sqlite3AutoExtList,sqlite3Autoext)
                   87976: # define wsdAutoext x[0]
                   87977: #else
                   87978: # define wsdAutoextInit
                   87979: # define wsdAutoext sqlite3Autoext
                   87980: #endif
                   87981: 
                   87982: 
                   87983: /*
                   87984: ** Register a statically linked extension that is automatically
                   87985: ** loaded by every new database connection.
                   87986: */
                   87987: SQLITE_API int sqlite3_auto_extension(void (*xInit)(void)){
                   87988:   int rc = SQLITE_OK;
                   87989: #ifndef SQLITE_OMIT_AUTOINIT
                   87990:   rc = sqlite3_initialize();
                   87991:   if( rc ){
                   87992:     return rc;
                   87993:   }else
                   87994: #endif
                   87995:   {
                   87996:     int i;
                   87997: #if SQLITE_THREADSAFE
                   87998:     sqlite3_mutex *mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER);
                   87999: #endif
                   88000:     wsdAutoextInit;
                   88001:     sqlite3_mutex_enter(mutex);
                   88002:     for(i=0; i<wsdAutoext.nExt; i++){
                   88003:       if( wsdAutoext.aExt[i]==xInit ) break;
                   88004:     }
                   88005:     if( i==wsdAutoext.nExt ){
                   88006:       int nByte = (wsdAutoext.nExt+1)*sizeof(wsdAutoext.aExt[0]);
                   88007:       void (**aNew)(void);
                   88008:       aNew = sqlite3_realloc(wsdAutoext.aExt, nByte);
                   88009:       if( aNew==0 ){
                   88010:         rc = SQLITE_NOMEM;
                   88011:       }else{
                   88012:         wsdAutoext.aExt = aNew;
                   88013:         wsdAutoext.aExt[wsdAutoext.nExt] = xInit;
                   88014:         wsdAutoext.nExt++;
                   88015:       }
                   88016:     }
                   88017:     sqlite3_mutex_leave(mutex);
                   88018:     assert( (rc&0xff)==rc );
                   88019:     return rc;
                   88020:   }
                   88021: }
                   88022: 
                   88023: /*
                   88024: ** Reset the automatic extension loading mechanism.
                   88025: */
                   88026: SQLITE_API void sqlite3_reset_auto_extension(void){
                   88027: #ifndef SQLITE_OMIT_AUTOINIT
                   88028:   if( sqlite3_initialize()==SQLITE_OK )
                   88029: #endif
                   88030:   {
                   88031: #if SQLITE_THREADSAFE
                   88032:     sqlite3_mutex *mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER);
                   88033: #endif
                   88034:     wsdAutoextInit;
                   88035:     sqlite3_mutex_enter(mutex);
                   88036:     sqlite3_free(wsdAutoext.aExt);
                   88037:     wsdAutoext.aExt = 0;
                   88038:     wsdAutoext.nExt = 0;
                   88039:     sqlite3_mutex_leave(mutex);
                   88040:   }
                   88041: }
                   88042: 
                   88043: /*
                   88044: ** Load all automatic extensions.
                   88045: **
                   88046: ** If anything goes wrong, set an error in the database connection.
                   88047: */
                   88048: SQLITE_PRIVATE void sqlite3AutoLoadExtensions(sqlite3 *db){
                   88049:   int i;
                   88050:   int go = 1;
                   88051:   int (*xInit)(sqlite3*,char**,const sqlite3_api_routines*);
                   88052: 
                   88053:   wsdAutoextInit;
                   88054:   if( wsdAutoext.nExt==0 ){
                   88055:     /* Common case: early out without every having to acquire a mutex */
                   88056:     return;
                   88057:   }
                   88058:   for(i=0; go; i++){
                   88059:     char *zErrmsg;
                   88060: #if SQLITE_THREADSAFE
                   88061:     sqlite3_mutex *mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER);
                   88062: #endif
                   88063:     sqlite3_mutex_enter(mutex);
                   88064:     if( i>=wsdAutoext.nExt ){
                   88065:       xInit = 0;
                   88066:       go = 0;
                   88067:     }else{
                   88068:       xInit = (int(*)(sqlite3*,char**,const sqlite3_api_routines*))
                   88069:               wsdAutoext.aExt[i];
                   88070:     }
                   88071:     sqlite3_mutex_leave(mutex);
                   88072:     zErrmsg = 0;
                   88073:     if( xInit && xInit(db, &zErrmsg, &sqlite3Apis) ){
                   88074:       sqlite3Error(db, SQLITE_ERROR,
                   88075:             "automatic extension loading failed: %s", zErrmsg);
                   88076:       go = 0;
                   88077:     }
                   88078:     sqlite3_free(zErrmsg);
                   88079:   }
                   88080: }
                   88081: 
                   88082: /************** End of loadext.c *********************************************/
                   88083: /************** Begin file pragma.c ******************************************/
                   88084: /*
                   88085: ** 2003 April 6
                   88086: **
                   88087: ** The author disclaims copyright to this source code.  In place of
                   88088: ** a legal notice, here is a blessing:
                   88089: **
                   88090: **    May you do good and not evil.
                   88091: **    May you find forgiveness for yourself and forgive others.
                   88092: **    May you share freely, never taking more than you give.
                   88093: **
                   88094: *************************************************************************
                   88095: ** This file contains code used to implement the PRAGMA command.
                   88096: */
                   88097: 
                   88098: /*
                   88099: ** Interpret the given string as a safety level.  Return 0 for OFF,
                   88100: ** 1 for ON or NORMAL and 2 for FULL.  Return 1 for an empty or 
                   88101: ** unrecognized string argument.
                   88102: **
                   88103: ** Note that the values returned are one less that the values that
                   88104: ** should be passed into sqlite3BtreeSetSafetyLevel().  The is done
                   88105: ** to support legacy SQL code.  The safety level used to be boolean
                   88106: ** and older scripts may have used numbers 0 for OFF and 1 for ON.
                   88107: */
                   88108: static u8 getSafetyLevel(const char *z){
                   88109:                              /* 123456789 123456789 */
                   88110:   static const char zText[] = "onoffalseyestruefull";
                   88111:   static const u8 iOffset[] = {0, 1, 2, 4, 9, 12, 16};
                   88112:   static const u8 iLength[] = {2, 2, 3, 5, 3, 4, 4};
                   88113:   static const u8 iValue[] =  {1, 0, 0, 0, 1, 1, 2};
                   88114:   int i, n;
                   88115:   if( sqlite3Isdigit(*z) ){
                   88116:     return (u8)sqlite3Atoi(z);
                   88117:   }
                   88118:   n = sqlite3Strlen30(z);
                   88119:   for(i=0; i<ArraySize(iLength); i++){
                   88120:     if( iLength[i]==n && sqlite3StrNICmp(&zText[iOffset[i]],z,n)==0 ){
                   88121:       return iValue[i];
                   88122:     }
                   88123:   }
                   88124:   return 1;
                   88125: }
                   88126: 
                   88127: /*
                   88128: ** Interpret the given string as a boolean value.
                   88129: */
                   88130: SQLITE_PRIVATE u8 sqlite3GetBoolean(const char *z){
                   88131:   return getSafetyLevel(z)&1;
                   88132: }
                   88133: 
                   88134: /* The sqlite3GetBoolean() function is used by other modules but the
                   88135: ** remainder of this file is specific to PRAGMA processing.  So omit
                   88136: ** the rest of the file if PRAGMAs are omitted from the build.
                   88137: */
                   88138: #if !defined(SQLITE_OMIT_PRAGMA)
                   88139: 
                   88140: /*
                   88141: ** Interpret the given string as a locking mode value.
                   88142: */
                   88143: static int getLockingMode(const char *z){
                   88144:   if( z ){
                   88145:     if( 0==sqlite3StrICmp(z, "exclusive") ) return PAGER_LOCKINGMODE_EXCLUSIVE;
                   88146:     if( 0==sqlite3StrICmp(z, "normal") ) return PAGER_LOCKINGMODE_NORMAL;
                   88147:   }
                   88148:   return PAGER_LOCKINGMODE_QUERY;
                   88149: }
                   88150: 
                   88151: #ifndef SQLITE_OMIT_AUTOVACUUM
                   88152: /*
                   88153: ** Interpret the given string as an auto-vacuum mode value.
                   88154: **
                   88155: ** The following strings, "none", "full" and "incremental" are 
                   88156: ** acceptable, as are their numeric equivalents: 0, 1 and 2 respectively.
                   88157: */
                   88158: static int getAutoVacuum(const char *z){
                   88159:   int i;
                   88160:   if( 0==sqlite3StrICmp(z, "none") ) return BTREE_AUTOVACUUM_NONE;
                   88161:   if( 0==sqlite3StrICmp(z, "full") ) return BTREE_AUTOVACUUM_FULL;
                   88162:   if( 0==sqlite3StrICmp(z, "incremental") ) return BTREE_AUTOVACUUM_INCR;
                   88163:   i = sqlite3Atoi(z);
                   88164:   return (u8)((i>=0&&i<=2)?i:0);
                   88165: }
                   88166: #endif /* ifndef SQLITE_OMIT_AUTOVACUUM */
                   88167: 
                   88168: #ifndef SQLITE_OMIT_PAGER_PRAGMAS
                   88169: /*
                   88170: ** Interpret the given string as a temp db location. Return 1 for file
                   88171: ** backed temporary databases, 2 for the Red-Black tree in memory database
                   88172: ** and 0 to use the compile-time default.
                   88173: */
                   88174: static int getTempStore(const char *z){
                   88175:   if( z[0]>='0' && z[0]<='2' ){
                   88176:     return z[0] - '0';
                   88177:   }else if( sqlite3StrICmp(z, "file")==0 ){
                   88178:     return 1;
                   88179:   }else if( sqlite3StrICmp(z, "memory")==0 ){
                   88180:     return 2;
                   88181:   }else{
                   88182:     return 0;
                   88183:   }
                   88184: }
                   88185: #endif /* SQLITE_PAGER_PRAGMAS */
                   88186: 
                   88187: #ifndef SQLITE_OMIT_PAGER_PRAGMAS
                   88188: /*
                   88189: ** Invalidate temp storage, either when the temp storage is changed
                   88190: ** from default, or when 'file' and the temp_store_directory has changed
                   88191: */
                   88192: static int invalidateTempStorage(Parse *pParse){
                   88193:   sqlite3 *db = pParse->db;
                   88194:   if( db->aDb[1].pBt!=0 ){
                   88195:     if( !db->autoCommit || sqlite3BtreeIsInReadTrans(db->aDb[1].pBt) ){
                   88196:       sqlite3ErrorMsg(pParse, "temporary storage cannot be changed "
                   88197:         "from within a transaction");
                   88198:       return SQLITE_ERROR;
                   88199:     }
                   88200:     sqlite3BtreeClose(db->aDb[1].pBt);
                   88201:     db->aDb[1].pBt = 0;
                   88202:     sqlite3ResetInternalSchema(db, -1);
                   88203:   }
                   88204:   return SQLITE_OK;
                   88205: }
                   88206: #endif /* SQLITE_PAGER_PRAGMAS */
                   88207: 
                   88208: #ifndef SQLITE_OMIT_PAGER_PRAGMAS
                   88209: /*
                   88210: ** If the TEMP database is open, close it and mark the database schema
                   88211: ** as needing reloading.  This must be done when using the SQLITE_TEMP_STORE
                   88212: ** or DEFAULT_TEMP_STORE pragmas.
                   88213: */
                   88214: static int changeTempStorage(Parse *pParse, const char *zStorageType){
                   88215:   int ts = getTempStore(zStorageType);
                   88216:   sqlite3 *db = pParse->db;
                   88217:   if( db->temp_store==ts ) return SQLITE_OK;
                   88218:   if( invalidateTempStorage( pParse ) != SQLITE_OK ){
                   88219:     return SQLITE_ERROR;
                   88220:   }
                   88221:   db->temp_store = (u8)ts;
                   88222:   return SQLITE_OK;
                   88223: }
                   88224: #endif /* SQLITE_PAGER_PRAGMAS */
                   88225: 
                   88226: /*
                   88227: ** Generate code to return a single integer value.
                   88228: */
                   88229: static void returnSingleInt(Parse *pParse, const char *zLabel, i64 value){
                   88230:   Vdbe *v = sqlite3GetVdbe(pParse);
                   88231:   int mem = ++pParse->nMem;
                   88232:   i64 *pI64 = sqlite3DbMallocRaw(pParse->db, sizeof(value));
                   88233:   if( pI64 ){
                   88234:     memcpy(pI64, &value, sizeof(value));
                   88235:   }
                   88236:   sqlite3VdbeAddOp4(v, OP_Int64, 0, mem, 0, (char*)pI64, P4_INT64);
                   88237:   sqlite3VdbeSetNumCols(v, 1);
                   88238:   sqlite3VdbeSetColName(v, 0, COLNAME_NAME, zLabel, SQLITE_STATIC);
                   88239:   sqlite3VdbeAddOp2(v, OP_ResultRow, mem, 1);
                   88240: }
                   88241: 
                   88242: #ifndef SQLITE_OMIT_FLAG_PRAGMAS
                   88243: /*
                   88244: ** Check to see if zRight and zLeft refer to a pragma that queries
                   88245: ** or changes one of the flags in db->flags.  Return 1 if so and 0 if not.
                   88246: ** Also, implement the pragma.
                   88247: */
                   88248: static int flagPragma(Parse *pParse, const char *zLeft, const char *zRight){
                   88249:   static const struct sPragmaType {
                   88250:     const char *zName;  /* Name of the pragma */
                   88251:     int mask;           /* Mask for the db->flags value */
                   88252:   } aPragma[] = {
                   88253:     { "full_column_names",        SQLITE_FullColNames  },
                   88254:     { "short_column_names",       SQLITE_ShortColNames },
                   88255:     { "count_changes",            SQLITE_CountRows     },
                   88256:     { "empty_result_callbacks",   SQLITE_NullCallback  },
                   88257:     { "legacy_file_format",       SQLITE_LegacyFileFmt },
                   88258:     { "fullfsync",                SQLITE_FullFSync     },
                   88259:     { "checkpoint_fullfsync",     SQLITE_CkptFullFSync },
                   88260:     { "reverse_unordered_selects", SQLITE_ReverseOrder  },
                   88261: #ifndef SQLITE_OMIT_AUTOMATIC_INDEX
                   88262:     { "automatic_index",          SQLITE_AutoIndex     },
                   88263: #endif
                   88264: #ifdef SQLITE_DEBUG
                   88265:     { "sql_trace",                SQLITE_SqlTrace      },
                   88266:     { "vdbe_listing",             SQLITE_VdbeListing   },
                   88267:     { "vdbe_trace",               SQLITE_VdbeTrace     },
                   88268: #endif
                   88269: #ifndef SQLITE_OMIT_CHECK
                   88270:     { "ignore_check_constraints", SQLITE_IgnoreChecks  },
                   88271: #endif
                   88272:     /* The following is VERY experimental */
                   88273:     { "writable_schema",          SQLITE_WriteSchema|SQLITE_RecoveryMode },
                   88274:     { "omit_readlock",            SQLITE_NoReadlock    },
                   88275: 
                   88276:     /* TODO: Maybe it shouldn't be possible to change the ReadUncommitted
                   88277:     ** flag if there are any active statements. */
                   88278:     { "read_uncommitted",         SQLITE_ReadUncommitted },
                   88279:     { "recursive_triggers",       SQLITE_RecTriggers },
                   88280: 
                   88281:     /* This flag may only be set if both foreign-key and trigger support
                   88282:     ** are present in the build.  */
                   88283: #if !defined(SQLITE_OMIT_FOREIGN_KEY) && !defined(SQLITE_OMIT_TRIGGER)
                   88284:     { "foreign_keys",             SQLITE_ForeignKeys },
                   88285: #endif
                   88286:   };
                   88287:   int i;
                   88288:   const struct sPragmaType *p;
                   88289:   for(i=0, p=aPragma; i<ArraySize(aPragma); i++, p++){
                   88290:     if( sqlite3StrICmp(zLeft, p->zName)==0 ){
                   88291:       sqlite3 *db = pParse->db;
                   88292:       Vdbe *v;
                   88293:       v = sqlite3GetVdbe(pParse);
                   88294:       assert( v!=0 );  /* Already allocated by sqlite3Pragma() */
                   88295:       if( ALWAYS(v) ){
                   88296:         if( zRight==0 ){
                   88297:           returnSingleInt(pParse, p->zName, (db->flags & p->mask)!=0 );
                   88298:         }else{
                   88299:           int mask = p->mask;          /* Mask of bits to set or clear. */
                   88300:           if( db->autoCommit==0 ){
                   88301:             /* Foreign key support may not be enabled or disabled while not
                   88302:             ** in auto-commit mode.  */
                   88303:             mask &= ~(SQLITE_ForeignKeys);
                   88304:           }
                   88305: 
                   88306:           if( sqlite3GetBoolean(zRight) ){
                   88307:             db->flags |= mask;
                   88308:           }else{
                   88309:             db->flags &= ~mask;
                   88310:           }
                   88311: 
                   88312:           /* Many of the flag-pragmas modify the code generated by the SQL 
                   88313:           ** compiler (eg. count_changes). So add an opcode to expire all
                   88314:           ** compiled SQL statements after modifying a pragma value.
                   88315:           */
                   88316:           sqlite3VdbeAddOp2(v, OP_Expire, 0, 0);
                   88317:         }
                   88318:       }
                   88319: 
                   88320:       return 1;
                   88321:     }
                   88322:   }
                   88323:   return 0;
                   88324: }
                   88325: #endif /* SQLITE_OMIT_FLAG_PRAGMAS */
                   88326: 
                   88327: /*
                   88328: ** Return a human-readable name for a constraint resolution action.
                   88329: */
                   88330: #ifndef SQLITE_OMIT_FOREIGN_KEY
                   88331: static const char *actionName(u8 action){
                   88332:   const char *zName;
                   88333:   switch( action ){
                   88334:     case OE_SetNull:  zName = "SET NULL";        break;
                   88335:     case OE_SetDflt:  zName = "SET DEFAULT";     break;
                   88336:     case OE_Cascade:  zName = "CASCADE";         break;
                   88337:     case OE_Restrict: zName = "RESTRICT";        break;
                   88338:     default:          zName = "NO ACTION";  
                   88339:                       assert( action==OE_None ); break;
                   88340:   }
                   88341:   return zName;
                   88342: }
                   88343: #endif
                   88344: 
                   88345: 
                   88346: /*
                   88347: ** Parameter eMode must be one of the PAGER_JOURNALMODE_XXX constants
                   88348: ** defined in pager.h. This function returns the associated lowercase
                   88349: ** journal-mode name.
                   88350: */
                   88351: SQLITE_PRIVATE const char *sqlite3JournalModename(int eMode){
                   88352:   static char * const azModeName[] = {
                   88353:     "delete", "persist", "off", "truncate", "memory"
                   88354: #ifndef SQLITE_OMIT_WAL
                   88355:      , "wal"
                   88356: #endif
                   88357:   };
                   88358:   assert( PAGER_JOURNALMODE_DELETE==0 );
                   88359:   assert( PAGER_JOURNALMODE_PERSIST==1 );
                   88360:   assert( PAGER_JOURNALMODE_OFF==2 );
                   88361:   assert( PAGER_JOURNALMODE_TRUNCATE==3 );
                   88362:   assert( PAGER_JOURNALMODE_MEMORY==4 );
                   88363:   assert( PAGER_JOURNALMODE_WAL==5 );
                   88364:   assert( eMode>=0 && eMode<=ArraySize(azModeName) );
                   88365: 
                   88366:   if( eMode==ArraySize(azModeName) ) return 0;
                   88367:   return azModeName[eMode];
                   88368: }
                   88369: 
                   88370: /*
                   88371: ** Process a pragma statement.  
                   88372: **
                   88373: ** Pragmas are of this form:
                   88374: **
                   88375: **      PRAGMA [database.]id [= value]
                   88376: **
                   88377: ** The identifier might also be a string.  The value is a string, and
                   88378: ** identifier, or a number.  If minusFlag is true, then the value is
                   88379: ** a number that was preceded by a minus sign.
                   88380: **
                   88381: ** If the left side is "database.id" then pId1 is the database name
                   88382: ** and pId2 is the id.  If the left side is just "id" then pId1 is the
                   88383: ** id and pId2 is any empty string.
                   88384: */
                   88385: SQLITE_PRIVATE void sqlite3Pragma(
                   88386:   Parse *pParse, 
                   88387:   Token *pId1,        /* First part of [database.]id field */
                   88388:   Token *pId2,        /* Second part of [database.]id field, or NULL */
                   88389:   Token *pValue,      /* Token for <value>, or NULL */
                   88390:   int minusFlag       /* True if a '-' sign preceded <value> */
                   88391: ){
                   88392:   char *zLeft = 0;       /* Nul-terminated UTF-8 string <id> */
                   88393:   char *zRight = 0;      /* Nul-terminated UTF-8 string <value>, or NULL */
                   88394:   const char *zDb = 0;   /* The database name */
                   88395:   Token *pId;            /* Pointer to <id> token */
                   88396:   int iDb;               /* Database index for <database> */
                   88397:   sqlite3 *db = pParse->db;
                   88398:   Db *pDb;
                   88399:   Vdbe *v = pParse->pVdbe = sqlite3VdbeCreate(db);
                   88400:   if( v==0 ) return;
                   88401:   sqlite3VdbeRunOnlyOnce(v);
                   88402:   pParse->nMem = 2;
                   88403: 
                   88404:   /* Interpret the [database.] part of the pragma statement. iDb is the
                   88405:   ** index of the database this pragma is being applied to in db.aDb[]. */
                   88406:   iDb = sqlite3TwoPartName(pParse, pId1, pId2, &pId);
                   88407:   if( iDb<0 ) return;
                   88408:   pDb = &db->aDb[iDb];
                   88409: 
                   88410:   /* If the temp database has been explicitly named as part of the 
                   88411:   ** pragma, make sure it is open. 
                   88412:   */
                   88413:   if( iDb==1 && sqlite3OpenTempDatabase(pParse) ){
                   88414:     return;
                   88415:   }
                   88416: 
                   88417:   zLeft = sqlite3NameFromToken(db, pId);
                   88418:   if( !zLeft ) return;
                   88419:   if( minusFlag ){
                   88420:     zRight = sqlite3MPrintf(db, "-%T", pValue);
                   88421:   }else{
                   88422:     zRight = sqlite3NameFromToken(db, pValue);
                   88423:   }
                   88424: 
                   88425:   assert( pId2 );
                   88426:   zDb = pId2->n>0 ? pDb->zName : 0;
                   88427:   if( sqlite3AuthCheck(pParse, SQLITE_PRAGMA, zLeft, zRight, zDb) ){
                   88428:     goto pragma_out;
                   88429:   }
                   88430:  
                   88431: #ifndef SQLITE_OMIT_PAGER_PRAGMAS
                   88432:   /*
                   88433:   **  PRAGMA [database.]default_cache_size
                   88434:   **  PRAGMA [database.]default_cache_size=N
                   88435:   **
                   88436:   ** The first form reports the current persistent setting for the
                   88437:   ** page cache size.  The value returned is the maximum number of
                   88438:   ** pages in the page cache.  The second form sets both the current
                   88439:   ** page cache size value and the persistent page cache size value
                   88440:   ** stored in the database file.
                   88441:   **
                   88442:   ** Older versions of SQLite would set the default cache size to a
                   88443:   ** negative number to indicate synchronous=OFF.  These days, synchronous
                   88444:   ** is always on by default regardless of the sign of the default cache
                   88445:   ** size.  But continue to take the absolute value of the default cache
                   88446:   ** size of historical compatibility.
                   88447:   */
                   88448:   if( sqlite3StrICmp(zLeft,"default_cache_size")==0 ){
                   88449:     static const VdbeOpList getCacheSize[] = {
                   88450:       { OP_Transaction, 0, 0,        0},                         /* 0 */
                   88451:       { OP_ReadCookie,  0, 1,        BTREE_DEFAULT_CACHE_SIZE},  /* 1 */
                   88452:       { OP_IfPos,       1, 7,        0},
                   88453:       { OP_Integer,     0, 2,        0},
                   88454:       { OP_Subtract,    1, 2,        1},
                   88455:       { OP_IfPos,       1, 7,        0},
                   88456:       { OP_Integer,     0, 1,        0},                         /* 6 */
                   88457:       { OP_ResultRow,   1, 1,        0},
                   88458:     };
                   88459:     int addr;
                   88460:     if( sqlite3ReadSchema(pParse) ) goto pragma_out;
                   88461:     sqlite3VdbeUsesBtree(v, iDb);
                   88462:     if( !zRight ){
                   88463:       sqlite3VdbeSetNumCols(v, 1);
                   88464:       sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "cache_size", SQLITE_STATIC);
                   88465:       pParse->nMem += 2;
                   88466:       addr = sqlite3VdbeAddOpList(v, ArraySize(getCacheSize), getCacheSize);
                   88467:       sqlite3VdbeChangeP1(v, addr, iDb);
                   88468:       sqlite3VdbeChangeP1(v, addr+1, iDb);
                   88469:       sqlite3VdbeChangeP1(v, addr+6, SQLITE_DEFAULT_CACHE_SIZE);
                   88470:     }else{
                   88471:       int size = sqlite3AbsInt32(sqlite3Atoi(zRight));
                   88472:       sqlite3BeginWriteOperation(pParse, 0, iDb);
                   88473:       sqlite3VdbeAddOp2(v, OP_Integer, size, 1);
                   88474:       sqlite3VdbeAddOp3(v, OP_SetCookie, iDb, BTREE_DEFAULT_CACHE_SIZE, 1);
                   88475:       assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
                   88476:       pDb->pSchema->cache_size = size;
                   88477:       sqlite3BtreeSetCacheSize(pDb->pBt, pDb->pSchema->cache_size);
                   88478:     }
                   88479:   }else
                   88480: 
                   88481:   /*
                   88482:   **  PRAGMA [database.]page_size
                   88483:   **  PRAGMA [database.]page_size=N
                   88484:   **
                   88485:   ** The first form reports the current setting for the
                   88486:   ** database page size in bytes.  The second form sets the
                   88487:   ** database page size value.  The value can only be set if
                   88488:   ** the database has not yet been created.
                   88489:   */
                   88490:   if( sqlite3StrICmp(zLeft,"page_size")==0 ){
                   88491:     Btree *pBt = pDb->pBt;
                   88492:     assert( pBt!=0 );
                   88493:     if( !zRight ){
                   88494:       int size = ALWAYS(pBt) ? sqlite3BtreeGetPageSize(pBt) : 0;
                   88495:       returnSingleInt(pParse, "page_size", size);
                   88496:     }else{
                   88497:       /* Malloc may fail when setting the page-size, as there is an internal
                   88498:       ** buffer that the pager module resizes using sqlite3_realloc().
                   88499:       */
                   88500:       db->nextPagesize = sqlite3Atoi(zRight);
                   88501:       if( SQLITE_NOMEM==sqlite3BtreeSetPageSize(pBt, db->nextPagesize, -1, 0) ){
                   88502:         db->mallocFailed = 1;
                   88503:       }
                   88504:     }
                   88505:   }else
                   88506: 
                   88507:   /*
                   88508:   **  PRAGMA [database.]secure_delete
                   88509:   **  PRAGMA [database.]secure_delete=ON/OFF
                   88510:   **
                   88511:   ** The first form reports the current setting for the
                   88512:   ** secure_delete flag.  The second form changes the secure_delete
                   88513:   ** flag setting and reports thenew value.
                   88514:   */
                   88515:   if( sqlite3StrICmp(zLeft,"secure_delete")==0 ){
                   88516:     Btree *pBt = pDb->pBt;
                   88517:     int b = -1;
                   88518:     assert( pBt!=0 );
                   88519:     if( zRight ){
                   88520:       b = sqlite3GetBoolean(zRight);
                   88521:     }
                   88522:     if( pId2->n==0 && b>=0 ){
                   88523:       int ii;
                   88524:       for(ii=0; ii<db->nDb; ii++){
                   88525:         sqlite3BtreeSecureDelete(db->aDb[ii].pBt, b);
                   88526:       }
                   88527:     }
                   88528:     b = sqlite3BtreeSecureDelete(pBt, b);
                   88529:     returnSingleInt(pParse, "secure_delete", b);
                   88530:   }else
                   88531: 
                   88532:   /*
                   88533:   **  PRAGMA [database.]max_page_count
                   88534:   **  PRAGMA [database.]max_page_count=N
                   88535:   **
                   88536:   ** The first form reports the current setting for the
                   88537:   ** maximum number of pages in the database file.  The 
                   88538:   ** second form attempts to change this setting.  Both
                   88539:   ** forms return the current setting.
                   88540:   **
                   88541:   **  PRAGMA [database.]page_count
                   88542:   **
                   88543:   ** Return the number of pages in the specified database.
                   88544:   */
                   88545:   if( sqlite3StrICmp(zLeft,"page_count")==0
                   88546:    || sqlite3StrICmp(zLeft,"max_page_count")==0
                   88547:   ){
                   88548:     int iReg;
                   88549:     if( sqlite3ReadSchema(pParse) ) goto pragma_out;
                   88550:     sqlite3CodeVerifySchema(pParse, iDb);
                   88551:     iReg = ++pParse->nMem;
                   88552:     if( zLeft[0]=='p' ){
                   88553:       sqlite3VdbeAddOp2(v, OP_Pagecount, iDb, iReg);
                   88554:     }else{
                   88555:       sqlite3VdbeAddOp3(v, OP_MaxPgcnt, iDb, iReg, sqlite3Atoi(zRight));
                   88556:     }
                   88557:     sqlite3VdbeAddOp2(v, OP_ResultRow, iReg, 1);
                   88558:     sqlite3VdbeSetNumCols(v, 1);
                   88559:     sqlite3VdbeSetColName(v, 0, COLNAME_NAME, zLeft, SQLITE_TRANSIENT);
                   88560:   }else
                   88561: 
                   88562:   /*
                   88563:   **  PRAGMA [database.]locking_mode
                   88564:   **  PRAGMA [database.]locking_mode = (normal|exclusive)
                   88565:   */
                   88566:   if( sqlite3StrICmp(zLeft,"locking_mode")==0 ){
                   88567:     const char *zRet = "normal";
                   88568:     int eMode = getLockingMode(zRight);
                   88569: 
                   88570:     if( pId2->n==0 && eMode==PAGER_LOCKINGMODE_QUERY ){
                   88571:       /* Simple "PRAGMA locking_mode;" statement. This is a query for
                   88572:       ** the current default locking mode (which may be different to
                   88573:       ** the locking-mode of the main database).
                   88574:       */
                   88575:       eMode = db->dfltLockMode;
                   88576:     }else{
                   88577:       Pager *pPager;
                   88578:       if( pId2->n==0 ){
                   88579:         /* This indicates that no database name was specified as part
                   88580:         ** of the PRAGMA command. In this case the locking-mode must be
                   88581:         ** set on all attached databases, as well as the main db file.
                   88582:         **
                   88583:         ** Also, the sqlite3.dfltLockMode variable is set so that
                   88584:         ** any subsequently attached databases also use the specified
                   88585:         ** locking mode.
                   88586:         */
                   88587:         int ii;
                   88588:         assert(pDb==&db->aDb[0]);
                   88589:         for(ii=2; ii<db->nDb; ii++){
                   88590:           pPager = sqlite3BtreePager(db->aDb[ii].pBt);
                   88591:           sqlite3PagerLockingMode(pPager, eMode);
                   88592:         }
                   88593:         db->dfltLockMode = (u8)eMode;
                   88594:       }
                   88595:       pPager = sqlite3BtreePager(pDb->pBt);
                   88596:       eMode = sqlite3PagerLockingMode(pPager, eMode);
                   88597:     }
                   88598: 
                   88599:     assert(eMode==PAGER_LOCKINGMODE_NORMAL||eMode==PAGER_LOCKINGMODE_EXCLUSIVE);
                   88600:     if( eMode==PAGER_LOCKINGMODE_EXCLUSIVE ){
                   88601:       zRet = "exclusive";
                   88602:     }
                   88603:     sqlite3VdbeSetNumCols(v, 1);
                   88604:     sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "locking_mode", SQLITE_STATIC);
                   88605:     sqlite3VdbeAddOp4(v, OP_String8, 0, 1, 0, zRet, 0);
                   88606:     sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 1);
                   88607:   }else
                   88608: 
                   88609:   /*
                   88610:   **  PRAGMA [database.]journal_mode
                   88611:   **  PRAGMA [database.]journal_mode =
                   88612:   **                      (delete|persist|off|truncate|memory|wal|off)
                   88613:   */
                   88614:   if( sqlite3StrICmp(zLeft,"journal_mode")==0 ){
                   88615:     int eMode;        /* One of the PAGER_JOURNALMODE_XXX symbols */
                   88616:     int ii;           /* Loop counter */
                   88617: 
                   88618:     /* Force the schema to be loaded on all databases.  This cases all
                   88619:     ** database files to be opened and the journal_modes set. */
                   88620:     if( sqlite3ReadSchema(pParse) ){
                   88621:       goto pragma_out;
                   88622:     }
                   88623: 
                   88624:     sqlite3VdbeSetNumCols(v, 1);
                   88625:     sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "journal_mode", SQLITE_STATIC);
                   88626: 
                   88627:     if( zRight==0 ){
                   88628:       /* If there is no "=MODE" part of the pragma, do a query for the
                   88629:       ** current mode */
                   88630:       eMode = PAGER_JOURNALMODE_QUERY;
                   88631:     }else{
                   88632:       const char *zMode;
                   88633:       int n = sqlite3Strlen30(zRight);
                   88634:       for(eMode=0; (zMode = sqlite3JournalModename(eMode))!=0; eMode++){
                   88635:         if( sqlite3StrNICmp(zRight, zMode, n)==0 ) break;
                   88636:       }
                   88637:       if( !zMode ){
                   88638:         /* If the "=MODE" part does not match any known journal mode,
                   88639:         ** then do a query */
                   88640:         eMode = PAGER_JOURNALMODE_QUERY;
                   88641:       }
                   88642:     }
                   88643:     if( eMode==PAGER_JOURNALMODE_QUERY && pId2->n==0 ){
                   88644:       /* Convert "PRAGMA journal_mode" into "PRAGMA main.journal_mode" */
                   88645:       iDb = 0;
                   88646:       pId2->n = 1;
                   88647:     }
                   88648:     for(ii=db->nDb-1; ii>=0; ii--){
                   88649:       if( db->aDb[ii].pBt && (ii==iDb || pId2->n==0) ){
                   88650:         sqlite3VdbeUsesBtree(v, ii);
                   88651:         sqlite3VdbeAddOp3(v, OP_JournalMode, ii, 1, eMode);
                   88652:       }
                   88653:     }
                   88654:     sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 1);
                   88655:   }else
                   88656: 
                   88657:   /*
                   88658:   **  PRAGMA [database.]journal_size_limit
                   88659:   **  PRAGMA [database.]journal_size_limit=N
                   88660:   **
                   88661:   ** Get or set the size limit on rollback journal files.
                   88662:   */
                   88663:   if( sqlite3StrICmp(zLeft,"journal_size_limit")==0 ){
                   88664:     Pager *pPager = sqlite3BtreePager(pDb->pBt);
                   88665:     i64 iLimit = -2;
                   88666:     if( zRight ){
                   88667:       sqlite3Atoi64(zRight, &iLimit, 1000000, SQLITE_UTF8);
                   88668:       if( iLimit<-1 ) iLimit = -1;
                   88669:     }
                   88670:     iLimit = sqlite3PagerJournalSizeLimit(pPager, iLimit);
                   88671:     returnSingleInt(pParse, "journal_size_limit", iLimit);
                   88672:   }else
                   88673: 
                   88674: #endif /* SQLITE_OMIT_PAGER_PRAGMAS */
                   88675: 
                   88676:   /*
                   88677:   **  PRAGMA [database.]auto_vacuum
                   88678:   **  PRAGMA [database.]auto_vacuum=N
                   88679:   **
                   88680:   ** Get or set the value of the database 'auto-vacuum' parameter.
                   88681:   ** The value is one of:  0 NONE 1 FULL 2 INCREMENTAL
                   88682:   */
                   88683: #ifndef SQLITE_OMIT_AUTOVACUUM
                   88684:   if( sqlite3StrICmp(zLeft,"auto_vacuum")==0 ){
                   88685:     Btree *pBt = pDb->pBt;
                   88686:     assert( pBt!=0 );
                   88687:     if( sqlite3ReadSchema(pParse) ){
                   88688:       goto pragma_out;
                   88689:     }
                   88690:     if( !zRight ){
                   88691:       int auto_vacuum;
                   88692:       if( ALWAYS(pBt) ){
                   88693:          auto_vacuum = sqlite3BtreeGetAutoVacuum(pBt);
                   88694:       }else{
                   88695:          auto_vacuum = SQLITE_DEFAULT_AUTOVACUUM;
                   88696:       }
                   88697:       returnSingleInt(pParse, "auto_vacuum", auto_vacuum);
                   88698:     }else{
                   88699:       int eAuto = getAutoVacuum(zRight);
                   88700:       assert( eAuto>=0 && eAuto<=2 );
                   88701:       db->nextAutovac = (u8)eAuto;
                   88702:       if( ALWAYS(eAuto>=0) ){
                   88703:         /* Call SetAutoVacuum() to set initialize the internal auto and
                   88704:         ** incr-vacuum flags. This is required in case this connection
                   88705:         ** creates the database file. It is important that it is created
                   88706:         ** as an auto-vacuum capable db.
                   88707:         */
                   88708:         int rc = sqlite3BtreeSetAutoVacuum(pBt, eAuto);
                   88709:         if( rc==SQLITE_OK && (eAuto==1 || eAuto==2) ){
                   88710:           /* When setting the auto_vacuum mode to either "full" or 
                   88711:           ** "incremental", write the value of meta[6] in the database
                   88712:           ** file. Before writing to meta[6], check that meta[3] indicates
                   88713:           ** that this really is an auto-vacuum capable database.
                   88714:           */
                   88715:           static const VdbeOpList setMeta6[] = {
                   88716:             { OP_Transaction,    0,         1,                 0},    /* 0 */
                   88717:             { OP_ReadCookie,     0,         1,         BTREE_LARGEST_ROOT_PAGE},
                   88718:             { OP_If,             1,         0,                 0},    /* 2 */
                   88719:             { OP_Halt,           SQLITE_OK, OE_Abort,          0},    /* 3 */
                   88720:             { OP_Integer,        0,         1,                 0},    /* 4 */
                   88721:             { OP_SetCookie,      0,         BTREE_INCR_VACUUM, 1},    /* 5 */
                   88722:           };
                   88723:           int iAddr;
                   88724:           iAddr = sqlite3VdbeAddOpList(v, ArraySize(setMeta6), setMeta6);
                   88725:           sqlite3VdbeChangeP1(v, iAddr, iDb);
                   88726:           sqlite3VdbeChangeP1(v, iAddr+1, iDb);
                   88727:           sqlite3VdbeChangeP2(v, iAddr+2, iAddr+4);
                   88728:           sqlite3VdbeChangeP1(v, iAddr+4, eAuto-1);
                   88729:           sqlite3VdbeChangeP1(v, iAddr+5, iDb);
                   88730:           sqlite3VdbeUsesBtree(v, iDb);
                   88731:         }
                   88732:       }
                   88733:     }
                   88734:   }else
                   88735: #endif
                   88736: 
                   88737:   /*
                   88738:   **  PRAGMA [database.]incremental_vacuum(N)
                   88739:   **
                   88740:   ** Do N steps of incremental vacuuming on a database.
                   88741:   */
                   88742: #ifndef SQLITE_OMIT_AUTOVACUUM
                   88743:   if( sqlite3StrICmp(zLeft,"incremental_vacuum")==0 ){
                   88744:     int iLimit, addr;
                   88745:     if( sqlite3ReadSchema(pParse) ){
                   88746:       goto pragma_out;
                   88747:     }
                   88748:     if( zRight==0 || !sqlite3GetInt32(zRight, &iLimit) || iLimit<=0 ){
                   88749:       iLimit = 0x7fffffff;
                   88750:     }
                   88751:     sqlite3BeginWriteOperation(pParse, 0, iDb);
                   88752:     sqlite3VdbeAddOp2(v, OP_Integer, iLimit, 1);
                   88753:     addr = sqlite3VdbeAddOp1(v, OP_IncrVacuum, iDb);
                   88754:     sqlite3VdbeAddOp1(v, OP_ResultRow, 1);
                   88755:     sqlite3VdbeAddOp2(v, OP_AddImm, 1, -1);
                   88756:     sqlite3VdbeAddOp2(v, OP_IfPos, 1, addr);
                   88757:     sqlite3VdbeJumpHere(v, addr);
                   88758:   }else
                   88759: #endif
                   88760: 
                   88761: #ifndef SQLITE_OMIT_PAGER_PRAGMAS
                   88762:   /*
                   88763:   **  PRAGMA [database.]cache_size
                   88764:   **  PRAGMA [database.]cache_size=N
                   88765:   **
                   88766:   ** The first form reports the current local setting for the
                   88767:   ** page cache size.  The local setting can be different from
                   88768:   ** the persistent cache size value that is stored in the database
                   88769:   ** file itself.  The value returned is the maximum number of
                   88770:   ** pages in the page cache.  The second form sets the local
                   88771:   ** page cache size value.  It does not change the persistent
                   88772:   ** cache size stored on the disk so the cache size will revert
                   88773:   ** to its default value when the database is closed and reopened.
                   88774:   ** N should be a positive integer.
                   88775:   */
                   88776:   if( sqlite3StrICmp(zLeft,"cache_size")==0 ){
                   88777:     if( sqlite3ReadSchema(pParse) ) goto pragma_out;
                   88778:     assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
                   88779:     if( !zRight ){
                   88780:       returnSingleInt(pParse, "cache_size", pDb->pSchema->cache_size);
                   88781:     }else{
                   88782:       int size = sqlite3AbsInt32(sqlite3Atoi(zRight));
                   88783:       pDb->pSchema->cache_size = size;
                   88784:       sqlite3BtreeSetCacheSize(pDb->pBt, pDb->pSchema->cache_size);
                   88785:     }
                   88786:   }else
                   88787: 
                   88788:   /*
                   88789:   **   PRAGMA temp_store
                   88790:   **   PRAGMA temp_store = "default"|"memory"|"file"
                   88791:   **
                   88792:   ** Return or set the local value of the temp_store flag.  Changing
                   88793:   ** the local value does not make changes to the disk file and the default
                   88794:   ** value will be restored the next time the database is opened.
                   88795:   **
                   88796:   ** Note that it is possible for the library compile-time options to
                   88797:   ** override this setting
                   88798:   */
                   88799:   if( sqlite3StrICmp(zLeft, "temp_store")==0 ){
                   88800:     if( !zRight ){
                   88801:       returnSingleInt(pParse, "temp_store", db->temp_store);
                   88802:     }else{
                   88803:       changeTempStorage(pParse, zRight);
                   88804:     }
                   88805:   }else
                   88806: 
                   88807:   /*
                   88808:   **   PRAGMA temp_store_directory
                   88809:   **   PRAGMA temp_store_directory = ""|"directory_name"
                   88810:   **
                   88811:   ** Return or set the local value of the temp_store_directory flag.  Changing
                   88812:   ** the value sets a specific directory to be used for temporary files.
                   88813:   ** Setting to a null string reverts to the default temporary directory search.
                   88814:   ** If temporary directory is changed, then invalidateTempStorage.
                   88815:   **
                   88816:   */
                   88817:   if( sqlite3StrICmp(zLeft, "temp_store_directory")==0 ){
                   88818:     if( !zRight ){
                   88819:       if( sqlite3_temp_directory ){
                   88820:         sqlite3VdbeSetNumCols(v, 1);
                   88821:         sqlite3VdbeSetColName(v, 0, COLNAME_NAME, 
                   88822:             "temp_store_directory", SQLITE_STATIC);
                   88823:         sqlite3VdbeAddOp4(v, OP_String8, 0, 1, 0, sqlite3_temp_directory, 0);
                   88824:         sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 1);
                   88825:       }
                   88826:     }else{
                   88827: #ifndef SQLITE_OMIT_WSD
                   88828:       if( zRight[0] ){
                   88829:         int rc;
                   88830:         int res;
                   88831:         rc = sqlite3OsAccess(db->pVfs, zRight, SQLITE_ACCESS_READWRITE, &res);
                   88832:         if( rc!=SQLITE_OK || res==0 ){
                   88833:           sqlite3ErrorMsg(pParse, "not a writable directory");
                   88834:           goto pragma_out;
                   88835:         }
                   88836:       }
                   88837:       if( SQLITE_TEMP_STORE==0
                   88838:        || (SQLITE_TEMP_STORE==1 && db->temp_store<=1)
                   88839:        || (SQLITE_TEMP_STORE==2 && db->temp_store==1)
                   88840:       ){
                   88841:         invalidateTempStorage(pParse);
                   88842:       }
                   88843:       sqlite3_free(sqlite3_temp_directory);
                   88844:       if( zRight[0] ){
                   88845:         sqlite3_temp_directory = sqlite3_mprintf("%s", zRight);
                   88846:       }else{
                   88847:         sqlite3_temp_directory = 0;
                   88848:       }
                   88849: #endif /* SQLITE_OMIT_WSD */
                   88850:     }
                   88851:   }else
                   88852: 
                   88853: #if !defined(SQLITE_ENABLE_LOCKING_STYLE)
                   88854: #  if defined(__APPLE__)
                   88855: #    define SQLITE_ENABLE_LOCKING_STYLE 1
                   88856: #  else
                   88857: #    define SQLITE_ENABLE_LOCKING_STYLE 0
                   88858: #  endif
                   88859: #endif
                   88860: #if SQLITE_ENABLE_LOCKING_STYLE
                   88861:   /*
                   88862:    **   PRAGMA [database.]lock_proxy_file
                   88863:    **   PRAGMA [database.]lock_proxy_file = ":auto:"|"lock_file_path"
                   88864:    **
                   88865:    ** Return or set the value of the lock_proxy_file flag.  Changing
                   88866:    ** the value sets a specific file to be used for database access locks.
                   88867:    **
                   88868:    */
                   88869:   if( sqlite3StrICmp(zLeft, "lock_proxy_file")==0 ){
                   88870:     if( !zRight ){
                   88871:       Pager *pPager = sqlite3BtreePager(pDb->pBt);
                   88872:       char *proxy_file_path = NULL;
                   88873:       sqlite3_file *pFile = sqlite3PagerFile(pPager);
                   88874:       sqlite3OsFileControl(pFile, SQLITE_GET_LOCKPROXYFILE, 
                   88875:                            &proxy_file_path);
                   88876:       
                   88877:       if( proxy_file_path ){
                   88878:         sqlite3VdbeSetNumCols(v, 1);
                   88879:         sqlite3VdbeSetColName(v, 0, COLNAME_NAME, 
                   88880:                               "lock_proxy_file", SQLITE_STATIC);
                   88881:         sqlite3VdbeAddOp4(v, OP_String8, 0, 1, 0, proxy_file_path, 0);
                   88882:         sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 1);
                   88883:       }
                   88884:     }else{
                   88885:       Pager *pPager = sqlite3BtreePager(pDb->pBt);
                   88886:       sqlite3_file *pFile = sqlite3PagerFile(pPager);
                   88887:       int res;
                   88888:       if( zRight[0] ){
                   88889:         res=sqlite3OsFileControl(pFile, SQLITE_SET_LOCKPROXYFILE, 
                   88890:                                      zRight);
                   88891:       } else {
                   88892:         res=sqlite3OsFileControl(pFile, SQLITE_SET_LOCKPROXYFILE, 
                   88893:                                      NULL);
                   88894:       }
                   88895:       if( res!=SQLITE_OK ){
                   88896:         sqlite3ErrorMsg(pParse, "failed to set lock proxy file");
                   88897:         goto pragma_out;
                   88898:       }
                   88899:     }
                   88900:   }else
                   88901: #endif /* SQLITE_ENABLE_LOCKING_STYLE */      
                   88902:     
                   88903:   /*
                   88904:   **   PRAGMA [database.]synchronous
                   88905:   **   PRAGMA [database.]synchronous=OFF|ON|NORMAL|FULL
                   88906:   **
                   88907:   ** Return or set the local value of the synchronous flag.  Changing
                   88908:   ** the local value does not make changes to the disk file and the
                   88909:   ** default value will be restored the next time the database is
                   88910:   ** opened.
                   88911:   */
                   88912:   if( sqlite3StrICmp(zLeft,"synchronous")==0 ){
                   88913:     if( sqlite3ReadSchema(pParse) ) goto pragma_out;
                   88914:     if( !zRight ){
                   88915:       returnSingleInt(pParse, "synchronous", pDb->safety_level-1);
                   88916:     }else{
                   88917:       if( !db->autoCommit ){
                   88918:         sqlite3ErrorMsg(pParse, 
                   88919:             "Safety level may not be changed inside a transaction");
                   88920:       }else{
                   88921:         pDb->safety_level = getSafetyLevel(zRight)+1;
                   88922:       }
                   88923:     }
                   88924:   }else
                   88925: #endif /* SQLITE_OMIT_PAGER_PRAGMAS */
                   88926: 
                   88927: #ifndef SQLITE_OMIT_FLAG_PRAGMAS
                   88928:   if( flagPragma(pParse, zLeft, zRight) ){
                   88929:     /* The flagPragma() subroutine also generates any necessary code
                   88930:     ** there is nothing more to do here */
                   88931:   }else
                   88932: #endif /* SQLITE_OMIT_FLAG_PRAGMAS */
                   88933: 
                   88934: #ifndef SQLITE_OMIT_SCHEMA_PRAGMAS
                   88935:   /*
                   88936:   **   PRAGMA table_info(<table>)
                   88937:   **
                   88938:   ** Return a single row for each column of the named table. The columns of
                   88939:   ** the returned data set are:
                   88940:   **
                   88941:   ** cid:        Column id (numbered from left to right, starting at 0)
                   88942:   ** name:       Column name
                   88943:   ** type:       Column declaration type.
                   88944:   ** notnull:    True if 'NOT NULL' is part of column declaration
                   88945:   ** dflt_value: The default value for the column, if any.
                   88946:   */
                   88947:   if( sqlite3StrICmp(zLeft, "table_info")==0 && zRight ){
                   88948:     Table *pTab;
                   88949:     if( sqlite3ReadSchema(pParse) ) goto pragma_out;
                   88950:     pTab = sqlite3FindTable(db, zRight, zDb);
                   88951:     if( pTab ){
                   88952:       int i;
                   88953:       int nHidden = 0;
                   88954:       Column *pCol;
                   88955:       sqlite3VdbeSetNumCols(v, 6);
                   88956:       pParse->nMem = 6;
                   88957:       sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "cid", SQLITE_STATIC);
                   88958:       sqlite3VdbeSetColName(v, 1, COLNAME_NAME, "name", SQLITE_STATIC);
                   88959:       sqlite3VdbeSetColName(v, 2, COLNAME_NAME, "type", SQLITE_STATIC);
                   88960:       sqlite3VdbeSetColName(v, 3, COLNAME_NAME, "notnull", SQLITE_STATIC);
                   88961:       sqlite3VdbeSetColName(v, 4, COLNAME_NAME, "dflt_value", SQLITE_STATIC);
                   88962:       sqlite3VdbeSetColName(v, 5, COLNAME_NAME, "pk", SQLITE_STATIC);
                   88963:       sqlite3ViewGetColumnNames(pParse, pTab);
                   88964:       for(i=0, pCol=pTab->aCol; i<pTab->nCol; i++, pCol++){
                   88965:         if( IsHiddenColumn(pCol) ){
                   88966:           nHidden++;
                   88967:           continue;
                   88968:         }
                   88969:         sqlite3VdbeAddOp2(v, OP_Integer, i-nHidden, 1);
                   88970:         sqlite3VdbeAddOp4(v, OP_String8, 0, 2, 0, pCol->zName, 0);
                   88971:         sqlite3VdbeAddOp4(v, OP_String8, 0, 3, 0,
                   88972:            pCol->zType ? pCol->zType : "", 0);
                   88973:         sqlite3VdbeAddOp2(v, OP_Integer, (pCol->notNull ? 1 : 0), 4);
                   88974:         if( pCol->zDflt ){
                   88975:           sqlite3VdbeAddOp4(v, OP_String8, 0, 5, 0, (char*)pCol->zDflt, 0);
                   88976:         }else{
                   88977:           sqlite3VdbeAddOp2(v, OP_Null, 0, 5);
                   88978:         }
                   88979:         sqlite3VdbeAddOp2(v, OP_Integer, pCol->isPrimKey, 6);
                   88980:         sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 6);
                   88981:       }
                   88982:     }
                   88983:   }else
                   88984: 
                   88985:   if( sqlite3StrICmp(zLeft, "index_info")==0 && zRight ){
                   88986:     Index *pIdx;
                   88987:     Table *pTab;
                   88988:     if( sqlite3ReadSchema(pParse) ) goto pragma_out;
                   88989:     pIdx = sqlite3FindIndex(db, zRight, zDb);
                   88990:     if( pIdx ){
                   88991:       int i;
                   88992:       pTab = pIdx->pTable;
                   88993:       sqlite3VdbeSetNumCols(v, 3);
                   88994:       pParse->nMem = 3;
                   88995:       sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "seqno", SQLITE_STATIC);
                   88996:       sqlite3VdbeSetColName(v, 1, COLNAME_NAME, "cid", SQLITE_STATIC);
                   88997:       sqlite3VdbeSetColName(v, 2, COLNAME_NAME, "name", SQLITE_STATIC);
                   88998:       for(i=0; i<pIdx->nColumn; i++){
                   88999:         int cnum = pIdx->aiColumn[i];
                   89000:         sqlite3VdbeAddOp2(v, OP_Integer, i, 1);
                   89001:         sqlite3VdbeAddOp2(v, OP_Integer, cnum, 2);
                   89002:         assert( pTab->nCol>cnum );
                   89003:         sqlite3VdbeAddOp4(v, OP_String8, 0, 3, 0, pTab->aCol[cnum].zName, 0);
                   89004:         sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 3);
                   89005:       }
                   89006:     }
                   89007:   }else
                   89008: 
                   89009:   if( sqlite3StrICmp(zLeft, "index_list")==0 && zRight ){
                   89010:     Index *pIdx;
                   89011:     Table *pTab;
                   89012:     if( sqlite3ReadSchema(pParse) ) goto pragma_out;
                   89013:     pTab = sqlite3FindTable(db, zRight, zDb);
                   89014:     if( pTab ){
                   89015:       v = sqlite3GetVdbe(pParse);
                   89016:       pIdx = pTab->pIndex;
                   89017:       if( pIdx ){
                   89018:         int i = 0; 
                   89019:         sqlite3VdbeSetNumCols(v, 3);
                   89020:         pParse->nMem = 3;
                   89021:         sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "seq", SQLITE_STATIC);
                   89022:         sqlite3VdbeSetColName(v, 1, COLNAME_NAME, "name", SQLITE_STATIC);
                   89023:         sqlite3VdbeSetColName(v, 2, COLNAME_NAME, "unique", SQLITE_STATIC);
                   89024:         while(pIdx){
                   89025:           sqlite3VdbeAddOp2(v, OP_Integer, i, 1);
                   89026:           sqlite3VdbeAddOp4(v, OP_String8, 0, 2, 0, pIdx->zName, 0);
                   89027:           sqlite3VdbeAddOp2(v, OP_Integer, pIdx->onError!=OE_None, 3);
                   89028:           sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 3);
                   89029:           ++i;
                   89030:           pIdx = pIdx->pNext;
                   89031:         }
                   89032:       }
                   89033:     }
                   89034:   }else
                   89035: 
                   89036:   if( sqlite3StrICmp(zLeft, "database_list")==0 ){
                   89037:     int i;
                   89038:     if( sqlite3ReadSchema(pParse) ) goto pragma_out;
                   89039:     sqlite3VdbeSetNumCols(v, 3);
                   89040:     pParse->nMem = 3;
                   89041:     sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "seq", SQLITE_STATIC);
                   89042:     sqlite3VdbeSetColName(v, 1, COLNAME_NAME, "name", SQLITE_STATIC);
                   89043:     sqlite3VdbeSetColName(v, 2, COLNAME_NAME, "file", SQLITE_STATIC);
                   89044:     for(i=0; i<db->nDb; i++){
                   89045:       if( db->aDb[i].pBt==0 ) continue;
                   89046:       assert( db->aDb[i].zName!=0 );
                   89047:       sqlite3VdbeAddOp2(v, OP_Integer, i, 1);
                   89048:       sqlite3VdbeAddOp4(v, OP_String8, 0, 2, 0, db->aDb[i].zName, 0);
                   89049:       sqlite3VdbeAddOp4(v, OP_String8, 0, 3, 0,
                   89050:            sqlite3BtreeGetFilename(db->aDb[i].pBt), 0);
                   89051:       sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 3);
                   89052:     }
                   89053:   }else
                   89054: 
                   89055:   if( sqlite3StrICmp(zLeft, "collation_list")==0 ){
                   89056:     int i = 0;
                   89057:     HashElem *p;
                   89058:     sqlite3VdbeSetNumCols(v, 2);
                   89059:     pParse->nMem = 2;
                   89060:     sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "seq", SQLITE_STATIC);
                   89061:     sqlite3VdbeSetColName(v, 1, COLNAME_NAME, "name", SQLITE_STATIC);
                   89062:     for(p=sqliteHashFirst(&db->aCollSeq); p; p=sqliteHashNext(p)){
                   89063:       CollSeq *pColl = (CollSeq *)sqliteHashData(p);
                   89064:       sqlite3VdbeAddOp2(v, OP_Integer, i++, 1);
                   89065:       sqlite3VdbeAddOp4(v, OP_String8, 0, 2, 0, pColl->zName, 0);
                   89066:       sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 2);
                   89067:     }
                   89068:   }else
                   89069: #endif /* SQLITE_OMIT_SCHEMA_PRAGMAS */
                   89070: 
                   89071: #ifndef SQLITE_OMIT_FOREIGN_KEY
                   89072:   if( sqlite3StrICmp(zLeft, "foreign_key_list")==0 && zRight ){
                   89073:     FKey *pFK;
                   89074:     Table *pTab;
                   89075:     if( sqlite3ReadSchema(pParse) ) goto pragma_out;
                   89076:     pTab = sqlite3FindTable(db, zRight, zDb);
                   89077:     if( pTab ){
                   89078:       v = sqlite3GetVdbe(pParse);
                   89079:       pFK = pTab->pFKey;
                   89080:       if( pFK ){
                   89081:         int i = 0; 
                   89082:         sqlite3VdbeSetNumCols(v, 8);
                   89083:         pParse->nMem = 8;
                   89084:         sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "id", SQLITE_STATIC);
                   89085:         sqlite3VdbeSetColName(v, 1, COLNAME_NAME, "seq", SQLITE_STATIC);
                   89086:         sqlite3VdbeSetColName(v, 2, COLNAME_NAME, "table", SQLITE_STATIC);
                   89087:         sqlite3VdbeSetColName(v, 3, COLNAME_NAME, "from", SQLITE_STATIC);
                   89088:         sqlite3VdbeSetColName(v, 4, COLNAME_NAME, "to", SQLITE_STATIC);
                   89089:         sqlite3VdbeSetColName(v, 5, COLNAME_NAME, "on_update", SQLITE_STATIC);
                   89090:         sqlite3VdbeSetColName(v, 6, COLNAME_NAME, "on_delete", SQLITE_STATIC);
                   89091:         sqlite3VdbeSetColName(v, 7, COLNAME_NAME, "match", SQLITE_STATIC);
                   89092:         while(pFK){
                   89093:           int j;
                   89094:           for(j=0; j<pFK->nCol; j++){
                   89095:             char *zCol = pFK->aCol[j].zCol;
                   89096:             char *zOnDelete = (char *)actionName(pFK->aAction[0]);
                   89097:             char *zOnUpdate = (char *)actionName(pFK->aAction[1]);
                   89098:             sqlite3VdbeAddOp2(v, OP_Integer, i, 1);
                   89099:             sqlite3VdbeAddOp2(v, OP_Integer, j, 2);
                   89100:             sqlite3VdbeAddOp4(v, OP_String8, 0, 3, 0, pFK->zTo, 0);
                   89101:             sqlite3VdbeAddOp4(v, OP_String8, 0, 4, 0,
                   89102:                               pTab->aCol[pFK->aCol[j].iFrom].zName, 0);
                   89103:             sqlite3VdbeAddOp4(v, zCol ? OP_String8 : OP_Null, 0, 5, 0, zCol, 0);
                   89104:             sqlite3VdbeAddOp4(v, OP_String8, 0, 6, 0, zOnUpdate, 0);
                   89105:             sqlite3VdbeAddOp4(v, OP_String8, 0, 7, 0, zOnDelete, 0);
                   89106:             sqlite3VdbeAddOp4(v, OP_String8, 0, 8, 0, "NONE", 0);
                   89107:             sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 8);
                   89108:           }
                   89109:           ++i;
                   89110:           pFK = pFK->pNextFrom;
                   89111:         }
                   89112:       }
                   89113:     }
                   89114:   }else
                   89115: #endif /* !defined(SQLITE_OMIT_FOREIGN_KEY) */
                   89116: 
                   89117: #ifndef NDEBUG
                   89118:   if( sqlite3StrICmp(zLeft, "parser_trace")==0 ){
                   89119:     if( zRight ){
                   89120:       if( sqlite3GetBoolean(zRight) ){
                   89121:         sqlite3ParserTrace(stderr, "parser: ");
                   89122:       }else{
                   89123:         sqlite3ParserTrace(0, 0);
                   89124:       }
                   89125:     }
                   89126:   }else
                   89127: #endif
                   89128: 
                   89129:   /* Reinstall the LIKE and GLOB functions.  The variant of LIKE
                   89130:   ** used will be case sensitive or not depending on the RHS.
                   89131:   */
                   89132:   if( sqlite3StrICmp(zLeft, "case_sensitive_like")==0 ){
                   89133:     if( zRight ){
                   89134:       sqlite3RegisterLikeFunctions(db, sqlite3GetBoolean(zRight));
                   89135:     }
                   89136:   }else
                   89137: 
                   89138: #ifndef SQLITE_INTEGRITY_CHECK_ERROR_MAX
                   89139: # define SQLITE_INTEGRITY_CHECK_ERROR_MAX 100
                   89140: #endif
                   89141: 
                   89142: #ifndef SQLITE_OMIT_INTEGRITY_CHECK
                   89143:   /* Pragma "quick_check" is an experimental reduced version of 
                   89144:   ** integrity_check designed to detect most database corruption
                   89145:   ** without most of the overhead of a full integrity-check.
                   89146:   */
                   89147:   if( sqlite3StrICmp(zLeft, "integrity_check")==0
                   89148:    || sqlite3StrICmp(zLeft, "quick_check")==0 
                   89149:   ){
                   89150:     int i, j, addr, mxErr;
                   89151: 
                   89152:     /* Code that appears at the end of the integrity check.  If no error
                   89153:     ** messages have been generated, output OK.  Otherwise output the
                   89154:     ** error message
                   89155:     */
                   89156:     static const VdbeOpList endCode[] = {
                   89157:       { OP_AddImm,      1, 0,        0},    /* 0 */
                   89158:       { OP_IfNeg,       1, 0,        0},    /* 1 */
                   89159:       { OP_String8,     0, 3,        0},    /* 2 */
                   89160:       { OP_ResultRow,   3, 1,        0},
                   89161:     };
                   89162: 
                   89163:     int isQuick = (zLeft[0]=='q');
                   89164: 
                   89165:     /* Initialize the VDBE program */
                   89166:     if( sqlite3ReadSchema(pParse) ) goto pragma_out;
                   89167:     pParse->nMem = 6;
                   89168:     sqlite3VdbeSetNumCols(v, 1);
                   89169:     sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "integrity_check", SQLITE_STATIC);
                   89170: 
                   89171:     /* Set the maximum error count */
                   89172:     mxErr = SQLITE_INTEGRITY_CHECK_ERROR_MAX;
                   89173:     if( zRight ){
                   89174:       sqlite3GetInt32(zRight, &mxErr);
                   89175:       if( mxErr<=0 ){
                   89176:         mxErr = SQLITE_INTEGRITY_CHECK_ERROR_MAX;
                   89177:       }
                   89178:     }
                   89179:     sqlite3VdbeAddOp2(v, OP_Integer, mxErr, 1);  /* reg[1] holds errors left */
                   89180: 
                   89181:     /* Do an integrity check on each database file */
                   89182:     for(i=0; i<db->nDb; i++){
                   89183:       HashElem *x;
                   89184:       Hash *pTbls;
                   89185:       int cnt = 0;
                   89186: 
                   89187:       if( OMIT_TEMPDB && i==1 ) continue;
                   89188: 
                   89189:       sqlite3CodeVerifySchema(pParse, i);
                   89190:       addr = sqlite3VdbeAddOp1(v, OP_IfPos, 1); /* Halt if out of errors */
                   89191:       sqlite3VdbeAddOp2(v, OP_Halt, 0, 0);
                   89192:       sqlite3VdbeJumpHere(v, addr);
                   89193: 
                   89194:       /* Do an integrity check of the B-Tree
                   89195:       **
                   89196:       ** Begin by filling registers 2, 3, ... with the root pages numbers
                   89197:       ** for all tables and indices in the database.
                   89198:       */
                   89199:       assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
                   89200:       pTbls = &db->aDb[i].pSchema->tblHash;
                   89201:       for(x=sqliteHashFirst(pTbls); x; x=sqliteHashNext(x)){
                   89202:         Table *pTab = sqliteHashData(x);
                   89203:         Index *pIdx;
                   89204:         sqlite3VdbeAddOp2(v, OP_Integer, pTab->tnum, 2+cnt);
                   89205:         cnt++;
                   89206:         for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
                   89207:           sqlite3VdbeAddOp2(v, OP_Integer, pIdx->tnum, 2+cnt);
                   89208:           cnt++;
                   89209:         }
                   89210:       }
                   89211: 
                   89212:       /* Make sure sufficient number of registers have been allocated */
                   89213:       if( pParse->nMem < cnt+4 ){
                   89214:         pParse->nMem = cnt+4;
                   89215:       }
                   89216: 
                   89217:       /* Do the b-tree integrity checks */
                   89218:       sqlite3VdbeAddOp3(v, OP_IntegrityCk, 2, cnt, 1);
                   89219:       sqlite3VdbeChangeP5(v, (u8)i);
                   89220:       addr = sqlite3VdbeAddOp1(v, OP_IsNull, 2);
                   89221:       sqlite3VdbeAddOp4(v, OP_String8, 0, 3, 0,
                   89222:          sqlite3MPrintf(db, "*** in database %s ***\n", db->aDb[i].zName),
                   89223:          P4_DYNAMIC);
                   89224:       sqlite3VdbeAddOp3(v, OP_Move, 2, 4, 1);
                   89225:       sqlite3VdbeAddOp3(v, OP_Concat, 4, 3, 2);
                   89226:       sqlite3VdbeAddOp2(v, OP_ResultRow, 2, 1);
                   89227:       sqlite3VdbeJumpHere(v, addr);
                   89228: 
                   89229:       /* Make sure all the indices are constructed correctly.
                   89230:       */
                   89231:       for(x=sqliteHashFirst(pTbls); x && !isQuick; x=sqliteHashNext(x)){
                   89232:         Table *pTab = sqliteHashData(x);
                   89233:         Index *pIdx;
                   89234:         int loopTop;
                   89235: 
                   89236:         if( pTab->pIndex==0 ) continue;
                   89237:         addr = sqlite3VdbeAddOp1(v, OP_IfPos, 1);  /* Stop if out of errors */
                   89238:         sqlite3VdbeAddOp2(v, OP_Halt, 0, 0);
                   89239:         sqlite3VdbeJumpHere(v, addr);
                   89240:         sqlite3OpenTableAndIndices(pParse, pTab, 1, OP_OpenRead);
                   89241:         sqlite3VdbeAddOp2(v, OP_Integer, 0, 2);  /* reg(2) will count entries */
                   89242:         loopTop = sqlite3VdbeAddOp2(v, OP_Rewind, 1, 0);
                   89243:         sqlite3VdbeAddOp2(v, OP_AddImm, 2, 1);   /* increment entry count */
                   89244:         for(j=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, j++){
                   89245:           int jmp2;
                   89246:           int r1;
                   89247:           static const VdbeOpList idxErr[] = {
                   89248:             { OP_AddImm,      1, -1,  0},
                   89249:             { OP_String8,     0,  3,  0},    /* 1 */
                   89250:             { OP_Rowid,       1,  4,  0},
                   89251:             { OP_String8,     0,  5,  0},    /* 3 */
                   89252:             { OP_String8,     0,  6,  0},    /* 4 */
                   89253:             { OP_Concat,      4,  3,  3},
                   89254:             { OP_Concat,      5,  3,  3},
                   89255:             { OP_Concat,      6,  3,  3},
                   89256:             { OP_ResultRow,   3,  1,  0},
                   89257:             { OP_IfPos,       1,  0,  0},    /* 9 */
                   89258:             { OP_Halt,        0,  0,  0},
                   89259:           };
                   89260:           r1 = sqlite3GenerateIndexKey(pParse, pIdx, 1, 3, 0);
                   89261:           jmp2 = sqlite3VdbeAddOp4Int(v, OP_Found, j+2, 0, r1, pIdx->nColumn+1);
                   89262:           addr = sqlite3VdbeAddOpList(v, ArraySize(idxErr), idxErr);
                   89263:           sqlite3VdbeChangeP4(v, addr+1, "rowid ", P4_STATIC);
                   89264:           sqlite3VdbeChangeP4(v, addr+3, " missing from index ", P4_STATIC);
                   89265:           sqlite3VdbeChangeP4(v, addr+4, pIdx->zName, P4_TRANSIENT);
                   89266:           sqlite3VdbeJumpHere(v, addr+9);
                   89267:           sqlite3VdbeJumpHere(v, jmp2);
                   89268:         }
                   89269:         sqlite3VdbeAddOp2(v, OP_Next, 1, loopTop+1);
                   89270:         sqlite3VdbeJumpHere(v, loopTop);
                   89271:         for(j=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, j++){
                   89272:           static const VdbeOpList cntIdx[] = {
                   89273:              { OP_Integer,      0,  3,  0},
                   89274:              { OP_Rewind,       0,  0,  0},  /* 1 */
                   89275:              { OP_AddImm,       3,  1,  0},
                   89276:              { OP_Next,         0,  0,  0},  /* 3 */
                   89277:              { OP_Eq,           2,  0,  3},  /* 4 */
                   89278:              { OP_AddImm,       1, -1,  0},
                   89279:              { OP_String8,      0,  2,  0},  /* 6 */
                   89280:              { OP_String8,      0,  3,  0},  /* 7 */
                   89281:              { OP_Concat,       3,  2,  2},
                   89282:              { OP_ResultRow,    2,  1,  0},
                   89283:           };
                   89284:           addr = sqlite3VdbeAddOp1(v, OP_IfPos, 1);
                   89285:           sqlite3VdbeAddOp2(v, OP_Halt, 0, 0);
                   89286:           sqlite3VdbeJumpHere(v, addr);
                   89287:           addr = sqlite3VdbeAddOpList(v, ArraySize(cntIdx), cntIdx);
                   89288:           sqlite3VdbeChangeP1(v, addr+1, j+2);
                   89289:           sqlite3VdbeChangeP2(v, addr+1, addr+4);
                   89290:           sqlite3VdbeChangeP1(v, addr+3, j+2);
                   89291:           sqlite3VdbeChangeP2(v, addr+3, addr+2);
                   89292:           sqlite3VdbeJumpHere(v, addr+4);
                   89293:           sqlite3VdbeChangeP4(v, addr+6, 
                   89294:                      "wrong # of entries in index ", P4_STATIC);
                   89295:           sqlite3VdbeChangeP4(v, addr+7, pIdx->zName, P4_TRANSIENT);
                   89296:         }
                   89297:       } 
                   89298:     }
                   89299:     addr = sqlite3VdbeAddOpList(v, ArraySize(endCode), endCode);
                   89300:     sqlite3VdbeChangeP2(v, addr, -mxErr);
                   89301:     sqlite3VdbeJumpHere(v, addr+1);
                   89302:     sqlite3VdbeChangeP4(v, addr+2, "ok", P4_STATIC);
                   89303:   }else
                   89304: #endif /* SQLITE_OMIT_INTEGRITY_CHECK */
                   89305: 
                   89306: #ifndef SQLITE_OMIT_UTF16
                   89307:   /*
                   89308:   **   PRAGMA encoding
                   89309:   **   PRAGMA encoding = "utf-8"|"utf-16"|"utf-16le"|"utf-16be"
                   89310:   **
                   89311:   ** In its first form, this pragma returns the encoding of the main
                   89312:   ** database. If the database is not initialized, it is initialized now.
                   89313:   **
                   89314:   ** The second form of this pragma is a no-op if the main database file
                   89315:   ** has not already been initialized. In this case it sets the default
                   89316:   ** encoding that will be used for the main database file if a new file
                   89317:   ** is created. If an existing main database file is opened, then the
                   89318:   ** default text encoding for the existing database is used.
                   89319:   ** 
                   89320:   ** In all cases new databases created using the ATTACH command are
                   89321:   ** created to use the same default text encoding as the main database. If
                   89322:   ** the main database has not been initialized and/or created when ATTACH
                   89323:   ** is executed, this is done before the ATTACH operation.
                   89324:   **
                   89325:   ** In the second form this pragma sets the text encoding to be used in
                   89326:   ** new database files created using this database handle. It is only
                   89327:   ** useful if invoked immediately after the main database i
                   89328:   */
                   89329:   if( sqlite3StrICmp(zLeft, "encoding")==0 ){
                   89330:     static const struct EncName {
                   89331:       char *zName;
                   89332:       u8 enc;
                   89333:     } encnames[] = {
                   89334:       { "UTF8",     SQLITE_UTF8        },
                   89335:       { "UTF-8",    SQLITE_UTF8        },  /* Must be element [1] */
                   89336:       { "UTF-16le", SQLITE_UTF16LE     },  /* Must be element [2] */
                   89337:       { "UTF-16be", SQLITE_UTF16BE     },  /* Must be element [3] */
                   89338:       { "UTF16le",  SQLITE_UTF16LE     },
                   89339:       { "UTF16be",  SQLITE_UTF16BE     },
                   89340:       { "UTF-16",   0                  }, /* SQLITE_UTF16NATIVE */
                   89341:       { "UTF16",    0                  }, /* SQLITE_UTF16NATIVE */
                   89342:       { 0, 0 }
                   89343:     };
                   89344:     const struct EncName *pEnc;
                   89345:     if( !zRight ){    /* "PRAGMA encoding" */
                   89346:       if( sqlite3ReadSchema(pParse) ) goto pragma_out;
                   89347:       sqlite3VdbeSetNumCols(v, 1);
                   89348:       sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "encoding", SQLITE_STATIC);
                   89349:       sqlite3VdbeAddOp2(v, OP_String8, 0, 1);
                   89350:       assert( encnames[SQLITE_UTF8].enc==SQLITE_UTF8 );
                   89351:       assert( encnames[SQLITE_UTF16LE].enc==SQLITE_UTF16LE );
                   89352:       assert( encnames[SQLITE_UTF16BE].enc==SQLITE_UTF16BE );
                   89353:       sqlite3VdbeChangeP4(v, -1, encnames[ENC(pParse->db)].zName, P4_STATIC);
                   89354:       sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 1);
                   89355:     }else{                        /* "PRAGMA encoding = XXX" */
                   89356:       /* Only change the value of sqlite.enc if the database handle is not
                   89357:       ** initialized. If the main database exists, the new sqlite.enc value
                   89358:       ** will be overwritten when the schema is next loaded. If it does not
                   89359:       ** already exists, it will be created to use the new encoding value.
                   89360:       */
                   89361:       if( 
                   89362:         !(DbHasProperty(db, 0, DB_SchemaLoaded)) || 
                   89363:         DbHasProperty(db, 0, DB_Empty) 
                   89364:       ){
                   89365:         for(pEnc=&encnames[0]; pEnc->zName; pEnc++){
                   89366:           if( 0==sqlite3StrICmp(zRight, pEnc->zName) ){
                   89367:             ENC(pParse->db) = pEnc->enc ? pEnc->enc : SQLITE_UTF16NATIVE;
                   89368:             break;
                   89369:           }
                   89370:         }
                   89371:         if( !pEnc->zName ){
                   89372:           sqlite3ErrorMsg(pParse, "unsupported encoding: %s", zRight);
                   89373:         }
                   89374:       }
                   89375:     }
                   89376:   }else
                   89377: #endif /* SQLITE_OMIT_UTF16 */
                   89378: 
                   89379: #ifndef SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS
                   89380:   /*
                   89381:   **   PRAGMA [database.]schema_version
                   89382:   **   PRAGMA [database.]schema_version = <integer>
                   89383:   **
                   89384:   **   PRAGMA [database.]user_version
                   89385:   **   PRAGMA [database.]user_version = <integer>
                   89386:   **
                   89387:   ** The pragma's schema_version and user_version are used to set or get
                   89388:   ** the value of the schema-version and user-version, respectively. Both
                   89389:   ** the schema-version and the user-version are 32-bit signed integers
                   89390:   ** stored in the database header.
                   89391:   **
                   89392:   ** The schema-cookie is usually only manipulated internally by SQLite. It
                   89393:   ** is incremented by SQLite whenever the database schema is modified (by
                   89394:   ** creating or dropping a table or index). The schema version is used by
                   89395:   ** SQLite each time a query is executed to ensure that the internal cache
                   89396:   ** of the schema used when compiling the SQL query matches the schema of
                   89397:   ** the database against which the compiled query is actually executed.
                   89398:   ** Subverting this mechanism by using "PRAGMA schema_version" to modify
                   89399:   ** the schema-version is potentially dangerous and may lead to program
                   89400:   ** crashes or database corruption. Use with caution!
                   89401:   **
                   89402:   ** The user-version is not used internally by SQLite. It may be used by
                   89403:   ** applications for any purpose.
                   89404:   */
                   89405:   if( sqlite3StrICmp(zLeft, "schema_version")==0 
                   89406:    || sqlite3StrICmp(zLeft, "user_version")==0 
                   89407:    || sqlite3StrICmp(zLeft, "freelist_count")==0 
                   89408:   ){
                   89409:     int iCookie;   /* Cookie index. 1 for schema-cookie, 6 for user-cookie. */
                   89410:     sqlite3VdbeUsesBtree(v, iDb);
                   89411:     switch( zLeft[0] ){
                   89412:       case 'f': case 'F':
                   89413:         iCookie = BTREE_FREE_PAGE_COUNT;
                   89414:         break;
                   89415:       case 's': case 'S':
                   89416:         iCookie = BTREE_SCHEMA_VERSION;
                   89417:         break;
                   89418:       default:
                   89419:         iCookie = BTREE_USER_VERSION;
                   89420:         break;
                   89421:     }
                   89422: 
                   89423:     if( zRight && iCookie!=BTREE_FREE_PAGE_COUNT ){
                   89424:       /* Write the specified cookie value */
                   89425:       static const VdbeOpList setCookie[] = {
                   89426:         { OP_Transaction,    0,  1,  0},    /* 0 */
                   89427:         { OP_Integer,        0,  1,  0},    /* 1 */
                   89428:         { OP_SetCookie,      0,  0,  1},    /* 2 */
                   89429:       };
                   89430:       int addr = sqlite3VdbeAddOpList(v, ArraySize(setCookie), setCookie);
                   89431:       sqlite3VdbeChangeP1(v, addr, iDb);
                   89432:       sqlite3VdbeChangeP1(v, addr+1, sqlite3Atoi(zRight));
                   89433:       sqlite3VdbeChangeP1(v, addr+2, iDb);
                   89434:       sqlite3VdbeChangeP2(v, addr+2, iCookie);
                   89435:     }else{
                   89436:       /* Read the specified cookie value */
                   89437:       static const VdbeOpList readCookie[] = {
                   89438:         { OP_Transaction,     0,  0,  0},    /* 0 */
                   89439:         { OP_ReadCookie,      0,  1,  0},    /* 1 */
                   89440:         { OP_ResultRow,       1,  1,  0}
                   89441:       };
                   89442:       int addr = sqlite3VdbeAddOpList(v, ArraySize(readCookie), readCookie);
                   89443:       sqlite3VdbeChangeP1(v, addr, iDb);
                   89444:       sqlite3VdbeChangeP1(v, addr+1, iDb);
                   89445:       sqlite3VdbeChangeP3(v, addr+1, iCookie);
                   89446:       sqlite3VdbeSetNumCols(v, 1);
                   89447:       sqlite3VdbeSetColName(v, 0, COLNAME_NAME, zLeft, SQLITE_TRANSIENT);
                   89448:     }
                   89449:   }else
                   89450: #endif /* SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS */
                   89451: 
                   89452: #ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
                   89453:   /*
                   89454:   **   PRAGMA compile_options
                   89455:   **
                   89456:   ** Return the names of all compile-time options used in this build,
                   89457:   ** one option per row.
                   89458:   */
                   89459:   if( sqlite3StrICmp(zLeft, "compile_options")==0 ){
                   89460:     int i = 0;
                   89461:     const char *zOpt;
                   89462:     sqlite3VdbeSetNumCols(v, 1);
                   89463:     pParse->nMem = 1;
                   89464:     sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "compile_option", SQLITE_STATIC);
                   89465:     while( (zOpt = sqlite3_compileoption_get(i++))!=0 ){
                   89466:       sqlite3VdbeAddOp4(v, OP_String8, 0, 1, 0, zOpt, 0);
                   89467:       sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 1);
                   89468:     }
                   89469:   }else
                   89470: #endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */
                   89471: 
                   89472: #ifndef SQLITE_OMIT_WAL
                   89473:   /*
                   89474:   **   PRAGMA [database.]wal_checkpoint = passive|full|restart
                   89475:   **
                   89476:   ** Checkpoint the database.
                   89477:   */
                   89478:   if( sqlite3StrICmp(zLeft, "wal_checkpoint")==0 ){
                   89479:     int iBt = (pId2->z?iDb:SQLITE_MAX_ATTACHED);
                   89480:     int eMode = SQLITE_CHECKPOINT_PASSIVE;
                   89481:     if( zRight ){
                   89482:       if( sqlite3StrICmp(zRight, "full")==0 ){
                   89483:         eMode = SQLITE_CHECKPOINT_FULL;
                   89484:       }else if( sqlite3StrICmp(zRight, "restart")==0 ){
                   89485:         eMode = SQLITE_CHECKPOINT_RESTART;
                   89486:       }
                   89487:     }
                   89488:     if( sqlite3ReadSchema(pParse) ) goto pragma_out;
                   89489:     sqlite3VdbeSetNumCols(v, 3);
                   89490:     pParse->nMem = 3;
                   89491:     sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "busy", SQLITE_STATIC);
                   89492:     sqlite3VdbeSetColName(v, 1, COLNAME_NAME, "log", SQLITE_STATIC);
                   89493:     sqlite3VdbeSetColName(v, 2, COLNAME_NAME, "checkpointed", SQLITE_STATIC);
                   89494: 
                   89495:     sqlite3VdbeAddOp3(v, OP_Checkpoint, iBt, eMode, 1);
                   89496:     sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 3);
                   89497:   }else
                   89498: 
                   89499:   /*
                   89500:   **   PRAGMA wal_autocheckpoint
                   89501:   **   PRAGMA wal_autocheckpoint = N
                   89502:   **
                   89503:   ** Configure a database connection to automatically checkpoint a database
                   89504:   ** after accumulating N frames in the log. Or query for the current value
                   89505:   ** of N.
                   89506:   */
                   89507:   if( sqlite3StrICmp(zLeft, "wal_autocheckpoint")==0 ){
                   89508:     if( zRight ){
                   89509:       sqlite3_wal_autocheckpoint(db, sqlite3Atoi(zRight));
                   89510:     }
                   89511:     returnSingleInt(pParse, "wal_autocheckpoint", 
                   89512:        db->xWalCallback==sqlite3WalDefaultHook ? 
                   89513:            SQLITE_PTR_TO_INT(db->pWalArg) : 0);
                   89514:   }else
                   89515: #endif
                   89516: 
                   89517: #if defined(SQLITE_DEBUG) || defined(SQLITE_TEST)
                   89518:   /*
                   89519:   ** Report the current state of file logs for all databases
                   89520:   */
                   89521:   if( sqlite3StrICmp(zLeft, "lock_status")==0 ){
                   89522:     static const char *const azLockName[] = {
                   89523:       "unlocked", "shared", "reserved", "pending", "exclusive"
                   89524:     };
                   89525:     int i;
                   89526:     sqlite3VdbeSetNumCols(v, 2);
                   89527:     pParse->nMem = 2;
                   89528:     sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "database", SQLITE_STATIC);
                   89529:     sqlite3VdbeSetColName(v, 1, COLNAME_NAME, "status", SQLITE_STATIC);
                   89530:     for(i=0; i<db->nDb; i++){
                   89531:       Btree *pBt;
                   89532:       Pager *pPager;
                   89533:       const char *zState = "unknown";
                   89534:       int j;
                   89535:       if( db->aDb[i].zName==0 ) continue;
                   89536:       sqlite3VdbeAddOp4(v, OP_String8, 0, 1, 0, db->aDb[i].zName, P4_STATIC);
                   89537:       pBt = db->aDb[i].pBt;
                   89538:       if( pBt==0 || (pPager = sqlite3BtreePager(pBt))==0 ){
                   89539:         zState = "closed";
                   89540:       }else if( sqlite3_file_control(db, i ? db->aDb[i].zName : 0, 
                   89541:                                      SQLITE_FCNTL_LOCKSTATE, &j)==SQLITE_OK ){
                   89542:          zState = azLockName[j];
                   89543:       }
                   89544:       sqlite3VdbeAddOp4(v, OP_String8, 0, 2, 0, zState, P4_STATIC);
                   89545:       sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 2);
                   89546:     }
                   89547: 
                   89548:   }else
                   89549: #endif
                   89550: 
                   89551: #ifdef SQLITE_HAS_CODEC
                   89552:   if( sqlite3StrICmp(zLeft, "key")==0 && zRight ){
                   89553:     sqlite3_key(db, zRight, sqlite3Strlen30(zRight));
                   89554:   }else
                   89555:   if( sqlite3StrICmp(zLeft, "rekey")==0 && zRight ){
                   89556:     sqlite3_rekey(db, zRight, sqlite3Strlen30(zRight));
                   89557:   }else
                   89558:   if( zRight && (sqlite3StrICmp(zLeft, "hexkey")==0 ||
                   89559:                  sqlite3StrICmp(zLeft, "hexrekey")==0) ){
                   89560:     int i, h1, h2;
                   89561:     char zKey[40];
                   89562:     for(i=0; (h1 = zRight[i])!=0 && (h2 = zRight[i+1])!=0; i+=2){
                   89563:       h1 += 9*(1&(h1>>6));
                   89564:       h2 += 9*(1&(h2>>6));
                   89565:       zKey[i/2] = (h2 & 0x0f) | ((h1 & 0xf)<<4);
                   89566:     }
                   89567:     if( (zLeft[3] & 0xf)==0xb ){
                   89568:       sqlite3_key(db, zKey, i/2);
                   89569:     }else{
                   89570:       sqlite3_rekey(db, zKey, i/2);
                   89571:     }
                   89572:   }else
                   89573: #endif
                   89574: #if defined(SQLITE_HAS_CODEC) || defined(SQLITE_ENABLE_CEROD)
                   89575:   if( sqlite3StrICmp(zLeft, "activate_extensions")==0 ){
                   89576: #ifdef SQLITE_HAS_CODEC
                   89577:     if( sqlite3StrNICmp(zRight, "see-", 4)==0 ){
                   89578:       sqlite3_activate_see(&zRight[4]);
                   89579:     }
                   89580: #endif
                   89581: #ifdef SQLITE_ENABLE_CEROD
                   89582:     if( sqlite3StrNICmp(zRight, "cerod-", 6)==0 ){
                   89583:       sqlite3_activate_cerod(&zRight[6]);
                   89584:     }
                   89585: #endif
                   89586:   }else
                   89587: #endif
                   89588: 
                   89589:  
                   89590:   {/* Empty ELSE clause */}
                   89591: 
                   89592:   /*
                   89593:   ** Reset the safety level, in case the fullfsync flag or synchronous
                   89594:   ** setting changed.
                   89595:   */
                   89596: #ifndef SQLITE_OMIT_PAGER_PRAGMAS
                   89597:   if( db->autoCommit ){
                   89598:     sqlite3BtreeSetSafetyLevel(pDb->pBt, pDb->safety_level,
                   89599:                (db->flags&SQLITE_FullFSync)!=0,
                   89600:                (db->flags&SQLITE_CkptFullFSync)!=0);
                   89601:   }
                   89602: #endif
                   89603: pragma_out:
                   89604:   sqlite3DbFree(db, zLeft);
                   89605:   sqlite3DbFree(db, zRight);
                   89606: }
                   89607: 
                   89608: #endif /* SQLITE_OMIT_PRAGMA */
                   89609: 
                   89610: /************** End of pragma.c **********************************************/
                   89611: /************** Begin file prepare.c *****************************************/
                   89612: /*
                   89613: ** 2005 May 25
                   89614: **
                   89615: ** The author disclaims copyright to this source code.  In place of
                   89616: ** a legal notice, here is a blessing:
                   89617: **
                   89618: **    May you do good and not evil.
                   89619: **    May you find forgiveness for yourself and forgive others.
                   89620: **    May you share freely, never taking more than you give.
                   89621: **
                   89622: *************************************************************************
                   89623: ** This file contains the implementation of the sqlite3_prepare()
                   89624: ** interface, and routines that contribute to loading the database schema
                   89625: ** from disk.
                   89626: */
                   89627: 
                   89628: /*
                   89629: ** Fill the InitData structure with an error message that indicates
                   89630: ** that the database is corrupt.
                   89631: */
                   89632: static void corruptSchema(
                   89633:   InitData *pData,     /* Initialization context */
                   89634:   const char *zObj,    /* Object being parsed at the point of error */
                   89635:   const char *zExtra   /* Error information */
                   89636: ){
                   89637:   sqlite3 *db = pData->db;
                   89638:   if( !db->mallocFailed && (db->flags & SQLITE_RecoveryMode)==0 ){
                   89639:     if( zObj==0 ) zObj = "?";
                   89640:     sqlite3SetString(pData->pzErrMsg, db,
                   89641:       "malformed database schema (%s)", zObj);
                   89642:     if( zExtra ){
                   89643:       *pData->pzErrMsg = sqlite3MAppendf(db, *pData->pzErrMsg, 
                   89644:                                  "%s - %s", *pData->pzErrMsg, zExtra);
                   89645:     }
                   89646:   }
                   89647:   pData->rc = db->mallocFailed ? SQLITE_NOMEM : SQLITE_CORRUPT_BKPT;
                   89648: }
                   89649: 
                   89650: /*
                   89651: ** This is the callback routine for the code that initializes the
                   89652: ** database.  See sqlite3Init() below for additional information.
                   89653: ** This routine is also called from the OP_ParseSchema opcode of the VDBE.
                   89654: **
                   89655: ** Each callback contains the following information:
                   89656: **
                   89657: **     argv[0] = name of thing being created
                   89658: **     argv[1] = root page number for table or index. 0 for trigger or view.
                   89659: **     argv[2] = SQL text for the CREATE statement.
                   89660: **
                   89661: */
                   89662: SQLITE_PRIVATE int sqlite3InitCallback(void *pInit, int argc, char **argv, char **NotUsed){
                   89663:   InitData *pData = (InitData*)pInit;
                   89664:   sqlite3 *db = pData->db;
                   89665:   int iDb = pData->iDb;
                   89666: 
                   89667:   assert( argc==3 );
                   89668:   UNUSED_PARAMETER2(NotUsed, argc);
                   89669:   assert( sqlite3_mutex_held(db->mutex) );
                   89670:   DbClearProperty(db, iDb, DB_Empty);
                   89671:   if( db->mallocFailed ){
                   89672:     corruptSchema(pData, argv[0], 0);
                   89673:     return 1;
                   89674:   }
                   89675: 
                   89676:   assert( iDb>=0 && iDb<db->nDb );
                   89677:   if( argv==0 ) return 0;   /* Might happen if EMPTY_RESULT_CALLBACKS are on */
                   89678:   if( argv[1]==0 ){
                   89679:     corruptSchema(pData, argv[0], 0);
                   89680:   }else if( argv[2] && argv[2][0] ){
                   89681:     /* Call the parser to process a CREATE TABLE, INDEX or VIEW.
                   89682:     ** But because db->init.busy is set to 1, no VDBE code is generated
                   89683:     ** or executed.  All the parser does is build the internal data
                   89684:     ** structures that describe the table, index, or view.
                   89685:     */
                   89686:     int rc;
                   89687:     sqlite3_stmt *pStmt;
                   89688:     TESTONLY(int rcp);            /* Return code from sqlite3_prepare() */
                   89689: 
                   89690:     assert( db->init.busy );
                   89691:     db->init.iDb = iDb;
                   89692:     db->init.newTnum = sqlite3Atoi(argv[1]);
                   89693:     db->init.orphanTrigger = 0;
                   89694:     TESTONLY(rcp = ) sqlite3_prepare(db, argv[2], -1, &pStmt, 0);
                   89695:     rc = db->errCode;
                   89696:     assert( (rc&0xFF)==(rcp&0xFF) );
                   89697:     db->init.iDb = 0;
                   89698:     if( SQLITE_OK!=rc ){
                   89699:       if( db->init.orphanTrigger ){
                   89700:         assert( iDb==1 );
                   89701:       }else{
                   89702:         pData->rc = rc;
                   89703:         if( rc==SQLITE_NOMEM ){
                   89704:           db->mallocFailed = 1;
                   89705:         }else if( rc!=SQLITE_INTERRUPT && (rc&0xFF)!=SQLITE_LOCKED ){
                   89706:           corruptSchema(pData, argv[0], sqlite3_errmsg(db));
                   89707:         }
                   89708:       }
                   89709:     }
                   89710:     sqlite3_finalize(pStmt);
                   89711:   }else if( argv[0]==0 ){
                   89712:     corruptSchema(pData, 0, 0);
                   89713:   }else{
                   89714:     /* If the SQL column is blank it means this is an index that
                   89715:     ** was created to be the PRIMARY KEY or to fulfill a UNIQUE
                   89716:     ** constraint for a CREATE TABLE.  The index should have already
                   89717:     ** been created when we processed the CREATE TABLE.  All we have
                   89718:     ** to do here is record the root page number for that index.
                   89719:     */
                   89720:     Index *pIndex;
                   89721:     pIndex = sqlite3FindIndex(db, argv[0], db->aDb[iDb].zName);
                   89722:     if( pIndex==0 ){
                   89723:       /* This can occur if there exists an index on a TEMP table which
                   89724:       ** has the same name as another index on a permanent index.  Since
                   89725:       ** the permanent table is hidden by the TEMP table, we can also
                   89726:       ** safely ignore the index on the permanent table.
                   89727:       */
                   89728:       /* Do Nothing */;
                   89729:     }else if( sqlite3GetInt32(argv[1], &pIndex->tnum)==0 ){
                   89730:       corruptSchema(pData, argv[0], "invalid rootpage");
                   89731:     }
                   89732:   }
                   89733:   return 0;
                   89734: }
                   89735: 
                   89736: /*
                   89737: ** Attempt to read the database schema and initialize internal
                   89738: ** data structures for a single database file.  The index of the
                   89739: ** database file is given by iDb.  iDb==0 is used for the main
                   89740: ** database.  iDb==1 should never be used.  iDb>=2 is used for
                   89741: ** auxiliary databases.  Return one of the SQLITE_ error codes to
                   89742: ** indicate success or failure.
                   89743: */
                   89744: static int sqlite3InitOne(sqlite3 *db, int iDb, char **pzErrMsg){
                   89745:   int rc;
                   89746:   int i;
                   89747:   int size;
                   89748:   Table *pTab;
                   89749:   Db *pDb;
                   89750:   char const *azArg[4];
                   89751:   int meta[5];
                   89752:   InitData initData;
                   89753:   char const *zMasterSchema;
                   89754:   char const *zMasterName;
                   89755:   int openedTransaction = 0;
                   89756: 
                   89757:   /*
                   89758:   ** The master database table has a structure like this
                   89759:   */
                   89760:   static const char master_schema[] = 
                   89761:      "CREATE TABLE sqlite_master(\n"
                   89762:      "  type text,\n"
                   89763:      "  name text,\n"
                   89764:      "  tbl_name text,\n"
                   89765:      "  rootpage integer,\n"
                   89766:      "  sql text\n"
                   89767:      ")"
                   89768:   ;
                   89769: #ifndef SQLITE_OMIT_TEMPDB
                   89770:   static const char temp_master_schema[] = 
                   89771:      "CREATE TEMP TABLE sqlite_temp_master(\n"
                   89772:      "  type text,\n"
                   89773:      "  name text,\n"
                   89774:      "  tbl_name text,\n"
                   89775:      "  rootpage integer,\n"
                   89776:      "  sql text\n"
                   89777:      ")"
                   89778:   ;
                   89779: #else
                   89780:   #define temp_master_schema 0
                   89781: #endif
                   89782: 
                   89783:   assert( iDb>=0 && iDb<db->nDb );
                   89784:   assert( db->aDb[iDb].pSchema );
                   89785:   assert( sqlite3_mutex_held(db->mutex) );
                   89786:   assert( iDb==1 || sqlite3BtreeHoldsMutex(db->aDb[iDb].pBt) );
                   89787: 
                   89788:   /* zMasterSchema and zInitScript are set to point at the master schema
                   89789:   ** and initialisation script appropriate for the database being
                   89790:   ** initialised. zMasterName is the name of the master table.
                   89791:   */
                   89792:   if( !OMIT_TEMPDB && iDb==1 ){
                   89793:     zMasterSchema = temp_master_schema;
                   89794:   }else{
                   89795:     zMasterSchema = master_schema;
                   89796:   }
                   89797:   zMasterName = SCHEMA_TABLE(iDb);
                   89798: 
                   89799:   /* Construct the schema tables.  */
                   89800:   azArg[0] = zMasterName;
                   89801:   azArg[1] = "1";
                   89802:   azArg[2] = zMasterSchema;
                   89803:   azArg[3] = 0;
                   89804:   initData.db = db;
                   89805:   initData.iDb = iDb;
                   89806:   initData.rc = SQLITE_OK;
                   89807:   initData.pzErrMsg = pzErrMsg;
                   89808:   sqlite3InitCallback(&initData, 3, (char **)azArg, 0);
                   89809:   if( initData.rc ){
                   89810:     rc = initData.rc;
                   89811:     goto error_out;
                   89812:   }
                   89813:   pTab = sqlite3FindTable(db, zMasterName, db->aDb[iDb].zName);
                   89814:   if( ALWAYS(pTab) ){
                   89815:     pTab->tabFlags |= TF_Readonly;
                   89816:   }
                   89817: 
                   89818:   /* Create a cursor to hold the database open
                   89819:   */
                   89820:   pDb = &db->aDb[iDb];
                   89821:   if( pDb->pBt==0 ){
                   89822:     if( !OMIT_TEMPDB && ALWAYS(iDb==1) ){
                   89823:       DbSetProperty(db, 1, DB_SchemaLoaded);
                   89824:     }
                   89825:     return SQLITE_OK;
                   89826:   }
                   89827: 
                   89828:   /* If there is not already a read-only (or read-write) transaction opened
                   89829:   ** on the b-tree database, open one now. If a transaction is opened, it 
                   89830:   ** will be closed before this function returns.  */
                   89831:   sqlite3BtreeEnter(pDb->pBt);
                   89832:   if( !sqlite3BtreeIsInReadTrans(pDb->pBt) ){
                   89833:     rc = sqlite3BtreeBeginTrans(pDb->pBt, 0);
                   89834:     if( rc!=SQLITE_OK ){
                   89835:       sqlite3SetString(pzErrMsg, db, "%s", sqlite3ErrStr(rc));
                   89836:       goto initone_error_out;
                   89837:     }
                   89838:     openedTransaction = 1;
                   89839:   }
                   89840: 
                   89841:   /* Get the database meta information.
                   89842:   **
                   89843:   ** Meta values are as follows:
                   89844:   **    meta[0]   Schema cookie.  Changes with each schema change.
                   89845:   **    meta[1]   File format of schema layer.
                   89846:   **    meta[2]   Size of the page cache.
                   89847:   **    meta[3]   Largest rootpage (auto/incr_vacuum mode)
                   89848:   **    meta[4]   Db text encoding. 1:UTF-8 2:UTF-16LE 3:UTF-16BE
                   89849:   **    meta[5]   User version
                   89850:   **    meta[6]   Incremental vacuum mode
                   89851:   **    meta[7]   unused
                   89852:   **    meta[8]   unused
                   89853:   **    meta[9]   unused
                   89854:   **
                   89855:   ** Note: The #defined SQLITE_UTF* symbols in sqliteInt.h correspond to
                   89856:   ** the possible values of meta[4].
                   89857:   */
                   89858:   for(i=0; i<ArraySize(meta); i++){
                   89859:     sqlite3BtreeGetMeta(pDb->pBt, i+1, (u32 *)&meta[i]);
                   89860:   }
                   89861:   pDb->pSchema->schema_cookie = meta[BTREE_SCHEMA_VERSION-1];
                   89862: 
                   89863:   /* If opening a non-empty database, check the text encoding. For the
                   89864:   ** main database, set sqlite3.enc to the encoding of the main database.
                   89865:   ** For an attached db, it is an error if the encoding is not the same
                   89866:   ** as sqlite3.enc.
                   89867:   */
                   89868:   if( meta[BTREE_TEXT_ENCODING-1] ){  /* text encoding */
                   89869:     if( iDb==0 ){
                   89870:       u8 encoding;
                   89871:       /* If opening the main database, set ENC(db). */
                   89872:       encoding = (u8)meta[BTREE_TEXT_ENCODING-1] & 3;
                   89873:       if( encoding==0 ) encoding = SQLITE_UTF8;
                   89874:       ENC(db) = encoding;
                   89875:       db->pDfltColl = sqlite3FindCollSeq(db, SQLITE_UTF8, "BINARY", 0);
                   89876:     }else{
                   89877:       /* If opening an attached database, the encoding much match ENC(db) */
                   89878:       if( meta[BTREE_TEXT_ENCODING-1]!=ENC(db) ){
                   89879:         sqlite3SetString(pzErrMsg, db, "attached databases must use the same"
                   89880:             " text encoding as main database");
                   89881:         rc = SQLITE_ERROR;
                   89882:         goto initone_error_out;
                   89883:       }
                   89884:     }
                   89885:   }else{
                   89886:     DbSetProperty(db, iDb, DB_Empty);
                   89887:   }
                   89888:   pDb->pSchema->enc = ENC(db);
                   89889: 
                   89890:   if( pDb->pSchema->cache_size==0 ){
                   89891:     size = sqlite3AbsInt32(meta[BTREE_DEFAULT_CACHE_SIZE-1]);
                   89892:     if( size==0 ){ size = SQLITE_DEFAULT_CACHE_SIZE; }
                   89893:     pDb->pSchema->cache_size = size;
                   89894:     sqlite3BtreeSetCacheSize(pDb->pBt, pDb->pSchema->cache_size);
                   89895:   }
                   89896: 
                   89897:   /*
                   89898:   ** file_format==1    Version 3.0.0.
                   89899:   ** file_format==2    Version 3.1.3.  // ALTER TABLE ADD COLUMN
                   89900:   ** file_format==3    Version 3.1.4.  // ditto but with non-NULL defaults
                   89901:   ** file_format==4    Version 3.3.0.  // DESC indices.  Boolean constants
                   89902:   */
                   89903:   pDb->pSchema->file_format = (u8)meta[BTREE_FILE_FORMAT-1];
                   89904:   if( pDb->pSchema->file_format==0 ){
                   89905:     pDb->pSchema->file_format = 1;
                   89906:   }
                   89907:   if( pDb->pSchema->file_format>SQLITE_MAX_FILE_FORMAT ){
                   89908:     sqlite3SetString(pzErrMsg, db, "unsupported file format");
                   89909:     rc = SQLITE_ERROR;
                   89910:     goto initone_error_out;
                   89911:   }
                   89912: 
                   89913:   /* Ticket #2804:  When we open a database in the newer file format,
                   89914:   ** clear the legacy_file_format pragma flag so that a VACUUM will
                   89915:   ** not downgrade the database and thus invalidate any descending
                   89916:   ** indices that the user might have created.
                   89917:   */
                   89918:   if( iDb==0 && meta[BTREE_FILE_FORMAT-1]>=4 ){
                   89919:     db->flags &= ~SQLITE_LegacyFileFmt;
                   89920:   }
                   89921: 
                   89922:   /* Read the schema information out of the schema tables
                   89923:   */
                   89924:   assert( db->init.busy );
                   89925:   {
                   89926:     char *zSql;
                   89927:     zSql = sqlite3MPrintf(db, 
                   89928:         "SELECT name, rootpage, sql FROM '%q'.%s ORDER BY rowid",
                   89929:         db->aDb[iDb].zName, zMasterName);
                   89930: #ifndef SQLITE_OMIT_AUTHORIZATION
                   89931:     {
                   89932:       int (*xAuth)(void*,int,const char*,const char*,const char*,const char*);
                   89933:       xAuth = db->xAuth;
                   89934:       db->xAuth = 0;
                   89935: #endif
                   89936:       rc = sqlite3_exec(db, zSql, sqlite3InitCallback, &initData, 0);
                   89937: #ifndef SQLITE_OMIT_AUTHORIZATION
                   89938:       db->xAuth = xAuth;
                   89939:     }
                   89940: #endif
                   89941:     if( rc==SQLITE_OK ) rc = initData.rc;
                   89942:     sqlite3DbFree(db, zSql);
                   89943: #ifndef SQLITE_OMIT_ANALYZE
                   89944:     if( rc==SQLITE_OK ){
                   89945:       sqlite3AnalysisLoad(db, iDb);
                   89946:     }
                   89947: #endif
                   89948:   }
                   89949:   if( db->mallocFailed ){
                   89950:     rc = SQLITE_NOMEM;
                   89951:     sqlite3ResetInternalSchema(db, -1);
                   89952:   }
                   89953:   if( rc==SQLITE_OK || (db->flags&SQLITE_RecoveryMode)){
                   89954:     /* Black magic: If the SQLITE_RecoveryMode flag is set, then consider
                   89955:     ** the schema loaded, even if errors occurred. In this situation the 
                   89956:     ** current sqlite3_prepare() operation will fail, but the following one
                   89957:     ** will attempt to compile the supplied statement against whatever subset
                   89958:     ** of the schema was loaded before the error occurred. The primary
                   89959:     ** purpose of this is to allow access to the sqlite_master table
                   89960:     ** even when its contents have been corrupted.
                   89961:     */
                   89962:     DbSetProperty(db, iDb, DB_SchemaLoaded);
                   89963:     rc = SQLITE_OK;
                   89964:   }
                   89965: 
                   89966:   /* Jump here for an error that occurs after successfully allocating
                   89967:   ** curMain and calling sqlite3BtreeEnter(). For an error that occurs
                   89968:   ** before that point, jump to error_out.
                   89969:   */
                   89970: initone_error_out:
                   89971:   if( openedTransaction ){
                   89972:     sqlite3BtreeCommit(pDb->pBt);
                   89973:   }
                   89974:   sqlite3BtreeLeave(pDb->pBt);
                   89975: 
                   89976: error_out:
                   89977:   if( rc==SQLITE_NOMEM || rc==SQLITE_IOERR_NOMEM ){
                   89978:     db->mallocFailed = 1;
                   89979:   }
                   89980:   return rc;
                   89981: }
                   89982: 
                   89983: /*
                   89984: ** Initialize all database files - the main database file, the file
                   89985: ** used to store temporary tables, and any additional database files
                   89986: ** created using ATTACH statements.  Return a success code.  If an
                   89987: ** error occurs, write an error message into *pzErrMsg.
                   89988: **
                   89989: ** After a database is initialized, the DB_SchemaLoaded bit is set
                   89990: ** bit is set in the flags field of the Db structure. If the database
                   89991: ** file was of zero-length, then the DB_Empty flag is also set.
                   89992: */
                   89993: SQLITE_PRIVATE int sqlite3Init(sqlite3 *db, char **pzErrMsg){
                   89994:   int i, rc;
                   89995:   int commit_internal = !(db->flags&SQLITE_InternChanges);
                   89996:   
                   89997:   assert( sqlite3_mutex_held(db->mutex) );
                   89998:   rc = SQLITE_OK;
                   89999:   db->init.busy = 1;
                   90000:   for(i=0; rc==SQLITE_OK && i<db->nDb; i++){
                   90001:     if( DbHasProperty(db, i, DB_SchemaLoaded) || i==1 ) continue;
                   90002:     rc = sqlite3InitOne(db, i, pzErrMsg);
                   90003:     if( rc ){
                   90004:       sqlite3ResetInternalSchema(db, i);
                   90005:     }
                   90006:   }
                   90007: 
                   90008:   /* Once all the other databases have been initialised, load the schema
                   90009:   ** for the TEMP database. This is loaded last, as the TEMP database
                   90010:   ** schema may contain references to objects in other databases.
                   90011:   */
                   90012: #ifndef SQLITE_OMIT_TEMPDB
                   90013:   if( rc==SQLITE_OK && ALWAYS(db->nDb>1)
                   90014:                     && !DbHasProperty(db, 1, DB_SchemaLoaded) ){
                   90015:     rc = sqlite3InitOne(db, 1, pzErrMsg);
                   90016:     if( rc ){
                   90017:       sqlite3ResetInternalSchema(db, 1);
                   90018:     }
                   90019:   }
                   90020: #endif
                   90021: 
                   90022:   db->init.busy = 0;
                   90023:   if( rc==SQLITE_OK && commit_internal ){
                   90024:     sqlite3CommitInternalChanges(db);
                   90025:   }
                   90026: 
                   90027:   return rc; 
                   90028: }
                   90029: 
                   90030: /*
                   90031: ** This routine is a no-op if the database schema is already initialised.
                   90032: ** Otherwise, the schema is loaded. An error code is returned.
                   90033: */
                   90034: SQLITE_PRIVATE int sqlite3ReadSchema(Parse *pParse){
                   90035:   int rc = SQLITE_OK;
                   90036:   sqlite3 *db = pParse->db;
                   90037:   assert( sqlite3_mutex_held(db->mutex) );
                   90038:   if( !db->init.busy ){
                   90039:     rc = sqlite3Init(db, &pParse->zErrMsg);
                   90040:   }
                   90041:   if( rc!=SQLITE_OK ){
                   90042:     pParse->rc = rc;
                   90043:     pParse->nErr++;
                   90044:   }
                   90045:   return rc;
                   90046: }
                   90047: 
                   90048: 
                   90049: /*
                   90050: ** Check schema cookies in all databases.  If any cookie is out
                   90051: ** of date set pParse->rc to SQLITE_SCHEMA.  If all schema cookies
                   90052: ** make no changes to pParse->rc.
                   90053: */
                   90054: static void schemaIsValid(Parse *pParse){
                   90055:   sqlite3 *db = pParse->db;
                   90056:   int iDb;
                   90057:   int rc;
                   90058:   int cookie;
                   90059: 
                   90060:   assert( pParse->checkSchema );
                   90061:   assert( sqlite3_mutex_held(db->mutex) );
                   90062:   for(iDb=0; iDb<db->nDb; iDb++){
                   90063:     int openedTransaction = 0;         /* True if a transaction is opened */
                   90064:     Btree *pBt = db->aDb[iDb].pBt;     /* Btree database to read cookie from */
                   90065:     if( pBt==0 ) continue;
                   90066: 
                   90067:     /* If there is not already a read-only (or read-write) transaction opened
                   90068:     ** on the b-tree database, open one now. If a transaction is opened, it 
                   90069:     ** will be closed immediately after reading the meta-value. */
                   90070:     if( !sqlite3BtreeIsInReadTrans(pBt) ){
                   90071:       rc = sqlite3BtreeBeginTrans(pBt, 0);
                   90072:       if( rc==SQLITE_NOMEM || rc==SQLITE_IOERR_NOMEM ){
                   90073:         db->mallocFailed = 1;
                   90074:       }
                   90075:       if( rc!=SQLITE_OK ) return;
                   90076:       openedTransaction = 1;
                   90077:     }
                   90078: 
                   90079:     /* Read the schema cookie from the database. If it does not match the 
                   90080:     ** value stored as part of the in-memory schema representation,
                   90081:     ** set Parse.rc to SQLITE_SCHEMA. */
                   90082:     sqlite3BtreeGetMeta(pBt, BTREE_SCHEMA_VERSION, (u32 *)&cookie);
                   90083:     assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
                   90084:     if( cookie!=db->aDb[iDb].pSchema->schema_cookie ){
                   90085:       sqlite3ResetInternalSchema(db, iDb);
                   90086:       pParse->rc = SQLITE_SCHEMA;
                   90087:     }
                   90088: 
                   90089:     /* Close the transaction, if one was opened. */
                   90090:     if( openedTransaction ){
                   90091:       sqlite3BtreeCommit(pBt);
                   90092:     }
                   90093:   }
                   90094: }
                   90095: 
                   90096: /*
                   90097: ** Convert a schema pointer into the iDb index that indicates
                   90098: ** which database file in db->aDb[] the schema refers to.
                   90099: **
                   90100: ** If the same database is attached more than once, the first
                   90101: ** attached database is returned.
                   90102: */
                   90103: SQLITE_PRIVATE int sqlite3SchemaToIndex(sqlite3 *db, Schema *pSchema){
                   90104:   int i = -1000000;
                   90105: 
                   90106:   /* If pSchema is NULL, then return -1000000. This happens when code in 
                   90107:   ** expr.c is trying to resolve a reference to a transient table (i.e. one
                   90108:   ** created by a sub-select). In this case the return value of this 
                   90109:   ** function should never be used.
                   90110:   **
                   90111:   ** We return -1000000 instead of the more usual -1 simply because using
                   90112:   ** -1000000 as the incorrect index into db->aDb[] is much 
                   90113:   ** more likely to cause a segfault than -1 (of course there are assert()
                   90114:   ** statements too, but it never hurts to play the odds).
                   90115:   */
                   90116:   assert( sqlite3_mutex_held(db->mutex) );
                   90117:   if( pSchema ){
                   90118:     for(i=0; ALWAYS(i<db->nDb); i++){
                   90119:       if( db->aDb[i].pSchema==pSchema ){
                   90120:         break;
                   90121:       }
                   90122:     }
                   90123:     assert( i>=0 && i<db->nDb );
                   90124:   }
                   90125:   return i;
                   90126: }
                   90127: 
                   90128: /*
                   90129: ** Compile the UTF-8 encoded SQL statement zSql into a statement handle.
                   90130: */
                   90131: static int sqlite3Prepare(
                   90132:   sqlite3 *db,              /* Database handle. */
                   90133:   const char *zSql,         /* UTF-8 encoded SQL statement. */
                   90134:   int nBytes,               /* Length of zSql in bytes. */
                   90135:   int saveSqlFlag,          /* True to copy SQL text into the sqlite3_stmt */
                   90136:   Vdbe *pReprepare,         /* VM being reprepared */
                   90137:   sqlite3_stmt **ppStmt,    /* OUT: A pointer to the prepared statement */
                   90138:   const char **pzTail       /* OUT: End of parsed string */
                   90139: ){
                   90140:   Parse *pParse;            /* Parsing context */
                   90141:   char *zErrMsg = 0;        /* Error message */
                   90142:   int rc = SQLITE_OK;       /* Result code */
                   90143:   int i;                    /* Loop counter */
                   90144: 
                   90145:   /* Allocate the parsing context */
                   90146:   pParse = sqlite3StackAllocZero(db, sizeof(*pParse));
                   90147:   if( pParse==0 ){
                   90148:     rc = SQLITE_NOMEM;
                   90149:     goto end_prepare;
                   90150:   }
                   90151:   pParse->pReprepare = pReprepare;
                   90152:   assert( ppStmt && *ppStmt==0 );
                   90153:   assert( !db->mallocFailed );
                   90154:   assert( sqlite3_mutex_held(db->mutex) );
                   90155: 
                   90156:   /* Check to verify that it is possible to get a read lock on all
                   90157:   ** database schemas.  The inability to get a read lock indicates that
                   90158:   ** some other database connection is holding a write-lock, which in
                   90159:   ** turn means that the other connection has made uncommitted changes
                   90160:   ** to the schema.
                   90161:   **
                   90162:   ** Were we to proceed and prepare the statement against the uncommitted
                   90163:   ** schema changes and if those schema changes are subsequently rolled
                   90164:   ** back and different changes are made in their place, then when this
                   90165:   ** prepared statement goes to run the schema cookie would fail to detect
                   90166:   ** the schema change.  Disaster would follow.
                   90167:   **
                   90168:   ** This thread is currently holding mutexes on all Btrees (because
                   90169:   ** of the sqlite3BtreeEnterAll() in sqlite3LockAndPrepare()) so it
                   90170:   ** is not possible for another thread to start a new schema change
                   90171:   ** while this routine is running.  Hence, we do not need to hold 
                   90172:   ** locks on the schema, we just need to make sure nobody else is 
                   90173:   ** holding them.
                   90174:   **
                   90175:   ** Note that setting READ_UNCOMMITTED overrides most lock detection,
                   90176:   ** but it does *not* override schema lock detection, so this all still
                   90177:   ** works even if READ_UNCOMMITTED is set.
                   90178:   */
                   90179:   for(i=0; i<db->nDb; i++) {
                   90180:     Btree *pBt = db->aDb[i].pBt;
                   90181:     if( pBt ){
                   90182:       assert( sqlite3BtreeHoldsMutex(pBt) );
                   90183:       rc = sqlite3BtreeSchemaLocked(pBt);
                   90184:       if( rc ){
                   90185:         const char *zDb = db->aDb[i].zName;
                   90186:         sqlite3Error(db, rc, "database schema is locked: %s", zDb);
                   90187:         testcase( db->flags & SQLITE_ReadUncommitted );
                   90188:         goto end_prepare;
                   90189:       }
                   90190:     }
                   90191:   }
                   90192: 
                   90193:   sqlite3VtabUnlockList(db);
                   90194: 
                   90195:   pParse->db = db;
                   90196:   pParse->nQueryLoop = (double)1;
                   90197:   if( nBytes>=0 && (nBytes==0 || zSql[nBytes-1]!=0) ){
                   90198:     char *zSqlCopy;
                   90199:     int mxLen = db->aLimit[SQLITE_LIMIT_SQL_LENGTH];
                   90200:     testcase( nBytes==mxLen );
                   90201:     testcase( nBytes==mxLen+1 );
                   90202:     if( nBytes>mxLen ){
                   90203:       sqlite3Error(db, SQLITE_TOOBIG, "statement too long");
                   90204:       rc = sqlite3ApiExit(db, SQLITE_TOOBIG);
                   90205:       goto end_prepare;
                   90206:     }
                   90207:     zSqlCopy = sqlite3DbStrNDup(db, zSql, nBytes);
                   90208:     if( zSqlCopy ){
                   90209:       sqlite3RunParser(pParse, zSqlCopy, &zErrMsg);
                   90210:       sqlite3DbFree(db, zSqlCopy);
                   90211:       pParse->zTail = &zSql[pParse->zTail-zSqlCopy];
                   90212:     }else{
                   90213:       pParse->zTail = &zSql[nBytes];
                   90214:     }
                   90215:   }else{
                   90216:     sqlite3RunParser(pParse, zSql, &zErrMsg);
                   90217:   }
                   90218:   assert( 1==(int)pParse->nQueryLoop );
                   90219: 
                   90220:   if( db->mallocFailed ){
                   90221:     pParse->rc = SQLITE_NOMEM;
                   90222:   }
                   90223:   if( pParse->rc==SQLITE_DONE ) pParse->rc = SQLITE_OK;
                   90224:   if( pParse->checkSchema ){
                   90225:     schemaIsValid(pParse);
                   90226:   }
                   90227:   if( db->mallocFailed ){
                   90228:     pParse->rc = SQLITE_NOMEM;
                   90229:   }
                   90230:   if( pzTail ){
                   90231:     *pzTail = pParse->zTail;
                   90232:   }
                   90233:   rc = pParse->rc;
                   90234: 
                   90235: #ifndef SQLITE_OMIT_EXPLAIN
                   90236:   if( rc==SQLITE_OK && pParse->pVdbe && pParse->explain ){
                   90237:     static const char * const azColName[] = {
                   90238:        "addr", "opcode", "p1", "p2", "p3", "p4", "p5", "comment",
                   90239:        "selectid", "order", "from", "detail"
                   90240:     };
                   90241:     int iFirst, mx;
                   90242:     if( pParse->explain==2 ){
                   90243:       sqlite3VdbeSetNumCols(pParse->pVdbe, 4);
                   90244:       iFirst = 8;
                   90245:       mx = 12;
                   90246:     }else{
                   90247:       sqlite3VdbeSetNumCols(pParse->pVdbe, 8);
                   90248:       iFirst = 0;
                   90249:       mx = 8;
                   90250:     }
                   90251:     for(i=iFirst; i<mx; i++){
                   90252:       sqlite3VdbeSetColName(pParse->pVdbe, i-iFirst, COLNAME_NAME,
                   90253:                             azColName[i], SQLITE_STATIC);
                   90254:     }
                   90255:   }
                   90256: #endif
                   90257: 
                   90258:   assert( db->init.busy==0 || saveSqlFlag==0 );
                   90259:   if( db->init.busy==0 ){
                   90260:     Vdbe *pVdbe = pParse->pVdbe;
                   90261:     sqlite3VdbeSetSql(pVdbe, zSql, (int)(pParse->zTail-zSql), saveSqlFlag);
                   90262:   }
                   90263:   if( pParse->pVdbe && (rc!=SQLITE_OK || db->mallocFailed) ){
                   90264:     sqlite3VdbeFinalize(pParse->pVdbe);
                   90265:     assert(!(*ppStmt));
                   90266:   }else{
                   90267:     *ppStmt = (sqlite3_stmt*)pParse->pVdbe;
                   90268:   }
                   90269: 
                   90270:   if( zErrMsg ){
                   90271:     sqlite3Error(db, rc, "%s", zErrMsg);
                   90272:     sqlite3DbFree(db, zErrMsg);
                   90273:   }else{
                   90274:     sqlite3Error(db, rc, 0);
                   90275:   }
                   90276: 
                   90277:   /* Delete any TriggerPrg structures allocated while parsing this statement. */
                   90278:   while( pParse->pTriggerPrg ){
                   90279:     TriggerPrg *pT = pParse->pTriggerPrg;
                   90280:     pParse->pTriggerPrg = pT->pNext;
                   90281:     sqlite3DbFree(db, pT);
                   90282:   }
                   90283: 
                   90284: end_prepare:
                   90285: 
                   90286:   sqlite3StackFree(db, pParse);
                   90287:   rc = sqlite3ApiExit(db, rc);
                   90288:   assert( (rc&db->errMask)==rc );
                   90289:   return rc;
                   90290: }
                   90291: static int sqlite3LockAndPrepare(
                   90292:   sqlite3 *db,              /* Database handle. */
                   90293:   const char *zSql,         /* UTF-8 encoded SQL statement. */
                   90294:   int nBytes,               /* Length of zSql in bytes. */
                   90295:   int saveSqlFlag,          /* True to copy SQL text into the sqlite3_stmt */
                   90296:   Vdbe *pOld,               /* VM being reprepared */
                   90297:   sqlite3_stmt **ppStmt,    /* OUT: A pointer to the prepared statement */
                   90298:   const char **pzTail       /* OUT: End of parsed string */
                   90299: ){
                   90300:   int rc;
                   90301:   assert( ppStmt!=0 );
                   90302:   *ppStmt = 0;
                   90303:   if( !sqlite3SafetyCheckOk(db) ){
                   90304:     return SQLITE_MISUSE_BKPT;
                   90305:   }
                   90306:   sqlite3_mutex_enter(db->mutex);
                   90307:   sqlite3BtreeEnterAll(db);
                   90308:   rc = sqlite3Prepare(db, zSql, nBytes, saveSqlFlag, pOld, ppStmt, pzTail);
                   90309:   if( rc==SQLITE_SCHEMA ){
                   90310:     sqlite3_finalize(*ppStmt);
                   90311:     rc = sqlite3Prepare(db, zSql, nBytes, saveSqlFlag, pOld, ppStmt, pzTail);
                   90312:   }
                   90313:   sqlite3BtreeLeaveAll(db);
                   90314:   sqlite3_mutex_leave(db->mutex);
                   90315:   return rc;
                   90316: }
                   90317: 
                   90318: /*
                   90319: ** Rerun the compilation of a statement after a schema change.
                   90320: **
                   90321: ** If the statement is successfully recompiled, return SQLITE_OK. Otherwise,
                   90322: ** if the statement cannot be recompiled because another connection has
                   90323: ** locked the sqlite3_master table, return SQLITE_LOCKED. If any other error
                   90324: ** occurs, return SQLITE_SCHEMA.
                   90325: */
                   90326: SQLITE_PRIVATE int sqlite3Reprepare(Vdbe *p){
                   90327:   int rc;
                   90328:   sqlite3_stmt *pNew;
                   90329:   const char *zSql;
                   90330:   sqlite3 *db;
                   90331: 
                   90332:   assert( sqlite3_mutex_held(sqlite3VdbeDb(p)->mutex) );
                   90333:   zSql = sqlite3_sql((sqlite3_stmt *)p);
                   90334:   assert( zSql!=0 );  /* Reprepare only called for prepare_v2() statements */
                   90335:   db = sqlite3VdbeDb(p);
                   90336:   assert( sqlite3_mutex_held(db->mutex) );
                   90337:   rc = sqlite3LockAndPrepare(db, zSql, -1, 0, p, &pNew, 0);
                   90338:   if( rc ){
                   90339:     if( rc==SQLITE_NOMEM ){
                   90340:       db->mallocFailed = 1;
                   90341:     }
                   90342:     assert( pNew==0 );
                   90343:     return rc;
                   90344:   }else{
                   90345:     assert( pNew!=0 );
                   90346:   }
                   90347:   sqlite3VdbeSwap((Vdbe*)pNew, p);
                   90348:   sqlite3TransferBindings(pNew, (sqlite3_stmt*)p);
                   90349:   sqlite3VdbeResetStepResult((Vdbe*)pNew);
                   90350:   sqlite3VdbeFinalize((Vdbe*)pNew);
                   90351:   return SQLITE_OK;
                   90352: }
                   90353: 
                   90354: 
                   90355: /*
                   90356: ** Two versions of the official API.  Legacy and new use.  In the legacy
                   90357: ** version, the original SQL text is not saved in the prepared statement
                   90358: ** and so if a schema change occurs, SQLITE_SCHEMA is returned by
                   90359: ** sqlite3_step().  In the new version, the original SQL text is retained
                   90360: ** and the statement is automatically recompiled if an schema change
                   90361: ** occurs.
                   90362: */
                   90363: SQLITE_API int sqlite3_prepare(
                   90364:   sqlite3 *db,              /* Database handle. */
                   90365:   const char *zSql,         /* UTF-8 encoded SQL statement. */
                   90366:   int nBytes,               /* Length of zSql in bytes. */
                   90367:   sqlite3_stmt **ppStmt,    /* OUT: A pointer to the prepared statement */
                   90368:   const char **pzTail       /* OUT: End of parsed string */
                   90369: ){
                   90370:   int rc;
                   90371:   rc = sqlite3LockAndPrepare(db,zSql,nBytes,0,0,ppStmt,pzTail);
                   90372:   assert( rc==SQLITE_OK || ppStmt==0 || *ppStmt==0 );  /* VERIFY: F13021 */
                   90373:   return rc;
                   90374: }
                   90375: SQLITE_API int sqlite3_prepare_v2(
                   90376:   sqlite3 *db,              /* Database handle. */
                   90377:   const char *zSql,         /* UTF-8 encoded SQL statement. */
                   90378:   int nBytes,               /* Length of zSql in bytes. */
                   90379:   sqlite3_stmt **ppStmt,    /* OUT: A pointer to the prepared statement */
                   90380:   const char **pzTail       /* OUT: End of parsed string */
                   90381: ){
                   90382:   int rc;
                   90383:   rc = sqlite3LockAndPrepare(db,zSql,nBytes,1,0,ppStmt,pzTail);
                   90384:   assert( rc==SQLITE_OK || ppStmt==0 || *ppStmt==0 );  /* VERIFY: F13021 */
                   90385:   return rc;
                   90386: }
                   90387: 
                   90388: 
                   90389: #ifndef SQLITE_OMIT_UTF16
                   90390: /*
                   90391: ** Compile the UTF-16 encoded SQL statement zSql into a statement handle.
                   90392: */
                   90393: static int sqlite3Prepare16(
                   90394:   sqlite3 *db,              /* Database handle. */ 
                   90395:   const void *zSql,         /* UTF-16 encoded SQL statement. */
                   90396:   int nBytes,               /* Length of zSql in bytes. */
                   90397:   int saveSqlFlag,          /* True to save SQL text into the sqlite3_stmt */
                   90398:   sqlite3_stmt **ppStmt,    /* OUT: A pointer to the prepared statement */
                   90399:   const void **pzTail       /* OUT: End of parsed string */
                   90400: ){
                   90401:   /* This function currently works by first transforming the UTF-16
                   90402:   ** encoded string to UTF-8, then invoking sqlite3_prepare(). The
                   90403:   ** tricky bit is figuring out the pointer to return in *pzTail.
                   90404:   */
                   90405:   char *zSql8;
                   90406:   const char *zTail8 = 0;
                   90407:   int rc = SQLITE_OK;
                   90408: 
                   90409:   assert( ppStmt );
                   90410:   *ppStmt = 0;
                   90411:   if( !sqlite3SafetyCheckOk(db) ){
                   90412:     return SQLITE_MISUSE_BKPT;
                   90413:   }
                   90414:   sqlite3_mutex_enter(db->mutex);
                   90415:   zSql8 = sqlite3Utf16to8(db, zSql, nBytes, SQLITE_UTF16NATIVE);
                   90416:   if( zSql8 ){
                   90417:     rc = sqlite3LockAndPrepare(db, zSql8, -1, saveSqlFlag, 0, ppStmt, &zTail8);
                   90418:   }
                   90419: 
                   90420:   if( zTail8 && pzTail ){
                   90421:     /* If sqlite3_prepare returns a tail pointer, we calculate the
                   90422:     ** equivalent pointer into the UTF-16 string by counting the unicode
                   90423:     ** characters between zSql8 and zTail8, and then returning a pointer
                   90424:     ** the same number of characters into the UTF-16 string.
                   90425:     */
                   90426:     int chars_parsed = sqlite3Utf8CharLen(zSql8, (int)(zTail8-zSql8));
                   90427:     *pzTail = (u8 *)zSql + sqlite3Utf16ByteLen(zSql, chars_parsed);
                   90428:   }
                   90429:   sqlite3DbFree(db, zSql8); 
                   90430:   rc = sqlite3ApiExit(db, rc);
                   90431:   sqlite3_mutex_leave(db->mutex);
                   90432:   return rc;
                   90433: }
                   90434: 
                   90435: /*
                   90436: ** Two versions of the official API.  Legacy and new use.  In the legacy
                   90437: ** version, the original SQL text is not saved in the prepared statement
                   90438: ** and so if a schema change occurs, SQLITE_SCHEMA is returned by
                   90439: ** sqlite3_step().  In the new version, the original SQL text is retained
                   90440: ** and the statement is automatically recompiled if an schema change
                   90441: ** occurs.
                   90442: */
                   90443: SQLITE_API int sqlite3_prepare16(
                   90444:   sqlite3 *db,              /* Database handle. */ 
                   90445:   const void *zSql,         /* UTF-16 encoded SQL statement. */
                   90446:   int nBytes,               /* Length of zSql in bytes. */
                   90447:   sqlite3_stmt **ppStmt,    /* OUT: A pointer to the prepared statement */
                   90448:   const void **pzTail       /* OUT: End of parsed string */
                   90449: ){
                   90450:   int rc;
                   90451:   rc = sqlite3Prepare16(db,zSql,nBytes,0,ppStmt,pzTail);
                   90452:   assert( rc==SQLITE_OK || ppStmt==0 || *ppStmt==0 );  /* VERIFY: F13021 */
                   90453:   return rc;
                   90454: }
                   90455: SQLITE_API int sqlite3_prepare16_v2(
                   90456:   sqlite3 *db,              /* Database handle. */ 
                   90457:   const void *zSql,         /* UTF-16 encoded SQL statement. */
                   90458:   int nBytes,               /* Length of zSql in bytes. */
                   90459:   sqlite3_stmt **ppStmt,    /* OUT: A pointer to the prepared statement */
                   90460:   const void **pzTail       /* OUT: End of parsed string */
                   90461: ){
                   90462:   int rc;
                   90463:   rc = sqlite3Prepare16(db,zSql,nBytes,1,ppStmt,pzTail);
                   90464:   assert( rc==SQLITE_OK || ppStmt==0 || *ppStmt==0 );  /* VERIFY: F13021 */
                   90465:   return rc;
                   90466: }
                   90467: 
                   90468: #endif /* SQLITE_OMIT_UTF16 */
                   90469: 
                   90470: /************** End of prepare.c *********************************************/
                   90471: /************** Begin file select.c ******************************************/
                   90472: /*
                   90473: ** 2001 September 15
                   90474: **
                   90475: ** The author disclaims copyright to this source code.  In place of
                   90476: ** a legal notice, here is a blessing:
                   90477: **
                   90478: **    May you do good and not evil.
                   90479: **    May you find forgiveness for yourself and forgive others.
                   90480: **    May you share freely, never taking more than you give.
                   90481: **
                   90482: *************************************************************************
                   90483: ** This file contains C code routines that are called by the parser
                   90484: ** to handle SELECT statements in SQLite.
                   90485: */
                   90486: 
                   90487: 
                   90488: /*
                   90489: ** Delete all the content of a Select structure but do not deallocate
                   90490: ** the select structure itself.
                   90491: */
                   90492: static void clearSelect(sqlite3 *db, Select *p){
                   90493:   sqlite3ExprListDelete(db, p->pEList);
                   90494:   sqlite3SrcListDelete(db, p->pSrc);
                   90495:   sqlite3ExprDelete(db, p->pWhere);
                   90496:   sqlite3ExprListDelete(db, p->pGroupBy);
                   90497:   sqlite3ExprDelete(db, p->pHaving);
                   90498:   sqlite3ExprListDelete(db, p->pOrderBy);
                   90499:   sqlite3SelectDelete(db, p->pPrior);
                   90500:   sqlite3ExprDelete(db, p->pLimit);
                   90501:   sqlite3ExprDelete(db, p->pOffset);
                   90502: }
                   90503: 
                   90504: /*
                   90505: ** Initialize a SelectDest structure.
                   90506: */
                   90507: SQLITE_PRIVATE void sqlite3SelectDestInit(SelectDest *pDest, int eDest, int iParm){
                   90508:   pDest->eDest = (u8)eDest;
                   90509:   pDest->iParm = iParm;
                   90510:   pDest->affinity = 0;
                   90511:   pDest->iMem = 0;
                   90512:   pDest->nMem = 0;
                   90513: }
                   90514: 
                   90515: 
                   90516: /*
                   90517: ** Allocate a new Select structure and return a pointer to that
                   90518: ** structure.
                   90519: */
                   90520: SQLITE_PRIVATE Select *sqlite3SelectNew(
                   90521:   Parse *pParse,        /* Parsing context */
                   90522:   ExprList *pEList,     /* which columns to include in the result */
                   90523:   SrcList *pSrc,        /* the FROM clause -- which tables to scan */
                   90524:   Expr *pWhere,         /* the WHERE clause */
                   90525:   ExprList *pGroupBy,   /* the GROUP BY clause */
                   90526:   Expr *pHaving,        /* the HAVING clause */
                   90527:   ExprList *pOrderBy,   /* the ORDER BY clause */
                   90528:   int isDistinct,       /* true if the DISTINCT keyword is present */
                   90529:   Expr *pLimit,         /* LIMIT value.  NULL means not used */
                   90530:   Expr *pOffset         /* OFFSET value.  NULL means no offset */
                   90531: ){
                   90532:   Select *pNew;
                   90533:   Select standin;
                   90534:   sqlite3 *db = pParse->db;
                   90535:   pNew = sqlite3DbMallocZero(db, sizeof(*pNew) );
                   90536:   assert( db->mallocFailed || !pOffset || pLimit ); /* OFFSET implies LIMIT */
                   90537:   if( pNew==0 ){
                   90538:     pNew = &standin;
                   90539:     memset(pNew, 0, sizeof(*pNew));
                   90540:   }
                   90541:   if( pEList==0 ){
                   90542:     pEList = sqlite3ExprListAppend(pParse, 0, sqlite3Expr(db,TK_ALL,0));
                   90543:   }
                   90544:   pNew->pEList = pEList;
                   90545:   pNew->pSrc = pSrc;
                   90546:   pNew->pWhere = pWhere;
                   90547:   pNew->pGroupBy = pGroupBy;
                   90548:   pNew->pHaving = pHaving;
                   90549:   pNew->pOrderBy = pOrderBy;
                   90550:   pNew->selFlags = isDistinct ? SF_Distinct : 0;
                   90551:   pNew->op = TK_SELECT;
                   90552:   pNew->pLimit = pLimit;
                   90553:   pNew->pOffset = pOffset;
                   90554:   assert( pOffset==0 || pLimit!=0 );
                   90555:   pNew->addrOpenEphm[0] = -1;
                   90556:   pNew->addrOpenEphm[1] = -1;
                   90557:   pNew->addrOpenEphm[2] = -1;
                   90558:   if( db->mallocFailed ) {
                   90559:     clearSelect(db, pNew);
                   90560:     if( pNew!=&standin ) sqlite3DbFree(db, pNew);
                   90561:     pNew = 0;
                   90562:   }
                   90563:   return pNew;
                   90564: }
                   90565: 
                   90566: /*
                   90567: ** Delete the given Select structure and all of its substructures.
                   90568: */
                   90569: SQLITE_PRIVATE void sqlite3SelectDelete(sqlite3 *db, Select *p){
                   90570:   if( p ){
                   90571:     clearSelect(db, p);
                   90572:     sqlite3DbFree(db, p);
                   90573:   }
                   90574: }
                   90575: 
                   90576: /*
1.1.1.3 ! misho    90577: ** Given 1 to 3 identifiers preceding the JOIN keyword, determine the
1.1       misho    90578: ** type of join.  Return an integer constant that expresses that type
                   90579: ** in terms of the following bit values:
                   90580: **
                   90581: **     JT_INNER
                   90582: **     JT_CROSS
                   90583: **     JT_OUTER
                   90584: **     JT_NATURAL
                   90585: **     JT_LEFT
                   90586: **     JT_RIGHT
                   90587: **
                   90588: ** A full outer join is the combination of JT_LEFT and JT_RIGHT.
                   90589: **
                   90590: ** If an illegal or unsupported join type is seen, then still return
                   90591: ** a join type, but put an error in the pParse structure.
                   90592: */
                   90593: SQLITE_PRIVATE int sqlite3JoinType(Parse *pParse, Token *pA, Token *pB, Token *pC){
                   90594:   int jointype = 0;
                   90595:   Token *apAll[3];
                   90596:   Token *p;
                   90597:                              /*   0123456789 123456789 123456789 123 */
                   90598:   static const char zKeyText[] = "naturaleftouterightfullinnercross";
                   90599:   static const struct {
                   90600:     u8 i;        /* Beginning of keyword text in zKeyText[] */
                   90601:     u8 nChar;    /* Length of the keyword in characters */
                   90602:     u8 code;     /* Join type mask */
                   90603:   } aKeyword[] = {
                   90604:     /* natural */ { 0,  7, JT_NATURAL                },
                   90605:     /* left    */ { 6,  4, JT_LEFT|JT_OUTER          },
                   90606:     /* outer   */ { 10, 5, JT_OUTER                  },
                   90607:     /* right   */ { 14, 5, JT_RIGHT|JT_OUTER         },
                   90608:     /* full    */ { 19, 4, JT_LEFT|JT_RIGHT|JT_OUTER },
                   90609:     /* inner   */ { 23, 5, JT_INNER                  },
                   90610:     /* cross   */ { 28, 5, JT_INNER|JT_CROSS         },
                   90611:   };
                   90612:   int i, j;
                   90613:   apAll[0] = pA;
                   90614:   apAll[1] = pB;
                   90615:   apAll[2] = pC;
                   90616:   for(i=0; i<3 && apAll[i]; i++){
                   90617:     p = apAll[i];
                   90618:     for(j=0; j<ArraySize(aKeyword); j++){
                   90619:       if( p->n==aKeyword[j].nChar 
                   90620:           && sqlite3StrNICmp((char*)p->z, &zKeyText[aKeyword[j].i], p->n)==0 ){
                   90621:         jointype |= aKeyword[j].code;
                   90622:         break;
                   90623:       }
                   90624:     }
                   90625:     testcase( j==0 || j==1 || j==2 || j==3 || j==4 || j==5 || j==6 );
                   90626:     if( j>=ArraySize(aKeyword) ){
                   90627:       jointype |= JT_ERROR;
                   90628:       break;
                   90629:     }
                   90630:   }
                   90631:   if(
                   90632:      (jointype & (JT_INNER|JT_OUTER))==(JT_INNER|JT_OUTER) ||
                   90633:      (jointype & JT_ERROR)!=0
                   90634:   ){
                   90635:     const char *zSp = " ";
                   90636:     assert( pB!=0 );
                   90637:     if( pC==0 ){ zSp++; }
                   90638:     sqlite3ErrorMsg(pParse, "unknown or unsupported join type: "
                   90639:        "%T %T%s%T", pA, pB, zSp, pC);
                   90640:     jointype = JT_INNER;
                   90641:   }else if( (jointype & JT_OUTER)!=0 
                   90642:          && (jointype & (JT_LEFT|JT_RIGHT))!=JT_LEFT ){
                   90643:     sqlite3ErrorMsg(pParse, 
                   90644:       "RIGHT and FULL OUTER JOINs are not currently supported");
                   90645:     jointype = JT_INNER;
                   90646:   }
                   90647:   return jointype;
                   90648: }
                   90649: 
                   90650: /*
                   90651: ** Return the index of a column in a table.  Return -1 if the column
                   90652: ** is not contained in the table.
                   90653: */
                   90654: static int columnIndex(Table *pTab, const char *zCol){
                   90655:   int i;
                   90656:   for(i=0; i<pTab->nCol; i++){
                   90657:     if( sqlite3StrICmp(pTab->aCol[i].zName, zCol)==0 ) return i;
                   90658:   }
                   90659:   return -1;
                   90660: }
                   90661: 
                   90662: /*
                   90663: ** Search the first N tables in pSrc, from left to right, looking for a
                   90664: ** table that has a column named zCol.  
                   90665: **
                   90666: ** When found, set *piTab and *piCol to the table index and column index
                   90667: ** of the matching column and return TRUE.
                   90668: **
                   90669: ** If not found, return FALSE.
                   90670: */
                   90671: static int tableAndColumnIndex(
                   90672:   SrcList *pSrc,       /* Array of tables to search */
                   90673:   int N,               /* Number of tables in pSrc->a[] to search */
                   90674:   const char *zCol,    /* Name of the column we are looking for */
                   90675:   int *piTab,          /* Write index of pSrc->a[] here */
                   90676:   int *piCol           /* Write index of pSrc->a[*piTab].pTab->aCol[] here */
                   90677: ){
                   90678:   int i;               /* For looping over tables in pSrc */
                   90679:   int iCol;            /* Index of column matching zCol */
                   90680: 
                   90681:   assert( (piTab==0)==(piCol==0) );  /* Both or neither are NULL */
                   90682:   for(i=0; i<N; i++){
                   90683:     iCol = columnIndex(pSrc->a[i].pTab, zCol);
                   90684:     if( iCol>=0 ){
                   90685:       if( piTab ){
                   90686:         *piTab = i;
                   90687:         *piCol = iCol;
                   90688:       }
                   90689:       return 1;
                   90690:     }
                   90691:   }
                   90692:   return 0;
                   90693: }
                   90694: 
                   90695: /*
                   90696: ** This function is used to add terms implied by JOIN syntax to the
                   90697: ** WHERE clause expression of a SELECT statement. The new term, which
                   90698: ** is ANDed with the existing WHERE clause, is of the form:
                   90699: **
                   90700: **    (tab1.col1 = tab2.col2)
                   90701: **
                   90702: ** where tab1 is the iSrc'th table in SrcList pSrc and tab2 is the 
                   90703: ** (iSrc+1)'th. Column col1 is column iColLeft of tab1, and col2 is
                   90704: ** column iColRight of tab2.
                   90705: */
                   90706: static void addWhereTerm(
                   90707:   Parse *pParse,                  /* Parsing context */
                   90708:   SrcList *pSrc,                  /* List of tables in FROM clause */
                   90709:   int iLeft,                      /* Index of first table to join in pSrc */
                   90710:   int iColLeft,                   /* Index of column in first table */
                   90711:   int iRight,                     /* Index of second table in pSrc */
                   90712:   int iColRight,                  /* Index of column in second table */
                   90713:   int isOuterJoin,                /* True if this is an OUTER join */
                   90714:   Expr **ppWhere                  /* IN/OUT: The WHERE clause to add to */
                   90715: ){
                   90716:   sqlite3 *db = pParse->db;
                   90717:   Expr *pE1;
                   90718:   Expr *pE2;
                   90719:   Expr *pEq;
                   90720: 
                   90721:   assert( iLeft<iRight );
                   90722:   assert( pSrc->nSrc>iRight );
                   90723:   assert( pSrc->a[iLeft].pTab );
                   90724:   assert( pSrc->a[iRight].pTab );
                   90725: 
                   90726:   pE1 = sqlite3CreateColumnExpr(db, pSrc, iLeft, iColLeft);
                   90727:   pE2 = sqlite3CreateColumnExpr(db, pSrc, iRight, iColRight);
                   90728: 
                   90729:   pEq = sqlite3PExpr(pParse, TK_EQ, pE1, pE2, 0);
                   90730:   if( pEq && isOuterJoin ){
                   90731:     ExprSetProperty(pEq, EP_FromJoin);
                   90732:     assert( !ExprHasAnyProperty(pEq, EP_TokenOnly|EP_Reduced) );
                   90733:     ExprSetIrreducible(pEq);
                   90734:     pEq->iRightJoinTable = (i16)pE2->iTable;
                   90735:   }
                   90736:   *ppWhere = sqlite3ExprAnd(db, *ppWhere, pEq);
                   90737: }
                   90738: 
                   90739: /*
                   90740: ** Set the EP_FromJoin property on all terms of the given expression.
                   90741: ** And set the Expr.iRightJoinTable to iTable for every term in the
                   90742: ** expression.
                   90743: **
                   90744: ** The EP_FromJoin property is used on terms of an expression to tell
                   90745: ** the LEFT OUTER JOIN processing logic that this term is part of the
                   90746: ** join restriction specified in the ON or USING clause and not a part
                   90747: ** of the more general WHERE clause.  These terms are moved over to the
                   90748: ** WHERE clause during join processing but we need to remember that they
                   90749: ** originated in the ON or USING clause.
                   90750: **
                   90751: ** The Expr.iRightJoinTable tells the WHERE clause processing that the
                   90752: ** expression depends on table iRightJoinTable even if that table is not
                   90753: ** explicitly mentioned in the expression.  That information is needed
                   90754: ** for cases like this:
                   90755: **
                   90756: **    SELECT * FROM t1 LEFT JOIN t2 ON t1.a=t2.b AND t1.x=5
                   90757: **
                   90758: ** The where clause needs to defer the handling of the t1.x=5
                   90759: ** term until after the t2 loop of the join.  In that way, a
                   90760: ** NULL t2 row will be inserted whenever t1.x!=5.  If we do not
                   90761: ** defer the handling of t1.x=5, it will be processed immediately
                   90762: ** after the t1 loop and rows with t1.x!=5 will never appear in
                   90763: ** the output, which is incorrect.
                   90764: */
                   90765: static void setJoinExpr(Expr *p, int iTable){
                   90766:   while( p ){
                   90767:     ExprSetProperty(p, EP_FromJoin);
                   90768:     assert( !ExprHasAnyProperty(p, EP_TokenOnly|EP_Reduced) );
                   90769:     ExprSetIrreducible(p);
                   90770:     p->iRightJoinTable = (i16)iTable;
                   90771:     setJoinExpr(p->pLeft, iTable);
                   90772:     p = p->pRight;
                   90773:   } 
                   90774: }
                   90775: 
                   90776: /*
                   90777: ** This routine processes the join information for a SELECT statement.
                   90778: ** ON and USING clauses are converted into extra terms of the WHERE clause.
                   90779: ** NATURAL joins also create extra WHERE clause terms.
                   90780: **
                   90781: ** The terms of a FROM clause are contained in the Select.pSrc structure.
                   90782: ** The left most table is the first entry in Select.pSrc.  The right-most
                   90783: ** table is the last entry.  The join operator is held in the entry to
                   90784: ** the left.  Thus entry 0 contains the join operator for the join between
                   90785: ** entries 0 and 1.  Any ON or USING clauses associated with the join are
                   90786: ** also attached to the left entry.
                   90787: **
                   90788: ** This routine returns the number of errors encountered.
                   90789: */
                   90790: static int sqliteProcessJoin(Parse *pParse, Select *p){
                   90791:   SrcList *pSrc;                  /* All tables in the FROM clause */
                   90792:   int i, j;                       /* Loop counters */
                   90793:   struct SrcList_item *pLeft;     /* Left table being joined */
                   90794:   struct SrcList_item *pRight;    /* Right table being joined */
                   90795: 
                   90796:   pSrc = p->pSrc;
                   90797:   pLeft = &pSrc->a[0];
                   90798:   pRight = &pLeft[1];
                   90799:   for(i=0; i<pSrc->nSrc-1; i++, pRight++, pLeft++){
                   90800:     Table *pLeftTab = pLeft->pTab;
                   90801:     Table *pRightTab = pRight->pTab;
                   90802:     int isOuter;
                   90803: 
                   90804:     if( NEVER(pLeftTab==0 || pRightTab==0) ) continue;
                   90805:     isOuter = (pRight->jointype & JT_OUTER)!=0;
                   90806: 
                   90807:     /* When the NATURAL keyword is present, add WHERE clause terms for
                   90808:     ** every column that the two tables have in common.
                   90809:     */
                   90810:     if( pRight->jointype & JT_NATURAL ){
                   90811:       if( pRight->pOn || pRight->pUsing ){
                   90812:         sqlite3ErrorMsg(pParse, "a NATURAL join may not have "
                   90813:            "an ON or USING clause", 0);
                   90814:         return 1;
                   90815:       }
                   90816:       for(j=0; j<pRightTab->nCol; j++){
                   90817:         char *zName;   /* Name of column in the right table */
                   90818:         int iLeft;     /* Matching left table */
                   90819:         int iLeftCol;  /* Matching column in the left table */
                   90820: 
                   90821:         zName = pRightTab->aCol[j].zName;
                   90822:         if( tableAndColumnIndex(pSrc, i+1, zName, &iLeft, &iLeftCol) ){
                   90823:           addWhereTerm(pParse, pSrc, iLeft, iLeftCol, i+1, j,
                   90824:                        isOuter, &p->pWhere);
                   90825:         }
                   90826:       }
                   90827:     }
                   90828: 
                   90829:     /* Disallow both ON and USING clauses in the same join
                   90830:     */
                   90831:     if( pRight->pOn && pRight->pUsing ){
                   90832:       sqlite3ErrorMsg(pParse, "cannot have both ON and USING "
                   90833:         "clauses in the same join");
                   90834:       return 1;
                   90835:     }
                   90836: 
                   90837:     /* Add the ON clause to the end of the WHERE clause, connected by
                   90838:     ** an AND operator.
                   90839:     */
                   90840:     if( pRight->pOn ){
                   90841:       if( isOuter ) setJoinExpr(pRight->pOn, pRight->iCursor);
                   90842:       p->pWhere = sqlite3ExprAnd(pParse->db, p->pWhere, pRight->pOn);
                   90843:       pRight->pOn = 0;
                   90844:     }
                   90845: 
                   90846:     /* Create extra terms on the WHERE clause for each column named
                   90847:     ** in the USING clause.  Example: If the two tables to be joined are 
                   90848:     ** A and B and the USING clause names X, Y, and Z, then add this
                   90849:     ** to the WHERE clause:    A.X=B.X AND A.Y=B.Y AND A.Z=B.Z
                   90850:     ** Report an error if any column mentioned in the USING clause is
                   90851:     ** not contained in both tables to be joined.
                   90852:     */
                   90853:     if( pRight->pUsing ){
                   90854:       IdList *pList = pRight->pUsing;
                   90855:       for(j=0; j<pList->nId; j++){
                   90856:         char *zName;     /* Name of the term in the USING clause */
                   90857:         int iLeft;       /* Table on the left with matching column name */
                   90858:         int iLeftCol;    /* Column number of matching column on the left */
                   90859:         int iRightCol;   /* Column number of matching column on the right */
                   90860: 
                   90861:         zName = pList->a[j].zName;
                   90862:         iRightCol = columnIndex(pRightTab, zName);
                   90863:         if( iRightCol<0
                   90864:          || !tableAndColumnIndex(pSrc, i+1, zName, &iLeft, &iLeftCol)
                   90865:         ){
                   90866:           sqlite3ErrorMsg(pParse, "cannot join using column %s - column "
                   90867:             "not present in both tables", zName);
                   90868:           return 1;
                   90869:         }
                   90870:         addWhereTerm(pParse, pSrc, iLeft, iLeftCol, i+1, iRightCol,
                   90871:                      isOuter, &p->pWhere);
                   90872:       }
                   90873:     }
                   90874:   }
                   90875:   return 0;
                   90876: }
                   90877: 
                   90878: /*
                   90879: ** Insert code into "v" that will push the record on the top of the
                   90880: ** stack into the sorter.
                   90881: */
                   90882: static void pushOntoSorter(
                   90883:   Parse *pParse,         /* Parser context */
                   90884:   ExprList *pOrderBy,    /* The ORDER BY clause */
                   90885:   Select *pSelect,       /* The whole SELECT statement */
                   90886:   int regData            /* Register holding data to be sorted */
                   90887: ){
                   90888:   Vdbe *v = pParse->pVdbe;
                   90889:   int nExpr = pOrderBy->nExpr;
                   90890:   int regBase = sqlite3GetTempRange(pParse, nExpr+2);
                   90891:   int regRecord = sqlite3GetTempReg(pParse);
                   90892:   sqlite3ExprCacheClear(pParse);
                   90893:   sqlite3ExprCodeExprList(pParse, pOrderBy, regBase, 0);
                   90894:   sqlite3VdbeAddOp2(v, OP_Sequence, pOrderBy->iECursor, regBase+nExpr);
                   90895:   sqlite3ExprCodeMove(pParse, regData, regBase+nExpr+1, 1);
                   90896:   sqlite3VdbeAddOp3(v, OP_MakeRecord, regBase, nExpr + 2, regRecord);
                   90897:   sqlite3VdbeAddOp2(v, OP_IdxInsert, pOrderBy->iECursor, regRecord);
                   90898:   sqlite3ReleaseTempReg(pParse, regRecord);
                   90899:   sqlite3ReleaseTempRange(pParse, regBase, nExpr+2);
                   90900:   if( pSelect->iLimit ){
                   90901:     int addr1, addr2;
                   90902:     int iLimit;
                   90903:     if( pSelect->iOffset ){
                   90904:       iLimit = pSelect->iOffset+1;
                   90905:     }else{
                   90906:       iLimit = pSelect->iLimit;
                   90907:     }
                   90908:     addr1 = sqlite3VdbeAddOp1(v, OP_IfZero, iLimit);
                   90909:     sqlite3VdbeAddOp2(v, OP_AddImm, iLimit, -1);
                   90910:     addr2 = sqlite3VdbeAddOp0(v, OP_Goto);
                   90911:     sqlite3VdbeJumpHere(v, addr1);
                   90912:     sqlite3VdbeAddOp1(v, OP_Last, pOrderBy->iECursor);
                   90913:     sqlite3VdbeAddOp1(v, OP_Delete, pOrderBy->iECursor);
                   90914:     sqlite3VdbeJumpHere(v, addr2);
                   90915:   }
                   90916: }
                   90917: 
                   90918: /*
                   90919: ** Add code to implement the OFFSET
                   90920: */
                   90921: static void codeOffset(
                   90922:   Vdbe *v,          /* Generate code into this VM */
                   90923:   Select *p,        /* The SELECT statement being coded */
                   90924:   int iContinue     /* Jump here to skip the current record */
                   90925: ){
                   90926:   if( p->iOffset && iContinue!=0 ){
                   90927:     int addr;
                   90928:     sqlite3VdbeAddOp2(v, OP_AddImm, p->iOffset, -1);
                   90929:     addr = sqlite3VdbeAddOp1(v, OP_IfNeg, p->iOffset);
                   90930:     sqlite3VdbeAddOp2(v, OP_Goto, 0, iContinue);
                   90931:     VdbeComment((v, "skip OFFSET records"));
                   90932:     sqlite3VdbeJumpHere(v, addr);
                   90933:   }
                   90934: }
                   90935: 
                   90936: /*
                   90937: ** Add code that will check to make sure the N registers starting at iMem
                   90938: ** form a distinct entry.  iTab is a sorting index that holds previously
                   90939: ** seen combinations of the N values.  A new entry is made in iTab
                   90940: ** if the current N values are new.
                   90941: **
                   90942: ** A jump to addrRepeat is made and the N+1 values are popped from the
                   90943: ** stack if the top N elements are not distinct.
                   90944: */
                   90945: static void codeDistinct(
                   90946:   Parse *pParse,     /* Parsing and code generating context */
                   90947:   int iTab,          /* A sorting index used to test for distinctness */
                   90948:   int addrRepeat,    /* Jump to here if not distinct */
                   90949:   int N,             /* Number of elements */
                   90950:   int iMem           /* First element */
                   90951: ){
                   90952:   Vdbe *v;
                   90953:   int r1;
                   90954: 
                   90955:   v = pParse->pVdbe;
                   90956:   r1 = sqlite3GetTempReg(pParse);
                   90957:   sqlite3VdbeAddOp4Int(v, OP_Found, iTab, addrRepeat, iMem, N);
                   90958:   sqlite3VdbeAddOp3(v, OP_MakeRecord, iMem, N, r1);
                   90959:   sqlite3VdbeAddOp2(v, OP_IdxInsert, iTab, r1);
                   90960:   sqlite3ReleaseTempReg(pParse, r1);
                   90961: }
                   90962: 
                   90963: #ifndef SQLITE_OMIT_SUBQUERY
                   90964: /*
                   90965: ** Generate an error message when a SELECT is used within a subexpression
                   90966: ** (example:  "a IN (SELECT * FROM table)") but it has more than 1 result
                   90967: ** column.  We do this in a subroutine because the error used to occur
                   90968: ** in multiple places.  (The error only occurs in one place now, but we
                   90969: ** retain the subroutine to minimize code disruption.)
                   90970: */
                   90971: static int checkForMultiColumnSelectError(
                   90972:   Parse *pParse,       /* Parse context. */
                   90973:   SelectDest *pDest,   /* Destination of SELECT results */
                   90974:   int nExpr            /* Number of result columns returned by SELECT */
                   90975: ){
                   90976:   int eDest = pDest->eDest;
                   90977:   if( nExpr>1 && (eDest==SRT_Mem || eDest==SRT_Set) ){
                   90978:     sqlite3ErrorMsg(pParse, "only a single result allowed for "
                   90979:        "a SELECT that is part of an expression");
                   90980:     return 1;
                   90981:   }else{
                   90982:     return 0;
                   90983:   }
                   90984: }
                   90985: #endif
                   90986: 
                   90987: /*
                   90988: ** This routine generates the code for the inside of the inner loop
                   90989: ** of a SELECT.
                   90990: **
                   90991: ** If srcTab and nColumn are both zero, then the pEList expressions
                   90992: ** are evaluated in order to get the data for this row.  If nColumn>0
                   90993: ** then data is pulled from srcTab and pEList is used only to get the
                   90994: ** datatypes for each column.
                   90995: */
                   90996: static void selectInnerLoop(
                   90997:   Parse *pParse,          /* The parser context */
                   90998:   Select *p,              /* The complete select statement being coded */
                   90999:   ExprList *pEList,       /* List of values being extracted */
                   91000:   int srcTab,             /* Pull data from this table */
                   91001:   int nColumn,            /* Number of columns in the source table */
                   91002:   ExprList *pOrderBy,     /* If not NULL, sort results using this key */
                   91003:   int distinct,           /* If >=0, make sure results are distinct */
                   91004:   SelectDest *pDest,      /* How to dispose of the results */
                   91005:   int iContinue,          /* Jump here to continue with next row */
                   91006:   int iBreak              /* Jump here to break out of the inner loop */
                   91007: ){
                   91008:   Vdbe *v = pParse->pVdbe;
                   91009:   int i;
                   91010:   int hasDistinct;        /* True if the DISTINCT keyword is present */
                   91011:   int regResult;              /* Start of memory holding result set */
                   91012:   int eDest = pDest->eDest;   /* How to dispose of results */
                   91013:   int iParm = pDest->iParm;   /* First argument to disposal method */
                   91014:   int nResultCol;             /* Number of result columns */
                   91015: 
                   91016:   assert( v );
                   91017:   if( NEVER(v==0) ) return;
                   91018:   assert( pEList!=0 );
                   91019:   hasDistinct = distinct>=0;
                   91020:   if( pOrderBy==0 && !hasDistinct ){
                   91021:     codeOffset(v, p, iContinue);
                   91022:   }
                   91023: 
                   91024:   /* Pull the requested columns.
                   91025:   */
                   91026:   if( nColumn>0 ){
                   91027:     nResultCol = nColumn;
                   91028:   }else{
                   91029:     nResultCol = pEList->nExpr;
                   91030:   }
                   91031:   if( pDest->iMem==0 ){
                   91032:     pDest->iMem = pParse->nMem+1;
                   91033:     pDest->nMem = nResultCol;
                   91034:     pParse->nMem += nResultCol;
                   91035:   }else{ 
                   91036:     assert( pDest->nMem==nResultCol );
                   91037:   }
                   91038:   regResult = pDest->iMem;
                   91039:   if( nColumn>0 ){
                   91040:     for(i=0; i<nColumn; i++){
                   91041:       sqlite3VdbeAddOp3(v, OP_Column, srcTab, i, regResult+i);
                   91042:     }
                   91043:   }else if( eDest!=SRT_Exists ){
                   91044:     /* If the destination is an EXISTS(...) expression, the actual
                   91045:     ** values returned by the SELECT are not required.
                   91046:     */
                   91047:     sqlite3ExprCacheClear(pParse);
                   91048:     sqlite3ExprCodeExprList(pParse, pEList, regResult, eDest==SRT_Output);
                   91049:   }
                   91050:   nColumn = nResultCol;
                   91051: 
                   91052:   /* If the DISTINCT keyword was present on the SELECT statement
                   91053:   ** and this row has been seen before, then do not make this row
                   91054:   ** part of the result.
                   91055:   */
                   91056:   if( hasDistinct ){
                   91057:     assert( pEList!=0 );
                   91058:     assert( pEList->nExpr==nColumn );
                   91059:     codeDistinct(pParse, distinct, iContinue, nColumn, regResult);
                   91060:     if( pOrderBy==0 ){
                   91061:       codeOffset(v, p, iContinue);
                   91062:     }
                   91063:   }
                   91064: 
                   91065:   switch( eDest ){
                   91066:     /* In this mode, write each query result to the key of the temporary
                   91067:     ** table iParm.
                   91068:     */
                   91069: #ifndef SQLITE_OMIT_COMPOUND_SELECT
                   91070:     case SRT_Union: {
                   91071:       int r1;
                   91072:       r1 = sqlite3GetTempReg(pParse);
                   91073:       sqlite3VdbeAddOp3(v, OP_MakeRecord, regResult, nColumn, r1);
                   91074:       sqlite3VdbeAddOp2(v, OP_IdxInsert, iParm, r1);
                   91075:       sqlite3ReleaseTempReg(pParse, r1);
                   91076:       break;
                   91077:     }
                   91078: 
                   91079:     /* Construct a record from the query result, but instead of
                   91080:     ** saving that record, use it as a key to delete elements from
                   91081:     ** the temporary table iParm.
                   91082:     */
                   91083:     case SRT_Except: {
                   91084:       sqlite3VdbeAddOp3(v, OP_IdxDelete, iParm, regResult, nColumn);
                   91085:       break;
                   91086:     }
                   91087: #endif
                   91088: 
                   91089:     /* Store the result as data using a unique key.
                   91090:     */
                   91091:     case SRT_Table:
                   91092:     case SRT_EphemTab: {
                   91093:       int r1 = sqlite3GetTempReg(pParse);
                   91094:       testcase( eDest==SRT_Table );
                   91095:       testcase( eDest==SRT_EphemTab );
                   91096:       sqlite3VdbeAddOp3(v, OP_MakeRecord, regResult, nColumn, r1);
                   91097:       if( pOrderBy ){
                   91098:         pushOntoSorter(pParse, pOrderBy, p, r1);
                   91099:       }else{
                   91100:         int r2 = sqlite3GetTempReg(pParse);
                   91101:         sqlite3VdbeAddOp2(v, OP_NewRowid, iParm, r2);
                   91102:         sqlite3VdbeAddOp3(v, OP_Insert, iParm, r1, r2);
                   91103:         sqlite3VdbeChangeP5(v, OPFLAG_APPEND);
                   91104:         sqlite3ReleaseTempReg(pParse, r2);
                   91105:       }
                   91106:       sqlite3ReleaseTempReg(pParse, r1);
                   91107:       break;
                   91108:     }
                   91109: 
                   91110: #ifndef SQLITE_OMIT_SUBQUERY
                   91111:     /* If we are creating a set for an "expr IN (SELECT ...)" construct,
                   91112:     ** then there should be a single item on the stack.  Write this
                   91113:     ** item into the set table with bogus data.
                   91114:     */
                   91115:     case SRT_Set: {
                   91116:       assert( nColumn==1 );
                   91117:       p->affinity = sqlite3CompareAffinity(pEList->a[0].pExpr, pDest->affinity);
                   91118:       if( pOrderBy ){
                   91119:         /* At first glance you would think we could optimize out the
                   91120:         ** ORDER BY in this case since the order of entries in the set
                   91121:         ** does not matter.  But there might be a LIMIT clause, in which
                   91122:         ** case the order does matter */
                   91123:         pushOntoSorter(pParse, pOrderBy, p, regResult);
                   91124:       }else{
                   91125:         int r1 = sqlite3GetTempReg(pParse);
                   91126:         sqlite3VdbeAddOp4(v, OP_MakeRecord, regResult, 1, r1, &p->affinity, 1);
                   91127:         sqlite3ExprCacheAffinityChange(pParse, regResult, 1);
                   91128:         sqlite3VdbeAddOp2(v, OP_IdxInsert, iParm, r1);
                   91129:         sqlite3ReleaseTempReg(pParse, r1);
                   91130:       }
                   91131:       break;
                   91132:     }
                   91133: 
                   91134:     /* If any row exist in the result set, record that fact and abort.
                   91135:     */
                   91136:     case SRT_Exists: {
                   91137:       sqlite3VdbeAddOp2(v, OP_Integer, 1, iParm);
                   91138:       /* The LIMIT clause will terminate the loop for us */
                   91139:       break;
                   91140:     }
                   91141: 
                   91142:     /* If this is a scalar select that is part of an expression, then
                   91143:     ** store the results in the appropriate memory cell and break out
                   91144:     ** of the scan loop.
                   91145:     */
                   91146:     case SRT_Mem: {
                   91147:       assert( nColumn==1 );
                   91148:       if( pOrderBy ){
                   91149:         pushOntoSorter(pParse, pOrderBy, p, regResult);
                   91150:       }else{
                   91151:         sqlite3ExprCodeMove(pParse, regResult, iParm, 1);
                   91152:         /* The LIMIT clause will jump out of the loop for us */
                   91153:       }
                   91154:       break;
                   91155:     }
                   91156: #endif /* #ifndef SQLITE_OMIT_SUBQUERY */
                   91157: 
                   91158:     /* Send the data to the callback function or to a subroutine.  In the
                   91159:     ** case of a subroutine, the subroutine itself is responsible for
                   91160:     ** popping the data from the stack.
                   91161:     */
                   91162:     case SRT_Coroutine:
                   91163:     case SRT_Output: {
                   91164:       testcase( eDest==SRT_Coroutine );
                   91165:       testcase( eDest==SRT_Output );
                   91166:       if( pOrderBy ){
                   91167:         int r1 = sqlite3GetTempReg(pParse);
                   91168:         sqlite3VdbeAddOp3(v, OP_MakeRecord, regResult, nColumn, r1);
                   91169:         pushOntoSorter(pParse, pOrderBy, p, r1);
                   91170:         sqlite3ReleaseTempReg(pParse, r1);
                   91171:       }else if( eDest==SRT_Coroutine ){
                   91172:         sqlite3VdbeAddOp1(v, OP_Yield, pDest->iParm);
                   91173:       }else{
                   91174:         sqlite3VdbeAddOp2(v, OP_ResultRow, regResult, nColumn);
                   91175:         sqlite3ExprCacheAffinityChange(pParse, regResult, nColumn);
                   91176:       }
                   91177:       break;
                   91178:     }
                   91179: 
                   91180: #if !defined(SQLITE_OMIT_TRIGGER)
                   91181:     /* Discard the results.  This is used for SELECT statements inside
                   91182:     ** the body of a TRIGGER.  The purpose of such selects is to call
                   91183:     ** user-defined functions that have side effects.  We do not care
                   91184:     ** about the actual results of the select.
                   91185:     */
                   91186:     default: {
                   91187:       assert( eDest==SRT_Discard );
                   91188:       break;
                   91189:     }
                   91190: #endif
                   91191:   }
                   91192: 
                   91193:   /* Jump to the end of the loop if the LIMIT is reached.  Except, if
                   91194:   ** there is a sorter, in which case the sorter has already limited
                   91195:   ** the output for us.
                   91196:   */
                   91197:   if( pOrderBy==0 && p->iLimit ){
                   91198:     sqlite3VdbeAddOp3(v, OP_IfZero, p->iLimit, iBreak, -1);
                   91199:   }
                   91200: }
                   91201: 
                   91202: /*
                   91203: ** Given an expression list, generate a KeyInfo structure that records
                   91204: ** the collating sequence for each expression in that expression list.
                   91205: **
                   91206: ** If the ExprList is an ORDER BY or GROUP BY clause then the resulting
                   91207: ** KeyInfo structure is appropriate for initializing a virtual index to
                   91208: ** implement that clause.  If the ExprList is the result set of a SELECT
                   91209: ** then the KeyInfo structure is appropriate for initializing a virtual
                   91210: ** index to implement a DISTINCT test.
                   91211: **
                   91212: ** Space to hold the KeyInfo structure is obtain from malloc.  The calling
                   91213: ** function is responsible for seeing that this structure is eventually
                   91214: ** freed.  Add the KeyInfo structure to the P4 field of an opcode using
                   91215: ** P4_KEYINFO_HANDOFF is the usual way of dealing with this.
                   91216: */
                   91217: static KeyInfo *keyInfoFromExprList(Parse *pParse, ExprList *pList){
                   91218:   sqlite3 *db = pParse->db;
                   91219:   int nExpr;
                   91220:   KeyInfo *pInfo;
                   91221:   struct ExprList_item *pItem;
                   91222:   int i;
                   91223: 
                   91224:   nExpr = pList->nExpr;
                   91225:   pInfo = sqlite3DbMallocZero(db, sizeof(*pInfo) + nExpr*(sizeof(CollSeq*)+1) );
                   91226:   if( pInfo ){
                   91227:     pInfo->aSortOrder = (u8*)&pInfo->aColl[nExpr];
                   91228:     pInfo->nField = (u16)nExpr;
                   91229:     pInfo->enc = ENC(db);
                   91230:     pInfo->db = db;
                   91231:     for(i=0, pItem=pList->a; i<nExpr; i++, pItem++){
                   91232:       CollSeq *pColl;
                   91233:       pColl = sqlite3ExprCollSeq(pParse, pItem->pExpr);
                   91234:       if( !pColl ){
                   91235:         pColl = db->pDfltColl;
                   91236:       }
                   91237:       pInfo->aColl[i] = pColl;
                   91238:       pInfo->aSortOrder[i] = pItem->sortOrder;
                   91239:     }
                   91240:   }
                   91241:   return pInfo;
                   91242: }
                   91243: 
                   91244: #ifndef SQLITE_OMIT_COMPOUND_SELECT
                   91245: /*
                   91246: ** Name of the connection operator, used for error messages.
                   91247: */
                   91248: static const char *selectOpName(int id){
                   91249:   char *z;
                   91250:   switch( id ){
                   91251:     case TK_ALL:       z = "UNION ALL";   break;
                   91252:     case TK_INTERSECT: z = "INTERSECT";   break;
                   91253:     case TK_EXCEPT:    z = "EXCEPT";      break;
                   91254:     default:           z = "UNION";       break;
                   91255:   }
                   91256:   return z;
                   91257: }
                   91258: #endif /* SQLITE_OMIT_COMPOUND_SELECT */
                   91259: 
                   91260: #ifndef SQLITE_OMIT_EXPLAIN
                   91261: /*
                   91262: ** Unless an "EXPLAIN QUERY PLAN" command is being processed, this function
                   91263: ** is a no-op. Otherwise, it adds a single row of output to the EQP result,
                   91264: ** where the caption is of the form:
                   91265: **
                   91266: **   "USE TEMP B-TREE FOR xxx"
                   91267: **
                   91268: ** where xxx is one of "DISTINCT", "ORDER BY" or "GROUP BY". Exactly which
                   91269: ** is determined by the zUsage argument.
                   91270: */
                   91271: static void explainTempTable(Parse *pParse, const char *zUsage){
                   91272:   if( pParse->explain==2 ){
                   91273:     Vdbe *v = pParse->pVdbe;
                   91274:     char *zMsg = sqlite3MPrintf(pParse->db, "USE TEMP B-TREE FOR %s", zUsage);
                   91275:     sqlite3VdbeAddOp4(v, OP_Explain, pParse->iSelectId, 0, 0, zMsg, P4_DYNAMIC);
                   91276:   }
                   91277: }
                   91278: 
                   91279: /*
                   91280: ** Assign expression b to lvalue a. A second, no-op, version of this macro
                   91281: ** is provided when SQLITE_OMIT_EXPLAIN is defined. This allows the code
                   91282: ** in sqlite3Select() to assign values to structure member variables that
                   91283: ** only exist if SQLITE_OMIT_EXPLAIN is not defined without polluting the
                   91284: ** code with #ifndef directives.
                   91285: */
                   91286: # define explainSetInteger(a, b) a = b
                   91287: 
                   91288: #else
                   91289: /* No-op versions of the explainXXX() functions and macros. */
                   91290: # define explainTempTable(y,z)
                   91291: # define explainSetInteger(y,z)
                   91292: #endif
                   91293: 
                   91294: #if !defined(SQLITE_OMIT_EXPLAIN) && !defined(SQLITE_OMIT_COMPOUND_SELECT)
                   91295: /*
                   91296: ** Unless an "EXPLAIN QUERY PLAN" command is being processed, this function
                   91297: ** is a no-op. Otherwise, it adds a single row of output to the EQP result,
                   91298: ** where the caption is of one of the two forms:
                   91299: **
                   91300: **   "COMPOSITE SUBQUERIES iSub1 and iSub2 (op)"
                   91301: **   "COMPOSITE SUBQUERIES iSub1 and iSub2 USING TEMP B-TREE (op)"
                   91302: **
                   91303: ** where iSub1 and iSub2 are the integers passed as the corresponding
                   91304: ** function parameters, and op is the text representation of the parameter
                   91305: ** of the same name. The parameter "op" must be one of TK_UNION, TK_EXCEPT,
                   91306: ** TK_INTERSECT or TK_ALL. The first form is used if argument bUseTmp is 
                   91307: ** false, or the second form if it is true.
                   91308: */
                   91309: static void explainComposite(
                   91310:   Parse *pParse,                  /* Parse context */
                   91311:   int op,                         /* One of TK_UNION, TK_EXCEPT etc. */
                   91312:   int iSub1,                      /* Subquery id 1 */
                   91313:   int iSub2,                      /* Subquery id 2 */
                   91314:   int bUseTmp                     /* True if a temp table was used */
                   91315: ){
                   91316:   assert( op==TK_UNION || op==TK_EXCEPT || op==TK_INTERSECT || op==TK_ALL );
                   91317:   if( pParse->explain==2 ){
                   91318:     Vdbe *v = pParse->pVdbe;
                   91319:     char *zMsg = sqlite3MPrintf(
                   91320:         pParse->db, "COMPOUND SUBQUERIES %d AND %d %s(%s)", iSub1, iSub2,
                   91321:         bUseTmp?"USING TEMP B-TREE ":"", selectOpName(op)
                   91322:     );
                   91323:     sqlite3VdbeAddOp4(v, OP_Explain, pParse->iSelectId, 0, 0, zMsg, P4_DYNAMIC);
                   91324:   }
                   91325: }
                   91326: #else
                   91327: /* No-op versions of the explainXXX() functions and macros. */
                   91328: # define explainComposite(v,w,x,y,z)
                   91329: #endif
                   91330: 
                   91331: /*
                   91332: ** If the inner loop was generated using a non-null pOrderBy argument,
                   91333: ** then the results were placed in a sorter.  After the loop is terminated
                   91334: ** we need to run the sorter and output the results.  The following
                   91335: ** routine generates the code needed to do that.
                   91336: */
                   91337: static void generateSortTail(
                   91338:   Parse *pParse,    /* Parsing context */
                   91339:   Select *p,        /* The SELECT statement */
                   91340:   Vdbe *v,          /* Generate code into this VDBE */
                   91341:   int nColumn,      /* Number of columns of data */
                   91342:   SelectDest *pDest /* Write the sorted results here */
                   91343: ){
                   91344:   int addrBreak = sqlite3VdbeMakeLabel(v);     /* Jump here to exit loop */
                   91345:   int addrContinue = sqlite3VdbeMakeLabel(v);  /* Jump here for next cycle */
                   91346:   int addr;
                   91347:   int iTab;
                   91348:   int pseudoTab = 0;
                   91349:   ExprList *pOrderBy = p->pOrderBy;
                   91350: 
                   91351:   int eDest = pDest->eDest;
                   91352:   int iParm = pDest->iParm;
                   91353: 
                   91354:   int regRow;
                   91355:   int regRowid;
                   91356: 
                   91357:   iTab = pOrderBy->iECursor;
                   91358:   regRow = sqlite3GetTempReg(pParse);
                   91359:   if( eDest==SRT_Output || eDest==SRT_Coroutine ){
                   91360:     pseudoTab = pParse->nTab++;
                   91361:     sqlite3VdbeAddOp3(v, OP_OpenPseudo, pseudoTab, regRow, nColumn);
                   91362:     regRowid = 0;
                   91363:   }else{
                   91364:     regRowid = sqlite3GetTempReg(pParse);
                   91365:   }
                   91366:   addr = 1 + sqlite3VdbeAddOp2(v, OP_Sort, iTab, addrBreak);
                   91367:   codeOffset(v, p, addrContinue);
                   91368:   sqlite3VdbeAddOp3(v, OP_Column, iTab, pOrderBy->nExpr + 1, regRow);
                   91369:   switch( eDest ){
                   91370:     case SRT_Table:
                   91371:     case SRT_EphemTab: {
                   91372:       testcase( eDest==SRT_Table );
                   91373:       testcase( eDest==SRT_EphemTab );
                   91374:       sqlite3VdbeAddOp2(v, OP_NewRowid, iParm, regRowid);
                   91375:       sqlite3VdbeAddOp3(v, OP_Insert, iParm, regRow, regRowid);
                   91376:       sqlite3VdbeChangeP5(v, OPFLAG_APPEND);
                   91377:       break;
                   91378:     }
                   91379: #ifndef SQLITE_OMIT_SUBQUERY
                   91380:     case SRT_Set: {
                   91381:       assert( nColumn==1 );
                   91382:       sqlite3VdbeAddOp4(v, OP_MakeRecord, regRow, 1, regRowid, &p->affinity, 1);
                   91383:       sqlite3ExprCacheAffinityChange(pParse, regRow, 1);
                   91384:       sqlite3VdbeAddOp2(v, OP_IdxInsert, iParm, regRowid);
                   91385:       break;
                   91386:     }
                   91387:     case SRT_Mem: {
                   91388:       assert( nColumn==1 );
                   91389:       sqlite3ExprCodeMove(pParse, regRow, iParm, 1);
                   91390:       /* The LIMIT clause will terminate the loop for us */
                   91391:       break;
                   91392:     }
                   91393: #endif
                   91394:     default: {
                   91395:       int i;
                   91396:       assert( eDest==SRT_Output || eDest==SRT_Coroutine ); 
                   91397:       testcase( eDest==SRT_Output );
                   91398:       testcase( eDest==SRT_Coroutine );
                   91399:       for(i=0; i<nColumn; i++){
                   91400:         assert( regRow!=pDest->iMem+i );
                   91401:         sqlite3VdbeAddOp3(v, OP_Column, pseudoTab, i, pDest->iMem+i);
                   91402:         if( i==0 ){
                   91403:           sqlite3VdbeChangeP5(v, OPFLAG_CLEARCACHE);
                   91404:         }
                   91405:       }
                   91406:       if( eDest==SRT_Output ){
                   91407:         sqlite3VdbeAddOp2(v, OP_ResultRow, pDest->iMem, nColumn);
                   91408:         sqlite3ExprCacheAffinityChange(pParse, pDest->iMem, nColumn);
                   91409:       }else{
                   91410:         sqlite3VdbeAddOp1(v, OP_Yield, pDest->iParm);
                   91411:       }
                   91412:       break;
                   91413:     }
                   91414:   }
                   91415:   sqlite3ReleaseTempReg(pParse, regRow);
                   91416:   sqlite3ReleaseTempReg(pParse, regRowid);
                   91417: 
                   91418:   /* The bottom of the loop
                   91419:   */
                   91420:   sqlite3VdbeResolveLabel(v, addrContinue);
                   91421:   sqlite3VdbeAddOp2(v, OP_Next, iTab, addr);
                   91422:   sqlite3VdbeResolveLabel(v, addrBreak);
                   91423:   if( eDest==SRT_Output || eDest==SRT_Coroutine ){
                   91424:     sqlite3VdbeAddOp2(v, OP_Close, pseudoTab, 0);
                   91425:   }
                   91426: }
                   91427: 
                   91428: /*
                   91429: ** Return a pointer to a string containing the 'declaration type' of the
                   91430: ** expression pExpr. The string may be treated as static by the caller.
                   91431: **
                   91432: ** The declaration type is the exact datatype definition extracted from the
                   91433: ** original CREATE TABLE statement if the expression is a column. The
                   91434: ** declaration type for a ROWID field is INTEGER. Exactly when an expression
                   91435: ** is considered a column can be complex in the presence of subqueries. The
                   91436: ** result-set expression in all of the following SELECT statements is 
                   91437: ** considered a column by this function.
                   91438: **
                   91439: **   SELECT col FROM tbl;
                   91440: **   SELECT (SELECT col FROM tbl;
                   91441: **   SELECT (SELECT col FROM tbl);
                   91442: **   SELECT abc FROM (SELECT col AS abc FROM tbl);
                   91443: ** 
                   91444: ** The declaration type for any expression other than a column is NULL.
                   91445: */
                   91446: static const char *columnType(
                   91447:   NameContext *pNC, 
                   91448:   Expr *pExpr,
                   91449:   const char **pzOriginDb,
                   91450:   const char **pzOriginTab,
                   91451:   const char **pzOriginCol
                   91452: ){
                   91453:   char const *zType = 0;
                   91454:   char const *zOriginDb = 0;
                   91455:   char const *zOriginTab = 0;
                   91456:   char const *zOriginCol = 0;
                   91457:   int j;
                   91458:   if( NEVER(pExpr==0) || pNC->pSrcList==0 ) return 0;
                   91459: 
                   91460:   switch( pExpr->op ){
                   91461:     case TK_AGG_COLUMN:
                   91462:     case TK_COLUMN: {
                   91463:       /* The expression is a column. Locate the table the column is being
                   91464:       ** extracted from in NameContext.pSrcList. This table may be real
                   91465:       ** database table or a subquery.
                   91466:       */
                   91467:       Table *pTab = 0;            /* Table structure column is extracted from */
                   91468:       Select *pS = 0;             /* Select the column is extracted from */
                   91469:       int iCol = pExpr->iColumn;  /* Index of column in pTab */
                   91470:       testcase( pExpr->op==TK_AGG_COLUMN );
                   91471:       testcase( pExpr->op==TK_COLUMN );
                   91472:       while( pNC && !pTab ){
                   91473:         SrcList *pTabList = pNC->pSrcList;
                   91474:         for(j=0;j<pTabList->nSrc && pTabList->a[j].iCursor!=pExpr->iTable;j++);
                   91475:         if( j<pTabList->nSrc ){
                   91476:           pTab = pTabList->a[j].pTab;
                   91477:           pS = pTabList->a[j].pSelect;
                   91478:         }else{
                   91479:           pNC = pNC->pNext;
                   91480:         }
                   91481:       }
                   91482: 
                   91483:       if( pTab==0 ){
                   91484:         /* At one time, code such as "SELECT new.x" within a trigger would
                   91485:         ** cause this condition to run.  Since then, we have restructured how
                   91486:         ** trigger code is generated and so this condition is no longer 
                   91487:         ** possible. However, it can still be true for statements like
                   91488:         ** the following:
                   91489:         **
                   91490:         **   CREATE TABLE t1(col INTEGER);
                   91491:         **   SELECT (SELECT t1.col) FROM FROM t1;
                   91492:         **
                   91493:         ** when columnType() is called on the expression "t1.col" in the 
                   91494:         ** sub-select. In this case, set the column type to NULL, even
                   91495:         ** though it should really be "INTEGER".
                   91496:         **
                   91497:         ** This is not a problem, as the column type of "t1.col" is never
                   91498:         ** used. When columnType() is called on the expression 
                   91499:         ** "(SELECT t1.col)", the correct type is returned (see the TK_SELECT
                   91500:         ** branch below.  */
                   91501:         break;
                   91502:       }
                   91503: 
                   91504:       assert( pTab && pExpr->pTab==pTab );
                   91505:       if( pS ){
                   91506:         /* The "table" is actually a sub-select or a view in the FROM clause
                   91507:         ** of the SELECT statement. Return the declaration type and origin
                   91508:         ** data for the result-set column of the sub-select.
                   91509:         */
                   91510:         if( iCol>=0 && ALWAYS(iCol<pS->pEList->nExpr) ){
                   91511:           /* If iCol is less than zero, then the expression requests the
                   91512:           ** rowid of the sub-select or view. This expression is legal (see 
                   91513:           ** test case misc2.2.2) - it always evaluates to NULL.
                   91514:           */
                   91515:           NameContext sNC;
                   91516:           Expr *p = pS->pEList->a[iCol].pExpr;
                   91517:           sNC.pSrcList = pS->pSrc;
                   91518:           sNC.pNext = pNC;
                   91519:           sNC.pParse = pNC->pParse;
                   91520:           zType = columnType(&sNC, p, &zOriginDb, &zOriginTab, &zOriginCol); 
                   91521:         }
                   91522:       }else if( ALWAYS(pTab->pSchema) ){
                   91523:         /* A real table */
                   91524:         assert( !pS );
                   91525:         if( iCol<0 ) iCol = pTab->iPKey;
                   91526:         assert( iCol==-1 || (iCol>=0 && iCol<pTab->nCol) );
                   91527:         if( iCol<0 ){
                   91528:           zType = "INTEGER";
                   91529:           zOriginCol = "rowid";
                   91530:         }else{
                   91531:           zType = pTab->aCol[iCol].zType;
                   91532:           zOriginCol = pTab->aCol[iCol].zName;
                   91533:         }
                   91534:         zOriginTab = pTab->zName;
                   91535:         if( pNC->pParse ){
                   91536:           int iDb = sqlite3SchemaToIndex(pNC->pParse->db, pTab->pSchema);
                   91537:           zOriginDb = pNC->pParse->db->aDb[iDb].zName;
                   91538:         }
                   91539:       }
                   91540:       break;
                   91541:     }
                   91542: #ifndef SQLITE_OMIT_SUBQUERY
                   91543:     case TK_SELECT: {
                   91544:       /* The expression is a sub-select. Return the declaration type and
                   91545:       ** origin info for the single column in the result set of the SELECT
                   91546:       ** statement.
                   91547:       */
                   91548:       NameContext sNC;
                   91549:       Select *pS = pExpr->x.pSelect;
                   91550:       Expr *p = pS->pEList->a[0].pExpr;
                   91551:       assert( ExprHasProperty(pExpr, EP_xIsSelect) );
                   91552:       sNC.pSrcList = pS->pSrc;
                   91553:       sNC.pNext = pNC;
                   91554:       sNC.pParse = pNC->pParse;
                   91555:       zType = columnType(&sNC, p, &zOriginDb, &zOriginTab, &zOriginCol); 
                   91556:       break;
                   91557:     }
                   91558: #endif
                   91559:   }
                   91560:   
                   91561:   if( pzOriginDb ){
                   91562:     assert( pzOriginTab && pzOriginCol );
                   91563:     *pzOriginDb = zOriginDb;
                   91564:     *pzOriginTab = zOriginTab;
                   91565:     *pzOriginCol = zOriginCol;
                   91566:   }
                   91567:   return zType;
                   91568: }
                   91569: 
                   91570: /*
                   91571: ** Generate code that will tell the VDBE the declaration types of columns
                   91572: ** in the result set.
                   91573: */
                   91574: static void generateColumnTypes(
                   91575:   Parse *pParse,      /* Parser context */
                   91576:   SrcList *pTabList,  /* List of tables */
                   91577:   ExprList *pEList    /* Expressions defining the result set */
                   91578: ){
                   91579: #ifndef SQLITE_OMIT_DECLTYPE
                   91580:   Vdbe *v = pParse->pVdbe;
                   91581:   int i;
                   91582:   NameContext sNC;
                   91583:   sNC.pSrcList = pTabList;
                   91584:   sNC.pParse = pParse;
                   91585:   for(i=0; i<pEList->nExpr; i++){
                   91586:     Expr *p = pEList->a[i].pExpr;
                   91587:     const char *zType;
                   91588: #ifdef SQLITE_ENABLE_COLUMN_METADATA
                   91589:     const char *zOrigDb = 0;
                   91590:     const char *zOrigTab = 0;
                   91591:     const char *zOrigCol = 0;
                   91592:     zType = columnType(&sNC, p, &zOrigDb, &zOrigTab, &zOrigCol);
                   91593: 
                   91594:     /* The vdbe must make its own copy of the column-type and other 
                   91595:     ** column specific strings, in case the schema is reset before this
                   91596:     ** virtual machine is deleted.
                   91597:     */
                   91598:     sqlite3VdbeSetColName(v, i, COLNAME_DATABASE, zOrigDb, SQLITE_TRANSIENT);
                   91599:     sqlite3VdbeSetColName(v, i, COLNAME_TABLE, zOrigTab, SQLITE_TRANSIENT);
                   91600:     sqlite3VdbeSetColName(v, i, COLNAME_COLUMN, zOrigCol, SQLITE_TRANSIENT);
                   91601: #else
                   91602:     zType = columnType(&sNC, p, 0, 0, 0);
                   91603: #endif
                   91604:     sqlite3VdbeSetColName(v, i, COLNAME_DECLTYPE, zType, SQLITE_TRANSIENT);
                   91605:   }
                   91606: #endif /* SQLITE_OMIT_DECLTYPE */
                   91607: }
                   91608: 
                   91609: /*
                   91610: ** Generate code that will tell the VDBE the names of columns
                   91611: ** in the result set.  This information is used to provide the
                   91612: ** azCol[] values in the callback.
                   91613: */
                   91614: static void generateColumnNames(
                   91615:   Parse *pParse,      /* Parser context */
                   91616:   SrcList *pTabList,  /* List of tables */
                   91617:   ExprList *pEList    /* Expressions defining the result set */
                   91618: ){
                   91619:   Vdbe *v = pParse->pVdbe;
                   91620:   int i, j;
                   91621:   sqlite3 *db = pParse->db;
                   91622:   int fullNames, shortNames;
                   91623: 
                   91624: #ifndef SQLITE_OMIT_EXPLAIN
                   91625:   /* If this is an EXPLAIN, skip this step */
                   91626:   if( pParse->explain ){
                   91627:     return;
                   91628:   }
                   91629: #endif
                   91630: 
                   91631:   if( pParse->colNamesSet || NEVER(v==0) || db->mallocFailed ) return;
                   91632:   pParse->colNamesSet = 1;
                   91633:   fullNames = (db->flags & SQLITE_FullColNames)!=0;
                   91634:   shortNames = (db->flags & SQLITE_ShortColNames)!=0;
                   91635:   sqlite3VdbeSetNumCols(v, pEList->nExpr);
                   91636:   for(i=0; i<pEList->nExpr; i++){
                   91637:     Expr *p;
                   91638:     p = pEList->a[i].pExpr;
                   91639:     if( NEVER(p==0) ) continue;
                   91640:     if( pEList->a[i].zName ){
                   91641:       char *zName = pEList->a[i].zName;
                   91642:       sqlite3VdbeSetColName(v, i, COLNAME_NAME, zName, SQLITE_TRANSIENT);
                   91643:     }else if( (p->op==TK_COLUMN || p->op==TK_AGG_COLUMN) && pTabList ){
                   91644:       Table *pTab;
                   91645:       char *zCol;
                   91646:       int iCol = p->iColumn;
                   91647:       for(j=0; ALWAYS(j<pTabList->nSrc); j++){
                   91648:         if( pTabList->a[j].iCursor==p->iTable ) break;
                   91649:       }
                   91650:       assert( j<pTabList->nSrc );
                   91651:       pTab = pTabList->a[j].pTab;
                   91652:       if( iCol<0 ) iCol = pTab->iPKey;
                   91653:       assert( iCol==-1 || (iCol>=0 && iCol<pTab->nCol) );
                   91654:       if( iCol<0 ){
                   91655:         zCol = "rowid";
                   91656:       }else{
                   91657:         zCol = pTab->aCol[iCol].zName;
                   91658:       }
                   91659:       if( !shortNames && !fullNames ){
                   91660:         sqlite3VdbeSetColName(v, i, COLNAME_NAME, 
                   91661:             sqlite3DbStrDup(db, pEList->a[i].zSpan), SQLITE_DYNAMIC);
                   91662:       }else if( fullNames ){
                   91663:         char *zName = 0;
                   91664:         zName = sqlite3MPrintf(db, "%s.%s", pTab->zName, zCol);
                   91665:         sqlite3VdbeSetColName(v, i, COLNAME_NAME, zName, SQLITE_DYNAMIC);
                   91666:       }else{
                   91667:         sqlite3VdbeSetColName(v, i, COLNAME_NAME, zCol, SQLITE_TRANSIENT);
                   91668:       }
                   91669:     }else{
                   91670:       sqlite3VdbeSetColName(v, i, COLNAME_NAME, 
                   91671:           sqlite3DbStrDup(db, pEList->a[i].zSpan), SQLITE_DYNAMIC);
                   91672:     }
                   91673:   }
                   91674:   generateColumnTypes(pParse, pTabList, pEList);
                   91675: }
                   91676: 
                   91677: /*
                   91678: ** Given a an expression list (which is really the list of expressions
                   91679: ** that form the result set of a SELECT statement) compute appropriate
                   91680: ** column names for a table that would hold the expression list.
                   91681: **
                   91682: ** All column names will be unique.
                   91683: **
                   91684: ** Only the column names are computed.  Column.zType, Column.zColl,
                   91685: ** and other fields of Column are zeroed.
                   91686: **
                   91687: ** Return SQLITE_OK on success.  If a memory allocation error occurs,
                   91688: ** store NULL in *paCol and 0 in *pnCol and return SQLITE_NOMEM.
                   91689: */
                   91690: static int selectColumnsFromExprList(
                   91691:   Parse *pParse,          /* Parsing context */
                   91692:   ExprList *pEList,       /* Expr list from which to derive column names */
                   91693:   int *pnCol,             /* Write the number of columns here */
                   91694:   Column **paCol          /* Write the new column list here */
                   91695: ){
                   91696:   sqlite3 *db = pParse->db;   /* Database connection */
                   91697:   int i, j;                   /* Loop counters */
                   91698:   int cnt;                    /* Index added to make the name unique */
                   91699:   Column *aCol, *pCol;        /* For looping over result columns */
                   91700:   int nCol;                   /* Number of columns in the result set */
                   91701:   Expr *p;                    /* Expression for a single result column */
                   91702:   char *zName;                /* Column name */
                   91703:   int nName;                  /* Size of name in zName[] */
                   91704: 
                   91705:   *pnCol = nCol = pEList->nExpr;
                   91706:   aCol = *paCol = sqlite3DbMallocZero(db, sizeof(aCol[0])*nCol);
                   91707:   if( aCol==0 ) return SQLITE_NOMEM;
                   91708:   for(i=0, pCol=aCol; i<nCol; i++, pCol++){
                   91709:     /* Get an appropriate name for the column
                   91710:     */
                   91711:     p = pEList->a[i].pExpr;
                   91712:     assert( p->pRight==0 || ExprHasProperty(p->pRight, EP_IntValue)
                   91713:                || p->pRight->u.zToken==0 || p->pRight->u.zToken[0]!=0 );
                   91714:     if( (zName = pEList->a[i].zName)!=0 ){
                   91715:       /* If the column contains an "AS <name>" phrase, use <name> as the name */
                   91716:       zName = sqlite3DbStrDup(db, zName);
                   91717:     }else{
                   91718:       Expr *pColExpr = p;  /* The expression that is the result column name */
                   91719:       Table *pTab;         /* Table associated with this expression */
                   91720:       while( pColExpr->op==TK_DOT ) pColExpr = pColExpr->pRight;
                   91721:       if( pColExpr->op==TK_COLUMN && ALWAYS(pColExpr->pTab!=0) ){
                   91722:         /* For columns use the column name name */
                   91723:         int iCol = pColExpr->iColumn;
                   91724:         pTab = pColExpr->pTab;
                   91725:         if( iCol<0 ) iCol = pTab->iPKey;
                   91726:         zName = sqlite3MPrintf(db, "%s",
                   91727:                  iCol>=0 ? pTab->aCol[iCol].zName : "rowid");
                   91728:       }else if( pColExpr->op==TK_ID ){
                   91729:         assert( !ExprHasProperty(pColExpr, EP_IntValue) );
                   91730:         zName = sqlite3MPrintf(db, "%s", pColExpr->u.zToken);
                   91731:       }else{
                   91732:         /* Use the original text of the column expression as its name */
                   91733:         zName = sqlite3MPrintf(db, "%s", pEList->a[i].zSpan);
                   91734:       }
                   91735:     }
                   91736:     if( db->mallocFailed ){
                   91737:       sqlite3DbFree(db, zName);
                   91738:       break;
                   91739:     }
                   91740: 
                   91741:     /* Make sure the column name is unique.  If the name is not unique,
                   91742:     ** append a integer to the name so that it becomes unique.
                   91743:     */
                   91744:     nName = sqlite3Strlen30(zName);
                   91745:     for(j=cnt=0; j<i; j++){
                   91746:       if( sqlite3StrICmp(aCol[j].zName, zName)==0 ){
                   91747:         char *zNewName;
                   91748:         zName[nName] = 0;
                   91749:         zNewName = sqlite3MPrintf(db, "%s:%d", zName, ++cnt);
                   91750:         sqlite3DbFree(db, zName);
                   91751:         zName = zNewName;
                   91752:         j = -1;
                   91753:         if( zName==0 ) break;
                   91754:       }
                   91755:     }
                   91756:     pCol->zName = zName;
                   91757:   }
                   91758:   if( db->mallocFailed ){
                   91759:     for(j=0; j<i; j++){
                   91760:       sqlite3DbFree(db, aCol[j].zName);
                   91761:     }
                   91762:     sqlite3DbFree(db, aCol);
                   91763:     *paCol = 0;
                   91764:     *pnCol = 0;
                   91765:     return SQLITE_NOMEM;
                   91766:   }
                   91767:   return SQLITE_OK;
                   91768: }
                   91769: 
                   91770: /*
                   91771: ** Add type and collation information to a column list based on
                   91772: ** a SELECT statement.
                   91773: ** 
                   91774: ** The column list presumably came from selectColumnNamesFromExprList().
                   91775: ** The column list has only names, not types or collations.  This
                   91776: ** routine goes through and adds the types and collations.
                   91777: **
                   91778: ** This routine requires that all identifiers in the SELECT
                   91779: ** statement be resolved.
                   91780: */
                   91781: static void selectAddColumnTypeAndCollation(
                   91782:   Parse *pParse,        /* Parsing contexts */
                   91783:   int nCol,             /* Number of columns */
                   91784:   Column *aCol,         /* List of columns */
                   91785:   Select *pSelect       /* SELECT used to determine types and collations */
                   91786: ){
                   91787:   sqlite3 *db = pParse->db;
                   91788:   NameContext sNC;
                   91789:   Column *pCol;
                   91790:   CollSeq *pColl;
                   91791:   int i;
                   91792:   Expr *p;
                   91793:   struct ExprList_item *a;
                   91794: 
                   91795:   assert( pSelect!=0 );
                   91796:   assert( (pSelect->selFlags & SF_Resolved)!=0 );
                   91797:   assert( nCol==pSelect->pEList->nExpr || db->mallocFailed );
                   91798:   if( db->mallocFailed ) return;
                   91799:   memset(&sNC, 0, sizeof(sNC));
                   91800:   sNC.pSrcList = pSelect->pSrc;
                   91801:   a = pSelect->pEList->a;
                   91802:   for(i=0, pCol=aCol; i<nCol; i++, pCol++){
                   91803:     p = a[i].pExpr;
                   91804:     pCol->zType = sqlite3DbStrDup(db, columnType(&sNC, p, 0, 0, 0));
                   91805:     pCol->affinity = sqlite3ExprAffinity(p);
                   91806:     if( pCol->affinity==0 ) pCol->affinity = SQLITE_AFF_NONE;
                   91807:     pColl = sqlite3ExprCollSeq(pParse, p);
                   91808:     if( pColl ){
                   91809:       pCol->zColl = sqlite3DbStrDup(db, pColl->zName);
                   91810:     }
                   91811:   }
                   91812: }
                   91813: 
                   91814: /*
                   91815: ** Given a SELECT statement, generate a Table structure that describes
                   91816: ** the result set of that SELECT.
                   91817: */
                   91818: SQLITE_PRIVATE Table *sqlite3ResultSetOfSelect(Parse *pParse, Select *pSelect){
                   91819:   Table *pTab;
                   91820:   sqlite3 *db = pParse->db;
                   91821:   int savedFlags;
                   91822: 
                   91823:   savedFlags = db->flags;
                   91824:   db->flags &= ~SQLITE_FullColNames;
                   91825:   db->flags |= SQLITE_ShortColNames;
                   91826:   sqlite3SelectPrep(pParse, pSelect, 0);
                   91827:   if( pParse->nErr ) return 0;
                   91828:   while( pSelect->pPrior ) pSelect = pSelect->pPrior;
                   91829:   db->flags = savedFlags;
                   91830:   pTab = sqlite3DbMallocZero(db, sizeof(Table) );
                   91831:   if( pTab==0 ){
                   91832:     return 0;
                   91833:   }
                   91834:   /* The sqlite3ResultSetOfSelect() is only used n contexts where lookaside
                   91835:   ** is disabled */
                   91836:   assert( db->lookaside.bEnabled==0 );
                   91837:   pTab->nRef = 1;
                   91838:   pTab->zName = 0;
                   91839:   pTab->nRowEst = 1000000;
                   91840:   selectColumnsFromExprList(pParse, pSelect->pEList, &pTab->nCol, &pTab->aCol);
                   91841:   selectAddColumnTypeAndCollation(pParse, pTab->nCol, pTab->aCol, pSelect);
                   91842:   pTab->iPKey = -1;
                   91843:   if( db->mallocFailed ){
                   91844:     sqlite3DeleteTable(db, pTab);
                   91845:     return 0;
                   91846:   }
                   91847:   return pTab;
                   91848: }
                   91849: 
                   91850: /*
                   91851: ** Get a VDBE for the given parser context.  Create a new one if necessary.
                   91852: ** If an error occurs, return NULL and leave a message in pParse.
                   91853: */
                   91854: SQLITE_PRIVATE Vdbe *sqlite3GetVdbe(Parse *pParse){
                   91855:   Vdbe *v = pParse->pVdbe;
                   91856:   if( v==0 ){
                   91857:     v = pParse->pVdbe = sqlite3VdbeCreate(pParse->db);
                   91858: #ifndef SQLITE_OMIT_TRACE
                   91859:     if( v ){
                   91860:       sqlite3VdbeAddOp0(v, OP_Trace);
                   91861:     }
                   91862: #endif
                   91863:   }
                   91864:   return v;
                   91865: }
                   91866: 
                   91867: 
                   91868: /*
                   91869: ** Compute the iLimit and iOffset fields of the SELECT based on the
                   91870: ** pLimit and pOffset expressions.  pLimit and pOffset hold the expressions
                   91871: ** that appear in the original SQL statement after the LIMIT and OFFSET
                   91872: ** keywords.  Or NULL if those keywords are omitted. iLimit and iOffset 
                   91873: ** are the integer memory register numbers for counters used to compute 
                   91874: ** the limit and offset.  If there is no limit and/or offset, then 
                   91875: ** iLimit and iOffset are negative.
                   91876: **
                   91877: ** This routine changes the values of iLimit and iOffset only if
                   91878: ** a limit or offset is defined by pLimit and pOffset.  iLimit and
                   91879: ** iOffset should have been preset to appropriate default values
                   91880: ** (usually but not always -1) prior to calling this routine.
                   91881: ** Only if pLimit!=0 or pOffset!=0 do the limit registers get
                   91882: ** redefined.  The UNION ALL operator uses this property to force
                   91883: ** the reuse of the same limit and offset registers across multiple
                   91884: ** SELECT statements.
                   91885: */
                   91886: static void computeLimitRegisters(Parse *pParse, Select *p, int iBreak){
                   91887:   Vdbe *v = 0;
                   91888:   int iLimit = 0;
                   91889:   int iOffset;
                   91890:   int addr1, n;
                   91891:   if( p->iLimit ) return;
                   91892: 
                   91893:   /* 
                   91894:   ** "LIMIT -1" always shows all rows.  There is some
1.1.1.3 ! misho    91895:   ** controversy about what the correct behavior should be.
1.1       misho    91896:   ** The current implementation interprets "LIMIT 0" to mean
                   91897:   ** no rows.
                   91898:   */
                   91899:   sqlite3ExprCacheClear(pParse);
                   91900:   assert( p->pOffset==0 || p->pLimit!=0 );
                   91901:   if( p->pLimit ){
                   91902:     p->iLimit = iLimit = ++pParse->nMem;
                   91903:     v = sqlite3GetVdbe(pParse);
                   91904:     if( NEVER(v==0) ) return;  /* VDBE should have already been allocated */
                   91905:     if( sqlite3ExprIsInteger(p->pLimit, &n) ){
                   91906:       sqlite3VdbeAddOp2(v, OP_Integer, n, iLimit);
                   91907:       VdbeComment((v, "LIMIT counter"));
                   91908:       if( n==0 ){
                   91909:         sqlite3VdbeAddOp2(v, OP_Goto, 0, iBreak);
                   91910:       }else{
                   91911:         if( p->nSelectRow > (double)n ) p->nSelectRow = (double)n;
                   91912:       }
                   91913:     }else{
                   91914:       sqlite3ExprCode(pParse, p->pLimit, iLimit);
                   91915:       sqlite3VdbeAddOp1(v, OP_MustBeInt, iLimit);
                   91916:       VdbeComment((v, "LIMIT counter"));
                   91917:       sqlite3VdbeAddOp2(v, OP_IfZero, iLimit, iBreak);
                   91918:     }
                   91919:     if( p->pOffset ){
                   91920:       p->iOffset = iOffset = ++pParse->nMem;
                   91921:       pParse->nMem++;   /* Allocate an extra register for limit+offset */
                   91922:       sqlite3ExprCode(pParse, p->pOffset, iOffset);
                   91923:       sqlite3VdbeAddOp1(v, OP_MustBeInt, iOffset);
                   91924:       VdbeComment((v, "OFFSET counter"));
                   91925:       addr1 = sqlite3VdbeAddOp1(v, OP_IfPos, iOffset);
                   91926:       sqlite3VdbeAddOp2(v, OP_Integer, 0, iOffset);
                   91927:       sqlite3VdbeJumpHere(v, addr1);
                   91928:       sqlite3VdbeAddOp3(v, OP_Add, iLimit, iOffset, iOffset+1);
                   91929:       VdbeComment((v, "LIMIT+OFFSET"));
                   91930:       addr1 = sqlite3VdbeAddOp1(v, OP_IfPos, iLimit);
                   91931:       sqlite3VdbeAddOp2(v, OP_Integer, -1, iOffset+1);
                   91932:       sqlite3VdbeJumpHere(v, addr1);
                   91933:     }
                   91934:   }
                   91935: }
                   91936: 
                   91937: #ifndef SQLITE_OMIT_COMPOUND_SELECT
                   91938: /*
                   91939: ** Return the appropriate collating sequence for the iCol-th column of
                   91940: ** the result set for the compound-select statement "p".  Return NULL if
                   91941: ** the column has no default collating sequence.
                   91942: **
                   91943: ** The collating sequence for the compound select is taken from the
                   91944: ** left-most term of the select that has a collating sequence.
                   91945: */
                   91946: static CollSeq *multiSelectCollSeq(Parse *pParse, Select *p, int iCol){
                   91947:   CollSeq *pRet;
                   91948:   if( p->pPrior ){
                   91949:     pRet = multiSelectCollSeq(pParse, p->pPrior, iCol);
                   91950:   }else{
                   91951:     pRet = 0;
                   91952:   }
                   91953:   assert( iCol>=0 );
                   91954:   if( pRet==0 && iCol<p->pEList->nExpr ){
                   91955:     pRet = sqlite3ExprCollSeq(pParse, p->pEList->a[iCol].pExpr);
                   91956:   }
                   91957:   return pRet;
                   91958: }
                   91959: #endif /* SQLITE_OMIT_COMPOUND_SELECT */
                   91960: 
                   91961: /* Forward reference */
                   91962: static int multiSelectOrderBy(
                   91963:   Parse *pParse,        /* Parsing context */
                   91964:   Select *p,            /* The right-most of SELECTs to be coded */
                   91965:   SelectDest *pDest     /* What to do with query results */
                   91966: );
                   91967: 
                   91968: 
                   91969: #ifndef SQLITE_OMIT_COMPOUND_SELECT
                   91970: /*
                   91971: ** This routine is called to process a compound query form from
                   91972: ** two or more separate queries using UNION, UNION ALL, EXCEPT, or
                   91973: ** INTERSECT
                   91974: **
                   91975: ** "p" points to the right-most of the two queries.  the query on the
                   91976: ** left is p->pPrior.  The left query could also be a compound query
                   91977: ** in which case this routine will be called recursively. 
                   91978: **
                   91979: ** The results of the total query are to be written into a destination
                   91980: ** of type eDest with parameter iParm.
                   91981: **
                   91982: ** Example 1:  Consider a three-way compound SQL statement.
                   91983: **
                   91984: **     SELECT a FROM t1 UNION SELECT b FROM t2 UNION SELECT c FROM t3
                   91985: **
                   91986: ** This statement is parsed up as follows:
                   91987: **
                   91988: **     SELECT c FROM t3
                   91989: **      |
                   91990: **      `----->  SELECT b FROM t2
                   91991: **                |
                   91992: **                `------>  SELECT a FROM t1
                   91993: **
                   91994: ** The arrows in the diagram above represent the Select.pPrior pointer.
                   91995: ** So if this routine is called with p equal to the t3 query, then
                   91996: ** pPrior will be the t2 query.  p->op will be TK_UNION in this case.
                   91997: **
                   91998: ** Notice that because of the way SQLite parses compound SELECTs, the
                   91999: ** individual selects always group from left to right.
                   92000: */
                   92001: static int multiSelect(
                   92002:   Parse *pParse,        /* Parsing context */
                   92003:   Select *p,            /* The right-most of SELECTs to be coded */
                   92004:   SelectDest *pDest     /* What to do with query results */
                   92005: ){
                   92006:   int rc = SQLITE_OK;   /* Success code from a subroutine */
                   92007:   Select *pPrior;       /* Another SELECT immediately to our left */
                   92008:   Vdbe *v;              /* Generate code to this VDBE */
                   92009:   SelectDest dest;      /* Alternative data destination */
                   92010:   Select *pDelete = 0;  /* Chain of simple selects to delete */
                   92011:   sqlite3 *db;          /* Database connection */
                   92012: #ifndef SQLITE_OMIT_EXPLAIN
                   92013:   int iSub1;            /* EQP id of left-hand query */
                   92014:   int iSub2;            /* EQP id of right-hand query */
                   92015: #endif
                   92016: 
                   92017:   /* Make sure there is no ORDER BY or LIMIT clause on prior SELECTs.  Only
                   92018:   ** the last (right-most) SELECT in the series may have an ORDER BY or LIMIT.
                   92019:   */
                   92020:   assert( p && p->pPrior );  /* Calling function guarantees this much */
                   92021:   db = pParse->db;
                   92022:   pPrior = p->pPrior;
                   92023:   assert( pPrior->pRightmost!=pPrior );
                   92024:   assert( pPrior->pRightmost==p->pRightmost );
                   92025:   dest = *pDest;
                   92026:   if( pPrior->pOrderBy ){
                   92027:     sqlite3ErrorMsg(pParse,"ORDER BY clause should come after %s not before",
                   92028:       selectOpName(p->op));
                   92029:     rc = 1;
                   92030:     goto multi_select_end;
                   92031:   }
                   92032:   if( pPrior->pLimit ){
                   92033:     sqlite3ErrorMsg(pParse,"LIMIT clause should come after %s not before",
                   92034:       selectOpName(p->op));
                   92035:     rc = 1;
                   92036:     goto multi_select_end;
                   92037:   }
                   92038: 
                   92039:   v = sqlite3GetVdbe(pParse);
                   92040:   assert( v!=0 );  /* The VDBE already created by calling function */
                   92041: 
                   92042:   /* Create the destination temporary table if necessary
                   92043:   */
                   92044:   if( dest.eDest==SRT_EphemTab ){
                   92045:     assert( p->pEList );
                   92046:     sqlite3VdbeAddOp2(v, OP_OpenEphemeral, dest.iParm, p->pEList->nExpr);
                   92047:     sqlite3VdbeChangeP5(v, BTREE_UNORDERED);
                   92048:     dest.eDest = SRT_Table;
                   92049:   }
                   92050: 
                   92051:   /* Make sure all SELECTs in the statement have the same number of elements
                   92052:   ** in their result sets.
                   92053:   */
                   92054:   assert( p->pEList && pPrior->pEList );
                   92055:   if( p->pEList->nExpr!=pPrior->pEList->nExpr ){
                   92056:     sqlite3ErrorMsg(pParse, "SELECTs to the left and right of %s"
                   92057:       " do not have the same number of result columns", selectOpName(p->op));
                   92058:     rc = 1;
                   92059:     goto multi_select_end;
                   92060:   }
                   92061: 
                   92062:   /* Compound SELECTs that have an ORDER BY clause are handled separately.
                   92063:   */
                   92064:   if( p->pOrderBy ){
                   92065:     return multiSelectOrderBy(pParse, p, pDest);
                   92066:   }
                   92067: 
                   92068:   /* Generate code for the left and right SELECT statements.
                   92069:   */
                   92070:   switch( p->op ){
                   92071:     case TK_ALL: {
                   92072:       int addr = 0;
                   92073:       int nLimit;
                   92074:       assert( !pPrior->pLimit );
                   92075:       pPrior->pLimit = p->pLimit;
                   92076:       pPrior->pOffset = p->pOffset;
                   92077:       explainSetInteger(iSub1, pParse->iNextSelectId);
                   92078:       rc = sqlite3Select(pParse, pPrior, &dest);
                   92079:       p->pLimit = 0;
                   92080:       p->pOffset = 0;
                   92081:       if( rc ){
                   92082:         goto multi_select_end;
                   92083:       }
                   92084:       p->pPrior = 0;
                   92085:       p->iLimit = pPrior->iLimit;
                   92086:       p->iOffset = pPrior->iOffset;
                   92087:       if( p->iLimit ){
                   92088:         addr = sqlite3VdbeAddOp1(v, OP_IfZero, p->iLimit);
                   92089:         VdbeComment((v, "Jump ahead if LIMIT reached"));
                   92090:       }
                   92091:       explainSetInteger(iSub2, pParse->iNextSelectId);
                   92092:       rc = sqlite3Select(pParse, p, &dest);
                   92093:       testcase( rc!=SQLITE_OK );
                   92094:       pDelete = p->pPrior;
                   92095:       p->pPrior = pPrior;
                   92096:       p->nSelectRow += pPrior->nSelectRow;
                   92097:       if( pPrior->pLimit
                   92098:        && sqlite3ExprIsInteger(pPrior->pLimit, &nLimit)
                   92099:        && p->nSelectRow > (double)nLimit 
                   92100:       ){
                   92101:         p->nSelectRow = (double)nLimit;
                   92102:       }
                   92103:       if( addr ){
                   92104:         sqlite3VdbeJumpHere(v, addr);
                   92105:       }
                   92106:       break;
                   92107:     }
                   92108:     case TK_EXCEPT:
                   92109:     case TK_UNION: {
                   92110:       int unionTab;    /* Cursor number of the temporary table holding result */
                   92111:       u8 op = 0;       /* One of the SRT_ operations to apply to self */
                   92112:       int priorOp;     /* The SRT_ operation to apply to prior selects */
                   92113:       Expr *pLimit, *pOffset; /* Saved values of p->nLimit and p->nOffset */
                   92114:       int addr;
                   92115:       SelectDest uniondest;
                   92116: 
                   92117:       testcase( p->op==TK_EXCEPT );
                   92118:       testcase( p->op==TK_UNION );
                   92119:       priorOp = SRT_Union;
                   92120:       if( dest.eDest==priorOp && ALWAYS(!p->pLimit &&!p->pOffset) ){
                   92121:         /* We can reuse a temporary table generated by a SELECT to our
                   92122:         ** right.
                   92123:         */
                   92124:         assert( p->pRightmost!=p );  /* Can only happen for leftward elements
                   92125:                                      ** of a 3-way or more compound */
                   92126:         assert( p->pLimit==0 );      /* Not allowed on leftward elements */
                   92127:         assert( p->pOffset==0 );     /* Not allowed on leftward elements */
                   92128:         unionTab = dest.iParm;
                   92129:       }else{
                   92130:         /* We will need to create our own temporary table to hold the
                   92131:         ** intermediate results.
                   92132:         */
                   92133:         unionTab = pParse->nTab++;
                   92134:         assert( p->pOrderBy==0 );
                   92135:         addr = sqlite3VdbeAddOp2(v, OP_OpenEphemeral, unionTab, 0);
                   92136:         assert( p->addrOpenEphm[0] == -1 );
                   92137:         p->addrOpenEphm[0] = addr;
                   92138:         p->pRightmost->selFlags |= SF_UsesEphemeral;
                   92139:         assert( p->pEList );
                   92140:       }
                   92141: 
                   92142:       /* Code the SELECT statements to our left
                   92143:       */
                   92144:       assert( !pPrior->pOrderBy );
                   92145:       sqlite3SelectDestInit(&uniondest, priorOp, unionTab);
                   92146:       explainSetInteger(iSub1, pParse->iNextSelectId);
                   92147:       rc = sqlite3Select(pParse, pPrior, &uniondest);
                   92148:       if( rc ){
                   92149:         goto multi_select_end;
                   92150:       }
                   92151: 
                   92152:       /* Code the current SELECT statement
                   92153:       */
                   92154:       if( p->op==TK_EXCEPT ){
                   92155:         op = SRT_Except;
                   92156:       }else{
                   92157:         assert( p->op==TK_UNION );
                   92158:         op = SRT_Union;
                   92159:       }
                   92160:       p->pPrior = 0;
                   92161:       pLimit = p->pLimit;
                   92162:       p->pLimit = 0;
                   92163:       pOffset = p->pOffset;
                   92164:       p->pOffset = 0;
                   92165:       uniondest.eDest = op;
                   92166:       explainSetInteger(iSub2, pParse->iNextSelectId);
                   92167:       rc = sqlite3Select(pParse, p, &uniondest);
                   92168:       testcase( rc!=SQLITE_OK );
                   92169:       /* Query flattening in sqlite3Select() might refill p->pOrderBy.
                   92170:       ** Be sure to delete p->pOrderBy, therefore, to avoid a memory leak. */
                   92171:       sqlite3ExprListDelete(db, p->pOrderBy);
                   92172:       pDelete = p->pPrior;
                   92173:       p->pPrior = pPrior;
                   92174:       p->pOrderBy = 0;
                   92175:       if( p->op==TK_UNION ) p->nSelectRow += pPrior->nSelectRow;
                   92176:       sqlite3ExprDelete(db, p->pLimit);
                   92177:       p->pLimit = pLimit;
                   92178:       p->pOffset = pOffset;
                   92179:       p->iLimit = 0;
                   92180:       p->iOffset = 0;
                   92181: 
                   92182:       /* Convert the data in the temporary table into whatever form
                   92183:       ** it is that we currently need.
                   92184:       */
                   92185:       assert( unionTab==dest.iParm || dest.eDest!=priorOp );
                   92186:       if( dest.eDest!=priorOp ){
                   92187:         int iCont, iBreak, iStart;
                   92188:         assert( p->pEList );
                   92189:         if( dest.eDest==SRT_Output ){
                   92190:           Select *pFirst = p;
                   92191:           while( pFirst->pPrior ) pFirst = pFirst->pPrior;
                   92192:           generateColumnNames(pParse, 0, pFirst->pEList);
                   92193:         }
                   92194:         iBreak = sqlite3VdbeMakeLabel(v);
                   92195:         iCont = sqlite3VdbeMakeLabel(v);
                   92196:         computeLimitRegisters(pParse, p, iBreak);
                   92197:         sqlite3VdbeAddOp2(v, OP_Rewind, unionTab, iBreak);
                   92198:         iStart = sqlite3VdbeCurrentAddr(v);
                   92199:         selectInnerLoop(pParse, p, p->pEList, unionTab, p->pEList->nExpr,
                   92200:                         0, -1, &dest, iCont, iBreak);
                   92201:         sqlite3VdbeResolveLabel(v, iCont);
                   92202:         sqlite3VdbeAddOp2(v, OP_Next, unionTab, iStart);
                   92203:         sqlite3VdbeResolveLabel(v, iBreak);
                   92204:         sqlite3VdbeAddOp2(v, OP_Close, unionTab, 0);
                   92205:       }
                   92206:       break;
                   92207:     }
                   92208:     default: assert( p->op==TK_INTERSECT ); {
                   92209:       int tab1, tab2;
                   92210:       int iCont, iBreak, iStart;
                   92211:       Expr *pLimit, *pOffset;
                   92212:       int addr;
                   92213:       SelectDest intersectdest;
                   92214:       int r1;
                   92215: 
                   92216:       /* INTERSECT is different from the others since it requires
                   92217:       ** two temporary tables.  Hence it has its own case.  Begin
                   92218:       ** by allocating the tables we will need.
                   92219:       */
                   92220:       tab1 = pParse->nTab++;
                   92221:       tab2 = pParse->nTab++;
                   92222:       assert( p->pOrderBy==0 );
                   92223: 
                   92224:       addr = sqlite3VdbeAddOp2(v, OP_OpenEphemeral, tab1, 0);
                   92225:       assert( p->addrOpenEphm[0] == -1 );
                   92226:       p->addrOpenEphm[0] = addr;
                   92227:       p->pRightmost->selFlags |= SF_UsesEphemeral;
                   92228:       assert( p->pEList );
                   92229: 
                   92230:       /* Code the SELECTs to our left into temporary table "tab1".
                   92231:       */
                   92232:       sqlite3SelectDestInit(&intersectdest, SRT_Union, tab1);
                   92233:       explainSetInteger(iSub1, pParse->iNextSelectId);
                   92234:       rc = sqlite3Select(pParse, pPrior, &intersectdest);
                   92235:       if( rc ){
                   92236:         goto multi_select_end;
                   92237:       }
                   92238: 
                   92239:       /* Code the current SELECT into temporary table "tab2"
                   92240:       */
                   92241:       addr = sqlite3VdbeAddOp2(v, OP_OpenEphemeral, tab2, 0);
                   92242:       assert( p->addrOpenEphm[1] == -1 );
                   92243:       p->addrOpenEphm[1] = addr;
                   92244:       p->pPrior = 0;
                   92245:       pLimit = p->pLimit;
                   92246:       p->pLimit = 0;
                   92247:       pOffset = p->pOffset;
                   92248:       p->pOffset = 0;
                   92249:       intersectdest.iParm = tab2;
                   92250:       explainSetInteger(iSub2, pParse->iNextSelectId);
                   92251:       rc = sqlite3Select(pParse, p, &intersectdest);
                   92252:       testcase( rc!=SQLITE_OK );
                   92253:       pDelete = p->pPrior;
                   92254:       p->pPrior = pPrior;
                   92255:       if( p->nSelectRow>pPrior->nSelectRow ) p->nSelectRow = pPrior->nSelectRow;
                   92256:       sqlite3ExprDelete(db, p->pLimit);
                   92257:       p->pLimit = pLimit;
                   92258:       p->pOffset = pOffset;
                   92259: 
                   92260:       /* Generate code to take the intersection of the two temporary
                   92261:       ** tables.
                   92262:       */
                   92263:       assert( p->pEList );
                   92264:       if( dest.eDest==SRT_Output ){
                   92265:         Select *pFirst = p;
                   92266:         while( pFirst->pPrior ) pFirst = pFirst->pPrior;
                   92267:         generateColumnNames(pParse, 0, pFirst->pEList);
                   92268:       }
                   92269:       iBreak = sqlite3VdbeMakeLabel(v);
                   92270:       iCont = sqlite3VdbeMakeLabel(v);
                   92271:       computeLimitRegisters(pParse, p, iBreak);
                   92272:       sqlite3VdbeAddOp2(v, OP_Rewind, tab1, iBreak);
                   92273:       r1 = sqlite3GetTempReg(pParse);
                   92274:       iStart = sqlite3VdbeAddOp2(v, OP_RowKey, tab1, r1);
                   92275:       sqlite3VdbeAddOp4Int(v, OP_NotFound, tab2, iCont, r1, 0);
                   92276:       sqlite3ReleaseTempReg(pParse, r1);
                   92277:       selectInnerLoop(pParse, p, p->pEList, tab1, p->pEList->nExpr,
                   92278:                       0, -1, &dest, iCont, iBreak);
                   92279:       sqlite3VdbeResolveLabel(v, iCont);
                   92280:       sqlite3VdbeAddOp2(v, OP_Next, tab1, iStart);
                   92281:       sqlite3VdbeResolveLabel(v, iBreak);
                   92282:       sqlite3VdbeAddOp2(v, OP_Close, tab2, 0);
                   92283:       sqlite3VdbeAddOp2(v, OP_Close, tab1, 0);
                   92284:       break;
                   92285:     }
                   92286:   }
                   92287: 
                   92288:   explainComposite(pParse, p->op, iSub1, iSub2, p->op!=TK_ALL);
                   92289: 
                   92290:   /* Compute collating sequences used by 
                   92291:   ** temporary tables needed to implement the compound select.
                   92292:   ** Attach the KeyInfo structure to all temporary tables.
                   92293:   **
                   92294:   ** This section is run by the right-most SELECT statement only.
                   92295:   ** SELECT statements to the left always skip this part.  The right-most
                   92296:   ** SELECT might also skip this part if it has no ORDER BY clause and
                   92297:   ** no temp tables are required.
                   92298:   */
                   92299:   if( p->selFlags & SF_UsesEphemeral ){
                   92300:     int i;                        /* Loop counter */
                   92301:     KeyInfo *pKeyInfo;            /* Collating sequence for the result set */
                   92302:     Select *pLoop;                /* For looping through SELECT statements */
                   92303:     CollSeq **apColl;             /* For looping through pKeyInfo->aColl[] */
                   92304:     int nCol;                     /* Number of columns in result set */
                   92305: 
                   92306:     assert( p->pRightmost==p );
                   92307:     nCol = p->pEList->nExpr;
                   92308:     pKeyInfo = sqlite3DbMallocZero(db,
                   92309:                        sizeof(*pKeyInfo)+nCol*(sizeof(CollSeq*) + 1));
                   92310:     if( !pKeyInfo ){
                   92311:       rc = SQLITE_NOMEM;
                   92312:       goto multi_select_end;
                   92313:     }
                   92314: 
                   92315:     pKeyInfo->enc = ENC(db);
                   92316:     pKeyInfo->nField = (u16)nCol;
                   92317: 
                   92318:     for(i=0, apColl=pKeyInfo->aColl; i<nCol; i++, apColl++){
                   92319:       *apColl = multiSelectCollSeq(pParse, p, i);
                   92320:       if( 0==*apColl ){
                   92321:         *apColl = db->pDfltColl;
                   92322:       }
                   92323:     }
                   92324: 
                   92325:     for(pLoop=p; pLoop; pLoop=pLoop->pPrior){
                   92326:       for(i=0; i<2; i++){
                   92327:         int addr = pLoop->addrOpenEphm[i];
                   92328:         if( addr<0 ){
                   92329:           /* If [0] is unused then [1] is also unused.  So we can
                   92330:           ** always safely abort as soon as the first unused slot is found */
                   92331:           assert( pLoop->addrOpenEphm[1]<0 );
                   92332:           break;
                   92333:         }
                   92334:         sqlite3VdbeChangeP2(v, addr, nCol);
                   92335:         sqlite3VdbeChangeP4(v, addr, (char*)pKeyInfo, P4_KEYINFO);
                   92336:         pLoop->addrOpenEphm[i] = -1;
                   92337:       }
                   92338:     }
                   92339:     sqlite3DbFree(db, pKeyInfo);
                   92340:   }
                   92341: 
                   92342: multi_select_end:
                   92343:   pDest->iMem = dest.iMem;
                   92344:   pDest->nMem = dest.nMem;
                   92345:   sqlite3SelectDelete(db, pDelete);
                   92346:   return rc;
                   92347: }
                   92348: #endif /* SQLITE_OMIT_COMPOUND_SELECT */
                   92349: 
                   92350: /*
                   92351: ** Code an output subroutine for a coroutine implementation of a
                   92352: ** SELECT statment.
                   92353: **
                   92354: ** The data to be output is contained in pIn->iMem.  There are
                   92355: ** pIn->nMem columns to be output.  pDest is where the output should
                   92356: ** be sent.
                   92357: **
                   92358: ** regReturn is the number of the register holding the subroutine
                   92359: ** return address.
                   92360: **
                   92361: ** If regPrev>0 then it is the first register in a vector that
                   92362: ** records the previous output.  mem[regPrev] is a flag that is false
                   92363: ** if there has been no previous output.  If regPrev>0 then code is
                   92364: ** generated to suppress duplicates.  pKeyInfo is used for comparing
                   92365: ** keys.
                   92366: **
                   92367: ** If the LIMIT found in p->iLimit is reached, jump immediately to
                   92368: ** iBreak.
                   92369: */
                   92370: static int generateOutputSubroutine(
                   92371:   Parse *pParse,          /* Parsing context */
                   92372:   Select *p,              /* The SELECT statement */
                   92373:   SelectDest *pIn,        /* Coroutine supplying data */
                   92374:   SelectDest *pDest,      /* Where to send the data */
                   92375:   int regReturn,          /* The return address register */
                   92376:   int regPrev,            /* Previous result register.  No uniqueness if 0 */
                   92377:   KeyInfo *pKeyInfo,      /* For comparing with previous entry */
                   92378:   int p4type,             /* The p4 type for pKeyInfo */
                   92379:   int iBreak              /* Jump here if we hit the LIMIT */
                   92380: ){
                   92381:   Vdbe *v = pParse->pVdbe;
                   92382:   int iContinue;
                   92383:   int addr;
                   92384: 
                   92385:   addr = sqlite3VdbeCurrentAddr(v);
                   92386:   iContinue = sqlite3VdbeMakeLabel(v);
                   92387: 
                   92388:   /* Suppress duplicates for UNION, EXCEPT, and INTERSECT 
                   92389:   */
                   92390:   if( regPrev ){
                   92391:     int j1, j2;
                   92392:     j1 = sqlite3VdbeAddOp1(v, OP_IfNot, regPrev);
                   92393:     j2 = sqlite3VdbeAddOp4(v, OP_Compare, pIn->iMem, regPrev+1, pIn->nMem,
                   92394:                               (char*)pKeyInfo, p4type);
                   92395:     sqlite3VdbeAddOp3(v, OP_Jump, j2+2, iContinue, j2+2);
                   92396:     sqlite3VdbeJumpHere(v, j1);
                   92397:     sqlite3ExprCodeCopy(pParse, pIn->iMem, regPrev+1, pIn->nMem);
                   92398:     sqlite3VdbeAddOp2(v, OP_Integer, 1, regPrev);
                   92399:   }
                   92400:   if( pParse->db->mallocFailed ) return 0;
                   92401: 
                   92402:   /* Suppress the the first OFFSET entries if there is an OFFSET clause
                   92403:   */
                   92404:   codeOffset(v, p, iContinue);
                   92405: 
                   92406:   switch( pDest->eDest ){
                   92407:     /* Store the result as data using a unique key.
                   92408:     */
                   92409:     case SRT_Table:
                   92410:     case SRT_EphemTab: {
                   92411:       int r1 = sqlite3GetTempReg(pParse);
                   92412:       int r2 = sqlite3GetTempReg(pParse);
                   92413:       testcase( pDest->eDest==SRT_Table );
                   92414:       testcase( pDest->eDest==SRT_EphemTab );
                   92415:       sqlite3VdbeAddOp3(v, OP_MakeRecord, pIn->iMem, pIn->nMem, r1);
                   92416:       sqlite3VdbeAddOp2(v, OP_NewRowid, pDest->iParm, r2);
                   92417:       sqlite3VdbeAddOp3(v, OP_Insert, pDest->iParm, r1, r2);
                   92418:       sqlite3VdbeChangeP5(v, OPFLAG_APPEND);
                   92419:       sqlite3ReleaseTempReg(pParse, r2);
                   92420:       sqlite3ReleaseTempReg(pParse, r1);
                   92421:       break;
                   92422:     }
                   92423: 
                   92424: #ifndef SQLITE_OMIT_SUBQUERY
                   92425:     /* If we are creating a set for an "expr IN (SELECT ...)" construct,
                   92426:     ** then there should be a single item on the stack.  Write this
                   92427:     ** item into the set table with bogus data.
                   92428:     */
                   92429:     case SRT_Set: {
                   92430:       int r1;
                   92431:       assert( pIn->nMem==1 );
                   92432:       p->affinity = 
                   92433:          sqlite3CompareAffinity(p->pEList->a[0].pExpr, pDest->affinity);
                   92434:       r1 = sqlite3GetTempReg(pParse);
                   92435:       sqlite3VdbeAddOp4(v, OP_MakeRecord, pIn->iMem, 1, r1, &p->affinity, 1);
                   92436:       sqlite3ExprCacheAffinityChange(pParse, pIn->iMem, 1);
                   92437:       sqlite3VdbeAddOp2(v, OP_IdxInsert, pDest->iParm, r1);
                   92438:       sqlite3ReleaseTempReg(pParse, r1);
                   92439:       break;
                   92440:     }
                   92441: 
                   92442: #if 0  /* Never occurs on an ORDER BY query */
                   92443:     /* If any row exist in the result set, record that fact and abort.
                   92444:     */
                   92445:     case SRT_Exists: {
                   92446:       sqlite3VdbeAddOp2(v, OP_Integer, 1, pDest->iParm);
                   92447:       /* The LIMIT clause will terminate the loop for us */
                   92448:       break;
                   92449:     }
                   92450: #endif
                   92451: 
                   92452:     /* If this is a scalar select that is part of an expression, then
                   92453:     ** store the results in the appropriate memory cell and break out
                   92454:     ** of the scan loop.
                   92455:     */
                   92456:     case SRT_Mem: {
                   92457:       assert( pIn->nMem==1 );
                   92458:       sqlite3ExprCodeMove(pParse, pIn->iMem, pDest->iParm, 1);
                   92459:       /* The LIMIT clause will jump out of the loop for us */
                   92460:       break;
                   92461:     }
                   92462: #endif /* #ifndef SQLITE_OMIT_SUBQUERY */
                   92463: 
                   92464:     /* The results are stored in a sequence of registers
                   92465:     ** starting at pDest->iMem.  Then the co-routine yields.
                   92466:     */
                   92467:     case SRT_Coroutine: {
                   92468:       if( pDest->iMem==0 ){
                   92469:         pDest->iMem = sqlite3GetTempRange(pParse, pIn->nMem);
                   92470:         pDest->nMem = pIn->nMem;
                   92471:       }
                   92472:       sqlite3ExprCodeMove(pParse, pIn->iMem, pDest->iMem, pDest->nMem);
                   92473:       sqlite3VdbeAddOp1(v, OP_Yield, pDest->iParm);
                   92474:       break;
                   92475:     }
                   92476: 
                   92477:     /* If none of the above, then the result destination must be
                   92478:     ** SRT_Output.  This routine is never called with any other
                   92479:     ** destination other than the ones handled above or SRT_Output.
                   92480:     **
                   92481:     ** For SRT_Output, results are stored in a sequence of registers.  
                   92482:     ** Then the OP_ResultRow opcode is used to cause sqlite3_step() to
                   92483:     ** return the next row of result.
                   92484:     */
                   92485:     default: {
                   92486:       assert( pDest->eDest==SRT_Output );
                   92487:       sqlite3VdbeAddOp2(v, OP_ResultRow, pIn->iMem, pIn->nMem);
                   92488:       sqlite3ExprCacheAffinityChange(pParse, pIn->iMem, pIn->nMem);
                   92489:       break;
                   92490:     }
                   92491:   }
                   92492: 
                   92493:   /* Jump to the end of the loop if the LIMIT is reached.
                   92494:   */
                   92495:   if( p->iLimit ){
                   92496:     sqlite3VdbeAddOp3(v, OP_IfZero, p->iLimit, iBreak, -1);
                   92497:   }
                   92498: 
                   92499:   /* Generate the subroutine return
                   92500:   */
                   92501:   sqlite3VdbeResolveLabel(v, iContinue);
                   92502:   sqlite3VdbeAddOp1(v, OP_Return, regReturn);
                   92503: 
                   92504:   return addr;
                   92505: }
                   92506: 
                   92507: /*
                   92508: ** Alternative compound select code generator for cases when there
                   92509: ** is an ORDER BY clause.
                   92510: **
                   92511: ** We assume a query of the following form:
                   92512: **
                   92513: **      <selectA>  <operator>  <selectB>  ORDER BY <orderbylist>
                   92514: **
                   92515: ** <operator> is one of UNION ALL, UNION, EXCEPT, or INTERSECT.  The idea
                   92516: ** is to code both <selectA> and <selectB> with the ORDER BY clause as
                   92517: ** co-routines.  Then run the co-routines in parallel and merge the results
                   92518: ** into the output.  In addition to the two coroutines (called selectA and
                   92519: ** selectB) there are 7 subroutines:
                   92520: **
                   92521: **    outA:    Move the output of the selectA coroutine into the output
                   92522: **             of the compound query.
                   92523: **
                   92524: **    outB:    Move the output of the selectB coroutine into the output
                   92525: **             of the compound query.  (Only generated for UNION and
                   92526: **             UNION ALL.  EXCEPT and INSERTSECT never output a row that
                   92527: **             appears only in B.)
                   92528: **
                   92529: **    AltB:    Called when there is data from both coroutines and A<B.
                   92530: **
                   92531: **    AeqB:    Called when there is data from both coroutines and A==B.
                   92532: **
                   92533: **    AgtB:    Called when there is data from both coroutines and A>B.
                   92534: **
                   92535: **    EofA:    Called when data is exhausted from selectA.
                   92536: **
                   92537: **    EofB:    Called when data is exhausted from selectB.
                   92538: **
                   92539: ** The implementation of the latter five subroutines depend on which 
                   92540: ** <operator> is used:
                   92541: **
                   92542: **
                   92543: **             UNION ALL         UNION            EXCEPT          INTERSECT
                   92544: **          -------------  -----------------  --------------  -----------------
                   92545: **   AltB:   outA, nextA      outA, nextA       outA, nextA         nextA
                   92546: **
                   92547: **   AeqB:   outA, nextA         nextA             nextA         outA, nextA
                   92548: **
                   92549: **   AgtB:   outB, nextB      outB, nextB          nextB            nextB
                   92550: **
                   92551: **   EofA:   outB, nextB      outB, nextB          halt             halt
                   92552: **
                   92553: **   EofB:   outA, nextA      outA, nextA       outA, nextA         halt
                   92554: **
                   92555: ** In the AltB, AeqB, and AgtB subroutines, an EOF on A following nextA
                   92556: ** causes an immediate jump to EofA and an EOF on B following nextB causes
                   92557: ** an immediate jump to EofB.  Within EofA and EofB, and EOF on entry or
                   92558: ** following nextX causes a jump to the end of the select processing.
                   92559: **
                   92560: ** Duplicate removal in the UNION, EXCEPT, and INTERSECT cases is handled
                   92561: ** within the output subroutine.  The regPrev register set holds the previously
                   92562: ** output value.  A comparison is made against this value and the output
                   92563: ** is skipped if the next results would be the same as the previous.
                   92564: **
                   92565: ** The implementation plan is to implement the two coroutines and seven
                   92566: ** subroutines first, then put the control logic at the bottom.  Like this:
                   92567: **
                   92568: **          goto Init
                   92569: **     coA: coroutine for left query (A)
                   92570: **     coB: coroutine for right query (B)
                   92571: **    outA: output one row of A
                   92572: **    outB: output one row of B (UNION and UNION ALL only)
                   92573: **    EofA: ...
                   92574: **    EofB: ...
                   92575: **    AltB: ...
                   92576: **    AeqB: ...
                   92577: **    AgtB: ...
                   92578: **    Init: initialize coroutine registers
                   92579: **          yield coA
                   92580: **          if eof(A) goto EofA
                   92581: **          yield coB
                   92582: **          if eof(B) goto EofB
                   92583: **    Cmpr: Compare A, B
                   92584: **          Jump AltB, AeqB, AgtB
                   92585: **     End: ...
                   92586: **
                   92587: ** We call AltB, AeqB, AgtB, EofA, and EofB "subroutines" but they are not
                   92588: ** actually called using Gosub and they do not Return.  EofA and EofB loop
                   92589: ** until all data is exhausted then jump to the "end" labe.  AltB, AeqB,
                   92590: ** and AgtB jump to either L2 or to one of EofA or EofB.
                   92591: */
                   92592: #ifndef SQLITE_OMIT_COMPOUND_SELECT
                   92593: static int multiSelectOrderBy(
                   92594:   Parse *pParse,        /* Parsing context */
                   92595:   Select *p,            /* The right-most of SELECTs to be coded */
                   92596:   SelectDest *pDest     /* What to do with query results */
                   92597: ){
                   92598:   int i, j;             /* Loop counters */
                   92599:   Select *pPrior;       /* Another SELECT immediately to our left */
                   92600:   Vdbe *v;              /* Generate code to this VDBE */
                   92601:   SelectDest destA;     /* Destination for coroutine A */
                   92602:   SelectDest destB;     /* Destination for coroutine B */
                   92603:   int regAddrA;         /* Address register for select-A coroutine */
                   92604:   int regEofA;          /* Flag to indicate when select-A is complete */
                   92605:   int regAddrB;         /* Address register for select-B coroutine */
                   92606:   int regEofB;          /* Flag to indicate when select-B is complete */
                   92607:   int addrSelectA;      /* Address of the select-A coroutine */
                   92608:   int addrSelectB;      /* Address of the select-B coroutine */
                   92609:   int regOutA;          /* Address register for the output-A subroutine */
                   92610:   int regOutB;          /* Address register for the output-B subroutine */
                   92611:   int addrOutA;         /* Address of the output-A subroutine */
                   92612:   int addrOutB = 0;     /* Address of the output-B subroutine */
                   92613:   int addrEofA;         /* Address of the select-A-exhausted subroutine */
                   92614:   int addrEofB;         /* Address of the select-B-exhausted subroutine */
                   92615:   int addrAltB;         /* Address of the A<B subroutine */
                   92616:   int addrAeqB;         /* Address of the A==B subroutine */
                   92617:   int addrAgtB;         /* Address of the A>B subroutine */
                   92618:   int regLimitA;        /* Limit register for select-A */
                   92619:   int regLimitB;        /* Limit register for select-A */
                   92620:   int regPrev;          /* A range of registers to hold previous output */
                   92621:   int savedLimit;       /* Saved value of p->iLimit */
                   92622:   int savedOffset;      /* Saved value of p->iOffset */
                   92623:   int labelCmpr;        /* Label for the start of the merge algorithm */
                   92624:   int labelEnd;         /* Label for the end of the overall SELECT stmt */
                   92625:   int j1;               /* Jump instructions that get retargetted */
                   92626:   int op;               /* One of TK_ALL, TK_UNION, TK_EXCEPT, TK_INTERSECT */
                   92627:   KeyInfo *pKeyDup = 0; /* Comparison information for duplicate removal */
                   92628:   KeyInfo *pKeyMerge;   /* Comparison information for merging rows */
                   92629:   sqlite3 *db;          /* Database connection */
                   92630:   ExprList *pOrderBy;   /* The ORDER BY clause */
                   92631:   int nOrderBy;         /* Number of terms in the ORDER BY clause */
                   92632:   int *aPermute;        /* Mapping from ORDER BY terms to result set columns */
                   92633: #ifndef SQLITE_OMIT_EXPLAIN
                   92634:   int iSub1;            /* EQP id of left-hand query */
                   92635:   int iSub2;            /* EQP id of right-hand query */
                   92636: #endif
                   92637: 
                   92638:   assert( p->pOrderBy!=0 );
                   92639:   assert( pKeyDup==0 ); /* "Managed" code needs this.  Ticket #3382. */
                   92640:   db = pParse->db;
                   92641:   v = pParse->pVdbe;
                   92642:   assert( v!=0 );       /* Already thrown the error if VDBE alloc failed */
                   92643:   labelEnd = sqlite3VdbeMakeLabel(v);
                   92644:   labelCmpr = sqlite3VdbeMakeLabel(v);
                   92645: 
                   92646: 
                   92647:   /* Patch up the ORDER BY clause
                   92648:   */
                   92649:   op = p->op;  
                   92650:   pPrior = p->pPrior;
                   92651:   assert( pPrior->pOrderBy==0 );
                   92652:   pOrderBy = p->pOrderBy;
                   92653:   assert( pOrderBy );
                   92654:   nOrderBy = pOrderBy->nExpr;
                   92655: 
                   92656:   /* For operators other than UNION ALL we have to make sure that
                   92657:   ** the ORDER BY clause covers every term of the result set.  Add
                   92658:   ** terms to the ORDER BY clause as necessary.
                   92659:   */
                   92660:   if( op!=TK_ALL ){
                   92661:     for(i=1; db->mallocFailed==0 && i<=p->pEList->nExpr; i++){
                   92662:       struct ExprList_item *pItem;
                   92663:       for(j=0, pItem=pOrderBy->a; j<nOrderBy; j++, pItem++){
                   92664:         assert( pItem->iCol>0 );
                   92665:         if( pItem->iCol==i ) break;
                   92666:       }
                   92667:       if( j==nOrderBy ){
                   92668:         Expr *pNew = sqlite3Expr(db, TK_INTEGER, 0);
                   92669:         if( pNew==0 ) return SQLITE_NOMEM;
                   92670:         pNew->flags |= EP_IntValue;
                   92671:         pNew->u.iValue = i;
                   92672:         pOrderBy = sqlite3ExprListAppend(pParse, pOrderBy, pNew);
                   92673:         pOrderBy->a[nOrderBy++].iCol = (u16)i;
                   92674:       }
                   92675:     }
                   92676:   }
                   92677: 
                   92678:   /* Compute the comparison permutation and keyinfo that is used with
                   92679:   ** the permutation used to determine if the next
                   92680:   ** row of results comes from selectA or selectB.  Also add explicit
                   92681:   ** collations to the ORDER BY clause terms so that when the subqueries
                   92682:   ** to the right and the left are evaluated, they use the correct
                   92683:   ** collation.
                   92684:   */
                   92685:   aPermute = sqlite3DbMallocRaw(db, sizeof(int)*nOrderBy);
                   92686:   if( aPermute ){
                   92687:     struct ExprList_item *pItem;
                   92688:     for(i=0, pItem=pOrderBy->a; i<nOrderBy; i++, pItem++){
                   92689:       assert( pItem->iCol>0  && pItem->iCol<=p->pEList->nExpr );
                   92690:       aPermute[i] = pItem->iCol - 1;
                   92691:     }
                   92692:     pKeyMerge =
                   92693:       sqlite3DbMallocRaw(db, sizeof(*pKeyMerge)+nOrderBy*(sizeof(CollSeq*)+1));
                   92694:     if( pKeyMerge ){
                   92695:       pKeyMerge->aSortOrder = (u8*)&pKeyMerge->aColl[nOrderBy];
                   92696:       pKeyMerge->nField = (u16)nOrderBy;
                   92697:       pKeyMerge->enc = ENC(db);
                   92698:       for(i=0; i<nOrderBy; i++){
                   92699:         CollSeq *pColl;
                   92700:         Expr *pTerm = pOrderBy->a[i].pExpr;
                   92701:         if( pTerm->flags & EP_ExpCollate ){
                   92702:           pColl = pTerm->pColl;
                   92703:         }else{
                   92704:           pColl = multiSelectCollSeq(pParse, p, aPermute[i]);
                   92705:           pTerm->flags |= EP_ExpCollate;
                   92706:           pTerm->pColl = pColl;
                   92707:         }
                   92708:         pKeyMerge->aColl[i] = pColl;
                   92709:         pKeyMerge->aSortOrder[i] = pOrderBy->a[i].sortOrder;
                   92710:       }
                   92711:     }
                   92712:   }else{
                   92713:     pKeyMerge = 0;
                   92714:   }
                   92715: 
                   92716:   /* Reattach the ORDER BY clause to the query.
                   92717:   */
                   92718:   p->pOrderBy = pOrderBy;
                   92719:   pPrior->pOrderBy = sqlite3ExprListDup(pParse->db, pOrderBy, 0);
                   92720: 
                   92721:   /* Allocate a range of temporary registers and the KeyInfo needed
                   92722:   ** for the logic that removes duplicate result rows when the
                   92723:   ** operator is UNION, EXCEPT, or INTERSECT (but not UNION ALL).
                   92724:   */
                   92725:   if( op==TK_ALL ){
                   92726:     regPrev = 0;
                   92727:   }else{
                   92728:     int nExpr = p->pEList->nExpr;
                   92729:     assert( nOrderBy>=nExpr || db->mallocFailed );
                   92730:     regPrev = sqlite3GetTempRange(pParse, nExpr+1);
                   92731:     sqlite3VdbeAddOp2(v, OP_Integer, 0, regPrev);
                   92732:     pKeyDup = sqlite3DbMallocZero(db,
                   92733:                   sizeof(*pKeyDup) + nExpr*(sizeof(CollSeq*)+1) );
                   92734:     if( pKeyDup ){
                   92735:       pKeyDup->aSortOrder = (u8*)&pKeyDup->aColl[nExpr];
                   92736:       pKeyDup->nField = (u16)nExpr;
                   92737:       pKeyDup->enc = ENC(db);
                   92738:       for(i=0; i<nExpr; i++){
                   92739:         pKeyDup->aColl[i] = multiSelectCollSeq(pParse, p, i);
                   92740:         pKeyDup->aSortOrder[i] = 0;
                   92741:       }
                   92742:     }
                   92743:   }
                   92744:  
                   92745:   /* Separate the left and the right query from one another
                   92746:   */
                   92747:   p->pPrior = 0;
                   92748:   sqlite3ResolveOrderGroupBy(pParse, p, p->pOrderBy, "ORDER");
                   92749:   if( pPrior->pPrior==0 ){
                   92750:     sqlite3ResolveOrderGroupBy(pParse, pPrior, pPrior->pOrderBy, "ORDER");
                   92751:   }
                   92752: 
                   92753:   /* Compute the limit registers */
                   92754:   computeLimitRegisters(pParse, p, labelEnd);
                   92755:   if( p->iLimit && op==TK_ALL ){
                   92756:     regLimitA = ++pParse->nMem;
                   92757:     regLimitB = ++pParse->nMem;
                   92758:     sqlite3VdbeAddOp2(v, OP_Copy, p->iOffset ? p->iOffset+1 : p->iLimit,
                   92759:                                   regLimitA);
                   92760:     sqlite3VdbeAddOp2(v, OP_Copy, regLimitA, regLimitB);
                   92761:   }else{
                   92762:     regLimitA = regLimitB = 0;
                   92763:   }
                   92764:   sqlite3ExprDelete(db, p->pLimit);
                   92765:   p->pLimit = 0;
                   92766:   sqlite3ExprDelete(db, p->pOffset);
                   92767:   p->pOffset = 0;
                   92768: 
                   92769:   regAddrA = ++pParse->nMem;
                   92770:   regEofA = ++pParse->nMem;
                   92771:   regAddrB = ++pParse->nMem;
                   92772:   regEofB = ++pParse->nMem;
                   92773:   regOutA = ++pParse->nMem;
                   92774:   regOutB = ++pParse->nMem;
                   92775:   sqlite3SelectDestInit(&destA, SRT_Coroutine, regAddrA);
                   92776:   sqlite3SelectDestInit(&destB, SRT_Coroutine, regAddrB);
                   92777: 
                   92778:   /* Jump past the various subroutines and coroutines to the main
                   92779:   ** merge loop
                   92780:   */
                   92781:   j1 = sqlite3VdbeAddOp0(v, OP_Goto);
                   92782:   addrSelectA = sqlite3VdbeCurrentAddr(v);
                   92783: 
                   92784: 
                   92785:   /* Generate a coroutine to evaluate the SELECT statement to the
                   92786:   ** left of the compound operator - the "A" select.
                   92787:   */
                   92788:   VdbeNoopComment((v, "Begin coroutine for left SELECT"));
                   92789:   pPrior->iLimit = regLimitA;
                   92790:   explainSetInteger(iSub1, pParse->iNextSelectId);
                   92791:   sqlite3Select(pParse, pPrior, &destA);
                   92792:   sqlite3VdbeAddOp2(v, OP_Integer, 1, regEofA);
                   92793:   sqlite3VdbeAddOp1(v, OP_Yield, regAddrA);
                   92794:   VdbeNoopComment((v, "End coroutine for left SELECT"));
                   92795: 
                   92796:   /* Generate a coroutine to evaluate the SELECT statement on 
                   92797:   ** the right - the "B" select
                   92798:   */
                   92799:   addrSelectB = sqlite3VdbeCurrentAddr(v);
                   92800:   VdbeNoopComment((v, "Begin coroutine for right SELECT"));
                   92801:   savedLimit = p->iLimit;
                   92802:   savedOffset = p->iOffset;
                   92803:   p->iLimit = regLimitB;
                   92804:   p->iOffset = 0;  
                   92805:   explainSetInteger(iSub2, pParse->iNextSelectId);
                   92806:   sqlite3Select(pParse, p, &destB);
                   92807:   p->iLimit = savedLimit;
                   92808:   p->iOffset = savedOffset;
                   92809:   sqlite3VdbeAddOp2(v, OP_Integer, 1, regEofB);
                   92810:   sqlite3VdbeAddOp1(v, OP_Yield, regAddrB);
                   92811:   VdbeNoopComment((v, "End coroutine for right SELECT"));
                   92812: 
                   92813:   /* Generate a subroutine that outputs the current row of the A
                   92814:   ** select as the next output row of the compound select.
                   92815:   */
                   92816:   VdbeNoopComment((v, "Output routine for A"));
                   92817:   addrOutA = generateOutputSubroutine(pParse,
                   92818:                  p, &destA, pDest, regOutA,
                   92819:                  regPrev, pKeyDup, P4_KEYINFO_HANDOFF, labelEnd);
                   92820:   
                   92821:   /* Generate a subroutine that outputs the current row of the B
                   92822:   ** select as the next output row of the compound select.
                   92823:   */
                   92824:   if( op==TK_ALL || op==TK_UNION ){
                   92825:     VdbeNoopComment((v, "Output routine for B"));
                   92826:     addrOutB = generateOutputSubroutine(pParse,
                   92827:                  p, &destB, pDest, regOutB,
                   92828:                  regPrev, pKeyDup, P4_KEYINFO_STATIC, labelEnd);
                   92829:   }
                   92830: 
                   92831:   /* Generate a subroutine to run when the results from select A
                   92832:   ** are exhausted and only data in select B remains.
                   92833:   */
                   92834:   VdbeNoopComment((v, "eof-A subroutine"));
                   92835:   if( op==TK_EXCEPT || op==TK_INTERSECT ){
                   92836:     addrEofA = sqlite3VdbeAddOp2(v, OP_Goto, 0, labelEnd);
                   92837:   }else{  
                   92838:     addrEofA = sqlite3VdbeAddOp2(v, OP_If, regEofB, labelEnd);
                   92839:     sqlite3VdbeAddOp2(v, OP_Gosub, regOutB, addrOutB);
                   92840:     sqlite3VdbeAddOp1(v, OP_Yield, regAddrB);
                   92841:     sqlite3VdbeAddOp2(v, OP_Goto, 0, addrEofA);
                   92842:     p->nSelectRow += pPrior->nSelectRow;
                   92843:   }
                   92844: 
                   92845:   /* Generate a subroutine to run when the results from select B
                   92846:   ** are exhausted and only data in select A remains.
                   92847:   */
                   92848:   if( op==TK_INTERSECT ){
                   92849:     addrEofB = addrEofA;
                   92850:     if( p->nSelectRow > pPrior->nSelectRow ) p->nSelectRow = pPrior->nSelectRow;
                   92851:   }else{  
                   92852:     VdbeNoopComment((v, "eof-B subroutine"));
                   92853:     addrEofB = sqlite3VdbeAddOp2(v, OP_If, regEofA, labelEnd);
                   92854:     sqlite3VdbeAddOp2(v, OP_Gosub, regOutA, addrOutA);
                   92855:     sqlite3VdbeAddOp1(v, OP_Yield, regAddrA);
                   92856:     sqlite3VdbeAddOp2(v, OP_Goto, 0, addrEofB);
                   92857:   }
                   92858: 
                   92859:   /* Generate code to handle the case of A<B
                   92860:   */
                   92861:   VdbeNoopComment((v, "A-lt-B subroutine"));
                   92862:   addrAltB = sqlite3VdbeAddOp2(v, OP_Gosub, regOutA, addrOutA);
                   92863:   sqlite3VdbeAddOp1(v, OP_Yield, regAddrA);
                   92864:   sqlite3VdbeAddOp2(v, OP_If, regEofA, addrEofA);
                   92865:   sqlite3VdbeAddOp2(v, OP_Goto, 0, labelCmpr);
                   92866: 
                   92867:   /* Generate code to handle the case of A==B
                   92868:   */
                   92869:   if( op==TK_ALL ){
                   92870:     addrAeqB = addrAltB;
                   92871:   }else if( op==TK_INTERSECT ){
                   92872:     addrAeqB = addrAltB;
                   92873:     addrAltB++;
                   92874:   }else{
                   92875:     VdbeNoopComment((v, "A-eq-B subroutine"));
                   92876:     addrAeqB =
                   92877:     sqlite3VdbeAddOp1(v, OP_Yield, regAddrA);
                   92878:     sqlite3VdbeAddOp2(v, OP_If, regEofA, addrEofA);
                   92879:     sqlite3VdbeAddOp2(v, OP_Goto, 0, labelCmpr);
                   92880:   }
                   92881: 
                   92882:   /* Generate code to handle the case of A>B
                   92883:   */
                   92884:   VdbeNoopComment((v, "A-gt-B subroutine"));
                   92885:   addrAgtB = sqlite3VdbeCurrentAddr(v);
                   92886:   if( op==TK_ALL || op==TK_UNION ){
                   92887:     sqlite3VdbeAddOp2(v, OP_Gosub, regOutB, addrOutB);
                   92888:   }
                   92889:   sqlite3VdbeAddOp1(v, OP_Yield, regAddrB);
                   92890:   sqlite3VdbeAddOp2(v, OP_If, regEofB, addrEofB);
                   92891:   sqlite3VdbeAddOp2(v, OP_Goto, 0, labelCmpr);
                   92892: 
                   92893:   /* This code runs once to initialize everything.
                   92894:   */
                   92895:   sqlite3VdbeJumpHere(v, j1);
                   92896:   sqlite3VdbeAddOp2(v, OP_Integer, 0, regEofA);
                   92897:   sqlite3VdbeAddOp2(v, OP_Integer, 0, regEofB);
                   92898:   sqlite3VdbeAddOp2(v, OP_Gosub, regAddrA, addrSelectA);
                   92899:   sqlite3VdbeAddOp2(v, OP_Gosub, regAddrB, addrSelectB);
                   92900:   sqlite3VdbeAddOp2(v, OP_If, regEofA, addrEofA);
                   92901:   sqlite3VdbeAddOp2(v, OP_If, regEofB, addrEofB);
                   92902: 
                   92903:   /* Implement the main merge loop
                   92904:   */
                   92905:   sqlite3VdbeResolveLabel(v, labelCmpr);
                   92906:   sqlite3VdbeAddOp4(v, OP_Permutation, 0, 0, 0, (char*)aPermute, P4_INTARRAY);
                   92907:   sqlite3VdbeAddOp4(v, OP_Compare, destA.iMem, destB.iMem, nOrderBy,
                   92908:                          (char*)pKeyMerge, P4_KEYINFO_HANDOFF);
                   92909:   sqlite3VdbeAddOp3(v, OP_Jump, addrAltB, addrAeqB, addrAgtB);
                   92910: 
                   92911:   /* Release temporary registers
                   92912:   */
                   92913:   if( regPrev ){
                   92914:     sqlite3ReleaseTempRange(pParse, regPrev, nOrderBy+1);
                   92915:   }
                   92916: 
                   92917:   /* Jump to the this point in order to terminate the query.
                   92918:   */
                   92919:   sqlite3VdbeResolveLabel(v, labelEnd);
                   92920: 
                   92921:   /* Set the number of output columns
                   92922:   */
                   92923:   if( pDest->eDest==SRT_Output ){
                   92924:     Select *pFirst = pPrior;
                   92925:     while( pFirst->pPrior ) pFirst = pFirst->pPrior;
                   92926:     generateColumnNames(pParse, 0, pFirst->pEList);
                   92927:   }
                   92928: 
                   92929:   /* Reassembly the compound query so that it will be freed correctly
                   92930:   ** by the calling function */
                   92931:   if( p->pPrior ){
                   92932:     sqlite3SelectDelete(db, p->pPrior);
                   92933:   }
                   92934:   p->pPrior = pPrior;
                   92935: 
                   92936:   /*** TBD:  Insert subroutine calls to close cursors on incomplete
                   92937:   **** subqueries ****/
                   92938:   explainComposite(pParse, p->op, iSub1, iSub2, 0);
                   92939:   return SQLITE_OK;
                   92940: }
                   92941: #endif
                   92942: 
                   92943: #if !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW)
                   92944: /* Forward Declarations */
                   92945: static void substExprList(sqlite3*, ExprList*, int, ExprList*);
                   92946: static void substSelect(sqlite3*, Select *, int, ExprList *);
                   92947: 
                   92948: /*
                   92949: ** Scan through the expression pExpr.  Replace every reference to
                   92950: ** a column in table number iTable with a copy of the iColumn-th
                   92951: ** entry in pEList.  (But leave references to the ROWID column 
                   92952: ** unchanged.)
                   92953: **
                   92954: ** This routine is part of the flattening procedure.  A subquery
                   92955: ** whose result set is defined by pEList appears as entry in the
                   92956: ** FROM clause of a SELECT such that the VDBE cursor assigned to that
                   92957: ** FORM clause entry is iTable.  This routine make the necessary 
                   92958: ** changes to pExpr so that it refers directly to the source table
                   92959: ** of the subquery rather the result set of the subquery.
                   92960: */
                   92961: static Expr *substExpr(
                   92962:   sqlite3 *db,        /* Report malloc errors to this connection */
                   92963:   Expr *pExpr,        /* Expr in which substitution occurs */
                   92964:   int iTable,         /* Table to be substituted */
                   92965:   ExprList *pEList    /* Substitute expressions */
                   92966: ){
                   92967:   if( pExpr==0 ) return 0;
                   92968:   if( pExpr->op==TK_COLUMN && pExpr->iTable==iTable ){
                   92969:     if( pExpr->iColumn<0 ){
                   92970:       pExpr->op = TK_NULL;
                   92971:     }else{
                   92972:       Expr *pNew;
                   92973:       assert( pEList!=0 && pExpr->iColumn<pEList->nExpr );
                   92974:       assert( pExpr->pLeft==0 && pExpr->pRight==0 );
                   92975:       pNew = sqlite3ExprDup(db, pEList->a[pExpr->iColumn].pExpr, 0);
                   92976:       if( pNew && pExpr->pColl ){
                   92977:         pNew->pColl = pExpr->pColl;
                   92978:       }
                   92979:       sqlite3ExprDelete(db, pExpr);
                   92980:       pExpr = pNew;
                   92981:     }
                   92982:   }else{
                   92983:     pExpr->pLeft = substExpr(db, pExpr->pLeft, iTable, pEList);
                   92984:     pExpr->pRight = substExpr(db, pExpr->pRight, iTable, pEList);
                   92985:     if( ExprHasProperty(pExpr, EP_xIsSelect) ){
                   92986:       substSelect(db, pExpr->x.pSelect, iTable, pEList);
                   92987:     }else{
                   92988:       substExprList(db, pExpr->x.pList, iTable, pEList);
                   92989:     }
                   92990:   }
                   92991:   return pExpr;
                   92992: }
                   92993: static void substExprList(
                   92994:   sqlite3 *db,         /* Report malloc errors here */
                   92995:   ExprList *pList,     /* List to scan and in which to make substitutes */
                   92996:   int iTable,          /* Table to be substituted */
                   92997:   ExprList *pEList     /* Substitute values */
                   92998: ){
                   92999:   int i;
                   93000:   if( pList==0 ) return;
                   93001:   for(i=0; i<pList->nExpr; i++){
                   93002:     pList->a[i].pExpr = substExpr(db, pList->a[i].pExpr, iTable, pEList);
                   93003:   }
                   93004: }
                   93005: static void substSelect(
                   93006:   sqlite3 *db,         /* Report malloc errors here */
                   93007:   Select *p,           /* SELECT statement in which to make substitutions */
                   93008:   int iTable,          /* Table to be replaced */
                   93009:   ExprList *pEList     /* Substitute values */
                   93010: ){
                   93011:   SrcList *pSrc;
                   93012:   struct SrcList_item *pItem;
                   93013:   int i;
                   93014:   if( !p ) return;
                   93015:   substExprList(db, p->pEList, iTable, pEList);
                   93016:   substExprList(db, p->pGroupBy, iTable, pEList);
                   93017:   substExprList(db, p->pOrderBy, iTable, pEList);
                   93018:   p->pHaving = substExpr(db, p->pHaving, iTable, pEList);
                   93019:   p->pWhere = substExpr(db, p->pWhere, iTable, pEList);
                   93020:   substSelect(db, p->pPrior, iTable, pEList);
                   93021:   pSrc = p->pSrc;
                   93022:   assert( pSrc );  /* Even for (SELECT 1) we have: pSrc!=0 but pSrc->nSrc==0 */
                   93023:   if( ALWAYS(pSrc) ){
                   93024:     for(i=pSrc->nSrc, pItem=pSrc->a; i>0; i--, pItem++){
                   93025:       substSelect(db, pItem->pSelect, iTable, pEList);
                   93026:     }
                   93027:   }
                   93028: }
                   93029: #endif /* !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW) */
                   93030: 
                   93031: #if !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW)
                   93032: /*
                   93033: ** This routine attempts to flatten subqueries in order to speed
                   93034: ** execution.  It returns 1 if it makes changes and 0 if no flattening
                   93035: ** occurs.
                   93036: **
                   93037: ** To understand the concept of flattening, consider the following
                   93038: ** query:
                   93039: **
                   93040: **     SELECT a FROM (SELECT x+y AS a FROM t1 WHERE z<100) WHERE a>5
                   93041: **
                   93042: ** The default way of implementing this query is to execute the
                   93043: ** subquery first and store the results in a temporary table, then
                   93044: ** run the outer query on that temporary table.  This requires two
                   93045: ** passes over the data.  Furthermore, because the temporary table
                   93046: ** has no indices, the WHERE clause on the outer query cannot be
                   93047: ** optimized.
                   93048: **
                   93049: ** This routine attempts to rewrite queries such as the above into
                   93050: ** a single flat select, like this:
                   93051: **
                   93052: **     SELECT x+y AS a FROM t1 WHERE z<100 AND a>5
                   93053: **
                   93054: ** The code generated for this simpification gives the same result
                   93055: ** but only has to scan the data once.  And because indices might 
                   93056: ** exist on the table t1, a complete scan of the data might be
                   93057: ** avoided.
                   93058: **
                   93059: ** Flattening is only attempted if all of the following are true:
                   93060: **
                   93061: **   (1)  The subquery and the outer query do not both use aggregates.
                   93062: **
                   93063: **   (2)  The subquery is not an aggregate or the outer query is not a join.
                   93064: **
                   93065: **   (3)  The subquery is not the right operand of a left outer join
                   93066: **        (Originally ticket #306.  Strengthened by ticket #3300)
                   93067: **
                   93068: **   (4)  The subquery is not DISTINCT.
                   93069: **
                   93070: **  (**)  At one point restrictions (4) and (5) defined a subset of DISTINCT
                   93071: **        sub-queries that were excluded from this optimization. Restriction 
                   93072: **        (4) has since been expanded to exclude all DISTINCT subqueries.
                   93073: **
                   93074: **   (6)  The subquery does not use aggregates or the outer query is not
                   93075: **        DISTINCT.
                   93076: **
                   93077: **   (7)  The subquery has a FROM clause.
                   93078: **
                   93079: **   (8)  The subquery does not use LIMIT or the outer query is not a join.
                   93080: **
                   93081: **   (9)  The subquery does not use LIMIT or the outer query does not use
                   93082: **        aggregates.
                   93083: **
                   93084: **  (10)  The subquery does not use aggregates or the outer query does not
                   93085: **        use LIMIT.
                   93086: **
                   93087: **  (11)  The subquery and the outer query do not both have ORDER BY clauses.
                   93088: **
                   93089: **  (**)  Not implemented.  Subsumed into restriction (3).  Was previously
                   93090: **        a separate restriction deriving from ticket #350.
                   93091: **
                   93092: **  (13)  The subquery and outer query do not both use LIMIT.
                   93093: **
                   93094: **  (14)  The subquery does not use OFFSET.
                   93095: **
                   93096: **  (15)  The outer query is not part of a compound select or the
                   93097: **        subquery does not have a LIMIT clause.
                   93098: **        (See ticket #2339 and ticket [02a8e81d44]).
                   93099: **
                   93100: **  (16)  The outer query is not an aggregate or the subquery does
                   93101: **        not contain ORDER BY.  (Ticket #2942)  This used to not matter
                   93102: **        until we introduced the group_concat() function.  
                   93103: **
                   93104: **  (17)  The sub-query is not a compound select, or it is a UNION ALL 
                   93105: **        compound clause made up entirely of non-aggregate queries, and 
                   93106: **        the parent query:
                   93107: **
                   93108: **          * is not itself part of a compound select,
                   93109: **          * is not an aggregate or DISTINCT query, and
                   93110: **          * has no other tables or sub-selects in the FROM clause.
                   93111: **
                   93112: **        The parent and sub-query may contain WHERE clauses. Subject to
                   93113: **        rules (11), (13) and (14), they may also contain ORDER BY,
                   93114: **        LIMIT and OFFSET clauses.
                   93115: **
                   93116: **  (18)  If the sub-query is a compound select, then all terms of the
                   93117: **        ORDER by clause of the parent must be simple references to 
                   93118: **        columns of the sub-query.
                   93119: **
                   93120: **  (19)  The subquery does not use LIMIT or the outer query does not
                   93121: **        have a WHERE clause.
                   93122: **
                   93123: **  (20)  If the sub-query is a compound select, then it must not use
                   93124: **        an ORDER BY clause.  Ticket #3773.  We could relax this constraint
                   93125: **        somewhat by saying that the terms of the ORDER BY clause must
                   93126: **        appear as unmodified result columns in the outer query.  But
                   93127: **        have other optimizations in mind to deal with that case.
                   93128: **
                   93129: **  (21)  The subquery does not use LIMIT or the outer query is not
                   93130: **        DISTINCT.  (See ticket [752e1646fc]).
                   93131: **
                   93132: ** In this routine, the "p" parameter is a pointer to the outer query.
                   93133: ** The subquery is p->pSrc->a[iFrom].  isAgg is true if the outer query
                   93134: ** uses aggregates and subqueryIsAgg is true if the subquery uses aggregates.
                   93135: **
                   93136: ** If flattening is not attempted, this routine is a no-op and returns 0.
                   93137: ** If flattening is attempted this routine returns 1.
                   93138: **
                   93139: ** All of the expression analysis must occur on both the outer query and
                   93140: ** the subquery before this routine runs.
                   93141: */
                   93142: static int flattenSubquery(
                   93143:   Parse *pParse,       /* Parsing context */
                   93144:   Select *p,           /* The parent or outer SELECT statement */
                   93145:   int iFrom,           /* Index in p->pSrc->a[] of the inner subquery */
                   93146:   int isAgg,           /* True if outer SELECT uses aggregate functions */
                   93147:   int subqueryIsAgg    /* True if the subquery uses aggregate functions */
                   93148: ){
                   93149:   const char *zSavedAuthContext = pParse->zAuthContext;
                   93150:   Select *pParent;
                   93151:   Select *pSub;       /* The inner query or "subquery" */
                   93152:   Select *pSub1;      /* Pointer to the rightmost select in sub-query */
                   93153:   SrcList *pSrc;      /* The FROM clause of the outer query */
                   93154:   SrcList *pSubSrc;   /* The FROM clause of the subquery */
                   93155:   ExprList *pList;    /* The result set of the outer query */
                   93156:   int iParent;        /* VDBE cursor number of the pSub result set temp table */
                   93157:   int i;              /* Loop counter */
                   93158:   Expr *pWhere;                    /* The WHERE clause */
                   93159:   struct SrcList_item *pSubitem;   /* The subquery */
                   93160:   sqlite3 *db = pParse->db;
                   93161: 
                   93162:   /* Check to see if flattening is permitted.  Return 0 if not.
                   93163:   */
                   93164:   assert( p!=0 );
                   93165:   assert( p->pPrior==0 );  /* Unable to flatten compound queries */
                   93166:   if( db->flags & SQLITE_QueryFlattener ) return 0;
                   93167:   pSrc = p->pSrc;
                   93168:   assert( pSrc && iFrom>=0 && iFrom<pSrc->nSrc );
                   93169:   pSubitem = &pSrc->a[iFrom];
                   93170:   iParent = pSubitem->iCursor;
                   93171:   pSub = pSubitem->pSelect;
                   93172:   assert( pSub!=0 );
                   93173:   if( isAgg && subqueryIsAgg ) return 0;                 /* Restriction (1)  */
                   93174:   if( subqueryIsAgg && pSrc->nSrc>1 ) return 0;          /* Restriction (2)  */
                   93175:   pSubSrc = pSub->pSrc;
                   93176:   assert( pSubSrc );
                   93177:   /* Prior to version 3.1.2, when LIMIT and OFFSET had to be simple constants,
                   93178:   ** not arbitrary expresssions, we allowed some combining of LIMIT and OFFSET
                   93179:   ** because they could be computed at compile-time.  But when LIMIT and OFFSET
                   93180:   ** became arbitrary expressions, we were forced to add restrictions (13)
                   93181:   ** and (14). */
                   93182:   if( pSub->pLimit && p->pLimit ) return 0;              /* Restriction (13) */
                   93183:   if( pSub->pOffset ) return 0;                          /* Restriction (14) */
                   93184:   if( p->pRightmost && pSub->pLimit ){
                   93185:     return 0;                                            /* Restriction (15) */
                   93186:   }
                   93187:   if( pSubSrc->nSrc==0 ) return 0;                       /* Restriction (7)  */
                   93188:   if( pSub->selFlags & SF_Distinct ) return 0;           /* Restriction (5)  */
                   93189:   if( pSub->pLimit && (pSrc->nSrc>1 || isAgg) ){
                   93190:      return 0;         /* Restrictions (8)(9) */
                   93191:   }
                   93192:   if( (p->selFlags & SF_Distinct)!=0 && subqueryIsAgg ){
                   93193:      return 0;         /* Restriction (6)  */
                   93194:   }
                   93195:   if( p->pOrderBy && pSub->pOrderBy ){
                   93196:      return 0;                                           /* Restriction (11) */
                   93197:   }
                   93198:   if( isAgg && pSub->pOrderBy ) return 0;                /* Restriction (16) */
                   93199:   if( pSub->pLimit && p->pWhere ) return 0;              /* Restriction (19) */
                   93200:   if( pSub->pLimit && (p->selFlags & SF_Distinct)!=0 ){
                   93201:      return 0;         /* Restriction (21) */
                   93202:   }
                   93203: 
                   93204:   /* OBSOLETE COMMENT 1:
                   93205:   ** Restriction 3:  If the subquery is a join, make sure the subquery is 
                   93206:   ** not used as the right operand of an outer join.  Examples of why this
                   93207:   ** is not allowed:
                   93208:   **
                   93209:   **         t1 LEFT OUTER JOIN (t2 JOIN t3)
                   93210:   **
                   93211:   ** If we flatten the above, we would get
                   93212:   **
                   93213:   **         (t1 LEFT OUTER JOIN t2) JOIN t3
                   93214:   **
                   93215:   ** which is not at all the same thing.
                   93216:   **
                   93217:   ** OBSOLETE COMMENT 2:
                   93218:   ** Restriction 12:  If the subquery is the right operand of a left outer
                   93219:   ** join, make sure the subquery has no WHERE clause.
                   93220:   ** An examples of why this is not allowed:
                   93221:   **
                   93222:   **         t1 LEFT OUTER JOIN (SELECT * FROM t2 WHERE t2.x>0)
                   93223:   **
                   93224:   ** If we flatten the above, we would get
                   93225:   **
                   93226:   **         (t1 LEFT OUTER JOIN t2) WHERE t2.x>0
                   93227:   **
                   93228:   ** But the t2.x>0 test will always fail on a NULL row of t2, which
                   93229:   ** effectively converts the OUTER JOIN into an INNER JOIN.
                   93230:   **
                   93231:   ** THIS OVERRIDES OBSOLETE COMMENTS 1 AND 2 ABOVE:
                   93232:   ** Ticket #3300 shows that flattening the right term of a LEFT JOIN
                   93233:   ** is fraught with danger.  Best to avoid the whole thing.  If the
                   93234:   ** subquery is the right term of a LEFT JOIN, then do not flatten.
                   93235:   */
                   93236:   if( (pSubitem->jointype & JT_OUTER)!=0 ){
                   93237:     return 0;
                   93238:   }
                   93239: 
                   93240:   /* Restriction 17: If the sub-query is a compound SELECT, then it must
                   93241:   ** use only the UNION ALL operator. And none of the simple select queries
                   93242:   ** that make up the compound SELECT are allowed to be aggregate or distinct
                   93243:   ** queries.
                   93244:   */
                   93245:   if( pSub->pPrior ){
                   93246:     if( pSub->pOrderBy ){
                   93247:       return 0;  /* Restriction 20 */
                   93248:     }
                   93249:     if( isAgg || (p->selFlags & SF_Distinct)!=0 || pSrc->nSrc!=1 ){
                   93250:       return 0;
                   93251:     }
                   93252:     for(pSub1=pSub; pSub1; pSub1=pSub1->pPrior){
                   93253:       testcase( (pSub1->selFlags & (SF_Distinct|SF_Aggregate))==SF_Distinct );
                   93254:       testcase( (pSub1->selFlags & (SF_Distinct|SF_Aggregate))==SF_Aggregate );
                   93255:       if( (pSub1->selFlags & (SF_Distinct|SF_Aggregate))!=0
                   93256:        || (pSub1->pPrior && pSub1->op!=TK_ALL) 
                   93257:        || NEVER(pSub1->pSrc==0) || pSub1->pSrc->nSrc!=1
                   93258:       ){
                   93259:         return 0;
                   93260:       }
                   93261:     }
                   93262: 
                   93263:     /* Restriction 18. */
                   93264:     if( p->pOrderBy ){
                   93265:       int ii;
                   93266:       for(ii=0; ii<p->pOrderBy->nExpr; ii++){
                   93267:         if( p->pOrderBy->a[ii].iCol==0 ) return 0;
                   93268:       }
                   93269:     }
                   93270:   }
                   93271: 
                   93272:   /***** If we reach this point, flattening is permitted. *****/
                   93273: 
                   93274:   /* Authorize the subquery */
                   93275:   pParse->zAuthContext = pSubitem->zName;
                   93276:   sqlite3AuthCheck(pParse, SQLITE_SELECT, 0, 0, 0);
                   93277:   pParse->zAuthContext = zSavedAuthContext;
                   93278: 
                   93279:   /* If the sub-query is a compound SELECT statement, then (by restrictions
                   93280:   ** 17 and 18 above) it must be a UNION ALL and the parent query must 
                   93281:   ** be of the form:
                   93282:   **
                   93283:   **     SELECT <expr-list> FROM (<sub-query>) <where-clause> 
                   93284:   **
                   93285:   ** followed by any ORDER BY, LIMIT and/or OFFSET clauses. This block
                   93286:   ** creates N-1 copies of the parent query without any ORDER BY, LIMIT or 
                   93287:   ** OFFSET clauses and joins them to the left-hand-side of the original
                   93288:   ** using UNION ALL operators. In this case N is the number of simple
                   93289:   ** select statements in the compound sub-query.
                   93290:   **
                   93291:   ** Example:
                   93292:   **
                   93293:   **     SELECT a+1 FROM (
                   93294:   **        SELECT x FROM tab
                   93295:   **        UNION ALL
                   93296:   **        SELECT y FROM tab
                   93297:   **        UNION ALL
                   93298:   **        SELECT abs(z*2) FROM tab2
                   93299:   **     ) WHERE a!=5 ORDER BY 1
                   93300:   **
                   93301:   ** Transformed into:
                   93302:   **
                   93303:   **     SELECT x+1 FROM tab WHERE x+1!=5
                   93304:   **     UNION ALL
                   93305:   **     SELECT y+1 FROM tab WHERE y+1!=5
                   93306:   **     UNION ALL
                   93307:   **     SELECT abs(z*2)+1 FROM tab2 WHERE abs(z*2)+1!=5
                   93308:   **     ORDER BY 1
                   93309:   **
                   93310:   ** We call this the "compound-subquery flattening".
                   93311:   */
                   93312:   for(pSub=pSub->pPrior; pSub; pSub=pSub->pPrior){
                   93313:     Select *pNew;
                   93314:     ExprList *pOrderBy = p->pOrderBy;
                   93315:     Expr *pLimit = p->pLimit;
                   93316:     Select *pPrior = p->pPrior;
                   93317:     p->pOrderBy = 0;
                   93318:     p->pSrc = 0;
                   93319:     p->pPrior = 0;
                   93320:     p->pLimit = 0;
                   93321:     pNew = sqlite3SelectDup(db, p, 0);
                   93322:     p->pLimit = pLimit;
                   93323:     p->pOrderBy = pOrderBy;
                   93324:     p->pSrc = pSrc;
                   93325:     p->op = TK_ALL;
                   93326:     p->pRightmost = 0;
                   93327:     if( pNew==0 ){
                   93328:       pNew = pPrior;
                   93329:     }else{
                   93330:       pNew->pPrior = pPrior;
                   93331:       pNew->pRightmost = 0;
                   93332:     }
                   93333:     p->pPrior = pNew;
                   93334:     if( db->mallocFailed ) return 1;
                   93335:   }
                   93336: 
                   93337:   /* Begin flattening the iFrom-th entry of the FROM clause 
                   93338:   ** in the outer query.
                   93339:   */
                   93340:   pSub = pSub1 = pSubitem->pSelect;
                   93341: 
                   93342:   /* Delete the transient table structure associated with the
                   93343:   ** subquery
                   93344:   */
                   93345:   sqlite3DbFree(db, pSubitem->zDatabase);
                   93346:   sqlite3DbFree(db, pSubitem->zName);
                   93347:   sqlite3DbFree(db, pSubitem->zAlias);
                   93348:   pSubitem->zDatabase = 0;
                   93349:   pSubitem->zName = 0;
                   93350:   pSubitem->zAlias = 0;
                   93351:   pSubitem->pSelect = 0;
                   93352: 
                   93353:   /* Defer deleting the Table object associated with the
                   93354:   ** subquery until code generation is
                   93355:   ** complete, since there may still exist Expr.pTab entries that
                   93356:   ** refer to the subquery even after flattening.  Ticket #3346.
                   93357:   **
                   93358:   ** pSubitem->pTab is always non-NULL by test restrictions and tests above.
                   93359:   */
                   93360:   if( ALWAYS(pSubitem->pTab!=0) ){
                   93361:     Table *pTabToDel = pSubitem->pTab;
                   93362:     if( pTabToDel->nRef==1 ){
                   93363:       Parse *pToplevel = sqlite3ParseToplevel(pParse);
                   93364:       pTabToDel->pNextZombie = pToplevel->pZombieTab;
                   93365:       pToplevel->pZombieTab = pTabToDel;
                   93366:     }else{
                   93367:       pTabToDel->nRef--;
                   93368:     }
                   93369:     pSubitem->pTab = 0;
                   93370:   }
                   93371: 
                   93372:   /* The following loop runs once for each term in a compound-subquery
                   93373:   ** flattening (as described above).  If we are doing a different kind
                   93374:   ** of flattening - a flattening other than a compound-subquery flattening -
                   93375:   ** then this loop only runs once.
                   93376:   **
                   93377:   ** This loop moves all of the FROM elements of the subquery into the
                   93378:   ** the FROM clause of the outer query.  Before doing this, remember
                   93379:   ** the cursor number for the original outer query FROM element in
                   93380:   ** iParent.  The iParent cursor will never be used.  Subsequent code
                   93381:   ** will scan expressions looking for iParent references and replace
                   93382:   ** those references with expressions that resolve to the subquery FROM
                   93383:   ** elements we are now copying in.
                   93384:   */
                   93385:   for(pParent=p; pParent; pParent=pParent->pPrior, pSub=pSub->pPrior){
                   93386:     int nSubSrc;
                   93387:     u8 jointype = 0;
                   93388:     pSubSrc = pSub->pSrc;     /* FROM clause of subquery */
                   93389:     nSubSrc = pSubSrc->nSrc;  /* Number of terms in subquery FROM clause */
                   93390:     pSrc = pParent->pSrc;     /* FROM clause of the outer query */
                   93391: 
                   93392:     if( pSrc ){
                   93393:       assert( pParent==p );  /* First time through the loop */
                   93394:       jointype = pSubitem->jointype;
                   93395:     }else{
                   93396:       assert( pParent!=p );  /* 2nd and subsequent times through the loop */
                   93397:       pSrc = pParent->pSrc = sqlite3SrcListAppend(db, 0, 0, 0);
                   93398:       if( pSrc==0 ){
                   93399:         assert( db->mallocFailed );
                   93400:         break;
                   93401:       }
                   93402:     }
                   93403: 
                   93404:     /* The subquery uses a single slot of the FROM clause of the outer
                   93405:     ** query.  If the subquery has more than one element in its FROM clause,
                   93406:     ** then expand the outer query to make space for it to hold all elements
                   93407:     ** of the subquery.
                   93408:     **
                   93409:     ** Example:
                   93410:     **
                   93411:     **    SELECT * FROM tabA, (SELECT * FROM sub1, sub2), tabB;
                   93412:     **
                   93413:     ** The outer query has 3 slots in its FROM clause.  One slot of the
                   93414:     ** outer query (the middle slot) is used by the subquery.  The next
                   93415:     ** block of code will expand the out query to 4 slots.  The middle
                   93416:     ** slot is expanded to two slots in order to make space for the
                   93417:     ** two elements in the FROM clause of the subquery.
                   93418:     */
                   93419:     if( nSubSrc>1 ){
                   93420:       pParent->pSrc = pSrc = sqlite3SrcListEnlarge(db, pSrc, nSubSrc-1,iFrom+1);
                   93421:       if( db->mallocFailed ){
                   93422:         break;
                   93423:       }
                   93424:     }
                   93425: 
                   93426:     /* Transfer the FROM clause terms from the subquery into the
                   93427:     ** outer query.
                   93428:     */
                   93429:     for(i=0; i<nSubSrc; i++){
                   93430:       sqlite3IdListDelete(db, pSrc->a[i+iFrom].pUsing);
                   93431:       pSrc->a[i+iFrom] = pSubSrc->a[i];
                   93432:       memset(&pSubSrc->a[i], 0, sizeof(pSubSrc->a[i]));
                   93433:     }
                   93434:     pSrc->a[iFrom].jointype = jointype;
                   93435:   
                   93436:     /* Now begin substituting subquery result set expressions for 
                   93437:     ** references to the iParent in the outer query.
                   93438:     ** 
                   93439:     ** Example:
                   93440:     **
                   93441:     **   SELECT a+5, b*10 FROM (SELECT x*3 AS a, y+10 AS b FROM t1) WHERE a>b;
                   93442:     **   \                     \_____________ subquery __________/          /
                   93443:     **    \_____________________ outer query ______________________________/
                   93444:     **
                   93445:     ** We look at every expression in the outer query and every place we see
                   93446:     ** "a" we substitute "x*3" and every place we see "b" we substitute "y+10".
                   93447:     */
                   93448:     pList = pParent->pEList;
                   93449:     for(i=0; i<pList->nExpr; i++){
                   93450:       if( pList->a[i].zName==0 ){
                   93451:         const char *zSpan = pList->a[i].zSpan;
                   93452:         if( ALWAYS(zSpan) ){
                   93453:           pList->a[i].zName = sqlite3DbStrDup(db, zSpan);
                   93454:         }
                   93455:       }
                   93456:     }
                   93457:     substExprList(db, pParent->pEList, iParent, pSub->pEList);
                   93458:     if( isAgg ){
                   93459:       substExprList(db, pParent->pGroupBy, iParent, pSub->pEList);
                   93460:       pParent->pHaving = substExpr(db, pParent->pHaving, iParent, pSub->pEList);
                   93461:     }
                   93462:     if( pSub->pOrderBy ){
                   93463:       assert( pParent->pOrderBy==0 );
                   93464:       pParent->pOrderBy = pSub->pOrderBy;
                   93465:       pSub->pOrderBy = 0;
                   93466:     }else if( pParent->pOrderBy ){
                   93467:       substExprList(db, pParent->pOrderBy, iParent, pSub->pEList);
                   93468:     }
                   93469:     if( pSub->pWhere ){
                   93470:       pWhere = sqlite3ExprDup(db, pSub->pWhere, 0);
                   93471:     }else{
                   93472:       pWhere = 0;
                   93473:     }
                   93474:     if( subqueryIsAgg ){
                   93475:       assert( pParent->pHaving==0 );
                   93476:       pParent->pHaving = pParent->pWhere;
                   93477:       pParent->pWhere = pWhere;
                   93478:       pParent->pHaving = substExpr(db, pParent->pHaving, iParent, pSub->pEList);
                   93479:       pParent->pHaving = sqlite3ExprAnd(db, pParent->pHaving, 
                   93480:                                   sqlite3ExprDup(db, pSub->pHaving, 0));
                   93481:       assert( pParent->pGroupBy==0 );
                   93482:       pParent->pGroupBy = sqlite3ExprListDup(db, pSub->pGroupBy, 0);
                   93483:     }else{
                   93484:       pParent->pWhere = substExpr(db, pParent->pWhere, iParent, pSub->pEList);
                   93485:       pParent->pWhere = sqlite3ExprAnd(db, pParent->pWhere, pWhere);
                   93486:     }
                   93487:   
                   93488:     /* The flattened query is distinct if either the inner or the
                   93489:     ** outer query is distinct. 
                   93490:     */
                   93491:     pParent->selFlags |= pSub->selFlags & SF_Distinct;
                   93492:   
                   93493:     /*
                   93494:     ** SELECT ... FROM (SELECT ... LIMIT a OFFSET b) LIMIT x OFFSET y;
                   93495:     **
                   93496:     ** One is tempted to try to add a and b to combine the limits.  But this
                   93497:     ** does not work if either limit is negative.
                   93498:     */
                   93499:     if( pSub->pLimit ){
                   93500:       pParent->pLimit = pSub->pLimit;
                   93501:       pSub->pLimit = 0;
                   93502:     }
                   93503:   }
                   93504: 
                   93505:   /* Finially, delete what is left of the subquery and return
                   93506:   ** success.
                   93507:   */
                   93508:   sqlite3SelectDelete(db, pSub1);
                   93509: 
                   93510:   return 1;
                   93511: }
                   93512: #endif /* !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW) */
                   93513: 
                   93514: /*
                   93515: ** Analyze the SELECT statement passed as an argument to see if it
                   93516: ** is a min() or max() query. Return WHERE_ORDERBY_MIN or WHERE_ORDERBY_MAX if 
                   93517: ** it is, or 0 otherwise. At present, a query is considered to be
                   93518: ** a min()/max() query if:
                   93519: **
                   93520: **   1. There is a single object in the FROM clause.
                   93521: **
                   93522: **   2. There is a single expression in the result set, and it is
                   93523: **      either min(x) or max(x), where x is a column reference.
                   93524: */
                   93525: static u8 minMaxQuery(Select *p){
                   93526:   Expr *pExpr;
                   93527:   ExprList *pEList = p->pEList;
                   93528: 
                   93529:   if( pEList->nExpr!=1 ) return WHERE_ORDERBY_NORMAL;
                   93530:   pExpr = pEList->a[0].pExpr;
                   93531:   if( pExpr->op!=TK_AGG_FUNCTION ) return 0;
                   93532:   if( NEVER(ExprHasProperty(pExpr, EP_xIsSelect)) ) return 0;
                   93533:   pEList = pExpr->x.pList;
                   93534:   if( pEList==0 || pEList->nExpr!=1 ) return 0;
                   93535:   if( pEList->a[0].pExpr->op!=TK_AGG_COLUMN ) return WHERE_ORDERBY_NORMAL;
                   93536:   assert( !ExprHasProperty(pExpr, EP_IntValue) );
                   93537:   if( sqlite3StrICmp(pExpr->u.zToken,"min")==0 ){
                   93538:     return WHERE_ORDERBY_MIN;
                   93539:   }else if( sqlite3StrICmp(pExpr->u.zToken,"max")==0 ){
                   93540:     return WHERE_ORDERBY_MAX;
                   93541:   }
                   93542:   return WHERE_ORDERBY_NORMAL;
                   93543: }
                   93544: 
                   93545: /*
                   93546: ** The select statement passed as the first argument is an aggregate query.
1.1.1.3 ! misho    93547: ** The second argument is the associated aggregate-info object. This 
1.1       misho    93548: ** function tests if the SELECT is of the form:
                   93549: **
                   93550: **   SELECT count(*) FROM <tbl>
                   93551: **
                   93552: ** where table is a database table, not a sub-select or view. If the query
                   93553: ** does match this pattern, then a pointer to the Table object representing
                   93554: ** <tbl> is returned. Otherwise, 0 is returned.
                   93555: */
                   93556: static Table *isSimpleCount(Select *p, AggInfo *pAggInfo){
                   93557:   Table *pTab;
                   93558:   Expr *pExpr;
                   93559: 
                   93560:   assert( !p->pGroupBy );
                   93561: 
                   93562:   if( p->pWhere || p->pEList->nExpr!=1 
                   93563:    || p->pSrc->nSrc!=1 || p->pSrc->a[0].pSelect
                   93564:   ){
                   93565:     return 0;
                   93566:   }
                   93567:   pTab = p->pSrc->a[0].pTab;
                   93568:   pExpr = p->pEList->a[0].pExpr;
                   93569:   assert( pTab && !pTab->pSelect && pExpr );
                   93570: 
                   93571:   if( IsVirtual(pTab) ) return 0;
                   93572:   if( pExpr->op!=TK_AGG_FUNCTION ) return 0;
                   93573:   if( (pAggInfo->aFunc[0].pFunc->flags&SQLITE_FUNC_COUNT)==0 ) return 0;
                   93574:   if( pExpr->flags&EP_Distinct ) return 0;
                   93575: 
                   93576:   return pTab;
                   93577: }
                   93578: 
                   93579: /*
                   93580: ** If the source-list item passed as an argument was augmented with an
                   93581: ** INDEXED BY clause, then try to locate the specified index. If there
                   93582: ** was such a clause and the named index cannot be found, return 
                   93583: ** SQLITE_ERROR and leave an error in pParse. Otherwise, populate 
                   93584: ** pFrom->pIndex and return SQLITE_OK.
                   93585: */
                   93586: SQLITE_PRIVATE int sqlite3IndexedByLookup(Parse *pParse, struct SrcList_item *pFrom){
                   93587:   if( pFrom->pTab && pFrom->zIndex ){
                   93588:     Table *pTab = pFrom->pTab;
                   93589:     char *zIndex = pFrom->zIndex;
                   93590:     Index *pIdx;
                   93591:     for(pIdx=pTab->pIndex; 
                   93592:         pIdx && sqlite3StrICmp(pIdx->zName, zIndex); 
                   93593:         pIdx=pIdx->pNext
                   93594:     );
                   93595:     if( !pIdx ){
                   93596:       sqlite3ErrorMsg(pParse, "no such index: %s", zIndex, 0);
                   93597:       pParse->checkSchema = 1;
                   93598:       return SQLITE_ERROR;
                   93599:     }
                   93600:     pFrom->pIndex = pIdx;
                   93601:   }
                   93602:   return SQLITE_OK;
                   93603: }
                   93604: 
                   93605: /*
                   93606: ** This routine is a Walker callback for "expanding" a SELECT statement.
                   93607: ** "Expanding" means to do the following:
                   93608: **
                   93609: **    (1)  Make sure VDBE cursor numbers have been assigned to every
                   93610: **         element of the FROM clause.
                   93611: **
                   93612: **    (2)  Fill in the pTabList->a[].pTab fields in the SrcList that 
                   93613: **         defines FROM clause.  When views appear in the FROM clause,
                   93614: **         fill pTabList->a[].pSelect with a copy of the SELECT statement
                   93615: **         that implements the view.  A copy is made of the view's SELECT
                   93616: **         statement so that we can freely modify or delete that statement
                   93617: **         without worrying about messing up the presistent representation
                   93618: **         of the view.
                   93619: **
1.1.1.3 ! misho    93620: **    (3)  Add terms to the WHERE clause to accommodate the NATURAL keyword
1.1       misho    93621: **         on joins and the ON and USING clause of joins.
                   93622: **
                   93623: **    (4)  Scan the list of columns in the result set (pEList) looking
                   93624: **         for instances of the "*" operator or the TABLE.* operator.
                   93625: **         If found, expand each "*" to be every column in every table
                   93626: **         and TABLE.* to be every column in TABLE.
                   93627: **
                   93628: */
                   93629: static int selectExpander(Walker *pWalker, Select *p){
                   93630:   Parse *pParse = pWalker->pParse;
                   93631:   int i, j, k;
                   93632:   SrcList *pTabList;
                   93633:   ExprList *pEList;
                   93634:   struct SrcList_item *pFrom;
                   93635:   sqlite3 *db = pParse->db;
                   93636: 
                   93637:   if( db->mallocFailed  ){
                   93638:     return WRC_Abort;
                   93639:   }
                   93640:   if( NEVER(p->pSrc==0) || (p->selFlags & SF_Expanded)!=0 ){
                   93641:     return WRC_Prune;
                   93642:   }
                   93643:   p->selFlags |= SF_Expanded;
                   93644:   pTabList = p->pSrc;
                   93645:   pEList = p->pEList;
                   93646: 
                   93647:   /* Make sure cursor numbers have been assigned to all entries in
                   93648:   ** the FROM clause of the SELECT statement.
                   93649:   */
                   93650:   sqlite3SrcListAssignCursors(pParse, pTabList);
                   93651: 
                   93652:   /* Look up every table named in the FROM clause of the select.  If
                   93653:   ** an entry of the FROM clause is a subquery instead of a table or view,
                   93654:   ** then create a transient table structure to describe the subquery.
                   93655:   */
                   93656:   for(i=0, pFrom=pTabList->a; i<pTabList->nSrc; i++, pFrom++){
                   93657:     Table *pTab;
                   93658:     if( pFrom->pTab!=0 ){
                   93659:       /* This statement has already been prepared.  There is no need
                   93660:       ** to go further. */
                   93661:       assert( i==0 );
                   93662:       return WRC_Prune;
                   93663:     }
                   93664:     if( pFrom->zName==0 ){
                   93665: #ifndef SQLITE_OMIT_SUBQUERY
                   93666:       Select *pSel = pFrom->pSelect;
                   93667:       /* A sub-query in the FROM clause of a SELECT */
                   93668:       assert( pSel!=0 );
                   93669:       assert( pFrom->pTab==0 );
                   93670:       sqlite3WalkSelect(pWalker, pSel);
                   93671:       pFrom->pTab = pTab = sqlite3DbMallocZero(db, sizeof(Table));
                   93672:       if( pTab==0 ) return WRC_Abort;
                   93673:       pTab->nRef = 1;
                   93674:       pTab->zName = sqlite3MPrintf(db, "sqlite_subquery_%p_", (void*)pTab);
                   93675:       while( pSel->pPrior ){ pSel = pSel->pPrior; }
                   93676:       selectColumnsFromExprList(pParse, pSel->pEList, &pTab->nCol, &pTab->aCol);
                   93677:       pTab->iPKey = -1;
                   93678:       pTab->nRowEst = 1000000;
                   93679:       pTab->tabFlags |= TF_Ephemeral;
                   93680: #endif
                   93681:     }else{
                   93682:       /* An ordinary table or view name in the FROM clause */
                   93683:       assert( pFrom->pTab==0 );
                   93684:       pFrom->pTab = pTab = 
                   93685:         sqlite3LocateTable(pParse,0,pFrom->zName,pFrom->zDatabase);
                   93686:       if( pTab==0 ) return WRC_Abort;
                   93687:       pTab->nRef++;
                   93688: #if !defined(SQLITE_OMIT_VIEW) || !defined (SQLITE_OMIT_VIRTUALTABLE)
                   93689:       if( pTab->pSelect || IsVirtual(pTab) ){
                   93690:         /* We reach here if the named table is a really a view */
                   93691:         if( sqlite3ViewGetColumnNames(pParse, pTab) ) return WRC_Abort;
                   93692:         assert( pFrom->pSelect==0 );
                   93693:         pFrom->pSelect = sqlite3SelectDup(db, pTab->pSelect, 0);
                   93694:         sqlite3WalkSelect(pWalker, pFrom->pSelect);
                   93695:       }
                   93696: #endif
                   93697:     }
                   93698: 
                   93699:     /* Locate the index named by the INDEXED BY clause, if any. */
                   93700:     if( sqlite3IndexedByLookup(pParse, pFrom) ){
                   93701:       return WRC_Abort;
                   93702:     }
                   93703:   }
                   93704: 
                   93705:   /* Process NATURAL keywords, and ON and USING clauses of joins.
                   93706:   */
                   93707:   if( db->mallocFailed || sqliteProcessJoin(pParse, p) ){
                   93708:     return WRC_Abort;
                   93709:   }
                   93710: 
                   93711:   /* For every "*" that occurs in the column list, insert the names of
                   93712:   ** all columns in all tables.  And for every TABLE.* insert the names
                   93713:   ** of all columns in TABLE.  The parser inserted a special expression
                   93714:   ** with the TK_ALL operator for each "*" that it found in the column list.
                   93715:   ** The following code just has to locate the TK_ALL expressions and expand
                   93716:   ** each one to the list of all columns in all tables.
                   93717:   **
                   93718:   ** The first loop just checks to see if there are any "*" operators
                   93719:   ** that need expanding.
                   93720:   */
                   93721:   for(k=0; k<pEList->nExpr; k++){
                   93722:     Expr *pE = pEList->a[k].pExpr;
                   93723:     if( pE->op==TK_ALL ) break;
                   93724:     assert( pE->op!=TK_DOT || pE->pRight!=0 );
                   93725:     assert( pE->op!=TK_DOT || (pE->pLeft!=0 && pE->pLeft->op==TK_ID) );
                   93726:     if( pE->op==TK_DOT && pE->pRight->op==TK_ALL ) break;
                   93727:   }
                   93728:   if( k<pEList->nExpr ){
                   93729:     /*
                   93730:     ** If we get here it means the result set contains one or more "*"
                   93731:     ** operators that need to be expanded.  Loop through each expression
                   93732:     ** in the result set and expand them one by one.
                   93733:     */
                   93734:     struct ExprList_item *a = pEList->a;
                   93735:     ExprList *pNew = 0;
                   93736:     int flags = pParse->db->flags;
                   93737:     int longNames = (flags & SQLITE_FullColNames)!=0
                   93738:                       && (flags & SQLITE_ShortColNames)==0;
                   93739: 
                   93740:     for(k=0; k<pEList->nExpr; k++){
                   93741:       Expr *pE = a[k].pExpr;
                   93742:       assert( pE->op!=TK_DOT || pE->pRight!=0 );
                   93743:       if( pE->op!=TK_ALL && (pE->op!=TK_DOT || pE->pRight->op!=TK_ALL) ){
                   93744:         /* This particular expression does not need to be expanded.
                   93745:         */
                   93746:         pNew = sqlite3ExprListAppend(pParse, pNew, a[k].pExpr);
                   93747:         if( pNew ){
                   93748:           pNew->a[pNew->nExpr-1].zName = a[k].zName;
                   93749:           pNew->a[pNew->nExpr-1].zSpan = a[k].zSpan;
                   93750:           a[k].zName = 0;
                   93751:           a[k].zSpan = 0;
                   93752:         }
                   93753:         a[k].pExpr = 0;
                   93754:       }else{
                   93755:         /* This expression is a "*" or a "TABLE.*" and needs to be
                   93756:         ** expanded. */
                   93757:         int tableSeen = 0;      /* Set to 1 when TABLE matches */
                   93758:         char *zTName;            /* text of name of TABLE */
                   93759:         if( pE->op==TK_DOT ){
                   93760:           assert( pE->pLeft!=0 );
                   93761:           assert( !ExprHasProperty(pE->pLeft, EP_IntValue) );
                   93762:           zTName = pE->pLeft->u.zToken;
                   93763:         }else{
                   93764:           zTName = 0;
                   93765:         }
                   93766:         for(i=0, pFrom=pTabList->a; i<pTabList->nSrc; i++, pFrom++){
                   93767:           Table *pTab = pFrom->pTab;
                   93768:           char *zTabName = pFrom->zAlias;
                   93769:           if( zTabName==0 ){
                   93770:             zTabName = pTab->zName;
                   93771:           }
                   93772:           if( db->mallocFailed ) break;
                   93773:           if( zTName && sqlite3StrICmp(zTName, zTabName)!=0 ){
                   93774:             continue;
                   93775:           }
                   93776:           tableSeen = 1;
                   93777:           for(j=0; j<pTab->nCol; j++){
                   93778:             Expr *pExpr, *pRight;
                   93779:             char *zName = pTab->aCol[j].zName;
                   93780:             char *zColname;  /* The computed column name */
                   93781:             char *zToFree;   /* Malloced string that needs to be freed */
                   93782:             Token sColname;  /* Computed column name as a token */
                   93783: 
                   93784:             /* If a column is marked as 'hidden' (currently only possible
                   93785:             ** for virtual tables), do not include it in the expanded
                   93786:             ** result-set list.
                   93787:             */
                   93788:             if( IsHiddenColumn(&pTab->aCol[j]) ){
                   93789:               assert(IsVirtual(pTab));
                   93790:               continue;
                   93791:             }
                   93792: 
                   93793:             if( i>0 && zTName==0 ){
                   93794:               if( (pFrom->jointype & JT_NATURAL)!=0
                   93795:                 && tableAndColumnIndex(pTabList, i, zName, 0, 0)
                   93796:               ){
                   93797:                 /* In a NATURAL join, omit the join columns from the 
                   93798:                 ** table to the right of the join */
                   93799:                 continue;
                   93800:               }
                   93801:               if( sqlite3IdListIndex(pFrom->pUsing, zName)>=0 ){
                   93802:                 /* In a join with a USING clause, omit columns in the
                   93803:                 ** using clause from the table on the right. */
                   93804:                 continue;
                   93805:               }
                   93806:             }
                   93807:             pRight = sqlite3Expr(db, TK_ID, zName);
                   93808:             zColname = zName;
                   93809:             zToFree = 0;
                   93810:             if( longNames || pTabList->nSrc>1 ){
                   93811:               Expr *pLeft;
                   93812:               pLeft = sqlite3Expr(db, TK_ID, zTabName);
                   93813:               pExpr = sqlite3PExpr(pParse, TK_DOT, pLeft, pRight, 0);
                   93814:               if( longNames ){
                   93815:                 zColname = sqlite3MPrintf(db, "%s.%s", zTabName, zName);
                   93816:                 zToFree = zColname;
                   93817:               }
                   93818:             }else{
                   93819:               pExpr = pRight;
                   93820:             }
                   93821:             pNew = sqlite3ExprListAppend(pParse, pNew, pExpr);
                   93822:             sColname.z = zColname;
                   93823:             sColname.n = sqlite3Strlen30(zColname);
                   93824:             sqlite3ExprListSetName(pParse, pNew, &sColname, 0);
                   93825:             sqlite3DbFree(db, zToFree);
                   93826:           }
                   93827:         }
                   93828:         if( !tableSeen ){
                   93829:           if( zTName ){
                   93830:             sqlite3ErrorMsg(pParse, "no such table: %s", zTName);
                   93831:           }else{
                   93832:             sqlite3ErrorMsg(pParse, "no tables specified");
                   93833:           }
                   93834:         }
                   93835:       }
                   93836:     }
                   93837:     sqlite3ExprListDelete(db, pEList);
                   93838:     p->pEList = pNew;
                   93839:   }
                   93840: #if SQLITE_MAX_COLUMN
                   93841:   if( p->pEList && p->pEList->nExpr>db->aLimit[SQLITE_LIMIT_COLUMN] ){
                   93842:     sqlite3ErrorMsg(pParse, "too many columns in result set");
                   93843:   }
                   93844: #endif
                   93845:   return WRC_Continue;
                   93846: }
                   93847: 
                   93848: /*
                   93849: ** No-op routine for the parse-tree walker.
                   93850: **
                   93851: ** When this routine is the Walker.xExprCallback then expression trees
                   93852: ** are walked without any actions being taken at each node.  Presumably,
                   93853: ** when this routine is used for Walker.xExprCallback then 
                   93854: ** Walker.xSelectCallback is set to do something useful for every 
                   93855: ** subquery in the parser tree.
                   93856: */
                   93857: static int exprWalkNoop(Walker *NotUsed, Expr *NotUsed2){
                   93858:   UNUSED_PARAMETER2(NotUsed, NotUsed2);
                   93859:   return WRC_Continue;
                   93860: }
                   93861: 
                   93862: /*
                   93863: ** This routine "expands" a SELECT statement and all of its subqueries.
                   93864: ** For additional information on what it means to "expand" a SELECT
                   93865: ** statement, see the comment on the selectExpand worker callback above.
                   93866: **
                   93867: ** Expanding a SELECT statement is the first step in processing a
                   93868: ** SELECT statement.  The SELECT statement must be expanded before
                   93869: ** name resolution is performed.
                   93870: **
                   93871: ** If anything goes wrong, an error message is written into pParse.
                   93872: ** The calling function can detect the problem by looking at pParse->nErr
                   93873: ** and/or pParse->db->mallocFailed.
                   93874: */
                   93875: static void sqlite3SelectExpand(Parse *pParse, Select *pSelect){
                   93876:   Walker w;
                   93877:   w.xSelectCallback = selectExpander;
                   93878:   w.xExprCallback = exprWalkNoop;
                   93879:   w.pParse = pParse;
                   93880:   sqlite3WalkSelect(&w, pSelect);
                   93881: }
                   93882: 
                   93883: 
                   93884: #ifndef SQLITE_OMIT_SUBQUERY
                   93885: /*
                   93886: ** This is a Walker.xSelectCallback callback for the sqlite3SelectTypeInfo()
                   93887: ** interface.
                   93888: **
                   93889: ** For each FROM-clause subquery, add Column.zType and Column.zColl
                   93890: ** information to the Table structure that represents the result set
                   93891: ** of that subquery.
                   93892: **
                   93893: ** The Table structure that represents the result set was constructed
                   93894: ** by selectExpander() but the type and collation information was omitted
                   93895: ** at that point because identifiers had not yet been resolved.  This
                   93896: ** routine is called after identifier resolution.
                   93897: */
                   93898: static int selectAddSubqueryTypeInfo(Walker *pWalker, Select *p){
                   93899:   Parse *pParse;
                   93900:   int i;
                   93901:   SrcList *pTabList;
                   93902:   struct SrcList_item *pFrom;
                   93903: 
                   93904:   assert( p->selFlags & SF_Resolved );
                   93905:   if( (p->selFlags & SF_HasTypeInfo)==0 ){
                   93906:     p->selFlags |= SF_HasTypeInfo;
                   93907:     pParse = pWalker->pParse;
                   93908:     pTabList = p->pSrc;
                   93909:     for(i=0, pFrom=pTabList->a; i<pTabList->nSrc; i++, pFrom++){
                   93910:       Table *pTab = pFrom->pTab;
                   93911:       if( ALWAYS(pTab!=0) && (pTab->tabFlags & TF_Ephemeral)!=0 ){
                   93912:         /* A sub-query in the FROM clause of a SELECT */
                   93913:         Select *pSel = pFrom->pSelect;
                   93914:         assert( pSel );
                   93915:         while( pSel->pPrior ) pSel = pSel->pPrior;
                   93916:         selectAddColumnTypeAndCollation(pParse, pTab->nCol, pTab->aCol, pSel);
                   93917:       }
                   93918:     }
                   93919:   }
                   93920:   return WRC_Continue;
                   93921: }
                   93922: #endif
                   93923: 
                   93924: 
                   93925: /*
                   93926: ** This routine adds datatype and collating sequence information to
                   93927: ** the Table structures of all FROM-clause subqueries in a
                   93928: ** SELECT statement.
                   93929: **
                   93930: ** Use this routine after name resolution.
                   93931: */
                   93932: static void sqlite3SelectAddTypeInfo(Parse *pParse, Select *pSelect){
                   93933: #ifndef SQLITE_OMIT_SUBQUERY
                   93934:   Walker w;
                   93935:   w.xSelectCallback = selectAddSubqueryTypeInfo;
                   93936:   w.xExprCallback = exprWalkNoop;
                   93937:   w.pParse = pParse;
                   93938:   sqlite3WalkSelect(&w, pSelect);
                   93939: #endif
                   93940: }
                   93941: 
                   93942: 
                   93943: /*
                   93944: ** This routine sets of a SELECT statement for processing.  The
                   93945: ** following is accomplished:
                   93946: **
                   93947: **     *  VDBE Cursor numbers are assigned to all FROM-clause terms.
                   93948: **     *  Ephemeral Table objects are created for all FROM-clause subqueries.
                   93949: **     *  ON and USING clauses are shifted into WHERE statements
                   93950: **     *  Wildcards "*" and "TABLE.*" in result sets are expanded.
                   93951: **     *  Identifiers in expression are matched to tables.
                   93952: **
                   93953: ** This routine acts recursively on all subqueries within the SELECT.
                   93954: */
                   93955: SQLITE_PRIVATE void sqlite3SelectPrep(
                   93956:   Parse *pParse,         /* The parser context */
                   93957:   Select *p,             /* The SELECT statement being coded. */
                   93958:   NameContext *pOuterNC  /* Name context for container */
                   93959: ){
                   93960:   sqlite3 *db;
                   93961:   if( NEVER(p==0) ) return;
                   93962:   db = pParse->db;
                   93963:   if( p->selFlags & SF_HasTypeInfo ) return;
                   93964:   sqlite3SelectExpand(pParse, p);
                   93965:   if( pParse->nErr || db->mallocFailed ) return;
                   93966:   sqlite3ResolveSelectNames(pParse, p, pOuterNC);
                   93967:   if( pParse->nErr || db->mallocFailed ) return;
                   93968:   sqlite3SelectAddTypeInfo(pParse, p);
                   93969: }
                   93970: 
                   93971: /*
                   93972: ** Reset the aggregate accumulator.
                   93973: **
                   93974: ** The aggregate accumulator is a set of memory cells that hold
                   93975: ** intermediate results while calculating an aggregate.  This
                   93976: ** routine simply stores NULLs in all of those memory cells.
                   93977: */
                   93978: static void resetAccumulator(Parse *pParse, AggInfo *pAggInfo){
                   93979:   Vdbe *v = pParse->pVdbe;
                   93980:   int i;
                   93981:   struct AggInfo_func *pFunc;
                   93982:   if( pAggInfo->nFunc+pAggInfo->nColumn==0 ){
                   93983:     return;
                   93984:   }
                   93985:   for(i=0; i<pAggInfo->nColumn; i++){
                   93986:     sqlite3VdbeAddOp2(v, OP_Null, 0, pAggInfo->aCol[i].iMem);
                   93987:   }
                   93988:   for(pFunc=pAggInfo->aFunc, i=0; i<pAggInfo->nFunc; i++, pFunc++){
                   93989:     sqlite3VdbeAddOp2(v, OP_Null, 0, pFunc->iMem);
                   93990:     if( pFunc->iDistinct>=0 ){
                   93991:       Expr *pE = pFunc->pExpr;
                   93992:       assert( !ExprHasProperty(pE, EP_xIsSelect) );
                   93993:       if( pE->x.pList==0 || pE->x.pList->nExpr!=1 ){
                   93994:         sqlite3ErrorMsg(pParse, "DISTINCT aggregates must have exactly one "
                   93995:            "argument");
                   93996:         pFunc->iDistinct = -1;
                   93997:       }else{
                   93998:         KeyInfo *pKeyInfo = keyInfoFromExprList(pParse, pE->x.pList);
                   93999:         sqlite3VdbeAddOp4(v, OP_OpenEphemeral, pFunc->iDistinct, 0, 0,
                   94000:                           (char*)pKeyInfo, P4_KEYINFO_HANDOFF);
                   94001:       }
                   94002:     }
                   94003:   }
                   94004: }
                   94005: 
                   94006: /*
                   94007: ** Invoke the OP_AggFinalize opcode for every aggregate function
                   94008: ** in the AggInfo structure.
                   94009: */
                   94010: static void finalizeAggFunctions(Parse *pParse, AggInfo *pAggInfo){
                   94011:   Vdbe *v = pParse->pVdbe;
                   94012:   int i;
                   94013:   struct AggInfo_func *pF;
                   94014:   for(i=0, pF=pAggInfo->aFunc; i<pAggInfo->nFunc; i++, pF++){
                   94015:     ExprList *pList = pF->pExpr->x.pList;
                   94016:     assert( !ExprHasProperty(pF->pExpr, EP_xIsSelect) );
                   94017:     sqlite3VdbeAddOp4(v, OP_AggFinal, pF->iMem, pList ? pList->nExpr : 0, 0,
                   94018:                       (void*)pF->pFunc, P4_FUNCDEF);
                   94019:   }
                   94020: }
                   94021: 
                   94022: /*
                   94023: ** Update the accumulator memory cells for an aggregate based on
                   94024: ** the current cursor position.
                   94025: */
                   94026: static void updateAccumulator(Parse *pParse, AggInfo *pAggInfo){
                   94027:   Vdbe *v = pParse->pVdbe;
                   94028:   int i;
                   94029:   struct AggInfo_func *pF;
                   94030:   struct AggInfo_col *pC;
                   94031: 
                   94032:   pAggInfo->directMode = 1;
                   94033:   sqlite3ExprCacheClear(pParse);
                   94034:   for(i=0, pF=pAggInfo->aFunc; i<pAggInfo->nFunc; i++, pF++){
                   94035:     int nArg;
                   94036:     int addrNext = 0;
                   94037:     int regAgg;
                   94038:     ExprList *pList = pF->pExpr->x.pList;
                   94039:     assert( !ExprHasProperty(pF->pExpr, EP_xIsSelect) );
                   94040:     if( pList ){
                   94041:       nArg = pList->nExpr;
                   94042:       regAgg = sqlite3GetTempRange(pParse, nArg);
                   94043:       sqlite3ExprCodeExprList(pParse, pList, regAgg, 1);
                   94044:     }else{
                   94045:       nArg = 0;
                   94046:       regAgg = 0;
                   94047:     }
                   94048:     if( pF->iDistinct>=0 ){
                   94049:       addrNext = sqlite3VdbeMakeLabel(v);
                   94050:       assert( nArg==1 );
                   94051:       codeDistinct(pParse, pF->iDistinct, addrNext, 1, regAgg);
                   94052:     }
                   94053:     if( pF->pFunc->flags & SQLITE_FUNC_NEEDCOLL ){
                   94054:       CollSeq *pColl = 0;
                   94055:       struct ExprList_item *pItem;
                   94056:       int j;
                   94057:       assert( pList!=0 );  /* pList!=0 if pF->pFunc has NEEDCOLL */
                   94058:       for(j=0, pItem=pList->a; !pColl && j<nArg; j++, pItem++){
                   94059:         pColl = sqlite3ExprCollSeq(pParse, pItem->pExpr);
                   94060:       }
                   94061:       if( !pColl ){
                   94062:         pColl = pParse->db->pDfltColl;
                   94063:       }
                   94064:       sqlite3VdbeAddOp4(v, OP_CollSeq, 0, 0, 0, (char *)pColl, P4_COLLSEQ);
                   94065:     }
                   94066:     sqlite3VdbeAddOp4(v, OP_AggStep, 0, regAgg, pF->iMem,
                   94067:                       (void*)pF->pFunc, P4_FUNCDEF);
                   94068:     sqlite3VdbeChangeP5(v, (u8)nArg);
                   94069:     sqlite3ExprCacheAffinityChange(pParse, regAgg, nArg);
                   94070:     sqlite3ReleaseTempRange(pParse, regAgg, nArg);
                   94071:     if( addrNext ){
                   94072:       sqlite3VdbeResolveLabel(v, addrNext);
                   94073:       sqlite3ExprCacheClear(pParse);
                   94074:     }
                   94075:   }
                   94076: 
                   94077:   /* Before populating the accumulator registers, clear the column cache.
                   94078:   ** Otherwise, if any of the required column values are already present 
                   94079:   ** in registers, sqlite3ExprCode() may use OP_SCopy to copy the value
                   94080:   ** to pC->iMem. But by the time the value is used, the original register
                   94081:   ** may have been used, invalidating the underlying buffer holding the
                   94082:   ** text or blob value. See ticket [883034dcb5].
                   94083:   **
                   94084:   ** Another solution would be to change the OP_SCopy used to copy cached
                   94085:   ** values to an OP_Copy.
                   94086:   */
                   94087:   sqlite3ExprCacheClear(pParse);
                   94088:   for(i=0, pC=pAggInfo->aCol; i<pAggInfo->nAccumulator; i++, pC++){
                   94089:     sqlite3ExprCode(pParse, pC->pExpr, pC->iMem);
                   94090:   }
                   94091:   pAggInfo->directMode = 0;
                   94092:   sqlite3ExprCacheClear(pParse);
                   94093: }
                   94094: 
                   94095: /*
                   94096: ** Add a single OP_Explain instruction to the VDBE to explain a simple
                   94097: ** count(*) query ("SELECT count(*) FROM pTab").
                   94098: */
                   94099: #ifndef SQLITE_OMIT_EXPLAIN
                   94100: static void explainSimpleCount(
                   94101:   Parse *pParse,                  /* Parse context */
                   94102:   Table *pTab,                    /* Table being queried */
                   94103:   Index *pIdx                     /* Index used to optimize scan, or NULL */
                   94104: ){
                   94105:   if( pParse->explain==2 ){
                   94106:     char *zEqp = sqlite3MPrintf(pParse->db, "SCAN TABLE %s %s%s(~%d rows)",
                   94107:         pTab->zName, 
                   94108:         pIdx ? "USING COVERING INDEX " : "",
                   94109:         pIdx ? pIdx->zName : "",
                   94110:         pTab->nRowEst
                   94111:     );
                   94112:     sqlite3VdbeAddOp4(
                   94113:         pParse->pVdbe, OP_Explain, pParse->iSelectId, 0, 0, zEqp, P4_DYNAMIC
                   94114:     );
                   94115:   }
                   94116: }
                   94117: #else
                   94118: # define explainSimpleCount(a,b,c)
                   94119: #endif
                   94120: 
                   94121: /*
                   94122: ** Generate code for the SELECT statement given in the p argument.  
                   94123: **
                   94124: ** The results are distributed in various ways depending on the
                   94125: ** contents of the SelectDest structure pointed to by argument pDest
                   94126: ** as follows:
                   94127: **
                   94128: **     pDest->eDest    Result
                   94129: **     ------------    -------------------------------------------
                   94130: **     SRT_Output      Generate a row of output (using the OP_ResultRow
                   94131: **                     opcode) for each row in the result set.
                   94132: **
                   94133: **     SRT_Mem         Only valid if the result is a single column.
                   94134: **                     Store the first column of the first result row
                   94135: **                     in register pDest->iParm then abandon the rest
                   94136: **                     of the query.  This destination implies "LIMIT 1".
                   94137: **
                   94138: **     SRT_Set         The result must be a single column.  Store each
                   94139: **                     row of result as the key in table pDest->iParm. 
                   94140: **                     Apply the affinity pDest->affinity before storing
                   94141: **                     results.  Used to implement "IN (SELECT ...)".
                   94142: **
                   94143: **     SRT_Union       Store results as a key in a temporary table pDest->iParm.
                   94144: **
                   94145: **     SRT_Except      Remove results from the temporary table pDest->iParm.
                   94146: **
                   94147: **     SRT_Table       Store results in temporary table pDest->iParm.
                   94148: **                     This is like SRT_EphemTab except that the table
                   94149: **                     is assumed to already be open.
                   94150: **
                   94151: **     SRT_EphemTab    Create an temporary table pDest->iParm and store
                   94152: **                     the result there. The cursor is left open after
                   94153: **                     returning.  This is like SRT_Table except that
                   94154: **                     this destination uses OP_OpenEphemeral to create
                   94155: **                     the table first.
                   94156: **
                   94157: **     SRT_Coroutine   Generate a co-routine that returns a new row of
                   94158: **                     results each time it is invoked.  The entry point
                   94159: **                     of the co-routine is stored in register pDest->iParm.
                   94160: **
                   94161: **     SRT_Exists      Store a 1 in memory cell pDest->iParm if the result
                   94162: **                     set is not empty.
                   94163: **
                   94164: **     SRT_Discard     Throw the results away.  This is used by SELECT
                   94165: **                     statements within triggers whose only purpose is
                   94166: **                     the side-effects of functions.
                   94167: **
                   94168: ** This routine returns the number of errors.  If any errors are
                   94169: ** encountered, then an appropriate error message is left in
                   94170: ** pParse->zErrMsg.
                   94171: **
                   94172: ** This routine does NOT free the Select structure passed in.  The
                   94173: ** calling function needs to do that.
                   94174: */
                   94175: SQLITE_PRIVATE int sqlite3Select(
                   94176:   Parse *pParse,         /* The parser context */
                   94177:   Select *p,             /* The SELECT statement being coded. */
                   94178:   SelectDest *pDest      /* What to do with the query results */
                   94179: ){
                   94180:   int i, j;              /* Loop counters */
                   94181:   WhereInfo *pWInfo;     /* Return from sqlite3WhereBegin() */
                   94182:   Vdbe *v;               /* The virtual machine under construction */
                   94183:   int isAgg;             /* True for select lists like "count(*)" */
                   94184:   ExprList *pEList;      /* List of columns to extract. */
                   94185:   SrcList *pTabList;     /* List of tables to select from */
                   94186:   Expr *pWhere;          /* The WHERE clause.  May be NULL */
                   94187:   ExprList *pOrderBy;    /* The ORDER BY clause.  May be NULL */
                   94188:   ExprList *pGroupBy;    /* The GROUP BY clause.  May be NULL */
                   94189:   Expr *pHaving;         /* The HAVING clause.  May be NULL */
                   94190:   int isDistinct;        /* True if the DISTINCT keyword is present */
                   94191:   int distinct;          /* Table to use for the distinct set */
                   94192:   int rc = 1;            /* Value to return from this function */
                   94193:   int addrSortIndex;     /* Address of an OP_OpenEphemeral instruction */
                   94194:   AggInfo sAggInfo;      /* Information used by aggregate queries */
                   94195:   int iEnd;              /* Address of the end of the query */
                   94196:   sqlite3 *db;           /* The database connection */
                   94197: 
                   94198: #ifndef SQLITE_OMIT_EXPLAIN
                   94199:   int iRestoreSelectId = pParse->iSelectId;
                   94200:   pParse->iSelectId = pParse->iNextSelectId++;
                   94201: #endif
                   94202: 
                   94203:   db = pParse->db;
                   94204:   if( p==0 || db->mallocFailed || pParse->nErr ){
                   94205:     return 1;
                   94206:   }
                   94207:   if( sqlite3AuthCheck(pParse, SQLITE_SELECT, 0, 0, 0) ) return 1;
                   94208:   memset(&sAggInfo, 0, sizeof(sAggInfo));
                   94209: 
                   94210:   if( IgnorableOrderby(pDest) ){
                   94211:     assert(pDest->eDest==SRT_Exists || pDest->eDest==SRT_Union || 
                   94212:            pDest->eDest==SRT_Except || pDest->eDest==SRT_Discard);
                   94213:     /* If ORDER BY makes no difference in the output then neither does
                   94214:     ** DISTINCT so it can be removed too. */
                   94215:     sqlite3ExprListDelete(db, p->pOrderBy);
                   94216:     p->pOrderBy = 0;
                   94217:     p->selFlags &= ~SF_Distinct;
                   94218:   }
                   94219:   sqlite3SelectPrep(pParse, p, 0);
                   94220:   pOrderBy = p->pOrderBy;
                   94221:   pTabList = p->pSrc;
                   94222:   pEList = p->pEList;
                   94223:   if( pParse->nErr || db->mallocFailed ){
                   94224:     goto select_end;
                   94225:   }
                   94226:   isAgg = (p->selFlags & SF_Aggregate)!=0;
                   94227:   assert( pEList!=0 );
                   94228: 
                   94229:   /* Begin generating code.
                   94230:   */
                   94231:   v = sqlite3GetVdbe(pParse);
                   94232:   if( v==0 ) goto select_end;
                   94233: 
                   94234:   /* If writing to memory or generating a set
                   94235:   ** only a single column may be output.
                   94236:   */
                   94237: #ifndef SQLITE_OMIT_SUBQUERY
                   94238:   if( checkForMultiColumnSelectError(pParse, pDest, pEList->nExpr) ){
                   94239:     goto select_end;
                   94240:   }
                   94241: #endif
                   94242: 
                   94243:   /* Generate code for all sub-queries in the FROM clause
                   94244:   */
                   94245: #if !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW)
                   94246:   for(i=0; !p->pPrior && i<pTabList->nSrc; i++){
                   94247:     struct SrcList_item *pItem = &pTabList->a[i];
                   94248:     SelectDest dest;
                   94249:     Select *pSub = pItem->pSelect;
                   94250:     int isAggSub;
                   94251: 
                   94252:     if( pSub==0 || pItem->isPopulated ) continue;
                   94253: 
                   94254:     /* Increment Parse.nHeight by the height of the largest expression
1.1.1.3 ! misho    94255:     ** tree referred to by this, the parent select. The child select
1.1       misho    94256:     ** may contain expression trees of at most
                   94257:     ** (SQLITE_MAX_EXPR_DEPTH-Parse.nHeight) height. This is a bit
                   94258:     ** more conservative than necessary, but much easier than enforcing
                   94259:     ** an exact limit.
                   94260:     */
                   94261:     pParse->nHeight += sqlite3SelectExprHeight(p);
                   94262: 
                   94263:     /* Check to see if the subquery can be absorbed into the parent. */
                   94264:     isAggSub = (pSub->selFlags & SF_Aggregate)!=0;
                   94265:     if( flattenSubquery(pParse, p, i, isAgg, isAggSub) ){
                   94266:       if( isAggSub ){
                   94267:         isAgg = 1;
                   94268:         p->selFlags |= SF_Aggregate;
                   94269:       }
                   94270:       i = -1;
                   94271:     }else{
                   94272:       sqlite3SelectDestInit(&dest, SRT_EphemTab, pItem->iCursor);
                   94273:       assert( pItem->isPopulated==0 );
                   94274:       explainSetInteger(pItem->iSelectId, (u8)pParse->iNextSelectId);
                   94275:       sqlite3Select(pParse, pSub, &dest);
                   94276:       pItem->isPopulated = 1;
                   94277:       pItem->pTab->nRowEst = (unsigned)pSub->nSelectRow;
                   94278:     }
                   94279:     if( /*pParse->nErr ||*/ db->mallocFailed ){
                   94280:       goto select_end;
                   94281:     }
                   94282:     pParse->nHeight -= sqlite3SelectExprHeight(p);
                   94283:     pTabList = p->pSrc;
                   94284:     if( !IgnorableOrderby(pDest) ){
                   94285:       pOrderBy = p->pOrderBy;
                   94286:     }
                   94287:   }
                   94288:   pEList = p->pEList;
                   94289: #endif
                   94290:   pWhere = p->pWhere;
                   94291:   pGroupBy = p->pGroupBy;
                   94292:   pHaving = p->pHaving;
                   94293:   isDistinct = (p->selFlags & SF_Distinct)!=0;
                   94294: 
                   94295: #ifndef SQLITE_OMIT_COMPOUND_SELECT
                   94296:   /* If there is are a sequence of queries, do the earlier ones first.
                   94297:   */
                   94298:   if( p->pPrior ){
                   94299:     if( p->pRightmost==0 ){
                   94300:       Select *pLoop, *pRight = 0;
                   94301:       int cnt = 0;
                   94302:       int mxSelect;
                   94303:       for(pLoop=p; pLoop; pLoop=pLoop->pPrior, cnt++){
                   94304:         pLoop->pRightmost = p;
                   94305:         pLoop->pNext = pRight;
                   94306:         pRight = pLoop;
                   94307:       }
                   94308:       mxSelect = db->aLimit[SQLITE_LIMIT_COMPOUND_SELECT];
                   94309:       if( mxSelect && cnt>mxSelect ){
                   94310:         sqlite3ErrorMsg(pParse, "too many terms in compound SELECT");
                   94311:         goto select_end;
                   94312:       }
                   94313:     }
                   94314:     rc = multiSelect(pParse, p, pDest);
                   94315:     explainSetInteger(pParse->iSelectId, iRestoreSelectId);
                   94316:     return rc;
                   94317:   }
                   94318: #endif
                   94319: 
                   94320:   /* If possible, rewrite the query to use GROUP BY instead of DISTINCT.
                   94321:   ** GROUP BY might use an index, DISTINCT never does.
                   94322:   */
                   94323:   assert( p->pGroupBy==0 || (p->selFlags & SF_Aggregate)!=0 );
                   94324:   if( (p->selFlags & (SF_Distinct|SF_Aggregate))==SF_Distinct ){
                   94325:     p->pGroupBy = sqlite3ExprListDup(db, p->pEList, 0);
                   94326:     pGroupBy = p->pGroupBy;
                   94327:     p->selFlags &= ~SF_Distinct;
                   94328:   }
                   94329: 
                   94330:   /* If there is both a GROUP BY and an ORDER BY clause and they are
                   94331:   ** identical, then disable the ORDER BY clause since the GROUP BY
                   94332:   ** will cause elements to come out in the correct order.  This is
                   94333:   ** an optimization - the correct answer should result regardless.
                   94334:   ** Use the SQLITE_GroupByOrder flag with SQLITE_TESTCTRL_OPTIMIZER
                   94335:   ** to disable this optimization for testing purposes.
                   94336:   */
                   94337:   if( sqlite3ExprListCompare(p->pGroupBy, pOrderBy)==0
                   94338:          && (db->flags & SQLITE_GroupByOrder)==0 ){
                   94339:     pOrderBy = 0;
                   94340:   }
                   94341: 
                   94342:   /* If there is an ORDER BY clause, then this sorting
                   94343:   ** index might end up being unused if the data can be 
                   94344:   ** extracted in pre-sorted order.  If that is the case, then the
                   94345:   ** OP_OpenEphemeral instruction will be changed to an OP_Noop once
                   94346:   ** we figure out that the sorting index is not needed.  The addrSortIndex
                   94347:   ** variable is used to facilitate that change.
                   94348:   */
                   94349:   if( pOrderBy ){
                   94350:     KeyInfo *pKeyInfo;
                   94351:     pKeyInfo = keyInfoFromExprList(pParse, pOrderBy);
                   94352:     pOrderBy->iECursor = pParse->nTab++;
                   94353:     p->addrOpenEphm[2] = addrSortIndex =
                   94354:       sqlite3VdbeAddOp4(v, OP_OpenEphemeral,
                   94355:                            pOrderBy->iECursor, pOrderBy->nExpr+2, 0,
                   94356:                            (char*)pKeyInfo, P4_KEYINFO_HANDOFF);
                   94357:   }else{
                   94358:     addrSortIndex = -1;
                   94359:   }
                   94360: 
                   94361:   /* If the output is destined for a temporary table, open that table.
                   94362:   */
                   94363:   if( pDest->eDest==SRT_EphemTab ){
                   94364:     sqlite3VdbeAddOp2(v, OP_OpenEphemeral, pDest->iParm, pEList->nExpr);
                   94365:   }
                   94366: 
                   94367:   /* Set the limiter.
                   94368:   */
                   94369:   iEnd = sqlite3VdbeMakeLabel(v);
                   94370:   p->nSelectRow = (double)LARGEST_INT64;
                   94371:   computeLimitRegisters(pParse, p, iEnd);
                   94372: 
                   94373:   /* Open a virtual index to use for the distinct set.
                   94374:   */
                   94375:   if( p->selFlags & SF_Distinct ){
                   94376:     KeyInfo *pKeyInfo;
                   94377:     assert( isAgg || pGroupBy );
                   94378:     distinct = pParse->nTab++;
                   94379:     pKeyInfo = keyInfoFromExprList(pParse, p->pEList);
                   94380:     sqlite3VdbeAddOp4(v, OP_OpenEphemeral, distinct, 0, 0,
                   94381:                         (char*)pKeyInfo, P4_KEYINFO_HANDOFF);
                   94382:     sqlite3VdbeChangeP5(v, BTREE_UNORDERED);
                   94383:   }else{
                   94384:     distinct = -1;
                   94385:   }
                   94386: 
                   94387:   /* Aggregate and non-aggregate queries are handled differently */
                   94388:   if( !isAgg && pGroupBy==0 ){
                   94389:     /* This case is for non-aggregate queries
                   94390:     ** Begin the database scan
                   94391:     */
                   94392:     pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere, &pOrderBy, 0);
                   94393:     if( pWInfo==0 ) goto select_end;
                   94394:     if( pWInfo->nRowOut < p->nSelectRow ) p->nSelectRow = pWInfo->nRowOut;
                   94395: 
                   94396:     /* If sorting index that was created by a prior OP_OpenEphemeral 
                   94397:     ** instruction ended up not being needed, then change the OP_OpenEphemeral
                   94398:     ** into an OP_Noop.
                   94399:     */
                   94400:     if( addrSortIndex>=0 && pOrderBy==0 ){
                   94401:       sqlite3VdbeChangeToNoop(v, addrSortIndex, 1);
                   94402:       p->addrOpenEphm[2] = -1;
                   94403:     }
                   94404: 
                   94405:     /* Use the standard inner loop
                   94406:     */
                   94407:     assert(!isDistinct);
                   94408:     selectInnerLoop(pParse, p, pEList, 0, 0, pOrderBy, -1, pDest,
                   94409:                     pWInfo->iContinue, pWInfo->iBreak);
                   94410: 
                   94411:     /* End the database scan loop.
                   94412:     */
                   94413:     sqlite3WhereEnd(pWInfo);
                   94414:   }else{
                   94415:     /* This is the processing for aggregate queries */
                   94416:     NameContext sNC;    /* Name context for processing aggregate information */
                   94417:     int iAMem;          /* First Mem address for storing current GROUP BY */
                   94418:     int iBMem;          /* First Mem address for previous GROUP BY */
                   94419:     int iUseFlag;       /* Mem address holding flag indicating that at least
                   94420:                         ** one row of the input to the aggregator has been
                   94421:                         ** processed */
                   94422:     int iAbortFlag;     /* Mem address which causes query abort if positive */
                   94423:     int groupBySort;    /* Rows come from source in GROUP BY order */
                   94424:     int addrEnd;        /* End of processing for this SELECT */
                   94425: 
                   94426:     /* Remove any and all aliases between the result set and the
                   94427:     ** GROUP BY clause.
                   94428:     */
                   94429:     if( pGroupBy ){
                   94430:       int k;                        /* Loop counter */
                   94431:       struct ExprList_item *pItem;  /* For looping over expression in a list */
                   94432: 
                   94433:       for(k=p->pEList->nExpr, pItem=p->pEList->a; k>0; k--, pItem++){
                   94434:         pItem->iAlias = 0;
                   94435:       }
                   94436:       for(k=pGroupBy->nExpr, pItem=pGroupBy->a; k>0; k--, pItem++){
                   94437:         pItem->iAlias = 0;
                   94438:       }
                   94439:       if( p->nSelectRow>(double)100 ) p->nSelectRow = (double)100;
                   94440:     }else{
                   94441:       p->nSelectRow = (double)1;
                   94442:     }
                   94443: 
                   94444:  
                   94445:     /* Create a label to jump to when we want to abort the query */
                   94446:     addrEnd = sqlite3VdbeMakeLabel(v);
                   94447: 
                   94448:     /* Convert TK_COLUMN nodes into TK_AGG_COLUMN and make entries in
                   94449:     ** sAggInfo for all TK_AGG_FUNCTION nodes in expressions of the
                   94450:     ** SELECT statement.
                   94451:     */
                   94452:     memset(&sNC, 0, sizeof(sNC));
                   94453:     sNC.pParse = pParse;
                   94454:     sNC.pSrcList = pTabList;
                   94455:     sNC.pAggInfo = &sAggInfo;
                   94456:     sAggInfo.nSortingColumn = pGroupBy ? pGroupBy->nExpr+1 : 0;
                   94457:     sAggInfo.pGroupBy = pGroupBy;
                   94458:     sqlite3ExprAnalyzeAggList(&sNC, pEList);
                   94459:     sqlite3ExprAnalyzeAggList(&sNC, pOrderBy);
                   94460:     if( pHaving ){
                   94461:       sqlite3ExprAnalyzeAggregates(&sNC, pHaving);
                   94462:     }
                   94463:     sAggInfo.nAccumulator = sAggInfo.nColumn;
                   94464:     for(i=0; i<sAggInfo.nFunc; i++){
                   94465:       assert( !ExprHasProperty(sAggInfo.aFunc[i].pExpr, EP_xIsSelect) );
                   94466:       sqlite3ExprAnalyzeAggList(&sNC, sAggInfo.aFunc[i].pExpr->x.pList);
                   94467:     }
                   94468:     if( db->mallocFailed ) goto select_end;
                   94469: 
                   94470:     /* Processing for aggregates with GROUP BY is very different and
                   94471:     ** much more complex than aggregates without a GROUP BY.
                   94472:     */
                   94473:     if( pGroupBy ){
                   94474:       KeyInfo *pKeyInfo;  /* Keying information for the group by clause */
                   94475:       int j1;             /* A-vs-B comparision jump */
                   94476:       int addrOutputRow;  /* Start of subroutine that outputs a result row */
                   94477:       int regOutputRow;   /* Return address register for output subroutine */
                   94478:       int addrSetAbort;   /* Set the abort flag and return */
                   94479:       int addrTopOfLoop;  /* Top of the input loop */
                   94480:       int addrSortingIdx; /* The OP_OpenEphemeral for the sorting index */
                   94481:       int addrReset;      /* Subroutine for resetting the accumulator */
                   94482:       int regReset;       /* Return address register for reset subroutine */
                   94483: 
                   94484:       /* If there is a GROUP BY clause we might need a sorting index to
                   94485:       ** implement it.  Allocate that sorting index now.  If it turns out
                   94486:       ** that we do not need it after all, the OpenEphemeral instruction
                   94487:       ** will be converted into a Noop.  
                   94488:       */
                   94489:       sAggInfo.sortingIdx = pParse->nTab++;
                   94490:       pKeyInfo = keyInfoFromExprList(pParse, pGroupBy);
                   94491:       addrSortingIdx = sqlite3VdbeAddOp4(v, OP_OpenEphemeral, 
                   94492:           sAggInfo.sortingIdx, sAggInfo.nSortingColumn, 
                   94493:           0, (char*)pKeyInfo, P4_KEYINFO_HANDOFF);
                   94494: 
                   94495:       /* Initialize memory locations used by GROUP BY aggregate processing
                   94496:       */
                   94497:       iUseFlag = ++pParse->nMem;
                   94498:       iAbortFlag = ++pParse->nMem;
                   94499:       regOutputRow = ++pParse->nMem;
                   94500:       addrOutputRow = sqlite3VdbeMakeLabel(v);
                   94501:       regReset = ++pParse->nMem;
                   94502:       addrReset = sqlite3VdbeMakeLabel(v);
                   94503:       iAMem = pParse->nMem + 1;
                   94504:       pParse->nMem += pGroupBy->nExpr;
                   94505:       iBMem = pParse->nMem + 1;
                   94506:       pParse->nMem += pGroupBy->nExpr;
                   94507:       sqlite3VdbeAddOp2(v, OP_Integer, 0, iAbortFlag);
                   94508:       VdbeComment((v, "clear abort flag"));
                   94509:       sqlite3VdbeAddOp2(v, OP_Integer, 0, iUseFlag);
                   94510:       VdbeComment((v, "indicate accumulator empty"));
                   94511: 
                   94512:       /* Begin a loop that will extract all source rows in GROUP BY order.
                   94513:       ** This might involve two separate loops with an OP_Sort in between, or
                   94514:       ** it might be a single loop that uses an index to extract information
                   94515:       ** in the right order to begin with.
                   94516:       */
                   94517:       sqlite3VdbeAddOp2(v, OP_Gosub, regReset, addrReset);
                   94518:       pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere, &pGroupBy, 0);
                   94519:       if( pWInfo==0 ) goto select_end;
                   94520:       if( pGroupBy==0 ){
                   94521:         /* The optimizer is able to deliver rows in group by order so
                   94522:         ** we do not have to sort.  The OP_OpenEphemeral table will be
                   94523:         ** cancelled later because we still need to use the pKeyInfo
                   94524:         */
                   94525:         pGroupBy = p->pGroupBy;
                   94526:         groupBySort = 0;
                   94527:       }else{
                   94528:         /* Rows are coming out in undetermined order.  We have to push
                   94529:         ** each row into a sorting index, terminate the first loop,
                   94530:         ** then loop over the sorting index in order to get the output
                   94531:         ** in sorted order
                   94532:         */
                   94533:         int regBase;
                   94534:         int regRecord;
                   94535:         int nCol;
                   94536:         int nGroupBy;
                   94537: 
                   94538:         explainTempTable(pParse, 
                   94539:             isDistinct && !(p->selFlags&SF_Distinct)?"DISTINCT":"GROUP BY");
                   94540: 
                   94541:         groupBySort = 1;
                   94542:         nGroupBy = pGroupBy->nExpr;
                   94543:         nCol = nGroupBy + 1;
                   94544:         j = nGroupBy+1;
                   94545:         for(i=0; i<sAggInfo.nColumn; i++){
                   94546:           if( sAggInfo.aCol[i].iSorterColumn>=j ){
                   94547:             nCol++;
                   94548:             j++;
                   94549:           }
                   94550:         }
                   94551:         regBase = sqlite3GetTempRange(pParse, nCol);
                   94552:         sqlite3ExprCacheClear(pParse);
                   94553:         sqlite3ExprCodeExprList(pParse, pGroupBy, regBase, 0);
                   94554:         sqlite3VdbeAddOp2(v, OP_Sequence, sAggInfo.sortingIdx,regBase+nGroupBy);
                   94555:         j = nGroupBy+1;
                   94556:         for(i=0; i<sAggInfo.nColumn; i++){
                   94557:           struct AggInfo_col *pCol = &sAggInfo.aCol[i];
                   94558:           if( pCol->iSorterColumn>=j ){
                   94559:             int r1 = j + regBase;
                   94560:             int r2;
                   94561: 
                   94562:             r2 = sqlite3ExprCodeGetColumn(pParse, 
                   94563:                                pCol->pTab, pCol->iColumn, pCol->iTable, r1);
                   94564:             if( r1!=r2 ){
                   94565:               sqlite3VdbeAddOp2(v, OP_SCopy, r2, r1);
                   94566:             }
                   94567:             j++;
                   94568:           }
                   94569:         }
                   94570:         regRecord = sqlite3GetTempReg(pParse);
                   94571:         sqlite3VdbeAddOp3(v, OP_MakeRecord, regBase, nCol, regRecord);
                   94572:         sqlite3VdbeAddOp2(v, OP_IdxInsert, sAggInfo.sortingIdx, regRecord);
                   94573:         sqlite3ReleaseTempReg(pParse, regRecord);
                   94574:         sqlite3ReleaseTempRange(pParse, regBase, nCol);
                   94575:         sqlite3WhereEnd(pWInfo);
                   94576:         sqlite3VdbeAddOp2(v, OP_Sort, sAggInfo.sortingIdx, addrEnd);
                   94577:         VdbeComment((v, "GROUP BY sort"));
                   94578:         sAggInfo.useSortingIdx = 1;
                   94579:         sqlite3ExprCacheClear(pParse);
                   94580:       }
                   94581: 
                   94582:       /* Evaluate the current GROUP BY terms and store in b0, b1, b2...
                   94583:       ** (b0 is memory location iBMem+0, b1 is iBMem+1, and so forth)
                   94584:       ** Then compare the current GROUP BY terms against the GROUP BY terms
                   94585:       ** from the previous row currently stored in a0, a1, a2...
                   94586:       */
                   94587:       addrTopOfLoop = sqlite3VdbeCurrentAddr(v);
                   94588:       sqlite3ExprCacheClear(pParse);
                   94589:       for(j=0; j<pGroupBy->nExpr; j++){
                   94590:         if( groupBySort ){
                   94591:           sqlite3VdbeAddOp3(v, OP_Column, sAggInfo.sortingIdx, j, iBMem+j);
                   94592:         }else{
                   94593:           sAggInfo.directMode = 1;
                   94594:           sqlite3ExprCode(pParse, pGroupBy->a[j].pExpr, iBMem+j);
                   94595:         }
                   94596:       }
                   94597:       sqlite3VdbeAddOp4(v, OP_Compare, iAMem, iBMem, pGroupBy->nExpr,
                   94598:                           (char*)pKeyInfo, P4_KEYINFO);
                   94599:       j1 = sqlite3VdbeCurrentAddr(v);
                   94600:       sqlite3VdbeAddOp3(v, OP_Jump, j1+1, 0, j1+1);
                   94601: 
                   94602:       /* Generate code that runs whenever the GROUP BY changes.
                   94603:       ** Changes in the GROUP BY are detected by the previous code
                   94604:       ** block.  If there were no changes, this block is skipped.
                   94605:       **
                   94606:       ** This code copies current group by terms in b0,b1,b2,...
                   94607:       ** over to a0,a1,a2.  It then calls the output subroutine
                   94608:       ** and resets the aggregate accumulator registers in preparation
                   94609:       ** for the next GROUP BY batch.
                   94610:       */
                   94611:       sqlite3ExprCodeMove(pParse, iBMem, iAMem, pGroupBy->nExpr);
                   94612:       sqlite3VdbeAddOp2(v, OP_Gosub, regOutputRow, addrOutputRow);
                   94613:       VdbeComment((v, "output one row"));
                   94614:       sqlite3VdbeAddOp2(v, OP_IfPos, iAbortFlag, addrEnd);
                   94615:       VdbeComment((v, "check abort flag"));
                   94616:       sqlite3VdbeAddOp2(v, OP_Gosub, regReset, addrReset);
                   94617:       VdbeComment((v, "reset accumulator"));
                   94618: 
                   94619:       /* Update the aggregate accumulators based on the content of
                   94620:       ** the current row
                   94621:       */
                   94622:       sqlite3VdbeJumpHere(v, j1);
                   94623:       updateAccumulator(pParse, &sAggInfo);
                   94624:       sqlite3VdbeAddOp2(v, OP_Integer, 1, iUseFlag);
                   94625:       VdbeComment((v, "indicate data in accumulator"));
                   94626: 
                   94627:       /* End of the loop
                   94628:       */
                   94629:       if( groupBySort ){
                   94630:         sqlite3VdbeAddOp2(v, OP_Next, sAggInfo.sortingIdx, addrTopOfLoop);
                   94631:       }else{
                   94632:         sqlite3WhereEnd(pWInfo);
                   94633:         sqlite3VdbeChangeToNoop(v, addrSortingIdx, 1);
                   94634:       }
                   94635: 
                   94636:       /* Output the final row of result
                   94637:       */
                   94638:       sqlite3VdbeAddOp2(v, OP_Gosub, regOutputRow, addrOutputRow);
                   94639:       VdbeComment((v, "output final row"));
                   94640: 
                   94641:       /* Jump over the subroutines
                   94642:       */
                   94643:       sqlite3VdbeAddOp2(v, OP_Goto, 0, addrEnd);
                   94644: 
                   94645:       /* Generate a subroutine that outputs a single row of the result
                   94646:       ** set.  This subroutine first looks at the iUseFlag.  If iUseFlag
                   94647:       ** is less than or equal to zero, the subroutine is a no-op.  If
                   94648:       ** the processing calls for the query to abort, this subroutine
                   94649:       ** increments the iAbortFlag memory location before returning in
                   94650:       ** order to signal the caller to abort.
                   94651:       */
                   94652:       addrSetAbort = sqlite3VdbeCurrentAddr(v);
                   94653:       sqlite3VdbeAddOp2(v, OP_Integer, 1, iAbortFlag);
                   94654:       VdbeComment((v, "set abort flag"));
                   94655:       sqlite3VdbeAddOp1(v, OP_Return, regOutputRow);
                   94656:       sqlite3VdbeResolveLabel(v, addrOutputRow);
                   94657:       addrOutputRow = sqlite3VdbeCurrentAddr(v);
                   94658:       sqlite3VdbeAddOp2(v, OP_IfPos, iUseFlag, addrOutputRow+2);
                   94659:       VdbeComment((v, "Groupby result generator entry point"));
                   94660:       sqlite3VdbeAddOp1(v, OP_Return, regOutputRow);
                   94661:       finalizeAggFunctions(pParse, &sAggInfo);
                   94662:       sqlite3ExprIfFalse(pParse, pHaving, addrOutputRow+1, SQLITE_JUMPIFNULL);
                   94663:       selectInnerLoop(pParse, p, p->pEList, 0, 0, pOrderBy,
                   94664:                       distinct, pDest,
                   94665:                       addrOutputRow+1, addrSetAbort);
                   94666:       sqlite3VdbeAddOp1(v, OP_Return, regOutputRow);
                   94667:       VdbeComment((v, "end groupby result generator"));
                   94668: 
                   94669:       /* Generate a subroutine that will reset the group-by accumulator
                   94670:       */
                   94671:       sqlite3VdbeResolveLabel(v, addrReset);
                   94672:       resetAccumulator(pParse, &sAggInfo);
                   94673:       sqlite3VdbeAddOp1(v, OP_Return, regReset);
                   94674:      
                   94675:     } /* endif pGroupBy.  Begin aggregate queries without GROUP BY: */
                   94676:     else {
                   94677:       ExprList *pDel = 0;
                   94678: #ifndef SQLITE_OMIT_BTREECOUNT
                   94679:       Table *pTab;
                   94680:       if( (pTab = isSimpleCount(p, &sAggInfo))!=0 ){
                   94681:         /* If isSimpleCount() returns a pointer to a Table structure, then
                   94682:         ** the SQL statement is of the form:
                   94683:         **
                   94684:         **   SELECT count(*) FROM <tbl>
                   94685:         **
                   94686:         ** where the Table structure returned represents table <tbl>.
                   94687:         **
                   94688:         ** This statement is so common that it is optimized specially. The
                   94689:         ** OP_Count instruction is executed either on the intkey table that
                   94690:         ** contains the data for table <tbl> or on one of its indexes. It
                   94691:         ** is better to execute the op on an index, as indexes are almost
                   94692:         ** always spread across less pages than their corresponding tables.
                   94693:         */
                   94694:         const int iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema);
                   94695:         const int iCsr = pParse->nTab++;     /* Cursor to scan b-tree */
                   94696:         Index *pIdx;                         /* Iterator variable */
                   94697:         KeyInfo *pKeyInfo = 0;               /* Keyinfo for scanned index */
                   94698:         Index *pBest = 0;                    /* Best index found so far */
                   94699:         int iRoot = pTab->tnum;              /* Root page of scanned b-tree */
                   94700: 
                   94701:         sqlite3CodeVerifySchema(pParse, iDb);
                   94702:         sqlite3TableLock(pParse, iDb, pTab->tnum, 0, pTab->zName);
                   94703: 
                   94704:         /* Search for the index that has the least amount of columns. If
                   94705:         ** there is such an index, and it has less columns than the table
                   94706:         ** does, then we can assume that it consumes less space on disk and
                   94707:         ** will therefore be cheaper to scan to determine the query result.
                   94708:         ** In this case set iRoot to the root page number of the index b-tree
                   94709:         ** and pKeyInfo to the KeyInfo structure required to navigate the
                   94710:         ** index.
                   94711:         **
                   94712:         ** (2011-04-15) Do not do a full scan of an unordered index.
                   94713:         **
                   94714:         ** In practice the KeyInfo structure will not be used. It is only 
                   94715:         ** passed to keep OP_OpenRead happy.
                   94716:         */
                   94717:         for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
                   94718:           if( pIdx->bUnordered==0 && (!pBest || pIdx->nColumn<pBest->nColumn) ){
                   94719:             pBest = pIdx;
                   94720:           }
                   94721:         }
                   94722:         if( pBest && pBest->nColumn<pTab->nCol ){
                   94723:           iRoot = pBest->tnum;
                   94724:           pKeyInfo = sqlite3IndexKeyinfo(pParse, pBest);
                   94725:         }
                   94726: 
                   94727:         /* Open a read-only cursor, execute the OP_Count, close the cursor. */
                   94728:         sqlite3VdbeAddOp3(v, OP_OpenRead, iCsr, iRoot, iDb);
                   94729:         if( pKeyInfo ){
                   94730:           sqlite3VdbeChangeP4(v, -1, (char *)pKeyInfo, P4_KEYINFO_HANDOFF);
                   94731:         }
                   94732:         sqlite3VdbeAddOp2(v, OP_Count, iCsr, sAggInfo.aFunc[0].iMem);
                   94733:         sqlite3VdbeAddOp1(v, OP_Close, iCsr);
                   94734:         explainSimpleCount(pParse, pTab, pBest);
                   94735:       }else
                   94736: #endif /* SQLITE_OMIT_BTREECOUNT */
                   94737:       {
                   94738:         /* Check if the query is of one of the following forms:
                   94739:         **
                   94740:         **   SELECT min(x) FROM ...
                   94741:         **   SELECT max(x) FROM ...
                   94742:         **
                   94743:         ** If it is, then ask the code in where.c to attempt to sort results
                   94744:         ** as if there was an "ORDER ON x" or "ORDER ON x DESC" clause. 
                   94745:         ** If where.c is able to produce results sorted in this order, then
                   94746:         ** add vdbe code to break out of the processing loop after the 
                   94747:         ** first iteration (since the first iteration of the loop is 
                   94748:         ** guaranteed to operate on the row with the minimum or maximum 
                   94749:         ** value of x, the only row required).
                   94750:         **
                   94751:         ** A special flag must be passed to sqlite3WhereBegin() to slightly
                   94752:         ** modify behaviour as follows:
                   94753:         **
                   94754:         **   + If the query is a "SELECT min(x)", then the loop coded by
                   94755:         **     where.c should not iterate over any values with a NULL value
                   94756:         **     for x.
                   94757:         **
                   94758:         **   + The optimizer code in where.c (the thing that decides which
                   94759:         **     index or indices to use) should place a different priority on 
                   94760:         **     satisfying the 'ORDER BY' clause than it does in other cases.
                   94761:         **     Refer to code and comments in where.c for details.
                   94762:         */
                   94763:         ExprList *pMinMax = 0;
                   94764:         u8 flag = minMaxQuery(p);
                   94765:         if( flag ){
                   94766:           assert( !ExprHasProperty(p->pEList->a[0].pExpr, EP_xIsSelect) );
                   94767:           pMinMax = sqlite3ExprListDup(db, p->pEList->a[0].pExpr->x.pList,0);
                   94768:           pDel = pMinMax;
                   94769:           if( pMinMax && !db->mallocFailed ){
                   94770:             pMinMax->a[0].sortOrder = flag!=WHERE_ORDERBY_MIN ?1:0;
                   94771:             pMinMax->a[0].pExpr->op = TK_COLUMN;
                   94772:           }
                   94773:         }
                   94774:   
                   94775:         /* This case runs if the aggregate has no GROUP BY clause.  The
                   94776:         ** processing is much simpler since there is only a single row
                   94777:         ** of output.
                   94778:         */
                   94779:         resetAccumulator(pParse, &sAggInfo);
                   94780:         pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere, &pMinMax, flag);
                   94781:         if( pWInfo==0 ){
                   94782:           sqlite3ExprListDelete(db, pDel);
                   94783:           goto select_end;
                   94784:         }
                   94785:         updateAccumulator(pParse, &sAggInfo);
                   94786:         if( !pMinMax && flag ){
                   94787:           sqlite3VdbeAddOp2(v, OP_Goto, 0, pWInfo->iBreak);
                   94788:           VdbeComment((v, "%s() by index",
                   94789:                 (flag==WHERE_ORDERBY_MIN?"min":"max")));
                   94790:         }
                   94791:         sqlite3WhereEnd(pWInfo);
                   94792:         finalizeAggFunctions(pParse, &sAggInfo);
                   94793:       }
                   94794: 
                   94795:       pOrderBy = 0;
                   94796:       sqlite3ExprIfFalse(pParse, pHaving, addrEnd, SQLITE_JUMPIFNULL);
                   94797:       selectInnerLoop(pParse, p, p->pEList, 0, 0, 0, -1, 
                   94798:                       pDest, addrEnd, addrEnd);
                   94799:       sqlite3ExprListDelete(db, pDel);
                   94800:     }
                   94801:     sqlite3VdbeResolveLabel(v, addrEnd);
                   94802:     
                   94803:   } /* endif aggregate query */
                   94804: 
                   94805:   if( distinct>=0 ){
                   94806:     explainTempTable(pParse, "DISTINCT");
                   94807:   }
                   94808: 
                   94809:   /* If there is an ORDER BY clause, then we need to sort the results
                   94810:   ** and send them to the callback one by one.
                   94811:   */
                   94812:   if( pOrderBy ){
                   94813:     explainTempTable(pParse, "ORDER BY");
                   94814:     generateSortTail(pParse, p, v, pEList->nExpr, pDest);
                   94815:   }
                   94816: 
                   94817:   /* Jump here to skip this query
                   94818:   */
                   94819:   sqlite3VdbeResolveLabel(v, iEnd);
                   94820: 
                   94821:   /* The SELECT was successfully coded.   Set the return code to 0
                   94822:   ** to indicate no errors.
                   94823:   */
                   94824:   rc = 0;
                   94825: 
                   94826:   /* Control jumps to here if an error is encountered above, or upon
                   94827:   ** successful coding of the SELECT.
                   94828:   */
                   94829: select_end:
                   94830:   explainSetInteger(pParse->iSelectId, iRestoreSelectId);
                   94831: 
                   94832:   /* Identify column names if results of the SELECT are to be output.
                   94833:   */
                   94834:   if( rc==SQLITE_OK && pDest->eDest==SRT_Output ){
                   94835:     generateColumnNames(pParse, pTabList, pEList);
                   94836:   }
                   94837: 
                   94838:   sqlite3DbFree(db, sAggInfo.aCol);
                   94839:   sqlite3DbFree(db, sAggInfo.aFunc);
                   94840:   return rc;
                   94841: }
                   94842: 
                   94843: #if defined(SQLITE_DEBUG)
                   94844: /*
                   94845: *******************************************************************************
                   94846: ** The following code is used for testing and debugging only.  The code
                   94847: ** that follows does not appear in normal builds.
                   94848: **
                   94849: ** These routines are used to print out the content of all or part of a 
                   94850: ** parse structures such as Select or Expr.  Such printouts are useful
                   94851: ** for helping to understand what is happening inside the code generator
                   94852: ** during the execution of complex SELECT statements.
                   94853: **
                   94854: ** These routine are not called anywhere from within the normal
                   94855: ** code base.  Then are intended to be called from within the debugger
                   94856: ** or from temporary "printf" statements inserted for debugging.
                   94857: */
                   94858: SQLITE_PRIVATE void sqlite3PrintExpr(Expr *p){
                   94859:   if( !ExprHasProperty(p, EP_IntValue) && p->u.zToken ){
                   94860:     sqlite3DebugPrintf("(%s", p->u.zToken);
                   94861:   }else{
                   94862:     sqlite3DebugPrintf("(%d", p->op);
                   94863:   }
                   94864:   if( p->pLeft ){
                   94865:     sqlite3DebugPrintf(" ");
                   94866:     sqlite3PrintExpr(p->pLeft);
                   94867:   }
                   94868:   if( p->pRight ){
                   94869:     sqlite3DebugPrintf(" ");
                   94870:     sqlite3PrintExpr(p->pRight);
                   94871:   }
                   94872:   sqlite3DebugPrintf(")");
                   94873: }
                   94874: SQLITE_PRIVATE void sqlite3PrintExprList(ExprList *pList){
                   94875:   int i;
                   94876:   for(i=0; i<pList->nExpr; i++){
                   94877:     sqlite3PrintExpr(pList->a[i].pExpr);
                   94878:     if( i<pList->nExpr-1 ){
                   94879:       sqlite3DebugPrintf(", ");
                   94880:     }
                   94881:   }
                   94882: }
                   94883: SQLITE_PRIVATE void sqlite3PrintSelect(Select *p, int indent){
                   94884:   sqlite3DebugPrintf("%*sSELECT(%p) ", indent, "", p);
                   94885:   sqlite3PrintExprList(p->pEList);
                   94886:   sqlite3DebugPrintf("\n");
                   94887:   if( p->pSrc ){
                   94888:     char *zPrefix;
                   94889:     int i;
                   94890:     zPrefix = "FROM";
                   94891:     for(i=0; i<p->pSrc->nSrc; i++){
                   94892:       struct SrcList_item *pItem = &p->pSrc->a[i];
                   94893:       sqlite3DebugPrintf("%*s ", indent+6, zPrefix);
                   94894:       zPrefix = "";
                   94895:       if( pItem->pSelect ){
                   94896:         sqlite3DebugPrintf("(\n");
                   94897:         sqlite3PrintSelect(pItem->pSelect, indent+10);
                   94898:         sqlite3DebugPrintf("%*s)", indent+8, "");
                   94899:       }else if( pItem->zName ){
                   94900:         sqlite3DebugPrintf("%s", pItem->zName);
                   94901:       }
                   94902:       if( pItem->pTab ){
                   94903:         sqlite3DebugPrintf("(table: %s)", pItem->pTab->zName);
                   94904:       }
                   94905:       if( pItem->zAlias ){
                   94906:         sqlite3DebugPrintf(" AS %s", pItem->zAlias);
                   94907:       }
                   94908:       if( i<p->pSrc->nSrc-1 ){
                   94909:         sqlite3DebugPrintf(",");
                   94910:       }
                   94911:       sqlite3DebugPrintf("\n");
                   94912:     }
                   94913:   }
                   94914:   if( p->pWhere ){
                   94915:     sqlite3DebugPrintf("%*s WHERE ", indent, "");
                   94916:     sqlite3PrintExpr(p->pWhere);
                   94917:     sqlite3DebugPrintf("\n");
                   94918:   }
                   94919:   if( p->pGroupBy ){
                   94920:     sqlite3DebugPrintf("%*s GROUP BY ", indent, "");
                   94921:     sqlite3PrintExprList(p->pGroupBy);
                   94922:     sqlite3DebugPrintf("\n");
                   94923:   }
                   94924:   if( p->pHaving ){
                   94925:     sqlite3DebugPrintf("%*s HAVING ", indent, "");
                   94926:     sqlite3PrintExpr(p->pHaving);
                   94927:     sqlite3DebugPrintf("\n");
                   94928:   }
                   94929:   if( p->pOrderBy ){
                   94930:     sqlite3DebugPrintf("%*s ORDER BY ", indent, "");
                   94931:     sqlite3PrintExprList(p->pOrderBy);
                   94932:     sqlite3DebugPrintf("\n");
                   94933:   }
                   94934: }
                   94935: /* End of the structure debug printing code
                   94936: *****************************************************************************/
                   94937: #endif /* defined(SQLITE_TEST) || defined(SQLITE_DEBUG) */
                   94938: 
                   94939: /************** End of select.c **********************************************/
                   94940: /************** Begin file table.c *******************************************/
                   94941: /*
                   94942: ** 2001 September 15
                   94943: **
                   94944: ** The author disclaims copyright to this source code.  In place of
                   94945: ** a legal notice, here is a blessing:
                   94946: **
                   94947: **    May you do good and not evil.
                   94948: **    May you find forgiveness for yourself and forgive others.
                   94949: **    May you share freely, never taking more than you give.
                   94950: **
                   94951: *************************************************************************
                   94952: ** This file contains the sqlite3_get_table() and sqlite3_free_table()
                   94953: ** interface routines.  These are just wrappers around the main
                   94954: ** interface routine of sqlite3_exec().
                   94955: **
                   94956: ** These routines are in a separate files so that they will not be linked
                   94957: ** if they are not used.
                   94958: */
                   94959: 
                   94960: #ifndef SQLITE_OMIT_GET_TABLE
                   94961: 
                   94962: /*
                   94963: ** This structure is used to pass data from sqlite3_get_table() through
                   94964: ** to the callback function is uses to build the result.
                   94965: */
                   94966: typedef struct TabResult {
                   94967:   char **azResult;   /* Accumulated output */
                   94968:   char *zErrMsg;     /* Error message text, if an error occurs */
                   94969:   int nAlloc;        /* Slots allocated for azResult[] */
                   94970:   int nRow;          /* Number of rows in the result */
                   94971:   int nColumn;       /* Number of columns in the result */
                   94972:   int nData;         /* Slots used in azResult[].  (nRow+1)*nColumn */
                   94973:   int rc;            /* Return code from sqlite3_exec() */
                   94974: } TabResult;
                   94975: 
                   94976: /*
                   94977: ** This routine is called once for each row in the result table.  Its job
                   94978: ** is to fill in the TabResult structure appropriately, allocating new
                   94979: ** memory as necessary.
                   94980: */
                   94981: static int sqlite3_get_table_cb(void *pArg, int nCol, char **argv, char **colv){
                   94982:   TabResult *p = (TabResult*)pArg;  /* Result accumulator */
                   94983:   int need;                         /* Slots needed in p->azResult[] */
                   94984:   int i;                            /* Loop counter */
                   94985:   char *z;                          /* A single column of result */
                   94986: 
                   94987:   /* Make sure there is enough space in p->azResult to hold everything
                   94988:   ** we need to remember from this invocation of the callback.
                   94989:   */
                   94990:   if( p->nRow==0 && argv!=0 ){
                   94991:     need = nCol*2;
                   94992:   }else{
                   94993:     need = nCol;
                   94994:   }
                   94995:   if( p->nData + need > p->nAlloc ){
                   94996:     char **azNew;
                   94997:     p->nAlloc = p->nAlloc*2 + need;
                   94998:     azNew = sqlite3_realloc( p->azResult, sizeof(char*)*p->nAlloc );
                   94999:     if( azNew==0 ) goto malloc_failed;
                   95000:     p->azResult = azNew;
                   95001:   }
                   95002: 
                   95003:   /* If this is the first row, then generate an extra row containing
                   95004:   ** the names of all columns.
                   95005:   */
                   95006:   if( p->nRow==0 ){
                   95007:     p->nColumn = nCol;
                   95008:     for(i=0; i<nCol; i++){
                   95009:       z = sqlite3_mprintf("%s", colv[i]);
                   95010:       if( z==0 ) goto malloc_failed;
                   95011:       p->azResult[p->nData++] = z;
                   95012:     }
                   95013:   }else if( p->nColumn!=nCol ){
                   95014:     sqlite3_free(p->zErrMsg);
                   95015:     p->zErrMsg = sqlite3_mprintf(
                   95016:        "sqlite3_get_table() called with two or more incompatible queries"
                   95017:     );
                   95018:     p->rc = SQLITE_ERROR;
                   95019:     return 1;
                   95020:   }
                   95021: 
                   95022:   /* Copy over the row data
                   95023:   */
                   95024:   if( argv!=0 ){
                   95025:     for(i=0; i<nCol; i++){
                   95026:       if( argv[i]==0 ){
                   95027:         z = 0;
                   95028:       }else{
                   95029:         int n = sqlite3Strlen30(argv[i])+1;
                   95030:         z = sqlite3_malloc( n );
                   95031:         if( z==0 ) goto malloc_failed;
                   95032:         memcpy(z, argv[i], n);
                   95033:       }
                   95034:       p->azResult[p->nData++] = z;
                   95035:     }
                   95036:     p->nRow++;
                   95037:   }
                   95038:   return 0;
                   95039: 
                   95040: malloc_failed:
                   95041:   p->rc = SQLITE_NOMEM;
                   95042:   return 1;
                   95043: }
                   95044: 
                   95045: /*
                   95046: ** Query the database.  But instead of invoking a callback for each row,
                   95047: ** malloc() for space to hold the result and return the entire results
                   95048: ** at the conclusion of the call.
                   95049: **
                   95050: ** The result that is written to ***pazResult is held in memory obtained
                   95051: ** from malloc().  But the caller cannot free this memory directly.  
                   95052: ** Instead, the entire table should be passed to sqlite3_free_table() when
                   95053: ** the calling procedure is finished using it.
                   95054: */
                   95055: SQLITE_API int sqlite3_get_table(
                   95056:   sqlite3 *db,                /* The database on which the SQL executes */
                   95057:   const char *zSql,           /* The SQL to be executed */
                   95058:   char ***pazResult,          /* Write the result table here */
                   95059:   int *pnRow,                 /* Write the number of rows in the result here */
                   95060:   int *pnColumn,              /* Write the number of columns of result here */
                   95061:   char **pzErrMsg             /* Write error messages here */
                   95062: ){
                   95063:   int rc;
                   95064:   TabResult res;
                   95065: 
                   95066:   *pazResult = 0;
                   95067:   if( pnColumn ) *pnColumn = 0;
                   95068:   if( pnRow ) *pnRow = 0;
                   95069:   if( pzErrMsg ) *pzErrMsg = 0;
                   95070:   res.zErrMsg = 0;
                   95071:   res.nRow = 0;
                   95072:   res.nColumn = 0;
                   95073:   res.nData = 1;
                   95074:   res.nAlloc = 20;
                   95075:   res.rc = SQLITE_OK;
                   95076:   res.azResult = sqlite3_malloc(sizeof(char*)*res.nAlloc );
                   95077:   if( res.azResult==0 ){
                   95078:      db->errCode = SQLITE_NOMEM;
                   95079:      return SQLITE_NOMEM;
                   95080:   }
                   95081:   res.azResult[0] = 0;
                   95082:   rc = sqlite3_exec(db, zSql, sqlite3_get_table_cb, &res, pzErrMsg);
                   95083:   assert( sizeof(res.azResult[0])>= sizeof(res.nData) );
                   95084:   res.azResult[0] = SQLITE_INT_TO_PTR(res.nData);
                   95085:   if( (rc&0xff)==SQLITE_ABORT ){
                   95086:     sqlite3_free_table(&res.azResult[1]);
                   95087:     if( res.zErrMsg ){
                   95088:       if( pzErrMsg ){
                   95089:         sqlite3_free(*pzErrMsg);
                   95090:         *pzErrMsg = sqlite3_mprintf("%s",res.zErrMsg);
                   95091:       }
                   95092:       sqlite3_free(res.zErrMsg);
                   95093:     }
                   95094:     db->errCode = res.rc;  /* Assume 32-bit assignment is atomic */
                   95095:     return res.rc;
                   95096:   }
                   95097:   sqlite3_free(res.zErrMsg);
                   95098:   if( rc!=SQLITE_OK ){
                   95099:     sqlite3_free_table(&res.azResult[1]);
                   95100:     return rc;
                   95101:   }
                   95102:   if( res.nAlloc>res.nData ){
                   95103:     char **azNew;
                   95104:     azNew = sqlite3_realloc( res.azResult, sizeof(char*)*res.nData );
                   95105:     if( azNew==0 ){
                   95106:       sqlite3_free_table(&res.azResult[1]);
                   95107:       db->errCode = SQLITE_NOMEM;
                   95108:       return SQLITE_NOMEM;
                   95109:     }
                   95110:     res.azResult = azNew;
                   95111:   }
                   95112:   *pazResult = &res.azResult[1];
                   95113:   if( pnColumn ) *pnColumn = res.nColumn;
                   95114:   if( pnRow ) *pnRow = res.nRow;
                   95115:   return rc;
                   95116: }
                   95117: 
                   95118: /*
                   95119: ** This routine frees the space the sqlite3_get_table() malloced.
                   95120: */
                   95121: SQLITE_API void sqlite3_free_table(
                   95122:   char **azResult            /* Result returned from from sqlite3_get_table() */
                   95123: ){
                   95124:   if( azResult ){
                   95125:     int i, n;
                   95126:     azResult--;
                   95127:     assert( azResult!=0 );
                   95128:     n = SQLITE_PTR_TO_INT(azResult[0]);
                   95129:     for(i=1; i<n; i++){ if( azResult[i] ) sqlite3_free(azResult[i]); }
                   95130:     sqlite3_free(azResult);
                   95131:   }
                   95132: }
                   95133: 
                   95134: #endif /* SQLITE_OMIT_GET_TABLE */
                   95135: 
                   95136: /************** End of table.c ***********************************************/
                   95137: /************** Begin file trigger.c *****************************************/
                   95138: /*
                   95139: **
                   95140: ** The author disclaims copyright to this source code.  In place of
                   95141: ** a legal notice, here is a blessing:
                   95142: **
                   95143: **    May you do good and not evil.
                   95144: **    May you find forgiveness for yourself and forgive others.
                   95145: **    May you share freely, never taking more than you give.
                   95146: **
                   95147: *************************************************************************
                   95148: ** This file contains the implementation for TRIGGERs
                   95149: */
                   95150: 
                   95151: #ifndef SQLITE_OMIT_TRIGGER
                   95152: /*
                   95153: ** Delete a linked list of TriggerStep structures.
                   95154: */
                   95155: SQLITE_PRIVATE void sqlite3DeleteTriggerStep(sqlite3 *db, TriggerStep *pTriggerStep){
                   95156:   while( pTriggerStep ){
                   95157:     TriggerStep * pTmp = pTriggerStep;
                   95158:     pTriggerStep = pTriggerStep->pNext;
                   95159: 
                   95160:     sqlite3ExprDelete(db, pTmp->pWhere);
                   95161:     sqlite3ExprListDelete(db, pTmp->pExprList);
                   95162:     sqlite3SelectDelete(db, pTmp->pSelect);
                   95163:     sqlite3IdListDelete(db, pTmp->pIdList);
                   95164: 
                   95165:     sqlite3DbFree(db, pTmp);
                   95166:   }
                   95167: }
                   95168: 
                   95169: /*
                   95170: ** Given table pTab, return a list of all the triggers attached to 
                   95171: ** the table. The list is connected by Trigger.pNext pointers.
                   95172: **
                   95173: ** All of the triggers on pTab that are in the same database as pTab
                   95174: ** are already attached to pTab->pTrigger.  But there might be additional
                   95175: ** triggers on pTab in the TEMP schema.  This routine prepends all
                   95176: ** TEMP triggers on pTab to the beginning of the pTab->pTrigger list
                   95177: ** and returns the combined list.
                   95178: **
                   95179: ** To state it another way:  This routine returns a list of all triggers
                   95180: ** that fire off of pTab.  The list will include any TEMP triggers on
                   95181: ** pTab as well as the triggers lised in pTab->pTrigger.
                   95182: */
                   95183: SQLITE_PRIVATE Trigger *sqlite3TriggerList(Parse *pParse, Table *pTab){
                   95184:   Schema * const pTmpSchema = pParse->db->aDb[1].pSchema;
                   95185:   Trigger *pList = 0;                  /* List of triggers to return */
                   95186: 
                   95187:   if( pParse->disableTriggers ){
                   95188:     return 0;
                   95189:   }
                   95190: 
                   95191:   if( pTmpSchema!=pTab->pSchema ){
                   95192:     HashElem *p;
                   95193:     assert( sqlite3SchemaMutexHeld(pParse->db, 0, pTmpSchema) );
                   95194:     for(p=sqliteHashFirst(&pTmpSchema->trigHash); p; p=sqliteHashNext(p)){
                   95195:       Trigger *pTrig = (Trigger *)sqliteHashData(p);
                   95196:       if( pTrig->pTabSchema==pTab->pSchema
                   95197:        && 0==sqlite3StrICmp(pTrig->table, pTab->zName) 
                   95198:       ){
                   95199:         pTrig->pNext = (pList ? pList : pTab->pTrigger);
                   95200:         pList = pTrig;
                   95201:       }
                   95202:     }
                   95203:   }
                   95204: 
                   95205:   return (pList ? pList : pTab->pTrigger);
                   95206: }
                   95207: 
                   95208: /*
                   95209: ** This is called by the parser when it sees a CREATE TRIGGER statement
                   95210: ** up to the point of the BEGIN before the trigger actions.  A Trigger
                   95211: ** structure is generated based on the information available and stored
                   95212: ** in pParse->pNewTrigger.  After the trigger actions have been parsed, the
                   95213: ** sqlite3FinishTrigger() function is called to complete the trigger
                   95214: ** construction process.
                   95215: */
                   95216: SQLITE_PRIVATE void sqlite3BeginTrigger(
                   95217:   Parse *pParse,      /* The parse context of the CREATE TRIGGER statement */
                   95218:   Token *pName1,      /* The name of the trigger */
                   95219:   Token *pName2,      /* The name of the trigger */
                   95220:   int tr_tm,          /* One of TK_BEFORE, TK_AFTER, TK_INSTEAD */
                   95221:   int op,             /* One of TK_INSERT, TK_UPDATE, TK_DELETE */
                   95222:   IdList *pColumns,   /* column list if this is an UPDATE OF trigger */
                   95223:   SrcList *pTableName,/* The name of the table/view the trigger applies to */
                   95224:   Expr *pWhen,        /* WHEN clause */
                   95225:   int isTemp,         /* True if the TEMPORARY keyword is present */
                   95226:   int noErr           /* Suppress errors if the trigger already exists */
                   95227: ){
                   95228:   Trigger *pTrigger = 0;  /* The new trigger */
                   95229:   Table *pTab;            /* Table that the trigger fires off of */
                   95230:   char *zName = 0;        /* Name of the trigger */
                   95231:   sqlite3 *db = pParse->db;  /* The database connection */
                   95232:   int iDb;                /* The database to store the trigger in */
                   95233:   Token *pName;           /* The unqualified db name */
                   95234:   DbFixer sFix;           /* State vector for the DB fixer */
                   95235:   int iTabDb;             /* Index of the database holding pTab */
                   95236: 
                   95237:   assert( pName1!=0 );   /* pName1->z might be NULL, but not pName1 itself */
                   95238:   assert( pName2!=0 );
                   95239:   assert( op==TK_INSERT || op==TK_UPDATE || op==TK_DELETE );
                   95240:   assert( op>0 && op<0xff );
                   95241:   if( isTemp ){
                   95242:     /* If TEMP was specified, then the trigger name may not be qualified. */
                   95243:     if( pName2->n>0 ){
                   95244:       sqlite3ErrorMsg(pParse, "temporary trigger may not have qualified name");
                   95245:       goto trigger_cleanup;
                   95246:     }
                   95247:     iDb = 1;
                   95248:     pName = pName1;
                   95249:   }else{
                   95250:     /* Figure out the db that the the trigger will be created in */
                   95251:     iDb = sqlite3TwoPartName(pParse, pName1, pName2, &pName);
                   95252:     if( iDb<0 ){
                   95253:       goto trigger_cleanup;
                   95254:     }
                   95255:   }
                   95256: 
                   95257:   /* If the trigger name was unqualified, and the table is a temp table,
                   95258:   ** then set iDb to 1 to create the trigger in the temporary database.
                   95259:   ** If sqlite3SrcListLookup() returns 0, indicating the table does not
                   95260:   ** exist, the error is caught by the block below.
                   95261:   */
                   95262:   if( !pTableName || db->mallocFailed ){
                   95263:     goto trigger_cleanup;
                   95264:   }
                   95265:   pTab = sqlite3SrcListLookup(pParse, pTableName);
                   95266:   if( db->init.busy==0 && pName2->n==0 && pTab
                   95267:         && pTab->pSchema==db->aDb[1].pSchema ){
                   95268:     iDb = 1;
                   95269:   }
                   95270: 
                   95271:   /* Ensure the table name matches database name and that the table exists */
                   95272:   if( db->mallocFailed ) goto trigger_cleanup;
                   95273:   assert( pTableName->nSrc==1 );
                   95274:   if( sqlite3FixInit(&sFix, pParse, iDb, "trigger", pName) && 
                   95275:       sqlite3FixSrcList(&sFix, pTableName) ){
                   95276:     goto trigger_cleanup;
                   95277:   }
                   95278:   pTab = sqlite3SrcListLookup(pParse, pTableName);
                   95279:   if( !pTab ){
                   95280:     /* The table does not exist. */
                   95281:     if( db->init.iDb==1 ){
                   95282:       /* Ticket #3810.
                   95283:       ** Normally, whenever a table is dropped, all associated triggers are
                   95284:       ** dropped too.  But if a TEMP trigger is created on a non-TEMP table
                   95285:       ** and the table is dropped by a different database connection, the
                   95286:       ** trigger is not visible to the database connection that does the
                   95287:       ** drop so the trigger cannot be dropped.  This results in an
                   95288:       ** "orphaned trigger" - a trigger whose associated table is missing.
                   95289:       */
                   95290:       db->init.orphanTrigger = 1;
                   95291:     }
                   95292:     goto trigger_cleanup;
                   95293:   }
                   95294:   if( IsVirtual(pTab) ){
                   95295:     sqlite3ErrorMsg(pParse, "cannot create triggers on virtual tables");
                   95296:     goto trigger_cleanup;
                   95297:   }
                   95298: 
                   95299:   /* Check that the trigger name is not reserved and that no trigger of the
                   95300:   ** specified name exists */
                   95301:   zName = sqlite3NameFromToken(db, pName);
                   95302:   if( !zName || SQLITE_OK!=sqlite3CheckObjectName(pParse, zName) ){
                   95303:     goto trigger_cleanup;
                   95304:   }
                   95305:   assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
                   95306:   if( sqlite3HashFind(&(db->aDb[iDb].pSchema->trigHash),
                   95307:                       zName, sqlite3Strlen30(zName)) ){
                   95308:     if( !noErr ){
                   95309:       sqlite3ErrorMsg(pParse, "trigger %T already exists", pName);
                   95310:     }else{
                   95311:       assert( !db->init.busy );
                   95312:       sqlite3CodeVerifySchema(pParse, iDb);
                   95313:     }
                   95314:     goto trigger_cleanup;
                   95315:   }
                   95316: 
                   95317:   /* Do not create a trigger on a system table */
                   95318:   if( sqlite3StrNICmp(pTab->zName, "sqlite_", 7)==0 ){
                   95319:     sqlite3ErrorMsg(pParse, "cannot create trigger on system table");
                   95320:     pParse->nErr++;
                   95321:     goto trigger_cleanup;
                   95322:   }
                   95323: 
                   95324:   /* INSTEAD of triggers are only for views and views only support INSTEAD
                   95325:   ** of triggers.
                   95326:   */
                   95327:   if( pTab->pSelect && tr_tm!=TK_INSTEAD ){
                   95328:     sqlite3ErrorMsg(pParse, "cannot create %s trigger on view: %S", 
                   95329:         (tr_tm == TK_BEFORE)?"BEFORE":"AFTER", pTableName, 0);
                   95330:     goto trigger_cleanup;
                   95331:   }
                   95332:   if( !pTab->pSelect && tr_tm==TK_INSTEAD ){
                   95333:     sqlite3ErrorMsg(pParse, "cannot create INSTEAD OF"
                   95334:         " trigger on table: %S", pTableName, 0);
                   95335:     goto trigger_cleanup;
                   95336:   }
                   95337:   iTabDb = sqlite3SchemaToIndex(db, pTab->pSchema);
                   95338: 
                   95339: #ifndef SQLITE_OMIT_AUTHORIZATION
                   95340:   {
                   95341:     int code = SQLITE_CREATE_TRIGGER;
                   95342:     const char *zDb = db->aDb[iTabDb].zName;
                   95343:     const char *zDbTrig = isTemp ? db->aDb[1].zName : zDb;
                   95344:     if( iTabDb==1 || isTemp ) code = SQLITE_CREATE_TEMP_TRIGGER;
                   95345:     if( sqlite3AuthCheck(pParse, code, zName, pTab->zName, zDbTrig) ){
                   95346:       goto trigger_cleanup;
                   95347:     }
                   95348:     if( sqlite3AuthCheck(pParse, SQLITE_INSERT, SCHEMA_TABLE(iTabDb),0,zDb)){
                   95349:       goto trigger_cleanup;
                   95350:     }
                   95351:   }
                   95352: #endif
                   95353: 
                   95354:   /* INSTEAD OF triggers can only appear on views and BEFORE triggers
                   95355:   ** cannot appear on views.  So we might as well translate every
                   95356:   ** INSTEAD OF trigger into a BEFORE trigger.  It simplifies code
                   95357:   ** elsewhere.
                   95358:   */
                   95359:   if (tr_tm == TK_INSTEAD){
                   95360:     tr_tm = TK_BEFORE;
                   95361:   }
                   95362: 
                   95363:   /* Build the Trigger object */
                   95364:   pTrigger = (Trigger*)sqlite3DbMallocZero(db, sizeof(Trigger));
                   95365:   if( pTrigger==0 ) goto trigger_cleanup;
                   95366:   pTrigger->zName = zName;
                   95367:   zName = 0;
                   95368:   pTrigger->table = sqlite3DbStrDup(db, pTableName->a[0].zName);
                   95369:   pTrigger->pSchema = db->aDb[iDb].pSchema;
                   95370:   pTrigger->pTabSchema = pTab->pSchema;
                   95371:   pTrigger->op = (u8)op;
                   95372:   pTrigger->tr_tm = tr_tm==TK_BEFORE ? TRIGGER_BEFORE : TRIGGER_AFTER;
                   95373:   pTrigger->pWhen = sqlite3ExprDup(db, pWhen, EXPRDUP_REDUCE);
                   95374:   pTrigger->pColumns = sqlite3IdListDup(db, pColumns);
                   95375:   assert( pParse->pNewTrigger==0 );
                   95376:   pParse->pNewTrigger = pTrigger;
                   95377: 
                   95378: trigger_cleanup:
                   95379:   sqlite3DbFree(db, zName);
                   95380:   sqlite3SrcListDelete(db, pTableName);
                   95381:   sqlite3IdListDelete(db, pColumns);
                   95382:   sqlite3ExprDelete(db, pWhen);
                   95383:   if( !pParse->pNewTrigger ){
                   95384:     sqlite3DeleteTrigger(db, pTrigger);
                   95385:   }else{
                   95386:     assert( pParse->pNewTrigger==pTrigger );
                   95387:   }
                   95388: }
                   95389: 
                   95390: /*
                   95391: ** This routine is called after all of the trigger actions have been parsed
                   95392: ** in order to complete the process of building the trigger.
                   95393: */
                   95394: SQLITE_PRIVATE void sqlite3FinishTrigger(
                   95395:   Parse *pParse,          /* Parser context */
                   95396:   TriggerStep *pStepList, /* The triggered program */
                   95397:   Token *pAll             /* Token that describes the complete CREATE TRIGGER */
                   95398: ){
                   95399:   Trigger *pTrig = pParse->pNewTrigger;   /* Trigger being finished */
                   95400:   char *zName;                            /* Name of trigger */
                   95401:   sqlite3 *db = pParse->db;               /* The database */
                   95402:   DbFixer sFix;                           /* Fixer object */
                   95403:   int iDb;                                /* Database containing the trigger */
                   95404:   Token nameToken;                        /* Trigger name for error reporting */
                   95405: 
                   95406:   pParse->pNewTrigger = 0;
                   95407:   if( NEVER(pParse->nErr) || !pTrig ) goto triggerfinish_cleanup;
                   95408:   zName = pTrig->zName;
                   95409:   iDb = sqlite3SchemaToIndex(pParse->db, pTrig->pSchema);
                   95410:   pTrig->step_list = pStepList;
                   95411:   while( pStepList ){
                   95412:     pStepList->pTrig = pTrig;
                   95413:     pStepList = pStepList->pNext;
                   95414:   }
                   95415:   nameToken.z = pTrig->zName;
                   95416:   nameToken.n = sqlite3Strlen30(nameToken.z);
                   95417:   if( sqlite3FixInit(&sFix, pParse, iDb, "trigger", &nameToken) 
                   95418:           && sqlite3FixTriggerStep(&sFix, pTrig->step_list) ){
                   95419:     goto triggerfinish_cleanup;
                   95420:   }
                   95421: 
                   95422:   /* if we are not initializing,
                   95423:   ** build the sqlite_master entry
                   95424:   */
                   95425:   if( !db->init.busy ){
                   95426:     Vdbe *v;
                   95427:     char *z;
                   95428: 
                   95429:     /* Make an entry in the sqlite_master table */
                   95430:     v = sqlite3GetVdbe(pParse);
                   95431:     if( v==0 ) goto triggerfinish_cleanup;
                   95432:     sqlite3BeginWriteOperation(pParse, 0, iDb);
                   95433:     z = sqlite3DbStrNDup(db, (char*)pAll->z, pAll->n);
                   95434:     sqlite3NestedParse(pParse,
                   95435:        "INSERT INTO %Q.%s VALUES('trigger',%Q,%Q,0,'CREATE TRIGGER %q')",
                   95436:        db->aDb[iDb].zName, SCHEMA_TABLE(iDb), zName,
                   95437:        pTrig->table, z);
                   95438:     sqlite3DbFree(db, z);
                   95439:     sqlite3ChangeCookie(pParse, iDb);
                   95440:     sqlite3VdbeAddParseSchemaOp(v, iDb,
                   95441:         sqlite3MPrintf(db, "type='trigger' AND name='%q'", zName));
                   95442:   }
                   95443: 
                   95444:   if( db->init.busy ){
                   95445:     Trigger *pLink = pTrig;
                   95446:     Hash *pHash = &db->aDb[iDb].pSchema->trigHash;
                   95447:     assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
                   95448:     pTrig = sqlite3HashInsert(pHash, zName, sqlite3Strlen30(zName), pTrig);
                   95449:     if( pTrig ){
                   95450:       db->mallocFailed = 1;
                   95451:     }else if( pLink->pSchema==pLink->pTabSchema ){
                   95452:       Table *pTab;
                   95453:       int n = sqlite3Strlen30(pLink->table);
                   95454:       pTab = sqlite3HashFind(&pLink->pTabSchema->tblHash, pLink->table, n);
                   95455:       assert( pTab!=0 );
                   95456:       pLink->pNext = pTab->pTrigger;
                   95457:       pTab->pTrigger = pLink;
                   95458:     }
                   95459:   }
                   95460: 
                   95461: triggerfinish_cleanup:
                   95462:   sqlite3DeleteTrigger(db, pTrig);
                   95463:   assert( !pParse->pNewTrigger );
                   95464:   sqlite3DeleteTriggerStep(db, pStepList);
                   95465: }
                   95466: 
                   95467: /*
                   95468: ** Turn a SELECT statement (that the pSelect parameter points to) into
                   95469: ** a trigger step.  Return a pointer to a TriggerStep structure.
                   95470: **
                   95471: ** The parser calls this routine when it finds a SELECT statement in
                   95472: ** body of a TRIGGER.  
                   95473: */
                   95474: SQLITE_PRIVATE TriggerStep *sqlite3TriggerSelectStep(sqlite3 *db, Select *pSelect){
                   95475:   TriggerStep *pTriggerStep = sqlite3DbMallocZero(db, sizeof(TriggerStep));
                   95476:   if( pTriggerStep==0 ) {
                   95477:     sqlite3SelectDelete(db, pSelect);
                   95478:     return 0;
                   95479:   }
                   95480:   pTriggerStep->op = TK_SELECT;
                   95481:   pTriggerStep->pSelect = pSelect;
                   95482:   pTriggerStep->orconf = OE_Default;
                   95483:   return pTriggerStep;
                   95484: }
                   95485: 
                   95486: /*
                   95487: ** Allocate space to hold a new trigger step.  The allocated space
                   95488: ** holds both the TriggerStep object and the TriggerStep.target.z string.
                   95489: **
                   95490: ** If an OOM error occurs, NULL is returned and db->mallocFailed is set.
                   95491: */
                   95492: static TriggerStep *triggerStepAllocate(
                   95493:   sqlite3 *db,                /* Database connection */
                   95494:   u8 op,                      /* Trigger opcode */
                   95495:   Token *pName                /* The target name */
                   95496: ){
                   95497:   TriggerStep *pTriggerStep;
                   95498: 
                   95499:   pTriggerStep = sqlite3DbMallocZero(db, sizeof(TriggerStep) + pName->n);
                   95500:   if( pTriggerStep ){
                   95501:     char *z = (char*)&pTriggerStep[1];
                   95502:     memcpy(z, pName->z, pName->n);
                   95503:     pTriggerStep->target.z = z;
                   95504:     pTriggerStep->target.n = pName->n;
                   95505:     pTriggerStep->op = op;
                   95506:   }
                   95507:   return pTriggerStep;
                   95508: }
                   95509: 
                   95510: /*
                   95511: ** Build a trigger step out of an INSERT statement.  Return a pointer
                   95512: ** to the new trigger step.
                   95513: **
                   95514: ** The parser calls this routine when it sees an INSERT inside the
                   95515: ** body of a trigger.
                   95516: */
                   95517: SQLITE_PRIVATE TriggerStep *sqlite3TriggerInsertStep(
                   95518:   sqlite3 *db,        /* The database connection */
                   95519:   Token *pTableName,  /* Name of the table into which we insert */
                   95520:   IdList *pColumn,    /* List of columns in pTableName to insert into */
                   95521:   ExprList *pEList,   /* The VALUE clause: a list of values to be inserted */
                   95522:   Select *pSelect,    /* A SELECT statement that supplies values */
                   95523:   u8 orconf           /* The conflict algorithm (OE_Abort, OE_Replace, etc.) */
                   95524: ){
                   95525:   TriggerStep *pTriggerStep;
                   95526: 
                   95527:   assert(pEList == 0 || pSelect == 0);
                   95528:   assert(pEList != 0 || pSelect != 0 || db->mallocFailed);
                   95529: 
                   95530:   pTriggerStep = triggerStepAllocate(db, TK_INSERT, pTableName);
                   95531:   if( pTriggerStep ){
                   95532:     pTriggerStep->pSelect = sqlite3SelectDup(db, pSelect, EXPRDUP_REDUCE);
                   95533:     pTriggerStep->pIdList = pColumn;
                   95534:     pTriggerStep->pExprList = sqlite3ExprListDup(db, pEList, EXPRDUP_REDUCE);
                   95535:     pTriggerStep->orconf = orconf;
                   95536:   }else{
                   95537:     sqlite3IdListDelete(db, pColumn);
                   95538:   }
                   95539:   sqlite3ExprListDelete(db, pEList);
                   95540:   sqlite3SelectDelete(db, pSelect);
                   95541: 
                   95542:   return pTriggerStep;
                   95543: }
                   95544: 
                   95545: /*
                   95546: ** Construct a trigger step that implements an UPDATE statement and return
                   95547: ** a pointer to that trigger step.  The parser calls this routine when it
                   95548: ** sees an UPDATE statement inside the body of a CREATE TRIGGER.
                   95549: */
                   95550: SQLITE_PRIVATE TriggerStep *sqlite3TriggerUpdateStep(
                   95551:   sqlite3 *db,         /* The database connection */
                   95552:   Token *pTableName,   /* Name of the table to be updated */
                   95553:   ExprList *pEList,    /* The SET clause: list of column and new values */
                   95554:   Expr *pWhere,        /* The WHERE clause */
                   95555:   u8 orconf            /* The conflict algorithm. (OE_Abort, OE_Ignore, etc) */
                   95556: ){
                   95557:   TriggerStep *pTriggerStep;
                   95558: 
                   95559:   pTriggerStep = triggerStepAllocate(db, TK_UPDATE, pTableName);
                   95560:   if( pTriggerStep ){
                   95561:     pTriggerStep->pExprList = sqlite3ExprListDup(db, pEList, EXPRDUP_REDUCE);
                   95562:     pTriggerStep->pWhere = sqlite3ExprDup(db, pWhere, EXPRDUP_REDUCE);
                   95563:     pTriggerStep->orconf = orconf;
                   95564:   }
                   95565:   sqlite3ExprListDelete(db, pEList);
                   95566:   sqlite3ExprDelete(db, pWhere);
                   95567:   return pTriggerStep;
                   95568: }
                   95569: 
                   95570: /*
                   95571: ** Construct a trigger step that implements a DELETE statement and return
                   95572: ** a pointer to that trigger step.  The parser calls this routine when it
                   95573: ** sees a DELETE statement inside the body of a CREATE TRIGGER.
                   95574: */
                   95575: SQLITE_PRIVATE TriggerStep *sqlite3TriggerDeleteStep(
                   95576:   sqlite3 *db,            /* Database connection */
                   95577:   Token *pTableName,      /* The table from which rows are deleted */
                   95578:   Expr *pWhere            /* The WHERE clause */
                   95579: ){
                   95580:   TriggerStep *pTriggerStep;
                   95581: 
                   95582:   pTriggerStep = triggerStepAllocate(db, TK_DELETE, pTableName);
                   95583:   if( pTriggerStep ){
                   95584:     pTriggerStep->pWhere = sqlite3ExprDup(db, pWhere, EXPRDUP_REDUCE);
                   95585:     pTriggerStep->orconf = OE_Default;
                   95586:   }
                   95587:   sqlite3ExprDelete(db, pWhere);
                   95588:   return pTriggerStep;
                   95589: }
                   95590: 
                   95591: /* 
                   95592: ** Recursively delete a Trigger structure
                   95593: */
                   95594: SQLITE_PRIVATE void sqlite3DeleteTrigger(sqlite3 *db, Trigger *pTrigger){
                   95595:   if( pTrigger==0 ) return;
                   95596:   sqlite3DeleteTriggerStep(db, pTrigger->step_list);
                   95597:   sqlite3DbFree(db, pTrigger->zName);
                   95598:   sqlite3DbFree(db, pTrigger->table);
                   95599:   sqlite3ExprDelete(db, pTrigger->pWhen);
                   95600:   sqlite3IdListDelete(db, pTrigger->pColumns);
                   95601:   sqlite3DbFree(db, pTrigger);
                   95602: }
                   95603: 
                   95604: /*
                   95605: ** This function is called to drop a trigger from the database schema. 
                   95606: **
                   95607: ** This may be called directly from the parser and therefore identifies
                   95608: ** the trigger by name.  The sqlite3DropTriggerPtr() routine does the
                   95609: ** same job as this routine except it takes a pointer to the trigger
                   95610: ** instead of the trigger name.
                   95611: **/
                   95612: SQLITE_PRIVATE void sqlite3DropTrigger(Parse *pParse, SrcList *pName, int noErr){
                   95613:   Trigger *pTrigger = 0;
                   95614:   int i;
                   95615:   const char *zDb;
                   95616:   const char *zName;
                   95617:   int nName;
                   95618:   sqlite3 *db = pParse->db;
                   95619: 
                   95620:   if( db->mallocFailed ) goto drop_trigger_cleanup;
                   95621:   if( SQLITE_OK!=sqlite3ReadSchema(pParse) ){
                   95622:     goto drop_trigger_cleanup;
                   95623:   }
                   95624: 
                   95625:   assert( pName->nSrc==1 );
                   95626:   zDb = pName->a[0].zDatabase;
                   95627:   zName = pName->a[0].zName;
                   95628:   nName = sqlite3Strlen30(zName);
                   95629:   assert( zDb!=0 || sqlite3BtreeHoldsAllMutexes(db) );
                   95630:   for(i=OMIT_TEMPDB; i<db->nDb; i++){
                   95631:     int j = (i<2) ? i^1 : i;  /* Search TEMP before MAIN */
                   95632:     if( zDb && sqlite3StrICmp(db->aDb[j].zName, zDb) ) continue;
                   95633:     assert( sqlite3SchemaMutexHeld(db, j, 0) );
                   95634:     pTrigger = sqlite3HashFind(&(db->aDb[j].pSchema->trigHash), zName, nName);
                   95635:     if( pTrigger ) break;
                   95636:   }
                   95637:   if( !pTrigger ){
                   95638:     if( !noErr ){
                   95639:       sqlite3ErrorMsg(pParse, "no such trigger: %S", pName, 0);
                   95640:     }else{
                   95641:       sqlite3CodeVerifyNamedSchema(pParse, zDb);
                   95642:     }
                   95643:     pParse->checkSchema = 1;
                   95644:     goto drop_trigger_cleanup;
                   95645:   }
                   95646:   sqlite3DropTriggerPtr(pParse, pTrigger);
                   95647: 
                   95648: drop_trigger_cleanup:
                   95649:   sqlite3SrcListDelete(db, pName);
                   95650: }
                   95651: 
                   95652: /*
                   95653: ** Return a pointer to the Table structure for the table that a trigger
                   95654: ** is set on.
                   95655: */
                   95656: static Table *tableOfTrigger(Trigger *pTrigger){
                   95657:   int n = sqlite3Strlen30(pTrigger->table);
                   95658:   return sqlite3HashFind(&pTrigger->pTabSchema->tblHash, pTrigger->table, n);
                   95659: }
                   95660: 
                   95661: 
                   95662: /*
                   95663: ** Drop a trigger given a pointer to that trigger. 
                   95664: */
                   95665: SQLITE_PRIVATE void sqlite3DropTriggerPtr(Parse *pParse, Trigger *pTrigger){
                   95666:   Table   *pTable;
                   95667:   Vdbe *v;
                   95668:   sqlite3 *db = pParse->db;
                   95669:   int iDb;
                   95670: 
                   95671:   iDb = sqlite3SchemaToIndex(pParse->db, pTrigger->pSchema);
                   95672:   assert( iDb>=0 && iDb<db->nDb );
                   95673:   pTable = tableOfTrigger(pTrigger);
                   95674:   assert( pTable );
                   95675:   assert( pTable->pSchema==pTrigger->pSchema || iDb==1 );
                   95676: #ifndef SQLITE_OMIT_AUTHORIZATION
                   95677:   {
                   95678:     int code = SQLITE_DROP_TRIGGER;
                   95679:     const char *zDb = db->aDb[iDb].zName;
                   95680:     const char *zTab = SCHEMA_TABLE(iDb);
                   95681:     if( iDb==1 ) code = SQLITE_DROP_TEMP_TRIGGER;
                   95682:     if( sqlite3AuthCheck(pParse, code, pTrigger->zName, pTable->zName, zDb) ||
                   95683:       sqlite3AuthCheck(pParse, SQLITE_DELETE, zTab, 0, zDb) ){
                   95684:       return;
                   95685:     }
                   95686:   }
                   95687: #endif
                   95688: 
                   95689:   /* Generate code to destroy the database record of the trigger.
                   95690:   */
                   95691:   assert( pTable!=0 );
                   95692:   if( (v = sqlite3GetVdbe(pParse))!=0 ){
                   95693:     int base;
                   95694:     static const VdbeOpList dropTrigger[] = {
                   95695:       { OP_Rewind,     0, ADDR(9),  0},
                   95696:       { OP_String8,    0, 1,        0}, /* 1 */
                   95697:       { OP_Column,     0, 1,        2},
                   95698:       { OP_Ne,         2, ADDR(8),  1},
                   95699:       { OP_String8,    0, 1,        0}, /* 4: "trigger" */
                   95700:       { OP_Column,     0, 0,        2},
                   95701:       { OP_Ne,         2, ADDR(8),  1},
                   95702:       { OP_Delete,     0, 0,        0},
                   95703:       { OP_Next,       0, ADDR(1),  0}, /* 8 */
                   95704:     };
                   95705: 
                   95706:     sqlite3BeginWriteOperation(pParse, 0, iDb);
                   95707:     sqlite3OpenMasterTable(pParse, iDb);
                   95708:     base = sqlite3VdbeAddOpList(v,  ArraySize(dropTrigger), dropTrigger);
                   95709:     sqlite3VdbeChangeP4(v, base+1, pTrigger->zName, P4_TRANSIENT);
                   95710:     sqlite3VdbeChangeP4(v, base+4, "trigger", P4_STATIC);
                   95711:     sqlite3ChangeCookie(pParse, iDb);
                   95712:     sqlite3VdbeAddOp2(v, OP_Close, 0, 0);
                   95713:     sqlite3VdbeAddOp4(v, OP_DropTrigger, iDb, 0, 0, pTrigger->zName, 0);
                   95714:     if( pParse->nMem<3 ){
                   95715:       pParse->nMem = 3;
                   95716:     }
                   95717:   }
                   95718: }
                   95719: 
                   95720: /*
                   95721: ** Remove a trigger from the hash tables of the sqlite* pointer.
                   95722: */
                   95723: SQLITE_PRIVATE void sqlite3UnlinkAndDeleteTrigger(sqlite3 *db, int iDb, const char *zName){
                   95724:   Trigger *pTrigger;
                   95725:   Hash *pHash;
                   95726: 
                   95727:   assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
                   95728:   pHash = &(db->aDb[iDb].pSchema->trigHash);
                   95729:   pTrigger = sqlite3HashInsert(pHash, zName, sqlite3Strlen30(zName), 0);
                   95730:   if( ALWAYS(pTrigger) ){
                   95731:     if( pTrigger->pSchema==pTrigger->pTabSchema ){
                   95732:       Table *pTab = tableOfTrigger(pTrigger);
                   95733:       Trigger **pp;
                   95734:       for(pp=&pTab->pTrigger; *pp!=pTrigger; pp=&((*pp)->pNext));
                   95735:       *pp = (*pp)->pNext;
                   95736:     }
                   95737:     sqlite3DeleteTrigger(db, pTrigger);
                   95738:     db->flags |= SQLITE_InternChanges;
                   95739:   }
                   95740: }
                   95741: 
                   95742: /*
                   95743: ** pEList is the SET clause of an UPDATE statement.  Each entry
                   95744: ** in pEList is of the format <id>=<expr>.  If any of the entries
                   95745: ** in pEList have an <id> which matches an identifier in pIdList,
                   95746: ** then return TRUE.  If pIdList==NULL, then it is considered a
                   95747: ** wildcard that matches anything.  Likewise if pEList==NULL then
                   95748: ** it matches anything so always return true.  Return false only
                   95749: ** if there is no match.
                   95750: */
                   95751: static int checkColumnOverlap(IdList *pIdList, ExprList *pEList){
                   95752:   int e;
                   95753:   if( pIdList==0 || NEVER(pEList==0) ) return 1;
                   95754:   for(e=0; e<pEList->nExpr; e++){
                   95755:     if( sqlite3IdListIndex(pIdList, pEList->a[e].zName)>=0 ) return 1;
                   95756:   }
                   95757:   return 0; 
                   95758: }
                   95759: 
                   95760: /*
                   95761: ** Return a list of all triggers on table pTab if there exists at least
                   95762: ** one trigger that must be fired when an operation of type 'op' is 
                   95763: ** performed on the table, and, if that operation is an UPDATE, if at
                   95764: ** least one of the columns in pChanges is being modified.
                   95765: */
                   95766: SQLITE_PRIVATE Trigger *sqlite3TriggersExist(
                   95767:   Parse *pParse,          /* Parse context */
                   95768:   Table *pTab,            /* The table the contains the triggers */
                   95769:   int op,                 /* one of TK_DELETE, TK_INSERT, TK_UPDATE */
                   95770:   ExprList *pChanges,     /* Columns that change in an UPDATE statement */
                   95771:   int *pMask              /* OUT: Mask of TRIGGER_BEFORE|TRIGGER_AFTER */
                   95772: ){
                   95773:   int mask = 0;
                   95774:   Trigger *pList = 0;
                   95775:   Trigger *p;
                   95776: 
                   95777:   if( (pParse->db->flags & SQLITE_EnableTrigger)!=0 ){
                   95778:     pList = sqlite3TriggerList(pParse, pTab);
                   95779:   }
                   95780:   assert( pList==0 || IsVirtual(pTab)==0 );
                   95781:   for(p=pList; p; p=p->pNext){
                   95782:     if( p->op==op && checkColumnOverlap(p->pColumns, pChanges) ){
                   95783:       mask |= p->tr_tm;
                   95784:     }
                   95785:   }
                   95786:   if( pMask ){
                   95787:     *pMask = mask;
                   95788:   }
                   95789:   return (mask ? pList : 0);
                   95790: }
                   95791: 
                   95792: /*
                   95793: ** Convert the pStep->target token into a SrcList and return a pointer
                   95794: ** to that SrcList.
                   95795: **
                   95796: ** This routine adds a specific database name, if needed, to the target when
                   95797: ** forming the SrcList.  This prevents a trigger in one database from
                   95798: ** referring to a target in another database.  An exception is when the
                   95799: ** trigger is in TEMP in which case it can refer to any other database it
                   95800: ** wants.
                   95801: */
                   95802: static SrcList *targetSrcList(
                   95803:   Parse *pParse,       /* The parsing context */
                   95804:   TriggerStep *pStep   /* The trigger containing the target token */
                   95805: ){
                   95806:   int iDb;             /* Index of the database to use */
                   95807:   SrcList *pSrc;       /* SrcList to be returned */
                   95808: 
                   95809:   pSrc = sqlite3SrcListAppend(pParse->db, 0, &pStep->target, 0);
                   95810:   if( pSrc ){
                   95811:     assert( pSrc->nSrc>0 );
                   95812:     assert( pSrc->a!=0 );
                   95813:     iDb = sqlite3SchemaToIndex(pParse->db, pStep->pTrig->pSchema);
                   95814:     if( iDb==0 || iDb>=2 ){
                   95815:       sqlite3 *db = pParse->db;
                   95816:       assert( iDb<pParse->db->nDb );
                   95817:       pSrc->a[pSrc->nSrc-1].zDatabase = sqlite3DbStrDup(db, db->aDb[iDb].zName);
                   95818:     }
                   95819:   }
                   95820:   return pSrc;
                   95821: }
                   95822: 
                   95823: /*
                   95824: ** Generate VDBE code for the statements inside the body of a single 
                   95825: ** trigger.
                   95826: */
                   95827: static int codeTriggerProgram(
                   95828:   Parse *pParse,            /* The parser context */
                   95829:   TriggerStep *pStepList,   /* List of statements inside the trigger body */
                   95830:   int orconf                /* Conflict algorithm. (OE_Abort, etc) */  
                   95831: ){
                   95832:   TriggerStep *pStep;
                   95833:   Vdbe *v = pParse->pVdbe;
                   95834:   sqlite3 *db = pParse->db;
                   95835: 
                   95836:   assert( pParse->pTriggerTab && pParse->pToplevel );
                   95837:   assert( pStepList );
                   95838:   assert( v!=0 );
                   95839:   for(pStep=pStepList; pStep; pStep=pStep->pNext){
                   95840:     /* Figure out the ON CONFLICT policy that will be used for this step
                   95841:     ** of the trigger program. If the statement that caused this trigger
                   95842:     ** to fire had an explicit ON CONFLICT, then use it. Otherwise, use
                   95843:     ** the ON CONFLICT policy that was specified as part of the trigger
                   95844:     ** step statement. Example:
                   95845:     **
                   95846:     **   CREATE TRIGGER AFTER INSERT ON t1 BEGIN;
                   95847:     **     INSERT OR REPLACE INTO t2 VALUES(new.a, new.b);
                   95848:     **   END;
                   95849:     **
                   95850:     **   INSERT INTO t1 ... ;            -- insert into t2 uses REPLACE policy
                   95851:     **   INSERT OR IGNORE INTO t1 ... ;  -- insert into t2 uses IGNORE policy
                   95852:     */
                   95853:     pParse->eOrconf = (orconf==OE_Default)?pStep->orconf:(u8)orconf;
                   95854: 
                   95855:     switch( pStep->op ){
                   95856:       case TK_UPDATE: {
                   95857:         sqlite3Update(pParse, 
                   95858:           targetSrcList(pParse, pStep),
                   95859:           sqlite3ExprListDup(db, pStep->pExprList, 0), 
                   95860:           sqlite3ExprDup(db, pStep->pWhere, 0), 
                   95861:           pParse->eOrconf
                   95862:         );
                   95863:         break;
                   95864:       }
                   95865:       case TK_INSERT: {
                   95866:         sqlite3Insert(pParse, 
                   95867:           targetSrcList(pParse, pStep),
                   95868:           sqlite3ExprListDup(db, pStep->pExprList, 0), 
                   95869:           sqlite3SelectDup(db, pStep->pSelect, 0), 
                   95870:           sqlite3IdListDup(db, pStep->pIdList), 
                   95871:           pParse->eOrconf
                   95872:         );
                   95873:         break;
                   95874:       }
                   95875:       case TK_DELETE: {
                   95876:         sqlite3DeleteFrom(pParse, 
                   95877:           targetSrcList(pParse, pStep),
                   95878:           sqlite3ExprDup(db, pStep->pWhere, 0)
                   95879:         );
                   95880:         break;
                   95881:       }
                   95882:       default: assert( pStep->op==TK_SELECT ); {
                   95883:         SelectDest sDest;
                   95884:         Select *pSelect = sqlite3SelectDup(db, pStep->pSelect, 0);
                   95885:         sqlite3SelectDestInit(&sDest, SRT_Discard, 0);
                   95886:         sqlite3Select(pParse, pSelect, &sDest);
                   95887:         sqlite3SelectDelete(db, pSelect);
                   95888:         break;
                   95889:       }
                   95890:     } 
                   95891:     if( pStep->op!=TK_SELECT ){
                   95892:       sqlite3VdbeAddOp0(v, OP_ResetCount);
                   95893:     }
                   95894:   }
                   95895: 
                   95896:   return 0;
                   95897: }
                   95898: 
                   95899: #ifdef SQLITE_DEBUG
                   95900: /*
                   95901: ** This function is used to add VdbeComment() annotations to a VDBE
                   95902: ** program. It is not used in production code, only for debugging.
                   95903: */
                   95904: static const char *onErrorText(int onError){
                   95905:   switch( onError ){
                   95906:     case OE_Abort:    return "abort";
                   95907:     case OE_Rollback: return "rollback";
                   95908:     case OE_Fail:     return "fail";
                   95909:     case OE_Replace:  return "replace";
                   95910:     case OE_Ignore:   return "ignore";
                   95911:     case OE_Default:  return "default";
                   95912:   }
                   95913:   return "n/a";
                   95914: }
                   95915: #endif
                   95916: 
                   95917: /*
                   95918: ** Parse context structure pFrom has just been used to create a sub-vdbe
                   95919: ** (trigger program). If an error has occurred, transfer error information
                   95920: ** from pFrom to pTo.
                   95921: */
                   95922: static void transferParseError(Parse *pTo, Parse *pFrom){
                   95923:   assert( pFrom->zErrMsg==0 || pFrom->nErr );
                   95924:   assert( pTo->zErrMsg==0 || pTo->nErr );
                   95925:   if( pTo->nErr==0 ){
                   95926:     pTo->zErrMsg = pFrom->zErrMsg;
                   95927:     pTo->nErr = pFrom->nErr;
                   95928:   }else{
                   95929:     sqlite3DbFree(pFrom->db, pFrom->zErrMsg);
                   95930:   }
                   95931: }
                   95932: 
                   95933: /*
                   95934: ** Create and populate a new TriggerPrg object with a sub-program 
                   95935: ** implementing trigger pTrigger with ON CONFLICT policy orconf.
                   95936: */
                   95937: static TriggerPrg *codeRowTrigger(
                   95938:   Parse *pParse,       /* Current parse context */
                   95939:   Trigger *pTrigger,   /* Trigger to code */
                   95940:   Table *pTab,         /* The table pTrigger is attached to */
                   95941:   int orconf           /* ON CONFLICT policy to code trigger program with */
                   95942: ){
                   95943:   Parse *pTop = sqlite3ParseToplevel(pParse);
                   95944:   sqlite3 *db = pParse->db;   /* Database handle */
                   95945:   TriggerPrg *pPrg;           /* Value to return */
                   95946:   Expr *pWhen = 0;            /* Duplicate of trigger WHEN expression */
                   95947:   Vdbe *v;                    /* Temporary VM */
                   95948:   NameContext sNC;            /* Name context for sub-vdbe */
                   95949:   SubProgram *pProgram = 0;   /* Sub-vdbe for trigger program */
                   95950:   Parse *pSubParse;           /* Parse context for sub-vdbe */
                   95951:   int iEndTrigger = 0;        /* Label to jump to if WHEN is false */
                   95952: 
                   95953:   assert( pTrigger->zName==0 || pTab==tableOfTrigger(pTrigger) );
                   95954:   assert( pTop->pVdbe );
                   95955: 
                   95956:   /* Allocate the TriggerPrg and SubProgram objects. To ensure that they
                   95957:   ** are freed if an error occurs, link them into the Parse.pTriggerPrg 
                   95958:   ** list of the top-level Parse object sooner rather than later.  */
                   95959:   pPrg = sqlite3DbMallocZero(db, sizeof(TriggerPrg));
                   95960:   if( !pPrg ) return 0;
                   95961:   pPrg->pNext = pTop->pTriggerPrg;
                   95962:   pTop->pTriggerPrg = pPrg;
                   95963:   pPrg->pProgram = pProgram = sqlite3DbMallocZero(db, sizeof(SubProgram));
                   95964:   if( !pProgram ) return 0;
                   95965:   sqlite3VdbeLinkSubProgram(pTop->pVdbe, pProgram);
                   95966:   pPrg->pTrigger = pTrigger;
                   95967:   pPrg->orconf = orconf;
                   95968:   pPrg->aColmask[0] = 0xffffffff;
                   95969:   pPrg->aColmask[1] = 0xffffffff;
                   95970: 
                   95971:   /* Allocate and populate a new Parse context to use for coding the 
                   95972:   ** trigger sub-program.  */
                   95973:   pSubParse = sqlite3StackAllocZero(db, sizeof(Parse));
                   95974:   if( !pSubParse ) return 0;
                   95975:   memset(&sNC, 0, sizeof(sNC));
                   95976:   sNC.pParse = pSubParse;
                   95977:   pSubParse->db = db;
                   95978:   pSubParse->pTriggerTab = pTab;
                   95979:   pSubParse->pToplevel = pTop;
                   95980:   pSubParse->zAuthContext = pTrigger->zName;
                   95981:   pSubParse->eTriggerOp = pTrigger->op;
                   95982:   pSubParse->nQueryLoop = pParse->nQueryLoop;
                   95983: 
                   95984:   v = sqlite3GetVdbe(pSubParse);
                   95985:   if( v ){
                   95986:     VdbeComment((v, "Start: %s.%s (%s %s%s%s ON %s)", 
                   95987:       pTrigger->zName, onErrorText(orconf),
                   95988:       (pTrigger->tr_tm==TRIGGER_BEFORE ? "BEFORE" : "AFTER"),
                   95989:         (pTrigger->op==TK_UPDATE ? "UPDATE" : ""),
                   95990:         (pTrigger->op==TK_INSERT ? "INSERT" : ""),
                   95991:         (pTrigger->op==TK_DELETE ? "DELETE" : ""),
                   95992:       pTab->zName
                   95993:     ));
                   95994: #ifndef SQLITE_OMIT_TRACE
                   95995:     sqlite3VdbeChangeP4(v, -1, 
                   95996:       sqlite3MPrintf(db, "-- TRIGGER %s", pTrigger->zName), P4_DYNAMIC
                   95997:     );
                   95998: #endif
                   95999: 
                   96000:     /* If one was specified, code the WHEN clause. If it evaluates to false
                   96001:     ** (or NULL) the sub-vdbe is immediately halted by jumping to the 
                   96002:     ** OP_Halt inserted at the end of the program.  */
                   96003:     if( pTrigger->pWhen ){
                   96004:       pWhen = sqlite3ExprDup(db, pTrigger->pWhen, 0);
                   96005:       if( SQLITE_OK==sqlite3ResolveExprNames(&sNC, pWhen) 
                   96006:        && db->mallocFailed==0 
                   96007:       ){
                   96008:         iEndTrigger = sqlite3VdbeMakeLabel(v);
                   96009:         sqlite3ExprIfFalse(pSubParse, pWhen, iEndTrigger, SQLITE_JUMPIFNULL);
                   96010:       }
                   96011:       sqlite3ExprDelete(db, pWhen);
                   96012:     }
                   96013: 
                   96014:     /* Code the trigger program into the sub-vdbe. */
                   96015:     codeTriggerProgram(pSubParse, pTrigger->step_list, orconf);
                   96016: 
                   96017:     /* Insert an OP_Halt at the end of the sub-program. */
                   96018:     if( iEndTrigger ){
                   96019:       sqlite3VdbeResolveLabel(v, iEndTrigger);
                   96020:     }
                   96021:     sqlite3VdbeAddOp0(v, OP_Halt);
                   96022:     VdbeComment((v, "End: %s.%s", pTrigger->zName, onErrorText(orconf)));
                   96023: 
                   96024:     transferParseError(pParse, pSubParse);
                   96025:     if( db->mallocFailed==0 ){
                   96026:       pProgram->aOp = sqlite3VdbeTakeOpArray(v, &pProgram->nOp, &pTop->nMaxArg);
                   96027:     }
                   96028:     pProgram->nMem = pSubParse->nMem;
                   96029:     pProgram->nCsr = pSubParse->nTab;
                   96030:     pProgram->token = (void *)pTrigger;
                   96031:     pPrg->aColmask[0] = pSubParse->oldmask;
                   96032:     pPrg->aColmask[1] = pSubParse->newmask;
                   96033:     sqlite3VdbeDelete(v);
                   96034:   }
                   96035: 
                   96036:   assert( !pSubParse->pAinc       && !pSubParse->pZombieTab );
                   96037:   assert( !pSubParse->pTriggerPrg && !pSubParse->nMaxArg );
                   96038:   sqlite3StackFree(db, pSubParse);
                   96039: 
                   96040:   return pPrg;
                   96041: }
                   96042:     
                   96043: /*
                   96044: ** Return a pointer to a TriggerPrg object containing the sub-program for
                   96045: ** trigger pTrigger with default ON CONFLICT algorithm orconf. If no such
                   96046: ** TriggerPrg object exists, a new object is allocated and populated before
                   96047: ** being returned.
                   96048: */
                   96049: static TriggerPrg *getRowTrigger(
                   96050:   Parse *pParse,       /* Current parse context */
                   96051:   Trigger *pTrigger,   /* Trigger to code */
                   96052:   Table *pTab,         /* The table trigger pTrigger is attached to */
                   96053:   int orconf           /* ON CONFLICT algorithm. */
                   96054: ){
                   96055:   Parse *pRoot = sqlite3ParseToplevel(pParse);
                   96056:   TriggerPrg *pPrg;
                   96057: 
                   96058:   assert( pTrigger->zName==0 || pTab==tableOfTrigger(pTrigger) );
                   96059: 
                   96060:   /* It may be that this trigger has already been coded (or is in the
                   96061:   ** process of being coded). If this is the case, then an entry with
                   96062:   ** a matching TriggerPrg.pTrigger field will be present somewhere
                   96063:   ** in the Parse.pTriggerPrg list. Search for such an entry.  */
                   96064:   for(pPrg=pRoot->pTriggerPrg; 
                   96065:       pPrg && (pPrg->pTrigger!=pTrigger || pPrg->orconf!=orconf); 
                   96066:       pPrg=pPrg->pNext
                   96067:   );
                   96068: 
                   96069:   /* If an existing TriggerPrg could not be located, create a new one. */
                   96070:   if( !pPrg ){
                   96071:     pPrg = codeRowTrigger(pParse, pTrigger, pTab, orconf);
                   96072:   }
                   96073: 
                   96074:   return pPrg;
                   96075: }
                   96076: 
                   96077: /*
                   96078: ** Generate code for the trigger program associated with trigger p on 
                   96079: ** table pTab. The reg, orconf and ignoreJump parameters passed to this
                   96080: ** function are the same as those described in the header function for
                   96081: ** sqlite3CodeRowTrigger()
                   96082: */
                   96083: SQLITE_PRIVATE void sqlite3CodeRowTriggerDirect(
                   96084:   Parse *pParse,       /* Parse context */
                   96085:   Trigger *p,          /* Trigger to code */
                   96086:   Table *pTab,         /* The table to code triggers from */
                   96087:   int reg,             /* Reg array containing OLD.* and NEW.* values */
                   96088:   int orconf,          /* ON CONFLICT policy */
                   96089:   int ignoreJump       /* Instruction to jump to for RAISE(IGNORE) */
                   96090: ){
                   96091:   Vdbe *v = sqlite3GetVdbe(pParse); /* Main VM */
                   96092:   TriggerPrg *pPrg;
                   96093:   pPrg = getRowTrigger(pParse, p, pTab, orconf);
                   96094:   assert( pPrg || pParse->nErr || pParse->db->mallocFailed );
                   96095: 
                   96096:   /* Code the OP_Program opcode in the parent VDBE. P4 of the OP_Program 
                   96097:   ** is a pointer to the sub-vdbe containing the trigger program.  */
                   96098:   if( pPrg ){
                   96099:     int bRecursive = (p->zName && 0==(pParse->db->flags&SQLITE_RecTriggers));
                   96100: 
                   96101:     sqlite3VdbeAddOp3(v, OP_Program, reg, ignoreJump, ++pParse->nMem);
                   96102:     sqlite3VdbeChangeP4(v, -1, (const char *)pPrg->pProgram, P4_SUBPROGRAM);
                   96103:     VdbeComment(
                   96104:         (v, "Call: %s.%s", (p->zName?p->zName:"fkey"), onErrorText(orconf)));
                   96105: 
                   96106:     /* Set the P5 operand of the OP_Program instruction to non-zero if
                   96107:     ** recursive invocation of this trigger program is disallowed. Recursive
                   96108:     ** invocation is disallowed if (a) the sub-program is really a trigger,
                   96109:     ** not a foreign key action, and (b) the flag to enable recursive triggers
                   96110:     ** is clear.  */
                   96111:     sqlite3VdbeChangeP5(v, (u8)bRecursive);
                   96112:   }
                   96113: }
                   96114: 
                   96115: /*
                   96116: ** This is called to code the required FOR EACH ROW triggers for an operation
                   96117: ** on table pTab. The operation to code triggers for (INSERT, UPDATE or DELETE)
1.1.1.3 ! misho    96118: ** is given by the op parameter. The tr_tm parameter determines whether the
1.1       misho    96119: ** BEFORE or AFTER triggers are coded. If the operation is an UPDATE, then
                   96120: ** parameter pChanges is passed the list of columns being modified.
                   96121: **
                   96122: ** If there are no triggers that fire at the specified time for the specified
                   96123: ** operation on pTab, this function is a no-op.
                   96124: **
                   96125: ** The reg argument is the address of the first in an array of registers 
                   96126: ** that contain the values substituted for the new.* and old.* references
                   96127: ** in the trigger program. If N is the number of columns in table pTab
                   96128: ** (a copy of pTab->nCol), then registers are populated as follows:
                   96129: **
                   96130: **   Register       Contains
                   96131: **   ------------------------------------------------------
                   96132: **   reg+0          OLD.rowid
                   96133: **   reg+1          OLD.* value of left-most column of pTab
                   96134: **   ...            ...
                   96135: **   reg+N          OLD.* value of right-most column of pTab
                   96136: **   reg+N+1        NEW.rowid
                   96137: **   reg+N+2        OLD.* value of left-most column of pTab
                   96138: **   ...            ...
                   96139: **   reg+N+N+1      NEW.* value of right-most column of pTab
                   96140: **
                   96141: ** For ON DELETE triggers, the registers containing the NEW.* values will
                   96142: ** never be accessed by the trigger program, so they are not allocated or 
                   96143: ** populated by the caller (there is no data to populate them with anyway). 
                   96144: ** Similarly, for ON INSERT triggers the values stored in the OLD.* registers
                   96145: ** are never accessed, and so are not allocated by the caller. So, for an
                   96146: ** ON INSERT trigger, the value passed to this function as parameter reg
                   96147: ** is not a readable register, although registers (reg+N) through 
                   96148: ** (reg+N+N+1) are.
                   96149: **
                   96150: ** Parameter orconf is the default conflict resolution algorithm for the
                   96151: ** trigger program to use (REPLACE, IGNORE etc.). Parameter ignoreJump
                   96152: ** is the instruction that control should jump to if a trigger program
                   96153: ** raises an IGNORE exception.
                   96154: */
                   96155: SQLITE_PRIVATE void sqlite3CodeRowTrigger(
                   96156:   Parse *pParse,       /* Parse context */
                   96157:   Trigger *pTrigger,   /* List of triggers on table pTab */
                   96158:   int op,              /* One of TK_UPDATE, TK_INSERT, TK_DELETE */
                   96159:   ExprList *pChanges,  /* Changes list for any UPDATE OF triggers */
                   96160:   int tr_tm,           /* One of TRIGGER_BEFORE, TRIGGER_AFTER */
                   96161:   Table *pTab,         /* The table to code triggers from */
                   96162:   int reg,             /* The first in an array of registers (see above) */
                   96163:   int orconf,          /* ON CONFLICT policy */
                   96164:   int ignoreJump       /* Instruction to jump to for RAISE(IGNORE) */
                   96165: ){
                   96166:   Trigger *p;          /* Used to iterate through pTrigger list */
                   96167: 
                   96168:   assert( op==TK_UPDATE || op==TK_INSERT || op==TK_DELETE );
                   96169:   assert( tr_tm==TRIGGER_BEFORE || tr_tm==TRIGGER_AFTER );
                   96170:   assert( (op==TK_UPDATE)==(pChanges!=0) );
                   96171: 
                   96172:   for(p=pTrigger; p; p=p->pNext){
                   96173: 
                   96174:     /* Sanity checking:  The schema for the trigger and for the table are
                   96175:     ** always defined.  The trigger must be in the same schema as the table
                   96176:     ** or else it must be a TEMP trigger. */
                   96177:     assert( p->pSchema!=0 );
                   96178:     assert( p->pTabSchema!=0 );
                   96179:     assert( p->pSchema==p->pTabSchema 
                   96180:          || p->pSchema==pParse->db->aDb[1].pSchema );
                   96181: 
                   96182:     /* Determine whether we should code this trigger */
                   96183:     if( p->op==op 
                   96184:      && p->tr_tm==tr_tm 
                   96185:      && checkColumnOverlap(p->pColumns, pChanges)
                   96186:     ){
                   96187:       sqlite3CodeRowTriggerDirect(pParse, p, pTab, reg, orconf, ignoreJump);
                   96188:     }
                   96189:   }
                   96190: }
                   96191: 
                   96192: /*
                   96193: ** Triggers may access values stored in the old.* or new.* pseudo-table. 
                   96194: ** This function returns a 32-bit bitmask indicating which columns of the 
                   96195: ** old.* or new.* tables actually are used by triggers. This information 
                   96196: ** may be used by the caller, for example, to avoid having to load the entire
                   96197: ** old.* record into memory when executing an UPDATE or DELETE command.
                   96198: **
                   96199: ** Bit 0 of the returned mask is set if the left-most column of the
                   96200: ** table may be accessed using an [old|new].<col> reference. Bit 1 is set if
                   96201: ** the second leftmost column value is required, and so on. If there
                   96202: ** are more than 32 columns in the table, and at least one of the columns
                   96203: ** with an index greater than 32 may be accessed, 0xffffffff is returned.
                   96204: **
                   96205: ** It is not possible to determine if the old.rowid or new.rowid column is 
                   96206: ** accessed by triggers. The caller must always assume that it is.
                   96207: **
                   96208: ** Parameter isNew must be either 1 or 0. If it is 0, then the mask returned
                   96209: ** applies to the old.* table. If 1, the new.* table.
                   96210: **
                   96211: ** Parameter tr_tm must be a mask with one or both of the TRIGGER_BEFORE
                   96212: ** and TRIGGER_AFTER bits set. Values accessed by BEFORE triggers are only
                   96213: ** included in the returned mask if the TRIGGER_BEFORE bit is set in the
                   96214: ** tr_tm parameter. Similarly, values accessed by AFTER triggers are only
                   96215: ** included in the returned mask if the TRIGGER_AFTER bit is set in tr_tm.
                   96216: */
                   96217: SQLITE_PRIVATE u32 sqlite3TriggerColmask(
                   96218:   Parse *pParse,       /* Parse context */
                   96219:   Trigger *pTrigger,   /* List of triggers on table pTab */
                   96220:   ExprList *pChanges,  /* Changes list for any UPDATE OF triggers */
                   96221:   int isNew,           /* 1 for new.* ref mask, 0 for old.* ref mask */
                   96222:   int tr_tm,           /* Mask of TRIGGER_BEFORE|TRIGGER_AFTER */
                   96223:   Table *pTab,         /* The table to code triggers from */
                   96224:   int orconf           /* Default ON CONFLICT policy for trigger steps */
                   96225: ){
                   96226:   const int op = pChanges ? TK_UPDATE : TK_DELETE;
                   96227:   u32 mask = 0;
                   96228:   Trigger *p;
                   96229: 
                   96230:   assert( isNew==1 || isNew==0 );
                   96231:   for(p=pTrigger; p; p=p->pNext){
                   96232:     if( p->op==op && (tr_tm&p->tr_tm)
                   96233:      && checkColumnOverlap(p->pColumns,pChanges)
                   96234:     ){
                   96235:       TriggerPrg *pPrg;
                   96236:       pPrg = getRowTrigger(pParse, p, pTab, orconf);
                   96237:       if( pPrg ){
                   96238:         mask |= pPrg->aColmask[isNew];
                   96239:       }
                   96240:     }
                   96241:   }
                   96242: 
                   96243:   return mask;
                   96244: }
                   96245: 
                   96246: #endif /* !defined(SQLITE_OMIT_TRIGGER) */
                   96247: 
                   96248: /************** End of trigger.c *********************************************/
                   96249: /************** Begin file update.c ******************************************/
                   96250: /*
                   96251: ** 2001 September 15
                   96252: **
                   96253: ** The author disclaims copyright to this source code.  In place of
                   96254: ** a legal notice, here is a blessing:
                   96255: **
                   96256: **    May you do good and not evil.
                   96257: **    May you find forgiveness for yourself and forgive others.
                   96258: **    May you share freely, never taking more than you give.
                   96259: **
                   96260: *************************************************************************
                   96261: ** This file contains C code routines that are called by the parser
                   96262: ** to handle UPDATE statements.
                   96263: */
                   96264: 
                   96265: #ifndef SQLITE_OMIT_VIRTUALTABLE
                   96266: /* Forward declaration */
                   96267: static void updateVirtualTable(
                   96268:   Parse *pParse,       /* The parsing context */
                   96269:   SrcList *pSrc,       /* The virtual table to be modified */
                   96270:   Table *pTab,         /* The virtual table */
                   96271:   ExprList *pChanges,  /* The columns to change in the UPDATE statement */
                   96272:   Expr *pRowidExpr,    /* Expression used to recompute the rowid */
                   96273:   int *aXRef,          /* Mapping from columns of pTab to entries in pChanges */
                   96274:   Expr *pWhere,        /* WHERE clause of the UPDATE statement */
                   96275:   int onError          /* ON CONFLICT strategy */
                   96276: );
                   96277: #endif /* SQLITE_OMIT_VIRTUALTABLE */
                   96278: 
                   96279: /*
                   96280: ** The most recently coded instruction was an OP_Column to retrieve the
                   96281: ** i-th column of table pTab. This routine sets the P4 parameter of the 
                   96282: ** OP_Column to the default value, if any.
                   96283: **
                   96284: ** The default value of a column is specified by a DEFAULT clause in the 
                   96285: ** column definition. This was either supplied by the user when the table
                   96286: ** was created, or added later to the table definition by an ALTER TABLE
                   96287: ** command. If the latter, then the row-records in the table btree on disk
                   96288: ** may not contain a value for the column and the default value, taken
                   96289: ** from the P4 parameter of the OP_Column instruction, is returned instead.
                   96290: ** If the former, then all row-records are guaranteed to include a value
                   96291: ** for the column and the P4 value is not required.
                   96292: **
                   96293: ** Column definitions created by an ALTER TABLE command may only have 
                   96294: ** literal default values specified: a number, null or a string. (If a more
                   96295: ** complicated default expression value was provided, it is evaluated 
                   96296: ** when the ALTER TABLE is executed and one of the literal values written
                   96297: ** into the sqlite_master table.)
                   96298: **
                   96299: ** Therefore, the P4 parameter is only required if the default value for
                   96300: ** the column is a literal number, string or null. The sqlite3ValueFromExpr()
                   96301: ** function is capable of transforming these types of expressions into
                   96302: ** sqlite3_value objects.
                   96303: **
                   96304: ** If parameter iReg is not negative, code an OP_RealAffinity instruction
                   96305: ** on register iReg. This is used when an equivalent integer value is 
                   96306: ** stored in place of an 8-byte floating point value in order to save 
                   96307: ** space.
                   96308: */
                   96309: SQLITE_PRIVATE void sqlite3ColumnDefault(Vdbe *v, Table *pTab, int i, int iReg){
                   96310:   assert( pTab!=0 );
                   96311:   if( !pTab->pSelect ){
                   96312:     sqlite3_value *pValue;
                   96313:     u8 enc = ENC(sqlite3VdbeDb(v));
                   96314:     Column *pCol = &pTab->aCol[i];
                   96315:     VdbeComment((v, "%s.%s", pTab->zName, pCol->zName));
                   96316:     assert( i<pTab->nCol );
                   96317:     sqlite3ValueFromExpr(sqlite3VdbeDb(v), pCol->pDflt, enc, 
                   96318:                          pCol->affinity, &pValue);
                   96319:     if( pValue ){
                   96320:       sqlite3VdbeChangeP4(v, -1, (const char *)pValue, P4_MEM);
                   96321:     }
                   96322: #ifndef SQLITE_OMIT_FLOATING_POINT
                   96323:     if( iReg>=0 && pTab->aCol[i].affinity==SQLITE_AFF_REAL ){
                   96324:       sqlite3VdbeAddOp1(v, OP_RealAffinity, iReg);
                   96325:     }
                   96326: #endif
                   96327:   }
                   96328: }
                   96329: 
                   96330: /*
                   96331: ** Process an UPDATE statement.
                   96332: **
                   96333: **   UPDATE OR IGNORE table_wxyz SET a=b, c=d WHERE e<5 AND f NOT NULL;
                   96334: **          \_______/ \________/     \______/       \________________/
                   96335: *            onError   pTabList      pChanges             pWhere
                   96336: */
                   96337: SQLITE_PRIVATE void sqlite3Update(
                   96338:   Parse *pParse,         /* The parser context */
                   96339:   SrcList *pTabList,     /* The table in which we should change things */
                   96340:   ExprList *pChanges,    /* Things to be changed */
                   96341:   Expr *pWhere,          /* The WHERE clause.  May be null */
                   96342:   int onError            /* How to handle constraint errors */
                   96343: ){
                   96344:   int i, j;              /* Loop counters */
                   96345:   Table *pTab;           /* The table to be updated */
                   96346:   int addr = 0;          /* VDBE instruction address of the start of the loop */
                   96347:   WhereInfo *pWInfo;     /* Information about the WHERE clause */
                   96348:   Vdbe *v;               /* The virtual database engine */
                   96349:   Index *pIdx;           /* For looping over indices */
                   96350:   int nIdx;              /* Number of indices that need updating */
                   96351:   int iCur;              /* VDBE Cursor number of pTab */
                   96352:   sqlite3 *db;           /* The database structure */
                   96353:   int *aRegIdx = 0;      /* One register assigned to each index to be updated */
                   96354:   int *aXRef = 0;        /* aXRef[i] is the index in pChanges->a[] of the
                   96355:                          ** an expression for the i-th column of the table.
                   96356:                          ** aXRef[i]==-1 if the i-th column is not changed. */
                   96357:   int chngRowid;         /* True if the record number is being changed */
                   96358:   Expr *pRowidExpr = 0;  /* Expression defining the new record number */
                   96359:   int openAll = 0;       /* True if all indices need to be opened */
                   96360:   AuthContext sContext;  /* The authorization context */
                   96361:   NameContext sNC;       /* The name-context to resolve expressions in */
                   96362:   int iDb;               /* Database containing the table being updated */
                   96363:   int okOnePass;         /* True for one-pass algorithm without the FIFO */
                   96364:   int hasFK;             /* True if foreign key processing is required */
                   96365: 
                   96366: #ifndef SQLITE_OMIT_TRIGGER
                   96367:   int isView;            /* True when updating a view (INSTEAD OF trigger) */
                   96368:   Trigger *pTrigger;     /* List of triggers on pTab, if required */
                   96369:   int tmask;             /* Mask of TRIGGER_BEFORE|TRIGGER_AFTER */
                   96370: #endif
                   96371:   int newmask;           /* Mask of NEW.* columns accessed by BEFORE triggers */
                   96372: 
                   96373:   /* Register Allocations */
                   96374:   int regRowCount = 0;   /* A count of rows changed */
                   96375:   int regOldRowid;       /* The old rowid */
                   96376:   int regNewRowid;       /* The new rowid */
                   96377:   int regNew;
                   96378:   int regOld = 0;
                   96379:   int regRowSet = 0;     /* Rowset of rows to be updated */
                   96380: 
                   96381:   memset(&sContext, 0, sizeof(sContext));
                   96382:   db = pParse->db;
                   96383:   if( pParse->nErr || db->mallocFailed ){
                   96384:     goto update_cleanup;
                   96385:   }
                   96386:   assert( pTabList->nSrc==1 );
                   96387: 
                   96388:   /* Locate the table which we want to update. 
                   96389:   */
                   96390:   pTab = sqlite3SrcListLookup(pParse, pTabList);
                   96391:   if( pTab==0 ) goto update_cleanup;
                   96392:   iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema);
                   96393: 
                   96394:   /* Figure out if we have any triggers and if the table being
                   96395:   ** updated is a view.
                   96396:   */
                   96397: #ifndef SQLITE_OMIT_TRIGGER
                   96398:   pTrigger = sqlite3TriggersExist(pParse, pTab, TK_UPDATE, pChanges, &tmask);
                   96399:   isView = pTab->pSelect!=0;
                   96400:   assert( pTrigger || tmask==0 );
                   96401: #else
                   96402: # define pTrigger 0
                   96403: # define isView 0
                   96404: # define tmask 0
                   96405: #endif
                   96406: #ifdef SQLITE_OMIT_VIEW
                   96407: # undef isView
                   96408: # define isView 0
                   96409: #endif
                   96410: 
                   96411:   if( sqlite3ViewGetColumnNames(pParse, pTab) ){
                   96412:     goto update_cleanup;
                   96413:   }
                   96414:   if( sqlite3IsReadOnly(pParse, pTab, tmask) ){
                   96415:     goto update_cleanup;
                   96416:   }
                   96417:   aXRef = sqlite3DbMallocRaw(db, sizeof(int) * pTab->nCol );
                   96418:   if( aXRef==0 ) goto update_cleanup;
                   96419:   for(i=0; i<pTab->nCol; i++) aXRef[i] = -1;
                   96420: 
                   96421:   /* Allocate a cursors for the main database table and for all indices.
                   96422:   ** The index cursors might not be used, but if they are used they
                   96423:   ** need to occur right after the database cursor.  So go ahead and
                   96424:   ** allocate enough space, just in case.
                   96425:   */
                   96426:   pTabList->a[0].iCursor = iCur = pParse->nTab++;
                   96427:   for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
                   96428:     pParse->nTab++;
                   96429:   }
                   96430: 
                   96431:   /* Initialize the name-context */
                   96432:   memset(&sNC, 0, sizeof(sNC));
                   96433:   sNC.pParse = pParse;
                   96434:   sNC.pSrcList = pTabList;
                   96435: 
                   96436:   /* Resolve the column names in all the expressions of the
                   96437:   ** of the UPDATE statement.  Also find the column index
                   96438:   ** for each column to be updated in the pChanges array.  For each
                   96439:   ** column to be updated, make sure we have authorization to change
                   96440:   ** that column.
                   96441:   */
                   96442:   chngRowid = 0;
                   96443:   for(i=0; i<pChanges->nExpr; i++){
                   96444:     if( sqlite3ResolveExprNames(&sNC, pChanges->a[i].pExpr) ){
                   96445:       goto update_cleanup;
                   96446:     }
                   96447:     for(j=0; j<pTab->nCol; j++){
                   96448:       if( sqlite3StrICmp(pTab->aCol[j].zName, pChanges->a[i].zName)==0 ){
                   96449:         if( j==pTab->iPKey ){
                   96450:           chngRowid = 1;
                   96451:           pRowidExpr = pChanges->a[i].pExpr;
                   96452:         }
                   96453:         aXRef[j] = i;
                   96454:         break;
                   96455:       }
                   96456:     }
                   96457:     if( j>=pTab->nCol ){
                   96458:       if( sqlite3IsRowid(pChanges->a[i].zName) ){
                   96459:         chngRowid = 1;
                   96460:         pRowidExpr = pChanges->a[i].pExpr;
                   96461:       }else{
                   96462:         sqlite3ErrorMsg(pParse, "no such column: %s", pChanges->a[i].zName);
                   96463:         pParse->checkSchema = 1;
                   96464:         goto update_cleanup;
                   96465:       }
                   96466:     }
                   96467: #ifndef SQLITE_OMIT_AUTHORIZATION
                   96468:     {
                   96469:       int rc;
                   96470:       rc = sqlite3AuthCheck(pParse, SQLITE_UPDATE, pTab->zName,
                   96471:                            pTab->aCol[j].zName, db->aDb[iDb].zName);
                   96472:       if( rc==SQLITE_DENY ){
                   96473:         goto update_cleanup;
                   96474:       }else if( rc==SQLITE_IGNORE ){
                   96475:         aXRef[j] = -1;
                   96476:       }
                   96477:     }
                   96478: #endif
                   96479:   }
                   96480: 
                   96481:   hasFK = sqlite3FkRequired(pParse, pTab, aXRef, chngRowid);
                   96482: 
                   96483:   /* Allocate memory for the array aRegIdx[].  There is one entry in the
                   96484:   ** array for each index associated with table being updated.  Fill in
                   96485:   ** the value with a register number for indices that are to be used
                   96486:   ** and with zero for unused indices.
                   96487:   */
                   96488:   for(nIdx=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, nIdx++){}
                   96489:   if( nIdx>0 ){
                   96490:     aRegIdx = sqlite3DbMallocRaw(db, sizeof(Index*) * nIdx );
                   96491:     if( aRegIdx==0 ) goto update_cleanup;
                   96492:   }
                   96493:   for(j=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, j++){
                   96494:     int reg;
                   96495:     if( hasFK || chngRowid ){
                   96496:       reg = ++pParse->nMem;
                   96497:     }else{
                   96498:       reg = 0;
                   96499:       for(i=0; i<pIdx->nColumn; i++){
                   96500:         if( aXRef[pIdx->aiColumn[i]]>=0 ){
                   96501:           reg = ++pParse->nMem;
                   96502:           break;
                   96503:         }
                   96504:       }
                   96505:     }
                   96506:     aRegIdx[j] = reg;
                   96507:   }
                   96508: 
                   96509:   /* Begin generating code. */
                   96510:   v = sqlite3GetVdbe(pParse);
                   96511:   if( v==0 ) goto update_cleanup;
                   96512:   if( pParse->nested==0 ) sqlite3VdbeCountChanges(v);
                   96513:   sqlite3BeginWriteOperation(pParse, 1, iDb);
                   96514: 
                   96515: #ifndef SQLITE_OMIT_VIRTUALTABLE
                   96516:   /* Virtual tables must be handled separately */
                   96517:   if( IsVirtual(pTab) ){
                   96518:     updateVirtualTable(pParse, pTabList, pTab, pChanges, pRowidExpr, aXRef,
                   96519:                        pWhere, onError);
                   96520:     pWhere = 0;
                   96521:     pTabList = 0;
                   96522:     goto update_cleanup;
                   96523:   }
                   96524: #endif
                   96525: 
                   96526:   /* Allocate required registers. */
                   96527:   regOldRowid = regNewRowid = ++pParse->nMem;
                   96528:   if( pTrigger || hasFK ){
                   96529:     regOld = pParse->nMem + 1;
                   96530:     pParse->nMem += pTab->nCol;
                   96531:   }
                   96532:   if( chngRowid || pTrigger || hasFK ){
                   96533:     regNewRowid = ++pParse->nMem;
                   96534:   }
                   96535:   regNew = pParse->nMem + 1;
                   96536:   pParse->nMem += pTab->nCol;
                   96537: 
                   96538:   /* Start the view context. */
                   96539:   if( isView ){
                   96540:     sqlite3AuthContextPush(pParse, &sContext, pTab->zName);
                   96541:   }
                   96542: 
                   96543:   /* If we are trying to update a view, realize that view into
                   96544:   ** a ephemeral table.
                   96545:   */
                   96546: #if !defined(SQLITE_OMIT_VIEW) && !defined(SQLITE_OMIT_TRIGGER)
                   96547:   if( isView ){
                   96548:     sqlite3MaterializeView(pParse, pTab, pWhere, iCur);
                   96549:   }
                   96550: #endif
                   96551: 
                   96552:   /* Resolve the column names in all the expressions in the
                   96553:   ** WHERE clause.
                   96554:   */
                   96555:   if( sqlite3ResolveExprNames(&sNC, pWhere) ){
                   96556:     goto update_cleanup;
                   96557:   }
                   96558: 
                   96559:   /* Begin the database scan
                   96560:   */
                   96561:   sqlite3VdbeAddOp2(v, OP_Null, 0, regOldRowid);
                   96562:   pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere,0, WHERE_ONEPASS_DESIRED);
                   96563:   if( pWInfo==0 ) goto update_cleanup;
                   96564:   okOnePass = pWInfo->okOnePass;
                   96565: 
                   96566:   /* Remember the rowid of every item to be updated.
                   96567:   */
                   96568:   sqlite3VdbeAddOp2(v, OP_Rowid, iCur, regOldRowid);
                   96569:   if( !okOnePass ){
                   96570:     regRowSet = ++pParse->nMem;
                   96571:     sqlite3VdbeAddOp2(v, OP_RowSetAdd, regRowSet, regOldRowid);
                   96572:   }
                   96573: 
                   96574:   /* End the database scan loop.
                   96575:   */
                   96576:   sqlite3WhereEnd(pWInfo);
                   96577: 
                   96578:   /* Initialize the count of updated rows
                   96579:   */
                   96580:   if( (db->flags & SQLITE_CountRows) && !pParse->pTriggerTab ){
                   96581:     regRowCount = ++pParse->nMem;
                   96582:     sqlite3VdbeAddOp2(v, OP_Integer, 0, regRowCount);
                   96583:   }
                   96584: 
                   96585:   if( !isView ){
                   96586:     /* 
                   96587:     ** Open every index that needs updating.  Note that if any
                   96588:     ** index could potentially invoke a REPLACE conflict resolution 
                   96589:     ** action, then we need to open all indices because we might need
                   96590:     ** to be deleting some records.
                   96591:     */
                   96592:     if( !okOnePass ) sqlite3OpenTable(pParse, iCur, iDb, pTab, OP_OpenWrite); 
                   96593:     if( onError==OE_Replace ){
                   96594:       openAll = 1;
                   96595:     }else{
                   96596:       openAll = 0;
                   96597:       for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
                   96598:         if( pIdx->onError==OE_Replace ){
                   96599:           openAll = 1;
                   96600:           break;
                   96601:         }
                   96602:       }
                   96603:     }
                   96604:     for(i=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, i++){
                   96605:       if( openAll || aRegIdx[i]>0 ){
                   96606:         KeyInfo *pKey = sqlite3IndexKeyinfo(pParse, pIdx);
                   96607:         sqlite3VdbeAddOp4(v, OP_OpenWrite, iCur+i+1, pIdx->tnum, iDb,
                   96608:                        (char*)pKey, P4_KEYINFO_HANDOFF);
                   96609:         assert( pParse->nTab>iCur+i+1 );
                   96610:       }
                   96611:     }
                   96612:   }
                   96613: 
                   96614:   /* Top of the update loop */
                   96615:   if( okOnePass ){
                   96616:     int a1 = sqlite3VdbeAddOp1(v, OP_NotNull, regOldRowid);
                   96617:     addr = sqlite3VdbeAddOp0(v, OP_Goto);
                   96618:     sqlite3VdbeJumpHere(v, a1);
                   96619:   }else{
                   96620:     addr = sqlite3VdbeAddOp3(v, OP_RowSetRead, regRowSet, 0, regOldRowid);
                   96621:   }
                   96622: 
                   96623:   /* Make cursor iCur point to the record that is being updated. If
                   96624:   ** this record does not exist for some reason (deleted by a trigger,
                   96625:   ** for example, then jump to the next iteration of the RowSet loop.  */
                   96626:   sqlite3VdbeAddOp3(v, OP_NotExists, iCur, addr, regOldRowid);
                   96627: 
                   96628:   /* If the record number will change, set register regNewRowid to
                   96629:   ** contain the new value. If the record number is not being modified,
                   96630:   ** then regNewRowid is the same register as regOldRowid, which is
                   96631:   ** already populated.  */
                   96632:   assert( chngRowid || pTrigger || hasFK || regOldRowid==regNewRowid );
                   96633:   if( chngRowid ){
                   96634:     sqlite3ExprCode(pParse, pRowidExpr, regNewRowid);
                   96635:     sqlite3VdbeAddOp1(v, OP_MustBeInt, regNewRowid);
                   96636:   }
                   96637: 
                   96638:   /* If there are triggers on this table, populate an array of registers 
                   96639:   ** with the required old.* column data.  */
                   96640:   if( hasFK || pTrigger ){
                   96641:     u32 oldmask = (hasFK ? sqlite3FkOldmask(pParse, pTab) : 0);
                   96642:     oldmask |= sqlite3TriggerColmask(pParse, 
                   96643:         pTrigger, pChanges, 0, TRIGGER_BEFORE|TRIGGER_AFTER, pTab, onError
                   96644:     );
                   96645:     for(i=0; i<pTab->nCol; i++){
                   96646:       if( aXRef[i]<0 || oldmask==0xffffffff || (i<32 && (oldmask & (1<<i))) ){
                   96647:         sqlite3ExprCodeGetColumnOfTable(v, pTab, iCur, i, regOld+i);
                   96648:       }else{
                   96649:         sqlite3VdbeAddOp2(v, OP_Null, 0, regOld+i);
                   96650:       }
                   96651:     }
                   96652:     if( chngRowid==0 ){
                   96653:       sqlite3VdbeAddOp2(v, OP_Copy, regOldRowid, regNewRowid);
                   96654:     }
                   96655:   }
                   96656: 
                   96657:   /* Populate the array of registers beginning at regNew with the new
                   96658:   ** row data. This array is used to check constaints, create the new
                   96659:   ** table and index records, and as the values for any new.* references
                   96660:   ** made by triggers.
                   96661:   **
                   96662:   ** If there are one or more BEFORE triggers, then do not populate the
                   96663:   ** registers associated with columns that are (a) not modified by
                   96664:   ** this UPDATE statement and (b) not accessed by new.* references. The
                   96665:   ** values for registers not modified by the UPDATE must be reloaded from 
                   96666:   ** the database after the BEFORE triggers are fired anyway (as the trigger 
                   96667:   ** may have modified them). So not loading those that are not going to
                   96668:   ** be used eliminates some redundant opcodes.
                   96669:   */
                   96670:   newmask = sqlite3TriggerColmask(
                   96671:       pParse, pTrigger, pChanges, 1, TRIGGER_BEFORE, pTab, onError
                   96672:   );
                   96673:   for(i=0; i<pTab->nCol; i++){
                   96674:     if( i==pTab->iPKey ){
                   96675:       sqlite3VdbeAddOp2(v, OP_Null, 0, regNew+i);
                   96676:     }else{
                   96677:       j = aXRef[i];
                   96678:       if( j>=0 ){
                   96679:         sqlite3ExprCode(pParse, pChanges->a[j].pExpr, regNew+i);
                   96680:       }else if( 0==(tmask&TRIGGER_BEFORE) || i>31 || (newmask&(1<<i)) ){
                   96681:         /* This branch loads the value of a column that will not be changed 
                   96682:         ** into a register. This is done if there are no BEFORE triggers, or
                   96683:         ** if there are one or more BEFORE triggers that use this value via
                   96684:         ** a new.* reference in a trigger program.
                   96685:         */
                   96686:         testcase( i==31 );
                   96687:         testcase( i==32 );
                   96688:         sqlite3VdbeAddOp3(v, OP_Column, iCur, i, regNew+i);
                   96689:         sqlite3ColumnDefault(v, pTab, i, regNew+i);
                   96690:       }
                   96691:     }
                   96692:   }
                   96693: 
                   96694:   /* Fire any BEFORE UPDATE triggers. This happens before constraints are
                   96695:   ** verified. One could argue that this is wrong.
                   96696:   */
                   96697:   if( tmask&TRIGGER_BEFORE ){
                   96698:     sqlite3VdbeAddOp2(v, OP_Affinity, regNew, pTab->nCol);
                   96699:     sqlite3TableAffinityStr(v, pTab);
                   96700:     sqlite3CodeRowTrigger(pParse, pTrigger, TK_UPDATE, pChanges, 
                   96701:         TRIGGER_BEFORE, pTab, regOldRowid, onError, addr);
                   96702: 
                   96703:     /* The row-trigger may have deleted the row being updated. In this
                   96704:     ** case, jump to the next row. No updates or AFTER triggers are 
                   96705:     ** required. This behaviour - what happens when the row being updated
                   96706:     ** is deleted or renamed by a BEFORE trigger - is left undefined in the
                   96707:     ** documentation.
                   96708:     */
                   96709:     sqlite3VdbeAddOp3(v, OP_NotExists, iCur, addr, regOldRowid);
                   96710: 
                   96711:     /* If it did not delete it, the row-trigger may still have modified 
                   96712:     ** some of the columns of the row being updated. Load the values for 
                   96713:     ** all columns not modified by the update statement into their 
                   96714:     ** registers in case this has happened.
                   96715:     */
                   96716:     for(i=0; i<pTab->nCol; i++){
                   96717:       if( aXRef[i]<0 && i!=pTab->iPKey ){
                   96718:         sqlite3VdbeAddOp3(v, OP_Column, iCur, i, regNew+i);
                   96719:         sqlite3ColumnDefault(v, pTab, i, regNew+i);
                   96720:       }
                   96721:     }
                   96722:   }
                   96723: 
                   96724:   if( !isView ){
                   96725:     int j1;                       /* Address of jump instruction */
                   96726: 
                   96727:     /* Do constraint checks. */
                   96728:     sqlite3GenerateConstraintChecks(pParse, pTab, iCur, regNewRowid,
                   96729:         aRegIdx, (chngRowid?regOldRowid:0), 1, onError, addr, 0);
                   96730: 
                   96731:     /* Do FK constraint checks. */
                   96732:     if( hasFK ){
                   96733:       sqlite3FkCheck(pParse, pTab, regOldRowid, 0);
                   96734:     }
                   96735: 
                   96736:     /* Delete the index entries associated with the current record.  */
                   96737:     j1 = sqlite3VdbeAddOp3(v, OP_NotExists, iCur, 0, regOldRowid);
                   96738:     sqlite3GenerateRowIndexDelete(pParse, pTab, iCur, aRegIdx);
                   96739:   
                   96740:     /* If changing the record number, delete the old record.  */
                   96741:     if( hasFK || chngRowid ){
                   96742:       sqlite3VdbeAddOp2(v, OP_Delete, iCur, 0);
                   96743:     }
                   96744:     sqlite3VdbeJumpHere(v, j1);
                   96745: 
                   96746:     if( hasFK ){
                   96747:       sqlite3FkCheck(pParse, pTab, 0, regNewRowid);
                   96748:     }
                   96749:   
                   96750:     /* Insert the new index entries and the new record. */
                   96751:     sqlite3CompleteInsertion(pParse, pTab, iCur, regNewRowid, aRegIdx, 1, 0, 0);
                   96752: 
                   96753:     /* Do any ON CASCADE, SET NULL or SET DEFAULT operations required to
                   96754:     ** handle rows (possibly in other tables) that refer via a foreign key
                   96755:     ** to the row just updated. */ 
                   96756:     if( hasFK ){
                   96757:       sqlite3FkActions(pParse, pTab, pChanges, regOldRowid);
                   96758:     }
                   96759:   }
                   96760: 
                   96761:   /* Increment the row counter 
                   96762:   */
                   96763:   if( (db->flags & SQLITE_CountRows) && !pParse->pTriggerTab){
                   96764:     sqlite3VdbeAddOp2(v, OP_AddImm, regRowCount, 1);
                   96765:   }
                   96766: 
                   96767:   sqlite3CodeRowTrigger(pParse, pTrigger, TK_UPDATE, pChanges, 
                   96768:       TRIGGER_AFTER, pTab, regOldRowid, onError, addr);
                   96769: 
                   96770:   /* Repeat the above with the next record to be updated, until
                   96771:   ** all record selected by the WHERE clause have been updated.
                   96772:   */
                   96773:   sqlite3VdbeAddOp2(v, OP_Goto, 0, addr);
                   96774:   sqlite3VdbeJumpHere(v, addr);
                   96775: 
                   96776:   /* Close all tables */
                   96777:   for(i=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, i++){
                   96778:     if( openAll || aRegIdx[i]>0 ){
                   96779:       sqlite3VdbeAddOp2(v, OP_Close, iCur+i+1, 0);
                   96780:     }
                   96781:   }
                   96782:   sqlite3VdbeAddOp2(v, OP_Close, iCur, 0);
                   96783: 
                   96784:   /* Update the sqlite_sequence table by storing the content of the
                   96785:   ** maximum rowid counter values recorded while inserting into
                   96786:   ** autoincrement tables.
                   96787:   */
                   96788:   if( pParse->nested==0 && pParse->pTriggerTab==0 ){
                   96789:     sqlite3AutoincrementEnd(pParse);
                   96790:   }
                   96791: 
                   96792:   /*
                   96793:   ** Return the number of rows that were changed. If this routine is 
                   96794:   ** generating code because of a call to sqlite3NestedParse(), do not
                   96795:   ** invoke the callback function.
                   96796:   */
                   96797:   if( (db->flags&SQLITE_CountRows) && !pParse->pTriggerTab && !pParse->nested ){
                   96798:     sqlite3VdbeAddOp2(v, OP_ResultRow, regRowCount, 1);
                   96799:     sqlite3VdbeSetNumCols(v, 1);
                   96800:     sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "rows updated", SQLITE_STATIC);
                   96801:   }
                   96802: 
                   96803: update_cleanup:
                   96804:   sqlite3AuthContextPop(&sContext);
                   96805:   sqlite3DbFree(db, aRegIdx);
                   96806:   sqlite3DbFree(db, aXRef);
                   96807:   sqlite3SrcListDelete(db, pTabList);
                   96808:   sqlite3ExprListDelete(db, pChanges);
                   96809:   sqlite3ExprDelete(db, pWhere);
                   96810:   return;
                   96811: }
                   96812: /* Make sure "isView" and other macros defined above are undefined. Otherwise
                   96813: ** thely may interfere with compilation of other functions in this file
                   96814: ** (or in another file, if this file becomes part of the amalgamation).  */
                   96815: #ifdef isView
                   96816:  #undef isView
                   96817: #endif
                   96818: #ifdef pTrigger
                   96819:  #undef pTrigger
                   96820: #endif
                   96821: 
                   96822: #ifndef SQLITE_OMIT_VIRTUALTABLE
                   96823: /*
                   96824: ** Generate code for an UPDATE of a virtual table.
                   96825: **
                   96826: ** The strategy is that we create an ephemerial table that contains
                   96827: ** for each row to be changed:
                   96828: **
                   96829: **   (A)  The original rowid of that row.
                   96830: **   (B)  The revised rowid for the row. (note1)
                   96831: **   (C)  The content of every column in the row.
                   96832: **
                   96833: ** Then we loop over this ephemeral table and for each row in
                   96834: ** the ephermeral table call VUpdate.
                   96835: **
                   96836: ** When finished, drop the ephemeral table.
                   96837: **
                   96838: ** (note1) Actually, if we know in advance that (A) is always the same
                   96839: ** as (B) we only store (A), then duplicate (A) when pulling
                   96840: ** it out of the ephemeral table before calling VUpdate.
                   96841: */
                   96842: static void updateVirtualTable(
                   96843:   Parse *pParse,       /* The parsing context */
                   96844:   SrcList *pSrc,       /* The virtual table to be modified */
                   96845:   Table *pTab,         /* The virtual table */
                   96846:   ExprList *pChanges,  /* The columns to change in the UPDATE statement */
                   96847:   Expr *pRowid,        /* Expression used to recompute the rowid */
                   96848:   int *aXRef,          /* Mapping from columns of pTab to entries in pChanges */
                   96849:   Expr *pWhere,        /* WHERE clause of the UPDATE statement */
                   96850:   int onError          /* ON CONFLICT strategy */
                   96851: ){
                   96852:   Vdbe *v = pParse->pVdbe;  /* Virtual machine under construction */
                   96853:   ExprList *pEList = 0;     /* The result set of the SELECT statement */
                   96854:   Select *pSelect = 0;      /* The SELECT statement */
                   96855:   Expr *pExpr;              /* Temporary expression */
                   96856:   int ephemTab;             /* Table holding the result of the SELECT */
                   96857:   int i;                    /* Loop counter */
                   96858:   int addr;                 /* Address of top of loop */
                   96859:   int iReg;                 /* First register in set passed to OP_VUpdate */
                   96860:   sqlite3 *db = pParse->db; /* Database connection */
                   96861:   const char *pVTab = (const char*)sqlite3GetVTable(db, pTab);
                   96862:   SelectDest dest;
                   96863: 
                   96864:   /* Construct the SELECT statement that will find the new values for
                   96865:   ** all updated rows. 
                   96866:   */
                   96867:   pEList = sqlite3ExprListAppend(pParse, 0, sqlite3Expr(db, TK_ID, "_rowid_"));
                   96868:   if( pRowid ){
                   96869:     pEList = sqlite3ExprListAppend(pParse, pEList,
                   96870:                                    sqlite3ExprDup(db, pRowid, 0));
                   96871:   }
                   96872:   assert( pTab->iPKey<0 );
                   96873:   for(i=0; i<pTab->nCol; i++){
                   96874:     if( aXRef[i]>=0 ){
                   96875:       pExpr = sqlite3ExprDup(db, pChanges->a[aXRef[i]].pExpr, 0);
                   96876:     }else{
                   96877:       pExpr = sqlite3Expr(db, TK_ID, pTab->aCol[i].zName);
                   96878:     }
                   96879:     pEList = sqlite3ExprListAppend(pParse, pEList, pExpr);
                   96880:   }
                   96881:   pSelect = sqlite3SelectNew(pParse, pEList, pSrc, pWhere, 0, 0, 0, 0, 0, 0);
                   96882:   
                   96883:   /* Create the ephemeral table into which the update results will
                   96884:   ** be stored.
                   96885:   */
                   96886:   assert( v );
                   96887:   ephemTab = pParse->nTab++;
                   96888:   sqlite3VdbeAddOp2(v, OP_OpenEphemeral, ephemTab, pTab->nCol+1+(pRowid!=0));
                   96889:   sqlite3VdbeChangeP5(v, BTREE_UNORDERED);
                   96890: 
                   96891:   /* fill the ephemeral table 
                   96892:   */
                   96893:   sqlite3SelectDestInit(&dest, SRT_Table, ephemTab);
                   96894:   sqlite3Select(pParse, pSelect, &dest);
                   96895: 
                   96896:   /* Generate code to scan the ephemeral table and call VUpdate. */
                   96897:   iReg = ++pParse->nMem;
                   96898:   pParse->nMem += pTab->nCol+1;
                   96899:   addr = sqlite3VdbeAddOp2(v, OP_Rewind, ephemTab, 0);
                   96900:   sqlite3VdbeAddOp3(v, OP_Column,  ephemTab, 0, iReg);
                   96901:   sqlite3VdbeAddOp3(v, OP_Column, ephemTab, (pRowid?1:0), iReg+1);
                   96902:   for(i=0; i<pTab->nCol; i++){
                   96903:     sqlite3VdbeAddOp3(v, OP_Column, ephemTab, i+1+(pRowid!=0), iReg+2+i);
                   96904:   }
                   96905:   sqlite3VtabMakeWritable(pParse, pTab);
                   96906:   sqlite3VdbeAddOp4(v, OP_VUpdate, 0, pTab->nCol+2, iReg, pVTab, P4_VTAB);
                   96907:   sqlite3VdbeChangeP5(v, onError==OE_Default ? OE_Abort : onError);
                   96908:   sqlite3MayAbort(pParse);
                   96909:   sqlite3VdbeAddOp2(v, OP_Next, ephemTab, addr+1);
                   96910:   sqlite3VdbeJumpHere(v, addr);
                   96911:   sqlite3VdbeAddOp2(v, OP_Close, ephemTab, 0);
                   96912: 
                   96913:   /* Cleanup */
                   96914:   sqlite3SelectDelete(db, pSelect);  
                   96915: }
                   96916: #endif /* SQLITE_OMIT_VIRTUALTABLE */
                   96917: 
                   96918: /************** End of update.c **********************************************/
                   96919: /************** Begin file vacuum.c ******************************************/
                   96920: /*
                   96921: ** 2003 April 6
                   96922: **
                   96923: ** The author disclaims copyright to this source code.  In place of
                   96924: ** a legal notice, here is a blessing:
                   96925: **
                   96926: **    May you do good and not evil.
                   96927: **    May you find forgiveness for yourself and forgive others.
                   96928: **    May you share freely, never taking more than you give.
                   96929: **
                   96930: *************************************************************************
                   96931: ** This file contains code used to implement the VACUUM command.
                   96932: **
                   96933: ** Most of the code in this file may be omitted by defining the
                   96934: ** SQLITE_OMIT_VACUUM macro.
                   96935: */
                   96936: 
                   96937: #if !defined(SQLITE_OMIT_VACUUM) && !defined(SQLITE_OMIT_ATTACH)
                   96938: /*
                   96939: ** Finalize a prepared statement.  If there was an error, store the
                   96940: ** text of the error message in *pzErrMsg.  Return the result code.
                   96941: */
                   96942: static int vacuumFinalize(sqlite3 *db, sqlite3_stmt *pStmt, char **pzErrMsg){
                   96943:   int rc;
                   96944:   rc = sqlite3VdbeFinalize((Vdbe*)pStmt);
                   96945:   if( rc ){
                   96946:     sqlite3SetString(pzErrMsg, db, sqlite3_errmsg(db));
                   96947:   }
                   96948:   return rc;
                   96949: }
                   96950: 
                   96951: /*
                   96952: ** Execute zSql on database db. Return an error code.
                   96953: */
                   96954: static int execSql(sqlite3 *db, char **pzErrMsg, const char *zSql){
                   96955:   sqlite3_stmt *pStmt;
                   96956:   VVA_ONLY( int rc; )
                   96957:   if( !zSql ){
                   96958:     return SQLITE_NOMEM;
                   96959:   }
                   96960:   if( SQLITE_OK!=sqlite3_prepare(db, zSql, -1, &pStmt, 0) ){
                   96961:     sqlite3SetString(pzErrMsg, db, sqlite3_errmsg(db));
                   96962:     return sqlite3_errcode(db);
                   96963:   }
                   96964:   VVA_ONLY( rc = ) sqlite3_step(pStmt);
                   96965:   assert( rc!=SQLITE_ROW );
                   96966:   return vacuumFinalize(db, pStmt, pzErrMsg);
                   96967: }
                   96968: 
                   96969: /*
                   96970: ** Execute zSql on database db. The statement returns exactly
                   96971: ** one column. Execute this as SQL on the same database.
                   96972: */
                   96973: static int execExecSql(sqlite3 *db, char **pzErrMsg, const char *zSql){
                   96974:   sqlite3_stmt *pStmt;
                   96975:   int rc;
                   96976: 
                   96977:   rc = sqlite3_prepare(db, zSql, -1, &pStmt, 0);
                   96978:   if( rc!=SQLITE_OK ) return rc;
                   96979: 
                   96980:   while( SQLITE_ROW==sqlite3_step(pStmt) ){
                   96981:     rc = execSql(db, pzErrMsg, (char*)sqlite3_column_text(pStmt, 0));
                   96982:     if( rc!=SQLITE_OK ){
                   96983:       vacuumFinalize(db, pStmt, pzErrMsg);
                   96984:       return rc;
                   96985:     }
                   96986:   }
                   96987: 
                   96988:   return vacuumFinalize(db, pStmt, pzErrMsg);
                   96989: }
                   96990: 
                   96991: /*
                   96992: ** The non-standard VACUUM command is used to clean up the database,
                   96993: ** collapse free space, etc.  It is modelled after the VACUUM command
                   96994: ** in PostgreSQL.
                   96995: **
                   96996: ** In version 1.0.x of SQLite, the VACUUM command would call
                   96997: ** gdbm_reorganize() on all the database tables.  But beginning
                   96998: ** with 2.0.0, SQLite no longer uses GDBM so this command has
                   96999: ** become a no-op.
                   97000: */
                   97001: SQLITE_PRIVATE void sqlite3Vacuum(Parse *pParse){
                   97002:   Vdbe *v = sqlite3GetVdbe(pParse);
                   97003:   if( v ){
                   97004:     sqlite3VdbeAddOp2(v, OP_Vacuum, 0, 0);
                   97005:   }
                   97006:   return;
                   97007: }
                   97008: 
                   97009: /*
                   97010: ** This routine implements the OP_Vacuum opcode of the VDBE.
                   97011: */
                   97012: SQLITE_PRIVATE int sqlite3RunVacuum(char **pzErrMsg, sqlite3 *db){
                   97013:   int rc = SQLITE_OK;     /* Return code from service routines */
                   97014:   Btree *pMain;           /* The database being vacuumed */
                   97015:   Btree *pTemp;           /* The temporary database we vacuum into */
                   97016:   char *zSql = 0;         /* SQL statements */
                   97017:   int saved_flags;        /* Saved value of the db->flags */
                   97018:   int saved_nChange;      /* Saved value of db->nChange */
                   97019:   int saved_nTotalChange; /* Saved value of db->nTotalChange */
                   97020:   void (*saved_xTrace)(void*,const char*);  /* Saved db->xTrace */
                   97021:   Db *pDb = 0;            /* Database to detach at end of vacuum */
                   97022:   int isMemDb;            /* True if vacuuming a :memory: database */
                   97023:   int nRes;               /* Bytes of reserved space at the end of each page */
                   97024:   int nDb;                /* Number of attached databases */
                   97025: 
                   97026:   if( !db->autoCommit ){
                   97027:     sqlite3SetString(pzErrMsg, db, "cannot VACUUM from within a transaction");
                   97028:     return SQLITE_ERROR;
                   97029:   }
                   97030:   if( db->activeVdbeCnt>1 ){
                   97031:     sqlite3SetString(pzErrMsg, db,"cannot VACUUM - SQL statements in progress");
                   97032:     return SQLITE_ERROR;
                   97033:   }
                   97034: 
                   97035:   /* Save the current value of the database flags so that it can be 
                   97036:   ** restored before returning. Then set the writable-schema flag, and
                   97037:   ** disable CHECK and foreign key constraints.  */
                   97038:   saved_flags = db->flags;
                   97039:   saved_nChange = db->nChange;
                   97040:   saved_nTotalChange = db->nTotalChange;
                   97041:   saved_xTrace = db->xTrace;
                   97042:   db->flags |= SQLITE_WriteSchema | SQLITE_IgnoreChecks | SQLITE_PreferBuiltin;
                   97043:   db->flags &= ~(SQLITE_ForeignKeys | SQLITE_ReverseOrder);
                   97044:   db->xTrace = 0;
                   97045: 
                   97046:   pMain = db->aDb[0].pBt;
                   97047:   isMemDb = sqlite3PagerIsMemdb(sqlite3BtreePager(pMain));
                   97048: 
                   97049:   /* Attach the temporary database as 'vacuum_db'. The synchronous pragma
                   97050:   ** can be set to 'off' for this file, as it is not recovered if a crash
                   97051:   ** occurs anyway. The integrity of the database is maintained by a
                   97052:   ** (possibly synchronous) transaction opened on the main database before
                   97053:   ** sqlite3BtreeCopyFile() is called.
                   97054:   **
                   97055:   ** An optimisation would be to use a non-journaled pager.
                   97056:   ** (Later:) I tried setting "PRAGMA vacuum_db.journal_mode=OFF" but
                   97057:   ** that actually made the VACUUM run slower.  Very little journalling
                   97058:   ** actually occurs when doing a vacuum since the vacuum_db is initially
                   97059:   ** empty.  Only the journal header is written.  Apparently it takes more
                   97060:   ** time to parse and run the PRAGMA to turn journalling off than it does
                   97061:   ** to write the journal header file.
                   97062:   */
                   97063:   nDb = db->nDb;
                   97064:   if( sqlite3TempInMemory(db) ){
                   97065:     zSql = "ATTACH ':memory:' AS vacuum_db;";
                   97066:   }else{
                   97067:     zSql = "ATTACH '' AS vacuum_db;";
                   97068:   }
                   97069:   rc = execSql(db, pzErrMsg, zSql);
                   97070:   if( db->nDb>nDb ){
                   97071:     pDb = &db->aDb[db->nDb-1];
                   97072:     assert( strcmp(pDb->zName,"vacuum_db")==0 );
                   97073:   }
                   97074:   if( rc!=SQLITE_OK ) goto end_of_vacuum;
                   97075:   pTemp = db->aDb[db->nDb-1].pBt;
                   97076: 
                   97077:   /* The call to execSql() to attach the temp database has left the file
                   97078:   ** locked (as there was more than one active statement when the transaction
                   97079:   ** to read the schema was concluded. Unlock it here so that this doesn't
                   97080:   ** cause problems for the call to BtreeSetPageSize() below.  */
                   97081:   sqlite3BtreeCommit(pTemp);
                   97082: 
                   97083:   nRes = sqlite3BtreeGetReserve(pMain);
                   97084: 
                   97085:   /* A VACUUM cannot change the pagesize of an encrypted database. */
                   97086: #ifdef SQLITE_HAS_CODEC
                   97087:   if( db->nextPagesize ){
                   97088:     extern void sqlite3CodecGetKey(sqlite3*, int, void**, int*);
                   97089:     int nKey;
                   97090:     char *zKey;
                   97091:     sqlite3CodecGetKey(db, 0, (void**)&zKey, &nKey);
                   97092:     if( nKey ) db->nextPagesize = 0;
                   97093:   }
                   97094: #endif
                   97095: 
                   97096:   /* Do not attempt to change the page size for a WAL database */
                   97097:   if( sqlite3PagerGetJournalMode(sqlite3BtreePager(pMain))
                   97098:                                                ==PAGER_JOURNALMODE_WAL ){
                   97099:     db->nextPagesize = 0;
                   97100:   }
                   97101: 
                   97102:   if( sqlite3BtreeSetPageSize(pTemp, sqlite3BtreeGetPageSize(pMain), nRes, 0)
                   97103:    || (!isMemDb && sqlite3BtreeSetPageSize(pTemp, db->nextPagesize, nRes, 0))
                   97104:    || NEVER(db->mallocFailed)
                   97105:   ){
                   97106:     rc = SQLITE_NOMEM;
                   97107:     goto end_of_vacuum;
                   97108:   }
                   97109:   rc = execSql(db, pzErrMsg, "PRAGMA vacuum_db.synchronous=OFF");
                   97110:   if( rc!=SQLITE_OK ){
                   97111:     goto end_of_vacuum;
                   97112:   }
                   97113: 
                   97114: #ifndef SQLITE_OMIT_AUTOVACUUM
                   97115:   sqlite3BtreeSetAutoVacuum(pTemp, db->nextAutovac>=0 ? db->nextAutovac :
                   97116:                                            sqlite3BtreeGetAutoVacuum(pMain));
                   97117: #endif
                   97118: 
                   97119:   /* Begin a transaction */
                   97120:   rc = execSql(db, pzErrMsg, "BEGIN EXCLUSIVE;");
                   97121:   if( rc!=SQLITE_OK ) goto end_of_vacuum;
                   97122: 
                   97123:   /* Query the schema of the main database. Create a mirror schema
                   97124:   ** in the temporary database.
                   97125:   */
                   97126:   rc = execExecSql(db, pzErrMsg,
                   97127:       "SELECT 'CREATE TABLE vacuum_db.' || substr(sql,14) "
                   97128:       "  FROM sqlite_master WHERE type='table' AND name!='sqlite_sequence'"
                   97129:       "   AND rootpage>0"
                   97130:   );
                   97131:   if( rc!=SQLITE_OK ) goto end_of_vacuum;
                   97132:   rc = execExecSql(db, pzErrMsg,
                   97133:       "SELECT 'CREATE INDEX vacuum_db.' || substr(sql,14)"
                   97134:       "  FROM sqlite_master WHERE sql LIKE 'CREATE INDEX %' ");
                   97135:   if( rc!=SQLITE_OK ) goto end_of_vacuum;
                   97136:   rc = execExecSql(db, pzErrMsg,
                   97137:       "SELECT 'CREATE UNIQUE INDEX vacuum_db.' || substr(sql,21) "
                   97138:       "  FROM sqlite_master WHERE sql LIKE 'CREATE UNIQUE INDEX %'");
                   97139:   if( rc!=SQLITE_OK ) goto end_of_vacuum;
                   97140: 
                   97141:   /* Loop through the tables in the main database. For each, do
                   97142:   ** an "INSERT INTO vacuum_db.xxx SELECT * FROM main.xxx;" to copy
                   97143:   ** the contents to the temporary database.
                   97144:   */
                   97145:   rc = execExecSql(db, pzErrMsg,
                   97146:       "SELECT 'INSERT INTO vacuum_db.' || quote(name) "
                   97147:       "|| ' SELECT * FROM main.' || quote(name) || ';'"
                   97148:       "FROM main.sqlite_master "
                   97149:       "WHERE type = 'table' AND name!='sqlite_sequence' "
                   97150:       "  AND rootpage>0"
                   97151:   );
                   97152:   if( rc!=SQLITE_OK ) goto end_of_vacuum;
                   97153: 
                   97154:   /* Copy over the sequence table
                   97155:   */
                   97156:   rc = execExecSql(db, pzErrMsg,
                   97157:       "SELECT 'DELETE FROM vacuum_db.' || quote(name) || ';' "
                   97158:       "FROM vacuum_db.sqlite_master WHERE name='sqlite_sequence' "
                   97159:   );
                   97160:   if( rc!=SQLITE_OK ) goto end_of_vacuum;
                   97161:   rc = execExecSql(db, pzErrMsg,
                   97162:       "SELECT 'INSERT INTO vacuum_db.' || quote(name) "
                   97163:       "|| ' SELECT * FROM main.' || quote(name) || ';' "
                   97164:       "FROM vacuum_db.sqlite_master WHERE name=='sqlite_sequence';"
                   97165:   );
                   97166:   if( rc!=SQLITE_OK ) goto end_of_vacuum;
                   97167: 
                   97168: 
                   97169:   /* Copy the triggers, views, and virtual tables from the main database
                   97170:   ** over to the temporary database.  None of these objects has any
                   97171:   ** associated storage, so all we have to do is copy their entries
                   97172:   ** from the SQLITE_MASTER table.
                   97173:   */
                   97174:   rc = execSql(db, pzErrMsg,
                   97175:       "INSERT INTO vacuum_db.sqlite_master "
                   97176:       "  SELECT type, name, tbl_name, rootpage, sql"
                   97177:       "    FROM main.sqlite_master"
                   97178:       "   WHERE type='view' OR type='trigger'"
                   97179:       "      OR (type='table' AND rootpage=0)"
                   97180:   );
                   97181:   if( rc ) goto end_of_vacuum;
                   97182: 
                   97183:   /* At this point, unless the main db was completely empty, there is now a
                   97184:   ** transaction open on the vacuum database, but not on the main database.
                   97185:   ** Open a btree level transaction on the main database. This allows a
                   97186:   ** call to sqlite3BtreeCopyFile(). The main database btree level
                   97187:   ** transaction is then committed, so the SQL level never knows it was
                   97188:   ** opened for writing. This way, the SQL transaction used to create the
                   97189:   ** temporary database never needs to be committed.
                   97190:   */
                   97191:   {
                   97192:     u32 meta;
                   97193:     int i;
                   97194: 
                   97195:     /* This array determines which meta meta values are preserved in the
                   97196:     ** vacuum.  Even entries are the meta value number and odd entries
                   97197:     ** are an increment to apply to the meta value after the vacuum.
                   97198:     ** The increment is used to increase the schema cookie so that other
                   97199:     ** connections to the same database will know to reread the schema.
                   97200:     */
                   97201:     static const unsigned char aCopy[] = {
                   97202:        BTREE_SCHEMA_VERSION,     1,  /* Add one to the old schema cookie */
                   97203:        BTREE_DEFAULT_CACHE_SIZE, 0,  /* Preserve the default page cache size */
                   97204:        BTREE_TEXT_ENCODING,      0,  /* Preserve the text encoding */
                   97205:        BTREE_USER_VERSION,       0,  /* Preserve the user version */
                   97206:     };
                   97207: 
                   97208:     assert( 1==sqlite3BtreeIsInTrans(pTemp) );
                   97209:     assert( 1==sqlite3BtreeIsInTrans(pMain) );
                   97210: 
                   97211:     /* Copy Btree meta values */
                   97212:     for(i=0; i<ArraySize(aCopy); i+=2){
                   97213:       /* GetMeta() and UpdateMeta() cannot fail in this context because
                   97214:       ** we already have page 1 loaded into cache and marked dirty. */
                   97215:       sqlite3BtreeGetMeta(pMain, aCopy[i], &meta);
                   97216:       rc = sqlite3BtreeUpdateMeta(pTemp, aCopy[i], meta+aCopy[i+1]);
                   97217:       if( NEVER(rc!=SQLITE_OK) ) goto end_of_vacuum;
                   97218:     }
                   97219: 
                   97220:     rc = sqlite3BtreeCopyFile(pMain, pTemp);
                   97221:     if( rc!=SQLITE_OK ) goto end_of_vacuum;
                   97222:     rc = sqlite3BtreeCommit(pTemp);
                   97223:     if( rc!=SQLITE_OK ) goto end_of_vacuum;
                   97224: #ifndef SQLITE_OMIT_AUTOVACUUM
                   97225:     sqlite3BtreeSetAutoVacuum(pMain, sqlite3BtreeGetAutoVacuum(pTemp));
                   97226: #endif
                   97227:   }
                   97228: 
                   97229:   assert( rc==SQLITE_OK );
                   97230:   rc = sqlite3BtreeSetPageSize(pMain, sqlite3BtreeGetPageSize(pTemp), nRes,1);
                   97231: 
                   97232: end_of_vacuum:
                   97233:   /* Restore the original value of db->flags */
                   97234:   db->flags = saved_flags;
                   97235:   db->nChange = saved_nChange;
                   97236:   db->nTotalChange = saved_nTotalChange;
                   97237:   db->xTrace = saved_xTrace;
                   97238:   sqlite3BtreeSetPageSize(pMain, -1, -1, 1);
                   97239: 
                   97240:   /* Currently there is an SQL level transaction open on the vacuum
                   97241:   ** database. No locks are held on any other files (since the main file
                   97242:   ** was committed at the btree level). So it safe to end the transaction
                   97243:   ** by manually setting the autoCommit flag to true and detaching the
                   97244:   ** vacuum database. The vacuum_db journal file is deleted when the pager
                   97245:   ** is closed by the DETACH.
                   97246:   */
                   97247:   db->autoCommit = 1;
                   97248: 
                   97249:   if( pDb ){
                   97250:     sqlite3BtreeClose(pDb->pBt);
                   97251:     pDb->pBt = 0;
                   97252:     pDb->pSchema = 0;
                   97253:   }
                   97254: 
                   97255:   /* This both clears the schemas and reduces the size of the db->aDb[]
                   97256:   ** array. */ 
                   97257:   sqlite3ResetInternalSchema(db, -1);
                   97258: 
                   97259:   return rc;
                   97260: }
                   97261: 
                   97262: #endif  /* SQLITE_OMIT_VACUUM && SQLITE_OMIT_ATTACH */
                   97263: 
                   97264: /************** End of vacuum.c **********************************************/
                   97265: /************** Begin file vtab.c ********************************************/
                   97266: /*
                   97267: ** 2006 June 10
                   97268: **
                   97269: ** The author disclaims copyright to this source code.  In place of
                   97270: ** a legal notice, here is a blessing:
                   97271: **
                   97272: **    May you do good and not evil.
                   97273: **    May you find forgiveness for yourself and forgive others.
                   97274: **    May you share freely, never taking more than you give.
                   97275: **
                   97276: *************************************************************************
                   97277: ** This file contains code used to help implement virtual tables.
                   97278: */
                   97279: #ifndef SQLITE_OMIT_VIRTUALTABLE
                   97280: 
                   97281: /*
                   97282: ** Before a virtual table xCreate() or xConnect() method is invoked, the
                   97283: ** sqlite3.pVtabCtx member variable is set to point to an instance of
                   97284: ** this struct allocated on the stack. It is used by the implementation of 
                   97285: ** the sqlite3_declare_vtab() and sqlite3_vtab_config() APIs, both of which
                   97286: ** are invoked only from within xCreate and xConnect methods.
                   97287: */
                   97288: struct VtabCtx {
                   97289:   Table *pTab;
                   97290:   VTable *pVTable;
                   97291: };
                   97292: 
                   97293: /*
                   97294: ** The actual function that does the work of creating a new module.
                   97295: ** This function implements the sqlite3_create_module() and
                   97296: ** sqlite3_create_module_v2() interfaces.
                   97297: */
                   97298: static int createModule(
                   97299:   sqlite3 *db,                    /* Database in which module is registered */
                   97300:   const char *zName,              /* Name assigned to this module */
                   97301:   const sqlite3_module *pModule,  /* The definition of the module */
                   97302:   void *pAux,                     /* Context pointer for xCreate/xConnect */
                   97303:   void (*xDestroy)(void *)        /* Module destructor function */
                   97304: ){
                   97305:   int rc, nName;
                   97306:   Module *pMod;
                   97307: 
                   97308:   sqlite3_mutex_enter(db->mutex);
                   97309:   nName = sqlite3Strlen30(zName);
                   97310:   pMod = (Module *)sqlite3DbMallocRaw(db, sizeof(Module) + nName + 1);
                   97311:   if( pMod ){
                   97312:     Module *pDel;
                   97313:     char *zCopy = (char *)(&pMod[1]);
                   97314:     memcpy(zCopy, zName, nName+1);
                   97315:     pMod->zName = zCopy;
                   97316:     pMod->pModule = pModule;
                   97317:     pMod->pAux = pAux;
                   97318:     pMod->xDestroy = xDestroy;
                   97319:     pDel = (Module *)sqlite3HashInsert(&db->aModule, zCopy, nName, (void*)pMod);
                   97320:     if( pDel && pDel->xDestroy ){
                   97321:       sqlite3ResetInternalSchema(db, -1);
                   97322:       pDel->xDestroy(pDel->pAux);
                   97323:     }
                   97324:     sqlite3DbFree(db, pDel);
                   97325:     if( pDel==pMod ){
                   97326:       db->mallocFailed = 1;
                   97327:     }
                   97328:   }else if( xDestroy ){
                   97329:     xDestroy(pAux);
                   97330:   }
                   97331:   rc = sqlite3ApiExit(db, SQLITE_OK);
                   97332:   sqlite3_mutex_leave(db->mutex);
                   97333:   return rc;
                   97334: }
                   97335: 
                   97336: 
                   97337: /*
                   97338: ** External API function used to create a new virtual-table module.
                   97339: */
                   97340: SQLITE_API int sqlite3_create_module(
                   97341:   sqlite3 *db,                    /* Database in which module is registered */
                   97342:   const char *zName,              /* Name assigned to this module */
                   97343:   const sqlite3_module *pModule,  /* The definition of the module */
                   97344:   void *pAux                      /* Context pointer for xCreate/xConnect */
                   97345: ){
                   97346:   return createModule(db, zName, pModule, pAux, 0);
                   97347: }
                   97348: 
                   97349: /*
                   97350: ** External API function used to create a new virtual-table module.
                   97351: */
                   97352: SQLITE_API int sqlite3_create_module_v2(
                   97353:   sqlite3 *db,                    /* Database in which module is registered */
                   97354:   const char *zName,              /* Name assigned to this module */
                   97355:   const sqlite3_module *pModule,  /* The definition of the module */
                   97356:   void *pAux,                     /* Context pointer for xCreate/xConnect */
                   97357:   void (*xDestroy)(void *)        /* Module destructor function */
                   97358: ){
                   97359:   return createModule(db, zName, pModule, pAux, xDestroy);
                   97360: }
                   97361: 
                   97362: /*
                   97363: ** Lock the virtual table so that it cannot be disconnected.
                   97364: ** Locks nest.  Every lock should have a corresponding unlock.
                   97365: ** If an unlock is omitted, resources leaks will occur.  
                   97366: **
                   97367: ** If a disconnect is attempted while a virtual table is locked,
                   97368: ** the disconnect is deferred until all locks have been removed.
                   97369: */
                   97370: SQLITE_PRIVATE void sqlite3VtabLock(VTable *pVTab){
                   97371:   pVTab->nRef++;
                   97372: }
                   97373: 
                   97374: 
                   97375: /*
                   97376: ** pTab is a pointer to a Table structure representing a virtual-table.
                   97377: ** Return a pointer to the VTable object used by connection db to access 
                   97378: ** this virtual-table, if one has been created, or NULL otherwise.
                   97379: */
                   97380: SQLITE_PRIVATE VTable *sqlite3GetVTable(sqlite3 *db, Table *pTab){
                   97381:   VTable *pVtab;
                   97382:   assert( IsVirtual(pTab) );
                   97383:   for(pVtab=pTab->pVTable; pVtab && pVtab->db!=db; pVtab=pVtab->pNext);
                   97384:   return pVtab;
                   97385: }
                   97386: 
                   97387: /*
                   97388: ** Decrement the ref-count on a virtual table object. When the ref-count
                   97389: ** reaches zero, call the xDisconnect() method to delete the object.
                   97390: */
                   97391: SQLITE_PRIVATE void sqlite3VtabUnlock(VTable *pVTab){
                   97392:   sqlite3 *db = pVTab->db;
                   97393: 
                   97394:   assert( db );
                   97395:   assert( pVTab->nRef>0 );
                   97396:   assert( sqlite3SafetyCheckOk(db) );
                   97397: 
                   97398:   pVTab->nRef--;
                   97399:   if( pVTab->nRef==0 ){
                   97400:     sqlite3_vtab *p = pVTab->pVtab;
                   97401:     if( p ){
                   97402:       p->pModule->xDisconnect(p);
                   97403:     }
                   97404:     sqlite3DbFree(db, pVTab);
                   97405:   }
                   97406: }
                   97407: 
                   97408: /*
                   97409: ** Table p is a virtual table. This function moves all elements in the
                   97410: ** p->pVTable list to the sqlite3.pDisconnect lists of their associated
                   97411: ** database connections to be disconnected at the next opportunity. 
                   97412: ** Except, if argument db is not NULL, then the entry associated with
                   97413: ** connection db is left in the p->pVTable list.
                   97414: */
                   97415: static VTable *vtabDisconnectAll(sqlite3 *db, Table *p){
                   97416:   VTable *pRet = 0;
                   97417:   VTable *pVTable = p->pVTable;
                   97418:   p->pVTable = 0;
                   97419: 
                   97420:   /* Assert that the mutex (if any) associated with the BtShared database 
                   97421:   ** that contains table p is held by the caller. See header comments 
                   97422:   ** above function sqlite3VtabUnlockList() for an explanation of why
                   97423:   ** this makes it safe to access the sqlite3.pDisconnect list of any
                   97424:   ** database connection that may have an entry in the p->pVTable list.
                   97425:   */
                   97426:   assert( db==0 || sqlite3SchemaMutexHeld(db, 0, p->pSchema) );
                   97427: 
                   97428:   while( pVTable ){
                   97429:     sqlite3 *db2 = pVTable->db;
                   97430:     VTable *pNext = pVTable->pNext;
                   97431:     assert( db2 );
                   97432:     if( db2==db ){
                   97433:       pRet = pVTable;
                   97434:       p->pVTable = pRet;
                   97435:       pRet->pNext = 0;
                   97436:     }else{
                   97437:       pVTable->pNext = db2->pDisconnect;
                   97438:       db2->pDisconnect = pVTable;
                   97439:     }
                   97440:     pVTable = pNext;
                   97441:   }
                   97442: 
                   97443:   assert( !db || pRet );
                   97444:   return pRet;
                   97445: }
                   97446: 
                   97447: 
                   97448: /*
                   97449: ** Disconnect all the virtual table objects in the sqlite3.pDisconnect list.
                   97450: **
                   97451: ** This function may only be called when the mutexes associated with all
                   97452: ** shared b-tree databases opened using connection db are held by the 
                   97453: ** caller. This is done to protect the sqlite3.pDisconnect list. The
                   97454: ** sqlite3.pDisconnect list is accessed only as follows:
                   97455: **
                   97456: **   1) By this function. In this case, all BtShared mutexes and the mutex
                   97457: **      associated with the database handle itself must be held.
                   97458: **
                   97459: **   2) By function vtabDisconnectAll(), when it adds a VTable entry to
                   97460: **      the sqlite3.pDisconnect list. In this case either the BtShared mutex
                   97461: **      associated with the database the virtual table is stored in is held
                   97462: **      or, if the virtual table is stored in a non-sharable database, then
                   97463: **      the database handle mutex is held.
                   97464: **
                   97465: ** As a result, a sqlite3.pDisconnect cannot be accessed simultaneously 
                   97466: ** by multiple threads. It is thread-safe.
                   97467: */
                   97468: SQLITE_PRIVATE void sqlite3VtabUnlockList(sqlite3 *db){
                   97469:   VTable *p = db->pDisconnect;
                   97470:   db->pDisconnect = 0;
                   97471: 
                   97472:   assert( sqlite3BtreeHoldsAllMutexes(db) );
                   97473:   assert( sqlite3_mutex_held(db->mutex) );
                   97474: 
                   97475:   if( p ){
                   97476:     sqlite3ExpirePreparedStatements(db);
                   97477:     do {
                   97478:       VTable *pNext = p->pNext;
                   97479:       sqlite3VtabUnlock(p);
                   97480:       p = pNext;
                   97481:     }while( p );
                   97482:   }
                   97483: }
                   97484: 
                   97485: /*
                   97486: ** Clear any and all virtual-table information from the Table record.
                   97487: ** This routine is called, for example, just before deleting the Table
                   97488: ** record.
                   97489: **
                   97490: ** Since it is a virtual-table, the Table structure contains a pointer
                   97491: ** to the head of a linked list of VTable structures. Each VTable 
                   97492: ** structure is associated with a single sqlite3* user of the schema.
                   97493: ** The reference count of the VTable structure associated with database 
                   97494: ** connection db is decremented immediately (which may lead to the 
                   97495: ** structure being xDisconnected and free). Any other VTable structures
                   97496: ** in the list are moved to the sqlite3.pDisconnect list of the associated 
                   97497: ** database connection.
                   97498: */
                   97499: SQLITE_PRIVATE void sqlite3VtabClear(sqlite3 *db, Table *p){
                   97500:   if( !db || db->pnBytesFreed==0 ) vtabDisconnectAll(0, p);
                   97501:   if( p->azModuleArg ){
                   97502:     int i;
                   97503:     for(i=0; i<p->nModuleArg; i++){
                   97504:       sqlite3DbFree(db, p->azModuleArg[i]);
                   97505:     }
                   97506:     sqlite3DbFree(db, p->azModuleArg);
                   97507:   }
                   97508: }
                   97509: 
                   97510: /*
                   97511: ** Add a new module argument to pTable->azModuleArg[].
                   97512: ** The string is not copied - the pointer is stored.  The
                   97513: ** string will be freed automatically when the table is
                   97514: ** deleted.
                   97515: */
                   97516: static void addModuleArgument(sqlite3 *db, Table *pTable, char *zArg){
                   97517:   int i = pTable->nModuleArg++;
                   97518:   int nBytes = sizeof(char *)*(1+pTable->nModuleArg);
                   97519:   char **azModuleArg;
                   97520:   azModuleArg = sqlite3DbRealloc(db, pTable->azModuleArg, nBytes);
                   97521:   if( azModuleArg==0 ){
                   97522:     int j;
                   97523:     for(j=0; j<i; j++){
                   97524:       sqlite3DbFree(db, pTable->azModuleArg[j]);
                   97525:     }
                   97526:     sqlite3DbFree(db, zArg);
                   97527:     sqlite3DbFree(db, pTable->azModuleArg);
                   97528:     pTable->nModuleArg = 0;
                   97529:   }else{
                   97530:     azModuleArg[i] = zArg;
                   97531:     azModuleArg[i+1] = 0;
                   97532:   }
                   97533:   pTable->azModuleArg = azModuleArg;
                   97534: }
                   97535: 
                   97536: /*
                   97537: ** The parser calls this routine when it first sees a CREATE VIRTUAL TABLE
                   97538: ** statement.  The module name has been parsed, but the optional list
                   97539: ** of parameters that follow the module name are still pending.
                   97540: */
                   97541: SQLITE_PRIVATE void sqlite3VtabBeginParse(
                   97542:   Parse *pParse,        /* Parsing context */
                   97543:   Token *pName1,        /* Name of new table, or database name */
                   97544:   Token *pName2,        /* Name of new table or NULL */
                   97545:   Token *pModuleName    /* Name of the module for the virtual table */
                   97546: ){
                   97547:   int iDb;              /* The database the table is being created in */
                   97548:   Table *pTable;        /* The new virtual table */
                   97549:   sqlite3 *db;          /* Database connection */
                   97550: 
                   97551:   sqlite3StartTable(pParse, pName1, pName2, 0, 0, 1, 0);
                   97552:   pTable = pParse->pNewTable;
                   97553:   if( pTable==0 ) return;
                   97554:   assert( 0==pTable->pIndex );
                   97555: 
                   97556:   db = pParse->db;
                   97557:   iDb = sqlite3SchemaToIndex(db, pTable->pSchema);
                   97558:   assert( iDb>=0 );
                   97559: 
                   97560:   pTable->tabFlags |= TF_Virtual;
                   97561:   pTable->nModuleArg = 0;
                   97562:   addModuleArgument(db, pTable, sqlite3NameFromToken(db, pModuleName));
                   97563:   addModuleArgument(db, pTable, sqlite3DbStrDup(db, db->aDb[iDb].zName));
                   97564:   addModuleArgument(db, pTable, sqlite3DbStrDup(db, pTable->zName));
                   97565:   pParse->sNameToken.n = (int)(&pModuleName->z[pModuleName->n] - pName1->z);
                   97566: 
                   97567: #ifndef SQLITE_OMIT_AUTHORIZATION
                   97568:   /* Creating a virtual table invokes the authorization callback twice.
                   97569:   ** The first invocation, to obtain permission to INSERT a row into the
                   97570:   ** sqlite_master table, has already been made by sqlite3StartTable().
                   97571:   ** The second call, to obtain permission to create the table, is made now.
                   97572:   */
                   97573:   if( pTable->azModuleArg ){
                   97574:     sqlite3AuthCheck(pParse, SQLITE_CREATE_VTABLE, pTable->zName, 
                   97575:             pTable->azModuleArg[0], pParse->db->aDb[iDb].zName);
                   97576:   }
                   97577: #endif
                   97578: }
                   97579: 
                   97580: /*
                   97581: ** This routine takes the module argument that has been accumulating
                   97582: ** in pParse->zArg[] and appends it to the list of arguments on the
                   97583: ** virtual table currently under construction in pParse->pTable.
                   97584: */
                   97585: static void addArgumentToVtab(Parse *pParse){
                   97586:   if( pParse->sArg.z && ALWAYS(pParse->pNewTable) ){
                   97587:     const char *z = (const char*)pParse->sArg.z;
                   97588:     int n = pParse->sArg.n;
                   97589:     sqlite3 *db = pParse->db;
                   97590:     addModuleArgument(db, pParse->pNewTable, sqlite3DbStrNDup(db, z, n));
                   97591:   }
                   97592: }
                   97593: 
                   97594: /*
                   97595: ** The parser calls this routine after the CREATE VIRTUAL TABLE statement
                   97596: ** has been completely parsed.
                   97597: */
                   97598: SQLITE_PRIVATE void sqlite3VtabFinishParse(Parse *pParse, Token *pEnd){
                   97599:   Table *pTab = pParse->pNewTable;  /* The table being constructed */
                   97600:   sqlite3 *db = pParse->db;         /* The database connection */
                   97601: 
                   97602:   if( pTab==0 ) return;
                   97603:   addArgumentToVtab(pParse);
                   97604:   pParse->sArg.z = 0;
                   97605:   if( pTab->nModuleArg<1 ) return;
                   97606:   
                   97607:   /* If the CREATE VIRTUAL TABLE statement is being entered for the
                   97608:   ** first time (in other words if the virtual table is actually being
                   97609:   ** created now instead of just being read out of sqlite_master) then
                   97610:   ** do additional initialization work and store the statement text
                   97611:   ** in the sqlite_master table.
                   97612:   */
                   97613:   if( !db->init.busy ){
                   97614:     char *zStmt;
                   97615:     char *zWhere;
                   97616:     int iDb;
                   97617:     Vdbe *v;
                   97618: 
                   97619:     /* Compute the complete text of the CREATE VIRTUAL TABLE statement */
                   97620:     if( pEnd ){
                   97621:       pParse->sNameToken.n = (int)(pEnd->z - pParse->sNameToken.z) + pEnd->n;
                   97622:     }
                   97623:     zStmt = sqlite3MPrintf(db, "CREATE VIRTUAL TABLE %T", &pParse->sNameToken);
                   97624: 
                   97625:     /* A slot for the record has already been allocated in the 
                   97626:     ** SQLITE_MASTER table.  We just need to update that slot with all
                   97627:     ** the information we've collected.  
                   97628:     **
                   97629:     ** The VM register number pParse->regRowid holds the rowid of an
                   97630:     ** entry in the sqlite_master table tht was created for this vtab
                   97631:     ** by sqlite3StartTable().
                   97632:     */
                   97633:     iDb = sqlite3SchemaToIndex(db, pTab->pSchema);
                   97634:     sqlite3NestedParse(pParse,
                   97635:       "UPDATE %Q.%s "
                   97636:          "SET type='table', name=%Q, tbl_name=%Q, rootpage=0, sql=%Q "
                   97637:        "WHERE rowid=#%d",
                   97638:       db->aDb[iDb].zName, SCHEMA_TABLE(iDb),
                   97639:       pTab->zName,
                   97640:       pTab->zName,
                   97641:       zStmt,
                   97642:       pParse->regRowid
                   97643:     );
                   97644:     sqlite3DbFree(db, zStmt);
                   97645:     v = sqlite3GetVdbe(pParse);
                   97646:     sqlite3ChangeCookie(pParse, iDb);
                   97647: 
                   97648:     sqlite3VdbeAddOp2(v, OP_Expire, 0, 0);
                   97649:     zWhere = sqlite3MPrintf(db, "name='%q' AND type='table'", pTab->zName);
                   97650:     sqlite3VdbeAddParseSchemaOp(v, iDb, zWhere);
                   97651:     sqlite3VdbeAddOp4(v, OP_VCreate, iDb, 0, 0, 
                   97652:                          pTab->zName, sqlite3Strlen30(pTab->zName) + 1);
                   97653:   }
                   97654: 
                   97655:   /* If we are rereading the sqlite_master table create the in-memory
                   97656:   ** record of the table. The xConnect() method is not called until
                   97657:   ** the first time the virtual table is used in an SQL statement. This
                   97658:   ** allows a schema that contains virtual tables to be loaded before
                   97659:   ** the required virtual table implementations are registered.  */
                   97660:   else {
                   97661:     Table *pOld;
                   97662:     Schema *pSchema = pTab->pSchema;
                   97663:     const char *zName = pTab->zName;
                   97664:     int nName = sqlite3Strlen30(zName);
                   97665:     assert( sqlite3SchemaMutexHeld(db, 0, pSchema) );
                   97666:     pOld = sqlite3HashInsert(&pSchema->tblHash, zName, nName, pTab);
                   97667:     if( pOld ){
                   97668:       db->mallocFailed = 1;
                   97669:       assert( pTab==pOld );  /* Malloc must have failed inside HashInsert() */
                   97670:       return;
                   97671:     }
                   97672:     pParse->pNewTable = 0;
                   97673:   }
                   97674: }
                   97675: 
                   97676: /*
                   97677: ** The parser calls this routine when it sees the first token
                   97678: ** of an argument to the module name in a CREATE VIRTUAL TABLE statement.
                   97679: */
                   97680: SQLITE_PRIVATE void sqlite3VtabArgInit(Parse *pParse){
                   97681:   addArgumentToVtab(pParse);
                   97682:   pParse->sArg.z = 0;
                   97683:   pParse->sArg.n = 0;
                   97684: }
                   97685: 
                   97686: /*
                   97687: ** The parser calls this routine for each token after the first token
                   97688: ** in an argument to the module name in a CREATE VIRTUAL TABLE statement.
                   97689: */
                   97690: SQLITE_PRIVATE void sqlite3VtabArgExtend(Parse *pParse, Token *p){
                   97691:   Token *pArg = &pParse->sArg;
                   97692:   if( pArg->z==0 ){
                   97693:     pArg->z = p->z;
                   97694:     pArg->n = p->n;
                   97695:   }else{
                   97696:     assert(pArg->z < p->z);
                   97697:     pArg->n = (int)(&p->z[p->n] - pArg->z);
                   97698:   }
                   97699: }
                   97700: 
                   97701: /*
                   97702: ** Invoke a virtual table constructor (either xCreate or xConnect). The
                   97703: ** pointer to the function to invoke is passed as the fourth parameter
                   97704: ** to this procedure.
                   97705: */
                   97706: static int vtabCallConstructor(
                   97707:   sqlite3 *db, 
                   97708:   Table *pTab,
                   97709:   Module *pMod,
                   97710:   int (*xConstruct)(sqlite3*,void*,int,const char*const*,sqlite3_vtab**,char**),
                   97711:   char **pzErr
                   97712: ){
                   97713:   VtabCtx sCtx;
                   97714:   VTable *pVTable;
                   97715:   int rc;
                   97716:   const char *const*azArg = (const char *const*)pTab->azModuleArg;
                   97717:   int nArg = pTab->nModuleArg;
                   97718:   char *zErr = 0;
                   97719:   char *zModuleName = sqlite3MPrintf(db, "%s", pTab->zName);
                   97720: 
                   97721:   if( !zModuleName ){
                   97722:     return SQLITE_NOMEM;
                   97723:   }
                   97724: 
                   97725:   pVTable = sqlite3DbMallocZero(db, sizeof(VTable));
                   97726:   if( !pVTable ){
                   97727:     sqlite3DbFree(db, zModuleName);
                   97728:     return SQLITE_NOMEM;
                   97729:   }
                   97730:   pVTable->db = db;
                   97731:   pVTable->pMod = pMod;
                   97732: 
                   97733:   /* Invoke the virtual table constructor */
                   97734:   assert( &db->pVtabCtx );
                   97735:   assert( xConstruct );
                   97736:   sCtx.pTab = pTab;
                   97737:   sCtx.pVTable = pVTable;
                   97738:   db->pVtabCtx = &sCtx;
                   97739:   rc = xConstruct(db, pMod->pAux, nArg, azArg, &pVTable->pVtab, &zErr);
                   97740:   db->pVtabCtx = 0;
                   97741:   if( rc==SQLITE_NOMEM ) db->mallocFailed = 1;
                   97742: 
                   97743:   if( SQLITE_OK!=rc ){
                   97744:     if( zErr==0 ){
                   97745:       *pzErr = sqlite3MPrintf(db, "vtable constructor failed: %s", zModuleName);
                   97746:     }else {
                   97747:       *pzErr = sqlite3MPrintf(db, "%s", zErr);
                   97748:       sqlite3_free(zErr);
                   97749:     }
                   97750:     sqlite3DbFree(db, pVTable);
                   97751:   }else if( ALWAYS(pVTable->pVtab) ){
                   97752:     /* Justification of ALWAYS():  A correct vtab constructor must allocate
                   97753:     ** the sqlite3_vtab object if successful.  */
                   97754:     pVTable->pVtab->pModule = pMod->pModule;
                   97755:     pVTable->nRef = 1;
                   97756:     if( sCtx.pTab ){
                   97757:       const char *zFormat = "vtable constructor did not declare schema: %s";
                   97758:       *pzErr = sqlite3MPrintf(db, zFormat, pTab->zName);
                   97759:       sqlite3VtabUnlock(pVTable);
                   97760:       rc = SQLITE_ERROR;
                   97761:     }else{
                   97762:       int iCol;
                   97763:       /* If everything went according to plan, link the new VTable structure
                   97764:       ** into the linked list headed by pTab->pVTable. Then loop through the 
                   97765:       ** columns of the table to see if any of them contain the token "hidden".
                   97766:       ** If so, set the Column.isHidden flag and remove the token from
                   97767:       ** the type string.  */
                   97768:       pVTable->pNext = pTab->pVTable;
                   97769:       pTab->pVTable = pVTable;
                   97770: 
                   97771:       for(iCol=0; iCol<pTab->nCol; iCol++){
                   97772:         char *zType = pTab->aCol[iCol].zType;
                   97773:         int nType;
                   97774:         int i = 0;
                   97775:         if( !zType ) continue;
                   97776:         nType = sqlite3Strlen30(zType);
                   97777:         if( sqlite3StrNICmp("hidden", zType, 6)||(zType[6] && zType[6]!=' ') ){
                   97778:           for(i=0; i<nType; i++){
                   97779:             if( (0==sqlite3StrNICmp(" hidden", &zType[i], 7))
                   97780:              && (zType[i+7]=='\0' || zType[i+7]==' ')
                   97781:             ){
                   97782:               i++;
                   97783:               break;
                   97784:             }
                   97785:           }
                   97786:         }
                   97787:         if( i<nType ){
                   97788:           int j;
                   97789:           int nDel = 6 + (zType[i+6] ? 1 : 0);
                   97790:           for(j=i; (j+nDel)<=nType; j++){
                   97791:             zType[j] = zType[j+nDel];
                   97792:           }
                   97793:           if( zType[i]=='\0' && i>0 ){
                   97794:             assert(zType[i-1]==' ');
                   97795:             zType[i-1] = '\0';
                   97796:           }
                   97797:           pTab->aCol[iCol].isHidden = 1;
                   97798:         }
                   97799:       }
                   97800:     }
                   97801:   }
                   97802: 
                   97803:   sqlite3DbFree(db, zModuleName);
                   97804:   return rc;
                   97805: }
                   97806: 
                   97807: /*
                   97808: ** This function is invoked by the parser to call the xConnect() method
                   97809: ** of the virtual table pTab. If an error occurs, an error code is returned 
                   97810: ** and an error left in pParse.
                   97811: **
                   97812: ** This call is a no-op if table pTab is not a virtual table.
                   97813: */
                   97814: SQLITE_PRIVATE int sqlite3VtabCallConnect(Parse *pParse, Table *pTab){
                   97815:   sqlite3 *db = pParse->db;
                   97816:   const char *zMod;
                   97817:   Module *pMod;
                   97818:   int rc;
                   97819: 
                   97820:   assert( pTab );
                   97821:   if( (pTab->tabFlags & TF_Virtual)==0 || sqlite3GetVTable(db, pTab) ){
                   97822:     return SQLITE_OK;
                   97823:   }
                   97824: 
                   97825:   /* Locate the required virtual table module */
                   97826:   zMod = pTab->azModuleArg[0];
                   97827:   pMod = (Module*)sqlite3HashFind(&db->aModule, zMod, sqlite3Strlen30(zMod));
                   97828: 
                   97829:   if( !pMod ){
                   97830:     const char *zModule = pTab->azModuleArg[0];
                   97831:     sqlite3ErrorMsg(pParse, "no such module: %s", zModule);
                   97832:     rc = SQLITE_ERROR;
                   97833:   }else{
                   97834:     char *zErr = 0;
                   97835:     rc = vtabCallConstructor(db, pTab, pMod, pMod->pModule->xConnect, &zErr);
                   97836:     if( rc!=SQLITE_OK ){
                   97837:       sqlite3ErrorMsg(pParse, "%s", zErr);
                   97838:     }
                   97839:     sqlite3DbFree(db, zErr);
                   97840:   }
                   97841: 
                   97842:   return rc;
                   97843: }
                   97844: /*
                   97845: ** Grow the db->aVTrans[] array so that there is room for at least one
                   97846: ** more v-table. Return SQLITE_NOMEM if a malloc fails, or SQLITE_OK otherwise.
                   97847: */
                   97848: static int growVTrans(sqlite3 *db){
                   97849:   const int ARRAY_INCR = 5;
                   97850: 
                   97851:   /* Grow the sqlite3.aVTrans array if required */
                   97852:   if( (db->nVTrans%ARRAY_INCR)==0 ){
                   97853:     VTable **aVTrans;
                   97854:     int nBytes = sizeof(sqlite3_vtab *) * (db->nVTrans + ARRAY_INCR);
                   97855:     aVTrans = sqlite3DbRealloc(db, (void *)db->aVTrans, nBytes);
                   97856:     if( !aVTrans ){
                   97857:       return SQLITE_NOMEM;
                   97858:     }
                   97859:     memset(&aVTrans[db->nVTrans], 0, sizeof(sqlite3_vtab *)*ARRAY_INCR);
                   97860:     db->aVTrans = aVTrans;
                   97861:   }
                   97862: 
                   97863:   return SQLITE_OK;
                   97864: }
                   97865: 
                   97866: /*
                   97867: ** Add the virtual table pVTab to the array sqlite3.aVTrans[]. Space should
                   97868: ** have already been reserved using growVTrans().
                   97869: */
                   97870: static void addToVTrans(sqlite3 *db, VTable *pVTab){
                   97871:   /* Add pVtab to the end of sqlite3.aVTrans */
                   97872:   db->aVTrans[db->nVTrans++] = pVTab;
                   97873:   sqlite3VtabLock(pVTab);
                   97874: }
                   97875: 
                   97876: /*
                   97877: ** This function is invoked by the vdbe to call the xCreate method
                   97878: ** of the virtual table named zTab in database iDb. 
                   97879: **
                   97880: ** If an error occurs, *pzErr is set to point an an English language
                   97881: ** description of the error and an SQLITE_XXX error code is returned.
                   97882: ** In this case the caller must call sqlite3DbFree(db, ) on *pzErr.
                   97883: */
                   97884: SQLITE_PRIVATE int sqlite3VtabCallCreate(sqlite3 *db, int iDb, const char *zTab, char **pzErr){
                   97885:   int rc = SQLITE_OK;
                   97886:   Table *pTab;
                   97887:   Module *pMod;
                   97888:   const char *zMod;
                   97889: 
                   97890:   pTab = sqlite3FindTable(db, zTab, db->aDb[iDb].zName);
                   97891:   assert( pTab && (pTab->tabFlags & TF_Virtual)!=0 && !pTab->pVTable );
                   97892: 
                   97893:   /* Locate the required virtual table module */
                   97894:   zMod = pTab->azModuleArg[0];
                   97895:   pMod = (Module*)sqlite3HashFind(&db->aModule, zMod, sqlite3Strlen30(zMod));
                   97896: 
                   97897:   /* If the module has been registered and includes a Create method, 
                   97898:   ** invoke it now. If the module has not been registered, return an 
                   97899:   ** error. Otherwise, do nothing.
                   97900:   */
                   97901:   if( !pMod ){
                   97902:     *pzErr = sqlite3MPrintf(db, "no such module: %s", zMod);
                   97903:     rc = SQLITE_ERROR;
                   97904:   }else{
                   97905:     rc = vtabCallConstructor(db, pTab, pMod, pMod->pModule->xCreate, pzErr);
                   97906:   }
                   97907: 
                   97908:   /* Justification of ALWAYS():  The xConstructor method is required to
                   97909:   ** create a valid sqlite3_vtab if it returns SQLITE_OK. */
                   97910:   if( rc==SQLITE_OK && ALWAYS(sqlite3GetVTable(db, pTab)) ){
                   97911:     rc = growVTrans(db);
                   97912:     if( rc==SQLITE_OK ){
                   97913:       addToVTrans(db, sqlite3GetVTable(db, pTab));
                   97914:     }
                   97915:   }
                   97916: 
                   97917:   return rc;
                   97918: }
                   97919: 
                   97920: /*
                   97921: ** This function is used to set the schema of a virtual table.  It is only
                   97922: ** valid to call this function from within the xCreate() or xConnect() of a
                   97923: ** virtual table module.
                   97924: */
                   97925: SQLITE_API int sqlite3_declare_vtab(sqlite3 *db, const char *zCreateTable){
                   97926:   Parse *pParse;
                   97927: 
                   97928:   int rc = SQLITE_OK;
                   97929:   Table *pTab;
                   97930:   char *zErr = 0;
                   97931: 
                   97932:   sqlite3_mutex_enter(db->mutex);
                   97933:   if( !db->pVtabCtx || !(pTab = db->pVtabCtx->pTab) ){
                   97934:     sqlite3Error(db, SQLITE_MISUSE, 0);
                   97935:     sqlite3_mutex_leave(db->mutex);
                   97936:     return SQLITE_MISUSE_BKPT;
                   97937:   }
                   97938:   assert( (pTab->tabFlags & TF_Virtual)!=0 );
                   97939: 
                   97940:   pParse = sqlite3StackAllocZero(db, sizeof(*pParse));
                   97941:   if( pParse==0 ){
                   97942:     rc = SQLITE_NOMEM;
                   97943:   }else{
                   97944:     pParse->declareVtab = 1;
                   97945:     pParse->db = db;
                   97946:     pParse->nQueryLoop = 1;
                   97947:   
                   97948:     if( SQLITE_OK==sqlite3RunParser(pParse, zCreateTable, &zErr) 
                   97949:      && pParse->pNewTable
                   97950:      && !db->mallocFailed
                   97951:      && !pParse->pNewTable->pSelect
                   97952:      && (pParse->pNewTable->tabFlags & TF_Virtual)==0
                   97953:     ){
                   97954:       if( !pTab->aCol ){
                   97955:         pTab->aCol = pParse->pNewTable->aCol;
                   97956:         pTab->nCol = pParse->pNewTable->nCol;
                   97957:         pParse->pNewTable->nCol = 0;
                   97958:         pParse->pNewTable->aCol = 0;
                   97959:       }
                   97960:       db->pVtabCtx->pTab = 0;
                   97961:     }else{
                   97962:       sqlite3Error(db, SQLITE_ERROR, (zErr ? "%s" : 0), zErr);
                   97963:       sqlite3DbFree(db, zErr);
                   97964:       rc = SQLITE_ERROR;
                   97965:     }
                   97966:     pParse->declareVtab = 0;
                   97967:   
                   97968:     if( pParse->pVdbe ){
                   97969:       sqlite3VdbeFinalize(pParse->pVdbe);
                   97970:     }
                   97971:     sqlite3DeleteTable(db, pParse->pNewTable);
                   97972:     sqlite3StackFree(db, pParse);
                   97973:   }
                   97974: 
                   97975:   assert( (rc&0xff)==rc );
                   97976:   rc = sqlite3ApiExit(db, rc);
                   97977:   sqlite3_mutex_leave(db->mutex);
                   97978:   return rc;
                   97979: }
                   97980: 
                   97981: /*
                   97982: ** This function is invoked by the vdbe to call the xDestroy method
                   97983: ** of the virtual table named zTab in database iDb. This occurs
                   97984: ** when a DROP TABLE is mentioned.
                   97985: **
                   97986: ** This call is a no-op if zTab is not a virtual table.
                   97987: */
                   97988: SQLITE_PRIVATE int sqlite3VtabCallDestroy(sqlite3 *db, int iDb, const char *zTab){
                   97989:   int rc = SQLITE_OK;
                   97990:   Table *pTab;
                   97991: 
                   97992:   pTab = sqlite3FindTable(db, zTab, db->aDb[iDb].zName);
                   97993:   if( ALWAYS(pTab!=0 && pTab->pVTable!=0) ){
                   97994:     VTable *p = vtabDisconnectAll(db, pTab);
                   97995: 
                   97996:     assert( rc==SQLITE_OK );
                   97997:     rc = p->pMod->pModule->xDestroy(p->pVtab);
                   97998: 
                   97999:     /* Remove the sqlite3_vtab* from the aVTrans[] array, if applicable */
                   98000:     if( rc==SQLITE_OK ){
                   98001:       assert( pTab->pVTable==p && p->pNext==0 );
                   98002:       p->pVtab = 0;
                   98003:       pTab->pVTable = 0;
                   98004:       sqlite3VtabUnlock(p);
                   98005:     }
                   98006:   }
                   98007: 
                   98008:   return rc;
                   98009: }
                   98010: 
                   98011: /*
                   98012: ** This function invokes either the xRollback or xCommit method
                   98013: ** of each of the virtual tables in the sqlite3.aVTrans array. The method
                   98014: ** called is identified by the second argument, "offset", which is
                   98015: ** the offset of the method to call in the sqlite3_module structure.
                   98016: **
                   98017: ** The array is cleared after invoking the callbacks. 
                   98018: */
                   98019: static void callFinaliser(sqlite3 *db, int offset){
                   98020:   int i;
                   98021:   if( db->aVTrans ){
                   98022:     for(i=0; i<db->nVTrans; i++){
                   98023:       VTable *pVTab = db->aVTrans[i];
                   98024:       sqlite3_vtab *p = pVTab->pVtab;
                   98025:       if( p ){
                   98026:         int (*x)(sqlite3_vtab *);
                   98027:         x = *(int (**)(sqlite3_vtab *))((char *)p->pModule + offset);
                   98028:         if( x ) x(p);
                   98029:       }
                   98030:       pVTab->iSavepoint = 0;
                   98031:       sqlite3VtabUnlock(pVTab);
                   98032:     }
                   98033:     sqlite3DbFree(db, db->aVTrans);
                   98034:     db->nVTrans = 0;
                   98035:     db->aVTrans = 0;
                   98036:   }
                   98037: }
                   98038: 
                   98039: /*
                   98040: ** Invoke the xSync method of all virtual tables in the sqlite3.aVTrans
                   98041: ** array. Return the error code for the first error that occurs, or
                   98042: ** SQLITE_OK if all xSync operations are successful.
                   98043: **
                   98044: ** Set *pzErrmsg to point to a buffer that should be released using 
                   98045: ** sqlite3DbFree() containing an error message, if one is available.
                   98046: */
                   98047: SQLITE_PRIVATE int sqlite3VtabSync(sqlite3 *db, char **pzErrmsg){
                   98048:   int i;
                   98049:   int rc = SQLITE_OK;
                   98050:   VTable **aVTrans = db->aVTrans;
                   98051: 
                   98052:   db->aVTrans = 0;
                   98053:   for(i=0; rc==SQLITE_OK && i<db->nVTrans; i++){
                   98054:     int (*x)(sqlite3_vtab *);
                   98055:     sqlite3_vtab *pVtab = aVTrans[i]->pVtab;
                   98056:     if( pVtab && (x = pVtab->pModule->xSync)!=0 ){
                   98057:       rc = x(pVtab);
                   98058:       sqlite3DbFree(db, *pzErrmsg);
                   98059:       *pzErrmsg = sqlite3DbStrDup(db, pVtab->zErrMsg);
                   98060:       sqlite3_free(pVtab->zErrMsg);
                   98061:     }
                   98062:   }
                   98063:   db->aVTrans = aVTrans;
                   98064:   return rc;
                   98065: }
                   98066: 
                   98067: /*
                   98068: ** Invoke the xRollback method of all virtual tables in the 
                   98069: ** sqlite3.aVTrans array. Then clear the array itself.
                   98070: */
                   98071: SQLITE_PRIVATE int sqlite3VtabRollback(sqlite3 *db){
                   98072:   callFinaliser(db, offsetof(sqlite3_module,xRollback));
                   98073:   return SQLITE_OK;
                   98074: }
                   98075: 
                   98076: /*
                   98077: ** Invoke the xCommit method of all virtual tables in the 
                   98078: ** sqlite3.aVTrans array. Then clear the array itself.
                   98079: */
                   98080: SQLITE_PRIVATE int sqlite3VtabCommit(sqlite3 *db){
                   98081:   callFinaliser(db, offsetof(sqlite3_module,xCommit));
                   98082:   return SQLITE_OK;
                   98083: }
                   98084: 
                   98085: /*
                   98086: ** If the virtual table pVtab supports the transaction interface
                   98087: ** (xBegin/xRollback/xCommit and optionally xSync) and a transaction is
                   98088: ** not currently open, invoke the xBegin method now.
                   98089: **
                   98090: ** If the xBegin call is successful, place the sqlite3_vtab pointer
                   98091: ** in the sqlite3.aVTrans array.
                   98092: */
                   98093: SQLITE_PRIVATE int sqlite3VtabBegin(sqlite3 *db, VTable *pVTab){
                   98094:   int rc = SQLITE_OK;
                   98095:   const sqlite3_module *pModule;
                   98096: 
                   98097:   /* Special case: If db->aVTrans is NULL and db->nVTrans is greater
                   98098:   ** than zero, then this function is being called from within a
                   98099:   ** virtual module xSync() callback. It is illegal to write to 
                   98100:   ** virtual module tables in this case, so return SQLITE_LOCKED.
                   98101:   */
                   98102:   if( sqlite3VtabInSync(db) ){
                   98103:     return SQLITE_LOCKED;
                   98104:   }
                   98105:   if( !pVTab ){
                   98106:     return SQLITE_OK;
                   98107:   } 
                   98108:   pModule = pVTab->pVtab->pModule;
                   98109: 
                   98110:   if( pModule->xBegin ){
                   98111:     int i;
                   98112: 
                   98113:     /* If pVtab is already in the aVTrans array, return early */
                   98114:     for(i=0; i<db->nVTrans; i++){
                   98115:       if( db->aVTrans[i]==pVTab ){
                   98116:         return SQLITE_OK;
                   98117:       }
                   98118:     }
                   98119: 
                   98120:     /* Invoke the xBegin method. If successful, add the vtab to the 
                   98121:     ** sqlite3.aVTrans[] array. */
                   98122:     rc = growVTrans(db);
                   98123:     if( rc==SQLITE_OK ){
                   98124:       rc = pModule->xBegin(pVTab->pVtab);
                   98125:       if( rc==SQLITE_OK ){
                   98126:         addToVTrans(db, pVTab);
                   98127:       }
                   98128:     }
                   98129:   }
                   98130:   return rc;
                   98131: }
                   98132: 
                   98133: /*
                   98134: ** Invoke either the xSavepoint, xRollbackTo or xRelease method of all
                   98135: ** virtual tables that currently have an open transaction. Pass iSavepoint
                   98136: ** as the second argument to the virtual table method invoked.
                   98137: **
                   98138: ** If op is SAVEPOINT_BEGIN, the xSavepoint method is invoked. If it is
                   98139: ** SAVEPOINT_ROLLBACK, the xRollbackTo method. Otherwise, if op is 
                   98140: ** SAVEPOINT_RELEASE, then the xRelease method of each virtual table with
                   98141: ** an open transaction is invoked.
                   98142: **
                   98143: ** If any virtual table method returns an error code other than SQLITE_OK, 
                   98144: ** processing is abandoned and the error returned to the caller of this
                   98145: ** function immediately. If all calls to virtual table methods are successful,
                   98146: ** SQLITE_OK is returned.
                   98147: */
                   98148: SQLITE_PRIVATE int sqlite3VtabSavepoint(sqlite3 *db, int op, int iSavepoint){
                   98149:   int rc = SQLITE_OK;
                   98150: 
                   98151:   assert( op==SAVEPOINT_RELEASE||op==SAVEPOINT_ROLLBACK||op==SAVEPOINT_BEGIN );
                   98152:   assert( iSavepoint>=0 );
                   98153:   if( db->aVTrans ){
                   98154:     int i;
                   98155:     for(i=0; rc==SQLITE_OK && i<db->nVTrans; i++){
                   98156:       VTable *pVTab = db->aVTrans[i];
                   98157:       const sqlite3_module *pMod = pVTab->pMod->pModule;
                   98158:       if( pMod->iVersion>=2 ){
                   98159:         int (*xMethod)(sqlite3_vtab *, int);
                   98160:         switch( op ){
                   98161:           case SAVEPOINT_BEGIN:
                   98162:             xMethod = pMod->xSavepoint;
                   98163:             pVTab->iSavepoint = iSavepoint+1;
                   98164:             break;
                   98165:           case SAVEPOINT_ROLLBACK:
                   98166:             xMethod = pMod->xRollbackTo;
                   98167:             break;
                   98168:           default:
                   98169:             xMethod = pMod->xRelease;
                   98170:             break;
                   98171:         }
                   98172:         if( xMethod && pVTab->iSavepoint>iSavepoint ){
                   98173:           rc = xMethod(db->aVTrans[i]->pVtab, iSavepoint);
                   98174:         }
                   98175:       }
                   98176:     }
                   98177:   }
                   98178:   return rc;
                   98179: }
                   98180: 
                   98181: /*
                   98182: ** The first parameter (pDef) is a function implementation.  The
                   98183: ** second parameter (pExpr) is the first argument to this function.
                   98184: ** If pExpr is a column in a virtual table, then let the virtual
                   98185: ** table implementation have an opportunity to overload the function.
                   98186: **
                   98187: ** This routine is used to allow virtual table implementations to
                   98188: ** overload MATCH, LIKE, GLOB, and REGEXP operators.
                   98189: **
                   98190: ** Return either the pDef argument (indicating no change) or a 
                   98191: ** new FuncDef structure that is marked as ephemeral using the
                   98192: ** SQLITE_FUNC_EPHEM flag.
                   98193: */
                   98194: SQLITE_PRIVATE FuncDef *sqlite3VtabOverloadFunction(
                   98195:   sqlite3 *db,    /* Database connection for reporting malloc problems */
                   98196:   FuncDef *pDef,  /* Function to possibly overload */
                   98197:   int nArg,       /* Number of arguments to the function */
                   98198:   Expr *pExpr     /* First argument to the function */
                   98199: ){
                   98200:   Table *pTab;
                   98201:   sqlite3_vtab *pVtab;
                   98202:   sqlite3_module *pMod;
                   98203:   void (*xFunc)(sqlite3_context*,int,sqlite3_value**) = 0;
                   98204:   void *pArg = 0;
                   98205:   FuncDef *pNew;
                   98206:   int rc = 0;
                   98207:   char *zLowerName;
                   98208:   unsigned char *z;
                   98209: 
                   98210: 
                   98211:   /* Check to see the left operand is a column in a virtual table */
                   98212:   if( NEVER(pExpr==0) ) return pDef;
                   98213:   if( pExpr->op!=TK_COLUMN ) return pDef;
                   98214:   pTab = pExpr->pTab;
                   98215:   if( NEVER(pTab==0) ) return pDef;
                   98216:   if( (pTab->tabFlags & TF_Virtual)==0 ) return pDef;
                   98217:   pVtab = sqlite3GetVTable(db, pTab)->pVtab;
                   98218:   assert( pVtab!=0 );
                   98219:   assert( pVtab->pModule!=0 );
                   98220:   pMod = (sqlite3_module *)pVtab->pModule;
                   98221:   if( pMod->xFindFunction==0 ) return pDef;
                   98222:  
                   98223:   /* Call the xFindFunction method on the virtual table implementation
                   98224:   ** to see if the implementation wants to overload this function 
                   98225:   */
                   98226:   zLowerName = sqlite3DbStrDup(db, pDef->zName);
                   98227:   if( zLowerName ){
                   98228:     for(z=(unsigned char*)zLowerName; *z; z++){
                   98229:       *z = sqlite3UpperToLower[*z];
                   98230:     }
                   98231:     rc = pMod->xFindFunction(pVtab, nArg, zLowerName, &xFunc, &pArg);
                   98232:     sqlite3DbFree(db, zLowerName);
                   98233:   }
                   98234:   if( rc==0 ){
                   98235:     return pDef;
                   98236:   }
                   98237: 
                   98238:   /* Create a new ephemeral function definition for the overloaded
                   98239:   ** function */
                   98240:   pNew = sqlite3DbMallocZero(db, sizeof(*pNew)
                   98241:                              + sqlite3Strlen30(pDef->zName) + 1);
                   98242:   if( pNew==0 ){
                   98243:     return pDef;
                   98244:   }
                   98245:   *pNew = *pDef;
                   98246:   pNew->zName = (char *)&pNew[1];
                   98247:   memcpy(pNew->zName, pDef->zName, sqlite3Strlen30(pDef->zName)+1);
                   98248:   pNew->xFunc = xFunc;
                   98249:   pNew->pUserData = pArg;
                   98250:   pNew->flags |= SQLITE_FUNC_EPHEM;
                   98251:   return pNew;
                   98252: }
                   98253: 
                   98254: /*
                   98255: ** Make sure virtual table pTab is contained in the pParse->apVirtualLock[]
                   98256: ** array so that an OP_VBegin will get generated for it.  Add pTab to the
                   98257: ** array if it is missing.  If pTab is already in the array, this routine
                   98258: ** is a no-op.
                   98259: */
                   98260: SQLITE_PRIVATE void sqlite3VtabMakeWritable(Parse *pParse, Table *pTab){
                   98261:   Parse *pToplevel = sqlite3ParseToplevel(pParse);
                   98262:   int i, n;
                   98263:   Table **apVtabLock;
                   98264: 
                   98265:   assert( IsVirtual(pTab) );
                   98266:   for(i=0; i<pToplevel->nVtabLock; i++){
                   98267:     if( pTab==pToplevel->apVtabLock[i] ) return;
                   98268:   }
                   98269:   n = (pToplevel->nVtabLock+1)*sizeof(pToplevel->apVtabLock[0]);
                   98270:   apVtabLock = sqlite3_realloc(pToplevel->apVtabLock, n);
                   98271:   if( apVtabLock ){
                   98272:     pToplevel->apVtabLock = apVtabLock;
                   98273:     pToplevel->apVtabLock[pToplevel->nVtabLock++] = pTab;
                   98274:   }else{
                   98275:     pToplevel->db->mallocFailed = 1;
                   98276:   }
                   98277: }
                   98278: 
                   98279: /*
                   98280: ** Return the ON CONFLICT resolution mode in effect for the virtual
                   98281: ** table update operation currently in progress.
                   98282: **
                   98283: ** The results of this routine are undefined unless it is called from
                   98284: ** within an xUpdate method.
                   98285: */
                   98286: SQLITE_API int sqlite3_vtab_on_conflict(sqlite3 *db){
                   98287:   static const unsigned char aMap[] = { 
                   98288:     SQLITE_ROLLBACK, SQLITE_ABORT, SQLITE_FAIL, SQLITE_IGNORE, SQLITE_REPLACE 
                   98289:   };
                   98290:   assert( OE_Rollback==1 && OE_Abort==2 && OE_Fail==3 );
                   98291:   assert( OE_Ignore==4 && OE_Replace==5 );
                   98292:   assert( db->vtabOnConflict>=1 && db->vtabOnConflict<=5 );
                   98293:   return (int)aMap[db->vtabOnConflict-1];
                   98294: }
                   98295: 
                   98296: /*
                   98297: ** Call from within the xCreate() or xConnect() methods to provide 
                   98298: ** the SQLite core with additional information about the behavior
                   98299: ** of the virtual table being implemented.
                   98300: */
                   98301: SQLITE_API int sqlite3_vtab_config(sqlite3 *db, int op, ...){
                   98302:   va_list ap;
                   98303:   int rc = SQLITE_OK;
                   98304: 
                   98305:   sqlite3_mutex_enter(db->mutex);
                   98306: 
                   98307:   va_start(ap, op);
                   98308:   switch( op ){
                   98309:     case SQLITE_VTAB_CONSTRAINT_SUPPORT: {
                   98310:       VtabCtx *p = db->pVtabCtx;
                   98311:       if( !p ){
                   98312:         rc = SQLITE_MISUSE_BKPT;
                   98313:       }else{
                   98314:         assert( p->pTab==0 || (p->pTab->tabFlags & TF_Virtual)!=0 );
                   98315:         p->pVTable->bConstraint = (u8)va_arg(ap, int);
                   98316:       }
                   98317:       break;
                   98318:     }
                   98319:     default:
                   98320:       rc = SQLITE_MISUSE_BKPT;
                   98321:       break;
                   98322:   }
                   98323:   va_end(ap);
                   98324: 
                   98325:   if( rc!=SQLITE_OK ) sqlite3Error(db, rc, 0);
                   98326:   sqlite3_mutex_leave(db->mutex);
                   98327:   return rc;
                   98328: }
                   98329: 
                   98330: #endif /* SQLITE_OMIT_VIRTUALTABLE */
                   98331: 
                   98332: /************** End of vtab.c ************************************************/
                   98333: /************** Begin file where.c *******************************************/
                   98334: /*
                   98335: ** 2001 September 15
                   98336: **
                   98337: ** The author disclaims copyright to this source code.  In place of
                   98338: ** a legal notice, here is a blessing:
                   98339: **
                   98340: **    May you do good and not evil.
                   98341: **    May you find forgiveness for yourself and forgive others.
                   98342: **    May you share freely, never taking more than you give.
                   98343: **
                   98344: *************************************************************************
                   98345: ** This module contains C code that generates VDBE code used to process
                   98346: ** the WHERE clause of SQL statements.  This module is responsible for
                   98347: ** generating the code that loops through a table looking for applicable
                   98348: ** rows.  Indices are selected and used to speed the search when doing
                   98349: ** so is applicable.  Because this module is responsible for selecting
                   98350: ** indices, you might also think of this module as the "query optimizer".
                   98351: */
                   98352: 
                   98353: 
                   98354: /*
                   98355: ** Trace output macros
                   98356: */
                   98357: #if defined(SQLITE_TEST) || defined(SQLITE_DEBUG)
                   98358: SQLITE_PRIVATE int sqlite3WhereTrace = 0;
                   98359: #endif
                   98360: #if defined(SQLITE_TEST) && defined(SQLITE_DEBUG)
                   98361: # define WHERETRACE(X)  if(sqlite3WhereTrace) sqlite3DebugPrintf X
                   98362: #else
                   98363: # define WHERETRACE(X)
                   98364: #endif
                   98365: 
                   98366: /* Forward reference
                   98367: */
                   98368: typedef struct WhereClause WhereClause;
                   98369: typedef struct WhereMaskSet WhereMaskSet;
                   98370: typedef struct WhereOrInfo WhereOrInfo;
                   98371: typedef struct WhereAndInfo WhereAndInfo;
                   98372: typedef struct WhereCost WhereCost;
                   98373: 
                   98374: /*
                   98375: ** The query generator uses an array of instances of this structure to
                   98376: ** help it analyze the subexpressions of the WHERE clause.  Each WHERE
                   98377: ** clause subexpression is separated from the others by AND operators,
                   98378: ** usually, or sometimes subexpressions separated by OR.
                   98379: **
                   98380: ** All WhereTerms are collected into a single WhereClause structure.  
                   98381: ** The following identity holds:
                   98382: **
                   98383: **        WhereTerm.pWC->a[WhereTerm.idx] == WhereTerm
                   98384: **
                   98385: ** When a term is of the form:
                   98386: **
                   98387: **              X <op> <expr>
                   98388: **
                   98389: ** where X is a column name and <op> is one of certain operators,
                   98390: ** then WhereTerm.leftCursor and WhereTerm.u.leftColumn record the
                   98391: ** cursor number and column number for X.  WhereTerm.eOperator records
                   98392: ** the <op> using a bitmask encoding defined by WO_xxx below.  The
                   98393: ** use of a bitmask encoding for the operator allows us to search
                   98394: ** quickly for terms that match any of several different operators.
                   98395: **
                   98396: ** A WhereTerm might also be two or more subterms connected by OR:
                   98397: **
                   98398: **         (t1.X <op> <expr>) OR (t1.Y <op> <expr>) OR ....
                   98399: **
                   98400: ** In this second case, wtFlag as the TERM_ORINFO set and eOperator==WO_OR
                   98401: ** and the WhereTerm.u.pOrInfo field points to auxiliary information that
                   98402: ** is collected about the
                   98403: **
                   98404: ** If a term in the WHERE clause does not match either of the two previous
                   98405: ** categories, then eOperator==0.  The WhereTerm.pExpr field is still set
                   98406: ** to the original subexpression content and wtFlags is set up appropriately
                   98407: ** but no other fields in the WhereTerm object are meaningful.
                   98408: **
                   98409: ** When eOperator!=0, prereqRight and prereqAll record sets of cursor numbers,
                   98410: ** but they do so indirectly.  A single WhereMaskSet structure translates
                   98411: ** cursor number into bits and the translated bit is stored in the prereq
                   98412: ** fields.  The translation is used in order to maximize the number of
                   98413: ** bits that will fit in a Bitmask.  The VDBE cursor numbers might be
                   98414: ** spread out over the non-negative integers.  For example, the cursor
                   98415: ** numbers might be 3, 8, 9, 10, 20, 23, 41, and 45.  The WhereMaskSet
                   98416: ** translates these sparse cursor numbers into consecutive integers
                   98417: ** beginning with 0 in order to make the best possible use of the available
                   98418: ** bits in the Bitmask.  So, in the example above, the cursor numbers
                   98419: ** would be mapped into integers 0 through 7.
                   98420: **
                   98421: ** The number of terms in a join is limited by the number of bits
                   98422: ** in prereqRight and prereqAll.  The default is 64 bits, hence SQLite
                   98423: ** is only able to process joins with 64 or fewer tables.
                   98424: */
                   98425: typedef struct WhereTerm WhereTerm;
                   98426: struct WhereTerm {
                   98427:   Expr *pExpr;            /* Pointer to the subexpression that is this term */
                   98428:   int iParent;            /* Disable pWC->a[iParent] when this term disabled */
                   98429:   int leftCursor;         /* Cursor number of X in "X <op> <expr>" */
                   98430:   union {
                   98431:     int leftColumn;         /* Column number of X in "X <op> <expr>" */
                   98432:     WhereOrInfo *pOrInfo;   /* Extra information if eOperator==WO_OR */
                   98433:     WhereAndInfo *pAndInfo; /* Extra information if eOperator==WO_AND */
                   98434:   } u;
                   98435:   u16 eOperator;          /* A WO_xx value describing <op> */
                   98436:   u8 wtFlags;             /* TERM_xxx bit flags.  See below */
                   98437:   u8 nChild;              /* Number of children that must disable us */
                   98438:   WhereClause *pWC;       /* The clause this term is part of */
                   98439:   Bitmask prereqRight;    /* Bitmask of tables used by pExpr->pRight */
                   98440:   Bitmask prereqAll;      /* Bitmask of tables referenced by pExpr */
                   98441: };
                   98442: 
                   98443: /*
                   98444: ** Allowed values of WhereTerm.wtFlags
                   98445: */
                   98446: #define TERM_DYNAMIC    0x01   /* Need to call sqlite3ExprDelete(db, pExpr) */
                   98447: #define TERM_VIRTUAL    0x02   /* Added by the optimizer.  Do not code */
                   98448: #define TERM_CODED      0x04   /* This term is already coded */
                   98449: #define TERM_COPIED     0x08   /* Has a child */
                   98450: #define TERM_ORINFO     0x10   /* Need to free the WhereTerm.u.pOrInfo object */
                   98451: #define TERM_ANDINFO    0x20   /* Need to free the WhereTerm.u.pAndInfo obj */
                   98452: #define TERM_OR_OK      0x40   /* Used during OR-clause processing */
                   98453: #ifdef SQLITE_ENABLE_STAT2
                   98454: #  define TERM_VNULL    0x80   /* Manufactured x>NULL or x<=NULL term */
                   98455: #else
                   98456: #  define TERM_VNULL    0x00   /* Disabled if not using stat2 */
                   98457: #endif
                   98458: 
                   98459: /*
                   98460: ** An instance of the following structure holds all information about a
                   98461: ** WHERE clause.  Mostly this is a container for one or more WhereTerms.
                   98462: */
                   98463: struct WhereClause {
                   98464:   Parse *pParse;           /* The parser context */
                   98465:   WhereMaskSet *pMaskSet;  /* Mapping of table cursor numbers to bitmasks */
                   98466:   Bitmask vmask;           /* Bitmask identifying virtual table cursors */
                   98467:   u8 op;                   /* Split operator.  TK_AND or TK_OR */
                   98468:   int nTerm;               /* Number of terms */
                   98469:   int nSlot;               /* Number of entries in a[] */
                   98470:   WhereTerm *a;            /* Each a[] describes a term of the WHERE cluase */
                   98471: #if defined(SQLITE_SMALL_STACK)
                   98472:   WhereTerm aStatic[1];    /* Initial static space for a[] */
                   98473: #else
                   98474:   WhereTerm aStatic[8];    /* Initial static space for a[] */
                   98475: #endif
                   98476: };
                   98477: 
                   98478: /*
                   98479: ** A WhereTerm with eOperator==WO_OR has its u.pOrInfo pointer set to
                   98480: ** a dynamically allocated instance of the following structure.
                   98481: */
                   98482: struct WhereOrInfo {
                   98483:   WhereClause wc;          /* Decomposition into subterms */
                   98484:   Bitmask indexable;       /* Bitmask of all indexable tables in the clause */
                   98485: };
                   98486: 
                   98487: /*
                   98488: ** A WhereTerm with eOperator==WO_AND has its u.pAndInfo pointer set to
                   98489: ** a dynamically allocated instance of the following structure.
                   98490: */
                   98491: struct WhereAndInfo {
                   98492:   WhereClause wc;          /* The subexpression broken out */
                   98493: };
                   98494: 
                   98495: /*
                   98496: ** An instance of the following structure keeps track of a mapping
                   98497: ** between VDBE cursor numbers and bits of the bitmasks in WhereTerm.
                   98498: **
                   98499: ** The VDBE cursor numbers are small integers contained in 
                   98500: ** SrcList_item.iCursor and Expr.iTable fields.  For any given WHERE 
                   98501: ** clause, the cursor numbers might not begin with 0 and they might
                   98502: ** contain gaps in the numbering sequence.  But we want to make maximum
                   98503: ** use of the bits in our bitmasks.  This structure provides a mapping
                   98504: ** from the sparse cursor numbers into consecutive integers beginning
                   98505: ** with 0.
                   98506: **
                   98507: ** If WhereMaskSet.ix[A]==B it means that The A-th bit of a Bitmask
                   98508: ** corresponds VDBE cursor number B.  The A-th bit of a bitmask is 1<<A.
                   98509: **
                   98510: ** For example, if the WHERE clause expression used these VDBE
                   98511: ** cursors:  4, 5, 8, 29, 57, 73.  Then the  WhereMaskSet structure
                   98512: ** would map those cursor numbers into bits 0 through 5.
                   98513: **
                   98514: ** Note that the mapping is not necessarily ordered.  In the example
                   98515: ** above, the mapping might go like this:  4->3, 5->1, 8->2, 29->0,
                   98516: ** 57->5, 73->4.  Or one of 719 other combinations might be used. It
                   98517: ** does not really matter.  What is important is that sparse cursor
                   98518: ** numbers all get mapped into bit numbers that begin with 0 and contain
                   98519: ** no gaps.
                   98520: */
                   98521: struct WhereMaskSet {
                   98522:   int n;                        /* Number of assigned cursor values */
                   98523:   int ix[BMS];                  /* Cursor assigned to each bit */
                   98524: };
                   98525: 
                   98526: /*
                   98527: ** A WhereCost object records a lookup strategy and the estimated
                   98528: ** cost of pursuing that strategy.
                   98529: */
                   98530: struct WhereCost {
                   98531:   WherePlan plan;    /* The lookup strategy */
                   98532:   double rCost;      /* Overall cost of pursuing this search strategy */
                   98533:   Bitmask used;      /* Bitmask of cursors used by this plan */
                   98534: };
                   98535: 
                   98536: /*
                   98537: ** Bitmasks for the operators that indices are able to exploit.  An
                   98538: ** OR-ed combination of these values can be used when searching for
                   98539: ** terms in the where clause.
                   98540: */
                   98541: #define WO_IN     0x001
                   98542: #define WO_EQ     0x002
                   98543: #define WO_LT     (WO_EQ<<(TK_LT-TK_EQ))
                   98544: #define WO_LE     (WO_EQ<<(TK_LE-TK_EQ))
                   98545: #define WO_GT     (WO_EQ<<(TK_GT-TK_EQ))
                   98546: #define WO_GE     (WO_EQ<<(TK_GE-TK_EQ))
                   98547: #define WO_MATCH  0x040
                   98548: #define WO_ISNULL 0x080
                   98549: #define WO_OR     0x100       /* Two or more OR-connected terms */
                   98550: #define WO_AND    0x200       /* Two or more AND-connected terms */
                   98551: #define WO_NOOP   0x800       /* This term does not restrict search space */
                   98552: 
                   98553: #define WO_ALL    0xfff       /* Mask of all possible WO_* values */
                   98554: #define WO_SINGLE 0x0ff       /* Mask of all non-compound WO_* values */
                   98555: 
                   98556: /*
                   98557: ** Value for wsFlags returned by bestIndex() and stored in
                   98558: ** WhereLevel.wsFlags.  These flags determine which search
                   98559: ** strategies are appropriate.
                   98560: **
                   98561: ** The least significant 12 bits is reserved as a mask for WO_ values above.
                   98562: ** The WhereLevel.wsFlags field is usually set to WO_IN|WO_EQ|WO_ISNULL.
                   98563: ** But if the table is the right table of a left join, WhereLevel.wsFlags
                   98564: ** is set to WO_IN|WO_EQ.  The WhereLevel.wsFlags field can then be used as
                   98565: ** the "op" parameter to findTerm when we are resolving equality constraints.
                   98566: ** ISNULL constraints will then not be used on the right table of a left
                   98567: ** join.  Tickets #2177 and #2189.
                   98568: */
                   98569: #define WHERE_ROWID_EQ     0x00001000  /* rowid=EXPR or rowid IN (...) */
                   98570: #define WHERE_ROWID_RANGE  0x00002000  /* rowid<EXPR and/or rowid>EXPR */
                   98571: #define WHERE_COLUMN_EQ    0x00010000  /* x=EXPR or x IN (...) or x IS NULL */
                   98572: #define WHERE_COLUMN_RANGE 0x00020000  /* x<EXPR and/or x>EXPR */
                   98573: #define WHERE_COLUMN_IN    0x00040000  /* x IN (...) */
                   98574: #define WHERE_COLUMN_NULL  0x00080000  /* x IS NULL */
                   98575: #define WHERE_INDEXED      0x000f0000  /* Anything that uses an index */
                   98576: #define WHERE_NOT_FULLSCAN 0x100f3000  /* Does not do a full table scan */
                   98577: #define WHERE_IN_ABLE      0x000f1000  /* Able to support an IN operator */
                   98578: #define WHERE_TOP_LIMIT    0x00100000  /* x<EXPR or x<=EXPR constraint */
                   98579: #define WHERE_BTM_LIMIT    0x00200000  /* x>EXPR or x>=EXPR constraint */
                   98580: #define WHERE_BOTH_LIMIT   0x00300000  /* Both x>EXPR and x<EXPR */
                   98581: #define WHERE_IDX_ONLY     0x00800000  /* Use index only - omit table */
                   98582: #define WHERE_ORDERBY      0x01000000  /* Output will appear in correct order */
                   98583: #define WHERE_REVERSE      0x02000000  /* Scan in reverse order */
                   98584: #define WHERE_UNIQUE       0x04000000  /* Selects no more than one row */
                   98585: #define WHERE_VIRTUALTABLE 0x08000000  /* Use virtual-table processing */
                   98586: #define WHERE_MULTI_OR     0x10000000  /* OR using multiple indices */
                   98587: #define WHERE_TEMP_INDEX   0x20000000  /* Uses an ephemeral index */
                   98588: 
                   98589: /*
                   98590: ** Initialize a preallocated WhereClause structure.
                   98591: */
                   98592: static void whereClauseInit(
                   98593:   WhereClause *pWC,        /* The WhereClause to be initialized */
                   98594:   Parse *pParse,           /* The parsing context */
                   98595:   WhereMaskSet *pMaskSet   /* Mapping from table cursor numbers to bitmasks */
                   98596: ){
                   98597:   pWC->pParse = pParse;
                   98598:   pWC->pMaskSet = pMaskSet;
                   98599:   pWC->nTerm = 0;
                   98600:   pWC->nSlot = ArraySize(pWC->aStatic);
                   98601:   pWC->a = pWC->aStatic;
                   98602:   pWC->vmask = 0;
                   98603: }
                   98604: 
                   98605: /* Forward reference */
                   98606: static void whereClauseClear(WhereClause*);
                   98607: 
                   98608: /*
                   98609: ** Deallocate all memory associated with a WhereOrInfo object.
                   98610: */
                   98611: static void whereOrInfoDelete(sqlite3 *db, WhereOrInfo *p){
                   98612:   whereClauseClear(&p->wc);
                   98613:   sqlite3DbFree(db, p);
                   98614: }
                   98615: 
                   98616: /*
                   98617: ** Deallocate all memory associated with a WhereAndInfo object.
                   98618: */
                   98619: static void whereAndInfoDelete(sqlite3 *db, WhereAndInfo *p){
                   98620:   whereClauseClear(&p->wc);
                   98621:   sqlite3DbFree(db, p);
                   98622: }
                   98623: 
                   98624: /*
                   98625: ** Deallocate a WhereClause structure.  The WhereClause structure
                   98626: ** itself is not freed.  This routine is the inverse of whereClauseInit().
                   98627: */
                   98628: static void whereClauseClear(WhereClause *pWC){
                   98629:   int i;
                   98630:   WhereTerm *a;
                   98631:   sqlite3 *db = pWC->pParse->db;
                   98632:   for(i=pWC->nTerm-1, a=pWC->a; i>=0; i--, a++){
                   98633:     if( a->wtFlags & TERM_DYNAMIC ){
                   98634:       sqlite3ExprDelete(db, a->pExpr);
                   98635:     }
                   98636:     if( a->wtFlags & TERM_ORINFO ){
                   98637:       whereOrInfoDelete(db, a->u.pOrInfo);
                   98638:     }else if( a->wtFlags & TERM_ANDINFO ){
                   98639:       whereAndInfoDelete(db, a->u.pAndInfo);
                   98640:     }
                   98641:   }
                   98642:   if( pWC->a!=pWC->aStatic ){
                   98643:     sqlite3DbFree(db, pWC->a);
                   98644:   }
                   98645: }
                   98646: 
                   98647: /*
                   98648: ** Add a single new WhereTerm entry to the WhereClause object pWC.
                   98649: ** The new WhereTerm object is constructed from Expr p and with wtFlags.
                   98650: ** The index in pWC->a[] of the new WhereTerm is returned on success.
                   98651: ** 0 is returned if the new WhereTerm could not be added due to a memory
                   98652: ** allocation error.  The memory allocation failure will be recorded in
                   98653: ** the db->mallocFailed flag so that higher-level functions can detect it.
                   98654: **
                   98655: ** This routine will increase the size of the pWC->a[] array as necessary.
                   98656: **
                   98657: ** If the wtFlags argument includes TERM_DYNAMIC, then responsibility
                   98658: ** for freeing the expression p is assumed by the WhereClause object pWC.
                   98659: ** This is true even if this routine fails to allocate a new WhereTerm.
                   98660: **
                   98661: ** WARNING:  This routine might reallocate the space used to store
                   98662: ** WhereTerms.  All pointers to WhereTerms should be invalidated after
                   98663: ** calling this routine.  Such pointers may be reinitialized by referencing
                   98664: ** the pWC->a[] array.
                   98665: */
                   98666: static int whereClauseInsert(WhereClause *pWC, Expr *p, u8 wtFlags){
                   98667:   WhereTerm *pTerm;
                   98668:   int idx;
                   98669:   testcase( wtFlags & TERM_VIRTUAL );  /* EV: R-00211-15100 */
                   98670:   if( pWC->nTerm>=pWC->nSlot ){
                   98671:     WhereTerm *pOld = pWC->a;
                   98672:     sqlite3 *db = pWC->pParse->db;
                   98673:     pWC->a = sqlite3DbMallocRaw(db, sizeof(pWC->a[0])*pWC->nSlot*2 );
                   98674:     if( pWC->a==0 ){
                   98675:       if( wtFlags & TERM_DYNAMIC ){
                   98676:         sqlite3ExprDelete(db, p);
                   98677:       }
                   98678:       pWC->a = pOld;
                   98679:       return 0;
                   98680:     }
                   98681:     memcpy(pWC->a, pOld, sizeof(pWC->a[0])*pWC->nTerm);
                   98682:     if( pOld!=pWC->aStatic ){
                   98683:       sqlite3DbFree(db, pOld);
                   98684:     }
                   98685:     pWC->nSlot = sqlite3DbMallocSize(db, pWC->a)/sizeof(pWC->a[0]);
                   98686:   }
                   98687:   pTerm = &pWC->a[idx = pWC->nTerm++];
                   98688:   pTerm->pExpr = p;
                   98689:   pTerm->wtFlags = wtFlags;
                   98690:   pTerm->pWC = pWC;
                   98691:   pTerm->iParent = -1;
                   98692:   return idx;
                   98693: }
                   98694: 
                   98695: /*
                   98696: ** This routine identifies subexpressions in the WHERE clause where
                   98697: ** each subexpression is separated by the AND operator or some other
                   98698: ** operator specified in the op parameter.  The WhereClause structure
                   98699: ** is filled with pointers to subexpressions.  For example:
                   98700: **
                   98701: **    WHERE  a=='hello' AND coalesce(b,11)<10 AND (c+12!=d OR c==22)
                   98702: **           \________/     \_______________/     \________________/
                   98703: **            slot[0]            slot[1]               slot[2]
                   98704: **
                   98705: ** The original WHERE clause in pExpr is unaltered.  All this routine
                   98706: ** does is make slot[] entries point to substructure within pExpr.
                   98707: **
                   98708: ** In the previous sentence and in the diagram, "slot[]" refers to
                   98709: ** the WhereClause.a[] array.  The slot[] array grows as needed to contain
                   98710: ** all terms of the WHERE clause.
                   98711: */
                   98712: static void whereSplit(WhereClause *pWC, Expr *pExpr, int op){
                   98713:   pWC->op = (u8)op;
                   98714:   if( pExpr==0 ) return;
                   98715:   if( pExpr->op!=op ){
                   98716:     whereClauseInsert(pWC, pExpr, 0);
                   98717:   }else{
                   98718:     whereSplit(pWC, pExpr->pLeft, op);
                   98719:     whereSplit(pWC, pExpr->pRight, op);
                   98720:   }
                   98721: }
                   98722: 
                   98723: /*
                   98724: ** Initialize an expression mask set (a WhereMaskSet object)
                   98725: */
                   98726: #define initMaskSet(P)  memset(P, 0, sizeof(*P))
                   98727: 
                   98728: /*
                   98729: ** Return the bitmask for the given cursor number.  Return 0 if
                   98730: ** iCursor is not in the set.
                   98731: */
                   98732: static Bitmask getMask(WhereMaskSet *pMaskSet, int iCursor){
                   98733:   int i;
                   98734:   assert( pMaskSet->n<=(int)sizeof(Bitmask)*8 );
                   98735:   for(i=0; i<pMaskSet->n; i++){
                   98736:     if( pMaskSet->ix[i]==iCursor ){
                   98737:       return ((Bitmask)1)<<i;
                   98738:     }
                   98739:   }
                   98740:   return 0;
                   98741: }
                   98742: 
                   98743: /*
                   98744: ** Create a new mask for cursor iCursor.
                   98745: **
                   98746: ** There is one cursor per table in the FROM clause.  The number of
                   98747: ** tables in the FROM clause is limited by a test early in the
                   98748: ** sqlite3WhereBegin() routine.  So we know that the pMaskSet->ix[]
                   98749: ** array will never overflow.
                   98750: */
                   98751: static void createMask(WhereMaskSet *pMaskSet, int iCursor){
                   98752:   assert( pMaskSet->n < ArraySize(pMaskSet->ix) );
                   98753:   pMaskSet->ix[pMaskSet->n++] = iCursor;
                   98754: }
                   98755: 
                   98756: /*
                   98757: ** This routine walks (recursively) an expression tree and generates
                   98758: ** a bitmask indicating which tables are used in that expression
                   98759: ** tree.
                   98760: **
                   98761: ** In order for this routine to work, the calling function must have
                   98762: ** previously invoked sqlite3ResolveExprNames() on the expression.  See
                   98763: ** the header comment on that routine for additional information.
                   98764: ** The sqlite3ResolveExprNames() routines looks for column names and
                   98765: ** sets their opcodes to TK_COLUMN and their Expr.iTable fields to
                   98766: ** the VDBE cursor number of the table.  This routine just has to
                   98767: ** translate the cursor numbers into bitmask values and OR all
                   98768: ** the bitmasks together.
                   98769: */
                   98770: static Bitmask exprListTableUsage(WhereMaskSet*, ExprList*);
                   98771: static Bitmask exprSelectTableUsage(WhereMaskSet*, Select*);
                   98772: static Bitmask exprTableUsage(WhereMaskSet *pMaskSet, Expr *p){
                   98773:   Bitmask mask = 0;
                   98774:   if( p==0 ) return 0;
                   98775:   if( p->op==TK_COLUMN ){
                   98776:     mask = getMask(pMaskSet, p->iTable);
                   98777:     return mask;
                   98778:   }
                   98779:   mask = exprTableUsage(pMaskSet, p->pRight);
                   98780:   mask |= exprTableUsage(pMaskSet, p->pLeft);
                   98781:   if( ExprHasProperty(p, EP_xIsSelect) ){
                   98782:     mask |= exprSelectTableUsage(pMaskSet, p->x.pSelect);
                   98783:   }else{
                   98784:     mask |= exprListTableUsage(pMaskSet, p->x.pList);
                   98785:   }
                   98786:   return mask;
                   98787: }
                   98788: static Bitmask exprListTableUsage(WhereMaskSet *pMaskSet, ExprList *pList){
                   98789:   int i;
                   98790:   Bitmask mask = 0;
                   98791:   if( pList ){
                   98792:     for(i=0; i<pList->nExpr; i++){
                   98793:       mask |= exprTableUsage(pMaskSet, pList->a[i].pExpr);
                   98794:     }
                   98795:   }
                   98796:   return mask;
                   98797: }
                   98798: static Bitmask exprSelectTableUsage(WhereMaskSet *pMaskSet, Select *pS){
                   98799:   Bitmask mask = 0;
                   98800:   while( pS ){
                   98801:     mask |= exprListTableUsage(pMaskSet, pS->pEList);
                   98802:     mask |= exprListTableUsage(pMaskSet, pS->pGroupBy);
                   98803:     mask |= exprListTableUsage(pMaskSet, pS->pOrderBy);
                   98804:     mask |= exprTableUsage(pMaskSet, pS->pWhere);
                   98805:     mask |= exprTableUsage(pMaskSet, pS->pHaving);
                   98806:     pS = pS->pPrior;
                   98807:   }
                   98808:   return mask;
                   98809: }
                   98810: 
                   98811: /*
                   98812: ** Return TRUE if the given operator is one of the operators that is
                   98813: ** allowed for an indexable WHERE clause term.  The allowed operators are
                   98814: ** "=", "<", ">", "<=", ">=", and "IN".
                   98815: **
                   98816: ** IMPLEMENTATION-OF: R-59926-26393 To be usable by an index a term must be
                   98817: ** of one of the following forms: column = expression column > expression
                   98818: ** column >= expression column < expression column <= expression
                   98819: ** expression = column expression > column expression >= column
                   98820: ** expression < column expression <= column column IN
                   98821: ** (expression-list) column IN (subquery) column IS NULL
                   98822: */
                   98823: static int allowedOp(int op){
                   98824:   assert( TK_GT>TK_EQ && TK_GT<TK_GE );
                   98825:   assert( TK_LT>TK_EQ && TK_LT<TK_GE );
                   98826:   assert( TK_LE>TK_EQ && TK_LE<TK_GE );
                   98827:   assert( TK_GE==TK_EQ+4 );
                   98828:   return op==TK_IN || (op>=TK_EQ && op<=TK_GE) || op==TK_ISNULL;
                   98829: }
                   98830: 
                   98831: /*
                   98832: ** Swap two objects of type TYPE.
                   98833: */
                   98834: #define SWAP(TYPE,A,B) {TYPE t=A; A=B; B=t;}
                   98835: 
                   98836: /*
                   98837: ** Commute a comparison operator.  Expressions of the form "X op Y"
                   98838: ** are converted into "Y op X".
                   98839: **
                   98840: ** If a collation sequence is associated with either the left or right
                   98841: ** side of the comparison, it remains associated with the same side after
                   98842: ** the commutation. So "Y collate NOCASE op X" becomes 
                   98843: ** "X collate NOCASE op Y". This is because any collation sequence on
                   98844: ** the left hand side of a comparison overrides any collation sequence 
                   98845: ** attached to the right. For the same reason the EP_ExpCollate flag
                   98846: ** is not commuted.
                   98847: */
                   98848: static void exprCommute(Parse *pParse, Expr *pExpr){
                   98849:   u16 expRight = (pExpr->pRight->flags & EP_ExpCollate);
                   98850:   u16 expLeft = (pExpr->pLeft->flags & EP_ExpCollate);
                   98851:   assert( allowedOp(pExpr->op) && pExpr->op!=TK_IN );
                   98852:   pExpr->pRight->pColl = sqlite3ExprCollSeq(pParse, pExpr->pRight);
                   98853:   pExpr->pLeft->pColl = sqlite3ExprCollSeq(pParse, pExpr->pLeft);
                   98854:   SWAP(CollSeq*,pExpr->pRight->pColl,pExpr->pLeft->pColl);
                   98855:   pExpr->pRight->flags = (pExpr->pRight->flags & ~EP_ExpCollate) | expLeft;
                   98856:   pExpr->pLeft->flags = (pExpr->pLeft->flags & ~EP_ExpCollate) | expRight;
                   98857:   SWAP(Expr*,pExpr->pRight,pExpr->pLeft);
                   98858:   if( pExpr->op>=TK_GT ){
                   98859:     assert( TK_LT==TK_GT+2 );
                   98860:     assert( TK_GE==TK_LE+2 );
                   98861:     assert( TK_GT>TK_EQ );
                   98862:     assert( TK_GT<TK_LE );
                   98863:     assert( pExpr->op>=TK_GT && pExpr->op<=TK_GE );
                   98864:     pExpr->op = ((pExpr->op-TK_GT)^2)+TK_GT;
                   98865:   }
                   98866: }
                   98867: 
                   98868: /*
                   98869: ** Translate from TK_xx operator to WO_xx bitmask.
                   98870: */
                   98871: static u16 operatorMask(int op){
                   98872:   u16 c;
                   98873:   assert( allowedOp(op) );
                   98874:   if( op==TK_IN ){
                   98875:     c = WO_IN;
                   98876:   }else if( op==TK_ISNULL ){
                   98877:     c = WO_ISNULL;
                   98878:   }else{
                   98879:     assert( (WO_EQ<<(op-TK_EQ)) < 0x7fff );
                   98880:     c = (u16)(WO_EQ<<(op-TK_EQ));
                   98881:   }
                   98882:   assert( op!=TK_ISNULL || c==WO_ISNULL );
                   98883:   assert( op!=TK_IN || c==WO_IN );
                   98884:   assert( op!=TK_EQ || c==WO_EQ );
                   98885:   assert( op!=TK_LT || c==WO_LT );
                   98886:   assert( op!=TK_LE || c==WO_LE );
                   98887:   assert( op!=TK_GT || c==WO_GT );
                   98888:   assert( op!=TK_GE || c==WO_GE );
                   98889:   return c;
                   98890: }
                   98891: 
                   98892: /*
                   98893: ** Search for a term in the WHERE clause that is of the form "X <op> <expr>"
                   98894: ** where X is a reference to the iColumn of table iCur and <op> is one of
                   98895: ** the WO_xx operator codes specified by the op parameter.
                   98896: ** Return a pointer to the term.  Return 0 if not found.
                   98897: */
                   98898: static WhereTerm *findTerm(
                   98899:   WhereClause *pWC,     /* The WHERE clause to be searched */
                   98900:   int iCur,             /* Cursor number of LHS */
                   98901:   int iColumn,          /* Column number of LHS */
                   98902:   Bitmask notReady,     /* RHS must not overlap with this mask */
                   98903:   u32 op,               /* Mask of WO_xx values describing operator */
                   98904:   Index *pIdx           /* Must be compatible with this index, if not NULL */
                   98905: ){
                   98906:   WhereTerm *pTerm;
                   98907:   int k;
                   98908:   assert( iCur>=0 );
                   98909:   op &= WO_ALL;
                   98910:   for(pTerm=pWC->a, k=pWC->nTerm; k; k--, pTerm++){
                   98911:     if( pTerm->leftCursor==iCur
                   98912:        && (pTerm->prereqRight & notReady)==0
                   98913:        && pTerm->u.leftColumn==iColumn
                   98914:        && (pTerm->eOperator & op)!=0
                   98915:     ){
                   98916:       if( pIdx && pTerm->eOperator!=WO_ISNULL ){
                   98917:         Expr *pX = pTerm->pExpr;
                   98918:         CollSeq *pColl;
                   98919:         char idxaff;
                   98920:         int j;
                   98921:         Parse *pParse = pWC->pParse;
                   98922: 
                   98923:         idxaff = pIdx->pTable->aCol[iColumn].affinity;
                   98924:         if( !sqlite3IndexAffinityOk(pX, idxaff) ) continue;
                   98925: 
                   98926:         /* Figure out the collation sequence required from an index for
                   98927:         ** it to be useful for optimising expression pX. Store this
                   98928:         ** value in variable pColl.
                   98929:         */
                   98930:         assert(pX->pLeft);
                   98931:         pColl = sqlite3BinaryCompareCollSeq(pParse, pX->pLeft, pX->pRight);
                   98932:         assert(pColl || pParse->nErr);
                   98933: 
                   98934:         for(j=0; pIdx->aiColumn[j]!=iColumn; j++){
                   98935:           if( NEVER(j>=pIdx->nColumn) ) return 0;
                   98936:         }
                   98937:         if( pColl && sqlite3StrICmp(pColl->zName, pIdx->azColl[j]) ) continue;
                   98938:       }
                   98939:       return pTerm;
                   98940:     }
                   98941:   }
                   98942:   return 0;
                   98943: }
                   98944: 
                   98945: /* Forward reference */
                   98946: static void exprAnalyze(SrcList*, WhereClause*, int);
                   98947: 
                   98948: /*
                   98949: ** Call exprAnalyze on all terms in a WHERE clause.  
                   98950: **
                   98951: **
                   98952: */
                   98953: static void exprAnalyzeAll(
                   98954:   SrcList *pTabList,       /* the FROM clause */
                   98955:   WhereClause *pWC         /* the WHERE clause to be analyzed */
                   98956: ){
                   98957:   int i;
                   98958:   for(i=pWC->nTerm-1; i>=0; i--){
                   98959:     exprAnalyze(pTabList, pWC, i);
                   98960:   }
                   98961: }
                   98962: 
                   98963: #ifndef SQLITE_OMIT_LIKE_OPTIMIZATION
                   98964: /*
                   98965: ** Check to see if the given expression is a LIKE or GLOB operator that
                   98966: ** can be optimized using inequality constraints.  Return TRUE if it is
                   98967: ** so and false if not.
                   98968: **
                   98969: ** In order for the operator to be optimizible, the RHS must be a string
                   98970: ** literal that does not begin with a wildcard.  
                   98971: */
                   98972: static int isLikeOrGlob(
                   98973:   Parse *pParse,    /* Parsing and code generating context */
                   98974:   Expr *pExpr,      /* Test this expression */
                   98975:   Expr **ppPrefix,  /* Pointer to TK_STRING expression with pattern prefix */
                   98976:   int *pisComplete, /* True if the only wildcard is % in the last character */
                   98977:   int *pnoCase      /* True if uppercase is equivalent to lowercase */
                   98978: ){
                   98979:   const char *z = 0;         /* String on RHS of LIKE operator */
                   98980:   Expr *pRight, *pLeft;      /* Right and left size of LIKE operator */
                   98981:   ExprList *pList;           /* List of operands to the LIKE operator */
                   98982:   int c;                     /* One character in z[] */
                   98983:   int cnt;                   /* Number of non-wildcard prefix characters */
                   98984:   char wc[3];                /* Wildcard characters */
                   98985:   sqlite3 *db = pParse->db;  /* Database connection */
                   98986:   sqlite3_value *pVal = 0;
                   98987:   int op;                    /* Opcode of pRight */
                   98988: 
                   98989:   if( !sqlite3IsLikeFunction(db, pExpr, pnoCase, wc) ){
                   98990:     return 0;
                   98991:   }
                   98992: #ifdef SQLITE_EBCDIC
                   98993:   if( *pnoCase ) return 0;
                   98994: #endif
                   98995:   pList = pExpr->x.pList;
                   98996:   pLeft = pList->a[1].pExpr;
                   98997:   if( pLeft->op!=TK_COLUMN || sqlite3ExprAffinity(pLeft)!=SQLITE_AFF_TEXT ){
                   98998:     /* IMP: R-02065-49465 The left-hand side of the LIKE or GLOB operator must
                   98999:     ** be the name of an indexed column with TEXT affinity. */
                   99000:     return 0;
                   99001:   }
                   99002:   assert( pLeft->iColumn!=(-1) ); /* Because IPK never has AFF_TEXT */
                   99003: 
                   99004:   pRight = pList->a[0].pExpr;
                   99005:   op = pRight->op;
                   99006:   if( op==TK_REGISTER ){
                   99007:     op = pRight->op2;
                   99008:   }
                   99009:   if( op==TK_VARIABLE ){
                   99010:     Vdbe *pReprepare = pParse->pReprepare;
                   99011:     int iCol = pRight->iColumn;
                   99012:     pVal = sqlite3VdbeGetValue(pReprepare, iCol, SQLITE_AFF_NONE);
                   99013:     if( pVal && sqlite3_value_type(pVal)==SQLITE_TEXT ){
                   99014:       z = (char *)sqlite3_value_text(pVal);
                   99015:     }
                   99016:     sqlite3VdbeSetVarmask(pParse->pVdbe, iCol); /* IMP: R-23257-02778 */
                   99017:     assert( pRight->op==TK_VARIABLE || pRight->op==TK_REGISTER );
                   99018:   }else if( op==TK_STRING ){
                   99019:     z = pRight->u.zToken;
                   99020:   }
                   99021:   if( z ){
                   99022:     cnt = 0;
                   99023:     while( (c=z[cnt])!=0 && c!=wc[0] && c!=wc[1] && c!=wc[2] ){
                   99024:       cnt++;
                   99025:     }
                   99026:     if( cnt!=0 && 255!=(u8)z[cnt-1] ){
                   99027:       Expr *pPrefix;
                   99028:       *pisComplete = c==wc[0] && z[cnt+1]==0;
                   99029:       pPrefix = sqlite3Expr(db, TK_STRING, z);
                   99030:       if( pPrefix ) pPrefix->u.zToken[cnt] = 0;
                   99031:       *ppPrefix = pPrefix;
                   99032:       if( op==TK_VARIABLE ){
                   99033:         Vdbe *v = pParse->pVdbe;
                   99034:         sqlite3VdbeSetVarmask(v, pRight->iColumn); /* IMP: R-23257-02778 */
                   99035:         if( *pisComplete && pRight->u.zToken[1] ){
                   99036:           /* If the rhs of the LIKE expression is a variable, and the current
                   99037:           ** value of the variable means there is no need to invoke the LIKE
                   99038:           ** function, then no OP_Variable will be added to the program.
                   99039:           ** This causes problems for the sqlite3_bind_parameter_name()
                   99040:           ** API. To workaround them, add a dummy OP_Variable here.
                   99041:           */ 
                   99042:           int r1 = sqlite3GetTempReg(pParse);
                   99043:           sqlite3ExprCodeTarget(pParse, pRight, r1);
                   99044:           sqlite3VdbeChangeP3(v, sqlite3VdbeCurrentAddr(v)-1, 0);
                   99045:           sqlite3ReleaseTempReg(pParse, r1);
                   99046:         }
                   99047:       }
                   99048:     }else{
                   99049:       z = 0;
                   99050:     }
                   99051:   }
                   99052: 
                   99053:   sqlite3ValueFree(pVal);
                   99054:   return (z!=0);
                   99055: }
                   99056: #endif /* SQLITE_OMIT_LIKE_OPTIMIZATION */
                   99057: 
                   99058: 
                   99059: #ifndef SQLITE_OMIT_VIRTUALTABLE
                   99060: /*
                   99061: ** Check to see if the given expression is of the form
                   99062: **
                   99063: **         column MATCH expr
                   99064: **
                   99065: ** If it is then return TRUE.  If not, return FALSE.
                   99066: */
                   99067: static int isMatchOfColumn(
                   99068:   Expr *pExpr      /* Test this expression */
                   99069: ){
                   99070:   ExprList *pList;
                   99071: 
                   99072:   if( pExpr->op!=TK_FUNCTION ){
                   99073:     return 0;
                   99074:   }
                   99075:   if( sqlite3StrICmp(pExpr->u.zToken,"match")!=0 ){
                   99076:     return 0;
                   99077:   }
                   99078:   pList = pExpr->x.pList;
                   99079:   if( pList->nExpr!=2 ){
                   99080:     return 0;
                   99081:   }
                   99082:   if( pList->a[1].pExpr->op != TK_COLUMN ){
                   99083:     return 0;
                   99084:   }
                   99085:   return 1;
                   99086: }
                   99087: #endif /* SQLITE_OMIT_VIRTUALTABLE */
                   99088: 
                   99089: /*
                   99090: ** If the pBase expression originated in the ON or USING clause of
                   99091: ** a join, then transfer the appropriate markings over to derived.
                   99092: */
                   99093: static void transferJoinMarkings(Expr *pDerived, Expr *pBase){
                   99094:   pDerived->flags |= pBase->flags & EP_FromJoin;
                   99095:   pDerived->iRightJoinTable = pBase->iRightJoinTable;
                   99096: }
                   99097: 
                   99098: #if !defined(SQLITE_OMIT_OR_OPTIMIZATION) && !defined(SQLITE_OMIT_SUBQUERY)
                   99099: /*
                   99100: ** Analyze a term that consists of two or more OR-connected
                   99101: ** subterms.  So in:
                   99102: **
                   99103: **     ... WHERE  (a=5) AND (b=7 OR c=9 OR d=13) AND (d=13)
                   99104: **                          ^^^^^^^^^^^^^^^^^^^^
                   99105: **
                   99106: ** This routine analyzes terms such as the middle term in the above example.
                   99107: ** A WhereOrTerm object is computed and attached to the term under
                   99108: ** analysis, regardless of the outcome of the analysis.  Hence:
                   99109: **
                   99110: **     WhereTerm.wtFlags   |=  TERM_ORINFO
                   99111: **     WhereTerm.u.pOrInfo  =  a dynamically allocated WhereOrTerm object
                   99112: **
                   99113: ** The term being analyzed must have two or more of OR-connected subterms.
                   99114: ** A single subterm might be a set of AND-connected sub-subterms.
                   99115: ** Examples of terms under analysis:
                   99116: **
                   99117: **     (A)     t1.x=t2.y OR t1.x=t2.z OR t1.y=15 OR t1.z=t3.a+5
                   99118: **     (B)     x=expr1 OR expr2=x OR x=expr3
                   99119: **     (C)     t1.x=t2.y OR (t1.x=t2.z AND t1.y=15)
                   99120: **     (D)     x=expr1 OR (y>11 AND y<22 AND z LIKE '*hello*')
                   99121: **     (E)     (p.a=1 AND q.b=2 AND r.c=3) OR (p.x=4 AND q.y=5 AND r.z=6)
                   99122: **
                   99123: ** CASE 1:
                   99124: **
                   99125: ** If all subterms are of the form T.C=expr for some single column of C
                   99126: ** a single table T (as shown in example B above) then create a new virtual
                   99127: ** term that is an equivalent IN expression.  In other words, if the term
                   99128: ** being analyzed is:
                   99129: **
                   99130: **      x = expr1  OR  expr2 = x  OR  x = expr3
                   99131: **
                   99132: ** then create a new virtual term like this:
                   99133: **
                   99134: **      x IN (expr1,expr2,expr3)
                   99135: **
                   99136: ** CASE 2:
                   99137: **
                   99138: ** If all subterms are indexable by a single table T, then set
                   99139: **
                   99140: **     WhereTerm.eOperator              =  WO_OR
                   99141: **     WhereTerm.u.pOrInfo->indexable  |=  the cursor number for table T
                   99142: **
                   99143: ** A subterm is "indexable" if it is of the form
                   99144: ** "T.C <op> <expr>" where C is any column of table T and 
                   99145: ** <op> is one of "=", "<", "<=", ">", ">=", "IS NULL", or "IN".
                   99146: ** A subterm is also indexable if it is an AND of two or more
                   99147: ** subsubterms at least one of which is indexable.  Indexable AND 
                   99148: ** subterms have their eOperator set to WO_AND and they have
                   99149: ** u.pAndInfo set to a dynamically allocated WhereAndTerm object.
                   99150: **
                   99151: ** From another point of view, "indexable" means that the subterm could
                   99152: ** potentially be used with an index if an appropriate index exists.
                   99153: ** This analysis does not consider whether or not the index exists; that
                   99154: ** is something the bestIndex() routine will determine.  This analysis
                   99155: ** only looks at whether subterms appropriate for indexing exist.
                   99156: **
                   99157: ** All examples A through E above all satisfy case 2.  But if a term
                   99158: ** also statisfies case 1 (such as B) we know that the optimizer will
                   99159: ** always prefer case 1, so in that case we pretend that case 2 is not
                   99160: ** satisfied.
                   99161: **
                   99162: ** It might be the case that multiple tables are indexable.  For example,
                   99163: ** (E) above is indexable on tables P, Q, and R.
                   99164: **
                   99165: ** Terms that satisfy case 2 are candidates for lookup by using
                   99166: ** separate indices to find rowids for each subterm and composing
                   99167: ** the union of all rowids using a RowSet object.  This is similar
                   99168: ** to "bitmap indices" in other database engines.
                   99169: **
                   99170: ** OTHERWISE:
                   99171: **
                   99172: ** If neither case 1 nor case 2 apply, then leave the eOperator set to
                   99173: ** zero.  This term is not useful for search.
                   99174: */
                   99175: static void exprAnalyzeOrTerm(
                   99176:   SrcList *pSrc,            /* the FROM clause */
                   99177:   WhereClause *pWC,         /* the complete WHERE clause */
                   99178:   int idxTerm               /* Index of the OR-term to be analyzed */
                   99179: ){
                   99180:   Parse *pParse = pWC->pParse;            /* Parser context */
                   99181:   sqlite3 *db = pParse->db;               /* Database connection */
                   99182:   WhereTerm *pTerm = &pWC->a[idxTerm];    /* The term to be analyzed */
                   99183:   Expr *pExpr = pTerm->pExpr;             /* The expression of the term */
                   99184:   WhereMaskSet *pMaskSet = pWC->pMaskSet; /* Table use masks */
                   99185:   int i;                                  /* Loop counters */
                   99186:   WhereClause *pOrWc;       /* Breakup of pTerm into subterms */
                   99187:   WhereTerm *pOrTerm;       /* A Sub-term within the pOrWc */
                   99188:   WhereOrInfo *pOrInfo;     /* Additional information associated with pTerm */
                   99189:   Bitmask chngToIN;         /* Tables that might satisfy case 1 */
                   99190:   Bitmask indexable;        /* Tables that are indexable, satisfying case 2 */
                   99191: 
                   99192:   /*
                   99193:   ** Break the OR clause into its separate subterms.  The subterms are
                   99194:   ** stored in a WhereClause structure containing within the WhereOrInfo
                   99195:   ** object that is attached to the original OR clause term.
                   99196:   */
                   99197:   assert( (pTerm->wtFlags & (TERM_DYNAMIC|TERM_ORINFO|TERM_ANDINFO))==0 );
                   99198:   assert( pExpr->op==TK_OR );
                   99199:   pTerm->u.pOrInfo = pOrInfo = sqlite3DbMallocZero(db, sizeof(*pOrInfo));
                   99200:   if( pOrInfo==0 ) return;
                   99201:   pTerm->wtFlags |= TERM_ORINFO;
                   99202:   pOrWc = &pOrInfo->wc;
                   99203:   whereClauseInit(pOrWc, pWC->pParse, pMaskSet);
                   99204:   whereSplit(pOrWc, pExpr, TK_OR);
                   99205:   exprAnalyzeAll(pSrc, pOrWc);
                   99206:   if( db->mallocFailed ) return;
                   99207:   assert( pOrWc->nTerm>=2 );
                   99208: 
                   99209:   /*
                   99210:   ** Compute the set of tables that might satisfy cases 1 or 2.
                   99211:   */
                   99212:   indexable = ~(Bitmask)0;
                   99213:   chngToIN = ~(pWC->vmask);
                   99214:   for(i=pOrWc->nTerm-1, pOrTerm=pOrWc->a; i>=0 && indexable; i--, pOrTerm++){
                   99215:     if( (pOrTerm->eOperator & WO_SINGLE)==0 ){
                   99216:       WhereAndInfo *pAndInfo;
                   99217:       assert( pOrTerm->eOperator==0 );
                   99218:       assert( (pOrTerm->wtFlags & (TERM_ANDINFO|TERM_ORINFO))==0 );
                   99219:       chngToIN = 0;
                   99220:       pAndInfo = sqlite3DbMallocRaw(db, sizeof(*pAndInfo));
                   99221:       if( pAndInfo ){
                   99222:         WhereClause *pAndWC;
                   99223:         WhereTerm *pAndTerm;
                   99224:         int j;
                   99225:         Bitmask b = 0;
                   99226:         pOrTerm->u.pAndInfo = pAndInfo;
                   99227:         pOrTerm->wtFlags |= TERM_ANDINFO;
                   99228:         pOrTerm->eOperator = WO_AND;
                   99229:         pAndWC = &pAndInfo->wc;
                   99230:         whereClauseInit(pAndWC, pWC->pParse, pMaskSet);
                   99231:         whereSplit(pAndWC, pOrTerm->pExpr, TK_AND);
                   99232:         exprAnalyzeAll(pSrc, pAndWC);
                   99233:         testcase( db->mallocFailed );
                   99234:         if( !db->mallocFailed ){
                   99235:           for(j=0, pAndTerm=pAndWC->a; j<pAndWC->nTerm; j++, pAndTerm++){
                   99236:             assert( pAndTerm->pExpr );
                   99237:             if( allowedOp(pAndTerm->pExpr->op) ){
                   99238:               b |= getMask(pMaskSet, pAndTerm->leftCursor);
                   99239:             }
                   99240:           }
                   99241:         }
                   99242:         indexable &= b;
                   99243:       }
                   99244:     }else if( pOrTerm->wtFlags & TERM_COPIED ){
                   99245:       /* Skip this term for now.  We revisit it when we process the
                   99246:       ** corresponding TERM_VIRTUAL term */
                   99247:     }else{
                   99248:       Bitmask b;
                   99249:       b = getMask(pMaskSet, pOrTerm->leftCursor);
                   99250:       if( pOrTerm->wtFlags & TERM_VIRTUAL ){
                   99251:         WhereTerm *pOther = &pOrWc->a[pOrTerm->iParent];
                   99252:         b |= getMask(pMaskSet, pOther->leftCursor);
                   99253:       }
                   99254:       indexable &= b;
                   99255:       if( pOrTerm->eOperator!=WO_EQ ){
                   99256:         chngToIN = 0;
                   99257:       }else{
                   99258:         chngToIN &= b;
                   99259:       }
                   99260:     }
                   99261:   }
                   99262: 
                   99263:   /*
                   99264:   ** Record the set of tables that satisfy case 2.  The set might be
                   99265:   ** empty.
                   99266:   */
                   99267:   pOrInfo->indexable = indexable;
                   99268:   pTerm->eOperator = indexable==0 ? 0 : WO_OR;
                   99269: 
                   99270:   /*
                   99271:   ** chngToIN holds a set of tables that *might* satisfy case 1.  But
                   99272:   ** we have to do some additional checking to see if case 1 really
                   99273:   ** is satisfied.
                   99274:   **
                   99275:   ** chngToIN will hold either 0, 1, or 2 bits.  The 0-bit case means
                   99276:   ** that there is no possibility of transforming the OR clause into an
                   99277:   ** IN operator because one or more terms in the OR clause contain
                   99278:   ** something other than == on a column in the single table.  The 1-bit
                   99279:   ** case means that every term of the OR clause is of the form
                   99280:   ** "table.column=expr" for some single table.  The one bit that is set
                   99281:   ** will correspond to the common table.  We still need to check to make
                   99282:   ** sure the same column is used on all terms.  The 2-bit case is when
                   99283:   ** the all terms are of the form "table1.column=table2.column".  It
                   99284:   ** might be possible to form an IN operator with either table1.column
                   99285:   ** or table2.column as the LHS if either is common to every term of
                   99286:   ** the OR clause.
                   99287:   **
                   99288:   ** Note that terms of the form "table.column1=table.column2" (the
                   99289:   ** same table on both sizes of the ==) cannot be optimized.
                   99290:   */
                   99291:   if( chngToIN ){
                   99292:     int okToChngToIN = 0;     /* True if the conversion to IN is valid */
                   99293:     int iColumn = -1;         /* Column index on lhs of IN operator */
                   99294:     int iCursor = -1;         /* Table cursor common to all terms */
                   99295:     int j = 0;                /* Loop counter */
                   99296: 
                   99297:     /* Search for a table and column that appears on one side or the
                   99298:     ** other of the == operator in every subterm.  That table and column
                   99299:     ** will be recorded in iCursor and iColumn.  There might not be any
                   99300:     ** such table and column.  Set okToChngToIN if an appropriate table
                   99301:     ** and column is found but leave okToChngToIN false if not found.
                   99302:     */
                   99303:     for(j=0; j<2 && !okToChngToIN; j++){
                   99304:       pOrTerm = pOrWc->a;
                   99305:       for(i=pOrWc->nTerm-1; i>=0; i--, pOrTerm++){
                   99306:         assert( pOrTerm->eOperator==WO_EQ );
                   99307:         pOrTerm->wtFlags &= ~TERM_OR_OK;
                   99308:         if( pOrTerm->leftCursor==iCursor ){
                   99309:           /* This is the 2-bit case and we are on the second iteration and
                   99310:           ** current term is from the first iteration.  So skip this term. */
                   99311:           assert( j==1 );
                   99312:           continue;
                   99313:         }
                   99314:         if( (chngToIN & getMask(pMaskSet, pOrTerm->leftCursor))==0 ){
                   99315:           /* This term must be of the form t1.a==t2.b where t2 is in the
1.1.1.3 ! misho    99316:           ** chngToIN set but t1 is not.  This term will be either preceded
1.1       misho    99317:           ** or follwed by an inverted copy (t2.b==t1.a).  Skip this term 
                   99318:           ** and use its inversion. */
                   99319:           testcase( pOrTerm->wtFlags & TERM_COPIED );
                   99320:           testcase( pOrTerm->wtFlags & TERM_VIRTUAL );
                   99321:           assert( pOrTerm->wtFlags & (TERM_COPIED|TERM_VIRTUAL) );
                   99322:           continue;
                   99323:         }
                   99324:         iColumn = pOrTerm->u.leftColumn;
                   99325:         iCursor = pOrTerm->leftCursor;
                   99326:         break;
                   99327:       }
                   99328:       if( i<0 ){
                   99329:         /* No candidate table+column was found.  This can only occur
                   99330:         ** on the second iteration */
                   99331:         assert( j==1 );
                   99332:         assert( (chngToIN&(chngToIN-1))==0 );
                   99333:         assert( chngToIN==getMask(pMaskSet, iCursor) );
                   99334:         break;
                   99335:       }
                   99336:       testcase( j==1 );
                   99337: 
                   99338:       /* We have found a candidate table and column.  Check to see if that
                   99339:       ** table and column is common to every term in the OR clause */
                   99340:       okToChngToIN = 1;
                   99341:       for(; i>=0 && okToChngToIN; i--, pOrTerm++){
                   99342:         assert( pOrTerm->eOperator==WO_EQ );
                   99343:         if( pOrTerm->leftCursor!=iCursor ){
                   99344:           pOrTerm->wtFlags &= ~TERM_OR_OK;
                   99345:         }else if( pOrTerm->u.leftColumn!=iColumn ){
                   99346:           okToChngToIN = 0;
                   99347:         }else{
                   99348:           int affLeft, affRight;
                   99349:           /* If the right-hand side is also a column, then the affinities
                   99350:           ** of both right and left sides must be such that no type
                   99351:           ** conversions are required on the right.  (Ticket #2249)
                   99352:           */
                   99353:           affRight = sqlite3ExprAffinity(pOrTerm->pExpr->pRight);
                   99354:           affLeft = sqlite3ExprAffinity(pOrTerm->pExpr->pLeft);
                   99355:           if( affRight!=0 && affRight!=affLeft ){
                   99356:             okToChngToIN = 0;
                   99357:           }else{
                   99358:             pOrTerm->wtFlags |= TERM_OR_OK;
                   99359:           }
                   99360:         }
                   99361:       }
                   99362:     }
                   99363: 
                   99364:     /* At this point, okToChngToIN is true if original pTerm satisfies
                   99365:     ** case 1.  In that case, construct a new virtual term that is 
                   99366:     ** pTerm converted into an IN operator.
                   99367:     **
                   99368:     ** EV: R-00211-15100
                   99369:     */
                   99370:     if( okToChngToIN ){
                   99371:       Expr *pDup;            /* A transient duplicate expression */
                   99372:       ExprList *pList = 0;   /* The RHS of the IN operator */
                   99373:       Expr *pLeft = 0;       /* The LHS of the IN operator */
                   99374:       Expr *pNew;            /* The complete IN operator */
                   99375: 
                   99376:       for(i=pOrWc->nTerm-1, pOrTerm=pOrWc->a; i>=0; i--, pOrTerm++){
                   99377:         if( (pOrTerm->wtFlags & TERM_OR_OK)==0 ) continue;
                   99378:         assert( pOrTerm->eOperator==WO_EQ );
                   99379:         assert( pOrTerm->leftCursor==iCursor );
                   99380:         assert( pOrTerm->u.leftColumn==iColumn );
                   99381:         pDup = sqlite3ExprDup(db, pOrTerm->pExpr->pRight, 0);
                   99382:         pList = sqlite3ExprListAppend(pWC->pParse, pList, pDup);
                   99383:         pLeft = pOrTerm->pExpr->pLeft;
                   99384:       }
                   99385:       assert( pLeft!=0 );
                   99386:       pDup = sqlite3ExprDup(db, pLeft, 0);
                   99387:       pNew = sqlite3PExpr(pParse, TK_IN, pDup, 0, 0);
                   99388:       if( pNew ){
                   99389:         int idxNew;
                   99390:         transferJoinMarkings(pNew, pExpr);
                   99391:         assert( !ExprHasProperty(pNew, EP_xIsSelect) );
                   99392:         pNew->x.pList = pList;
                   99393:         idxNew = whereClauseInsert(pWC, pNew, TERM_VIRTUAL|TERM_DYNAMIC);
                   99394:         testcase( idxNew==0 );
                   99395:         exprAnalyze(pSrc, pWC, idxNew);
                   99396:         pTerm = &pWC->a[idxTerm];
                   99397:         pWC->a[idxNew].iParent = idxTerm;
                   99398:         pTerm->nChild = 1;
                   99399:       }else{
                   99400:         sqlite3ExprListDelete(db, pList);
                   99401:       }
                   99402:       pTerm->eOperator = WO_NOOP;  /* case 1 trumps case 2 */
                   99403:     }
                   99404:   }
                   99405: }
                   99406: #endif /* !SQLITE_OMIT_OR_OPTIMIZATION && !SQLITE_OMIT_SUBQUERY */
                   99407: 
                   99408: 
                   99409: /*
                   99410: ** The input to this routine is an WhereTerm structure with only the
                   99411: ** "pExpr" field filled in.  The job of this routine is to analyze the
                   99412: ** subexpression and populate all the other fields of the WhereTerm
                   99413: ** structure.
                   99414: **
                   99415: ** If the expression is of the form "<expr> <op> X" it gets commuted
                   99416: ** to the standard form of "X <op> <expr>".
                   99417: **
                   99418: ** If the expression is of the form "X <op> Y" where both X and Y are
                   99419: ** columns, then the original expression is unchanged and a new virtual
                   99420: ** term of the form "Y <op> X" is added to the WHERE clause and
                   99421: ** analyzed separately.  The original term is marked with TERM_COPIED
                   99422: ** and the new term is marked with TERM_DYNAMIC (because it's pExpr
                   99423: ** needs to be freed with the WhereClause) and TERM_VIRTUAL (because it
                   99424: ** is a commuted copy of a prior term.)  The original term has nChild=1
                   99425: ** and the copy has idxParent set to the index of the original term.
                   99426: */
                   99427: static void exprAnalyze(
                   99428:   SrcList *pSrc,            /* the FROM clause */
                   99429:   WhereClause *pWC,         /* the WHERE clause */
                   99430:   int idxTerm               /* Index of the term to be analyzed */
                   99431: ){
                   99432:   WhereTerm *pTerm;                /* The term to be analyzed */
                   99433:   WhereMaskSet *pMaskSet;          /* Set of table index masks */
                   99434:   Expr *pExpr;                     /* The expression to be analyzed */
                   99435:   Bitmask prereqLeft;              /* Prerequesites of the pExpr->pLeft */
                   99436:   Bitmask prereqAll;               /* Prerequesites of pExpr */
                   99437:   Bitmask extraRight = 0;          /* Extra dependencies on LEFT JOIN */
                   99438:   Expr *pStr1 = 0;                 /* RHS of LIKE/GLOB operator */
                   99439:   int isComplete = 0;              /* RHS of LIKE/GLOB ends with wildcard */
                   99440:   int noCase = 0;                  /* LIKE/GLOB distinguishes case */
                   99441:   int op;                          /* Top-level operator.  pExpr->op */
                   99442:   Parse *pParse = pWC->pParse;     /* Parsing context */
                   99443:   sqlite3 *db = pParse->db;        /* Database connection */
                   99444: 
                   99445:   if( db->mallocFailed ){
                   99446:     return;
                   99447:   }
                   99448:   pTerm = &pWC->a[idxTerm];
                   99449:   pMaskSet = pWC->pMaskSet;
                   99450:   pExpr = pTerm->pExpr;
                   99451:   prereqLeft = exprTableUsage(pMaskSet, pExpr->pLeft);
                   99452:   op = pExpr->op;
                   99453:   if( op==TK_IN ){
                   99454:     assert( pExpr->pRight==0 );
                   99455:     if( ExprHasProperty(pExpr, EP_xIsSelect) ){
                   99456:       pTerm->prereqRight = exprSelectTableUsage(pMaskSet, pExpr->x.pSelect);
                   99457:     }else{
                   99458:       pTerm->prereqRight = exprListTableUsage(pMaskSet, pExpr->x.pList);
                   99459:     }
                   99460:   }else if( op==TK_ISNULL ){
                   99461:     pTerm->prereqRight = 0;
                   99462:   }else{
                   99463:     pTerm->prereqRight = exprTableUsage(pMaskSet, pExpr->pRight);
                   99464:   }
                   99465:   prereqAll = exprTableUsage(pMaskSet, pExpr);
                   99466:   if( ExprHasProperty(pExpr, EP_FromJoin) ){
                   99467:     Bitmask x = getMask(pMaskSet, pExpr->iRightJoinTable);
                   99468:     prereqAll |= x;
                   99469:     extraRight = x-1;  /* ON clause terms may not be used with an index
                   99470:                        ** on left table of a LEFT JOIN.  Ticket #3015 */
                   99471:   }
                   99472:   pTerm->prereqAll = prereqAll;
                   99473:   pTerm->leftCursor = -1;
                   99474:   pTerm->iParent = -1;
                   99475:   pTerm->eOperator = 0;
                   99476:   if( allowedOp(op) && (pTerm->prereqRight & prereqLeft)==0 ){
                   99477:     Expr *pLeft = pExpr->pLeft;
                   99478:     Expr *pRight = pExpr->pRight;
                   99479:     if( pLeft->op==TK_COLUMN ){
                   99480:       pTerm->leftCursor = pLeft->iTable;
                   99481:       pTerm->u.leftColumn = pLeft->iColumn;
                   99482:       pTerm->eOperator = operatorMask(op);
                   99483:     }
                   99484:     if( pRight && pRight->op==TK_COLUMN ){
                   99485:       WhereTerm *pNew;
                   99486:       Expr *pDup;
                   99487:       if( pTerm->leftCursor>=0 ){
                   99488:         int idxNew;
                   99489:         pDup = sqlite3ExprDup(db, pExpr, 0);
                   99490:         if( db->mallocFailed ){
                   99491:           sqlite3ExprDelete(db, pDup);
                   99492:           return;
                   99493:         }
                   99494:         idxNew = whereClauseInsert(pWC, pDup, TERM_VIRTUAL|TERM_DYNAMIC);
                   99495:         if( idxNew==0 ) return;
                   99496:         pNew = &pWC->a[idxNew];
                   99497:         pNew->iParent = idxTerm;
                   99498:         pTerm = &pWC->a[idxTerm];
                   99499:         pTerm->nChild = 1;
                   99500:         pTerm->wtFlags |= TERM_COPIED;
                   99501:       }else{
                   99502:         pDup = pExpr;
                   99503:         pNew = pTerm;
                   99504:       }
                   99505:       exprCommute(pParse, pDup);
                   99506:       pLeft = pDup->pLeft;
                   99507:       pNew->leftCursor = pLeft->iTable;
                   99508:       pNew->u.leftColumn = pLeft->iColumn;
                   99509:       testcase( (prereqLeft | extraRight) != prereqLeft );
                   99510:       pNew->prereqRight = prereqLeft | extraRight;
                   99511:       pNew->prereqAll = prereqAll;
                   99512:       pNew->eOperator = operatorMask(pDup->op);
                   99513:     }
                   99514:   }
                   99515: 
                   99516: #ifndef SQLITE_OMIT_BETWEEN_OPTIMIZATION
                   99517:   /* If a term is the BETWEEN operator, create two new virtual terms
                   99518:   ** that define the range that the BETWEEN implements.  For example:
                   99519:   **
                   99520:   **      a BETWEEN b AND c
                   99521:   **
                   99522:   ** is converted into:
                   99523:   **
                   99524:   **      (a BETWEEN b AND c) AND (a>=b) AND (a<=c)
                   99525:   **
                   99526:   ** The two new terms are added onto the end of the WhereClause object.
                   99527:   ** The new terms are "dynamic" and are children of the original BETWEEN
                   99528:   ** term.  That means that if the BETWEEN term is coded, the children are
                   99529:   ** skipped.  Or, if the children are satisfied by an index, the original
                   99530:   ** BETWEEN term is skipped.
                   99531:   */
                   99532:   else if( pExpr->op==TK_BETWEEN && pWC->op==TK_AND ){
                   99533:     ExprList *pList = pExpr->x.pList;
                   99534:     int i;
                   99535:     static const u8 ops[] = {TK_GE, TK_LE};
                   99536:     assert( pList!=0 );
                   99537:     assert( pList->nExpr==2 );
                   99538:     for(i=0; i<2; i++){
                   99539:       Expr *pNewExpr;
                   99540:       int idxNew;
                   99541:       pNewExpr = sqlite3PExpr(pParse, ops[i], 
                   99542:                              sqlite3ExprDup(db, pExpr->pLeft, 0),
                   99543:                              sqlite3ExprDup(db, pList->a[i].pExpr, 0), 0);
                   99544:       idxNew = whereClauseInsert(pWC, pNewExpr, TERM_VIRTUAL|TERM_DYNAMIC);
                   99545:       testcase( idxNew==0 );
                   99546:       exprAnalyze(pSrc, pWC, idxNew);
                   99547:       pTerm = &pWC->a[idxTerm];
                   99548:       pWC->a[idxNew].iParent = idxTerm;
                   99549:     }
                   99550:     pTerm->nChild = 2;
                   99551:   }
                   99552: #endif /* SQLITE_OMIT_BETWEEN_OPTIMIZATION */
                   99553: 
                   99554: #if !defined(SQLITE_OMIT_OR_OPTIMIZATION) && !defined(SQLITE_OMIT_SUBQUERY)
                   99555:   /* Analyze a term that is composed of two or more subterms connected by
                   99556:   ** an OR operator.
                   99557:   */
                   99558:   else if( pExpr->op==TK_OR ){
                   99559:     assert( pWC->op==TK_AND );
                   99560:     exprAnalyzeOrTerm(pSrc, pWC, idxTerm);
                   99561:     pTerm = &pWC->a[idxTerm];
                   99562:   }
                   99563: #endif /* SQLITE_OMIT_OR_OPTIMIZATION */
                   99564: 
                   99565: #ifndef SQLITE_OMIT_LIKE_OPTIMIZATION
                   99566:   /* Add constraints to reduce the search space on a LIKE or GLOB
                   99567:   ** operator.
                   99568:   **
                   99569:   ** A like pattern of the form "x LIKE 'abc%'" is changed into constraints
                   99570:   **
                   99571:   **          x>='abc' AND x<'abd' AND x LIKE 'abc%'
                   99572:   **
                   99573:   ** The last character of the prefix "abc" is incremented to form the
                   99574:   ** termination condition "abd".
                   99575:   */
                   99576:   if( pWC->op==TK_AND 
                   99577:    && isLikeOrGlob(pParse, pExpr, &pStr1, &isComplete, &noCase)
                   99578:   ){
                   99579:     Expr *pLeft;       /* LHS of LIKE/GLOB operator */
                   99580:     Expr *pStr2;       /* Copy of pStr1 - RHS of LIKE/GLOB operator */
                   99581:     Expr *pNewExpr1;
                   99582:     Expr *pNewExpr2;
                   99583:     int idxNew1;
                   99584:     int idxNew2;
                   99585:     CollSeq *pColl;    /* Collating sequence to use */
                   99586: 
                   99587:     pLeft = pExpr->x.pList->a[1].pExpr;
                   99588:     pStr2 = sqlite3ExprDup(db, pStr1, 0);
                   99589:     if( !db->mallocFailed ){
                   99590:       u8 c, *pC;       /* Last character before the first wildcard */
                   99591:       pC = (u8*)&pStr2->u.zToken[sqlite3Strlen30(pStr2->u.zToken)-1];
                   99592:       c = *pC;
                   99593:       if( noCase ){
                   99594:         /* The point is to increment the last character before the first
                   99595:         ** wildcard.  But if we increment '@', that will push it into the
                   99596:         ** alphabetic range where case conversions will mess up the 
                   99597:         ** inequality.  To avoid this, make sure to also run the full
                   99598:         ** LIKE on all candidate expressions by clearing the isComplete flag
                   99599:         */
                   99600:         if( c=='A'-1 ) isComplete = 0;   /* EV: R-64339-08207 */
                   99601: 
                   99602: 
                   99603:         c = sqlite3UpperToLower[c];
                   99604:       }
                   99605:       *pC = c + 1;
                   99606:     }
                   99607:     pColl = sqlite3FindCollSeq(db, SQLITE_UTF8, noCase ? "NOCASE" : "BINARY",0);
                   99608:     pNewExpr1 = sqlite3PExpr(pParse, TK_GE, 
                   99609:                      sqlite3ExprSetColl(sqlite3ExprDup(db,pLeft,0), pColl),
                   99610:                      pStr1, 0);
                   99611:     idxNew1 = whereClauseInsert(pWC, pNewExpr1, TERM_VIRTUAL|TERM_DYNAMIC);
                   99612:     testcase( idxNew1==0 );
                   99613:     exprAnalyze(pSrc, pWC, idxNew1);
                   99614:     pNewExpr2 = sqlite3PExpr(pParse, TK_LT,
                   99615:                      sqlite3ExprSetColl(sqlite3ExprDup(db,pLeft,0), pColl),
                   99616:                      pStr2, 0);
                   99617:     idxNew2 = whereClauseInsert(pWC, pNewExpr2, TERM_VIRTUAL|TERM_DYNAMIC);
                   99618:     testcase( idxNew2==0 );
                   99619:     exprAnalyze(pSrc, pWC, idxNew2);
                   99620:     pTerm = &pWC->a[idxTerm];
                   99621:     if( isComplete ){
                   99622:       pWC->a[idxNew1].iParent = idxTerm;
                   99623:       pWC->a[idxNew2].iParent = idxTerm;
                   99624:       pTerm->nChild = 2;
                   99625:     }
                   99626:   }
                   99627: #endif /* SQLITE_OMIT_LIKE_OPTIMIZATION */
                   99628: 
                   99629: #ifndef SQLITE_OMIT_VIRTUALTABLE
                   99630:   /* Add a WO_MATCH auxiliary term to the constraint set if the
                   99631:   ** current expression is of the form:  column MATCH expr.
                   99632:   ** This information is used by the xBestIndex methods of
                   99633:   ** virtual tables.  The native query optimizer does not attempt
                   99634:   ** to do anything with MATCH functions.
                   99635:   */
                   99636:   if( isMatchOfColumn(pExpr) ){
                   99637:     int idxNew;
                   99638:     Expr *pRight, *pLeft;
                   99639:     WhereTerm *pNewTerm;
                   99640:     Bitmask prereqColumn, prereqExpr;
                   99641: 
                   99642:     pRight = pExpr->x.pList->a[0].pExpr;
                   99643:     pLeft = pExpr->x.pList->a[1].pExpr;
                   99644:     prereqExpr = exprTableUsage(pMaskSet, pRight);
                   99645:     prereqColumn = exprTableUsage(pMaskSet, pLeft);
                   99646:     if( (prereqExpr & prereqColumn)==0 ){
                   99647:       Expr *pNewExpr;
                   99648:       pNewExpr = sqlite3PExpr(pParse, TK_MATCH, 
                   99649:                               0, sqlite3ExprDup(db, pRight, 0), 0);
                   99650:       idxNew = whereClauseInsert(pWC, pNewExpr, TERM_VIRTUAL|TERM_DYNAMIC);
                   99651:       testcase( idxNew==0 );
                   99652:       pNewTerm = &pWC->a[idxNew];
                   99653:       pNewTerm->prereqRight = prereqExpr;
                   99654:       pNewTerm->leftCursor = pLeft->iTable;
                   99655:       pNewTerm->u.leftColumn = pLeft->iColumn;
                   99656:       pNewTerm->eOperator = WO_MATCH;
                   99657:       pNewTerm->iParent = idxTerm;
                   99658:       pTerm = &pWC->a[idxTerm];
                   99659:       pTerm->nChild = 1;
                   99660:       pTerm->wtFlags |= TERM_COPIED;
                   99661:       pNewTerm->prereqAll = pTerm->prereqAll;
                   99662:     }
                   99663:   }
                   99664: #endif /* SQLITE_OMIT_VIRTUALTABLE */
                   99665: 
                   99666: #ifdef SQLITE_ENABLE_STAT2
                   99667:   /* When sqlite_stat2 histogram data is available an operator of the
                   99668:   ** form "x IS NOT NULL" can sometimes be evaluated more efficiently
                   99669:   ** as "x>NULL" if x is not an INTEGER PRIMARY KEY.  So construct a
                   99670:   ** virtual term of that form.
                   99671:   **
                   99672:   ** Note that the virtual term must be tagged with TERM_VNULL.  This
                   99673:   ** TERM_VNULL tag will suppress the not-null check at the beginning
                   99674:   ** of the loop.  Without the TERM_VNULL flag, the not-null check at
                   99675:   ** the start of the loop will prevent any results from being returned.
                   99676:   */
                   99677:   if( pExpr->op==TK_NOTNULL
                   99678:    && pExpr->pLeft->op==TK_COLUMN
                   99679:    && pExpr->pLeft->iColumn>=0
                   99680:   ){
                   99681:     Expr *pNewExpr;
                   99682:     Expr *pLeft = pExpr->pLeft;
                   99683:     int idxNew;
                   99684:     WhereTerm *pNewTerm;
                   99685: 
                   99686:     pNewExpr = sqlite3PExpr(pParse, TK_GT,
                   99687:                             sqlite3ExprDup(db, pLeft, 0),
                   99688:                             sqlite3PExpr(pParse, TK_NULL, 0, 0, 0), 0);
                   99689: 
                   99690:     idxNew = whereClauseInsert(pWC, pNewExpr,
                   99691:                               TERM_VIRTUAL|TERM_DYNAMIC|TERM_VNULL);
                   99692:     if( idxNew ){
                   99693:       pNewTerm = &pWC->a[idxNew];
                   99694:       pNewTerm->prereqRight = 0;
                   99695:       pNewTerm->leftCursor = pLeft->iTable;
                   99696:       pNewTerm->u.leftColumn = pLeft->iColumn;
                   99697:       pNewTerm->eOperator = WO_GT;
                   99698:       pNewTerm->iParent = idxTerm;
                   99699:       pTerm = &pWC->a[idxTerm];
                   99700:       pTerm->nChild = 1;
                   99701:       pTerm->wtFlags |= TERM_COPIED;
                   99702:       pNewTerm->prereqAll = pTerm->prereqAll;
                   99703:     }
                   99704:   }
                   99705: #endif /* SQLITE_ENABLE_STAT2 */
                   99706: 
                   99707:   /* Prevent ON clause terms of a LEFT JOIN from being used to drive
                   99708:   ** an index for tables to the left of the join.
                   99709:   */
                   99710:   pTerm->prereqRight |= extraRight;
                   99711: }
                   99712: 
                   99713: /*
                   99714: ** Return TRUE if any of the expressions in pList->a[iFirst...] contain
                   99715: ** a reference to any table other than the iBase table.
                   99716: */
                   99717: static int referencesOtherTables(
                   99718:   ExprList *pList,          /* Search expressions in ths list */
                   99719:   WhereMaskSet *pMaskSet,   /* Mapping from tables to bitmaps */
                   99720:   int iFirst,               /* Be searching with the iFirst-th expression */
                   99721:   int iBase                 /* Ignore references to this table */
                   99722: ){
                   99723:   Bitmask allowed = ~getMask(pMaskSet, iBase);
                   99724:   while( iFirst<pList->nExpr ){
                   99725:     if( (exprTableUsage(pMaskSet, pList->a[iFirst++].pExpr)&allowed)!=0 ){
                   99726:       return 1;
                   99727:     }
                   99728:   }
                   99729:   return 0;
                   99730: }
                   99731: 
                   99732: 
                   99733: /*
                   99734: ** This routine decides if pIdx can be used to satisfy the ORDER BY
                   99735: ** clause.  If it can, it returns 1.  If pIdx cannot satisfy the
                   99736: ** ORDER BY clause, this routine returns 0.
                   99737: **
                   99738: ** pOrderBy is an ORDER BY clause from a SELECT statement.  pTab is the
                   99739: ** left-most table in the FROM clause of that same SELECT statement and
                   99740: ** the table has a cursor number of "base".  pIdx is an index on pTab.
                   99741: **
                   99742: ** nEqCol is the number of columns of pIdx that are used as equality
                   99743: ** constraints.  Any of these columns may be missing from the ORDER BY
                   99744: ** clause and the match can still be a success.
                   99745: **
                   99746: ** All terms of the ORDER BY that match against the index must be either
                   99747: ** ASC or DESC.  (Terms of the ORDER BY clause past the end of a UNIQUE
                   99748: ** index do not need to satisfy this constraint.)  The *pbRev value is
                   99749: ** set to 1 if the ORDER BY clause is all DESC and it is set to 0 if
                   99750: ** the ORDER BY clause is all ASC.
                   99751: */
                   99752: static int isSortingIndex(
                   99753:   Parse *pParse,          /* Parsing context */
                   99754:   WhereMaskSet *pMaskSet, /* Mapping from table cursor numbers to bitmaps */
                   99755:   Index *pIdx,            /* The index we are testing */
                   99756:   int base,               /* Cursor number for the table to be sorted */
                   99757:   ExprList *pOrderBy,     /* The ORDER BY clause */
                   99758:   int nEqCol,             /* Number of index columns with == constraints */
                   99759:   int wsFlags,            /* Index usages flags */
                   99760:   int *pbRev              /* Set to 1 if ORDER BY is DESC */
                   99761: ){
                   99762:   int i, j;                       /* Loop counters */
                   99763:   int sortOrder = 0;              /* XOR of index and ORDER BY sort direction */
                   99764:   int nTerm;                      /* Number of ORDER BY terms */
                   99765:   struct ExprList_item *pTerm;    /* A term of the ORDER BY clause */
                   99766:   sqlite3 *db = pParse->db;
                   99767: 
                   99768:   assert( pOrderBy!=0 );
                   99769:   nTerm = pOrderBy->nExpr;
                   99770:   assert( nTerm>0 );
                   99771: 
                   99772:   /* Argument pIdx must either point to a 'real' named index structure, 
                   99773:   ** or an index structure allocated on the stack by bestBtreeIndex() to
                   99774:   ** represent the rowid index that is part of every table.  */
                   99775:   assert( pIdx->zName || (pIdx->nColumn==1 && pIdx->aiColumn[0]==-1) );
                   99776: 
                   99777:   /* Match terms of the ORDER BY clause against columns of
                   99778:   ** the index.
                   99779:   **
                   99780:   ** Note that indices have pIdx->nColumn regular columns plus
                   99781:   ** one additional column containing the rowid.  The rowid column
                   99782:   ** of the index is also allowed to match against the ORDER BY
                   99783:   ** clause.
                   99784:   */
                   99785:   for(i=j=0, pTerm=pOrderBy->a; j<nTerm && i<=pIdx->nColumn; i++){
                   99786:     Expr *pExpr;       /* The expression of the ORDER BY pTerm */
                   99787:     CollSeq *pColl;    /* The collating sequence of pExpr */
                   99788:     int termSortOrder; /* Sort order for this term */
                   99789:     int iColumn;       /* The i-th column of the index.  -1 for rowid */
                   99790:     int iSortOrder;    /* 1 for DESC, 0 for ASC on the i-th index term */
                   99791:     const char *zColl; /* Name of the collating sequence for i-th index term */
                   99792: 
                   99793:     pExpr = pTerm->pExpr;
                   99794:     if( pExpr->op!=TK_COLUMN || pExpr->iTable!=base ){
                   99795:       /* Can not use an index sort on anything that is not a column in the
                   99796:       ** left-most table of the FROM clause */
                   99797:       break;
                   99798:     }
                   99799:     pColl = sqlite3ExprCollSeq(pParse, pExpr);
                   99800:     if( !pColl ){
                   99801:       pColl = db->pDfltColl;
                   99802:     }
                   99803:     if( pIdx->zName && i<pIdx->nColumn ){
                   99804:       iColumn = pIdx->aiColumn[i];
                   99805:       if( iColumn==pIdx->pTable->iPKey ){
                   99806:         iColumn = -1;
                   99807:       }
                   99808:       iSortOrder = pIdx->aSortOrder[i];
                   99809:       zColl = pIdx->azColl[i];
                   99810:     }else{
                   99811:       iColumn = -1;
                   99812:       iSortOrder = 0;
                   99813:       zColl = pColl->zName;
                   99814:     }
                   99815:     if( pExpr->iColumn!=iColumn || sqlite3StrICmp(pColl->zName, zColl) ){
                   99816:       /* Term j of the ORDER BY clause does not match column i of the index */
                   99817:       if( i<nEqCol ){
                   99818:         /* If an index column that is constrained by == fails to match an
                   99819:         ** ORDER BY term, that is OK.  Just ignore that column of the index
                   99820:         */
                   99821:         continue;
                   99822:       }else if( i==pIdx->nColumn ){
                   99823:         /* Index column i is the rowid.  All other terms match. */
                   99824:         break;
                   99825:       }else{
                   99826:         /* If an index column fails to match and is not constrained by ==
                   99827:         ** then the index cannot satisfy the ORDER BY constraint.
                   99828:         */
                   99829:         return 0;
                   99830:       }
                   99831:     }
                   99832:     assert( pIdx->aSortOrder!=0 || iColumn==-1 );
                   99833:     assert( pTerm->sortOrder==0 || pTerm->sortOrder==1 );
                   99834:     assert( iSortOrder==0 || iSortOrder==1 );
                   99835:     termSortOrder = iSortOrder ^ pTerm->sortOrder;
                   99836:     if( i>nEqCol ){
                   99837:       if( termSortOrder!=sortOrder ){
                   99838:         /* Indices can only be used if all ORDER BY terms past the
                   99839:         ** equality constraints are all either DESC or ASC. */
                   99840:         return 0;
                   99841:       }
                   99842:     }else{
                   99843:       sortOrder = termSortOrder;
                   99844:     }
                   99845:     j++;
                   99846:     pTerm++;
                   99847:     if( iColumn<0 && !referencesOtherTables(pOrderBy, pMaskSet, j, base) ){
                   99848:       /* If the indexed column is the primary key and everything matches
                   99849:       ** so far and none of the ORDER BY terms to the right reference other
                   99850:       ** tables in the join, then we are assured that the index can be used 
                   99851:       ** to sort because the primary key is unique and so none of the other
                   99852:       ** columns will make any difference
                   99853:       */
                   99854:       j = nTerm;
                   99855:     }
                   99856:   }
                   99857: 
                   99858:   *pbRev = sortOrder!=0;
                   99859:   if( j>=nTerm ){
                   99860:     /* All terms of the ORDER BY clause are covered by this index so
                   99861:     ** this index can be used for sorting. */
                   99862:     return 1;
                   99863:   }
                   99864:   if( pIdx->onError!=OE_None && i==pIdx->nColumn
                   99865:       && (wsFlags & WHERE_COLUMN_NULL)==0
                   99866:       && !referencesOtherTables(pOrderBy, pMaskSet, j, base) ){
                   99867:     /* All terms of this index match some prefix of the ORDER BY clause
                   99868:     ** and the index is UNIQUE and no terms on the tail of the ORDER BY
                   99869:     ** clause reference other tables in a join.  If this is all true then
                   99870:     ** the order by clause is superfluous.  Not that if the matching
                   99871:     ** condition is IS NULL then the result is not necessarily unique
                   99872:     ** even on a UNIQUE index, so disallow those cases. */
                   99873:     return 1;
                   99874:   }
                   99875:   return 0;
                   99876: }
                   99877: 
                   99878: /*
                   99879: ** Prepare a crude estimate of the logarithm of the input value.
                   99880: ** The results need not be exact.  This is only used for estimating
                   99881: ** the total cost of performing operations with O(logN) or O(NlogN)
                   99882: ** complexity.  Because N is just a guess, it is no great tragedy if
                   99883: ** logN is a little off.
                   99884: */
                   99885: static double estLog(double N){
                   99886:   double logN = 1;
                   99887:   double x = 10;
                   99888:   while( N>x ){
                   99889:     logN += 1;
                   99890:     x *= 10;
                   99891:   }
                   99892:   return logN;
                   99893: }
                   99894: 
                   99895: /*
                   99896: ** Two routines for printing the content of an sqlite3_index_info
                   99897: ** structure.  Used for testing and debugging only.  If neither
                   99898: ** SQLITE_TEST or SQLITE_DEBUG are defined, then these routines
                   99899: ** are no-ops.
                   99900: */
                   99901: #if !defined(SQLITE_OMIT_VIRTUALTABLE) && defined(SQLITE_DEBUG)
                   99902: static void TRACE_IDX_INPUTS(sqlite3_index_info *p){
                   99903:   int i;
                   99904:   if( !sqlite3WhereTrace ) return;
                   99905:   for(i=0; i<p->nConstraint; i++){
                   99906:     sqlite3DebugPrintf("  constraint[%d]: col=%d termid=%d op=%d usabled=%d\n",
                   99907:        i,
                   99908:        p->aConstraint[i].iColumn,
                   99909:        p->aConstraint[i].iTermOffset,
                   99910:        p->aConstraint[i].op,
                   99911:        p->aConstraint[i].usable);
                   99912:   }
                   99913:   for(i=0; i<p->nOrderBy; i++){
                   99914:     sqlite3DebugPrintf("  orderby[%d]: col=%d desc=%d\n",
                   99915:        i,
                   99916:        p->aOrderBy[i].iColumn,
                   99917:        p->aOrderBy[i].desc);
                   99918:   }
                   99919: }
                   99920: static void TRACE_IDX_OUTPUTS(sqlite3_index_info *p){
                   99921:   int i;
                   99922:   if( !sqlite3WhereTrace ) return;
                   99923:   for(i=0; i<p->nConstraint; i++){
                   99924:     sqlite3DebugPrintf("  usage[%d]: argvIdx=%d omit=%d\n",
                   99925:        i,
                   99926:        p->aConstraintUsage[i].argvIndex,
                   99927:        p->aConstraintUsage[i].omit);
                   99928:   }
                   99929:   sqlite3DebugPrintf("  idxNum=%d\n", p->idxNum);
                   99930:   sqlite3DebugPrintf("  idxStr=%s\n", p->idxStr);
                   99931:   sqlite3DebugPrintf("  orderByConsumed=%d\n", p->orderByConsumed);
                   99932:   sqlite3DebugPrintf("  estimatedCost=%g\n", p->estimatedCost);
                   99933: }
                   99934: #else
                   99935: #define TRACE_IDX_INPUTS(A)
                   99936: #define TRACE_IDX_OUTPUTS(A)
                   99937: #endif
                   99938: 
                   99939: /* 
                   99940: ** Required because bestIndex() is called by bestOrClauseIndex() 
                   99941: */
                   99942: static void bestIndex(
                   99943:     Parse*, WhereClause*, struct SrcList_item*,
                   99944:     Bitmask, Bitmask, ExprList*, WhereCost*);
                   99945: 
                   99946: /*
                   99947: ** This routine attempts to find an scanning strategy that can be used 
                   99948: ** to optimize an 'OR' expression that is part of a WHERE clause. 
                   99949: **
                   99950: ** The table associated with FROM clause term pSrc may be either a
                   99951: ** regular B-Tree table or a virtual table.
                   99952: */
                   99953: static void bestOrClauseIndex(
                   99954:   Parse *pParse,              /* The parsing context */
                   99955:   WhereClause *pWC,           /* The WHERE clause */
                   99956:   struct SrcList_item *pSrc,  /* The FROM clause term to search */
                   99957:   Bitmask notReady,           /* Mask of cursors not available for indexing */
                   99958:   Bitmask notValid,           /* Cursors not available for any purpose */
                   99959:   ExprList *pOrderBy,         /* The ORDER BY clause */
                   99960:   WhereCost *pCost            /* Lowest cost query plan */
                   99961: ){
                   99962: #ifndef SQLITE_OMIT_OR_OPTIMIZATION
                   99963:   const int iCur = pSrc->iCursor;   /* The cursor of the table to be accessed */
                   99964:   const Bitmask maskSrc = getMask(pWC->pMaskSet, iCur);  /* Bitmask for pSrc */
                   99965:   WhereTerm * const pWCEnd = &pWC->a[pWC->nTerm];        /* End of pWC->a[] */
                   99966:   WhereTerm *pTerm;                 /* A single term of the WHERE clause */
                   99967: 
                   99968:   /* No OR-clause optimization allowed if the INDEXED BY or NOT INDEXED clauses
                   99969:   ** are used */
                   99970:   if( pSrc->notIndexed || pSrc->pIndex!=0 ){
                   99971:     return;
                   99972:   }
                   99973: 
                   99974:   /* Search the WHERE clause terms for a usable WO_OR term. */
                   99975:   for(pTerm=pWC->a; pTerm<pWCEnd; pTerm++){
                   99976:     if( pTerm->eOperator==WO_OR 
                   99977:      && ((pTerm->prereqAll & ~maskSrc) & notReady)==0
                   99978:      && (pTerm->u.pOrInfo->indexable & maskSrc)!=0 
                   99979:     ){
                   99980:       WhereClause * const pOrWC = &pTerm->u.pOrInfo->wc;
                   99981:       WhereTerm * const pOrWCEnd = &pOrWC->a[pOrWC->nTerm];
                   99982:       WhereTerm *pOrTerm;
                   99983:       int flags = WHERE_MULTI_OR;
                   99984:       double rTotal = 0;
                   99985:       double nRow = 0;
                   99986:       Bitmask used = 0;
                   99987: 
                   99988:       for(pOrTerm=pOrWC->a; pOrTerm<pOrWCEnd; pOrTerm++){
                   99989:         WhereCost sTermCost;
                   99990:         WHERETRACE(("... Multi-index OR testing for term %d of %d....\n", 
                   99991:           (pOrTerm - pOrWC->a), (pTerm - pWC->a)
                   99992:         ));
                   99993:         if( pOrTerm->eOperator==WO_AND ){
                   99994:           WhereClause *pAndWC = &pOrTerm->u.pAndInfo->wc;
                   99995:           bestIndex(pParse, pAndWC, pSrc, notReady, notValid, 0, &sTermCost);
                   99996:         }else if( pOrTerm->leftCursor==iCur ){
                   99997:           WhereClause tempWC;
                   99998:           tempWC.pParse = pWC->pParse;
                   99999:           tempWC.pMaskSet = pWC->pMaskSet;
                   100000:           tempWC.op = TK_AND;
                   100001:           tempWC.a = pOrTerm;
                   100002:           tempWC.nTerm = 1;
                   100003:           bestIndex(pParse, &tempWC, pSrc, notReady, notValid, 0, &sTermCost);
                   100004:         }else{
                   100005:           continue;
                   100006:         }
                   100007:         rTotal += sTermCost.rCost;
                   100008:         nRow += sTermCost.plan.nRow;
                   100009:         used |= sTermCost.used;
                   100010:         if( rTotal>=pCost->rCost ) break;
                   100011:       }
                   100012: 
                   100013:       /* If there is an ORDER BY clause, increase the scan cost to account 
                   100014:       ** for the cost of the sort. */
                   100015:       if( pOrderBy!=0 ){
                   100016:         WHERETRACE(("... sorting increases OR cost %.9g to %.9g\n",
                   100017:                     rTotal, rTotal+nRow*estLog(nRow)));
                   100018:         rTotal += nRow*estLog(nRow);
                   100019:       }
                   100020: 
                   100021:       /* If the cost of scanning using this OR term for optimization is
                   100022:       ** less than the current cost stored in pCost, replace the contents
                   100023:       ** of pCost. */
                   100024:       WHERETRACE(("... multi-index OR cost=%.9g nrow=%.9g\n", rTotal, nRow));
                   100025:       if( rTotal<pCost->rCost ){
                   100026:         pCost->rCost = rTotal;
                   100027:         pCost->used = used;
                   100028:         pCost->plan.nRow = nRow;
                   100029:         pCost->plan.wsFlags = flags;
                   100030:         pCost->plan.u.pTerm = pTerm;
                   100031:       }
                   100032:     }
                   100033:   }
                   100034: #endif /* SQLITE_OMIT_OR_OPTIMIZATION */
                   100035: }
                   100036: 
                   100037: #ifndef SQLITE_OMIT_AUTOMATIC_INDEX
                   100038: /*
                   100039: ** Return TRUE if the WHERE clause term pTerm is of a form where it
                   100040: ** could be used with an index to access pSrc, assuming an appropriate
                   100041: ** index existed.
                   100042: */
                   100043: static int termCanDriveIndex(
                   100044:   WhereTerm *pTerm,              /* WHERE clause term to check */
                   100045:   struct SrcList_item *pSrc,     /* Table we are trying to access */
                   100046:   Bitmask notReady               /* Tables in outer loops of the join */
                   100047: ){
                   100048:   char aff;
                   100049:   if( pTerm->leftCursor!=pSrc->iCursor ) return 0;
                   100050:   if( pTerm->eOperator!=WO_EQ ) return 0;
                   100051:   if( (pTerm->prereqRight & notReady)!=0 ) return 0;
                   100052:   aff = pSrc->pTab->aCol[pTerm->u.leftColumn].affinity;
                   100053:   if( !sqlite3IndexAffinityOk(pTerm->pExpr, aff) ) return 0;
                   100054:   return 1;
                   100055: }
                   100056: #endif
                   100057: 
                   100058: #ifndef SQLITE_OMIT_AUTOMATIC_INDEX
                   100059: /*
                   100060: ** If the query plan for pSrc specified in pCost is a full table scan
                   100061: ** and indexing is allows (if there is no NOT INDEXED clause) and it
                   100062: ** possible to construct a transient index that would perform better
                   100063: ** than a full table scan even when the cost of constructing the index
                   100064: ** is taken into account, then alter the query plan to use the
                   100065: ** transient index.
                   100066: */
                   100067: static void bestAutomaticIndex(
                   100068:   Parse *pParse,              /* The parsing context */
                   100069:   WhereClause *pWC,           /* The WHERE clause */
                   100070:   struct SrcList_item *pSrc,  /* The FROM clause term to search */
                   100071:   Bitmask notReady,           /* Mask of cursors that are not available */
                   100072:   WhereCost *pCost            /* Lowest cost query plan */
                   100073: ){
                   100074:   double nTableRow;           /* Rows in the input table */
                   100075:   double logN;                /* log(nTableRow) */
                   100076:   double costTempIdx;         /* per-query cost of the transient index */
                   100077:   WhereTerm *pTerm;           /* A single term of the WHERE clause */
                   100078:   WhereTerm *pWCEnd;          /* End of pWC->a[] */
                   100079:   Table *pTable;              /* Table tht might be indexed */
                   100080: 
                   100081:   if( (pParse->db->flags & SQLITE_AutoIndex)==0 ){
                   100082:     /* Automatic indices are disabled at run-time */
                   100083:     return;
                   100084:   }
                   100085:   if( (pCost->plan.wsFlags & WHERE_NOT_FULLSCAN)!=0 ){
                   100086:     /* We already have some kind of index in use for this query. */
                   100087:     return;
                   100088:   }
                   100089:   if( pSrc->notIndexed ){
                   100090:     /* The NOT INDEXED clause appears in the SQL. */
                   100091:     return;
                   100092:   }
                   100093: 
                   100094:   assert( pParse->nQueryLoop >= (double)1 );
                   100095:   pTable = pSrc->pTab;
                   100096:   nTableRow = pTable->nRowEst;
                   100097:   logN = estLog(nTableRow);
                   100098:   costTempIdx = 2*logN*(nTableRow/pParse->nQueryLoop + 1);
                   100099:   if( costTempIdx>=pCost->rCost ){
                   100100:     /* The cost of creating the transient table would be greater than
                   100101:     ** doing the full table scan */
                   100102:     return;
                   100103:   }
                   100104: 
                   100105:   /* Search for any equality comparison term */
                   100106:   pWCEnd = &pWC->a[pWC->nTerm];
                   100107:   for(pTerm=pWC->a; pTerm<pWCEnd; pTerm++){
                   100108:     if( termCanDriveIndex(pTerm, pSrc, notReady) ){
                   100109:       WHERETRACE(("auto-index reduces cost from %.1f to %.1f\n",
                   100110:                     pCost->rCost, costTempIdx));
                   100111:       pCost->rCost = costTempIdx;
                   100112:       pCost->plan.nRow = logN + 1;
                   100113:       pCost->plan.wsFlags = WHERE_TEMP_INDEX;
                   100114:       pCost->used = pTerm->prereqRight;
                   100115:       break;
                   100116:     }
                   100117:   }
                   100118: }
                   100119: #else
                   100120: # define bestAutomaticIndex(A,B,C,D,E)  /* no-op */
                   100121: #endif /* SQLITE_OMIT_AUTOMATIC_INDEX */
                   100122: 
                   100123: 
                   100124: #ifndef SQLITE_OMIT_AUTOMATIC_INDEX
                   100125: /*
                   100126: ** Generate code to construct the Index object for an automatic index
                   100127: ** and to set up the WhereLevel object pLevel so that the code generator
                   100128: ** makes use of the automatic index.
                   100129: */
                   100130: static void constructAutomaticIndex(
                   100131:   Parse *pParse,              /* The parsing context */
                   100132:   WhereClause *pWC,           /* The WHERE clause */
                   100133:   struct SrcList_item *pSrc,  /* The FROM clause term to get the next index */
                   100134:   Bitmask notReady,           /* Mask of cursors that are not available */
                   100135:   WhereLevel *pLevel          /* Write new index here */
                   100136: ){
                   100137:   int nColumn;                /* Number of columns in the constructed index */
                   100138:   WhereTerm *pTerm;           /* A single term of the WHERE clause */
                   100139:   WhereTerm *pWCEnd;          /* End of pWC->a[] */
                   100140:   int nByte;                  /* Byte of memory needed for pIdx */
                   100141:   Index *pIdx;                /* Object describing the transient index */
                   100142:   Vdbe *v;                    /* Prepared statement under construction */
                   100143:   int regIsInit;              /* Register set by initialization */
                   100144:   int addrInit;               /* Address of the initialization bypass jump */
                   100145:   Table *pTable;              /* The table being indexed */
                   100146:   KeyInfo *pKeyinfo;          /* Key information for the index */   
                   100147:   int addrTop;                /* Top of the index fill loop */
                   100148:   int regRecord;              /* Register holding an index record */
                   100149:   int n;                      /* Column counter */
                   100150:   int i;                      /* Loop counter */
                   100151:   int mxBitCol;               /* Maximum column in pSrc->colUsed */
                   100152:   CollSeq *pColl;             /* Collating sequence to on a column */
                   100153:   Bitmask idxCols;            /* Bitmap of columns used for indexing */
                   100154:   Bitmask extraCols;          /* Bitmap of additional columns */
                   100155: 
                   100156:   /* Generate code to skip over the creation and initialization of the
                   100157:   ** transient index on 2nd and subsequent iterations of the loop. */
                   100158:   v = pParse->pVdbe;
                   100159:   assert( v!=0 );
                   100160:   regIsInit = ++pParse->nMem;
                   100161:   addrInit = sqlite3VdbeAddOp1(v, OP_If, regIsInit);
                   100162:   sqlite3VdbeAddOp2(v, OP_Integer, 1, regIsInit);
                   100163: 
                   100164:   /* Count the number of columns that will be added to the index
                   100165:   ** and used to match WHERE clause constraints */
                   100166:   nColumn = 0;
                   100167:   pTable = pSrc->pTab;
                   100168:   pWCEnd = &pWC->a[pWC->nTerm];
                   100169:   idxCols = 0;
                   100170:   for(pTerm=pWC->a; pTerm<pWCEnd; pTerm++){
                   100171:     if( termCanDriveIndex(pTerm, pSrc, notReady) ){
                   100172:       int iCol = pTerm->u.leftColumn;
                   100173:       Bitmask cMask = iCol>=BMS ? ((Bitmask)1)<<(BMS-1) : ((Bitmask)1)<<iCol;
                   100174:       testcase( iCol==BMS );
                   100175:       testcase( iCol==BMS-1 );
                   100176:       if( (idxCols & cMask)==0 ){
                   100177:         nColumn++;
                   100178:         idxCols |= cMask;
                   100179:       }
                   100180:     }
                   100181:   }
                   100182:   assert( nColumn>0 );
                   100183:   pLevel->plan.nEq = nColumn;
                   100184: 
                   100185:   /* Count the number of additional columns needed to create a
                   100186:   ** covering index.  A "covering index" is an index that contains all
                   100187:   ** columns that are needed by the query.  With a covering index, the
                   100188:   ** original table never needs to be accessed.  Automatic indices must
                   100189:   ** be a covering index because the index will not be updated if the
                   100190:   ** original table changes and the index and table cannot both be used
                   100191:   ** if they go out of sync.
                   100192:   */
                   100193:   extraCols = pSrc->colUsed & (~idxCols | (((Bitmask)1)<<(BMS-1)));
                   100194:   mxBitCol = (pTable->nCol >= BMS-1) ? BMS-1 : pTable->nCol;
                   100195:   testcase( pTable->nCol==BMS-1 );
                   100196:   testcase( pTable->nCol==BMS-2 );
                   100197:   for(i=0; i<mxBitCol; i++){
                   100198:     if( extraCols & (((Bitmask)1)<<i) ) nColumn++;
                   100199:   }
                   100200:   if( pSrc->colUsed & (((Bitmask)1)<<(BMS-1)) ){
                   100201:     nColumn += pTable->nCol - BMS + 1;
                   100202:   }
                   100203:   pLevel->plan.wsFlags |= WHERE_COLUMN_EQ | WHERE_IDX_ONLY | WO_EQ;
                   100204: 
                   100205:   /* Construct the Index object to describe this index */
                   100206:   nByte = sizeof(Index);
                   100207:   nByte += nColumn*sizeof(int);     /* Index.aiColumn */
                   100208:   nByte += nColumn*sizeof(char*);   /* Index.azColl */
                   100209:   nByte += nColumn;                 /* Index.aSortOrder */
                   100210:   pIdx = sqlite3DbMallocZero(pParse->db, nByte);
                   100211:   if( pIdx==0 ) return;
                   100212:   pLevel->plan.u.pIdx = pIdx;
                   100213:   pIdx->azColl = (char**)&pIdx[1];
                   100214:   pIdx->aiColumn = (int*)&pIdx->azColl[nColumn];
                   100215:   pIdx->aSortOrder = (u8*)&pIdx->aiColumn[nColumn];
                   100216:   pIdx->zName = "auto-index";
                   100217:   pIdx->nColumn = nColumn;
                   100218:   pIdx->pTable = pTable;
                   100219:   n = 0;
                   100220:   idxCols = 0;
                   100221:   for(pTerm=pWC->a; pTerm<pWCEnd; pTerm++){
                   100222:     if( termCanDriveIndex(pTerm, pSrc, notReady) ){
                   100223:       int iCol = pTerm->u.leftColumn;
                   100224:       Bitmask cMask = iCol>=BMS ? ((Bitmask)1)<<(BMS-1) : ((Bitmask)1)<<iCol;
                   100225:       if( (idxCols & cMask)==0 ){
                   100226:         Expr *pX = pTerm->pExpr;
                   100227:         idxCols |= cMask;
                   100228:         pIdx->aiColumn[n] = pTerm->u.leftColumn;
                   100229:         pColl = sqlite3BinaryCompareCollSeq(pParse, pX->pLeft, pX->pRight);
                   100230:         pIdx->azColl[n] = ALWAYS(pColl) ? pColl->zName : "BINARY";
                   100231:         n++;
                   100232:       }
                   100233:     }
                   100234:   }
                   100235:   assert( (u32)n==pLevel->plan.nEq );
                   100236: 
                   100237:   /* Add additional columns needed to make the automatic index into
                   100238:   ** a covering index */
                   100239:   for(i=0; i<mxBitCol; i++){
                   100240:     if( extraCols & (((Bitmask)1)<<i) ){
                   100241:       pIdx->aiColumn[n] = i;
                   100242:       pIdx->azColl[n] = "BINARY";
                   100243:       n++;
                   100244:     }
                   100245:   }
                   100246:   if( pSrc->colUsed & (((Bitmask)1)<<(BMS-1)) ){
                   100247:     for(i=BMS-1; i<pTable->nCol; i++){
                   100248:       pIdx->aiColumn[n] = i;
                   100249:       pIdx->azColl[n] = "BINARY";
                   100250:       n++;
                   100251:     }
                   100252:   }
                   100253:   assert( n==nColumn );
                   100254: 
                   100255:   /* Create the automatic index */
                   100256:   pKeyinfo = sqlite3IndexKeyinfo(pParse, pIdx);
                   100257:   assert( pLevel->iIdxCur>=0 );
                   100258:   sqlite3VdbeAddOp4(v, OP_OpenAutoindex, pLevel->iIdxCur, nColumn+1, 0,
                   100259:                     (char*)pKeyinfo, P4_KEYINFO_HANDOFF);
                   100260:   VdbeComment((v, "for %s", pTable->zName));
                   100261: 
                   100262:   /* Fill the automatic index with content */
                   100263:   addrTop = sqlite3VdbeAddOp1(v, OP_Rewind, pLevel->iTabCur);
                   100264:   regRecord = sqlite3GetTempReg(pParse);
                   100265:   sqlite3GenerateIndexKey(pParse, pIdx, pLevel->iTabCur, regRecord, 1);
                   100266:   sqlite3VdbeAddOp2(v, OP_IdxInsert, pLevel->iIdxCur, regRecord);
                   100267:   sqlite3VdbeChangeP5(v, OPFLAG_USESEEKRESULT);
                   100268:   sqlite3VdbeAddOp2(v, OP_Next, pLevel->iTabCur, addrTop+1);
                   100269:   sqlite3VdbeChangeP5(v, SQLITE_STMTSTATUS_AUTOINDEX);
                   100270:   sqlite3VdbeJumpHere(v, addrTop);
                   100271:   sqlite3ReleaseTempReg(pParse, regRecord);
                   100272:   
                   100273:   /* Jump here when skipping the initialization */
                   100274:   sqlite3VdbeJumpHere(v, addrInit);
                   100275: }
                   100276: #endif /* SQLITE_OMIT_AUTOMATIC_INDEX */
                   100277: 
                   100278: #ifndef SQLITE_OMIT_VIRTUALTABLE
                   100279: /*
                   100280: ** Allocate and populate an sqlite3_index_info structure. It is the 
                   100281: ** responsibility of the caller to eventually release the structure
                   100282: ** by passing the pointer returned by this function to sqlite3_free().
                   100283: */
                   100284: static sqlite3_index_info *allocateIndexInfo(
                   100285:   Parse *pParse, 
                   100286:   WhereClause *pWC,
                   100287:   struct SrcList_item *pSrc,
                   100288:   ExprList *pOrderBy
                   100289: ){
                   100290:   int i, j;
                   100291:   int nTerm;
                   100292:   struct sqlite3_index_constraint *pIdxCons;
                   100293:   struct sqlite3_index_orderby *pIdxOrderBy;
                   100294:   struct sqlite3_index_constraint_usage *pUsage;
                   100295:   WhereTerm *pTerm;
                   100296:   int nOrderBy;
                   100297:   sqlite3_index_info *pIdxInfo;
                   100298: 
                   100299:   WHERETRACE(("Recomputing index info for %s...\n", pSrc->pTab->zName));
                   100300: 
                   100301:   /* Count the number of possible WHERE clause constraints referring
                   100302:   ** to this virtual table */
                   100303:   for(i=nTerm=0, pTerm=pWC->a; i<pWC->nTerm; i++, pTerm++){
                   100304:     if( pTerm->leftCursor != pSrc->iCursor ) continue;
                   100305:     assert( (pTerm->eOperator&(pTerm->eOperator-1))==0 );
                   100306:     testcase( pTerm->eOperator==WO_IN );
                   100307:     testcase( pTerm->eOperator==WO_ISNULL );
                   100308:     if( pTerm->eOperator & (WO_IN|WO_ISNULL) ) continue;
                   100309:     nTerm++;
                   100310:   }
                   100311: 
                   100312:   /* If the ORDER BY clause contains only columns in the current 
                   100313:   ** virtual table then allocate space for the aOrderBy part of
                   100314:   ** the sqlite3_index_info structure.
                   100315:   */
                   100316:   nOrderBy = 0;
                   100317:   if( pOrderBy ){
                   100318:     for(i=0; i<pOrderBy->nExpr; i++){
                   100319:       Expr *pExpr = pOrderBy->a[i].pExpr;
                   100320:       if( pExpr->op!=TK_COLUMN || pExpr->iTable!=pSrc->iCursor ) break;
                   100321:     }
                   100322:     if( i==pOrderBy->nExpr ){
                   100323:       nOrderBy = pOrderBy->nExpr;
                   100324:     }
                   100325:   }
                   100326: 
                   100327:   /* Allocate the sqlite3_index_info structure
                   100328:   */
                   100329:   pIdxInfo = sqlite3DbMallocZero(pParse->db, sizeof(*pIdxInfo)
                   100330:                            + (sizeof(*pIdxCons) + sizeof(*pUsage))*nTerm
                   100331:                            + sizeof(*pIdxOrderBy)*nOrderBy );
                   100332:   if( pIdxInfo==0 ){
                   100333:     sqlite3ErrorMsg(pParse, "out of memory");
                   100334:     /* (double)0 In case of SQLITE_OMIT_FLOATING_POINT... */
                   100335:     return 0;
                   100336:   }
                   100337: 
                   100338:   /* Initialize the structure.  The sqlite3_index_info structure contains
                   100339:   ** many fields that are declared "const" to prevent xBestIndex from
                   100340:   ** changing them.  We have to do some funky casting in order to
                   100341:   ** initialize those fields.
                   100342:   */
                   100343:   pIdxCons = (struct sqlite3_index_constraint*)&pIdxInfo[1];
                   100344:   pIdxOrderBy = (struct sqlite3_index_orderby*)&pIdxCons[nTerm];
                   100345:   pUsage = (struct sqlite3_index_constraint_usage*)&pIdxOrderBy[nOrderBy];
                   100346:   *(int*)&pIdxInfo->nConstraint = nTerm;
                   100347:   *(int*)&pIdxInfo->nOrderBy = nOrderBy;
                   100348:   *(struct sqlite3_index_constraint**)&pIdxInfo->aConstraint = pIdxCons;
                   100349:   *(struct sqlite3_index_orderby**)&pIdxInfo->aOrderBy = pIdxOrderBy;
                   100350:   *(struct sqlite3_index_constraint_usage**)&pIdxInfo->aConstraintUsage =
                   100351:                                                                    pUsage;
                   100352: 
                   100353:   for(i=j=0, pTerm=pWC->a; i<pWC->nTerm; i++, pTerm++){
                   100354:     if( pTerm->leftCursor != pSrc->iCursor ) continue;
                   100355:     assert( (pTerm->eOperator&(pTerm->eOperator-1))==0 );
                   100356:     testcase( pTerm->eOperator==WO_IN );
                   100357:     testcase( pTerm->eOperator==WO_ISNULL );
                   100358:     if( pTerm->eOperator & (WO_IN|WO_ISNULL) ) continue;
                   100359:     pIdxCons[j].iColumn = pTerm->u.leftColumn;
                   100360:     pIdxCons[j].iTermOffset = i;
                   100361:     pIdxCons[j].op = (u8)pTerm->eOperator;
                   100362:     /* The direct assignment in the previous line is possible only because
                   100363:     ** the WO_ and SQLITE_INDEX_CONSTRAINT_ codes are identical.  The
                   100364:     ** following asserts verify this fact. */
                   100365:     assert( WO_EQ==SQLITE_INDEX_CONSTRAINT_EQ );
                   100366:     assert( WO_LT==SQLITE_INDEX_CONSTRAINT_LT );
                   100367:     assert( WO_LE==SQLITE_INDEX_CONSTRAINT_LE );
                   100368:     assert( WO_GT==SQLITE_INDEX_CONSTRAINT_GT );
                   100369:     assert( WO_GE==SQLITE_INDEX_CONSTRAINT_GE );
                   100370:     assert( WO_MATCH==SQLITE_INDEX_CONSTRAINT_MATCH );
                   100371:     assert( pTerm->eOperator & (WO_EQ|WO_LT|WO_LE|WO_GT|WO_GE|WO_MATCH) );
                   100372:     j++;
                   100373:   }
                   100374:   for(i=0; i<nOrderBy; i++){
                   100375:     Expr *pExpr = pOrderBy->a[i].pExpr;
                   100376:     pIdxOrderBy[i].iColumn = pExpr->iColumn;
                   100377:     pIdxOrderBy[i].desc = pOrderBy->a[i].sortOrder;
                   100378:   }
                   100379: 
                   100380:   return pIdxInfo;
                   100381: }
                   100382: 
                   100383: /*
                   100384: ** The table object reference passed as the second argument to this function
                   100385: ** must represent a virtual table. This function invokes the xBestIndex()
                   100386: ** method of the virtual table with the sqlite3_index_info pointer passed
                   100387: ** as the argument.
                   100388: **
                   100389: ** If an error occurs, pParse is populated with an error message and a
                   100390: ** non-zero value is returned. Otherwise, 0 is returned and the output
                   100391: ** part of the sqlite3_index_info structure is left populated.
                   100392: **
                   100393: ** Whether or not an error is returned, it is the responsibility of the
                   100394: ** caller to eventually free p->idxStr if p->needToFreeIdxStr indicates
                   100395: ** that this is required.
                   100396: */
                   100397: static int vtabBestIndex(Parse *pParse, Table *pTab, sqlite3_index_info *p){
                   100398:   sqlite3_vtab *pVtab = sqlite3GetVTable(pParse->db, pTab)->pVtab;
                   100399:   int i;
                   100400:   int rc;
                   100401: 
                   100402:   WHERETRACE(("xBestIndex for %s\n", pTab->zName));
                   100403:   TRACE_IDX_INPUTS(p);
                   100404:   rc = pVtab->pModule->xBestIndex(pVtab, p);
                   100405:   TRACE_IDX_OUTPUTS(p);
                   100406: 
                   100407:   if( rc!=SQLITE_OK ){
                   100408:     if( rc==SQLITE_NOMEM ){
                   100409:       pParse->db->mallocFailed = 1;
                   100410:     }else if( !pVtab->zErrMsg ){
                   100411:       sqlite3ErrorMsg(pParse, "%s", sqlite3ErrStr(rc));
                   100412:     }else{
                   100413:       sqlite3ErrorMsg(pParse, "%s", pVtab->zErrMsg);
                   100414:     }
                   100415:   }
                   100416:   sqlite3_free(pVtab->zErrMsg);
                   100417:   pVtab->zErrMsg = 0;
                   100418: 
                   100419:   for(i=0; i<p->nConstraint; i++){
                   100420:     if( !p->aConstraint[i].usable && p->aConstraintUsage[i].argvIndex>0 ){
                   100421:       sqlite3ErrorMsg(pParse, 
                   100422:           "table %s: xBestIndex returned an invalid plan", pTab->zName);
                   100423:     }
                   100424:   }
                   100425: 
                   100426:   return pParse->nErr;
                   100427: }
                   100428: 
                   100429: 
                   100430: /*
                   100431: ** Compute the best index for a virtual table.
                   100432: **
                   100433: ** The best index is computed by the xBestIndex method of the virtual
                   100434: ** table module.  This routine is really just a wrapper that sets up
                   100435: ** the sqlite3_index_info structure that is used to communicate with
                   100436: ** xBestIndex.
                   100437: **
                   100438: ** In a join, this routine might be called multiple times for the
                   100439: ** same virtual table.  The sqlite3_index_info structure is created
                   100440: ** and initialized on the first invocation and reused on all subsequent
                   100441: ** invocations.  The sqlite3_index_info structure is also used when
                   100442: ** code is generated to access the virtual table.  The whereInfoDelete() 
                   100443: ** routine takes care of freeing the sqlite3_index_info structure after
                   100444: ** everybody has finished with it.
                   100445: */
                   100446: static void bestVirtualIndex(
                   100447:   Parse *pParse,                  /* The parsing context */
                   100448:   WhereClause *pWC,               /* The WHERE clause */
                   100449:   struct SrcList_item *pSrc,      /* The FROM clause term to search */
                   100450:   Bitmask notReady,               /* Mask of cursors not available for index */
                   100451:   Bitmask notValid,               /* Cursors not valid for any purpose */
                   100452:   ExprList *pOrderBy,             /* The order by clause */
                   100453:   WhereCost *pCost,               /* Lowest cost query plan */
                   100454:   sqlite3_index_info **ppIdxInfo  /* Index information passed to xBestIndex */
                   100455: ){
                   100456:   Table *pTab = pSrc->pTab;
                   100457:   sqlite3_index_info *pIdxInfo;
                   100458:   struct sqlite3_index_constraint *pIdxCons;
                   100459:   struct sqlite3_index_constraint_usage *pUsage;
                   100460:   WhereTerm *pTerm;
                   100461:   int i, j;
                   100462:   int nOrderBy;
                   100463:   double rCost;
                   100464: 
                   100465:   /* Make sure wsFlags is initialized to some sane value. Otherwise, if the 
                   100466:   ** malloc in allocateIndexInfo() fails and this function returns leaving
                   100467:   ** wsFlags in an uninitialized state, the caller may behave unpredictably.
                   100468:   */
                   100469:   memset(pCost, 0, sizeof(*pCost));
                   100470:   pCost->plan.wsFlags = WHERE_VIRTUALTABLE;
                   100471: 
                   100472:   /* If the sqlite3_index_info structure has not been previously
                   100473:   ** allocated and initialized, then allocate and initialize it now.
                   100474:   */
                   100475:   pIdxInfo = *ppIdxInfo;
                   100476:   if( pIdxInfo==0 ){
                   100477:     *ppIdxInfo = pIdxInfo = allocateIndexInfo(pParse, pWC, pSrc, pOrderBy);
                   100478:   }
                   100479:   if( pIdxInfo==0 ){
                   100480:     return;
                   100481:   }
                   100482: 
                   100483:   /* At this point, the sqlite3_index_info structure that pIdxInfo points
                   100484:   ** to will have been initialized, either during the current invocation or
                   100485:   ** during some prior invocation.  Now we just have to customize the
                   100486:   ** details of pIdxInfo for the current invocation and pass it to
                   100487:   ** xBestIndex.
                   100488:   */
                   100489: 
                   100490:   /* The module name must be defined. Also, by this point there must
                   100491:   ** be a pointer to an sqlite3_vtab structure. Otherwise
                   100492:   ** sqlite3ViewGetColumnNames() would have picked up the error. 
                   100493:   */
                   100494:   assert( pTab->azModuleArg && pTab->azModuleArg[0] );
                   100495:   assert( sqlite3GetVTable(pParse->db, pTab) );
                   100496: 
                   100497:   /* Set the aConstraint[].usable fields and initialize all 
                   100498:   ** output variables to zero.
                   100499:   **
                   100500:   ** aConstraint[].usable is true for constraints where the right-hand
                   100501:   ** side contains only references to tables to the left of the current
                   100502:   ** table.  In other words, if the constraint is of the form:
                   100503:   **
                   100504:   **           column = expr
                   100505:   **
                   100506:   ** and we are evaluating a join, then the constraint on column is 
                   100507:   ** only valid if all tables referenced in expr occur to the left
                   100508:   ** of the table containing column.
                   100509:   **
                   100510:   ** The aConstraints[] array contains entries for all constraints
                   100511:   ** on the current table.  That way we only have to compute it once
                   100512:   ** even though we might try to pick the best index multiple times.
                   100513:   ** For each attempt at picking an index, the order of tables in the
                   100514:   ** join might be different so we have to recompute the usable flag
                   100515:   ** each time.
                   100516:   */
                   100517:   pIdxCons = *(struct sqlite3_index_constraint**)&pIdxInfo->aConstraint;
                   100518:   pUsage = pIdxInfo->aConstraintUsage;
                   100519:   for(i=0; i<pIdxInfo->nConstraint; i++, pIdxCons++){
                   100520:     j = pIdxCons->iTermOffset;
                   100521:     pTerm = &pWC->a[j];
                   100522:     pIdxCons->usable = (pTerm->prereqRight&notReady) ? 0 : 1;
                   100523:   }
                   100524:   memset(pUsage, 0, sizeof(pUsage[0])*pIdxInfo->nConstraint);
                   100525:   if( pIdxInfo->needToFreeIdxStr ){
                   100526:     sqlite3_free(pIdxInfo->idxStr);
                   100527:   }
                   100528:   pIdxInfo->idxStr = 0;
                   100529:   pIdxInfo->idxNum = 0;
                   100530:   pIdxInfo->needToFreeIdxStr = 0;
                   100531:   pIdxInfo->orderByConsumed = 0;
                   100532:   /* ((double)2) In case of SQLITE_OMIT_FLOATING_POINT... */
                   100533:   pIdxInfo->estimatedCost = SQLITE_BIG_DBL / ((double)2);
                   100534:   nOrderBy = pIdxInfo->nOrderBy;
                   100535:   if( !pOrderBy ){
                   100536:     pIdxInfo->nOrderBy = 0;
                   100537:   }
                   100538: 
                   100539:   if( vtabBestIndex(pParse, pTab, pIdxInfo) ){
                   100540:     return;
                   100541:   }
                   100542: 
                   100543:   pIdxCons = *(struct sqlite3_index_constraint**)&pIdxInfo->aConstraint;
                   100544:   for(i=0; i<pIdxInfo->nConstraint; i++){
                   100545:     if( pUsage[i].argvIndex>0 ){
                   100546:       pCost->used |= pWC->a[pIdxCons[i].iTermOffset].prereqRight;
                   100547:     }
                   100548:   }
                   100549: 
                   100550:   /* If there is an ORDER BY clause, and the selected virtual table index
                   100551:   ** does not satisfy it, increase the cost of the scan accordingly. This
                   100552:   ** matches the processing for non-virtual tables in bestBtreeIndex().
                   100553:   */
                   100554:   rCost = pIdxInfo->estimatedCost;
                   100555:   if( pOrderBy && pIdxInfo->orderByConsumed==0 ){
                   100556:     rCost += estLog(rCost)*rCost;
                   100557:   }
                   100558: 
                   100559:   /* The cost is not allowed to be larger than SQLITE_BIG_DBL (the
                   100560:   ** inital value of lowestCost in this loop. If it is, then the
                   100561:   ** (cost<lowestCost) test below will never be true.
                   100562:   ** 
                   100563:   ** Use "(double)2" instead of "2.0" in case OMIT_FLOATING_POINT 
                   100564:   ** is defined.
                   100565:   */
                   100566:   if( (SQLITE_BIG_DBL/((double)2))<rCost ){
                   100567:     pCost->rCost = (SQLITE_BIG_DBL/((double)2));
                   100568:   }else{
                   100569:     pCost->rCost = rCost;
                   100570:   }
                   100571:   pCost->plan.u.pVtabIdx = pIdxInfo;
                   100572:   if( pIdxInfo->orderByConsumed ){
                   100573:     pCost->plan.wsFlags |= WHERE_ORDERBY;
                   100574:   }
                   100575:   pCost->plan.nEq = 0;
                   100576:   pIdxInfo->nOrderBy = nOrderBy;
                   100577: 
                   100578:   /* Try to find a more efficient access pattern by using multiple indexes
                   100579:   ** to optimize an OR expression within the WHERE clause. 
                   100580:   */
                   100581:   bestOrClauseIndex(pParse, pWC, pSrc, notReady, notValid, pOrderBy, pCost);
                   100582: }
                   100583: #endif /* SQLITE_OMIT_VIRTUALTABLE */
                   100584: 
                   100585: /*
                   100586: ** Argument pIdx is a pointer to an index structure that has an array of
                   100587: ** SQLITE_INDEX_SAMPLES evenly spaced samples of the first indexed column
                   100588: ** stored in Index.aSample. These samples divide the domain of values stored
                   100589: ** the index into (SQLITE_INDEX_SAMPLES+1) regions.
                   100590: ** Region 0 contains all values less than the first sample value. Region
                   100591: ** 1 contains values between the first and second samples.  Region 2 contains
                   100592: ** values between samples 2 and 3.  And so on.  Region SQLITE_INDEX_SAMPLES
                   100593: ** contains values larger than the last sample.
                   100594: **
                   100595: ** If the index contains many duplicates of a single value, then it is
                   100596: ** possible that two or more adjacent samples can hold the same value.
                   100597: ** When that is the case, the smallest possible region code is returned
                   100598: ** when roundUp is false and the largest possible region code is returned
                   100599: ** when roundUp is true.
                   100600: **
                   100601: ** If successful, this function determines which of the regions value 
                   100602: ** pVal lies in, sets *piRegion to the region index (a value between 0
                   100603: ** and SQLITE_INDEX_SAMPLES+1, inclusive) and returns SQLITE_OK.
                   100604: ** Or, if an OOM occurs while converting text values between encodings,
                   100605: ** SQLITE_NOMEM is returned and *piRegion is undefined.
                   100606: */
                   100607: #ifdef SQLITE_ENABLE_STAT2
                   100608: static int whereRangeRegion(
                   100609:   Parse *pParse,              /* Database connection */
                   100610:   Index *pIdx,                /* Index to consider domain of */
                   100611:   sqlite3_value *pVal,        /* Value to consider */
                   100612:   int roundUp,                /* Return largest valid region if true */
                   100613:   int *piRegion               /* OUT: Region of domain in which value lies */
                   100614: ){
                   100615:   assert( roundUp==0 || roundUp==1 );
                   100616:   if( ALWAYS(pVal) ){
                   100617:     IndexSample *aSample = pIdx->aSample;
                   100618:     int i = 0;
                   100619:     int eType = sqlite3_value_type(pVal);
                   100620: 
                   100621:     if( eType==SQLITE_INTEGER || eType==SQLITE_FLOAT ){
                   100622:       double r = sqlite3_value_double(pVal);
                   100623:       for(i=0; i<SQLITE_INDEX_SAMPLES; i++){
                   100624:         if( aSample[i].eType==SQLITE_NULL ) continue;
                   100625:         if( aSample[i].eType>=SQLITE_TEXT ) break;
                   100626:         if( roundUp ){
                   100627:           if( aSample[i].u.r>r ) break;
                   100628:         }else{
                   100629:           if( aSample[i].u.r>=r ) break;
                   100630:         }
                   100631:       }
                   100632:     }else if( eType==SQLITE_NULL ){
                   100633:       i = 0;
                   100634:       if( roundUp ){
                   100635:         while( i<SQLITE_INDEX_SAMPLES && aSample[i].eType==SQLITE_NULL ) i++;
                   100636:       }
                   100637:     }else{ 
                   100638:       sqlite3 *db = pParse->db;
                   100639:       CollSeq *pColl;
                   100640:       const u8 *z;
                   100641:       int n;
                   100642: 
                   100643:       /* pVal comes from sqlite3ValueFromExpr() so the type cannot be NULL */
                   100644:       assert( eType==SQLITE_TEXT || eType==SQLITE_BLOB );
                   100645: 
                   100646:       if( eType==SQLITE_BLOB ){
                   100647:         z = (const u8 *)sqlite3_value_blob(pVal);
                   100648:         pColl = db->pDfltColl;
                   100649:         assert( pColl->enc==SQLITE_UTF8 );
                   100650:       }else{
                   100651:         pColl = sqlite3GetCollSeq(db, SQLITE_UTF8, 0, *pIdx->azColl);
                   100652:         if( pColl==0 ){
                   100653:           sqlite3ErrorMsg(pParse, "no such collation sequence: %s",
                   100654:                           *pIdx->azColl);
                   100655:           return SQLITE_ERROR;
                   100656:         }
                   100657:         z = (const u8 *)sqlite3ValueText(pVal, pColl->enc);
                   100658:         if( !z ){
                   100659:           return SQLITE_NOMEM;
                   100660:         }
                   100661:         assert( z && pColl && pColl->xCmp );
                   100662:       }
                   100663:       n = sqlite3ValueBytes(pVal, pColl->enc);
                   100664: 
                   100665:       for(i=0; i<SQLITE_INDEX_SAMPLES; i++){
                   100666:         int c;
                   100667:         int eSampletype = aSample[i].eType;
                   100668:         if( eSampletype==SQLITE_NULL || eSampletype<eType ) continue;
                   100669:         if( (eSampletype!=eType) ) break;
                   100670: #ifndef SQLITE_OMIT_UTF16
                   100671:         if( pColl->enc!=SQLITE_UTF8 ){
                   100672:           int nSample;
                   100673:           char *zSample = sqlite3Utf8to16(
                   100674:               db, pColl->enc, aSample[i].u.z, aSample[i].nByte, &nSample
                   100675:           );
                   100676:           if( !zSample ){
                   100677:             assert( db->mallocFailed );
                   100678:             return SQLITE_NOMEM;
                   100679:           }
                   100680:           c = pColl->xCmp(pColl->pUser, nSample, zSample, n, z);
                   100681:           sqlite3DbFree(db, zSample);
                   100682:         }else
                   100683: #endif
                   100684:         {
                   100685:           c = pColl->xCmp(pColl->pUser, aSample[i].nByte, aSample[i].u.z, n, z);
                   100686:         }
                   100687:         if( c-roundUp>=0 ) break;
                   100688:       }
                   100689:     }
                   100690: 
                   100691:     assert( i>=0 && i<=SQLITE_INDEX_SAMPLES );
                   100692:     *piRegion = i;
                   100693:   }
                   100694:   return SQLITE_OK;
                   100695: }
                   100696: #endif   /* #ifdef SQLITE_ENABLE_STAT2 */
                   100697: 
                   100698: /*
                   100699: ** If expression pExpr represents a literal value, set *pp to point to
                   100700: ** an sqlite3_value structure containing the same value, with affinity
                   100701: ** aff applied to it, before returning. It is the responsibility of the 
                   100702: ** caller to eventually release this structure by passing it to 
                   100703: ** sqlite3ValueFree().
                   100704: **
                   100705: ** If the current parse is a recompile (sqlite3Reprepare()) and pExpr
                   100706: ** is an SQL variable that currently has a non-NULL value bound to it,
                   100707: ** create an sqlite3_value structure containing this value, again with
                   100708: ** affinity aff applied to it, instead.
                   100709: **
                   100710: ** If neither of the above apply, set *pp to NULL.
                   100711: **
                   100712: ** If an error occurs, return an error code. Otherwise, SQLITE_OK.
                   100713: */
                   100714: #ifdef SQLITE_ENABLE_STAT2
                   100715: static int valueFromExpr(
                   100716:   Parse *pParse, 
                   100717:   Expr *pExpr, 
                   100718:   u8 aff, 
                   100719:   sqlite3_value **pp
                   100720: ){
                   100721:   if( pExpr->op==TK_VARIABLE
                   100722:    || (pExpr->op==TK_REGISTER && pExpr->op2==TK_VARIABLE)
                   100723:   ){
                   100724:     int iVar = pExpr->iColumn;
                   100725:     sqlite3VdbeSetVarmask(pParse->pVdbe, iVar); /* IMP: R-23257-02778 */
                   100726:     *pp = sqlite3VdbeGetValue(pParse->pReprepare, iVar, aff);
                   100727:     return SQLITE_OK;
                   100728:   }
                   100729:   return sqlite3ValueFromExpr(pParse->db, pExpr, SQLITE_UTF8, aff, pp);
                   100730: }
                   100731: #endif
                   100732: 
                   100733: /*
                   100734: ** This function is used to estimate the number of rows that will be visited
                   100735: ** by scanning an index for a range of values. The range may have an upper
                   100736: ** bound, a lower bound, or both. The WHERE clause terms that set the upper
                   100737: ** and lower bounds are represented by pLower and pUpper respectively. For
                   100738: ** example, assuming that index p is on t1(a):
                   100739: **
                   100740: **   ... FROM t1 WHERE a > ? AND a < ? ...
                   100741: **                    |_____|   |_____|
                   100742: **                       |         |
                   100743: **                     pLower    pUpper
                   100744: **
                   100745: ** If either of the upper or lower bound is not present, then NULL is passed in
                   100746: ** place of the corresponding WhereTerm.
                   100747: **
                   100748: ** The nEq parameter is passed the index of the index column subject to the
                   100749: ** range constraint. Or, equivalently, the number of equality constraints
                   100750: ** optimized by the proposed index scan. For example, assuming index p is
                   100751: ** on t1(a, b), and the SQL query is:
                   100752: **
                   100753: **   ... FROM t1 WHERE a = ? AND b > ? AND b < ? ...
                   100754: **
                   100755: ** then nEq should be passed the value 1 (as the range restricted column,
                   100756: ** b, is the second left-most column of the index). Or, if the query is:
                   100757: **
                   100758: **   ... FROM t1 WHERE a > ? AND a < ? ...
                   100759: **
                   100760: ** then nEq should be passed 0.
                   100761: **
                   100762: ** The returned value is an integer between 1 and 100, inclusive. A return
                   100763: ** value of 1 indicates that the proposed range scan is expected to visit
                   100764: ** approximately 1/100th (1%) of the rows selected by the nEq equality
                   100765: ** constraints (if any). A return value of 100 indicates that it is expected
                   100766: ** that the range scan will visit every row (100%) selected by the equality
                   100767: ** constraints.
                   100768: **
                   100769: ** In the absence of sqlite_stat2 ANALYZE data, each range inequality
                   100770: ** reduces the search space by 3/4ths.  Hence a single constraint (x>?)
                   100771: ** results in a return of 25 and a range constraint (x>? AND x<?) results
                   100772: ** in a return of 6.
                   100773: */
                   100774: static int whereRangeScanEst(
                   100775:   Parse *pParse,       /* Parsing & code generating context */
                   100776:   Index *p,            /* The index containing the range-compared column; "x" */
                   100777:   int nEq,             /* index into p->aCol[] of the range-compared column */
                   100778:   WhereTerm *pLower,   /* Lower bound on the range. ex: "x>123" Might be NULL */
                   100779:   WhereTerm *pUpper,   /* Upper bound on the range. ex: "x<455" Might be NULL */
                   100780:   int *piEst           /* OUT: Return value */
                   100781: ){
                   100782:   int rc = SQLITE_OK;
                   100783: 
                   100784: #ifdef SQLITE_ENABLE_STAT2
                   100785: 
                   100786:   if( nEq==0 && p->aSample ){
                   100787:     sqlite3_value *pLowerVal = 0;
                   100788:     sqlite3_value *pUpperVal = 0;
                   100789:     int iEst;
                   100790:     int iLower = 0;
                   100791:     int iUpper = SQLITE_INDEX_SAMPLES;
                   100792:     int roundUpUpper = 0;
                   100793:     int roundUpLower = 0;
                   100794:     u8 aff = p->pTable->aCol[p->aiColumn[0]].affinity;
                   100795: 
                   100796:     if( pLower ){
                   100797:       Expr *pExpr = pLower->pExpr->pRight;
                   100798:       rc = valueFromExpr(pParse, pExpr, aff, &pLowerVal);
                   100799:       assert( pLower->eOperator==WO_GT || pLower->eOperator==WO_GE );
                   100800:       roundUpLower = (pLower->eOperator==WO_GT) ?1:0;
                   100801:     }
                   100802:     if( rc==SQLITE_OK && pUpper ){
                   100803:       Expr *pExpr = pUpper->pExpr->pRight;
                   100804:       rc = valueFromExpr(pParse, pExpr, aff, &pUpperVal);
                   100805:       assert( pUpper->eOperator==WO_LT || pUpper->eOperator==WO_LE );
                   100806:       roundUpUpper = (pUpper->eOperator==WO_LE) ?1:0;
                   100807:     }
                   100808: 
                   100809:     if( rc!=SQLITE_OK || (pLowerVal==0 && pUpperVal==0) ){
                   100810:       sqlite3ValueFree(pLowerVal);
                   100811:       sqlite3ValueFree(pUpperVal);
                   100812:       goto range_est_fallback;
                   100813:     }else if( pLowerVal==0 ){
                   100814:       rc = whereRangeRegion(pParse, p, pUpperVal, roundUpUpper, &iUpper);
                   100815:       if( pLower ) iLower = iUpper/2;
                   100816:     }else if( pUpperVal==0 ){
                   100817:       rc = whereRangeRegion(pParse, p, pLowerVal, roundUpLower, &iLower);
                   100818:       if( pUpper ) iUpper = (iLower + SQLITE_INDEX_SAMPLES + 1)/2;
                   100819:     }else{
                   100820:       rc = whereRangeRegion(pParse, p, pUpperVal, roundUpUpper, &iUpper);
                   100821:       if( rc==SQLITE_OK ){
                   100822:         rc = whereRangeRegion(pParse, p, pLowerVal, roundUpLower, &iLower);
                   100823:       }
                   100824:     }
                   100825:     WHERETRACE(("range scan regions: %d..%d\n", iLower, iUpper));
                   100826: 
                   100827:     iEst = iUpper - iLower;
                   100828:     testcase( iEst==SQLITE_INDEX_SAMPLES );
                   100829:     assert( iEst<=SQLITE_INDEX_SAMPLES );
                   100830:     if( iEst<1 ){
                   100831:       *piEst = 50/SQLITE_INDEX_SAMPLES;
                   100832:     }else{
                   100833:       *piEst = (iEst*100)/SQLITE_INDEX_SAMPLES;
                   100834:     }
                   100835:     sqlite3ValueFree(pLowerVal);
                   100836:     sqlite3ValueFree(pUpperVal);
                   100837:     return rc;
                   100838:   }
                   100839: range_est_fallback:
                   100840: #else
                   100841:   UNUSED_PARAMETER(pParse);
                   100842:   UNUSED_PARAMETER(p);
                   100843:   UNUSED_PARAMETER(nEq);
                   100844: #endif
                   100845:   assert( pLower || pUpper );
                   100846:   *piEst = 100;
                   100847:   if( pLower && (pLower->wtFlags & TERM_VNULL)==0 ) *piEst /= 4;
                   100848:   if( pUpper ) *piEst /= 4;
                   100849:   return rc;
                   100850: }
                   100851: 
                   100852: #ifdef SQLITE_ENABLE_STAT2
                   100853: /*
                   100854: ** Estimate the number of rows that will be returned based on
                   100855: ** an equality constraint x=VALUE and where that VALUE occurs in
                   100856: ** the histogram data.  This only works when x is the left-most
                   100857: ** column of an index and sqlite_stat2 histogram data is available
                   100858: ** for that index.  When pExpr==NULL that means the constraint is
                   100859: ** "x IS NULL" instead of "x=VALUE".
                   100860: **
                   100861: ** Write the estimated row count into *pnRow and return SQLITE_OK. 
                   100862: ** If unable to make an estimate, leave *pnRow unchanged and return
                   100863: ** non-zero.
                   100864: **
                   100865: ** This routine can fail if it is unable to load a collating sequence
                   100866: ** required for string comparison, or if unable to allocate memory
                   100867: ** for a UTF conversion required for comparison.  The error is stored
                   100868: ** in the pParse structure.
                   100869: */
                   100870: static int whereEqualScanEst(
                   100871:   Parse *pParse,       /* Parsing & code generating context */
                   100872:   Index *p,            /* The index whose left-most column is pTerm */
                   100873:   Expr *pExpr,         /* Expression for VALUE in the x=VALUE constraint */
                   100874:   double *pnRow        /* Write the revised row estimate here */
                   100875: ){
                   100876:   sqlite3_value *pRhs = 0;  /* VALUE on right-hand side of pTerm */
                   100877:   int iLower, iUpper;       /* Range of histogram regions containing pRhs */
                   100878:   u8 aff;                   /* Column affinity */
                   100879:   int rc;                   /* Subfunction return code */
                   100880:   double nRowEst;           /* New estimate of the number of rows */
                   100881: 
                   100882:   assert( p->aSample!=0 );
                   100883:   aff = p->pTable->aCol[p->aiColumn[0]].affinity;
                   100884:   if( pExpr ){
                   100885:     rc = valueFromExpr(pParse, pExpr, aff, &pRhs);
                   100886:     if( rc ) goto whereEqualScanEst_cancel;
                   100887:   }else{
                   100888:     pRhs = sqlite3ValueNew(pParse->db);
                   100889:   }
                   100890:   if( pRhs==0 ) return SQLITE_NOTFOUND;
                   100891:   rc = whereRangeRegion(pParse, p, pRhs, 0, &iLower);
                   100892:   if( rc ) goto whereEqualScanEst_cancel;
                   100893:   rc = whereRangeRegion(pParse, p, pRhs, 1, &iUpper);
                   100894:   if( rc ) goto whereEqualScanEst_cancel;
                   100895:   WHERETRACE(("equality scan regions: %d..%d\n", iLower, iUpper));
                   100896:   if( iLower>=iUpper ){
                   100897:     nRowEst = p->aiRowEst[0]/(SQLITE_INDEX_SAMPLES*2);
                   100898:     if( nRowEst<*pnRow ) *pnRow = nRowEst;
                   100899:   }else{
                   100900:     nRowEst = (iUpper-iLower)*p->aiRowEst[0]/SQLITE_INDEX_SAMPLES;
                   100901:     *pnRow = nRowEst;
                   100902:   }
                   100903: 
                   100904: whereEqualScanEst_cancel:
                   100905:   sqlite3ValueFree(pRhs);
                   100906:   return rc;
                   100907: }
                   100908: #endif /* defined(SQLITE_ENABLE_STAT2) */
                   100909: 
                   100910: #ifdef SQLITE_ENABLE_STAT2
                   100911: /*
                   100912: ** Estimate the number of rows that will be returned based on
                   100913: ** an IN constraint where the right-hand side of the IN operator
                   100914: ** is a list of values.  Example:
                   100915: **
                   100916: **        WHERE x IN (1,2,3,4)
                   100917: **
                   100918: ** Write the estimated row count into *pnRow and return SQLITE_OK. 
                   100919: ** If unable to make an estimate, leave *pnRow unchanged and return
                   100920: ** non-zero.
                   100921: **
                   100922: ** This routine can fail if it is unable to load a collating sequence
                   100923: ** required for string comparison, or if unable to allocate memory
                   100924: ** for a UTF conversion required for comparison.  The error is stored
                   100925: ** in the pParse structure.
                   100926: */
                   100927: static int whereInScanEst(
                   100928:   Parse *pParse,       /* Parsing & code generating context */
                   100929:   Index *p,            /* The index whose left-most column is pTerm */
                   100930:   ExprList *pList,     /* The value list on the RHS of "x IN (v1,v2,v3,...)" */
                   100931:   double *pnRow        /* Write the revised row estimate here */
                   100932: ){
                   100933:   sqlite3_value *pVal = 0;  /* One value from list */
                   100934:   int iLower, iUpper;       /* Range of histogram regions containing pRhs */
                   100935:   u8 aff;                   /* Column affinity */
                   100936:   int rc = SQLITE_OK;       /* Subfunction return code */
                   100937:   double nRowEst;           /* New estimate of the number of rows */
                   100938:   int nSpan = 0;            /* Number of histogram regions spanned */
                   100939:   int nSingle = 0;          /* Histogram regions hit by a single value */
                   100940:   int nNotFound = 0;        /* Count of values that are not constants */
                   100941:   int i;                               /* Loop counter */
                   100942:   u8 aSpan[SQLITE_INDEX_SAMPLES+1];    /* Histogram regions that are spanned */
                   100943:   u8 aSingle[SQLITE_INDEX_SAMPLES+1];  /* Histogram regions hit once */
                   100944: 
                   100945:   assert( p->aSample!=0 );
                   100946:   aff = p->pTable->aCol[p->aiColumn[0]].affinity;
                   100947:   memset(aSpan, 0, sizeof(aSpan));
                   100948:   memset(aSingle, 0, sizeof(aSingle));
                   100949:   for(i=0; i<pList->nExpr; i++){
                   100950:     sqlite3ValueFree(pVal);
                   100951:     rc = valueFromExpr(pParse, pList->a[i].pExpr, aff, &pVal);
                   100952:     if( rc ) break;
                   100953:     if( pVal==0 || sqlite3_value_type(pVal)==SQLITE_NULL ){
                   100954:       nNotFound++;
                   100955:       continue;
                   100956:     }
                   100957:     rc = whereRangeRegion(pParse, p, pVal, 0, &iLower);
                   100958:     if( rc ) break;
                   100959:     rc = whereRangeRegion(pParse, p, pVal, 1, &iUpper);
                   100960:     if( rc ) break;
                   100961:     if( iLower>=iUpper ){
                   100962:       aSingle[iLower] = 1;
                   100963:     }else{
                   100964:       assert( iLower>=0 && iUpper<=SQLITE_INDEX_SAMPLES );
                   100965:       while( iLower<iUpper ) aSpan[iLower++] = 1;
                   100966:     }
                   100967:   }
                   100968:   if( rc==SQLITE_OK ){
                   100969:     for(i=nSpan=0; i<=SQLITE_INDEX_SAMPLES; i++){
                   100970:       if( aSpan[i] ){
                   100971:         nSpan++;
                   100972:       }else if( aSingle[i] ){
                   100973:         nSingle++;
                   100974:       }
                   100975:     }
                   100976:     nRowEst = (nSpan*2+nSingle)*p->aiRowEst[0]/(2*SQLITE_INDEX_SAMPLES)
                   100977:                + nNotFound*p->aiRowEst[1];
                   100978:     if( nRowEst > p->aiRowEst[0] ) nRowEst = p->aiRowEst[0];
                   100979:     *pnRow = nRowEst;
                   100980:     WHERETRACE(("IN row estimate: nSpan=%d, nSingle=%d, nNotFound=%d, est=%g\n",
                   100981:                  nSpan, nSingle, nNotFound, nRowEst));
                   100982:   }
                   100983:   sqlite3ValueFree(pVal);
                   100984:   return rc;
                   100985: }
                   100986: #endif /* defined(SQLITE_ENABLE_STAT2) */
                   100987: 
                   100988: 
                   100989: /*
                   100990: ** Find the best query plan for accessing a particular table.  Write the
                   100991: ** best query plan and its cost into the WhereCost object supplied as the
                   100992: ** last parameter.
                   100993: **
                   100994: ** The lowest cost plan wins.  The cost is an estimate of the amount of
                   100995: ** CPU and disk I/O needed to process the requested result.
                   100996: ** Factors that influence cost include:
                   100997: **
                   100998: **    *  The estimated number of rows that will be retrieved.  (The
                   100999: **       fewer the better.)
                   101000: **
                   101001: **    *  Whether or not sorting must occur.
                   101002: **
                   101003: **    *  Whether or not there must be separate lookups in the
                   101004: **       index and in the main table.
                   101005: **
                   101006: ** If there was an INDEXED BY clause (pSrc->pIndex) attached to the table in
                   101007: ** the SQL statement, then this function only considers plans using the 
                   101008: ** named index. If no such plan is found, then the returned cost is
                   101009: ** SQLITE_BIG_DBL. If a plan is found that uses the named index, 
                   101010: ** then the cost is calculated in the usual way.
                   101011: **
                   101012: ** If a NOT INDEXED clause (pSrc->notIndexed!=0) was attached to the table 
                   101013: ** in the SELECT statement, then no indexes are considered. However, the 
                   101014: ** selected plan may still take advantage of the built-in rowid primary key
                   101015: ** index.
                   101016: */
                   101017: static void bestBtreeIndex(
                   101018:   Parse *pParse,              /* The parsing context */
                   101019:   WhereClause *pWC,           /* The WHERE clause */
                   101020:   struct SrcList_item *pSrc,  /* The FROM clause term to search */
                   101021:   Bitmask notReady,           /* Mask of cursors not available for indexing */
                   101022:   Bitmask notValid,           /* Cursors not available for any purpose */
                   101023:   ExprList *pOrderBy,         /* The ORDER BY clause */
                   101024:   WhereCost *pCost            /* Lowest cost query plan */
                   101025: ){
                   101026:   int iCur = pSrc->iCursor;   /* The cursor of the table to be accessed */
                   101027:   Index *pProbe;              /* An index we are evaluating */
                   101028:   Index *pIdx;                /* Copy of pProbe, or zero for IPK index */
                   101029:   int eqTermMask;             /* Current mask of valid equality operators */
                   101030:   int idxEqTermMask;          /* Index mask of valid equality operators */
                   101031:   Index sPk;                  /* A fake index object for the primary key */
                   101032:   unsigned int aiRowEstPk[2]; /* The aiRowEst[] value for the sPk index */
                   101033:   int aiColumnPk = -1;        /* The aColumn[] value for the sPk index */
                   101034:   int wsFlagMask;             /* Allowed flags in pCost->plan.wsFlag */
                   101035: 
                   101036:   /* Initialize the cost to a worst-case value */
                   101037:   memset(pCost, 0, sizeof(*pCost));
                   101038:   pCost->rCost = SQLITE_BIG_DBL;
                   101039: 
                   101040:   /* If the pSrc table is the right table of a LEFT JOIN then we may not
                   101041:   ** use an index to satisfy IS NULL constraints on that table.  This is
                   101042:   ** because columns might end up being NULL if the table does not match -
                   101043:   ** a circumstance which the index cannot help us discover.  Ticket #2177.
                   101044:   */
                   101045:   if( pSrc->jointype & JT_LEFT ){
                   101046:     idxEqTermMask = WO_EQ|WO_IN;
                   101047:   }else{
                   101048:     idxEqTermMask = WO_EQ|WO_IN|WO_ISNULL;
                   101049:   }
                   101050: 
                   101051:   if( pSrc->pIndex ){
                   101052:     /* An INDEXED BY clause specifies a particular index to use */
                   101053:     pIdx = pProbe = pSrc->pIndex;
                   101054:     wsFlagMask = ~(WHERE_ROWID_EQ|WHERE_ROWID_RANGE);
                   101055:     eqTermMask = idxEqTermMask;
                   101056:   }else{
                   101057:     /* There is no INDEXED BY clause.  Create a fake Index object in local
                   101058:     ** variable sPk to represent the rowid primary key index.  Make this
                   101059:     ** fake index the first in a chain of Index objects with all of the real
                   101060:     ** indices to follow */
                   101061:     Index *pFirst;                  /* First of real indices on the table */
                   101062:     memset(&sPk, 0, sizeof(Index));
                   101063:     sPk.nColumn = 1;
                   101064:     sPk.aiColumn = &aiColumnPk;
                   101065:     sPk.aiRowEst = aiRowEstPk;
                   101066:     sPk.onError = OE_Replace;
                   101067:     sPk.pTable = pSrc->pTab;
                   101068:     aiRowEstPk[0] = pSrc->pTab->nRowEst;
                   101069:     aiRowEstPk[1] = 1;
                   101070:     pFirst = pSrc->pTab->pIndex;
                   101071:     if( pSrc->notIndexed==0 ){
                   101072:       /* The real indices of the table are only considered if the
                   101073:       ** NOT INDEXED qualifier is omitted from the FROM clause */
                   101074:       sPk.pNext = pFirst;
                   101075:     }
                   101076:     pProbe = &sPk;
                   101077:     wsFlagMask = ~(
                   101078:         WHERE_COLUMN_IN|WHERE_COLUMN_EQ|WHERE_COLUMN_NULL|WHERE_COLUMN_RANGE
                   101079:     );
                   101080:     eqTermMask = WO_EQ|WO_IN;
                   101081:     pIdx = 0;
                   101082:   }
                   101083: 
                   101084:   /* Loop over all indices looking for the best one to use
                   101085:   */
                   101086:   for(; pProbe; pIdx=pProbe=pProbe->pNext){
                   101087:     const unsigned int * const aiRowEst = pProbe->aiRowEst;
                   101088:     double cost;                /* Cost of using pProbe */
                   101089:     double nRow;                /* Estimated number of rows in result set */
                   101090:     double log10N;              /* base-10 logarithm of nRow (inexact) */
                   101091:     int rev;                    /* True to scan in reverse order */
                   101092:     int wsFlags = 0;
                   101093:     Bitmask used = 0;
                   101094: 
                   101095:     /* The following variables are populated based on the properties of
                   101096:     ** index being evaluated. They are then used to determine the expected
                   101097:     ** cost and number of rows returned.
                   101098:     **
                   101099:     **  nEq: 
                   101100:     **    Number of equality terms that can be implemented using the index.
                   101101:     **    In other words, the number of initial fields in the index that
                   101102:     **    are used in == or IN or NOT NULL constraints of the WHERE clause.
                   101103:     **
                   101104:     **  nInMul:  
                   101105:     **    The "in-multiplier". This is an estimate of how many seek operations 
                   101106:     **    SQLite must perform on the index in question. For example, if the 
                   101107:     **    WHERE clause is:
                   101108:     **
                   101109:     **      WHERE a IN (1, 2, 3) AND b IN (4, 5, 6)
                   101110:     **
                   101111:     **    SQLite must perform 9 lookups on an index on (a, b), so nInMul is 
                   101112:     **    set to 9. Given the same schema and either of the following WHERE 
                   101113:     **    clauses:
                   101114:     **
                   101115:     **      WHERE a =  1
                   101116:     **      WHERE a >= 2
                   101117:     **
                   101118:     **    nInMul is set to 1.
                   101119:     **
                   101120:     **    If there exists a WHERE term of the form "x IN (SELECT ...)", then 
                   101121:     **    the sub-select is assumed to return 25 rows for the purposes of 
                   101122:     **    determining nInMul.
                   101123:     **
                   101124:     **  bInEst:  
                   101125:     **    Set to true if there was at least one "x IN (SELECT ...)" term used 
                   101126:     **    in determining the value of nInMul.  Note that the RHS of the
                   101127:     **    IN operator must be a SELECT, not a value list, for this variable
                   101128:     **    to be true.
                   101129:     **
                   101130:     **  estBound:
                   101131:     **    An estimate on the amount of the table that must be searched.  A
                   101132:     **    value of 100 means the entire table is searched.  Range constraints
                   101133:     **    might reduce this to a value less than 100 to indicate that only
                   101134:     **    a fraction of the table needs searching.  In the absence of
                   101135:     **    sqlite_stat2 ANALYZE data, a single inequality reduces the search
                   101136:     **    space to 1/4rd its original size.  So an x>? constraint reduces
                   101137:     **    estBound to 25.  Two constraints (x>? AND x<?) reduce estBound to 6.
                   101138:     **
                   101139:     **  bSort:   
                   101140:     **    Boolean. True if there is an ORDER BY clause that will require an 
                   101141:     **    external sort (i.e. scanning the index being evaluated will not 
                   101142:     **    correctly order records).
                   101143:     **
                   101144:     **  bLookup: 
                   101145:     **    Boolean. True if a table lookup is required for each index entry
                   101146:     **    visited.  In other words, true if this is not a covering index.
                   101147:     **    This is always false for the rowid primary key index of a table.
                   101148:     **    For other indexes, it is true unless all the columns of the table
                   101149:     **    used by the SELECT statement are present in the index (such an
                   101150:     **    index is sometimes described as a covering index).
                   101151:     **    For example, given the index on (a, b), the second of the following 
                   101152:     **    two queries requires table b-tree lookups in order to find the value
                   101153:     **    of column c, but the first does not because columns a and b are
                   101154:     **    both available in the index.
                   101155:     **
                   101156:     **             SELECT a, b    FROM tbl WHERE a = 1;
                   101157:     **             SELECT a, b, c FROM tbl WHERE a = 1;
                   101158:     */
                   101159:     int nEq;                      /* Number of == or IN terms matching index */
                   101160:     int bInEst = 0;               /* True if "x IN (SELECT...)" seen */
                   101161:     int nInMul = 1;               /* Number of distinct equalities to lookup */
                   101162:     int estBound = 100;           /* Estimated reduction in search space */
                   101163:     int nBound = 0;               /* Number of range constraints seen */
                   101164:     int bSort = 0;                /* True if external sort required */
                   101165:     int bLookup = 0;              /* True if not a covering index */
                   101166:     WhereTerm *pTerm;             /* A single term of the WHERE clause */
                   101167: #ifdef SQLITE_ENABLE_STAT2
                   101168:     WhereTerm *pFirstTerm = 0;    /* First term matching the index */
                   101169: #endif
                   101170: 
                   101171:     /* Determine the values of nEq and nInMul */
                   101172:     for(nEq=0; nEq<pProbe->nColumn; nEq++){
                   101173:       int j = pProbe->aiColumn[nEq];
                   101174:       pTerm = findTerm(pWC, iCur, j, notReady, eqTermMask, pIdx);
                   101175:       if( pTerm==0 ) break;
                   101176:       wsFlags |= (WHERE_COLUMN_EQ|WHERE_ROWID_EQ);
                   101177:       if( pTerm->eOperator & WO_IN ){
                   101178:         Expr *pExpr = pTerm->pExpr;
                   101179:         wsFlags |= WHERE_COLUMN_IN;
                   101180:         if( ExprHasProperty(pExpr, EP_xIsSelect) ){
                   101181:           /* "x IN (SELECT ...)":  Assume the SELECT returns 25 rows */
                   101182:           nInMul *= 25;
                   101183:           bInEst = 1;
                   101184:         }else if( ALWAYS(pExpr->x.pList && pExpr->x.pList->nExpr) ){
                   101185:           /* "x IN (value, value, ...)" */
                   101186:           nInMul *= pExpr->x.pList->nExpr;
                   101187:         }
                   101188:       }else if( pTerm->eOperator & WO_ISNULL ){
                   101189:         wsFlags |= WHERE_COLUMN_NULL;
                   101190:       }
                   101191: #ifdef SQLITE_ENABLE_STAT2
                   101192:       if( nEq==0 && pProbe->aSample ) pFirstTerm = pTerm;
                   101193: #endif
                   101194:       used |= pTerm->prereqRight;
                   101195:     }
                   101196: 
                   101197:     /* Determine the value of estBound. */
                   101198:     if( nEq<pProbe->nColumn && pProbe->bUnordered==0 ){
                   101199:       int j = pProbe->aiColumn[nEq];
                   101200:       if( findTerm(pWC, iCur, j, notReady, WO_LT|WO_LE|WO_GT|WO_GE, pIdx) ){
                   101201:         WhereTerm *pTop = findTerm(pWC, iCur, j, notReady, WO_LT|WO_LE, pIdx);
                   101202:         WhereTerm *pBtm = findTerm(pWC, iCur, j, notReady, WO_GT|WO_GE, pIdx);
                   101203:         whereRangeScanEst(pParse, pProbe, nEq, pBtm, pTop, &estBound);
                   101204:         if( pTop ){
                   101205:           nBound = 1;
                   101206:           wsFlags |= WHERE_TOP_LIMIT;
                   101207:           used |= pTop->prereqRight;
                   101208:         }
                   101209:         if( pBtm ){
                   101210:           nBound++;
                   101211:           wsFlags |= WHERE_BTM_LIMIT;
                   101212:           used |= pBtm->prereqRight;
                   101213:         }
                   101214:         wsFlags |= (WHERE_COLUMN_RANGE|WHERE_ROWID_RANGE);
                   101215:       }
                   101216:     }else if( pProbe->onError!=OE_None ){
                   101217:       testcase( wsFlags & WHERE_COLUMN_IN );
                   101218:       testcase( wsFlags & WHERE_COLUMN_NULL );
                   101219:       if( (wsFlags & (WHERE_COLUMN_IN|WHERE_COLUMN_NULL))==0 ){
                   101220:         wsFlags |= WHERE_UNIQUE;
                   101221:       }
                   101222:     }
                   101223: 
                   101224:     /* If there is an ORDER BY clause and the index being considered will
                   101225:     ** naturally scan rows in the required order, set the appropriate flags
                   101226:     ** in wsFlags. Otherwise, if there is an ORDER BY clause but the index
                   101227:     ** will scan rows in a different order, set the bSort variable.  */
                   101228:     if( pOrderBy ){
                   101229:       if( (wsFlags & WHERE_COLUMN_IN)==0
                   101230:         && pProbe->bUnordered==0
                   101231:         && isSortingIndex(pParse, pWC->pMaskSet, pProbe, iCur, pOrderBy,
                   101232:                           nEq, wsFlags, &rev)
                   101233:       ){
                   101234:         wsFlags |= WHERE_ROWID_RANGE|WHERE_COLUMN_RANGE|WHERE_ORDERBY;
                   101235:         wsFlags |= (rev ? WHERE_REVERSE : 0);
                   101236:       }else{
                   101237:         bSort = 1;
                   101238:       }
                   101239:     }
                   101240: 
                   101241:     /* If currently calculating the cost of using an index (not the IPK
                   101242:     ** index), determine if all required column data may be obtained without 
                   101243:     ** using the main table (i.e. if the index is a covering
                   101244:     ** index for this query). If it is, set the WHERE_IDX_ONLY flag in
                   101245:     ** wsFlags. Otherwise, set the bLookup variable to true.  */
                   101246:     if( pIdx && wsFlags ){
                   101247:       Bitmask m = pSrc->colUsed;
                   101248:       int j;
                   101249:       for(j=0; j<pIdx->nColumn; j++){
                   101250:         int x = pIdx->aiColumn[j];
                   101251:         if( x<BMS-1 ){
                   101252:           m &= ~(((Bitmask)1)<<x);
                   101253:         }
                   101254:       }
                   101255:       if( m==0 ){
                   101256:         wsFlags |= WHERE_IDX_ONLY;
                   101257:       }else{
                   101258:         bLookup = 1;
                   101259:       }
                   101260:     }
                   101261: 
                   101262:     /*
                   101263:     ** Estimate the number of rows of output.  For an "x IN (SELECT...)"
                   101264:     ** constraint, do not let the estimate exceed half the rows in the table.
                   101265:     */
                   101266:     nRow = (double)(aiRowEst[nEq] * nInMul);
                   101267:     if( bInEst && nRow*2>aiRowEst[0] ){
                   101268:       nRow = aiRowEst[0]/2;
                   101269:       nInMul = (int)(nRow / aiRowEst[nEq]);
                   101270:     }
                   101271: 
                   101272: #ifdef SQLITE_ENABLE_STAT2
                   101273:     /* If the constraint is of the form x=VALUE and histogram
                   101274:     ** data is available for column x, then it might be possible
                   101275:     ** to get a better estimate on the number of rows based on
                   101276:     ** VALUE and how common that value is according to the histogram.
                   101277:     */
                   101278:     if( nRow>(double)1 && nEq==1 && pFirstTerm!=0 ){
                   101279:       if( pFirstTerm->eOperator & (WO_EQ|WO_ISNULL) ){
                   101280:         testcase( pFirstTerm->eOperator==WO_EQ );
                   101281:         testcase( pFirstTerm->eOperator==WO_ISNULL );
                   101282:         whereEqualScanEst(pParse, pProbe, pFirstTerm->pExpr->pRight, &nRow);
                   101283:       }else if( pFirstTerm->eOperator==WO_IN && bInEst==0 ){
                   101284:         whereInScanEst(pParse, pProbe, pFirstTerm->pExpr->x.pList, &nRow);
                   101285:       }
                   101286:     }
                   101287: #endif /* SQLITE_ENABLE_STAT2 */
                   101288: 
                   101289:     /* Adjust the number of output rows and downward to reflect rows
                   101290:     ** that are excluded by range constraints.
                   101291:     */
                   101292:     nRow = (nRow * (double)estBound) / (double)100;
                   101293:     if( nRow<1 ) nRow = 1;
                   101294: 
                   101295:     /* Experiments run on real SQLite databases show that the time needed
                   101296:     ** to do a binary search to locate a row in a table or index is roughly
                   101297:     ** log10(N) times the time to move from one row to the next row within
                   101298:     ** a table or index.  The actual times can vary, with the size of
                   101299:     ** records being an important factor.  Both moves and searches are
                   101300:     ** slower with larger records, presumably because fewer records fit
                   101301:     ** on one page and hence more pages have to be fetched.
                   101302:     **
                   101303:     ** The ANALYZE command and the sqlite_stat1 and sqlite_stat2 tables do
                   101304:     ** not give us data on the relative sizes of table and index records.
                   101305:     ** So this computation assumes table records are about twice as big
                   101306:     ** as index records
                   101307:     */
                   101308:     if( (wsFlags & WHERE_NOT_FULLSCAN)==0 ){
                   101309:       /* The cost of a full table scan is a number of move operations equal
                   101310:       ** to the number of rows in the table.
                   101311:       **
                   101312:       ** We add an additional 4x penalty to full table scans.  This causes
                   101313:       ** the cost function to err on the side of choosing an index over
                   101314:       ** choosing a full scan.  This 4x full-scan penalty is an arguable
                   101315:       ** decision and one which we expect to revisit in the future.  But
                   101316:       ** it seems to be working well enough at the moment.
                   101317:       */
                   101318:       cost = aiRowEst[0]*4;
                   101319:     }else{
                   101320:       log10N = estLog(aiRowEst[0]);
                   101321:       cost = nRow;
                   101322:       if( pIdx ){
                   101323:         if( bLookup ){
                   101324:           /* For an index lookup followed by a table lookup:
                   101325:           **    nInMul index searches to find the start of each index range
                   101326:           **  + nRow steps through the index
                   101327:           **  + nRow table searches to lookup the table entry using the rowid
                   101328:           */
                   101329:           cost += (nInMul + nRow)*log10N;
                   101330:         }else{
                   101331:           /* For a covering index:
                   101332:           **     nInMul index searches to find the initial entry 
                   101333:           **   + nRow steps through the index
                   101334:           */
                   101335:           cost += nInMul*log10N;
                   101336:         }
                   101337:       }else{
                   101338:         /* For a rowid primary key lookup:
                   101339:         **    nInMult table searches to find the initial entry for each range
                   101340:         **  + nRow steps through the table
                   101341:         */
                   101342:         cost += nInMul*log10N;
                   101343:       }
                   101344:     }
                   101345: 
                   101346:     /* Add in the estimated cost of sorting the result.  Actual experimental
                   101347:     ** measurements of sorting performance in SQLite show that sorting time
                   101348:     ** adds C*N*log10(N) to the cost, where N is the number of rows to be 
                   101349:     ** sorted and C is a factor between 1.95 and 4.3.  We will split the
                   101350:     ** difference and select C of 3.0.
                   101351:     */
                   101352:     if( bSort ){
                   101353:       cost += nRow*estLog(nRow)*3;
                   101354:     }
                   101355: 
                   101356:     /**** Cost of using this index has now been computed ****/
                   101357: 
                   101358:     /* If there are additional constraints on this table that cannot
                   101359:     ** be used with the current index, but which might lower the number
                   101360:     ** of output rows, adjust the nRow value accordingly.  This only 
                   101361:     ** matters if the current index is the least costly, so do not bother
                   101362:     ** with this step if we already know this index will not be chosen.
                   101363:     ** Also, never reduce the output row count below 2 using this step.
                   101364:     **
                   101365:     ** It is critical that the notValid mask be used here instead of
                   101366:     ** the notReady mask.  When computing an "optimal" index, the notReady
                   101367:     ** mask will only have one bit set - the bit for the current table.
                   101368:     ** The notValid mask, on the other hand, always has all bits set for
                   101369:     ** tables that are not in outer loops.  If notReady is used here instead
                   101370:     ** of notValid, then a optimal index that depends on inner joins loops
                   101371:     ** might be selected even when there exists an optimal index that has
                   101372:     ** no such dependency.
                   101373:     */
                   101374:     if( nRow>2 && cost<=pCost->rCost ){
                   101375:       int k;                       /* Loop counter */
                   101376:       int nSkipEq = nEq;           /* Number of == constraints to skip */
                   101377:       int nSkipRange = nBound;     /* Number of < constraints to skip */
                   101378:       Bitmask thisTab;             /* Bitmap for pSrc */
                   101379: 
                   101380:       thisTab = getMask(pWC->pMaskSet, iCur);
                   101381:       for(pTerm=pWC->a, k=pWC->nTerm; nRow>2 && k; k--, pTerm++){
                   101382:         if( pTerm->wtFlags & TERM_VIRTUAL ) continue;
                   101383:         if( (pTerm->prereqAll & notValid)!=thisTab ) continue;
                   101384:         if( pTerm->eOperator & (WO_EQ|WO_IN|WO_ISNULL) ){
                   101385:           if( nSkipEq ){
                   101386:             /* Ignore the first nEq equality matches since the index
                   101387:             ** has already accounted for these */
                   101388:             nSkipEq--;
                   101389:           }else{
                   101390:             /* Assume each additional equality match reduces the result
                   101391:             ** set size by a factor of 10 */
                   101392:             nRow /= 10;
                   101393:           }
                   101394:         }else if( pTerm->eOperator & (WO_LT|WO_LE|WO_GT|WO_GE) ){
                   101395:           if( nSkipRange ){
                   101396:             /* Ignore the first nSkipRange range constraints since the index
                   101397:             ** has already accounted for these */
                   101398:             nSkipRange--;
                   101399:           }else{
                   101400:             /* Assume each additional range constraint reduces the result
                   101401:             ** set size by a factor of 3.  Indexed range constraints reduce
                   101402:             ** the search space by a larger factor: 4.  We make indexed range
                   101403:             ** more selective intentionally because of the subjective 
                   101404:             ** observation that indexed range constraints really are more
                   101405:             ** selective in practice, on average. */
                   101406:             nRow /= 3;
                   101407:           }
                   101408:         }else if( pTerm->eOperator!=WO_NOOP ){
                   101409:           /* Any other expression lowers the output row count by half */
                   101410:           nRow /= 2;
                   101411:         }
                   101412:       }
                   101413:       if( nRow<2 ) nRow = 2;
                   101414:     }
                   101415: 
                   101416: 
                   101417:     WHERETRACE((
                   101418:       "%s(%s): nEq=%d nInMul=%d estBound=%d bSort=%d bLookup=%d wsFlags=0x%x\n"
                   101419:       "         notReady=0x%llx log10N=%.1f nRow=%.1f cost=%.1f used=0x%llx\n",
                   101420:       pSrc->pTab->zName, (pIdx ? pIdx->zName : "ipk"), 
                   101421:       nEq, nInMul, estBound, bSort, bLookup, wsFlags,
                   101422:       notReady, log10N, nRow, cost, used
                   101423:     ));
                   101424: 
                   101425:     /* If this index is the best we have seen so far, then record this
                   101426:     ** index and its cost in the pCost structure.
                   101427:     */
                   101428:     if( (!pIdx || wsFlags)
                   101429:      && (cost<pCost->rCost || (cost<=pCost->rCost && nRow<pCost->plan.nRow))
                   101430:     ){
                   101431:       pCost->rCost = cost;
                   101432:       pCost->used = used;
                   101433:       pCost->plan.nRow = nRow;
                   101434:       pCost->plan.wsFlags = (wsFlags&wsFlagMask);
                   101435:       pCost->plan.nEq = nEq;
                   101436:       pCost->plan.u.pIdx = pIdx;
                   101437:     }
                   101438: 
                   101439:     /* If there was an INDEXED BY clause, then only that one index is
                   101440:     ** considered. */
                   101441:     if( pSrc->pIndex ) break;
                   101442: 
                   101443:     /* Reset masks for the next index in the loop */
                   101444:     wsFlagMask = ~(WHERE_ROWID_EQ|WHERE_ROWID_RANGE);
                   101445:     eqTermMask = idxEqTermMask;
                   101446:   }
                   101447: 
                   101448:   /* If there is no ORDER BY clause and the SQLITE_ReverseOrder flag
                   101449:   ** is set, then reverse the order that the index will be scanned
                   101450:   ** in. This is used for application testing, to help find cases
                   101451:   ** where application behaviour depends on the (undefined) order that
                   101452:   ** SQLite outputs rows in in the absence of an ORDER BY clause.  */
                   101453:   if( !pOrderBy && pParse->db->flags & SQLITE_ReverseOrder ){
                   101454:     pCost->plan.wsFlags |= WHERE_REVERSE;
                   101455:   }
                   101456: 
                   101457:   assert( pOrderBy || (pCost->plan.wsFlags&WHERE_ORDERBY)==0 );
                   101458:   assert( pCost->plan.u.pIdx==0 || (pCost->plan.wsFlags&WHERE_ROWID_EQ)==0 );
                   101459:   assert( pSrc->pIndex==0 
                   101460:        || pCost->plan.u.pIdx==0 
                   101461:        || pCost->plan.u.pIdx==pSrc->pIndex 
                   101462:   );
                   101463: 
                   101464:   WHERETRACE(("best index is: %s\n", 
                   101465:     ((pCost->plan.wsFlags & WHERE_NOT_FULLSCAN)==0 ? "none" : 
                   101466:          pCost->plan.u.pIdx ? pCost->plan.u.pIdx->zName : "ipk")
                   101467:   ));
                   101468:   
                   101469:   bestOrClauseIndex(pParse, pWC, pSrc, notReady, notValid, pOrderBy, pCost);
                   101470:   bestAutomaticIndex(pParse, pWC, pSrc, notReady, pCost);
                   101471:   pCost->plan.wsFlags |= eqTermMask;
                   101472: }
                   101473: 
                   101474: /*
                   101475: ** Find the query plan for accessing table pSrc->pTab. Write the
                   101476: ** best query plan and its cost into the WhereCost object supplied 
                   101477: ** as the last parameter. This function may calculate the cost of
                   101478: ** both real and virtual table scans.
                   101479: */
                   101480: static void bestIndex(
                   101481:   Parse *pParse,              /* The parsing context */
                   101482:   WhereClause *pWC,           /* The WHERE clause */
                   101483:   struct SrcList_item *pSrc,  /* The FROM clause term to search */
                   101484:   Bitmask notReady,           /* Mask of cursors not available for indexing */
                   101485:   Bitmask notValid,           /* Cursors not available for any purpose */
                   101486:   ExprList *pOrderBy,         /* The ORDER BY clause */
                   101487:   WhereCost *pCost            /* Lowest cost query plan */
                   101488: ){
                   101489: #ifndef SQLITE_OMIT_VIRTUALTABLE
                   101490:   if( IsVirtual(pSrc->pTab) ){
                   101491:     sqlite3_index_info *p = 0;
                   101492:     bestVirtualIndex(pParse, pWC, pSrc, notReady, notValid, pOrderBy, pCost,&p);
                   101493:     if( p->needToFreeIdxStr ){
                   101494:       sqlite3_free(p->idxStr);
                   101495:     }
                   101496:     sqlite3DbFree(pParse->db, p);
                   101497:   }else
                   101498: #endif
                   101499:   {
                   101500:     bestBtreeIndex(pParse, pWC, pSrc, notReady, notValid, pOrderBy, pCost);
                   101501:   }
                   101502: }
                   101503: 
                   101504: /*
                   101505: ** Disable a term in the WHERE clause.  Except, do not disable the term
                   101506: ** if it controls a LEFT OUTER JOIN and it did not originate in the ON
                   101507: ** or USING clause of that join.
                   101508: **
                   101509: ** Consider the term t2.z='ok' in the following queries:
                   101510: **
                   101511: **   (1)  SELECT * FROM t1 LEFT JOIN t2 ON t1.a=t2.x WHERE t2.z='ok'
                   101512: **   (2)  SELECT * FROM t1 LEFT JOIN t2 ON t1.a=t2.x AND t2.z='ok'
                   101513: **   (3)  SELECT * FROM t1, t2 WHERE t1.a=t2.x AND t2.z='ok'
                   101514: **
                   101515: ** The t2.z='ok' is disabled in the in (2) because it originates
                   101516: ** in the ON clause.  The term is disabled in (3) because it is not part
                   101517: ** of a LEFT OUTER JOIN.  In (1), the term is not disabled.
                   101518: **
                   101519: ** IMPLEMENTATION-OF: R-24597-58655 No tests are done for terms that are
                   101520: ** completely satisfied by indices.
                   101521: **
                   101522: ** Disabling a term causes that term to not be tested in the inner loop
                   101523: ** of the join.  Disabling is an optimization.  When terms are satisfied
                   101524: ** by indices, we disable them to prevent redundant tests in the inner
                   101525: ** loop.  We would get the correct results if nothing were ever disabled,
                   101526: ** but joins might run a little slower.  The trick is to disable as much
                   101527: ** as we can without disabling too much.  If we disabled in (1), we'd get
                   101528: ** the wrong answer.  See ticket #813.
                   101529: */
                   101530: static void disableTerm(WhereLevel *pLevel, WhereTerm *pTerm){
                   101531:   if( pTerm
                   101532:       && (pTerm->wtFlags & TERM_CODED)==0
                   101533:       && (pLevel->iLeftJoin==0 || ExprHasProperty(pTerm->pExpr, EP_FromJoin))
                   101534:   ){
                   101535:     pTerm->wtFlags |= TERM_CODED;
                   101536:     if( pTerm->iParent>=0 ){
                   101537:       WhereTerm *pOther = &pTerm->pWC->a[pTerm->iParent];
                   101538:       if( (--pOther->nChild)==0 ){
                   101539:         disableTerm(pLevel, pOther);
                   101540:       }
                   101541:     }
                   101542:   }
                   101543: }
                   101544: 
                   101545: /*
                   101546: ** Code an OP_Affinity opcode to apply the column affinity string zAff
                   101547: ** to the n registers starting at base. 
                   101548: **
                   101549: ** As an optimization, SQLITE_AFF_NONE entries (which are no-ops) at the
                   101550: ** beginning and end of zAff are ignored.  If all entries in zAff are
                   101551: ** SQLITE_AFF_NONE, then no code gets generated.
                   101552: **
                   101553: ** This routine makes its own copy of zAff so that the caller is free
                   101554: ** to modify zAff after this routine returns.
                   101555: */
                   101556: static void codeApplyAffinity(Parse *pParse, int base, int n, char *zAff){
                   101557:   Vdbe *v = pParse->pVdbe;
                   101558:   if( zAff==0 ){
                   101559:     assert( pParse->db->mallocFailed );
                   101560:     return;
                   101561:   }
                   101562:   assert( v!=0 );
                   101563: 
                   101564:   /* Adjust base and n to skip over SQLITE_AFF_NONE entries at the beginning
                   101565:   ** and end of the affinity string.
                   101566:   */
                   101567:   while( n>0 && zAff[0]==SQLITE_AFF_NONE ){
                   101568:     n--;
                   101569:     base++;
                   101570:     zAff++;
                   101571:   }
                   101572:   while( n>1 && zAff[n-1]==SQLITE_AFF_NONE ){
                   101573:     n--;
                   101574:   }
                   101575: 
                   101576:   /* Code the OP_Affinity opcode if there is anything left to do. */
                   101577:   if( n>0 ){
                   101578:     sqlite3VdbeAddOp2(v, OP_Affinity, base, n);
                   101579:     sqlite3VdbeChangeP4(v, -1, zAff, n);
                   101580:     sqlite3ExprCacheAffinityChange(pParse, base, n);
                   101581:   }
                   101582: }
                   101583: 
                   101584: 
                   101585: /*
                   101586: ** Generate code for a single equality term of the WHERE clause.  An equality
                   101587: ** term can be either X=expr or X IN (...).   pTerm is the term to be 
                   101588: ** coded.
                   101589: **
                   101590: ** The current value for the constraint is left in register iReg.
                   101591: **
                   101592: ** For a constraint of the form X=expr, the expression is evaluated and its
                   101593: ** result is left on the stack.  For constraints of the form X IN (...)
                   101594: ** this routine sets up a loop that will iterate over all values of X.
                   101595: */
                   101596: static int codeEqualityTerm(
                   101597:   Parse *pParse,      /* The parsing context */
                   101598:   WhereTerm *pTerm,   /* The term of the WHERE clause to be coded */
                   101599:   WhereLevel *pLevel, /* When level of the FROM clause we are working on */
                   101600:   int iTarget         /* Attempt to leave results in this register */
                   101601: ){
                   101602:   Expr *pX = pTerm->pExpr;
                   101603:   Vdbe *v = pParse->pVdbe;
                   101604:   int iReg;                  /* Register holding results */
                   101605: 
                   101606:   assert( iTarget>0 );
                   101607:   if( pX->op==TK_EQ ){
                   101608:     iReg = sqlite3ExprCodeTarget(pParse, pX->pRight, iTarget);
                   101609:   }else if( pX->op==TK_ISNULL ){
                   101610:     iReg = iTarget;
                   101611:     sqlite3VdbeAddOp2(v, OP_Null, 0, iReg);
                   101612: #ifndef SQLITE_OMIT_SUBQUERY
                   101613:   }else{
                   101614:     int eType;
                   101615:     int iTab;
                   101616:     struct InLoop *pIn;
                   101617: 
                   101618:     assert( pX->op==TK_IN );
                   101619:     iReg = iTarget;
                   101620:     eType = sqlite3FindInIndex(pParse, pX, 0);
                   101621:     iTab = pX->iTable;
                   101622:     sqlite3VdbeAddOp2(v, OP_Rewind, iTab, 0);
                   101623:     assert( pLevel->plan.wsFlags & WHERE_IN_ABLE );
                   101624:     if( pLevel->u.in.nIn==0 ){
                   101625:       pLevel->addrNxt = sqlite3VdbeMakeLabel(v);
                   101626:     }
                   101627:     pLevel->u.in.nIn++;
                   101628:     pLevel->u.in.aInLoop =
                   101629:        sqlite3DbReallocOrFree(pParse->db, pLevel->u.in.aInLoop,
                   101630:                               sizeof(pLevel->u.in.aInLoop[0])*pLevel->u.in.nIn);
                   101631:     pIn = pLevel->u.in.aInLoop;
                   101632:     if( pIn ){
                   101633:       pIn += pLevel->u.in.nIn - 1;
                   101634:       pIn->iCur = iTab;
                   101635:       if( eType==IN_INDEX_ROWID ){
                   101636:         pIn->addrInTop = sqlite3VdbeAddOp2(v, OP_Rowid, iTab, iReg);
                   101637:       }else{
                   101638:         pIn->addrInTop = sqlite3VdbeAddOp3(v, OP_Column, iTab, 0, iReg);
                   101639:       }
                   101640:       sqlite3VdbeAddOp1(v, OP_IsNull, iReg);
                   101641:     }else{
                   101642:       pLevel->u.in.nIn = 0;
                   101643:     }
                   101644: #endif
                   101645:   }
                   101646:   disableTerm(pLevel, pTerm);
                   101647:   return iReg;
                   101648: }
                   101649: 
                   101650: /*
                   101651: ** Generate code that will evaluate all == and IN constraints for an
                   101652: ** index.
                   101653: **
                   101654: ** For example, consider table t1(a,b,c,d,e,f) with index i1(a,b,c).
                   101655: ** Suppose the WHERE clause is this:  a==5 AND b IN (1,2,3) AND c>5 AND c<10
                   101656: ** The index has as many as three equality constraints, but in this
                   101657: ** example, the third "c" value is an inequality.  So only two 
                   101658: ** constraints are coded.  This routine will generate code to evaluate
                   101659: ** a==5 and b IN (1,2,3).  The current values for a and b will be stored
                   101660: ** in consecutive registers and the index of the first register is returned.
                   101661: **
                   101662: ** In the example above nEq==2.  But this subroutine works for any value
                   101663: ** of nEq including 0.  If nEq==0, this routine is nearly a no-op.
                   101664: ** The only thing it does is allocate the pLevel->iMem memory cell and
                   101665: ** compute the affinity string.
                   101666: **
                   101667: ** This routine always allocates at least one memory cell and returns
                   101668: ** the index of that memory cell. The code that
                   101669: ** calls this routine will use that memory cell to store the termination
                   101670: ** key value of the loop.  If one or more IN operators appear, then
                   101671: ** this routine allocates an additional nEq memory cells for internal
                   101672: ** use.
                   101673: **
                   101674: ** Before returning, *pzAff is set to point to a buffer containing a
                   101675: ** copy of the column affinity string of the index allocated using
                   101676: ** sqlite3DbMalloc(). Except, entries in the copy of the string associated
                   101677: ** with equality constraints that use NONE affinity are set to
                   101678: ** SQLITE_AFF_NONE. This is to deal with SQL such as the following:
                   101679: **
                   101680: **   CREATE TABLE t1(a TEXT PRIMARY KEY, b);
                   101681: **   SELECT ... FROM t1 AS t2, t1 WHERE t1.a = t2.b;
                   101682: **
                   101683: ** In the example above, the index on t1(a) has TEXT affinity. But since
                   101684: ** the right hand side of the equality constraint (t2.b) has NONE affinity,
                   101685: ** no conversion should be attempted before using a t2.b value as part of
                   101686: ** a key to search the index. Hence the first byte in the returned affinity
                   101687: ** string in this example would be set to SQLITE_AFF_NONE.
                   101688: */
                   101689: static int codeAllEqualityTerms(
                   101690:   Parse *pParse,        /* Parsing context */
                   101691:   WhereLevel *pLevel,   /* Which nested loop of the FROM we are coding */
                   101692:   WhereClause *pWC,     /* The WHERE clause */
                   101693:   Bitmask notReady,     /* Which parts of FROM have not yet been coded */
                   101694:   int nExtraReg,        /* Number of extra registers to allocate */
                   101695:   char **pzAff          /* OUT: Set to point to affinity string */
                   101696: ){
                   101697:   int nEq = pLevel->plan.nEq;   /* The number of == or IN constraints to code */
                   101698:   Vdbe *v = pParse->pVdbe;      /* The vm under construction */
                   101699:   Index *pIdx;                  /* The index being used for this loop */
                   101700:   int iCur = pLevel->iTabCur;   /* The cursor of the table */
                   101701:   WhereTerm *pTerm;             /* A single constraint term */
                   101702:   int j;                        /* Loop counter */
                   101703:   int regBase;                  /* Base register */
                   101704:   int nReg;                     /* Number of registers to allocate */
                   101705:   char *zAff;                   /* Affinity string to return */
                   101706: 
                   101707:   /* This module is only called on query plans that use an index. */
                   101708:   assert( pLevel->plan.wsFlags & WHERE_INDEXED );
                   101709:   pIdx = pLevel->plan.u.pIdx;
                   101710: 
                   101711:   /* Figure out how many memory cells we will need then allocate them.
                   101712:   */
                   101713:   regBase = pParse->nMem + 1;
                   101714:   nReg = pLevel->plan.nEq + nExtraReg;
                   101715:   pParse->nMem += nReg;
                   101716: 
                   101717:   zAff = sqlite3DbStrDup(pParse->db, sqlite3IndexAffinityStr(v, pIdx));
                   101718:   if( !zAff ){
                   101719:     pParse->db->mallocFailed = 1;
                   101720:   }
                   101721: 
                   101722:   /* Evaluate the equality constraints
                   101723:   */
                   101724:   assert( pIdx->nColumn>=nEq );
                   101725:   for(j=0; j<nEq; j++){
                   101726:     int r1;
                   101727:     int k = pIdx->aiColumn[j];
                   101728:     pTerm = findTerm(pWC, iCur, k, notReady, pLevel->plan.wsFlags, pIdx);
                   101729:     if( NEVER(pTerm==0) ) break;
                   101730:     /* The following true for indices with redundant columns. 
                   101731:     ** Ex: CREATE INDEX i1 ON t1(a,b,a); SELECT * FROM t1 WHERE a=0 AND b=0; */
                   101732:     testcase( (pTerm->wtFlags & TERM_CODED)!=0 );
                   101733:     testcase( pTerm->wtFlags & TERM_VIRTUAL ); /* EV: R-30575-11662 */
                   101734:     r1 = codeEqualityTerm(pParse, pTerm, pLevel, regBase+j);
                   101735:     if( r1!=regBase+j ){
                   101736:       if( nReg==1 ){
                   101737:         sqlite3ReleaseTempReg(pParse, regBase);
                   101738:         regBase = r1;
                   101739:       }else{
                   101740:         sqlite3VdbeAddOp2(v, OP_SCopy, r1, regBase+j);
                   101741:       }
                   101742:     }
                   101743:     testcase( pTerm->eOperator & WO_ISNULL );
                   101744:     testcase( pTerm->eOperator & WO_IN );
                   101745:     if( (pTerm->eOperator & (WO_ISNULL|WO_IN))==0 ){
                   101746:       Expr *pRight = pTerm->pExpr->pRight;
                   101747:       sqlite3ExprCodeIsNullJump(v, pRight, regBase+j, pLevel->addrBrk);
                   101748:       if( zAff ){
                   101749:         if( sqlite3CompareAffinity(pRight, zAff[j])==SQLITE_AFF_NONE ){
                   101750:           zAff[j] = SQLITE_AFF_NONE;
                   101751:         }
                   101752:         if( sqlite3ExprNeedsNoAffinityChange(pRight, zAff[j]) ){
                   101753:           zAff[j] = SQLITE_AFF_NONE;
                   101754:         }
                   101755:       }
                   101756:     }
                   101757:   }
                   101758:   *pzAff = zAff;
                   101759:   return regBase;
                   101760: }
                   101761: 
                   101762: #ifndef SQLITE_OMIT_EXPLAIN
                   101763: /*
                   101764: ** This routine is a helper for explainIndexRange() below
                   101765: **
                   101766: ** pStr holds the text of an expression that we are building up one term
                   101767: ** at a time.  This routine adds a new term to the end of the expression.
                   101768: ** Terms are separated by AND so add the "AND" text for second and subsequent
                   101769: ** terms only.
                   101770: */
                   101771: static void explainAppendTerm(
                   101772:   StrAccum *pStr,             /* The text expression being built */
                   101773:   int iTerm,                  /* Index of this term.  First is zero */
                   101774:   const char *zColumn,        /* Name of the column */
                   101775:   const char *zOp             /* Name of the operator */
                   101776: ){
                   101777:   if( iTerm ) sqlite3StrAccumAppend(pStr, " AND ", 5);
                   101778:   sqlite3StrAccumAppend(pStr, zColumn, -1);
                   101779:   sqlite3StrAccumAppend(pStr, zOp, 1);
                   101780:   sqlite3StrAccumAppend(pStr, "?", 1);
                   101781: }
                   101782: 
                   101783: /*
                   101784: ** Argument pLevel describes a strategy for scanning table pTab. This 
                   101785: ** function returns a pointer to a string buffer containing a description
                   101786: ** of the subset of table rows scanned by the strategy in the form of an
                   101787: ** SQL expression. Or, if all rows are scanned, NULL is returned.
                   101788: **
                   101789: ** For example, if the query:
                   101790: **
                   101791: **   SELECT * FROM t1 WHERE a=1 AND b>2;
                   101792: **
                   101793: ** is run and there is an index on (a, b), then this function returns a
                   101794: ** string similar to:
                   101795: **
                   101796: **   "a=? AND b>?"
                   101797: **
                   101798: ** The returned pointer points to memory obtained from sqlite3DbMalloc().
                   101799: ** It is the responsibility of the caller to free the buffer when it is
                   101800: ** no longer required.
                   101801: */
                   101802: static char *explainIndexRange(sqlite3 *db, WhereLevel *pLevel, Table *pTab){
                   101803:   WherePlan *pPlan = &pLevel->plan;
                   101804:   Index *pIndex = pPlan->u.pIdx;
                   101805:   int nEq = pPlan->nEq;
                   101806:   int i, j;
                   101807:   Column *aCol = pTab->aCol;
                   101808:   int *aiColumn = pIndex->aiColumn;
                   101809:   StrAccum txt;
                   101810: 
                   101811:   if( nEq==0 && (pPlan->wsFlags & (WHERE_BTM_LIMIT|WHERE_TOP_LIMIT))==0 ){
                   101812:     return 0;
                   101813:   }
                   101814:   sqlite3StrAccumInit(&txt, 0, 0, SQLITE_MAX_LENGTH);
                   101815:   txt.db = db;
                   101816:   sqlite3StrAccumAppend(&txt, " (", 2);
                   101817:   for(i=0; i<nEq; i++){
                   101818:     explainAppendTerm(&txt, i, aCol[aiColumn[i]].zName, "=");
                   101819:   }
                   101820: 
                   101821:   j = i;
                   101822:   if( pPlan->wsFlags&WHERE_BTM_LIMIT ){
                   101823:     explainAppendTerm(&txt, i++, aCol[aiColumn[j]].zName, ">");
                   101824:   }
                   101825:   if( pPlan->wsFlags&WHERE_TOP_LIMIT ){
                   101826:     explainAppendTerm(&txt, i, aCol[aiColumn[j]].zName, "<");
                   101827:   }
                   101828:   sqlite3StrAccumAppend(&txt, ")", 1);
                   101829:   return sqlite3StrAccumFinish(&txt);
                   101830: }
                   101831: 
                   101832: /*
                   101833: ** This function is a no-op unless currently processing an EXPLAIN QUERY PLAN
                   101834: ** command. If the query being compiled is an EXPLAIN QUERY PLAN, a single
                   101835: ** record is added to the output to describe the table scan strategy in 
                   101836: ** pLevel.
                   101837: */
                   101838: static void explainOneScan(
                   101839:   Parse *pParse,                  /* Parse context */
                   101840:   SrcList *pTabList,              /* Table list this loop refers to */
                   101841:   WhereLevel *pLevel,             /* Scan to write OP_Explain opcode for */
                   101842:   int iLevel,                     /* Value for "level" column of output */
                   101843:   int iFrom,                      /* Value for "from" column of output */
                   101844:   u16 wctrlFlags                  /* Flags passed to sqlite3WhereBegin() */
                   101845: ){
                   101846:   if( pParse->explain==2 ){
                   101847:     u32 flags = pLevel->plan.wsFlags;
                   101848:     struct SrcList_item *pItem = &pTabList->a[pLevel->iFrom];
                   101849:     Vdbe *v = pParse->pVdbe;      /* VM being constructed */
                   101850:     sqlite3 *db = pParse->db;     /* Database handle */
                   101851:     char *zMsg;                   /* Text to add to EQP output */
                   101852:     sqlite3_int64 nRow;           /* Expected number of rows visited by scan */
                   101853:     int iId = pParse->iSelectId;  /* Select id (left-most output column) */
                   101854:     int isSearch;                 /* True for a SEARCH. False for SCAN. */
                   101855: 
                   101856:     if( (flags&WHERE_MULTI_OR) || (wctrlFlags&WHERE_ONETABLE_ONLY) ) return;
                   101857: 
                   101858:     isSearch = (pLevel->plan.nEq>0)
                   101859:              || (flags&(WHERE_BTM_LIMIT|WHERE_TOP_LIMIT))!=0
                   101860:              || (wctrlFlags&(WHERE_ORDERBY_MIN|WHERE_ORDERBY_MAX));
                   101861: 
                   101862:     zMsg = sqlite3MPrintf(db, "%s", isSearch?"SEARCH":"SCAN");
                   101863:     if( pItem->pSelect ){
                   101864:       zMsg = sqlite3MAppendf(db, zMsg, "%s SUBQUERY %d", zMsg,pItem->iSelectId);
                   101865:     }else{
                   101866:       zMsg = sqlite3MAppendf(db, zMsg, "%s TABLE %s", zMsg, pItem->zName);
                   101867:     }
                   101868: 
                   101869:     if( pItem->zAlias ){
                   101870:       zMsg = sqlite3MAppendf(db, zMsg, "%s AS %s", zMsg, pItem->zAlias);
                   101871:     }
                   101872:     if( (flags & WHERE_INDEXED)!=0 ){
                   101873:       char *zWhere = explainIndexRange(db, pLevel, pItem->pTab);
                   101874:       zMsg = sqlite3MAppendf(db, zMsg, "%s USING %s%sINDEX%s%s%s", zMsg, 
                   101875:           ((flags & WHERE_TEMP_INDEX)?"AUTOMATIC ":""),
                   101876:           ((flags & WHERE_IDX_ONLY)?"COVERING ":""),
                   101877:           ((flags & WHERE_TEMP_INDEX)?"":" "),
                   101878:           ((flags & WHERE_TEMP_INDEX)?"": pLevel->plan.u.pIdx->zName),
                   101879:           zWhere
                   101880:       );
                   101881:       sqlite3DbFree(db, zWhere);
                   101882:     }else if( flags & (WHERE_ROWID_EQ|WHERE_ROWID_RANGE) ){
                   101883:       zMsg = sqlite3MAppendf(db, zMsg, "%s USING INTEGER PRIMARY KEY", zMsg);
                   101884: 
                   101885:       if( flags&WHERE_ROWID_EQ ){
                   101886:         zMsg = sqlite3MAppendf(db, zMsg, "%s (rowid=?)", zMsg);
                   101887:       }else if( (flags&WHERE_BOTH_LIMIT)==WHERE_BOTH_LIMIT ){
                   101888:         zMsg = sqlite3MAppendf(db, zMsg, "%s (rowid>? AND rowid<?)", zMsg);
                   101889:       }else if( flags&WHERE_BTM_LIMIT ){
                   101890:         zMsg = sqlite3MAppendf(db, zMsg, "%s (rowid>?)", zMsg);
                   101891:       }else if( flags&WHERE_TOP_LIMIT ){
                   101892:         zMsg = sqlite3MAppendf(db, zMsg, "%s (rowid<?)", zMsg);
                   101893:       }
                   101894:     }
                   101895: #ifndef SQLITE_OMIT_VIRTUALTABLE
                   101896:     else if( (flags & WHERE_VIRTUALTABLE)!=0 ){
                   101897:       sqlite3_index_info *pVtabIdx = pLevel->plan.u.pVtabIdx;
                   101898:       zMsg = sqlite3MAppendf(db, zMsg, "%s VIRTUAL TABLE INDEX %d:%s", zMsg,
                   101899:                   pVtabIdx->idxNum, pVtabIdx->idxStr);
                   101900:     }
                   101901: #endif
                   101902:     if( wctrlFlags&(WHERE_ORDERBY_MIN|WHERE_ORDERBY_MAX) ){
                   101903:       testcase( wctrlFlags & WHERE_ORDERBY_MIN );
                   101904:       nRow = 1;
                   101905:     }else{
                   101906:       nRow = (sqlite3_int64)pLevel->plan.nRow;
                   101907:     }
                   101908:     zMsg = sqlite3MAppendf(db, zMsg, "%s (~%lld rows)", zMsg, nRow);
                   101909:     sqlite3VdbeAddOp4(v, OP_Explain, iId, iLevel, iFrom, zMsg, P4_DYNAMIC);
                   101910:   }
                   101911: }
                   101912: #else
                   101913: # define explainOneScan(u,v,w,x,y,z)
                   101914: #endif /* SQLITE_OMIT_EXPLAIN */
                   101915: 
                   101916: 
                   101917: /*
                   101918: ** Generate code for the start of the iLevel-th loop in the WHERE clause
                   101919: ** implementation described by pWInfo.
                   101920: */
                   101921: static Bitmask codeOneLoopStart(
                   101922:   WhereInfo *pWInfo,   /* Complete information about the WHERE clause */
                   101923:   int iLevel,          /* Which level of pWInfo->a[] should be coded */
                   101924:   u16 wctrlFlags,      /* One of the WHERE_* flags defined in sqliteInt.h */
                   101925:   Bitmask notReady     /* Which tables are currently available */
                   101926: ){
                   101927:   int j, k;            /* Loop counters */
                   101928:   int iCur;            /* The VDBE cursor for the table */
                   101929:   int addrNxt;         /* Where to jump to continue with the next IN case */
                   101930:   int omitTable;       /* True if we use the index only */
                   101931:   int bRev;            /* True if we need to scan in reverse order */
                   101932:   WhereLevel *pLevel;  /* The where level to be coded */
                   101933:   WhereClause *pWC;    /* Decomposition of the entire WHERE clause */
                   101934:   WhereTerm *pTerm;               /* A WHERE clause term */
                   101935:   Parse *pParse;                  /* Parsing context */
                   101936:   Vdbe *v;                        /* The prepared stmt under constructions */
                   101937:   struct SrcList_item *pTabItem;  /* FROM clause term being coded */
                   101938:   int addrBrk;                    /* Jump here to break out of the loop */
                   101939:   int addrCont;                   /* Jump here to continue with next cycle */
                   101940:   int iRowidReg = 0;        /* Rowid is stored in this register, if not zero */
                   101941:   int iReleaseReg = 0;      /* Temp register to free before returning */
                   101942: 
                   101943:   pParse = pWInfo->pParse;
                   101944:   v = pParse->pVdbe;
                   101945:   pWC = pWInfo->pWC;
                   101946:   pLevel = &pWInfo->a[iLevel];
                   101947:   pTabItem = &pWInfo->pTabList->a[pLevel->iFrom];
                   101948:   iCur = pTabItem->iCursor;
                   101949:   bRev = (pLevel->plan.wsFlags & WHERE_REVERSE)!=0;
                   101950:   omitTable = (pLevel->plan.wsFlags & WHERE_IDX_ONLY)!=0 
                   101951:            && (wctrlFlags & WHERE_FORCE_TABLE)==0;
                   101952: 
                   101953:   /* Create labels for the "break" and "continue" instructions
                   101954:   ** for the current loop.  Jump to addrBrk to break out of a loop.
                   101955:   ** Jump to cont to go immediately to the next iteration of the
                   101956:   ** loop.
                   101957:   **
                   101958:   ** When there is an IN operator, we also have a "addrNxt" label that
                   101959:   ** means to continue with the next IN value combination.  When
                   101960:   ** there are no IN operators in the constraints, the "addrNxt" label
                   101961:   ** is the same as "addrBrk".
                   101962:   */
                   101963:   addrBrk = pLevel->addrBrk = pLevel->addrNxt = sqlite3VdbeMakeLabel(v);
                   101964:   addrCont = pLevel->addrCont = sqlite3VdbeMakeLabel(v);
                   101965: 
                   101966:   /* If this is the right table of a LEFT OUTER JOIN, allocate and
                   101967:   ** initialize a memory cell that records if this table matches any
                   101968:   ** row of the left table of the join.
                   101969:   */
                   101970:   if( pLevel->iFrom>0 && (pTabItem[0].jointype & JT_LEFT)!=0 ){
                   101971:     pLevel->iLeftJoin = ++pParse->nMem;
                   101972:     sqlite3VdbeAddOp2(v, OP_Integer, 0, pLevel->iLeftJoin);
                   101973:     VdbeComment((v, "init LEFT JOIN no-match flag"));
                   101974:   }
                   101975: 
                   101976: #ifndef SQLITE_OMIT_VIRTUALTABLE
                   101977:   if(  (pLevel->plan.wsFlags & WHERE_VIRTUALTABLE)!=0 ){
                   101978:     /* Case 0:  The table is a virtual-table.  Use the VFilter and VNext
                   101979:     **          to access the data.
                   101980:     */
                   101981:     int iReg;   /* P3 Value for OP_VFilter */
                   101982:     sqlite3_index_info *pVtabIdx = pLevel->plan.u.pVtabIdx;
                   101983:     int nConstraint = pVtabIdx->nConstraint;
                   101984:     struct sqlite3_index_constraint_usage *aUsage =
                   101985:                                                 pVtabIdx->aConstraintUsage;
                   101986:     const struct sqlite3_index_constraint *aConstraint =
                   101987:                                                 pVtabIdx->aConstraint;
                   101988: 
                   101989:     sqlite3ExprCachePush(pParse);
                   101990:     iReg = sqlite3GetTempRange(pParse, nConstraint+2);
                   101991:     for(j=1; j<=nConstraint; j++){
                   101992:       for(k=0; k<nConstraint; k++){
                   101993:         if( aUsage[k].argvIndex==j ){
                   101994:           int iTerm = aConstraint[k].iTermOffset;
                   101995:           sqlite3ExprCode(pParse, pWC->a[iTerm].pExpr->pRight, iReg+j+1);
                   101996:           break;
                   101997:         }
                   101998:       }
                   101999:       if( k==nConstraint ) break;
                   102000:     }
                   102001:     sqlite3VdbeAddOp2(v, OP_Integer, pVtabIdx->idxNum, iReg);
                   102002:     sqlite3VdbeAddOp2(v, OP_Integer, j-1, iReg+1);
                   102003:     sqlite3VdbeAddOp4(v, OP_VFilter, iCur, addrBrk, iReg, pVtabIdx->idxStr,
                   102004:                       pVtabIdx->needToFreeIdxStr ? P4_MPRINTF : P4_STATIC);
                   102005:     pVtabIdx->needToFreeIdxStr = 0;
                   102006:     for(j=0; j<nConstraint; j++){
                   102007:       if( aUsage[j].omit ){
                   102008:         int iTerm = aConstraint[j].iTermOffset;
                   102009:         disableTerm(pLevel, &pWC->a[iTerm]);
                   102010:       }
                   102011:     }
                   102012:     pLevel->op = OP_VNext;
                   102013:     pLevel->p1 = iCur;
                   102014:     pLevel->p2 = sqlite3VdbeCurrentAddr(v);
                   102015:     sqlite3ReleaseTempRange(pParse, iReg, nConstraint+2);
                   102016:     sqlite3ExprCachePop(pParse, 1);
                   102017:   }else
                   102018: #endif /* SQLITE_OMIT_VIRTUALTABLE */
                   102019: 
                   102020:   if( pLevel->plan.wsFlags & WHERE_ROWID_EQ ){
                   102021:     /* Case 1:  We can directly reference a single row using an
                   102022:     **          equality comparison against the ROWID field.  Or
                   102023:     **          we reference multiple rows using a "rowid IN (...)"
                   102024:     **          construct.
                   102025:     */
                   102026:     iReleaseReg = sqlite3GetTempReg(pParse);
                   102027:     pTerm = findTerm(pWC, iCur, -1, notReady, WO_EQ|WO_IN, 0);
                   102028:     assert( pTerm!=0 );
                   102029:     assert( pTerm->pExpr!=0 );
                   102030:     assert( pTerm->leftCursor==iCur );
                   102031:     assert( omitTable==0 );
                   102032:     testcase( pTerm->wtFlags & TERM_VIRTUAL ); /* EV: R-30575-11662 */
                   102033:     iRowidReg = codeEqualityTerm(pParse, pTerm, pLevel, iReleaseReg);
                   102034:     addrNxt = pLevel->addrNxt;
                   102035:     sqlite3VdbeAddOp2(v, OP_MustBeInt, iRowidReg, addrNxt);
                   102036:     sqlite3VdbeAddOp3(v, OP_NotExists, iCur, addrNxt, iRowidReg);
                   102037:     sqlite3ExprCacheStore(pParse, iCur, -1, iRowidReg);
                   102038:     VdbeComment((v, "pk"));
                   102039:     pLevel->op = OP_Noop;
                   102040:   }else if( pLevel->plan.wsFlags & WHERE_ROWID_RANGE ){
                   102041:     /* Case 2:  We have an inequality comparison against the ROWID field.
                   102042:     */
                   102043:     int testOp = OP_Noop;
                   102044:     int start;
                   102045:     int memEndValue = 0;
                   102046:     WhereTerm *pStart, *pEnd;
                   102047: 
                   102048:     assert( omitTable==0 );
                   102049:     pStart = findTerm(pWC, iCur, -1, notReady, WO_GT|WO_GE, 0);
                   102050:     pEnd = findTerm(pWC, iCur, -1, notReady, WO_LT|WO_LE, 0);
                   102051:     if( bRev ){
                   102052:       pTerm = pStart;
                   102053:       pStart = pEnd;
                   102054:       pEnd = pTerm;
                   102055:     }
                   102056:     if( pStart ){
                   102057:       Expr *pX;             /* The expression that defines the start bound */
                   102058:       int r1, rTemp;        /* Registers for holding the start boundary */
                   102059: 
                   102060:       /* The following constant maps TK_xx codes into corresponding 
                   102061:       ** seek opcodes.  It depends on a particular ordering of TK_xx
                   102062:       */
                   102063:       const u8 aMoveOp[] = {
                   102064:            /* TK_GT */  OP_SeekGt,
                   102065:            /* TK_LE */  OP_SeekLe,
                   102066:            /* TK_LT */  OP_SeekLt,
                   102067:            /* TK_GE */  OP_SeekGe
                   102068:       };
                   102069:       assert( TK_LE==TK_GT+1 );      /* Make sure the ordering.. */
                   102070:       assert( TK_LT==TK_GT+2 );      /*  ... of the TK_xx values... */
                   102071:       assert( TK_GE==TK_GT+3 );      /*  ... is correcct. */
                   102072: 
                   102073:       testcase( pStart->wtFlags & TERM_VIRTUAL ); /* EV: R-30575-11662 */
                   102074:       pX = pStart->pExpr;
                   102075:       assert( pX!=0 );
                   102076:       assert( pStart->leftCursor==iCur );
                   102077:       r1 = sqlite3ExprCodeTemp(pParse, pX->pRight, &rTemp);
                   102078:       sqlite3VdbeAddOp3(v, aMoveOp[pX->op-TK_GT], iCur, addrBrk, r1);
                   102079:       VdbeComment((v, "pk"));
                   102080:       sqlite3ExprCacheAffinityChange(pParse, r1, 1);
                   102081:       sqlite3ReleaseTempReg(pParse, rTemp);
                   102082:       disableTerm(pLevel, pStart);
                   102083:     }else{
                   102084:       sqlite3VdbeAddOp2(v, bRev ? OP_Last : OP_Rewind, iCur, addrBrk);
                   102085:     }
                   102086:     if( pEnd ){
                   102087:       Expr *pX;
                   102088:       pX = pEnd->pExpr;
                   102089:       assert( pX!=0 );
                   102090:       assert( pEnd->leftCursor==iCur );
                   102091:       testcase( pEnd->wtFlags & TERM_VIRTUAL ); /* EV: R-30575-11662 */
                   102092:       memEndValue = ++pParse->nMem;
                   102093:       sqlite3ExprCode(pParse, pX->pRight, memEndValue);
                   102094:       if( pX->op==TK_LT || pX->op==TK_GT ){
                   102095:         testOp = bRev ? OP_Le : OP_Ge;
                   102096:       }else{
                   102097:         testOp = bRev ? OP_Lt : OP_Gt;
                   102098:       }
                   102099:       disableTerm(pLevel, pEnd);
                   102100:     }
                   102101:     start = sqlite3VdbeCurrentAddr(v);
                   102102:     pLevel->op = bRev ? OP_Prev : OP_Next;
                   102103:     pLevel->p1 = iCur;
                   102104:     pLevel->p2 = start;
                   102105:     if( pStart==0 && pEnd==0 ){
                   102106:       pLevel->p5 = SQLITE_STMTSTATUS_FULLSCAN_STEP;
                   102107:     }else{
                   102108:       assert( pLevel->p5==0 );
                   102109:     }
                   102110:     if( testOp!=OP_Noop ){
                   102111:       iRowidReg = iReleaseReg = sqlite3GetTempReg(pParse);
                   102112:       sqlite3VdbeAddOp2(v, OP_Rowid, iCur, iRowidReg);
                   102113:       sqlite3ExprCacheStore(pParse, iCur, -1, iRowidReg);
                   102114:       sqlite3VdbeAddOp3(v, testOp, memEndValue, addrBrk, iRowidReg);
                   102115:       sqlite3VdbeChangeP5(v, SQLITE_AFF_NUMERIC | SQLITE_JUMPIFNULL);
                   102116:     }
                   102117:   }else if( pLevel->plan.wsFlags & (WHERE_COLUMN_RANGE|WHERE_COLUMN_EQ) ){
                   102118:     /* Case 3: A scan using an index.
                   102119:     **
                   102120:     **         The WHERE clause may contain zero or more equality 
                   102121:     **         terms ("==" or "IN" operators) that refer to the N
                   102122:     **         left-most columns of the index. It may also contain
                   102123:     **         inequality constraints (>, <, >= or <=) on the indexed
                   102124:     **         column that immediately follows the N equalities. Only 
                   102125:     **         the right-most column can be an inequality - the rest must
                   102126:     **         use the "==" and "IN" operators. For example, if the 
                   102127:     **         index is on (x,y,z), then the following clauses are all 
                   102128:     **         optimized:
                   102129:     **
                   102130:     **            x=5
                   102131:     **            x=5 AND y=10
                   102132:     **            x=5 AND y<10
                   102133:     **            x=5 AND y>5 AND y<10
                   102134:     **            x=5 AND y=5 AND z<=10
                   102135:     **
                   102136:     **         The z<10 term of the following cannot be used, only
                   102137:     **         the x=5 term:
                   102138:     **
                   102139:     **            x=5 AND z<10
                   102140:     **
                   102141:     **         N may be zero if there are inequality constraints.
                   102142:     **         If there are no inequality constraints, then N is at
                   102143:     **         least one.
                   102144:     **
                   102145:     **         This case is also used when there are no WHERE clause
                   102146:     **         constraints but an index is selected anyway, in order
                   102147:     **         to force the output order to conform to an ORDER BY.
                   102148:     */  
                   102149:     static const u8 aStartOp[] = {
                   102150:       0,
                   102151:       0,
                   102152:       OP_Rewind,           /* 2: (!start_constraints && startEq &&  !bRev) */
                   102153:       OP_Last,             /* 3: (!start_constraints && startEq &&   bRev) */
                   102154:       OP_SeekGt,           /* 4: (start_constraints  && !startEq && !bRev) */
                   102155:       OP_SeekLt,           /* 5: (start_constraints  && !startEq &&  bRev) */
                   102156:       OP_SeekGe,           /* 6: (start_constraints  &&  startEq && !bRev) */
                   102157:       OP_SeekLe            /* 7: (start_constraints  &&  startEq &&  bRev) */
                   102158:     };
                   102159:     static const u8 aEndOp[] = {
                   102160:       OP_Noop,             /* 0: (!end_constraints) */
                   102161:       OP_IdxGE,            /* 1: (end_constraints && !bRev) */
                   102162:       OP_IdxLT             /* 2: (end_constraints && bRev) */
                   102163:     };
                   102164:     int nEq = pLevel->plan.nEq;  /* Number of == or IN terms */
                   102165:     int isMinQuery = 0;          /* If this is an optimized SELECT min(x).. */
                   102166:     int regBase;                 /* Base register holding constraint values */
                   102167:     int r1;                      /* Temp register */
                   102168:     WhereTerm *pRangeStart = 0;  /* Inequality constraint at range start */
                   102169:     WhereTerm *pRangeEnd = 0;    /* Inequality constraint at range end */
                   102170:     int startEq;                 /* True if range start uses ==, >= or <= */
                   102171:     int endEq;                   /* True if range end uses ==, >= or <= */
                   102172:     int start_constraints;       /* Start of range is constrained */
                   102173:     int nConstraint;             /* Number of constraint terms */
                   102174:     Index *pIdx;                 /* The index we will be using */
                   102175:     int iIdxCur;                 /* The VDBE cursor for the index */
                   102176:     int nExtraReg = 0;           /* Number of extra registers needed */
                   102177:     int op;                      /* Instruction opcode */
                   102178:     char *zStartAff;             /* Affinity for start of range constraint */
                   102179:     char *zEndAff;               /* Affinity for end of range constraint */
                   102180: 
                   102181:     pIdx = pLevel->plan.u.pIdx;
                   102182:     iIdxCur = pLevel->iIdxCur;
                   102183:     k = pIdx->aiColumn[nEq];     /* Column for inequality constraints */
                   102184: 
                   102185:     /* If this loop satisfies a sort order (pOrderBy) request that 
                   102186:     ** was passed to this function to implement a "SELECT min(x) ..." 
                   102187:     ** query, then the caller will only allow the loop to run for
                   102188:     ** a single iteration. This means that the first row returned
                   102189:     ** should not have a NULL value stored in 'x'. If column 'x' is
                   102190:     ** the first one after the nEq equality constraints in the index,
                   102191:     ** this requires some special handling.
                   102192:     */
                   102193:     if( (wctrlFlags&WHERE_ORDERBY_MIN)!=0
                   102194:      && (pLevel->plan.wsFlags&WHERE_ORDERBY)
                   102195:      && (pIdx->nColumn>nEq)
                   102196:     ){
                   102197:       /* assert( pOrderBy->nExpr==1 ); */
                   102198:       /* assert( pOrderBy->a[0].pExpr->iColumn==pIdx->aiColumn[nEq] ); */
                   102199:       isMinQuery = 1;
                   102200:       nExtraReg = 1;
                   102201:     }
                   102202: 
                   102203:     /* Find any inequality constraint terms for the start and end 
                   102204:     ** of the range. 
                   102205:     */
                   102206:     if( pLevel->plan.wsFlags & WHERE_TOP_LIMIT ){
                   102207:       pRangeEnd = findTerm(pWC, iCur, k, notReady, (WO_LT|WO_LE), pIdx);
                   102208:       nExtraReg = 1;
                   102209:     }
                   102210:     if( pLevel->plan.wsFlags & WHERE_BTM_LIMIT ){
                   102211:       pRangeStart = findTerm(pWC, iCur, k, notReady, (WO_GT|WO_GE), pIdx);
                   102212:       nExtraReg = 1;
                   102213:     }
                   102214: 
                   102215:     /* Generate code to evaluate all constraint terms using == or IN
                   102216:     ** and store the values of those terms in an array of registers
                   102217:     ** starting at regBase.
                   102218:     */
                   102219:     regBase = codeAllEqualityTerms(
                   102220:         pParse, pLevel, pWC, notReady, nExtraReg, &zStartAff
                   102221:     );
                   102222:     zEndAff = sqlite3DbStrDup(pParse->db, zStartAff);
                   102223:     addrNxt = pLevel->addrNxt;
                   102224: 
                   102225:     /* If we are doing a reverse order scan on an ascending index, or
                   102226:     ** a forward order scan on a descending index, interchange the 
                   102227:     ** start and end terms (pRangeStart and pRangeEnd).
                   102228:     */
                   102229:     if( nEq<pIdx->nColumn && bRev==(pIdx->aSortOrder[nEq]==SQLITE_SO_ASC) ){
                   102230:       SWAP(WhereTerm *, pRangeEnd, pRangeStart);
                   102231:     }
                   102232: 
                   102233:     testcase( pRangeStart && pRangeStart->eOperator & WO_LE );
                   102234:     testcase( pRangeStart && pRangeStart->eOperator & WO_GE );
                   102235:     testcase( pRangeEnd && pRangeEnd->eOperator & WO_LE );
                   102236:     testcase( pRangeEnd && pRangeEnd->eOperator & WO_GE );
                   102237:     startEq = !pRangeStart || pRangeStart->eOperator & (WO_LE|WO_GE);
                   102238:     endEq =   !pRangeEnd || pRangeEnd->eOperator & (WO_LE|WO_GE);
                   102239:     start_constraints = pRangeStart || nEq>0;
                   102240: 
                   102241:     /* Seek the index cursor to the start of the range. */
                   102242:     nConstraint = nEq;
                   102243:     if( pRangeStart ){
                   102244:       Expr *pRight = pRangeStart->pExpr->pRight;
                   102245:       sqlite3ExprCode(pParse, pRight, regBase+nEq);
                   102246:       if( (pRangeStart->wtFlags & TERM_VNULL)==0 ){
                   102247:         sqlite3ExprCodeIsNullJump(v, pRight, regBase+nEq, addrNxt);
                   102248:       }
                   102249:       if( zStartAff ){
                   102250:         if( sqlite3CompareAffinity(pRight, zStartAff[nEq])==SQLITE_AFF_NONE){
                   102251:           /* Since the comparison is to be performed with no conversions
                   102252:           ** applied to the operands, set the affinity to apply to pRight to 
                   102253:           ** SQLITE_AFF_NONE.  */
                   102254:           zStartAff[nEq] = SQLITE_AFF_NONE;
                   102255:         }
                   102256:         if( sqlite3ExprNeedsNoAffinityChange(pRight, zStartAff[nEq]) ){
                   102257:           zStartAff[nEq] = SQLITE_AFF_NONE;
                   102258:         }
                   102259:       }  
                   102260:       nConstraint++;
                   102261:       testcase( pRangeStart->wtFlags & TERM_VIRTUAL ); /* EV: R-30575-11662 */
                   102262:     }else if( isMinQuery ){
                   102263:       sqlite3VdbeAddOp2(v, OP_Null, 0, regBase+nEq);
                   102264:       nConstraint++;
                   102265:       startEq = 0;
                   102266:       start_constraints = 1;
                   102267:     }
                   102268:     codeApplyAffinity(pParse, regBase, nConstraint, zStartAff);
                   102269:     op = aStartOp[(start_constraints<<2) + (startEq<<1) + bRev];
                   102270:     assert( op!=0 );
                   102271:     testcase( op==OP_Rewind );
                   102272:     testcase( op==OP_Last );
                   102273:     testcase( op==OP_SeekGt );
                   102274:     testcase( op==OP_SeekGe );
                   102275:     testcase( op==OP_SeekLe );
                   102276:     testcase( op==OP_SeekLt );
                   102277:     sqlite3VdbeAddOp4Int(v, op, iIdxCur, addrNxt, regBase, nConstraint);
                   102278: 
                   102279:     /* Load the value for the inequality constraint at the end of the
                   102280:     ** range (if any).
                   102281:     */
                   102282:     nConstraint = nEq;
                   102283:     if( pRangeEnd ){
                   102284:       Expr *pRight = pRangeEnd->pExpr->pRight;
                   102285:       sqlite3ExprCacheRemove(pParse, regBase+nEq, 1);
                   102286:       sqlite3ExprCode(pParse, pRight, regBase+nEq);
                   102287:       if( (pRangeEnd->wtFlags & TERM_VNULL)==0 ){
                   102288:         sqlite3ExprCodeIsNullJump(v, pRight, regBase+nEq, addrNxt);
                   102289:       }
                   102290:       if( zEndAff ){
                   102291:         if( sqlite3CompareAffinity(pRight, zEndAff[nEq])==SQLITE_AFF_NONE){
                   102292:           /* Since the comparison is to be performed with no conversions
                   102293:           ** applied to the operands, set the affinity to apply to pRight to 
                   102294:           ** SQLITE_AFF_NONE.  */
                   102295:           zEndAff[nEq] = SQLITE_AFF_NONE;
                   102296:         }
                   102297:         if( sqlite3ExprNeedsNoAffinityChange(pRight, zEndAff[nEq]) ){
                   102298:           zEndAff[nEq] = SQLITE_AFF_NONE;
                   102299:         }
                   102300:       }  
                   102301:       codeApplyAffinity(pParse, regBase, nEq+1, zEndAff);
                   102302:       nConstraint++;
                   102303:       testcase( pRangeEnd->wtFlags & TERM_VIRTUAL ); /* EV: R-30575-11662 */
                   102304:     }
                   102305:     sqlite3DbFree(pParse->db, zStartAff);
                   102306:     sqlite3DbFree(pParse->db, zEndAff);
                   102307: 
                   102308:     /* Top of the loop body */
                   102309:     pLevel->p2 = sqlite3VdbeCurrentAddr(v);
                   102310: 
                   102311:     /* Check if the index cursor is past the end of the range. */
                   102312:     op = aEndOp[(pRangeEnd || nEq) * (1 + bRev)];
                   102313:     testcase( op==OP_Noop );
                   102314:     testcase( op==OP_IdxGE );
                   102315:     testcase( op==OP_IdxLT );
                   102316:     if( op!=OP_Noop ){
                   102317:       sqlite3VdbeAddOp4Int(v, op, iIdxCur, addrNxt, regBase, nConstraint);
                   102318:       sqlite3VdbeChangeP5(v, endEq!=bRev ?1:0);
                   102319:     }
                   102320: 
                   102321:     /* If there are inequality constraints, check that the value
                   102322:     ** of the table column that the inequality contrains is not NULL.
                   102323:     ** If it is, jump to the next iteration of the loop.
                   102324:     */
                   102325:     r1 = sqlite3GetTempReg(pParse);
                   102326:     testcase( pLevel->plan.wsFlags & WHERE_BTM_LIMIT );
                   102327:     testcase( pLevel->plan.wsFlags & WHERE_TOP_LIMIT );
                   102328:     if( (pLevel->plan.wsFlags & (WHERE_BTM_LIMIT|WHERE_TOP_LIMIT))!=0 ){
                   102329:       sqlite3VdbeAddOp3(v, OP_Column, iIdxCur, nEq, r1);
                   102330:       sqlite3VdbeAddOp2(v, OP_IsNull, r1, addrCont);
                   102331:     }
                   102332:     sqlite3ReleaseTempReg(pParse, r1);
                   102333: 
                   102334:     /* Seek the table cursor, if required */
                   102335:     disableTerm(pLevel, pRangeStart);
                   102336:     disableTerm(pLevel, pRangeEnd);
                   102337:     if( !omitTable ){
                   102338:       iRowidReg = iReleaseReg = sqlite3GetTempReg(pParse);
                   102339:       sqlite3VdbeAddOp2(v, OP_IdxRowid, iIdxCur, iRowidReg);
                   102340:       sqlite3ExprCacheStore(pParse, iCur, -1, iRowidReg);
                   102341:       sqlite3VdbeAddOp2(v, OP_Seek, iCur, iRowidReg);  /* Deferred seek */
                   102342:     }
                   102343: 
                   102344:     /* Record the instruction used to terminate the loop. Disable 
                   102345:     ** WHERE clause terms made redundant by the index range scan.
                   102346:     */
                   102347:     if( pLevel->plan.wsFlags & WHERE_UNIQUE ){
                   102348:       pLevel->op = OP_Noop;
                   102349:     }else if( bRev ){
                   102350:       pLevel->op = OP_Prev;
                   102351:     }else{
                   102352:       pLevel->op = OP_Next;
                   102353:     }
                   102354:     pLevel->p1 = iIdxCur;
                   102355:   }else
                   102356: 
                   102357: #ifndef SQLITE_OMIT_OR_OPTIMIZATION
                   102358:   if( pLevel->plan.wsFlags & WHERE_MULTI_OR ){
                   102359:     /* Case 4:  Two or more separately indexed terms connected by OR
                   102360:     **
                   102361:     ** Example:
                   102362:     **
                   102363:     **   CREATE TABLE t1(a,b,c,d);
                   102364:     **   CREATE INDEX i1 ON t1(a);
                   102365:     **   CREATE INDEX i2 ON t1(b);
                   102366:     **   CREATE INDEX i3 ON t1(c);
                   102367:     **
                   102368:     **   SELECT * FROM t1 WHERE a=5 OR b=7 OR (c=11 AND d=13)
                   102369:     **
                   102370:     ** In the example, there are three indexed terms connected by OR.
                   102371:     ** The top of the loop looks like this:
                   102372:     **
                   102373:     **          Null       1                # Zero the rowset in reg 1
                   102374:     **
                   102375:     ** Then, for each indexed term, the following. The arguments to
                   102376:     ** RowSetTest are such that the rowid of the current row is inserted
                   102377:     ** into the RowSet. If it is already present, control skips the
                   102378:     ** Gosub opcode and jumps straight to the code generated by WhereEnd().
                   102379:     **
                   102380:     **        sqlite3WhereBegin(<term>)
                   102381:     **          RowSetTest                  # Insert rowid into rowset
                   102382:     **          Gosub      2 A
                   102383:     **        sqlite3WhereEnd()
                   102384:     **
                   102385:     ** Following the above, code to terminate the loop. Label A, the target
                   102386:     ** of the Gosub above, jumps to the instruction right after the Goto.
                   102387:     **
                   102388:     **          Null       1                # Zero the rowset in reg 1
                   102389:     **          Goto       B                # The loop is finished.
                   102390:     **
                   102391:     **       A: <loop body>                 # Return data, whatever.
                   102392:     **
                   102393:     **          Return     2                # Jump back to the Gosub
                   102394:     **
                   102395:     **       B: <after the loop>
                   102396:     **
                   102397:     */
                   102398:     WhereClause *pOrWc;    /* The OR-clause broken out into subterms */
                   102399:     SrcList *pOrTab;       /* Shortened table list or OR-clause generation */
                   102400: 
                   102401:     int regReturn = ++pParse->nMem;           /* Register used with OP_Gosub */
                   102402:     int regRowset = 0;                        /* Register for RowSet object */
                   102403:     int regRowid = 0;                         /* Register holding rowid */
                   102404:     int iLoopBody = sqlite3VdbeMakeLabel(v);  /* Start of loop body */
                   102405:     int iRetInit;                             /* Address of regReturn init */
                   102406:     int untestedTerms = 0;             /* Some terms not completely tested */
                   102407:     int ii;
                   102408:    
                   102409:     pTerm = pLevel->plan.u.pTerm;
                   102410:     assert( pTerm!=0 );
                   102411:     assert( pTerm->eOperator==WO_OR );
                   102412:     assert( (pTerm->wtFlags & TERM_ORINFO)!=0 );
                   102413:     pOrWc = &pTerm->u.pOrInfo->wc;
                   102414:     pLevel->op = OP_Return;
                   102415:     pLevel->p1 = regReturn;
                   102416: 
                   102417:     /* Set up a new SrcList ni pOrTab containing the table being scanned
                   102418:     ** by this loop in the a[0] slot and all notReady tables in a[1..] slots.
                   102419:     ** This becomes the SrcList in the recursive call to sqlite3WhereBegin().
                   102420:     */
                   102421:     if( pWInfo->nLevel>1 ){
                   102422:       int nNotReady;                 /* The number of notReady tables */
                   102423:       struct SrcList_item *origSrc;     /* Original list of tables */
                   102424:       nNotReady = pWInfo->nLevel - iLevel - 1;
                   102425:       pOrTab = sqlite3StackAllocRaw(pParse->db,
                   102426:                             sizeof(*pOrTab)+ nNotReady*sizeof(pOrTab->a[0]));
                   102427:       if( pOrTab==0 ) return notReady;
                   102428:       pOrTab->nAlloc = (i16)(nNotReady + 1);
                   102429:       pOrTab->nSrc = pOrTab->nAlloc;
                   102430:       memcpy(pOrTab->a, pTabItem, sizeof(*pTabItem));
                   102431:       origSrc = pWInfo->pTabList->a;
                   102432:       for(k=1; k<=nNotReady; k++){
                   102433:         memcpy(&pOrTab->a[k], &origSrc[pLevel[k].iFrom], sizeof(pOrTab->a[k]));
                   102434:       }
                   102435:     }else{
                   102436:       pOrTab = pWInfo->pTabList;
                   102437:     }
                   102438: 
                   102439:     /* Initialize the rowset register to contain NULL. An SQL NULL is 
                   102440:     ** equivalent to an empty rowset.
                   102441:     **
                   102442:     ** Also initialize regReturn to contain the address of the instruction 
                   102443:     ** immediately following the OP_Return at the bottom of the loop. This
                   102444:     ** is required in a few obscure LEFT JOIN cases where control jumps
                   102445:     ** over the top of the loop into the body of it. In this case the 
                   102446:     ** correct response for the end-of-loop code (the OP_Return) is to 
                   102447:     ** fall through to the next instruction, just as an OP_Next does if
                   102448:     ** called on an uninitialized cursor.
                   102449:     */
                   102450:     if( (wctrlFlags & WHERE_DUPLICATES_OK)==0 ){
                   102451:       regRowset = ++pParse->nMem;
                   102452:       regRowid = ++pParse->nMem;
                   102453:       sqlite3VdbeAddOp2(v, OP_Null, 0, regRowset);
                   102454:     }
                   102455:     iRetInit = sqlite3VdbeAddOp2(v, OP_Integer, 0, regReturn);
                   102456: 
                   102457:     for(ii=0; ii<pOrWc->nTerm; ii++){
                   102458:       WhereTerm *pOrTerm = &pOrWc->a[ii];
                   102459:       if( pOrTerm->leftCursor==iCur || pOrTerm->eOperator==WO_AND ){
                   102460:         WhereInfo *pSubWInfo;          /* Info for single OR-term scan */
                   102461:         /* Loop through table entries that match term pOrTerm. */
                   102462:         pSubWInfo = sqlite3WhereBegin(pParse, pOrTab, pOrTerm->pExpr, 0,
                   102463:                         WHERE_OMIT_OPEN | WHERE_OMIT_CLOSE |
                   102464:                         WHERE_FORCE_TABLE | WHERE_ONETABLE_ONLY);
                   102465:         if( pSubWInfo ){
                   102466:           explainOneScan(
                   102467:               pParse, pOrTab, &pSubWInfo->a[0], iLevel, pLevel->iFrom, 0
                   102468:           );
                   102469:           if( (wctrlFlags & WHERE_DUPLICATES_OK)==0 ){
                   102470:             int iSet = ((ii==pOrWc->nTerm-1)?-1:ii);
                   102471:             int r;
                   102472:             r = sqlite3ExprCodeGetColumn(pParse, pTabItem->pTab, -1, iCur, 
                   102473:                                          regRowid);
                   102474:             sqlite3VdbeAddOp4Int(v, OP_RowSetTest, regRowset,
                   102475:                                  sqlite3VdbeCurrentAddr(v)+2, r, iSet);
                   102476:           }
                   102477:           sqlite3VdbeAddOp2(v, OP_Gosub, regReturn, iLoopBody);
                   102478: 
                   102479:           /* The pSubWInfo->untestedTerms flag means that this OR term
                   102480:           ** contained one or more AND term from a notReady table.  The
                   102481:           ** terms from the notReady table could not be tested and will
                   102482:           ** need to be tested later.
                   102483:           */
                   102484:           if( pSubWInfo->untestedTerms ) untestedTerms = 1;
                   102485: 
                   102486:           /* Finish the loop through table entries that match term pOrTerm. */
                   102487:           sqlite3WhereEnd(pSubWInfo);
                   102488:         }
                   102489:       }
                   102490:     }
                   102491:     sqlite3VdbeChangeP1(v, iRetInit, sqlite3VdbeCurrentAddr(v));
                   102492:     sqlite3VdbeAddOp2(v, OP_Goto, 0, pLevel->addrBrk);
                   102493:     sqlite3VdbeResolveLabel(v, iLoopBody);
                   102494: 
                   102495:     if( pWInfo->nLevel>1 ) sqlite3StackFree(pParse->db, pOrTab);
                   102496:     if( !untestedTerms ) disableTerm(pLevel, pTerm);
                   102497:   }else
                   102498: #endif /* SQLITE_OMIT_OR_OPTIMIZATION */
                   102499: 
                   102500:   {
                   102501:     /* Case 5:  There is no usable index.  We must do a complete
                   102502:     **          scan of the entire table.
                   102503:     */
                   102504:     static const u8 aStep[] = { OP_Next, OP_Prev };
                   102505:     static const u8 aStart[] = { OP_Rewind, OP_Last };
                   102506:     assert( bRev==0 || bRev==1 );
                   102507:     assert( omitTable==0 );
                   102508:     pLevel->op = aStep[bRev];
                   102509:     pLevel->p1 = iCur;
                   102510:     pLevel->p2 = 1 + sqlite3VdbeAddOp2(v, aStart[bRev], iCur, addrBrk);
                   102511:     pLevel->p5 = SQLITE_STMTSTATUS_FULLSCAN_STEP;
                   102512:   }
                   102513:   notReady &= ~getMask(pWC->pMaskSet, iCur);
                   102514: 
                   102515:   /* Insert code to test every subexpression that can be completely
                   102516:   ** computed using the current set of tables.
                   102517:   **
                   102518:   ** IMPLEMENTATION-OF: R-49525-50935 Terms that cannot be satisfied through
                   102519:   ** the use of indices become tests that are evaluated against each row of
                   102520:   ** the relevant input tables.
                   102521:   */
                   102522:   for(pTerm=pWC->a, j=pWC->nTerm; j>0; j--, pTerm++){
                   102523:     Expr *pE;
                   102524:     testcase( pTerm->wtFlags & TERM_VIRTUAL ); /* IMP: R-30575-11662 */
                   102525:     testcase( pTerm->wtFlags & TERM_CODED );
                   102526:     if( pTerm->wtFlags & (TERM_VIRTUAL|TERM_CODED) ) continue;
                   102527:     if( (pTerm->prereqAll & notReady)!=0 ){
                   102528:       testcase( pWInfo->untestedTerms==0
                   102529:                && (pWInfo->wctrlFlags & WHERE_ONETABLE_ONLY)!=0 );
                   102530:       pWInfo->untestedTerms = 1;
                   102531:       continue;
                   102532:     }
                   102533:     pE = pTerm->pExpr;
                   102534:     assert( pE!=0 );
                   102535:     if( pLevel->iLeftJoin && !ExprHasProperty(pE, EP_FromJoin) ){
                   102536:       continue;
                   102537:     }
                   102538:     sqlite3ExprIfFalse(pParse, pE, addrCont, SQLITE_JUMPIFNULL);
                   102539:     pTerm->wtFlags |= TERM_CODED;
                   102540:   }
                   102541: 
                   102542:   /* For a LEFT OUTER JOIN, generate code that will record the fact that
                   102543:   ** at least one row of the right table has matched the left table.  
                   102544:   */
                   102545:   if( pLevel->iLeftJoin ){
                   102546:     pLevel->addrFirst = sqlite3VdbeCurrentAddr(v);
                   102547:     sqlite3VdbeAddOp2(v, OP_Integer, 1, pLevel->iLeftJoin);
                   102548:     VdbeComment((v, "record LEFT JOIN hit"));
                   102549:     sqlite3ExprCacheClear(pParse);
                   102550:     for(pTerm=pWC->a, j=0; j<pWC->nTerm; j++, pTerm++){
                   102551:       testcase( pTerm->wtFlags & TERM_VIRTUAL );  /* IMP: R-30575-11662 */
                   102552:       testcase( pTerm->wtFlags & TERM_CODED );
                   102553:       if( pTerm->wtFlags & (TERM_VIRTUAL|TERM_CODED) ) continue;
                   102554:       if( (pTerm->prereqAll & notReady)!=0 ){
                   102555:         assert( pWInfo->untestedTerms );
                   102556:         continue;
                   102557:       }
                   102558:       assert( pTerm->pExpr );
                   102559:       sqlite3ExprIfFalse(pParse, pTerm->pExpr, addrCont, SQLITE_JUMPIFNULL);
                   102560:       pTerm->wtFlags |= TERM_CODED;
                   102561:     }
                   102562:   }
                   102563:   sqlite3ReleaseTempReg(pParse, iReleaseReg);
                   102564: 
                   102565:   return notReady;
                   102566: }
                   102567: 
                   102568: #if defined(SQLITE_TEST)
                   102569: /*
                   102570: ** The following variable holds a text description of query plan generated
                   102571: ** by the most recent call to sqlite3WhereBegin().  Each call to WhereBegin
                   102572: ** overwrites the previous.  This information is used for testing and
                   102573: ** analysis only.
                   102574: */
                   102575: SQLITE_API char sqlite3_query_plan[BMS*2*40];  /* Text of the join */
                   102576: static int nQPlan = 0;              /* Next free slow in _query_plan[] */
                   102577: 
                   102578: #endif /* SQLITE_TEST */
                   102579: 
                   102580: 
                   102581: /*
                   102582: ** Free a WhereInfo structure
                   102583: */
                   102584: static void whereInfoFree(sqlite3 *db, WhereInfo *pWInfo){
                   102585:   if( ALWAYS(pWInfo) ){
                   102586:     int i;
                   102587:     for(i=0; i<pWInfo->nLevel; i++){
                   102588:       sqlite3_index_info *pInfo = pWInfo->a[i].pIdxInfo;
                   102589:       if( pInfo ){
                   102590:         /* assert( pInfo->needToFreeIdxStr==0 || db->mallocFailed ); */
                   102591:         if( pInfo->needToFreeIdxStr ){
                   102592:           sqlite3_free(pInfo->idxStr);
                   102593:         }
                   102594:         sqlite3DbFree(db, pInfo);
                   102595:       }
                   102596:       if( pWInfo->a[i].plan.wsFlags & WHERE_TEMP_INDEX ){
                   102597:         Index *pIdx = pWInfo->a[i].plan.u.pIdx;
                   102598:         if( pIdx ){
                   102599:           sqlite3DbFree(db, pIdx->zColAff);
                   102600:           sqlite3DbFree(db, pIdx);
                   102601:         }
                   102602:       }
                   102603:     }
                   102604:     whereClauseClear(pWInfo->pWC);
                   102605:     sqlite3DbFree(db, pWInfo);
                   102606:   }
                   102607: }
                   102608: 
                   102609: 
                   102610: /*
                   102611: ** Generate the beginning of the loop used for WHERE clause processing.
                   102612: ** The return value is a pointer to an opaque structure that contains
                   102613: ** information needed to terminate the loop.  Later, the calling routine
                   102614: ** should invoke sqlite3WhereEnd() with the return value of this function
                   102615: ** in order to complete the WHERE clause processing.
                   102616: **
                   102617: ** If an error occurs, this routine returns NULL.
                   102618: **
                   102619: ** The basic idea is to do a nested loop, one loop for each table in
                   102620: ** the FROM clause of a select.  (INSERT and UPDATE statements are the
                   102621: ** same as a SELECT with only a single table in the FROM clause.)  For
                   102622: ** example, if the SQL is this:
                   102623: **
                   102624: **       SELECT * FROM t1, t2, t3 WHERE ...;
                   102625: **
                   102626: ** Then the code generated is conceptually like the following:
                   102627: **
                   102628: **      foreach row1 in t1 do       \    Code generated
                   102629: **        foreach row2 in t2 do      |-- by sqlite3WhereBegin()
                   102630: **          foreach row3 in t3 do   /
                   102631: **            ...
                   102632: **          end                     \    Code generated
                   102633: **        end                        |-- by sqlite3WhereEnd()
                   102634: **      end                         /
                   102635: **
                   102636: ** Note that the loops might not be nested in the order in which they
                   102637: ** appear in the FROM clause if a different order is better able to make
                   102638: ** use of indices.  Note also that when the IN operator appears in
                   102639: ** the WHERE clause, it might result in additional nested loops for
                   102640: ** scanning through all values on the right-hand side of the IN.
                   102641: **
                   102642: ** There are Btree cursors associated with each table.  t1 uses cursor
                   102643: ** number pTabList->a[0].iCursor.  t2 uses the cursor pTabList->a[1].iCursor.
                   102644: ** And so forth.  This routine generates code to open those VDBE cursors
                   102645: ** and sqlite3WhereEnd() generates the code to close them.
                   102646: **
                   102647: ** The code that sqlite3WhereBegin() generates leaves the cursors named
                   102648: ** in pTabList pointing at their appropriate entries.  The [...] code
                   102649: ** can use OP_Column and OP_Rowid opcodes on these cursors to extract
                   102650: ** data from the various tables of the loop.
                   102651: **
                   102652: ** If the WHERE clause is empty, the foreach loops must each scan their
                   102653: ** entire tables.  Thus a three-way join is an O(N^3) operation.  But if
                   102654: ** the tables have indices and there are terms in the WHERE clause that
                   102655: ** refer to those indices, a complete table scan can be avoided and the
                   102656: ** code will run much faster.  Most of the work of this routine is checking
                   102657: ** to see if there are indices that can be used to speed up the loop.
                   102658: **
                   102659: ** Terms of the WHERE clause are also used to limit which rows actually
                   102660: ** make it to the "..." in the middle of the loop.  After each "foreach",
                   102661: ** terms of the WHERE clause that use only terms in that loop and outer
                   102662: ** loops are evaluated and if false a jump is made around all subsequent
                   102663: ** inner loops (or around the "..." if the test occurs within the inner-
                   102664: ** most loop)
                   102665: **
                   102666: ** OUTER JOINS
                   102667: **
                   102668: ** An outer join of tables t1 and t2 is conceptally coded as follows:
                   102669: **
                   102670: **    foreach row1 in t1 do
                   102671: **      flag = 0
                   102672: **      foreach row2 in t2 do
                   102673: **        start:
                   102674: **          ...
                   102675: **          flag = 1
                   102676: **      end
                   102677: **      if flag==0 then
                   102678: **        move the row2 cursor to a null row
                   102679: **        goto start
                   102680: **      fi
                   102681: **    end
                   102682: **
                   102683: ** ORDER BY CLAUSE PROCESSING
                   102684: **
                   102685: ** *ppOrderBy is a pointer to the ORDER BY clause of a SELECT statement,
                   102686: ** if there is one.  If there is no ORDER BY clause or if this routine
                   102687: ** is called from an UPDATE or DELETE statement, then ppOrderBy is NULL.
                   102688: **
                   102689: ** If an index can be used so that the natural output order of the table
                   102690: ** scan is correct for the ORDER BY clause, then that index is used and
                   102691: ** *ppOrderBy is set to NULL.  This is an optimization that prevents an
                   102692: ** unnecessary sort of the result set if an index appropriate for the
                   102693: ** ORDER BY clause already exists.
                   102694: **
                   102695: ** If the where clause loops cannot be arranged to provide the correct
                   102696: ** output order, then the *ppOrderBy is unchanged.
                   102697: */
                   102698: SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin(
                   102699:   Parse *pParse,        /* The parser context */
                   102700:   SrcList *pTabList,    /* A list of all tables to be scanned */
                   102701:   Expr *pWhere,         /* The WHERE clause */
                   102702:   ExprList **ppOrderBy, /* An ORDER BY clause, or NULL */
                   102703:   u16 wctrlFlags        /* One of the WHERE_* flags defined in sqliteInt.h */
                   102704: ){
                   102705:   int i;                     /* Loop counter */
                   102706:   int nByteWInfo;            /* Num. bytes allocated for WhereInfo struct */
                   102707:   int nTabList;              /* Number of elements in pTabList */
                   102708:   WhereInfo *pWInfo;         /* Will become the return value of this function */
                   102709:   Vdbe *v = pParse->pVdbe;   /* The virtual database engine */
                   102710:   Bitmask notReady;          /* Cursors that are not yet positioned */
                   102711:   WhereMaskSet *pMaskSet;    /* The expression mask set */
                   102712:   WhereClause *pWC;               /* Decomposition of the WHERE clause */
                   102713:   struct SrcList_item *pTabItem;  /* A single entry from pTabList */
                   102714:   WhereLevel *pLevel;             /* A single level in the pWInfo list */
                   102715:   int iFrom;                      /* First unused FROM clause element */
                   102716:   int andFlags;              /* AND-ed combination of all pWC->a[].wtFlags */
                   102717:   sqlite3 *db;               /* Database connection */
                   102718: 
                   102719:   /* The number of tables in the FROM clause is limited by the number of
                   102720:   ** bits in a Bitmask 
                   102721:   */
                   102722:   testcase( pTabList->nSrc==BMS );
                   102723:   if( pTabList->nSrc>BMS ){
                   102724:     sqlite3ErrorMsg(pParse, "at most %d tables in a join", BMS);
                   102725:     return 0;
                   102726:   }
                   102727: 
                   102728:   /* This function normally generates a nested loop for all tables in 
                   102729:   ** pTabList.  But if the WHERE_ONETABLE_ONLY flag is set, then we should
                   102730:   ** only generate code for the first table in pTabList and assume that
                   102731:   ** any cursors associated with subsequent tables are uninitialized.
                   102732:   */
                   102733:   nTabList = (wctrlFlags & WHERE_ONETABLE_ONLY) ? 1 : pTabList->nSrc;
                   102734: 
                   102735:   /* Allocate and initialize the WhereInfo structure that will become the
                   102736:   ** return value. A single allocation is used to store the WhereInfo
                   102737:   ** struct, the contents of WhereInfo.a[], the WhereClause structure
                   102738:   ** and the WhereMaskSet structure. Since WhereClause contains an 8-byte
                   102739:   ** field (type Bitmask) it must be aligned on an 8-byte boundary on
                   102740:   ** some architectures. Hence the ROUND8() below.
                   102741:   */
                   102742:   db = pParse->db;
                   102743:   nByteWInfo = ROUND8(sizeof(WhereInfo)+(nTabList-1)*sizeof(WhereLevel));
                   102744:   pWInfo = sqlite3DbMallocZero(db, 
                   102745:       nByteWInfo + 
                   102746:       sizeof(WhereClause) +
                   102747:       sizeof(WhereMaskSet)
                   102748:   );
                   102749:   if( db->mallocFailed ){
                   102750:     sqlite3DbFree(db, pWInfo);
                   102751:     pWInfo = 0;
                   102752:     goto whereBeginError;
                   102753:   }
                   102754:   pWInfo->nLevel = nTabList;
                   102755:   pWInfo->pParse = pParse;
                   102756:   pWInfo->pTabList = pTabList;
                   102757:   pWInfo->iBreak = sqlite3VdbeMakeLabel(v);
                   102758:   pWInfo->pWC = pWC = (WhereClause *)&((u8 *)pWInfo)[nByteWInfo];
                   102759:   pWInfo->wctrlFlags = wctrlFlags;
                   102760:   pWInfo->savedNQueryLoop = pParse->nQueryLoop;
                   102761:   pMaskSet = (WhereMaskSet*)&pWC[1];
                   102762: 
                   102763:   /* Split the WHERE clause into separate subexpressions where each
                   102764:   ** subexpression is separated by an AND operator.
                   102765:   */
                   102766:   initMaskSet(pMaskSet);
                   102767:   whereClauseInit(pWC, pParse, pMaskSet);
                   102768:   sqlite3ExprCodeConstants(pParse, pWhere);
                   102769:   whereSplit(pWC, pWhere, TK_AND);   /* IMP: R-15842-53296 */
                   102770:     
                   102771:   /* Special case: a WHERE clause that is constant.  Evaluate the
                   102772:   ** expression and either jump over all of the code or fall thru.
                   102773:   */
                   102774:   if( pWhere && (nTabList==0 || sqlite3ExprIsConstantNotJoin(pWhere)) ){
                   102775:     sqlite3ExprIfFalse(pParse, pWhere, pWInfo->iBreak, SQLITE_JUMPIFNULL);
                   102776:     pWhere = 0;
                   102777:   }
                   102778: 
                   102779:   /* Assign a bit from the bitmask to every term in the FROM clause.
                   102780:   **
                   102781:   ** When assigning bitmask values to FROM clause cursors, it must be
                   102782:   ** the case that if X is the bitmask for the N-th FROM clause term then
                   102783:   ** the bitmask for all FROM clause terms to the left of the N-th term
                   102784:   ** is (X-1).   An expression from the ON clause of a LEFT JOIN can use
                   102785:   ** its Expr.iRightJoinTable value to find the bitmask of the right table
                   102786:   ** of the join.  Subtracting one from the right table bitmask gives a
                   102787:   ** bitmask for all tables to the left of the join.  Knowing the bitmask
                   102788:   ** for all tables to the left of a left join is important.  Ticket #3015.
                   102789:   **
                   102790:   ** Configure the WhereClause.vmask variable so that bits that correspond
                   102791:   ** to virtual table cursors are set. This is used to selectively disable 
                   102792:   ** the OR-to-IN transformation in exprAnalyzeOrTerm(). It is not helpful 
                   102793:   ** with virtual tables.
                   102794:   **
                   102795:   ** Note that bitmasks are created for all pTabList->nSrc tables in
                   102796:   ** pTabList, not just the first nTabList tables.  nTabList is normally
                   102797:   ** equal to pTabList->nSrc but might be shortened to 1 if the
                   102798:   ** WHERE_ONETABLE_ONLY flag is set.
                   102799:   */
                   102800:   assert( pWC->vmask==0 && pMaskSet->n==0 );
                   102801:   for(i=0; i<pTabList->nSrc; i++){
                   102802:     createMask(pMaskSet, pTabList->a[i].iCursor);
                   102803: #ifndef SQLITE_OMIT_VIRTUALTABLE
                   102804:     if( ALWAYS(pTabList->a[i].pTab) && IsVirtual(pTabList->a[i].pTab) ){
                   102805:       pWC->vmask |= ((Bitmask)1 << i);
                   102806:     }
                   102807: #endif
                   102808:   }
                   102809: #ifndef NDEBUG
                   102810:   {
                   102811:     Bitmask toTheLeft = 0;
                   102812:     for(i=0; i<pTabList->nSrc; i++){
                   102813:       Bitmask m = getMask(pMaskSet, pTabList->a[i].iCursor);
                   102814:       assert( (m-1)==toTheLeft );
                   102815:       toTheLeft |= m;
                   102816:     }
                   102817:   }
                   102818: #endif
                   102819: 
                   102820:   /* Analyze all of the subexpressions.  Note that exprAnalyze() might
                   102821:   ** add new virtual terms onto the end of the WHERE clause.  We do not
                   102822:   ** want to analyze these virtual terms, so start analyzing at the end
                   102823:   ** and work forward so that the added virtual terms are never processed.
                   102824:   */
                   102825:   exprAnalyzeAll(pTabList, pWC);
                   102826:   if( db->mallocFailed ){
                   102827:     goto whereBeginError;
                   102828:   }
                   102829: 
                   102830:   /* Chose the best index to use for each table in the FROM clause.
                   102831:   **
                   102832:   ** This loop fills in the following fields:
                   102833:   **
                   102834:   **   pWInfo->a[].pIdx      The index to use for this level of the loop.
                   102835:   **   pWInfo->a[].wsFlags   WHERE_xxx flags associated with pIdx
                   102836:   **   pWInfo->a[].nEq       The number of == and IN constraints
                   102837:   **   pWInfo->a[].iFrom     Which term of the FROM clause is being coded
                   102838:   **   pWInfo->a[].iTabCur   The VDBE cursor for the database table
                   102839:   **   pWInfo->a[].iIdxCur   The VDBE cursor for the index
                   102840:   **   pWInfo->a[].pTerm     When wsFlags==WO_OR, the OR-clause term
                   102841:   **
                   102842:   ** This loop also figures out the nesting order of tables in the FROM
                   102843:   ** clause.
                   102844:   */
                   102845:   notReady = ~(Bitmask)0;
                   102846:   andFlags = ~0;
                   102847:   WHERETRACE(("*** Optimizer Start ***\n"));
                   102848:   for(i=iFrom=0, pLevel=pWInfo->a; i<nTabList; i++, pLevel++){
                   102849:     WhereCost bestPlan;         /* Most efficient plan seen so far */
                   102850:     Index *pIdx;                /* Index for FROM table at pTabItem */
                   102851:     int j;                      /* For looping over FROM tables */
                   102852:     int bestJ = -1;             /* The value of j */
                   102853:     Bitmask m;                  /* Bitmask value for j or bestJ */
                   102854:     int isOptimal;              /* Iterator for optimal/non-optimal search */
                   102855:     int nUnconstrained;         /* Number tables without INDEXED BY */
                   102856:     Bitmask notIndexed;         /* Mask of tables that cannot use an index */
                   102857: 
                   102858:     memset(&bestPlan, 0, sizeof(bestPlan));
                   102859:     bestPlan.rCost = SQLITE_BIG_DBL;
                   102860:     WHERETRACE(("*** Begin search for loop %d ***\n", i));
                   102861: 
                   102862:     /* Loop through the remaining entries in the FROM clause to find the
                   102863:     ** next nested loop. The loop tests all FROM clause entries
                   102864:     ** either once or twice. 
                   102865:     **
                   102866:     ** The first test is always performed if there are two or more entries
                   102867:     ** remaining and never performed if there is only one FROM clause entry
                   102868:     ** to choose from.  The first test looks for an "optimal" scan.  In
                   102869:     ** this context an optimal scan is one that uses the same strategy
                   102870:     ** for the given FROM clause entry as would be selected if the entry
                   102871:     ** were used as the innermost nested loop.  In other words, a table
                   102872:     ** is chosen such that the cost of running that table cannot be reduced
                   102873:     ** by waiting for other tables to run first.  This "optimal" test works
                   102874:     ** by first assuming that the FROM clause is on the inner loop and finding
                   102875:     ** its query plan, then checking to see if that query plan uses any
                   102876:     ** other FROM clause terms that are notReady.  If no notReady terms are
                   102877:     ** used then the "optimal" query plan works.
                   102878:     **
                   102879:     ** Note that the WhereCost.nRow parameter for an optimal scan might
                   102880:     ** not be as small as it would be if the table really were the innermost
                   102881:     ** join.  The nRow value can be reduced by WHERE clause constraints
                   102882:     ** that do not use indices.  But this nRow reduction only happens if the
                   102883:     ** table really is the innermost join.  
                   102884:     **
                   102885:     ** The second loop iteration is only performed if no optimal scan
                   102886:     ** strategies were found by the first iteration. This second iteration
                   102887:     ** is used to search for the lowest cost scan overall.
                   102888:     **
                   102889:     ** Previous versions of SQLite performed only the second iteration -
                   102890:     ** the next outermost loop was always that with the lowest overall
                   102891:     ** cost. However, this meant that SQLite could select the wrong plan
                   102892:     ** for scripts such as the following:
                   102893:     **   
                   102894:     **   CREATE TABLE t1(a, b); 
                   102895:     **   CREATE TABLE t2(c, d);
                   102896:     **   SELECT * FROM t2, t1 WHERE t2.rowid = t1.a;
                   102897:     **
                   102898:     ** The best strategy is to iterate through table t1 first. However it
                   102899:     ** is not possible to determine this with a simple greedy algorithm.
                   102900:     ** Since the cost of a linear scan through table t2 is the same 
                   102901:     ** as the cost of a linear scan through table t1, a simple greedy 
                   102902:     ** algorithm may choose to use t2 for the outer loop, which is a much
                   102903:     ** costlier approach.
                   102904:     */
                   102905:     nUnconstrained = 0;
                   102906:     notIndexed = 0;
                   102907:     for(isOptimal=(iFrom<nTabList-1); isOptimal>=0 && bestJ<0; isOptimal--){
                   102908:       Bitmask mask;             /* Mask of tables not yet ready */
                   102909:       for(j=iFrom, pTabItem=&pTabList->a[j]; j<nTabList; j++, pTabItem++){
                   102910:         int doNotReorder;    /* True if this table should not be reordered */
                   102911:         WhereCost sCost;     /* Cost information from best[Virtual]Index() */
                   102912:         ExprList *pOrderBy;  /* ORDER BY clause for index to optimize */
                   102913:   
                   102914:         doNotReorder =  (pTabItem->jointype & (JT_LEFT|JT_CROSS))!=0;
                   102915:         if( j!=iFrom && doNotReorder ) break;
                   102916:         m = getMask(pMaskSet, pTabItem->iCursor);
                   102917:         if( (m & notReady)==0 ){
                   102918:           if( j==iFrom ) iFrom++;
                   102919:           continue;
                   102920:         }
                   102921:         mask = (isOptimal ? m : notReady);
                   102922:         pOrderBy = ((i==0 && ppOrderBy )?*ppOrderBy:0);
                   102923:         if( pTabItem->pIndex==0 ) nUnconstrained++;
                   102924:   
                   102925:         WHERETRACE(("=== trying table %d with isOptimal=%d ===\n",
                   102926:                     j, isOptimal));
                   102927:         assert( pTabItem->pTab );
                   102928: #ifndef SQLITE_OMIT_VIRTUALTABLE
                   102929:         if( IsVirtual(pTabItem->pTab) ){
                   102930:           sqlite3_index_info **pp = &pWInfo->a[j].pIdxInfo;
                   102931:           bestVirtualIndex(pParse, pWC, pTabItem, mask, notReady, pOrderBy,
                   102932:                            &sCost, pp);
                   102933:         }else 
                   102934: #endif
                   102935:         {
                   102936:           bestBtreeIndex(pParse, pWC, pTabItem, mask, notReady, pOrderBy,
                   102937:                          &sCost);
                   102938:         }
                   102939:         assert( isOptimal || (sCost.used&notReady)==0 );
                   102940: 
                   102941:         /* If an INDEXED BY clause is present, then the plan must use that
                   102942:         ** index if it uses any index at all */
                   102943:         assert( pTabItem->pIndex==0 
                   102944:                   || (sCost.plan.wsFlags & WHERE_NOT_FULLSCAN)==0
                   102945:                   || sCost.plan.u.pIdx==pTabItem->pIndex );
                   102946: 
                   102947:         if( isOptimal && (sCost.plan.wsFlags & WHERE_NOT_FULLSCAN)==0 ){
                   102948:           notIndexed |= m;
                   102949:         }
                   102950: 
                   102951:         /* Conditions under which this table becomes the best so far:
                   102952:         **
                   102953:         **   (1) The table must not depend on other tables that have not
                   102954:         **       yet run.
                   102955:         **
1.1.1.3 ! misho    102956:         **   (2) A full-table-scan plan cannot supersede indexed plan unless
1.1       misho    102957:         **       the full-table-scan is an "optimal" plan as defined above.
                   102958:         **
                   102959:         **   (3) All tables have an INDEXED BY clause or this table lacks an
                   102960:         **       INDEXED BY clause or this table uses the specific
                   102961:         **       index specified by its INDEXED BY clause.  This rule ensures
                   102962:         **       that a best-so-far is always selected even if an impossible
                   102963:         **       combination of INDEXED BY clauses are given.  The error
                   102964:         **       will be detected and relayed back to the application later.
                   102965:         **       The NEVER() comes about because rule (2) above prevents
                   102966:         **       An indexable full-table-scan from reaching rule (3).
                   102967:         **
                   102968:         **   (4) The plan cost must be lower than prior plans or else the
                   102969:         **       cost must be the same and the number of rows must be lower.
                   102970:         */
                   102971:         if( (sCost.used&notReady)==0                       /* (1) */
                   102972:             && (bestJ<0 || (notIndexed&m)!=0               /* (2) */
                   102973:                 || (bestPlan.plan.wsFlags & WHERE_NOT_FULLSCAN)==0
                   102974:                 || (sCost.plan.wsFlags & WHERE_NOT_FULLSCAN)!=0)
                   102975:             && (nUnconstrained==0 || pTabItem->pIndex==0   /* (3) */
                   102976:                 || NEVER((sCost.plan.wsFlags & WHERE_NOT_FULLSCAN)!=0))
                   102977:             && (bestJ<0 || sCost.rCost<bestPlan.rCost      /* (4) */
                   102978:                 || (sCost.rCost<=bestPlan.rCost 
                   102979:                  && sCost.plan.nRow<bestPlan.plan.nRow))
                   102980:         ){
                   102981:           WHERETRACE(("=== table %d is best so far"
                   102982:                       " with cost=%g and nRow=%g\n",
                   102983:                       j, sCost.rCost, sCost.plan.nRow));
                   102984:           bestPlan = sCost;
                   102985:           bestJ = j;
                   102986:         }
                   102987:         if( doNotReorder ) break;
                   102988:       }
                   102989:     }
                   102990:     assert( bestJ>=0 );
                   102991:     assert( notReady & getMask(pMaskSet, pTabList->a[bestJ].iCursor) );
                   102992:     WHERETRACE(("*** Optimizer selects table %d for loop %d"
                   102993:                 " with cost=%g and nRow=%g\n",
                   102994:                 bestJ, pLevel-pWInfo->a, bestPlan.rCost, bestPlan.plan.nRow));
                   102995:     if( (bestPlan.plan.wsFlags & WHERE_ORDERBY)!=0 ){
                   102996:       *ppOrderBy = 0;
                   102997:     }
                   102998:     andFlags &= bestPlan.plan.wsFlags;
                   102999:     pLevel->plan = bestPlan.plan;
                   103000:     testcase( bestPlan.plan.wsFlags & WHERE_INDEXED );
                   103001:     testcase( bestPlan.plan.wsFlags & WHERE_TEMP_INDEX );
                   103002:     if( bestPlan.plan.wsFlags & (WHERE_INDEXED|WHERE_TEMP_INDEX) ){
                   103003:       pLevel->iIdxCur = pParse->nTab++;
                   103004:     }else{
                   103005:       pLevel->iIdxCur = -1;
                   103006:     }
                   103007:     notReady &= ~getMask(pMaskSet, pTabList->a[bestJ].iCursor);
                   103008:     pLevel->iFrom = (u8)bestJ;
                   103009:     if( bestPlan.plan.nRow>=(double)1 ){
                   103010:       pParse->nQueryLoop *= bestPlan.plan.nRow;
                   103011:     }
                   103012: 
                   103013:     /* Check that if the table scanned by this loop iteration had an
                   103014:     ** INDEXED BY clause attached to it, that the named index is being
                   103015:     ** used for the scan. If not, then query compilation has failed.
                   103016:     ** Return an error.
                   103017:     */
                   103018:     pIdx = pTabList->a[bestJ].pIndex;
                   103019:     if( pIdx ){
                   103020:       if( (bestPlan.plan.wsFlags & WHERE_INDEXED)==0 ){
                   103021:         sqlite3ErrorMsg(pParse, "cannot use index: %s", pIdx->zName);
                   103022:         goto whereBeginError;
                   103023:       }else{
                   103024:         /* If an INDEXED BY clause is used, the bestIndex() function is
                   103025:         ** guaranteed to find the index specified in the INDEXED BY clause
                   103026:         ** if it find an index at all. */
                   103027:         assert( bestPlan.plan.u.pIdx==pIdx );
                   103028:       }
                   103029:     }
                   103030:   }
                   103031:   WHERETRACE(("*** Optimizer Finished ***\n"));
                   103032:   if( pParse->nErr || db->mallocFailed ){
                   103033:     goto whereBeginError;
                   103034:   }
                   103035: 
                   103036:   /* If the total query only selects a single row, then the ORDER BY
                   103037:   ** clause is irrelevant.
                   103038:   */
                   103039:   if( (andFlags & WHERE_UNIQUE)!=0 && ppOrderBy ){
                   103040:     *ppOrderBy = 0;
                   103041:   }
                   103042: 
                   103043:   /* If the caller is an UPDATE or DELETE statement that is requesting
                   103044:   ** to use a one-pass algorithm, determine if this is appropriate.
                   103045:   ** The one-pass algorithm only works if the WHERE clause constraints
                   103046:   ** the statement to update a single row.
                   103047:   */
                   103048:   assert( (wctrlFlags & WHERE_ONEPASS_DESIRED)==0 || pWInfo->nLevel==1 );
                   103049:   if( (wctrlFlags & WHERE_ONEPASS_DESIRED)!=0 && (andFlags & WHERE_UNIQUE)!=0 ){
                   103050:     pWInfo->okOnePass = 1;
                   103051:     pWInfo->a[0].plan.wsFlags &= ~WHERE_IDX_ONLY;
                   103052:   }
                   103053: 
                   103054:   /* Open all tables in the pTabList and any indices selected for
                   103055:   ** searching those tables.
                   103056:   */
                   103057:   sqlite3CodeVerifySchema(pParse, -1); /* Insert the cookie verifier Goto */
                   103058:   notReady = ~(Bitmask)0;
                   103059:   pWInfo->nRowOut = (double)1;
                   103060:   for(i=0, pLevel=pWInfo->a; i<nTabList; i++, pLevel++){
                   103061:     Table *pTab;     /* Table to open */
                   103062:     int iDb;         /* Index of database containing table/index */
                   103063: 
                   103064:     pTabItem = &pTabList->a[pLevel->iFrom];
                   103065:     pTab = pTabItem->pTab;
                   103066:     pLevel->iTabCur = pTabItem->iCursor;
                   103067:     pWInfo->nRowOut *= pLevel->plan.nRow;
                   103068:     iDb = sqlite3SchemaToIndex(db, pTab->pSchema);
                   103069:     if( (pTab->tabFlags & TF_Ephemeral)!=0 || pTab->pSelect ){
                   103070:       /* Do nothing */
                   103071:     }else
                   103072: #ifndef SQLITE_OMIT_VIRTUALTABLE
                   103073:     if( (pLevel->plan.wsFlags & WHERE_VIRTUALTABLE)!=0 ){
                   103074:       const char *pVTab = (const char *)sqlite3GetVTable(db, pTab);
                   103075:       int iCur = pTabItem->iCursor;
                   103076:       sqlite3VdbeAddOp4(v, OP_VOpen, iCur, 0, 0, pVTab, P4_VTAB);
                   103077:     }else
                   103078: #endif
                   103079:     if( (pLevel->plan.wsFlags & WHERE_IDX_ONLY)==0
                   103080:          && (wctrlFlags & WHERE_OMIT_OPEN)==0 ){
                   103081:       int op = pWInfo->okOnePass ? OP_OpenWrite : OP_OpenRead;
                   103082:       sqlite3OpenTable(pParse, pTabItem->iCursor, iDb, pTab, op);
                   103083:       testcase( pTab->nCol==BMS-1 );
                   103084:       testcase( pTab->nCol==BMS );
                   103085:       if( !pWInfo->okOnePass && pTab->nCol<BMS ){
                   103086:         Bitmask b = pTabItem->colUsed;
                   103087:         int n = 0;
                   103088:         for(; b; b=b>>1, n++){}
                   103089:         sqlite3VdbeChangeP4(v, sqlite3VdbeCurrentAddr(v)-1, 
                   103090:                             SQLITE_INT_TO_PTR(n), P4_INT32);
                   103091:         assert( n<=pTab->nCol );
                   103092:       }
                   103093:     }else{
                   103094:       sqlite3TableLock(pParse, iDb, pTab->tnum, 0, pTab->zName);
                   103095:     }
                   103096: #ifndef SQLITE_OMIT_AUTOMATIC_INDEX
                   103097:     if( (pLevel->plan.wsFlags & WHERE_TEMP_INDEX)!=0 ){
                   103098:       constructAutomaticIndex(pParse, pWC, pTabItem, notReady, pLevel);
                   103099:     }else
                   103100: #endif
                   103101:     if( (pLevel->plan.wsFlags & WHERE_INDEXED)!=0 ){
                   103102:       Index *pIx = pLevel->plan.u.pIdx;
                   103103:       KeyInfo *pKey = sqlite3IndexKeyinfo(pParse, pIx);
                   103104:       int iIdxCur = pLevel->iIdxCur;
                   103105:       assert( pIx->pSchema==pTab->pSchema );
                   103106:       assert( iIdxCur>=0 );
                   103107:       sqlite3VdbeAddOp4(v, OP_OpenRead, iIdxCur, pIx->tnum, iDb,
                   103108:                         (char*)pKey, P4_KEYINFO_HANDOFF);
                   103109:       VdbeComment((v, "%s", pIx->zName));
                   103110:     }
                   103111:     sqlite3CodeVerifySchema(pParse, iDb);
                   103112:     notReady &= ~getMask(pWC->pMaskSet, pTabItem->iCursor);
                   103113:   }
                   103114:   pWInfo->iTop = sqlite3VdbeCurrentAddr(v);
                   103115:   if( db->mallocFailed ) goto whereBeginError;
                   103116: 
                   103117:   /* Generate the code to do the search.  Each iteration of the for
                   103118:   ** loop below generates code for a single nested loop of the VM
                   103119:   ** program.
                   103120:   */
                   103121:   notReady = ~(Bitmask)0;
                   103122:   for(i=0; i<nTabList; i++){
                   103123:     pLevel = &pWInfo->a[i];
                   103124:     explainOneScan(pParse, pTabList, pLevel, i, pLevel->iFrom, wctrlFlags);
                   103125:     notReady = codeOneLoopStart(pWInfo, i, wctrlFlags, notReady);
                   103126:     pWInfo->iContinue = pLevel->addrCont;
                   103127:   }
                   103128: 
                   103129: #ifdef SQLITE_TEST  /* For testing and debugging use only */
                   103130:   /* Record in the query plan information about the current table
                   103131:   ** and the index used to access it (if any).  If the table itself
                   103132:   ** is not used, its name is just '{}'.  If no index is used
                   103133:   ** the index is listed as "{}".  If the primary key is used the
                   103134:   ** index name is '*'.
                   103135:   */
                   103136:   for(i=0; i<nTabList; i++){
                   103137:     char *z;
                   103138:     int n;
                   103139:     pLevel = &pWInfo->a[i];
                   103140:     pTabItem = &pTabList->a[pLevel->iFrom];
                   103141:     z = pTabItem->zAlias;
                   103142:     if( z==0 ) z = pTabItem->pTab->zName;
                   103143:     n = sqlite3Strlen30(z);
                   103144:     if( n+nQPlan < sizeof(sqlite3_query_plan)-10 ){
                   103145:       if( pLevel->plan.wsFlags & WHERE_IDX_ONLY ){
                   103146:         memcpy(&sqlite3_query_plan[nQPlan], "{}", 2);
                   103147:         nQPlan += 2;
                   103148:       }else{
                   103149:         memcpy(&sqlite3_query_plan[nQPlan], z, n);
                   103150:         nQPlan += n;
                   103151:       }
                   103152:       sqlite3_query_plan[nQPlan++] = ' ';
                   103153:     }
                   103154:     testcase( pLevel->plan.wsFlags & WHERE_ROWID_EQ );
                   103155:     testcase( pLevel->plan.wsFlags & WHERE_ROWID_RANGE );
                   103156:     if( pLevel->plan.wsFlags & (WHERE_ROWID_EQ|WHERE_ROWID_RANGE) ){
                   103157:       memcpy(&sqlite3_query_plan[nQPlan], "* ", 2);
                   103158:       nQPlan += 2;
                   103159:     }else if( (pLevel->plan.wsFlags & WHERE_INDEXED)!=0 ){
                   103160:       n = sqlite3Strlen30(pLevel->plan.u.pIdx->zName);
                   103161:       if( n+nQPlan < sizeof(sqlite3_query_plan)-2 ){
                   103162:         memcpy(&sqlite3_query_plan[nQPlan], pLevel->plan.u.pIdx->zName, n);
                   103163:         nQPlan += n;
                   103164:         sqlite3_query_plan[nQPlan++] = ' ';
                   103165:       }
                   103166:     }else{
                   103167:       memcpy(&sqlite3_query_plan[nQPlan], "{} ", 3);
                   103168:       nQPlan += 3;
                   103169:     }
                   103170:   }
                   103171:   while( nQPlan>0 && sqlite3_query_plan[nQPlan-1]==' ' ){
                   103172:     sqlite3_query_plan[--nQPlan] = 0;
                   103173:   }
                   103174:   sqlite3_query_plan[nQPlan] = 0;
                   103175:   nQPlan = 0;
                   103176: #endif /* SQLITE_TEST // Testing and debugging use only */
                   103177: 
                   103178:   /* Record the continuation address in the WhereInfo structure.  Then
                   103179:   ** clean up and return.
                   103180:   */
                   103181:   return pWInfo;
                   103182: 
                   103183:   /* Jump here if malloc fails */
                   103184: whereBeginError:
                   103185:   if( pWInfo ){
                   103186:     pParse->nQueryLoop = pWInfo->savedNQueryLoop;
                   103187:     whereInfoFree(db, pWInfo);
                   103188:   }
                   103189:   return 0;
                   103190: }
                   103191: 
                   103192: /*
                   103193: ** Generate the end of the WHERE loop.  See comments on 
                   103194: ** sqlite3WhereBegin() for additional information.
                   103195: */
                   103196: SQLITE_PRIVATE void sqlite3WhereEnd(WhereInfo *pWInfo){
                   103197:   Parse *pParse = pWInfo->pParse;
                   103198:   Vdbe *v = pParse->pVdbe;
                   103199:   int i;
                   103200:   WhereLevel *pLevel;
                   103201:   SrcList *pTabList = pWInfo->pTabList;
                   103202:   sqlite3 *db = pParse->db;
                   103203: 
                   103204:   /* Generate loop termination code.
                   103205:   */
                   103206:   sqlite3ExprCacheClear(pParse);
                   103207:   for(i=pWInfo->nLevel-1; i>=0; i--){
                   103208:     pLevel = &pWInfo->a[i];
                   103209:     sqlite3VdbeResolveLabel(v, pLevel->addrCont);
                   103210:     if( pLevel->op!=OP_Noop ){
                   103211:       sqlite3VdbeAddOp2(v, pLevel->op, pLevel->p1, pLevel->p2);
                   103212:       sqlite3VdbeChangeP5(v, pLevel->p5);
                   103213:     }
                   103214:     if( pLevel->plan.wsFlags & WHERE_IN_ABLE && pLevel->u.in.nIn>0 ){
                   103215:       struct InLoop *pIn;
                   103216:       int j;
                   103217:       sqlite3VdbeResolveLabel(v, pLevel->addrNxt);
                   103218:       for(j=pLevel->u.in.nIn, pIn=&pLevel->u.in.aInLoop[j-1]; j>0; j--, pIn--){
                   103219:         sqlite3VdbeJumpHere(v, pIn->addrInTop+1);
                   103220:         sqlite3VdbeAddOp2(v, OP_Next, pIn->iCur, pIn->addrInTop);
                   103221:         sqlite3VdbeJumpHere(v, pIn->addrInTop-1);
                   103222:       }
                   103223:       sqlite3DbFree(db, pLevel->u.in.aInLoop);
                   103224:     }
                   103225:     sqlite3VdbeResolveLabel(v, pLevel->addrBrk);
                   103226:     if( pLevel->iLeftJoin ){
                   103227:       int addr;
                   103228:       addr = sqlite3VdbeAddOp1(v, OP_IfPos, pLevel->iLeftJoin);
                   103229:       assert( (pLevel->plan.wsFlags & WHERE_IDX_ONLY)==0
                   103230:            || (pLevel->plan.wsFlags & WHERE_INDEXED)!=0 );
                   103231:       if( (pLevel->plan.wsFlags & WHERE_IDX_ONLY)==0 ){
                   103232:         sqlite3VdbeAddOp1(v, OP_NullRow, pTabList->a[i].iCursor);
                   103233:       }
                   103234:       if( pLevel->iIdxCur>=0 ){
                   103235:         sqlite3VdbeAddOp1(v, OP_NullRow, pLevel->iIdxCur);
                   103236:       }
                   103237:       if( pLevel->op==OP_Return ){
                   103238:         sqlite3VdbeAddOp2(v, OP_Gosub, pLevel->p1, pLevel->addrFirst);
                   103239:       }else{
                   103240:         sqlite3VdbeAddOp2(v, OP_Goto, 0, pLevel->addrFirst);
                   103241:       }
                   103242:       sqlite3VdbeJumpHere(v, addr);
                   103243:     }
                   103244:   }
                   103245: 
                   103246:   /* The "break" point is here, just past the end of the outer loop.
                   103247:   ** Set it.
                   103248:   */
                   103249:   sqlite3VdbeResolveLabel(v, pWInfo->iBreak);
                   103250: 
                   103251:   /* Close all of the cursors that were opened by sqlite3WhereBegin.
                   103252:   */
                   103253:   assert( pWInfo->nLevel==1 || pWInfo->nLevel==pTabList->nSrc );
                   103254:   for(i=0, pLevel=pWInfo->a; i<pWInfo->nLevel; i++, pLevel++){
                   103255:     struct SrcList_item *pTabItem = &pTabList->a[pLevel->iFrom];
                   103256:     Table *pTab = pTabItem->pTab;
                   103257:     assert( pTab!=0 );
                   103258:     if( (pTab->tabFlags & TF_Ephemeral)==0
                   103259:      && pTab->pSelect==0
                   103260:      && (pWInfo->wctrlFlags & WHERE_OMIT_CLOSE)==0
                   103261:     ){
                   103262:       int ws = pLevel->plan.wsFlags;
                   103263:       if( !pWInfo->okOnePass && (ws & WHERE_IDX_ONLY)==0 ){
                   103264:         sqlite3VdbeAddOp1(v, OP_Close, pTabItem->iCursor);
                   103265:       }
                   103266:       if( (ws & WHERE_INDEXED)!=0 && (ws & WHERE_TEMP_INDEX)==0 ){
                   103267:         sqlite3VdbeAddOp1(v, OP_Close, pLevel->iIdxCur);
                   103268:       }
                   103269:     }
                   103270: 
                   103271:     /* If this scan uses an index, make code substitutions to read data
                   103272:     ** from the index in preference to the table. Sometimes, this means
                   103273:     ** the table need never be read from. This is a performance boost,
                   103274:     ** as the vdbe level waits until the table is read before actually
                   103275:     ** seeking the table cursor to the record corresponding to the current
                   103276:     ** position in the index.
                   103277:     ** 
                   103278:     ** Calls to the code generator in between sqlite3WhereBegin and
                   103279:     ** sqlite3WhereEnd will have created code that references the table
                   103280:     ** directly.  This loop scans all that code looking for opcodes
                   103281:     ** that reference the table and converts them into opcodes that
                   103282:     ** reference the index.
                   103283:     */
                   103284:     if( (pLevel->plan.wsFlags & WHERE_INDEXED)!=0 && !db->mallocFailed){
                   103285:       int k, j, last;
                   103286:       VdbeOp *pOp;
                   103287:       Index *pIdx = pLevel->plan.u.pIdx;
                   103288: 
                   103289:       assert( pIdx!=0 );
                   103290:       pOp = sqlite3VdbeGetOp(v, pWInfo->iTop);
                   103291:       last = sqlite3VdbeCurrentAddr(v);
                   103292:       for(k=pWInfo->iTop; k<last; k++, pOp++){
                   103293:         if( pOp->p1!=pLevel->iTabCur ) continue;
                   103294:         if( pOp->opcode==OP_Column ){
                   103295:           for(j=0; j<pIdx->nColumn; j++){
                   103296:             if( pOp->p2==pIdx->aiColumn[j] ){
                   103297:               pOp->p2 = j;
                   103298:               pOp->p1 = pLevel->iIdxCur;
                   103299:               break;
                   103300:             }
                   103301:           }
                   103302:           assert( (pLevel->plan.wsFlags & WHERE_IDX_ONLY)==0
                   103303:                || j<pIdx->nColumn );
                   103304:         }else if( pOp->opcode==OP_Rowid ){
                   103305:           pOp->p1 = pLevel->iIdxCur;
                   103306:           pOp->opcode = OP_IdxRowid;
                   103307:         }
                   103308:       }
                   103309:     }
                   103310:   }
                   103311: 
                   103312:   /* Final cleanup
                   103313:   */
                   103314:   pParse->nQueryLoop = pWInfo->savedNQueryLoop;
                   103315:   whereInfoFree(db, pWInfo);
                   103316:   return;
                   103317: }
                   103318: 
                   103319: /************** End of where.c ***********************************************/
                   103320: /************** Begin file parse.c *******************************************/
                   103321: /* Driver template for the LEMON parser generator.
                   103322: ** The author disclaims copyright to this source code.
                   103323: **
                   103324: ** This version of "lempar.c" is modified, slightly, for use by SQLite.
                   103325: ** The only modifications are the addition of a couple of NEVER()
                   103326: ** macros to disable tests that are needed in the case of a general
                   103327: ** LALR(1) grammar but which are always false in the
                   103328: ** specific grammar used by SQLite.
                   103329: */
                   103330: /* First off, code is included that follows the "include" declaration
                   103331: ** in the input grammar file. */
                   103332: 
                   103333: 
                   103334: /*
                   103335: ** Disable all error recovery processing in the parser push-down
                   103336: ** automaton.
                   103337: */
                   103338: #define YYNOERRORRECOVERY 1
                   103339: 
                   103340: /*
                   103341: ** Make yytestcase() the same as testcase()
                   103342: */
                   103343: #define yytestcase(X) testcase(X)
                   103344: 
                   103345: /*
                   103346: ** An instance of this structure holds information about the
                   103347: ** LIMIT clause of a SELECT statement.
                   103348: */
                   103349: struct LimitVal {
                   103350:   Expr *pLimit;    /* The LIMIT expression.  NULL if there is no limit */
                   103351:   Expr *pOffset;   /* The OFFSET expression.  NULL if there is none */
                   103352: };
                   103353: 
                   103354: /*
                   103355: ** An instance of this structure is used to store the LIKE,
                   103356: ** GLOB, NOT LIKE, and NOT GLOB operators.
                   103357: */
                   103358: struct LikeOp {
                   103359:   Token eOperator;  /* "like" or "glob" or "regexp" */
                   103360:   int not;         /* True if the NOT keyword is present */
                   103361: };
                   103362: 
                   103363: /*
                   103364: ** An instance of the following structure describes the event of a
                   103365: ** TRIGGER.  "a" is the event type, one of TK_UPDATE, TK_INSERT,
                   103366: ** TK_DELETE, or TK_INSTEAD.  If the event is of the form
                   103367: **
                   103368: **      UPDATE ON (a,b,c)
                   103369: **
                   103370: ** Then the "b" IdList records the list "a,b,c".
                   103371: */
                   103372: struct TrigEvent { int a; IdList * b; };
                   103373: 
                   103374: /*
                   103375: ** An instance of this structure holds the ATTACH key and the key type.
                   103376: */
                   103377: struct AttachKey { int type;  Token key; };
                   103378: 
                   103379: 
                   103380:   /* This is a utility routine used to set the ExprSpan.zStart and
                   103381:   ** ExprSpan.zEnd values of pOut so that the span covers the complete
                   103382:   ** range of text beginning with pStart and going to the end of pEnd.
                   103383:   */
                   103384:   static void spanSet(ExprSpan *pOut, Token *pStart, Token *pEnd){
                   103385:     pOut->zStart = pStart->z;
                   103386:     pOut->zEnd = &pEnd->z[pEnd->n];
                   103387:   }
                   103388: 
                   103389:   /* Construct a new Expr object from a single identifier.  Use the
                   103390:   ** new Expr to populate pOut.  Set the span of pOut to be the identifier
                   103391:   ** that created the expression.
                   103392:   */
                   103393:   static void spanExpr(ExprSpan *pOut, Parse *pParse, int op, Token *pValue){
                   103394:     pOut->pExpr = sqlite3PExpr(pParse, op, 0, 0, pValue);
                   103395:     pOut->zStart = pValue->z;
                   103396:     pOut->zEnd = &pValue->z[pValue->n];
                   103397:   }
                   103398: 
                   103399:   /* This routine constructs a binary expression node out of two ExprSpan
                   103400:   ** objects and uses the result to populate a new ExprSpan object.
                   103401:   */
                   103402:   static void spanBinaryExpr(
                   103403:     ExprSpan *pOut,     /* Write the result here */
                   103404:     Parse *pParse,      /* The parsing context.  Errors accumulate here */
                   103405:     int op,             /* The binary operation */
                   103406:     ExprSpan *pLeft,    /* The left operand */
                   103407:     ExprSpan *pRight    /* The right operand */
                   103408:   ){
                   103409:     pOut->pExpr = sqlite3PExpr(pParse, op, pLeft->pExpr, pRight->pExpr, 0);
                   103410:     pOut->zStart = pLeft->zStart;
                   103411:     pOut->zEnd = pRight->zEnd;
                   103412:   }
                   103413: 
                   103414:   /* Construct an expression node for a unary postfix operator
                   103415:   */
                   103416:   static void spanUnaryPostfix(
                   103417:     ExprSpan *pOut,        /* Write the new expression node here */
                   103418:     Parse *pParse,         /* Parsing context to record errors */
                   103419:     int op,                /* The operator */
                   103420:     ExprSpan *pOperand,    /* The operand */
                   103421:     Token *pPostOp         /* The operand token for setting the span */
                   103422:   ){
                   103423:     pOut->pExpr = sqlite3PExpr(pParse, op, pOperand->pExpr, 0, 0);
                   103424:     pOut->zStart = pOperand->zStart;
                   103425:     pOut->zEnd = &pPostOp->z[pPostOp->n];
                   103426:   }                           
                   103427: 
                   103428:   /* A routine to convert a binary TK_IS or TK_ISNOT expression into a
                   103429:   ** unary TK_ISNULL or TK_NOTNULL expression. */
                   103430:   static void binaryToUnaryIfNull(Parse *pParse, Expr *pY, Expr *pA, int op){
                   103431:     sqlite3 *db = pParse->db;
                   103432:     if( db->mallocFailed==0 && pY->op==TK_NULL ){
                   103433:       pA->op = (u8)op;
                   103434:       sqlite3ExprDelete(db, pA->pRight);
                   103435:       pA->pRight = 0;
                   103436:     }
                   103437:   }
                   103438: 
                   103439:   /* Construct an expression node for a unary prefix operator
                   103440:   */
                   103441:   static void spanUnaryPrefix(
                   103442:     ExprSpan *pOut,        /* Write the new expression node here */
                   103443:     Parse *pParse,         /* Parsing context to record errors */
                   103444:     int op,                /* The operator */
                   103445:     ExprSpan *pOperand,    /* The operand */
                   103446:     Token *pPreOp         /* The operand token for setting the span */
                   103447:   ){
                   103448:     pOut->pExpr = sqlite3PExpr(pParse, op, pOperand->pExpr, 0, 0);
                   103449:     pOut->zStart = pPreOp->z;
                   103450:     pOut->zEnd = pOperand->zEnd;
                   103451:   }
                   103452: /* Next is all token values, in a form suitable for use by makeheaders.
                   103453: ** This section will be null unless lemon is run with the -m switch.
                   103454: */
                   103455: /* 
                   103456: ** These constants (all generated automatically by the parser generator)
                   103457: ** specify the various kinds of tokens (terminals) that the parser
                   103458: ** understands. 
                   103459: **
                   103460: ** Each symbol here is a terminal symbol in the grammar.
                   103461: */
                   103462: /* Make sure the INTERFACE macro is defined.
                   103463: */
                   103464: #ifndef INTERFACE
                   103465: # define INTERFACE 1
                   103466: #endif
                   103467: /* The next thing included is series of defines which control
                   103468: ** various aspects of the generated parser.
                   103469: **    YYCODETYPE         is the data type used for storing terminal
                   103470: **                       and nonterminal numbers.  "unsigned char" is
                   103471: **                       used if there are fewer than 250 terminals
                   103472: **                       and nonterminals.  "int" is used otherwise.
                   103473: **    YYNOCODE           is a number of type YYCODETYPE which corresponds
                   103474: **                       to no legal terminal or nonterminal number.  This
                   103475: **                       number is used to fill in empty slots of the hash 
                   103476: **                       table.
                   103477: **    YYFALLBACK         If defined, this indicates that one or more tokens
                   103478: **                       have fall-back values which should be used if the
                   103479: **                       original value of the token will not parse.
                   103480: **    YYACTIONTYPE       is the data type used for storing terminal
                   103481: **                       and nonterminal numbers.  "unsigned char" is
                   103482: **                       used if there are fewer than 250 rules and
                   103483: **                       states combined.  "int" is used otherwise.
                   103484: **    sqlite3ParserTOKENTYPE     is the data type used for minor tokens given 
                   103485: **                       directly to the parser from the tokenizer.
                   103486: **    YYMINORTYPE        is the data type used for all minor tokens.
                   103487: **                       This is typically a union of many types, one of
                   103488: **                       which is sqlite3ParserTOKENTYPE.  The entry in the union
                   103489: **                       for base tokens is called "yy0".
                   103490: **    YYSTACKDEPTH       is the maximum depth of the parser's stack.  If
                   103491: **                       zero the stack is dynamically sized using realloc()
                   103492: **    sqlite3ParserARG_SDECL     A static variable declaration for the %extra_argument
                   103493: **    sqlite3ParserARG_PDECL     A parameter declaration for the %extra_argument
                   103494: **    sqlite3ParserARG_STORE     Code to store %extra_argument into yypParser
                   103495: **    sqlite3ParserARG_FETCH     Code to extract %extra_argument from yypParser
                   103496: **    YYNSTATE           the combined number of states.
                   103497: **    YYNRULE            the number of rules in the grammar
                   103498: **    YYERRORSYMBOL      is the code number of the error symbol.  If not
                   103499: **                       defined, then do no error processing.
                   103500: */
                   103501: #define YYCODETYPE unsigned char
                   103502: #define YYNOCODE 253
                   103503: #define YYACTIONTYPE unsigned short int
                   103504: #define YYWILDCARD 67
                   103505: #define sqlite3ParserTOKENTYPE Token
                   103506: typedef union {
                   103507:   int yyinit;
                   103508:   sqlite3ParserTOKENTYPE yy0;
                   103509:   int yy4;
                   103510:   struct TrigEvent yy90;
                   103511:   ExprSpan yy118;
                   103512:   TriggerStep* yy203;
                   103513:   u8 yy210;
                   103514:   struct {int value; int mask;} yy215;
                   103515:   SrcList* yy259;
                   103516:   struct LimitVal yy292;
                   103517:   Expr* yy314;
                   103518:   ExprList* yy322;
                   103519:   struct LikeOp yy342;
                   103520:   IdList* yy384;
                   103521:   Select* yy387;
                   103522: } YYMINORTYPE;
                   103523: #ifndef YYSTACKDEPTH
                   103524: #define YYSTACKDEPTH 100
                   103525: #endif
                   103526: #define sqlite3ParserARG_SDECL Parse *pParse;
                   103527: #define sqlite3ParserARG_PDECL ,Parse *pParse
                   103528: #define sqlite3ParserARG_FETCH Parse *pParse = yypParser->pParse
                   103529: #define sqlite3ParserARG_STORE yypParser->pParse = pParse
                   103530: #define YYNSTATE 630
                   103531: #define YYNRULE 329
                   103532: #define YYFALLBACK 1
                   103533: #define YY_NO_ACTION      (YYNSTATE+YYNRULE+2)
                   103534: #define YY_ACCEPT_ACTION  (YYNSTATE+YYNRULE+1)
                   103535: #define YY_ERROR_ACTION   (YYNSTATE+YYNRULE)
                   103536: 
                   103537: /* The yyzerominor constant is used to initialize instances of
                   103538: ** YYMINORTYPE objects to zero. */
                   103539: static const YYMINORTYPE yyzerominor = { 0 };
                   103540: 
                   103541: /* Define the yytestcase() macro to be a no-op if is not already defined
                   103542: ** otherwise.
                   103543: **
                   103544: ** Applications can choose to define yytestcase() in the %include section
                   103545: ** to a macro that can assist in verifying code coverage.  For production
                   103546: ** code the yytestcase() macro should be turned off.  But it is useful
                   103547: ** for testing.
                   103548: */
                   103549: #ifndef yytestcase
                   103550: # define yytestcase(X)
                   103551: #endif
                   103552: 
                   103553: 
                   103554: /* Next are the tables used to determine what action to take based on the
                   103555: ** current state and lookahead token.  These tables are used to implement
                   103556: ** functions that take a state number and lookahead value and return an
                   103557: ** action integer.  
                   103558: **
                   103559: ** Suppose the action integer is N.  Then the action is determined as
                   103560: ** follows
                   103561: **
                   103562: **   0 <= N < YYNSTATE                  Shift N.  That is, push the lookahead
                   103563: **                                      token onto the stack and goto state N.
                   103564: **
                   103565: **   YYNSTATE <= N < YYNSTATE+YYNRULE   Reduce by rule N-YYNSTATE.
                   103566: **
                   103567: **   N == YYNSTATE+YYNRULE              A syntax error has occurred.
                   103568: **
                   103569: **   N == YYNSTATE+YYNRULE+1            The parser accepts its input.
                   103570: **
                   103571: **   N == YYNSTATE+YYNRULE+2            No such action.  Denotes unused
                   103572: **                                      slots in the yy_action[] table.
                   103573: **
                   103574: ** The action table is constructed as a single large table named yy_action[].
                   103575: ** Given state S and lookahead X, the action is computed as
                   103576: **
                   103577: **      yy_action[ yy_shift_ofst[S] + X ]
                   103578: **
                   103579: ** If the index value yy_shift_ofst[S]+X is out of range or if the value
                   103580: ** yy_lookahead[yy_shift_ofst[S]+X] is not equal to X or if yy_shift_ofst[S]
                   103581: ** is equal to YY_SHIFT_USE_DFLT, it means that the action is not in the table
                   103582: ** and that yy_default[S] should be used instead.  
                   103583: **
                   103584: ** The formula above is for computing the action when the lookahead is
                   103585: ** a terminal symbol.  If the lookahead is a non-terminal (as occurs after
                   103586: ** a reduce action) then the yy_reduce_ofst[] array is used in place of
                   103587: ** the yy_shift_ofst[] array and YY_REDUCE_USE_DFLT is used in place of
                   103588: ** YY_SHIFT_USE_DFLT.
                   103589: **
                   103590: ** The following are the tables generated in this section:
                   103591: **
                   103592: **  yy_action[]        A single table containing all actions.
                   103593: **  yy_lookahead[]     A table containing the lookahead for each entry in
                   103594: **                     yy_action.  Used to detect hash collisions.
                   103595: **  yy_shift_ofst[]    For each state, the offset into yy_action for
                   103596: **                     shifting terminals.
                   103597: **  yy_reduce_ofst[]   For each state, the offset into yy_action for
                   103598: **                     shifting non-terminals after a reduce.
                   103599: **  yy_default[]       Default action for each state.
                   103600: */
                   103601: #define YY_ACTTAB_COUNT (1557)
                   103602: static const YYACTIONTYPE yy_action[] = {
                   103603:  /*     0 */   313,  960,  186,  419,    2,  172,  627,  597,   55,   55,
                   103604:  /*    10 */    55,   55,   48,   53,   53,   53,   53,   52,   52,   51,
                   103605:  /*    20 */    51,   51,   50,  238,  302,  283,  623,  622,  516,  515,
                   103606:  /*    30 */   590,  584,   55,   55,   55,   55,  282,   53,   53,   53,
                   103607:  /*    40 */    53,   52,   52,   51,   51,   51,   50,  238,    6,   56,
                   103608:  /*    50 */    57,   47,  582,  581,  583,  583,   54,   54,   55,   55,
                   103609:  /*    60 */    55,   55,  608,   53,   53,   53,   53,   52,   52,   51,
                   103610:  /*    70 */    51,   51,   50,  238,  313,  597,  409,  330,  579,  579,
                   103611:  /*    80 */    32,   53,   53,   53,   53,   52,   52,   51,   51,   51,
                   103612:  /*    90 */    50,  238,  330,  217,  620,  619,  166,  411,  624,  382,
                   103613:  /*   100 */   379,  378,    7,  491,  590,  584,  200,  199,  198,   58,
                   103614:  /*   110 */   377,  300,  414,  621,  481,   66,  623,  622,  621,  580,
                   103615:  /*   120 */   254,  601,   94,   56,   57,   47,  582,  581,  583,  583,
                   103616:  /*   130 */    54,   54,   55,   55,   55,   55,  671,   53,   53,   53,
                   103617:  /*   140 */    53,   52,   52,   51,   51,   51,   50,  238,  313,  532,
                   103618:  /*   150 */   226,  506,  507,  133,  177,  139,  284,  385,  279,  384,
                   103619:  /*   160 */   169,  197,  342,  398,  251,  226,  253,  275,  388,  167,
                   103620:  /*   170 */   139,  284,  385,  279,  384,  169,  570,  236,  590,  584,
                   103621:  /*   180 */   672,  240,  275,  157,  620,  619,  554,  437,   51,   51,
                   103622:  /*   190 */    51,   50,  238,  343,  439,  553,  438,   56,   57,   47,
                   103623:  /*   200 */   582,  581,  583,  583,   54,   54,   55,   55,   55,   55,
                   103624:  /*   210 */   465,   53,   53,   53,   53,   52,   52,   51,   51,   51,
                   103625:  /*   220 */    50,  238,  313,  390,   52,   52,   51,   51,   51,   50,
                   103626:  /*   230 */   238,  391,  166,  491,  566,  382,  379,  378,  409,  440,
                   103627:  /*   240 */   579,  579,  252,  440,  607,   66,  377,  513,  621,   49,
                   103628:  /*   250 */    46,  147,  590,  584,  621,   16,  466,  189,  621,  441,
                   103629:  /*   260 */   442,  673,  526,  441,  340,  577,  595,   64,  194,  482,
                   103630:  /*   270 */   434,   56,   57,   47,  582,  581,  583,  583,   54,   54,
                   103631:  /*   280 */    55,   55,   55,   55,   30,   53,   53,   53,   53,   52,
                   103632:  /*   290 */    52,   51,   51,   51,   50,  238,  313,  593,  593,  593,
                   103633:  /*   300 */   387,  578,  606,  493,  259,  351,  258,  411,    1,  623,
                   103634:  /*   310 */   622,  496,  623,  622,   65,  240,  623,  622,  597,  443,
                   103635:  /*   320 */   237,  239,  414,  341,  237,  602,  590,  584,   18,  603,
                   103636:  /*   330 */   166,  601,   87,  382,  379,  378,   67,  623,  622,   38,
                   103637:  /*   340 */   623,  622,  176,  270,  377,   56,   57,   47,  582,  581,
                   103638:  /*   350 */   583,  583,   54,   54,   55,   55,   55,   55,  175,   53,
                   103639:  /*   360 */    53,   53,   53,   52,   52,   51,   51,   51,   50,  238,
                   103640:  /*   370 */   313,  396,  233,  411,  531,  565,  317,  620,  619,   44,
                   103641:  /*   380 */   620,  619,  240,  206,  620,  619,  597,  266,  414,  268,
                   103642:  /*   390 */   409,  597,  579,  579,  352,  184,  505,  601,   73,  533,
                   103643:  /*   400 */   590,  584,  466,  548,  190,  620,  619,  576,  620,  619,
                   103644:  /*   410 */   547,  383,  551,   35,  332,  575,  574,  600,  504,   56,
                   103645:  /*   420 */    57,   47,  582,  581,  583,  583,   54,   54,   55,   55,
                   103646:  /*   430 */    55,   55,  567,   53,   53,   53,   53,   52,   52,   51,
                   103647:  /*   440 */    51,   51,   50,  238,  313,  411,  561,  561,  528,  364,
                   103648:  /*   450 */   259,  351,  258,  183,  361,  549,  524,  374,  411,  597,
                   103649:  /*   460 */   414,  240,  560,  560,  409,  604,  579,  579,  328,  601,
                   103650:  /*   470 */    93,  623,  622,  414,  590,  584,  237,  564,  559,  559,
                   103651:  /*   480 */   520,  402,  601,   87,  409,  210,  579,  579,  168,  421,
                   103652:  /*   490 */   950,  519,  950,   56,   57,   47,  582,  581,  583,  583,
                   103653:  /*   500 */    54,   54,   55,   55,   55,   55,  192,   53,   53,   53,
                   103654:  /*   510 */    53,   52,   52,   51,   51,   51,   50,  238,  313,  600,
                   103655:  /*   520 */   293,  563,  511,  234,  357,  146,  475,  475,  367,  411,
                   103656:  /*   530 */   562,  411,  358,  542,  425,  171,  411,  215,  144,  620,
                   103657:  /*   540 */   619,  544,  318,  353,  414,  203,  414,  275,  590,  584,
                   103658:  /*   550 */   549,  414,  174,  601,   94,  601,   79,  558,  471,   61,
                   103659:  /*   560 */   601,   79,  421,  949,  350,  949,   34,   56,   57,   47,
                   103660:  /*   570 */   582,  581,  583,  583,   54,   54,   55,   55,   55,   55,
                   103661:  /*   580 */   535,   53,   53,   53,   53,   52,   52,   51,   51,   51,
                   103662:  /*   590 */    50,  238,  313,  307,  424,  394,  272,   49,   46,  147,
                   103663:  /*   600 */   349,  322,    4,  411,  491,  312,  321,  425,  568,  492,
                   103664:  /*   610 */   216,  264,  407,  575,  574,  429,   66,  549,  414,  621,
                   103665:  /*   620 */   540,  602,  590,  584,   13,  603,  621,  601,   72,   12,
                   103666:  /*   630 */   618,  617,  616,  202,  210,  621,  546,  469,  422,  319,
                   103667:  /*   640 */   148,   56,   57,   47,  582,  581,  583,  583,   54,   54,
                   103668:  /*   650 */    55,   55,   55,   55,  338,   53,   53,   53,   53,   52,
                   103669:  /*   660 */    52,   51,   51,   51,   50,  238,  313,  600,  600,  411,
                   103670:  /*   670 */    39,   21,   37,  170,  237,  875,  411,  572,  572,  201,
                   103671:  /*   680 */   144,  473,  538,  331,  414,  474,  143,  146,  630,  628,
                   103672:  /*   690 */   334,  414,  353,  601,   68,  168,  590,  584,  132,  365,
                   103673:  /*   700 */   601,   96,  307,  423,  530,  336,   49,   46,  147,  568,
                   103674:  /*   710 */   406,  216,  549,  360,  529,   56,   57,   47,  582,  581,
                   103675:  /*   720 */   583,  583,   54,   54,   55,   55,   55,   55,  411,   53,
                   103676:  /*   730 */    53,   53,   53,   52,   52,   51,   51,   51,   50,  238,
                   103677:  /*   740 */   313,  411,  605,  414,  484,  510,  172,  422,  597,  318,
                   103678:  /*   750 */   496,  485,  601,   99,  411,  142,  414,  411,  231,  411,
                   103679:  /*   760 */   540,  411,  359,  629,    2,  601,   97,  426,  308,  414,
                   103680:  /*   770 */   590,  584,  414,   20,  414,  621,  414,  621,  601,  106,
                   103681:  /*   780 */   503,  601,  105,  601,  108,  601,  109,  204,   28,   56,
                   103682:  /*   790 */    57,   47,  582,  581,  583,  583,   54,   54,   55,   55,
                   103683:  /*   800 */    55,   55,  411,   53,   53,   53,   53,   52,   52,   51,
                   103684:  /*   810 */    51,   51,   50,  238,  313,  411,  597,  414,  411,  276,
                   103685:  /*   820 */   214,  600,  411,  366,  213,  381,  601,  134,  274,  500,
                   103686:  /*   830 */   414,  167,  130,  414,  621,  411,  354,  414,  376,  601,
                   103687:  /*   840 */   135,  129,  601,  100,  590,  584,  601,  104,  522,  521,
                   103688:  /*   850 */   414,  621,  224,  273,  600,  167,  327,  282,  600,  601,
                   103689:  /*   860 */   103,  468,  521,   56,   57,   47,  582,  581,  583,  583,
                   103690:  /*   870 */    54,   54,   55,   55,   55,   55,  411,   53,   53,   53,
                   103691:  /*   880 */    53,   52,   52,   51,   51,   51,   50,  238,  313,  411,
                   103692:  /*   890 */    27,  414,  411,  375,  276,  167,  359,  544,   50,  238,
                   103693:  /*   900 */   601,   95,  128,  223,  414,  411,  165,  414,  411,  621,
                   103694:  /*   910 */   411,  621,  612,  601,  102,  372,  601,   76,  590,  584,
                   103695:  /*   920 */   414,  570,  236,  414,  470,  414,  167,  621,  188,  601,
                   103696:  /*   930 */    98,  225,  601,  138,  601,  137,  232,   56,   45,   47,
                   103697:  /*   940 */   582,  581,  583,  583,   54,   54,   55,   55,   55,   55,
                   103698:  /*   950 */   411,   53,   53,   53,   53,   52,   52,   51,   51,   51,
                   103699:  /*   960 */    50,  238,  313,  276,  276,  414,  411,  276,  544,  459,
                   103700:  /*   970 */   359,  171,  209,  479,  601,  136,  628,  334,  621,  621,
                   103701:  /*   980 */   125,  414,  621,  368,  411,  621,  257,  540,  589,  588,
                   103702:  /*   990 */   601,   75,  590,  584,  458,  446,   23,   23,  124,  414,
                   103703:  /*  1000 */   326,  325,  621,  427,  324,  309,  600,  288,  601,   92,
                   103704:  /*  1010 */   586,  585,   57,   47,  582,  581,  583,  583,   54,   54,
                   103705:  /*  1020 */    55,   55,   55,   55,  411,   53,   53,   53,   53,   52,
                   103706:  /*  1030 */    52,   51,   51,   51,   50,  238,  313,  587,  411,  414,
                   103707:  /*  1040 */   411,  207,  611,  476,  171,  472,  160,  123,  601,   91,
                   103708:  /*  1050 */   323,  261,   15,  414,  464,  414,  411,  621,  411,  354,
                   103709:  /*  1060 */   222,  411,  601,   74,  601,   90,  590,  584,  159,  264,
                   103710:  /*  1070 */   158,  414,  461,  414,  621,  600,  414,  121,  120,   25,
                   103711:  /*  1080 */   601,   89,  601,  101,  621,  601,   88,   47,  582,  581,
                   103712:  /*  1090 */   583,  583,   54,   54,   55,   55,   55,   55,  544,   53,
                   103713:  /*  1100 */    53,   53,   53,   52,   52,   51,   51,   51,   50,  238,
                   103714:  /*  1110 */    43,  405,  263,    3,  610,  264,  140,  415,  622,   24,
                   103715:  /*  1120 */   410,   11,  456,  594,  118,  155,  219,  452,  408,  621,
                   103716:  /*  1130 */   621,  621,  156,   43,  405,  621,    3,  286,  621,  113,
                   103717:  /*  1140 */   415,  622,  111,  445,  411,  400,  557,  403,  545,   10,
                   103718:  /*  1150 */   411,  408,  264,  110,  205,  436,  541,  566,  453,  414,
                   103719:  /*  1160 */   621,  621,   63,  621,  435,  414,  411,  621,  601,   94,
                   103720:  /*  1170 */   403,  621,  411,  337,  601,   86,  150,   40,   41,  534,
                   103721:  /*  1180 */   566,  414,  242,  264,   42,  413,  412,  414,  600,  595,
                   103722:  /*  1190 */   601,   85,  191,  333,  107,  451,  601,   84,  621,  539,
                   103723:  /*  1200 */    40,   41,  420,  230,  411,  149,  316,   42,  413,  412,
                   103724:  /*  1210 */   398,  127,  595,  315,  621,  399,  278,  625,  181,  414,
                   103725:  /*  1220 */   593,  593,  593,  592,  591,   14,  450,  411,  601,   71,
                   103726:  /*  1230 */   240,  621,   43,  405,  264,    3,  615,  180,  264,  415,
                   103727:  /*  1240 */   622,  614,  414,  593,  593,  593,  592,  591,   14,  621,
                   103728:  /*  1250 */   408,  601,   70,  621,  417,   33,  405,  613,    3,  411,
                   103729:  /*  1260 */   264,  411,  415,  622,  418,  626,  178,  509,    8,  403,
                   103730:  /*  1270 */   241,  416,  126,  408,  414,  621,  414,  449,  208,  566,
                   103731:  /*  1280 */   240,  221,  621,  601,   83,  601,   82,  599,  297,  277,
                   103732:  /*  1290 */   296,   30,  403,   31,  395,  264,  295,  397,  489,   40,
                   103733:  /*  1300 */    41,  411,  566,  220,  621,  294,   42,  413,  412,  271,
                   103734:  /*  1310 */   621,  595,  600,  621,   59,   60,  414,  269,  267,  623,
                   103735:  /*  1320 */   622,   36,   40,   41,  621,  601,   81,  598,  235,   42,
                   103736:  /*  1330 */   413,  412,  621,  621,  595,  265,  344,  411,  248,  556,
                   103737:  /*  1340 */   173,  185,  593,  593,  593,  592,  591,   14,  218,   29,
                   103738:  /*  1350 */   621,  543,  414,  305,  304,  303,  179,  301,  411,  566,
                   103739:  /*  1360 */   454,  601,   80,  289,  335,  593,  593,  593,  592,  591,
                   103740:  /*  1370 */    14,  411,  287,  414,  151,  392,  246,  260,  411,  196,
                   103741:  /*  1380 */   195,  523,  601,   69,  411,  245,  414,  526,  537,  285,
                   103742:  /*  1390 */   389,  595,  621,  414,  536,  601,   17,  362,  153,  414,
                   103743:  /*  1400 */   466,  463,  601,   78,  154,  414,  462,  152,  601,   77,
                   103744:  /*  1410 */   355,  255,  621,  455,  601,    9,  621,  386,  444,  517,
                   103745:  /*  1420 */   247,  621,  593,  593,  593,  621,  621,  244,  621,  243,
                   103746:  /*  1430 */   430,  518,  292,  621,  329,  621,  145,  393,  280,  513,
                   103747:  /*  1440 */   291,  131,  621,  514,  621,  621,  311,  621,  259,  346,
                   103748:  /*  1450 */   249,  621,  621,  229,  314,  621,  228,  512,  227,  240,
                   103749:  /*  1460 */   494,  488,  310,  164,  487,  486,  373,  480,  163,  262,
                   103750:  /*  1470 */   369,  371,  162,   26,  212,  478,  477,  161,  141,  363,
                   103751:  /*  1480 */   467,  122,  339,  187,  119,  348,  347,  117,  116,  115,
                   103752:  /*  1490 */   114,  112,  182,  457,  320,   22,  433,  432,  448,   19,
                   103753:  /*  1500 */   609,  431,  428,   62,  193,  596,  573,  298,  555,  552,
                   103754:  /*  1510 */   571,  404,  290,  380,  498,  510,  495,  306,  281,  499,
                   103755:  /*  1520 */   250,    5,  497,  460,  345,  447,  569,  550,  238,  299,
                   103756:  /*  1530 */   527,  525,  508,  961,  502,  501,  961,  401,  961,  211,
                   103757:  /*  1540 */   490,  356,  256,  961,  483,  961,  961,  961,  961,  961,
                   103758:  /*  1550 */   961,  961,  961,  961,  961,  961,  370,
                   103759: };
                   103760: static const YYCODETYPE yy_lookahead[] = {
                   103761:  /*     0 */    19,  142,  143,  144,  145,   24,    1,   26,   77,   78,
                   103762:  /*    10 */    79,   80,   81,   82,   83,   84,   85,   86,   87,   88,
                   103763:  /*    20 */    89,   90,   91,   92,   15,   98,   26,   27,    7,    8,
                   103764:  /*    30 */    49,   50,   77,   78,   79,   80,  109,   82,   83,   84,
                   103765:  /*    40 */    85,   86,   87,   88,   89,   90,   91,   92,   22,   68,
                   103766:  /*    50 */    69,   70,   71,   72,   73,   74,   75,   76,   77,   78,
                   103767:  /*    60 */    79,   80,   23,   82,   83,   84,   85,   86,   87,   88,
                   103768:  /*    70 */    89,   90,   91,   92,   19,   94,  112,   19,  114,  115,
                   103769:  /*    80 */    25,   82,   83,   84,   85,   86,   87,   88,   89,   90,
                   103770:  /*    90 */    91,   92,   19,   22,   94,   95,   96,  150,  150,   99,
                   103771:  /*   100 */   100,  101,   76,  150,   49,   50,  105,  106,  107,   54,
                   103772:  /*   110 */   110,  158,  165,  165,  161,  162,   26,   27,  165,  113,
                   103773:  /*   120 */    16,  174,  175,   68,   69,   70,   71,   72,   73,   74,
                   103774:  /*   130 */    75,   76,   77,   78,   79,   80,  118,   82,   83,   84,
                   103775:  /*   140 */    85,   86,   87,   88,   89,   90,   91,   92,   19,   23,
                   103776:  /*   150 */    92,   97,   98,   24,   96,   97,   98,   99,  100,  101,
                   103777:  /*   160 */   102,   25,   97,  216,   60,   92,   62,  109,  221,   25,
                   103778:  /*   170 */    97,   98,   99,  100,  101,  102,   86,   87,   49,   50,
                   103779:  /*   180 */   118,  116,  109,   25,   94,   95,   32,   97,   88,   89,
                   103780:  /*   190 */    90,   91,   92,  128,  104,   41,  106,   68,   69,   70,
                   103781:  /*   200 */    71,   72,   73,   74,   75,   76,   77,   78,   79,   80,
                   103782:  /*   210 */    11,   82,   83,   84,   85,   86,   87,   88,   89,   90,
                   103783:  /*   220 */    91,   92,   19,   19,   86,   87,   88,   89,   90,   91,
                   103784:  /*   230 */    92,   27,   96,  150,   66,   99,  100,  101,  112,  150,
                   103785:  /*   240 */   114,  115,  138,  150,  161,  162,  110,  103,  165,  222,
                   103786:  /*   250 */   223,  224,   49,   50,  165,   22,   57,   24,  165,  170,
                   103787:  /*   260 */   171,  118,   94,  170,  171,   23,   98,   25,  185,  186,
                   103788:  /*   270 */   243,   68,   69,   70,   71,   72,   73,   74,   75,   76,
                   103789:  /*   280 */    77,   78,   79,   80,  126,   82,   83,   84,   85,   86,
                   103790:  /*   290 */    87,   88,   89,   90,   91,   92,   19,  129,  130,  131,
                   103791:  /*   300 */    88,   23,  172,  173,  105,  106,  107,  150,   22,   26,
                   103792:  /*   310 */    27,  181,   26,   27,   22,  116,   26,   27,   26,  230,
                   103793:  /*   320 */   231,  197,  165,  230,  231,  113,   49,   50,  204,  117,
                   103794:  /*   330 */    96,  174,  175,   99,  100,  101,   22,   26,   27,  136,
                   103795:  /*   340 */    26,   27,  118,   16,  110,   68,   69,   70,   71,   72,
                   103796:  /*   350 */    73,   74,   75,   76,   77,   78,   79,   80,  118,   82,
                   103797:  /*   360 */    83,   84,   85,   86,   87,   88,   89,   90,   91,   92,
                   103798:  /*   370 */    19,  214,  215,  150,   23,   23,  155,   94,   95,   22,
                   103799:  /*   380 */    94,   95,  116,  160,   94,   95,   94,   60,  165,   62,
                   103800:  /*   390 */   112,   26,  114,  115,  128,   23,   36,  174,  175,   88,
                   103801:  /*   400 */    49,   50,   57,  120,   22,   94,   95,   23,   94,   95,
                   103802:  /*   410 */   120,   51,   25,  136,  169,  170,  171,  194,   58,   68,
                   103803:  /*   420 */    69,   70,   71,   72,   73,   74,   75,   76,   77,   78,
                   103804:  /*   430 */    79,   80,   23,   82,   83,   84,   85,   86,   87,   88,
                   103805:  /*   440 */    89,   90,   91,   92,   19,  150,   12,   12,   23,  228,
                   103806:  /*   450 */   105,  106,  107,   23,  233,   25,  165,   19,  150,   94,
                   103807:  /*   460 */   165,  116,   28,   28,  112,  174,  114,  115,  108,  174,
                   103808:  /*   470 */   175,   26,   27,  165,   49,   50,  231,   11,   44,   44,
                   103809:  /*   480 */    46,   46,  174,  175,  112,  160,  114,  115,   50,   22,
                   103810:  /*   490 */    23,   57,   25,   68,   69,   70,   71,   72,   73,   74,
                   103811:  /*   500 */    75,   76,   77,   78,   79,   80,  119,   82,   83,   84,
                   103812:  /*   510 */    85,   86,   87,   88,   89,   90,   91,   92,   19,  194,
                   103813:  /*   520 */   225,   23,   23,  215,   19,   95,  105,  106,  107,  150,
                   103814:  /*   530 */    23,  150,   27,   23,   67,   25,  150,  206,  207,   94,
                   103815:  /*   540 */    95,  166,  104,  218,  165,   22,  165,  109,   49,   50,
                   103816:  /*   550 */   120,  165,   25,  174,  175,  174,  175,   23,   21,  234,
                   103817:  /*   560 */   174,  175,   22,   23,  239,   25,   25,   68,   69,   70,
                   103818:  /*   570 */    71,   72,   73,   74,   75,   76,   77,   78,   79,   80,
                   103819:  /*   580 */   205,   82,   83,   84,   85,   86,   87,   88,   89,   90,
                   103820:  /*   590 */    91,   92,   19,   22,   23,  216,   23,  222,  223,  224,
                   103821:  /*   600 */    63,  220,   35,  150,  150,  163,  220,   67,  166,  167,
                   103822:  /*   610 */   168,  150,  169,  170,  171,  161,  162,   25,  165,  165,
                   103823:  /*   620 */   150,  113,   49,   50,   25,  117,  165,  174,  175,   35,
                   103824:  /*   630 */     7,    8,    9,  160,  160,  165,  120,  100,   67,  247,
                   103825:  /*   640 */   248,   68,   69,   70,   71,   72,   73,   74,   75,   76,
                   103826:  /*   650 */    77,   78,   79,   80,  193,   82,   83,   84,   85,   86,
                   103827:  /*   660 */    87,   88,   89,   90,   91,   92,   19,  194,  194,  150,
                   103828:  /*   670 */   135,   24,  137,   35,  231,  138,  150,  129,  130,  206,
                   103829:  /*   680 */   207,   30,   27,  213,  165,   34,  118,   95,    0,    1,
                   103830:  /*   690 */     2,  165,  218,  174,  175,   50,   49,   50,   22,   48,
                   103831:  /*   700 */   174,  175,   22,   23,   23,  244,  222,  223,  224,  166,
                   103832:  /*   710 */   167,  168,  120,  239,   23,   68,   69,   70,   71,   72,
                   103833:  /*   720 */    73,   74,   75,   76,   77,   78,   79,   80,  150,   82,
                   103834:  /*   730 */    83,   84,   85,   86,   87,   88,   89,   90,   91,   92,
                   103835:  /*   740 */    19,  150,  173,  165,  181,  182,   24,   67,   26,  104,
                   103836:  /*   750 */   181,  188,  174,  175,  150,   39,  165,  150,   52,  150,
                   103837:  /*   760 */   150,  150,  150,  144,  145,  174,  175,  249,  250,  165,
                   103838:  /*   770 */    49,   50,  165,   52,  165,  165,  165,  165,  174,  175,
                   103839:  /*   780 */    29,  174,  175,  174,  175,  174,  175,  160,   22,   68,
                   103840:  /*   790 */    69,   70,   71,   72,   73,   74,   75,   76,   77,   78,
                   103841:  /*   800 */    79,   80,  150,   82,   83,   84,   85,   86,   87,   88,
                   103842:  /*   810 */    89,   90,   91,   92,   19,  150,   94,  165,  150,  150,
                   103843:  /*   820 */   160,  194,  150,  213,  160,   52,  174,  175,   23,   23,
                   103844:  /*   830 */   165,   25,   22,  165,  165,  150,  150,  165,   52,  174,
                   103845:  /*   840 */   175,   22,  174,  175,   49,   50,  174,  175,  190,  191,
                   103846:  /*   850 */   165,  165,  240,   23,  194,   25,  187,  109,  194,  174,
                   103847:  /*   860 */   175,  190,  191,   68,   69,   70,   71,   72,   73,   74,
                   103848:  /*   870 */    75,   76,   77,   78,   79,   80,  150,   82,   83,   84,
                   103849:  /*   880 */    85,   86,   87,   88,   89,   90,   91,   92,   19,  150,
                   103850:  /*   890 */    22,  165,  150,   23,  150,   25,  150,  166,   91,   92,
                   103851:  /*   900 */   174,  175,   22,  217,  165,  150,  102,  165,  150,  165,
                   103852:  /*   910 */   150,  165,  150,  174,  175,   19,  174,  175,   49,   50,
                   103853:  /*   920 */   165,   86,   87,  165,   23,  165,   25,  165,   24,  174,
                   103854:  /*   930 */   175,  187,  174,  175,  174,  175,  205,   68,   69,   70,
                   103855:  /*   940 */    71,   72,   73,   74,   75,   76,   77,   78,   79,   80,
                   103856:  /*   950 */   150,   82,   83,   84,   85,   86,   87,   88,   89,   90,
                   103857:  /*   960 */    91,   92,   19,  150,  150,  165,  150,  150,  166,   23,
                   103858:  /*   970 */   150,   25,  160,   20,  174,  175,    1,    2,  165,  165,
                   103859:  /*   980 */   104,  165,  165,   43,  150,  165,  240,  150,   49,   50,
                   103860:  /*   990 */   174,  175,   49,   50,   23,   23,   25,   25,   53,  165,
                   103861:  /*  1000 */   187,  187,  165,   23,  187,   25,  194,  205,  174,  175,
                   103862:  /*  1010 */    71,   72,   69,   70,   71,   72,   73,   74,   75,   76,
                   103863:  /*  1020 */    77,   78,   79,   80,  150,   82,   83,   84,   85,   86,
                   103864:  /*  1030 */    87,   88,   89,   90,   91,   92,   19,   98,  150,  165,
                   103865:  /*  1040 */   150,  160,  150,   59,   25,   53,  104,   22,  174,  175,
                   103866:  /*  1050 */   213,  138,    5,  165,    1,  165,  150,  165,  150,  150,
                   103867:  /*  1060 */   240,  150,  174,  175,  174,  175,   49,   50,  118,  150,
                   103868:  /*  1070 */    35,  165,   27,  165,  165,  194,  165,  108,  127,   76,
                   103869:  /*  1080 */   174,  175,  174,  175,  165,  174,  175,   70,   71,   72,
                   103870:  /*  1090 */    73,   74,   75,   76,   77,   78,   79,   80,  166,   82,
                   103871:  /*  1100 */    83,   84,   85,   86,   87,   88,   89,   90,   91,   92,
                   103872:  /*  1110 */    19,   20,  193,   22,  150,  150,  150,   26,   27,   76,
                   103873:  /*  1120 */   150,   22,    1,  150,  119,  121,  217,   20,   37,  165,
                   103874:  /*  1130 */   165,  165,   16,   19,   20,  165,   22,  205,  165,  119,
                   103875:  /*  1140 */    26,   27,  108,  128,  150,  150,  150,   56,  150,   22,
                   103876:  /*  1150 */   150,   37,  150,  127,  160,   23,  150,   66,  193,  165,
                   103877:  /*  1160 */   165,  165,   16,  165,   23,  165,  150,  165,  174,  175,
                   103878:  /*  1170 */    56,  165,  150,   65,  174,  175,   15,   86,   87,   88,
                   103879:  /*  1180 */    66,  165,  140,  150,   93,   94,   95,  165,  194,   98,
                   103880:  /*  1190 */   174,  175,   22,    3,  164,  193,  174,  175,  165,  150,
                   103881:  /*  1200 */    86,   87,    4,  180,  150,  248,  251,   93,   94,   95,
                   103882:  /*  1210 */   216,  180,   98,  251,  165,  221,  150,  149,    6,  165,
                   103883:  /*  1220 */   129,  130,  131,  132,  133,  134,  193,  150,  174,  175,
                   103884:  /*  1230 */   116,  165,   19,   20,  150,   22,  149,  151,  150,   26,
                   103885:  /*  1240 */    27,  149,  165,  129,  130,  131,  132,  133,  134,  165,
                   103886:  /*  1250 */    37,  174,  175,  165,  149,   19,   20,   13,   22,  150,
                   103887:  /*  1260 */   150,  150,   26,   27,  146,  147,  151,  150,   25,   56,
                   103888:  /*  1270 */   152,  159,  154,   37,  165,  165,  165,  193,  160,   66,
                   103889:  /*  1280 */   116,  193,  165,  174,  175,  174,  175,  194,  199,  150,
                   103890:  /*  1290 */   200,  126,   56,  124,  123,  150,  201,  122,  150,   86,
                   103891:  /*  1300 */    87,  150,   66,  193,  165,  202,   93,   94,   95,  150,
                   103892:  /*  1310 */   165,   98,  194,  165,  125,   22,  165,  150,  150,   26,
                   103893:  /*  1320 */    27,  135,   86,   87,  165,  174,  175,  203,  226,   93,
                   103894:  /*  1330 */    94,   95,  165,  165,   98,  150,  218,  150,  193,  157,
                   103895:  /*  1340 */   118,  157,  129,  130,  131,  132,  133,  134,    5,  104,
                   103896:  /*  1350 */   165,  211,  165,   10,   11,   12,   13,   14,  150,   66,
                   103897:  /*  1360 */    17,  174,  175,  210,  246,  129,  130,  131,  132,  133,
                   103898:  /*  1370 */   134,  150,  210,  165,   31,  121,   33,  150,  150,   86,
                   103899:  /*  1380 */    87,  176,  174,  175,  150,   42,  165,   94,  211,  210,
                   103900:  /*  1390 */   150,   98,  165,  165,  211,  174,  175,  150,   55,  165,
                   103901:  /*  1400 */    57,  150,  174,  175,   61,  165,  150,   64,  174,  175,
                   103902:  /*  1410 */   150,  150,  165,  150,  174,  175,  165,  104,  150,  184,
                   103903:  /*  1420 */   150,  165,  129,  130,  131,  165,  165,  150,  165,  150,
                   103904:  /*  1430 */   150,  176,  150,  165,   47,  165,  150,  150,  176,  103,
                   103905:  /*  1440 */   150,   22,  165,  178,  165,  165,  179,  165,  105,  106,
                   103906:  /*  1450 */   107,  165,  165,  229,  111,  165,   92,  176,  229,  116,
                   103907:  /*  1460 */   184,  176,  179,  156,  176,  176,   18,  157,  156,  237,
                   103908:  /*  1470 */    45,  157,  156,  135,  157,  157,  238,  156,   68,  157,
                   103909:  /*  1480 */   189,  189,  139,  219,   22,  157,   18,  192,  192,  192,
                   103910:  /*  1490 */   192,  189,  219,  199,  157,  242,   40,  157,  199,  242,
                   103911:  /*  1500 */   153,  157,   38,  245,  196,  166,  232,  198,  177,  177,
                   103912:  /*  1510 */   232,  227,  209,  178,  166,  182,  166,  148,  177,  177,
                   103913:  /*  1520 */   209,  196,  177,  199,  209,  199,  166,  208,   92,  195,
                   103914:  /*  1530 */   174,  174,  183,  252,  183,  183,  252,  191,  252,  235,
                   103915:  /*  1540 */   186,  241,  241,  252,  186,  252,  252,  252,  252,  252,
                   103916:  /*  1550 */   252,  252,  252,  252,  252,  252,  236,
                   103917: };
                   103918: #define YY_SHIFT_USE_DFLT (-74)
                   103919: #define YY_SHIFT_COUNT (418)
                   103920: #define YY_SHIFT_MIN   (-73)
                   103921: #define YY_SHIFT_MAX   (1468)
                   103922: static const short yy_shift_ofst[] = {
                   103923:  /*     0 */   975, 1114, 1343, 1114, 1213, 1213,   90,   90,    0,  -19,
                   103924:  /*    10 */  1213, 1213, 1213, 1213, 1213,  345,  445,  721, 1091, 1213,
                   103925:  /*    20 */  1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213,
                   103926:  /*    30 */  1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213,
                   103927:  /*    40 */  1213, 1213, 1213, 1213, 1213, 1213, 1213, 1236, 1213, 1213,
                   103928:  /*    50 */  1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213,
                   103929:  /*    60 */  1213,  199,  445,  445,  835,  835,  365, 1164,   55,  647,
                   103930:  /*    70 */   573,  499,  425,  351,  277,  203,  129,  795,  795,  795,
                   103931:  /*    80 */   795,  795,  795,  795,  795,  795,  795,  795,  795,  795,
                   103932:  /*    90 */   795,  795,  795,  795,  795,  869,  795,  943, 1017, 1017,
                   103933:  /*   100 */   -69,  -45,  -45,  -45,  -45,  -45,   -1,   58,  138,  100,
                   103934:  /*   110 */   445,  445,  445,  445,  445,  445,  445,  445,  445,  445,
                   103935:  /*   120 */   445,  445,  445,  445,  445,  445,  537,  438,  445,  445,
                   103936:  /*   130 */   445,  445,  445,  365,  807, 1436,  -74,  -74,  -74, 1293,
                   103937:  /*   140 */    73,  434,  434,  311,  314,  290,  283,  286,  540,  467,
                   103938:  /*   150 */   445,  445,  445,  445,  445,  445,  445,  445,  445,  445,
                   103939:  /*   160 */   445,  445,  445,  445,  445,  445,  445,  445,  445,  445,
                   103940:  /*   170 */   445,  445,  445,  445,  445,  445,  445,  445,  445,  445,
                   103941:  /*   180 */   445,  445,   65,  722,  722,  722,  688,  266, 1164, 1164,
                   103942:  /*   190 */  1164,  -74,  -74,  -74,  136,  168,  168,  234,  360,  360,
                   103943:  /*   200 */   360,  430,  372,  435,  352,  278,  126,  -36,  -36,  -36,
                   103944:  /*   210 */   -36,  421,  651,  -36,  -36,  592,  292,  212,  623,  158,
                   103945:  /*   220 */   204,  204,  505,  158,  505,  144,  365,  154,  365,  154,
                   103946:  /*   230 */   645,  154,  204,  154,  154,  535,  548,  548,  365,  387,
                   103947:  /*   240 */   508,  233, 1464, 1222, 1222, 1456, 1456, 1222, 1462, 1410,
                   103948:  /*   250 */  1165, 1468, 1468, 1468, 1468, 1222, 1165, 1462, 1410, 1410,
                   103949:  /*   260 */  1222, 1448, 1338, 1425, 1222, 1222, 1448, 1222, 1448, 1222,
                   103950:  /*   270 */  1448, 1419, 1313, 1313, 1313, 1387, 1364, 1364, 1419, 1313,
                   103951:  /*   280 */  1336, 1313, 1387, 1313, 1313, 1254, 1245, 1254, 1245, 1254,
                   103952:  /*   290 */  1245, 1222, 1222, 1186, 1189, 1175, 1169, 1171, 1165, 1164,
                   103953:  /*   300 */  1243, 1244, 1244, 1212, 1212, 1212, 1212,  -74,  -74,  -74,
                   103954:  /*   310 */   -74,  -74,  -74,  939,  104,  680,  571,  327,    1,  980,
                   103955:  /*   320 */    26,  972,  971,  946,  901,  870,  830,  806,   54,   21,
                   103956:  /*   330 */   -73,  510,  242, 1198, 1190, 1170, 1042, 1161, 1108, 1146,
                   103957:  /*   340 */  1141, 1132, 1015, 1127, 1026, 1034, 1020, 1107, 1004, 1116,
                   103958:  /*   350 */  1121, 1005, 1099,  951, 1043, 1003,  969, 1045, 1035,  950,
                   103959:  /*   360 */  1053, 1047, 1025,  942,  913,  992, 1019,  945,  984,  940,
                   103960:  /*   370 */   876,  904,  953,  896,  748,  804,  880,  786,  868,  819,
                   103961:  /*   380 */   805,  810,  773,  751,  766,  706,  716,  691,  681,  568,
                   103962:  /*   390 */   655,  638,  676,  516,  541,  594,  599,  567,  541,  534,
                   103963:  /*   400 */   507,  527,  498,  523,  466,  382,  409,  384,  357,    6,
                   103964:  /*   410 */   240,  224,  143,   62,   18,   71,   39,    9,    5,
                   103965: };
                   103966: #define YY_REDUCE_USE_DFLT (-142)
                   103967: #define YY_REDUCE_COUNT (312)
                   103968: #define YY_REDUCE_MIN   (-141)
                   103969: #define YY_REDUCE_MAX   (1369)
                   103970: static const short yy_reduce_ofst[] = {
                   103971:  /*     0 */  -141,  994, 1118,  223,  157,  -53,   93,   89,   83,  375,
                   103972:  /*    10 */   386,  381,  379,  308,  295,  325,  -47,   27, 1240, 1234,
                   103973:  /*    20 */  1228, 1221, 1208, 1187, 1151, 1111, 1109, 1077, 1054, 1022,
                   103974:  /*    30 */  1016, 1000,  911,  908,  906,  890,  888,  874,  834,  816,
                   103975:  /*    40 */   800,  760,  758,  755,  742,  739,  726,  685,  672,  668,
                   103976:  /*    50 */   665,  652,  611,  609,  607,  604,  591,  578,  526,  519,
                   103977:  /*    60 */   453,  474,  454,  461,  443,  245,  442,  473,  484,  484,
                   103978:  /*    70 */   484,  484,  484,  484,  484,  484,  484,  484,  484,  484,
                   103979:  /*    80 */   484,  484,  484,  484,  484,  484,  484,  484,  484,  484,
                   103980:  /*    90 */   484,  484,  484,  484,  484,  484,  484,  484,  484,  484,
                   103981:  /*   100 */   484,  484,  484,  484,  484,  484,  484,  130,  484,  484,
                   103982:  /*   110 */  1145,  909, 1110, 1088, 1084, 1033, 1002,  965,  820,  837,
                   103983:  /*   120 */   746,  686,  612,  817,  610,  919,  221,  563,  814,  813,
                   103984:  /*   130 */   744,  669,  470,  543,  484,  484,  484,  484,  484,  291,
                   103985:  /*   140 */   569,  671,  658,  970, 1290, 1287, 1286, 1282,  518,  518,
                   103986:  /*   150 */  1280, 1279, 1277, 1270, 1268, 1263, 1261, 1260, 1256, 1251,
                   103987:  /*   160 */  1247, 1227, 1185, 1168, 1167, 1159, 1148, 1139, 1117, 1066,
                   103988:  /*   170 */  1049, 1006,  998,  996,  995,  973,  970,  966,  964,  892,
                   103989:  /*   180 */   762,  -52,  881,  932,  802,  731,  619,  812,  664,  660,
                   103990:  /*   190 */   627,  392,  331,  124, 1358, 1357, 1356, 1354, 1352, 1351,
                   103991:  /*   200 */  1349, 1319, 1334, 1346, 1334, 1334, 1334, 1334, 1334, 1334,
                   103992:  /*   210 */  1334, 1320, 1304, 1334, 1334, 1319, 1360, 1325, 1369, 1326,
                   103993:  /*   220 */  1315, 1311, 1301, 1324, 1300, 1335, 1350, 1345, 1348, 1342,
                   103994:  /*   230 */  1333, 1341, 1303, 1332, 1331, 1284, 1278, 1274, 1339, 1309,
                   103995:  /*   240 */  1308, 1347, 1258, 1344, 1340, 1257, 1253, 1337, 1273, 1302,
                   103996:  /*   250 */  1299, 1298, 1297, 1296, 1295, 1328, 1294, 1264, 1292, 1291,
                   103997:  /*   260 */  1322, 1321, 1238, 1232, 1318, 1317, 1316, 1314, 1312, 1310,
                   103998:  /*   270 */  1307, 1283, 1289, 1288, 1285, 1276, 1229, 1224, 1267, 1281,
                   103999:  /*   280 */  1265, 1262, 1235, 1255, 1205, 1183, 1179, 1177, 1162, 1140,
                   104000:  /*   290 */  1153, 1184, 1182, 1102, 1124, 1103, 1095, 1090, 1089, 1093,
                   104001:  /*   300 */  1112, 1115, 1086, 1105, 1092, 1087, 1068,  962,  955,  957,
                   104002:  /*   310 */  1031, 1023, 1030,
                   104003: };
                   104004: static const YYACTIONTYPE yy_default[] = {
                   104005:  /*     0 */   635,  870,  959,  959,  959,  870,  899,  899,  959,  759,
                   104006:  /*    10 */   959,  959,  959,  959,  868,  959,  959,  933,  959,  959,
                   104007:  /*    20 */   959,  959,  959,  959,  959,  959,  959,  959,  959,  959,
                   104008:  /*    30 */   959,  959,  959,  959,  959,  959,  959,  959,  959,  959,
                   104009:  /*    40 */   959,  959,  959,  959,  959,  959,  959,  959,  959,  959,
                   104010:  /*    50 */   959,  959,  959,  959,  959,  959,  959,  959,  959,  959,
                   104011:  /*    60 */   959,  959,  959,  959,  899,  899,  674,  763,  794,  959,
                   104012:  /*    70 */   959,  959,  959,  959,  959,  959,  959,  932,  934,  809,
                   104013:  /*    80 */   808,  802,  801,  912,  774,  799,  792,  785,  796,  871,
                   104014:  /*    90 */   864,  865,  863,  867,  872,  959,  795,  831,  848,  830,
                   104015:  /*   100 */   842,  847,  854,  846,  843,  833,  832,  666,  834,  835,
                   104016:  /*   110 */   959,  959,  959,  959,  959,  959,  959,  959,  959,  959,
                   104017:  /*   120 */   959,  959,  959,  959,  959,  959,  661,  728,  959,  959,
                   104018:  /*   130 */   959,  959,  959,  959,  836,  837,  851,  850,  849,  959,
                   104019:  /*   140 */   959,  959,  959,  959,  959,  959,  959,  959,  959,  959,
                   104020:  /*   150 */   959,  939,  937,  959,  883,  959,  959,  959,  959,  959,
                   104021:  /*   160 */   959,  959,  959,  959,  959,  959,  959,  959,  959,  959,
                   104022:  /*   170 */   959,  959,  959,  959,  959,  959,  959,  959,  959,  959,
                   104023:  /*   180 */   959,  641,  959,  759,  759,  759,  635,  959,  959,  959,
                   104024:  /*   190 */   959,  951,  763,  753,  719,  959,  959,  959,  959,  959,
                   104025:  /*   200 */   959,  959,  959,  959,  959,  959,  959,  804,  742,  922,
                   104026:  /*   210 */   924,  959,  905,  740,  663,  761,  676,  751,  643,  798,
                   104027:  /*   220 */   776,  776,  917,  798,  917,  700,  959,  788,  959,  788,
                   104028:  /*   230 */   697,  788,  776,  788,  788,  866,  959,  959,  959,  760,
                   104029:  /*   240 */   751,  959,  944,  767,  767,  936,  936,  767,  810,  732,
                   104030:  /*   250 */   798,  739,  739,  739,  739,  767,  798,  810,  732,  732,
                   104031:  /*   260 */   767,  658,  911,  909,  767,  767,  658,  767,  658,  767,
                   104032:  /*   270 */   658,  876,  730,  730,  730,  715,  880,  880,  876,  730,
                   104033:  /*   280 */   700,  730,  715,  730,  730,  780,  775,  780,  775,  780,
                   104034:  /*   290 */   775,  767,  767,  959,  793,  781,  791,  789,  798,  959,
                   104035:  /*   300 */   718,  651,  651,  640,  640,  640,  640,  956,  956,  951,
                   104036:  /*   310 */   702,  702,  684,  959,  959,  959,  959,  959,  959,  959,
                   104037:  /*   320 */   885,  959,  959,  959,  959,  959,  959,  959,  959,  959,
                   104038:  /*   330 */   959,  959,  959,  959,  636,  946,  959,  959,  943,  959,
                   104039:  /*   340 */   959,  959,  959,  959,  959,  959,  959,  959,  959,  959,
                   104040:  /*   350 */   959,  959,  959,  959,  959,  959,  959,  959,  959,  915,
                   104041:  /*   360 */   959,  959,  959,  959,  959,  959,  908,  907,  959,  959,
                   104042:  /*   370 */   959,  959,  959,  959,  959,  959,  959,  959,  959,  959,
                   104043:  /*   380 */   959,  959,  959,  959,  959,  959,  959,  959,  959,  959,
                   104044:  /*   390 */   959,  959,  959,  959,  790,  959,  782,  959,  869,  959,
                   104045:  /*   400 */   959,  959,  959,  959,  959,  959,  959,  959,  959,  745,
                   104046:  /*   410 */   819,  959,  818,  822,  817,  668,  959,  649,  959,  632,
                   104047:  /*   420 */   637,  955,  958,  957,  954,  953,  952,  947,  945,  942,
                   104048:  /*   430 */   941,  940,  938,  935,  931,  889,  887,  894,  893,  892,
                   104049:  /*   440 */   891,  890,  888,  886,  884,  805,  803,  800,  797,  930,
                   104050:  /*   450 */   882,  741,  738,  737,  657,  948,  914,  923,  921,  811,
                   104051:  /*   460 */   920,  919,  918,  916,  913,  900,  807,  806,  733,  874,
                   104052:  /*   470 */   873,  660,  904,  903,  902,  906,  910,  901,  769,  659,
                   104053:  /*   480 */   656,  665,  722,  721,  729,  727,  726,  725,  724,  723,
                   104054:  /*   490 */   720,  667,  675,  686,  714,  699,  698,  879,  881,  878,
                   104055:  /*   500 */   877,  707,  706,  712,  711,  710,  709,  708,  705,  704,
                   104056:  /*   510 */   703,  696,  695,  701,  694,  717,  716,  713,  693,  736,
                   104057:  /*   520 */   735,  734,  731,  692,  691,  690,  822,  689,  688,  828,
                   104058:  /*   530 */   827,  815,  858,  756,  755,  754,  766,  765,  778,  777,
                   104059:  /*   540 */   813,  812,  779,  764,  758,  757,  773,  772,  771,  770,
                   104060:  /*   550 */   762,  752,  784,  787,  786,  783,  860,  768,  857,  929,
                   104061:  /*   560 */   928,  927,  926,  925,  862,  861,  829,  826,  679,  680,
                   104062:  /*   570 */   898,  896,  897,  895,  682,  681,  678,  677,  859,  747,
                   104063:  /*   580 */   746,  855,  852,  844,  840,  856,  853,  845,  841,  839,
                   104064:  /*   590 */   838,  824,  823,  821,  820,  816,  825,  670,  748,  744,
                   104065:  /*   600 */   743,  814,  750,  749,  687,  685,  683,  664,  662,  655,
                   104066:  /*   610 */   653,  652,  654,  650,  648,  647,  646,  645,  644,  673,
                   104067:  /*   620 */   672,  671,  669,  668,  642,  639,  638,  634,  633,  631,
                   104068: };
                   104069: 
                   104070: /* The next table maps tokens into fallback tokens.  If a construct
                   104071: ** like the following:
                   104072: ** 
                   104073: **      %fallback ID X Y Z.
                   104074: **
                   104075: ** appears in the grammar, then ID becomes a fallback token for X, Y,
                   104076: ** and Z.  Whenever one of the tokens X, Y, or Z is input to the parser
                   104077: ** but it does not parse, the type of the token is changed to ID and
                   104078: ** the parse is retried before an error is thrown.
                   104079: */
                   104080: #ifdef YYFALLBACK
                   104081: static const YYCODETYPE yyFallback[] = {
                   104082:     0,  /*          $ => nothing */
                   104083:     0,  /*       SEMI => nothing */
                   104084:    26,  /*    EXPLAIN => ID */
                   104085:    26,  /*      QUERY => ID */
                   104086:    26,  /*       PLAN => ID */
                   104087:    26,  /*      BEGIN => ID */
                   104088:     0,  /* TRANSACTION => nothing */
                   104089:    26,  /*   DEFERRED => ID */
                   104090:    26,  /*  IMMEDIATE => ID */
                   104091:    26,  /*  EXCLUSIVE => ID */
                   104092:     0,  /*     COMMIT => nothing */
                   104093:    26,  /*        END => ID */
                   104094:    26,  /*   ROLLBACK => ID */
                   104095:    26,  /*  SAVEPOINT => ID */
                   104096:    26,  /*    RELEASE => ID */
                   104097:     0,  /*         TO => nothing */
                   104098:     0,  /*      TABLE => nothing */
                   104099:     0,  /*     CREATE => nothing */
                   104100:    26,  /*         IF => ID */
                   104101:     0,  /*        NOT => nothing */
                   104102:     0,  /*     EXISTS => nothing */
                   104103:    26,  /*       TEMP => ID */
                   104104:     0,  /*         LP => nothing */
                   104105:     0,  /*         RP => nothing */
                   104106:     0,  /*         AS => nothing */
                   104107:     0,  /*      COMMA => nothing */
                   104108:     0,  /*         ID => nothing */
                   104109:     0,  /*    INDEXED => nothing */
                   104110:    26,  /*      ABORT => ID */
                   104111:    26,  /*     ACTION => ID */
                   104112:    26,  /*      AFTER => ID */
                   104113:    26,  /*    ANALYZE => ID */
                   104114:    26,  /*        ASC => ID */
                   104115:    26,  /*     ATTACH => ID */
                   104116:    26,  /*     BEFORE => ID */
                   104117:    26,  /*         BY => ID */
                   104118:    26,  /*    CASCADE => ID */
                   104119:    26,  /*       CAST => ID */
                   104120:    26,  /*   COLUMNKW => ID */
                   104121:    26,  /*   CONFLICT => ID */
                   104122:    26,  /*   DATABASE => ID */
                   104123:    26,  /*       DESC => ID */
                   104124:    26,  /*     DETACH => ID */
                   104125:    26,  /*       EACH => ID */
                   104126:    26,  /*       FAIL => ID */
                   104127:    26,  /*        FOR => ID */
                   104128:    26,  /*     IGNORE => ID */
                   104129:    26,  /*  INITIALLY => ID */
                   104130:    26,  /*    INSTEAD => ID */
                   104131:    26,  /*    LIKE_KW => ID */
                   104132:    26,  /*      MATCH => ID */
                   104133:    26,  /*         NO => ID */
                   104134:    26,  /*        KEY => ID */
                   104135:    26,  /*         OF => ID */
                   104136:    26,  /*     OFFSET => ID */
                   104137:    26,  /*     PRAGMA => ID */
                   104138:    26,  /*      RAISE => ID */
                   104139:    26,  /*    REPLACE => ID */
                   104140:    26,  /*   RESTRICT => ID */
                   104141:    26,  /*        ROW => ID */
                   104142:    26,  /*    TRIGGER => ID */
                   104143:    26,  /*     VACUUM => ID */
                   104144:    26,  /*       VIEW => ID */
                   104145:    26,  /*    VIRTUAL => ID */
                   104146:    26,  /*    REINDEX => ID */
                   104147:    26,  /*     RENAME => ID */
                   104148:    26,  /*   CTIME_KW => ID */
                   104149: };
                   104150: #endif /* YYFALLBACK */
                   104151: 
                   104152: /* The following structure represents a single element of the
                   104153: ** parser's stack.  Information stored includes:
                   104154: **
                   104155: **   +  The state number for the parser at this level of the stack.
                   104156: **
                   104157: **   +  The value of the token stored at this level of the stack.
                   104158: **      (In other words, the "major" token.)
                   104159: **
                   104160: **   +  The semantic value stored at this level of the stack.  This is
                   104161: **      the information used by the action routines in the grammar.
                   104162: **      It is sometimes called the "minor" token.
                   104163: */
                   104164: struct yyStackEntry {
                   104165:   YYACTIONTYPE stateno;  /* The state-number */
                   104166:   YYCODETYPE major;      /* The major token value.  This is the code
                   104167:                          ** number for the token at this stack level */
                   104168:   YYMINORTYPE minor;     /* The user-supplied minor token value.  This
                   104169:                          ** is the value of the token  */
                   104170: };
                   104171: typedef struct yyStackEntry yyStackEntry;
                   104172: 
                   104173: /* The state of the parser is completely contained in an instance of
                   104174: ** the following structure */
                   104175: struct yyParser {
                   104176:   int yyidx;                    /* Index of top element in stack */
                   104177: #ifdef YYTRACKMAXSTACKDEPTH
                   104178:   int yyidxMax;                 /* Maximum value of yyidx */
                   104179: #endif
                   104180:   int yyerrcnt;                 /* Shifts left before out of the error */
                   104181:   sqlite3ParserARG_SDECL                /* A place to hold %extra_argument */
                   104182: #if YYSTACKDEPTH<=0
                   104183:   int yystksz;                  /* Current side of the stack */
                   104184:   yyStackEntry *yystack;        /* The parser's stack */
                   104185: #else
                   104186:   yyStackEntry yystack[YYSTACKDEPTH];  /* The parser's stack */
                   104187: #endif
                   104188: };
                   104189: typedef struct yyParser yyParser;
                   104190: 
                   104191: #ifndef NDEBUG
                   104192: static FILE *yyTraceFILE = 0;
                   104193: static char *yyTracePrompt = 0;
                   104194: #endif /* NDEBUG */
                   104195: 
                   104196: #ifndef NDEBUG
                   104197: /* 
                   104198: ** Turn parser tracing on by giving a stream to which to write the trace
                   104199: ** and a prompt to preface each trace message.  Tracing is turned off
                   104200: ** by making either argument NULL 
                   104201: **
                   104202: ** Inputs:
                   104203: ** <ul>
                   104204: ** <li> A FILE* to which trace output should be written.
                   104205: **      If NULL, then tracing is turned off.
                   104206: ** <li> A prefix string written at the beginning of every
                   104207: **      line of trace output.  If NULL, then tracing is
                   104208: **      turned off.
                   104209: ** </ul>
                   104210: **
                   104211: ** Outputs:
                   104212: ** None.
                   104213: */
                   104214: SQLITE_PRIVATE void sqlite3ParserTrace(FILE *TraceFILE, char *zTracePrompt){
                   104215:   yyTraceFILE = TraceFILE;
                   104216:   yyTracePrompt = zTracePrompt;
                   104217:   if( yyTraceFILE==0 ) yyTracePrompt = 0;
                   104218:   else if( yyTracePrompt==0 ) yyTraceFILE = 0;
                   104219: }
                   104220: #endif /* NDEBUG */
                   104221: 
                   104222: #ifndef NDEBUG
                   104223: /* For tracing shifts, the names of all terminals and nonterminals
                   104224: ** are required.  The following table supplies these names */
                   104225: static const char *const yyTokenName[] = { 
                   104226:   "$",             "SEMI",          "EXPLAIN",       "QUERY",       
                   104227:   "PLAN",          "BEGIN",         "TRANSACTION",   "DEFERRED",    
                   104228:   "IMMEDIATE",     "EXCLUSIVE",     "COMMIT",        "END",         
                   104229:   "ROLLBACK",      "SAVEPOINT",     "RELEASE",       "TO",          
                   104230:   "TABLE",         "CREATE",        "IF",            "NOT",         
                   104231:   "EXISTS",        "TEMP",          "LP",            "RP",          
                   104232:   "AS",            "COMMA",         "ID",            "INDEXED",     
                   104233:   "ABORT",         "ACTION",        "AFTER",         "ANALYZE",     
                   104234:   "ASC",           "ATTACH",        "BEFORE",        "BY",          
                   104235:   "CASCADE",       "CAST",          "COLUMNKW",      "CONFLICT",    
                   104236:   "DATABASE",      "DESC",          "DETACH",        "EACH",        
                   104237:   "FAIL",          "FOR",           "IGNORE",        "INITIALLY",   
                   104238:   "INSTEAD",       "LIKE_KW",       "MATCH",         "NO",          
                   104239:   "KEY",           "OF",            "OFFSET",        "PRAGMA",      
                   104240:   "RAISE",         "REPLACE",       "RESTRICT",      "ROW",         
                   104241:   "TRIGGER",       "VACUUM",        "VIEW",          "VIRTUAL",     
                   104242:   "REINDEX",       "RENAME",        "CTIME_KW",      "ANY",         
                   104243:   "OR",            "AND",           "IS",            "BETWEEN",     
                   104244:   "IN",            "ISNULL",        "NOTNULL",       "NE",          
                   104245:   "EQ",            "GT",            "LE",            "LT",          
                   104246:   "GE",            "ESCAPE",        "BITAND",        "BITOR",       
                   104247:   "LSHIFT",        "RSHIFT",        "PLUS",          "MINUS",       
                   104248:   "STAR",          "SLASH",         "REM",           "CONCAT",      
                   104249:   "COLLATE",       "BITNOT",        "STRING",        "JOIN_KW",     
                   104250:   "CONSTRAINT",    "DEFAULT",       "NULL",          "PRIMARY",     
                   104251:   "UNIQUE",        "CHECK",         "REFERENCES",    "AUTOINCR",    
                   104252:   "ON",            "INSERT",        "DELETE",        "UPDATE",      
                   104253:   "SET",           "DEFERRABLE",    "FOREIGN",       "DROP",        
                   104254:   "UNION",         "ALL",           "EXCEPT",        "INTERSECT",   
                   104255:   "SELECT",        "DISTINCT",      "DOT",           "FROM",        
                   104256:   "JOIN",          "USING",         "ORDER",         "GROUP",       
                   104257:   "HAVING",        "LIMIT",         "WHERE",         "INTO",        
                   104258:   "VALUES",        "INTEGER",       "FLOAT",         "BLOB",        
                   104259:   "REGISTER",      "VARIABLE",      "CASE",          "WHEN",        
                   104260:   "THEN",          "ELSE",          "INDEX",         "ALTER",       
                   104261:   "ADD",           "error",         "input",         "cmdlist",     
                   104262:   "ecmd",          "explain",       "cmdx",          "cmd",         
                   104263:   "transtype",     "trans_opt",     "nm",            "savepoint_opt",
                   104264:   "create_table",  "create_table_args",  "createkw",      "temp",        
                   104265:   "ifnotexists",   "dbnm",          "columnlist",    "conslist_opt",
                   104266:   "select",        "column",        "columnid",      "type",        
                   104267:   "carglist",      "id",            "ids",           "typetoken",   
                   104268:   "typename",      "signed",        "plus_num",      "minus_num",   
                   104269:   "carg",          "ccons",         "term",          "expr",        
                   104270:   "onconf",        "sortorder",     "autoinc",       "idxlist_opt", 
                   104271:   "refargs",       "defer_subclause",  "refarg",        "refact",      
                   104272:   "init_deferred_pred_opt",  "conslist",      "tcons",         "idxlist",     
                   104273:   "defer_subclause_opt",  "orconf",        "resolvetype",   "raisetype",   
                   104274:   "ifexists",      "fullname",      "oneselect",     "multiselect_op",
                   104275:   "distinct",      "selcollist",    "from",          "where_opt",   
                   104276:   "groupby_opt",   "having_opt",    "orderby_opt",   "limit_opt",   
                   104277:   "sclp",          "as",            "seltablist",    "stl_prefix",  
                   104278:   "joinop",        "indexed_opt",   "on_opt",        "using_opt",   
                   104279:   "joinop2",       "inscollist",    "sortlist",      "sortitem",    
                   104280:   "nexprlist",     "setlist",       "insert_cmd",    "inscollist_opt",
                   104281:   "itemlist",      "exprlist",      "likeop",        "between_op",  
                   104282:   "in_op",         "case_operand",  "case_exprlist",  "case_else",   
                   104283:   "uniqueflag",    "collate",       "nmnum",         "plus_opt",    
                   104284:   "number",        "trigger_decl",  "trigger_cmd_list",  "trigger_time",
                   104285:   "trigger_event",  "foreach_clause",  "when_clause",   "trigger_cmd", 
                   104286:   "trnm",          "tridxby",       "database_kw_opt",  "key_opt",     
                   104287:   "add_column_fullname",  "kwcolumn_opt",  "create_vtab",   "vtabarglist", 
                   104288:   "vtabarg",       "vtabargtoken",  "lp",            "anylist",     
                   104289: };
                   104290: #endif /* NDEBUG */
                   104291: 
                   104292: #ifndef NDEBUG
                   104293: /* For tracing reduce actions, the names of all rules are required.
                   104294: */
                   104295: static const char *const yyRuleName[] = {
                   104296:  /*   0 */ "input ::= cmdlist",
                   104297:  /*   1 */ "cmdlist ::= cmdlist ecmd",
                   104298:  /*   2 */ "cmdlist ::= ecmd",
                   104299:  /*   3 */ "ecmd ::= SEMI",
                   104300:  /*   4 */ "ecmd ::= explain cmdx SEMI",
                   104301:  /*   5 */ "explain ::=",
                   104302:  /*   6 */ "explain ::= EXPLAIN",
                   104303:  /*   7 */ "explain ::= EXPLAIN QUERY PLAN",
                   104304:  /*   8 */ "cmdx ::= cmd",
                   104305:  /*   9 */ "cmd ::= BEGIN transtype trans_opt",
                   104306:  /*  10 */ "trans_opt ::=",
                   104307:  /*  11 */ "trans_opt ::= TRANSACTION",
                   104308:  /*  12 */ "trans_opt ::= TRANSACTION nm",
                   104309:  /*  13 */ "transtype ::=",
                   104310:  /*  14 */ "transtype ::= DEFERRED",
                   104311:  /*  15 */ "transtype ::= IMMEDIATE",
                   104312:  /*  16 */ "transtype ::= EXCLUSIVE",
                   104313:  /*  17 */ "cmd ::= COMMIT trans_opt",
                   104314:  /*  18 */ "cmd ::= END trans_opt",
                   104315:  /*  19 */ "cmd ::= ROLLBACK trans_opt",
                   104316:  /*  20 */ "savepoint_opt ::= SAVEPOINT",
                   104317:  /*  21 */ "savepoint_opt ::=",
                   104318:  /*  22 */ "cmd ::= SAVEPOINT nm",
                   104319:  /*  23 */ "cmd ::= RELEASE savepoint_opt nm",
                   104320:  /*  24 */ "cmd ::= ROLLBACK trans_opt TO savepoint_opt nm",
                   104321:  /*  25 */ "cmd ::= create_table create_table_args",
                   104322:  /*  26 */ "create_table ::= createkw temp TABLE ifnotexists nm dbnm",
                   104323:  /*  27 */ "createkw ::= CREATE",
                   104324:  /*  28 */ "ifnotexists ::=",
                   104325:  /*  29 */ "ifnotexists ::= IF NOT EXISTS",
                   104326:  /*  30 */ "temp ::= TEMP",
                   104327:  /*  31 */ "temp ::=",
                   104328:  /*  32 */ "create_table_args ::= LP columnlist conslist_opt RP",
                   104329:  /*  33 */ "create_table_args ::= AS select",
                   104330:  /*  34 */ "columnlist ::= columnlist COMMA column",
                   104331:  /*  35 */ "columnlist ::= column",
                   104332:  /*  36 */ "column ::= columnid type carglist",
                   104333:  /*  37 */ "columnid ::= nm",
                   104334:  /*  38 */ "id ::= ID",
                   104335:  /*  39 */ "id ::= INDEXED",
                   104336:  /*  40 */ "ids ::= ID|STRING",
                   104337:  /*  41 */ "nm ::= id",
                   104338:  /*  42 */ "nm ::= STRING",
                   104339:  /*  43 */ "nm ::= JOIN_KW",
                   104340:  /*  44 */ "type ::=",
                   104341:  /*  45 */ "type ::= typetoken",
                   104342:  /*  46 */ "typetoken ::= typename",
                   104343:  /*  47 */ "typetoken ::= typename LP signed RP",
                   104344:  /*  48 */ "typetoken ::= typename LP signed COMMA signed RP",
                   104345:  /*  49 */ "typename ::= ids",
                   104346:  /*  50 */ "typename ::= typename ids",
                   104347:  /*  51 */ "signed ::= plus_num",
                   104348:  /*  52 */ "signed ::= minus_num",
                   104349:  /*  53 */ "carglist ::= carglist carg",
                   104350:  /*  54 */ "carglist ::=",
                   104351:  /*  55 */ "carg ::= CONSTRAINT nm ccons",
                   104352:  /*  56 */ "carg ::= ccons",
                   104353:  /*  57 */ "ccons ::= DEFAULT term",
                   104354:  /*  58 */ "ccons ::= DEFAULT LP expr RP",
                   104355:  /*  59 */ "ccons ::= DEFAULT PLUS term",
                   104356:  /*  60 */ "ccons ::= DEFAULT MINUS term",
                   104357:  /*  61 */ "ccons ::= DEFAULT id",
                   104358:  /*  62 */ "ccons ::= NULL onconf",
                   104359:  /*  63 */ "ccons ::= NOT NULL onconf",
                   104360:  /*  64 */ "ccons ::= PRIMARY KEY sortorder onconf autoinc",
                   104361:  /*  65 */ "ccons ::= UNIQUE onconf",
                   104362:  /*  66 */ "ccons ::= CHECK LP expr RP",
                   104363:  /*  67 */ "ccons ::= REFERENCES nm idxlist_opt refargs",
                   104364:  /*  68 */ "ccons ::= defer_subclause",
                   104365:  /*  69 */ "ccons ::= COLLATE ids",
                   104366:  /*  70 */ "autoinc ::=",
                   104367:  /*  71 */ "autoinc ::= AUTOINCR",
                   104368:  /*  72 */ "refargs ::=",
                   104369:  /*  73 */ "refargs ::= refargs refarg",
                   104370:  /*  74 */ "refarg ::= MATCH nm",
                   104371:  /*  75 */ "refarg ::= ON INSERT refact",
                   104372:  /*  76 */ "refarg ::= ON DELETE refact",
                   104373:  /*  77 */ "refarg ::= ON UPDATE refact",
                   104374:  /*  78 */ "refact ::= SET NULL",
                   104375:  /*  79 */ "refact ::= SET DEFAULT",
                   104376:  /*  80 */ "refact ::= CASCADE",
                   104377:  /*  81 */ "refact ::= RESTRICT",
                   104378:  /*  82 */ "refact ::= NO ACTION",
                   104379:  /*  83 */ "defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt",
                   104380:  /*  84 */ "defer_subclause ::= DEFERRABLE init_deferred_pred_opt",
                   104381:  /*  85 */ "init_deferred_pred_opt ::=",
                   104382:  /*  86 */ "init_deferred_pred_opt ::= INITIALLY DEFERRED",
                   104383:  /*  87 */ "init_deferred_pred_opt ::= INITIALLY IMMEDIATE",
                   104384:  /*  88 */ "conslist_opt ::=",
                   104385:  /*  89 */ "conslist_opt ::= COMMA conslist",
                   104386:  /*  90 */ "conslist ::= conslist COMMA tcons",
                   104387:  /*  91 */ "conslist ::= conslist tcons",
                   104388:  /*  92 */ "conslist ::= tcons",
                   104389:  /*  93 */ "tcons ::= CONSTRAINT nm",
                   104390:  /*  94 */ "tcons ::= PRIMARY KEY LP idxlist autoinc RP onconf",
                   104391:  /*  95 */ "tcons ::= UNIQUE LP idxlist RP onconf",
                   104392:  /*  96 */ "tcons ::= CHECK LP expr RP onconf",
                   104393:  /*  97 */ "tcons ::= FOREIGN KEY LP idxlist RP REFERENCES nm idxlist_opt refargs defer_subclause_opt",
                   104394:  /*  98 */ "defer_subclause_opt ::=",
                   104395:  /*  99 */ "defer_subclause_opt ::= defer_subclause",
                   104396:  /* 100 */ "onconf ::=",
                   104397:  /* 101 */ "onconf ::= ON CONFLICT resolvetype",
                   104398:  /* 102 */ "orconf ::=",
                   104399:  /* 103 */ "orconf ::= OR resolvetype",
                   104400:  /* 104 */ "resolvetype ::= raisetype",
                   104401:  /* 105 */ "resolvetype ::= IGNORE",
                   104402:  /* 106 */ "resolvetype ::= REPLACE",
                   104403:  /* 107 */ "cmd ::= DROP TABLE ifexists fullname",
                   104404:  /* 108 */ "ifexists ::= IF EXISTS",
                   104405:  /* 109 */ "ifexists ::=",
                   104406:  /* 110 */ "cmd ::= createkw temp VIEW ifnotexists nm dbnm AS select",
                   104407:  /* 111 */ "cmd ::= DROP VIEW ifexists fullname",
                   104408:  /* 112 */ "cmd ::= select",
                   104409:  /* 113 */ "select ::= oneselect",
                   104410:  /* 114 */ "select ::= select multiselect_op oneselect",
                   104411:  /* 115 */ "multiselect_op ::= UNION",
                   104412:  /* 116 */ "multiselect_op ::= UNION ALL",
                   104413:  /* 117 */ "multiselect_op ::= EXCEPT|INTERSECT",
                   104414:  /* 118 */ "oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt",
                   104415:  /* 119 */ "distinct ::= DISTINCT",
                   104416:  /* 120 */ "distinct ::= ALL",
                   104417:  /* 121 */ "distinct ::=",
                   104418:  /* 122 */ "sclp ::= selcollist COMMA",
                   104419:  /* 123 */ "sclp ::=",
                   104420:  /* 124 */ "selcollist ::= sclp expr as",
                   104421:  /* 125 */ "selcollist ::= sclp STAR",
                   104422:  /* 126 */ "selcollist ::= sclp nm DOT STAR",
                   104423:  /* 127 */ "as ::= AS nm",
                   104424:  /* 128 */ "as ::= ids",
                   104425:  /* 129 */ "as ::=",
                   104426:  /* 130 */ "from ::=",
                   104427:  /* 131 */ "from ::= FROM seltablist",
                   104428:  /* 132 */ "stl_prefix ::= seltablist joinop",
                   104429:  /* 133 */ "stl_prefix ::=",
                   104430:  /* 134 */ "seltablist ::= stl_prefix nm dbnm as indexed_opt on_opt using_opt",
                   104431:  /* 135 */ "seltablist ::= stl_prefix LP select RP as on_opt using_opt",
                   104432:  /* 136 */ "seltablist ::= stl_prefix LP seltablist RP as on_opt using_opt",
                   104433:  /* 137 */ "dbnm ::=",
                   104434:  /* 138 */ "dbnm ::= DOT nm",
                   104435:  /* 139 */ "fullname ::= nm dbnm",
                   104436:  /* 140 */ "joinop ::= COMMA|JOIN",
                   104437:  /* 141 */ "joinop ::= JOIN_KW JOIN",
                   104438:  /* 142 */ "joinop ::= JOIN_KW nm JOIN",
                   104439:  /* 143 */ "joinop ::= JOIN_KW nm nm JOIN",
                   104440:  /* 144 */ "on_opt ::= ON expr",
                   104441:  /* 145 */ "on_opt ::=",
                   104442:  /* 146 */ "indexed_opt ::=",
                   104443:  /* 147 */ "indexed_opt ::= INDEXED BY nm",
                   104444:  /* 148 */ "indexed_opt ::= NOT INDEXED",
                   104445:  /* 149 */ "using_opt ::= USING LP inscollist RP",
                   104446:  /* 150 */ "using_opt ::=",
                   104447:  /* 151 */ "orderby_opt ::=",
                   104448:  /* 152 */ "orderby_opt ::= ORDER BY sortlist",
                   104449:  /* 153 */ "sortlist ::= sortlist COMMA sortitem sortorder",
                   104450:  /* 154 */ "sortlist ::= sortitem sortorder",
                   104451:  /* 155 */ "sortitem ::= expr",
                   104452:  /* 156 */ "sortorder ::= ASC",
                   104453:  /* 157 */ "sortorder ::= DESC",
                   104454:  /* 158 */ "sortorder ::=",
                   104455:  /* 159 */ "groupby_opt ::=",
                   104456:  /* 160 */ "groupby_opt ::= GROUP BY nexprlist",
                   104457:  /* 161 */ "having_opt ::=",
                   104458:  /* 162 */ "having_opt ::= HAVING expr",
                   104459:  /* 163 */ "limit_opt ::=",
                   104460:  /* 164 */ "limit_opt ::= LIMIT expr",
                   104461:  /* 165 */ "limit_opt ::= LIMIT expr OFFSET expr",
                   104462:  /* 166 */ "limit_opt ::= LIMIT expr COMMA expr",
                   104463:  /* 167 */ "cmd ::= DELETE FROM fullname indexed_opt where_opt",
                   104464:  /* 168 */ "where_opt ::=",
                   104465:  /* 169 */ "where_opt ::= WHERE expr",
                   104466:  /* 170 */ "cmd ::= UPDATE orconf fullname indexed_opt SET setlist where_opt",
                   104467:  /* 171 */ "setlist ::= setlist COMMA nm EQ expr",
                   104468:  /* 172 */ "setlist ::= nm EQ expr",
                   104469:  /* 173 */ "cmd ::= insert_cmd INTO fullname inscollist_opt VALUES LP itemlist RP",
                   104470:  /* 174 */ "cmd ::= insert_cmd INTO fullname inscollist_opt select",
                   104471:  /* 175 */ "cmd ::= insert_cmd INTO fullname inscollist_opt DEFAULT VALUES",
                   104472:  /* 176 */ "insert_cmd ::= INSERT orconf",
                   104473:  /* 177 */ "insert_cmd ::= REPLACE",
                   104474:  /* 178 */ "itemlist ::= itemlist COMMA expr",
                   104475:  /* 179 */ "itemlist ::= expr",
                   104476:  /* 180 */ "inscollist_opt ::=",
                   104477:  /* 181 */ "inscollist_opt ::= LP inscollist RP",
                   104478:  /* 182 */ "inscollist ::= inscollist COMMA nm",
                   104479:  /* 183 */ "inscollist ::= nm",
                   104480:  /* 184 */ "expr ::= term",
                   104481:  /* 185 */ "expr ::= LP expr RP",
                   104482:  /* 186 */ "term ::= NULL",
                   104483:  /* 187 */ "expr ::= id",
                   104484:  /* 188 */ "expr ::= JOIN_KW",
                   104485:  /* 189 */ "expr ::= nm DOT nm",
                   104486:  /* 190 */ "expr ::= nm DOT nm DOT nm",
                   104487:  /* 191 */ "term ::= INTEGER|FLOAT|BLOB",
                   104488:  /* 192 */ "term ::= STRING",
                   104489:  /* 193 */ "expr ::= REGISTER",
                   104490:  /* 194 */ "expr ::= VARIABLE",
                   104491:  /* 195 */ "expr ::= expr COLLATE ids",
                   104492:  /* 196 */ "expr ::= CAST LP expr AS typetoken RP",
                   104493:  /* 197 */ "expr ::= ID LP distinct exprlist RP",
                   104494:  /* 198 */ "expr ::= ID LP STAR RP",
                   104495:  /* 199 */ "term ::= CTIME_KW",
                   104496:  /* 200 */ "expr ::= expr AND expr",
                   104497:  /* 201 */ "expr ::= expr OR expr",
                   104498:  /* 202 */ "expr ::= expr LT|GT|GE|LE expr",
                   104499:  /* 203 */ "expr ::= expr EQ|NE expr",
                   104500:  /* 204 */ "expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr",
                   104501:  /* 205 */ "expr ::= expr PLUS|MINUS expr",
                   104502:  /* 206 */ "expr ::= expr STAR|SLASH|REM expr",
                   104503:  /* 207 */ "expr ::= expr CONCAT expr",
                   104504:  /* 208 */ "likeop ::= LIKE_KW",
                   104505:  /* 209 */ "likeop ::= NOT LIKE_KW",
                   104506:  /* 210 */ "likeop ::= MATCH",
                   104507:  /* 211 */ "likeop ::= NOT MATCH",
                   104508:  /* 212 */ "expr ::= expr likeop expr",
                   104509:  /* 213 */ "expr ::= expr likeop expr ESCAPE expr",
                   104510:  /* 214 */ "expr ::= expr ISNULL|NOTNULL",
                   104511:  /* 215 */ "expr ::= expr NOT NULL",
                   104512:  /* 216 */ "expr ::= expr IS expr",
                   104513:  /* 217 */ "expr ::= expr IS NOT expr",
                   104514:  /* 218 */ "expr ::= NOT expr",
                   104515:  /* 219 */ "expr ::= BITNOT expr",
                   104516:  /* 220 */ "expr ::= MINUS expr",
                   104517:  /* 221 */ "expr ::= PLUS expr",
                   104518:  /* 222 */ "between_op ::= BETWEEN",
                   104519:  /* 223 */ "between_op ::= NOT BETWEEN",
                   104520:  /* 224 */ "expr ::= expr between_op expr AND expr",
                   104521:  /* 225 */ "in_op ::= IN",
                   104522:  /* 226 */ "in_op ::= NOT IN",
                   104523:  /* 227 */ "expr ::= expr in_op LP exprlist RP",
                   104524:  /* 228 */ "expr ::= LP select RP",
                   104525:  /* 229 */ "expr ::= expr in_op LP select RP",
                   104526:  /* 230 */ "expr ::= expr in_op nm dbnm",
                   104527:  /* 231 */ "expr ::= EXISTS LP select RP",
                   104528:  /* 232 */ "expr ::= CASE case_operand case_exprlist case_else END",
                   104529:  /* 233 */ "case_exprlist ::= case_exprlist WHEN expr THEN expr",
                   104530:  /* 234 */ "case_exprlist ::= WHEN expr THEN expr",
                   104531:  /* 235 */ "case_else ::= ELSE expr",
                   104532:  /* 236 */ "case_else ::=",
                   104533:  /* 237 */ "case_operand ::= expr",
                   104534:  /* 238 */ "case_operand ::=",
                   104535:  /* 239 */ "exprlist ::= nexprlist",
                   104536:  /* 240 */ "exprlist ::=",
                   104537:  /* 241 */ "nexprlist ::= nexprlist COMMA expr",
                   104538:  /* 242 */ "nexprlist ::= expr",
                   104539:  /* 243 */ "cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP idxlist RP",
                   104540:  /* 244 */ "uniqueflag ::= UNIQUE",
                   104541:  /* 245 */ "uniqueflag ::=",
                   104542:  /* 246 */ "idxlist_opt ::=",
                   104543:  /* 247 */ "idxlist_opt ::= LP idxlist RP",
                   104544:  /* 248 */ "idxlist ::= idxlist COMMA nm collate sortorder",
                   104545:  /* 249 */ "idxlist ::= nm collate sortorder",
                   104546:  /* 250 */ "collate ::=",
                   104547:  /* 251 */ "collate ::= COLLATE ids",
                   104548:  /* 252 */ "cmd ::= DROP INDEX ifexists fullname",
                   104549:  /* 253 */ "cmd ::= VACUUM",
                   104550:  /* 254 */ "cmd ::= VACUUM nm",
                   104551:  /* 255 */ "cmd ::= PRAGMA nm dbnm",
                   104552:  /* 256 */ "cmd ::= PRAGMA nm dbnm EQ nmnum",
                   104553:  /* 257 */ "cmd ::= PRAGMA nm dbnm LP nmnum RP",
                   104554:  /* 258 */ "cmd ::= PRAGMA nm dbnm EQ minus_num",
                   104555:  /* 259 */ "cmd ::= PRAGMA nm dbnm LP minus_num RP",
                   104556:  /* 260 */ "nmnum ::= plus_num",
                   104557:  /* 261 */ "nmnum ::= nm",
                   104558:  /* 262 */ "nmnum ::= ON",
                   104559:  /* 263 */ "nmnum ::= DELETE",
                   104560:  /* 264 */ "nmnum ::= DEFAULT",
                   104561:  /* 265 */ "plus_num ::= plus_opt number",
                   104562:  /* 266 */ "minus_num ::= MINUS number",
                   104563:  /* 267 */ "number ::= INTEGER|FLOAT",
                   104564:  /* 268 */ "plus_opt ::= PLUS",
                   104565:  /* 269 */ "plus_opt ::=",
                   104566:  /* 270 */ "cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END",
                   104567:  /* 271 */ "trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause",
                   104568:  /* 272 */ "trigger_time ::= BEFORE",
                   104569:  /* 273 */ "trigger_time ::= AFTER",
                   104570:  /* 274 */ "trigger_time ::= INSTEAD OF",
                   104571:  /* 275 */ "trigger_time ::=",
                   104572:  /* 276 */ "trigger_event ::= DELETE|INSERT",
                   104573:  /* 277 */ "trigger_event ::= UPDATE",
                   104574:  /* 278 */ "trigger_event ::= UPDATE OF inscollist",
                   104575:  /* 279 */ "foreach_clause ::=",
                   104576:  /* 280 */ "foreach_clause ::= FOR EACH ROW",
                   104577:  /* 281 */ "when_clause ::=",
                   104578:  /* 282 */ "when_clause ::= WHEN expr",
                   104579:  /* 283 */ "trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI",
                   104580:  /* 284 */ "trigger_cmd_list ::= trigger_cmd SEMI",
                   104581:  /* 285 */ "trnm ::= nm",
                   104582:  /* 286 */ "trnm ::= nm DOT nm",
                   104583:  /* 287 */ "tridxby ::=",
                   104584:  /* 288 */ "tridxby ::= INDEXED BY nm",
                   104585:  /* 289 */ "tridxby ::= NOT INDEXED",
                   104586:  /* 290 */ "trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist where_opt",
                   104587:  /* 291 */ "trigger_cmd ::= insert_cmd INTO trnm inscollist_opt VALUES LP itemlist RP",
                   104588:  /* 292 */ "trigger_cmd ::= insert_cmd INTO trnm inscollist_opt select",
                   104589:  /* 293 */ "trigger_cmd ::= DELETE FROM trnm tridxby where_opt",
                   104590:  /* 294 */ "trigger_cmd ::= select",
                   104591:  /* 295 */ "expr ::= RAISE LP IGNORE RP",
                   104592:  /* 296 */ "expr ::= RAISE LP raisetype COMMA nm RP",
                   104593:  /* 297 */ "raisetype ::= ROLLBACK",
                   104594:  /* 298 */ "raisetype ::= ABORT",
                   104595:  /* 299 */ "raisetype ::= FAIL",
                   104596:  /* 300 */ "cmd ::= DROP TRIGGER ifexists fullname",
                   104597:  /* 301 */ "cmd ::= ATTACH database_kw_opt expr AS expr key_opt",
                   104598:  /* 302 */ "cmd ::= DETACH database_kw_opt expr",
                   104599:  /* 303 */ "key_opt ::=",
                   104600:  /* 304 */ "key_opt ::= KEY expr",
                   104601:  /* 305 */ "database_kw_opt ::= DATABASE",
                   104602:  /* 306 */ "database_kw_opt ::=",
                   104603:  /* 307 */ "cmd ::= REINDEX",
                   104604:  /* 308 */ "cmd ::= REINDEX nm dbnm",
                   104605:  /* 309 */ "cmd ::= ANALYZE",
                   104606:  /* 310 */ "cmd ::= ANALYZE nm dbnm",
                   104607:  /* 311 */ "cmd ::= ALTER TABLE fullname RENAME TO nm",
                   104608:  /* 312 */ "cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt column",
                   104609:  /* 313 */ "add_column_fullname ::= fullname",
                   104610:  /* 314 */ "kwcolumn_opt ::=",
                   104611:  /* 315 */ "kwcolumn_opt ::= COLUMNKW",
                   104612:  /* 316 */ "cmd ::= create_vtab",
                   104613:  /* 317 */ "cmd ::= create_vtab LP vtabarglist RP",
                   104614:  /* 318 */ "create_vtab ::= createkw VIRTUAL TABLE nm dbnm USING nm",
                   104615:  /* 319 */ "vtabarglist ::= vtabarg",
                   104616:  /* 320 */ "vtabarglist ::= vtabarglist COMMA vtabarg",
                   104617:  /* 321 */ "vtabarg ::=",
                   104618:  /* 322 */ "vtabarg ::= vtabarg vtabargtoken",
                   104619:  /* 323 */ "vtabargtoken ::= ANY",
                   104620:  /* 324 */ "vtabargtoken ::= lp anylist RP",
                   104621:  /* 325 */ "lp ::= LP",
                   104622:  /* 326 */ "anylist ::=",
                   104623:  /* 327 */ "anylist ::= anylist LP anylist RP",
                   104624:  /* 328 */ "anylist ::= anylist ANY",
                   104625: };
                   104626: #endif /* NDEBUG */
                   104627: 
                   104628: 
                   104629: #if YYSTACKDEPTH<=0
                   104630: /*
                   104631: ** Try to increase the size of the parser stack.
                   104632: */
                   104633: static void yyGrowStack(yyParser *p){
                   104634:   int newSize;
                   104635:   yyStackEntry *pNew;
                   104636: 
                   104637:   newSize = p->yystksz*2 + 100;
                   104638:   pNew = realloc(p->yystack, newSize*sizeof(pNew[0]));
                   104639:   if( pNew ){
                   104640:     p->yystack = pNew;
                   104641:     p->yystksz = newSize;
                   104642: #ifndef NDEBUG
                   104643:     if( yyTraceFILE ){
                   104644:       fprintf(yyTraceFILE,"%sStack grows to %d entries!\n",
                   104645:               yyTracePrompt, p->yystksz);
                   104646:     }
                   104647: #endif
                   104648:   }
                   104649: }
                   104650: #endif
                   104651: 
                   104652: /* 
                   104653: ** This function allocates a new parser.
                   104654: ** The only argument is a pointer to a function which works like
                   104655: ** malloc.
                   104656: **
                   104657: ** Inputs:
                   104658: ** A pointer to the function used to allocate memory.
                   104659: **
                   104660: ** Outputs:
                   104661: ** A pointer to a parser.  This pointer is used in subsequent calls
                   104662: ** to sqlite3Parser and sqlite3ParserFree.
                   104663: */
                   104664: SQLITE_PRIVATE void *sqlite3ParserAlloc(void *(*mallocProc)(size_t)){
                   104665:   yyParser *pParser;
                   104666:   pParser = (yyParser*)(*mallocProc)( (size_t)sizeof(yyParser) );
                   104667:   if( pParser ){
                   104668:     pParser->yyidx = -1;
                   104669: #ifdef YYTRACKMAXSTACKDEPTH
                   104670:     pParser->yyidxMax = 0;
                   104671: #endif
                   104672: #if YYSTACKDEPTH<=0
                   104673:     pParser->yystack = NULL;
                   104674:     pParser->yystksz = 0;
                   104675:     yyGrowStack(pParser);
                   104676: #endif
                   104677:   }
                   104678:   return pParser;
                   104679: }
                   104680: 
                   104681: /* The following function deletes the value associated with a
                   104682: ** symbol.  The symbol can be either a terminal or nonterminal.
                   104683: ** "yymajor" is the symbol code, and "yypminor" is a pointer to
                   104684: ** the value.
                   104685: */
                   104686: static void yy_destructor(
                   104687:   yyParser *yypParser,    /* The parser */
                   104688:   YYCODETYPE yymajor,     /* Type code for object to destroy */
                   104689:   YYMINORTYPE *yypminor   /* The object to be destroyed */
                   104690: ){
                   104691:   sqlite3ParserARG_FETCH;
                   104692:   switch( yymajor ){
                   104693:     /* Here is inserted the actions which take place when a
                   104694:     ** terminal or non-terminal is destroyed.  This can happen
                   104695:     ** when the symbol is popped from the stack during a
                   104696:     ** reduce or during error processing or when a parser is 
                   104697:     ** being destroyed before it is finished parsing.
                   104698:     **
                   104699:     ** Note: during a reduce, the only symbols destroyed are those
                   104700:     ** which appear on the RHS of the rule, but which are not used
                   104701:     ** inside the C code.
                   104702:     */
                   104703:     case 160: /* select */
                   104704:     case 194: /* oneselect */
                   104705: {
                   104706: sqlite3SelectDelete(pParse->db, (yypminor->yy387));
                   104707: }
                   104708:       break;
                   104709:     case 174: /* term */
                   104710:     case 175: /* expr */
                   104711: {
                   104712: sqlite3ExprDelete(pParse->db, (yypminor->yy118).pExpr);
                   104713: }
                   104714:       break;
                   104715:     case 179: /* idxlist_opt */
                   104716:     case 187: /* idxlist */
                   104717:     case 197: /* selcollist */
                   104718:     case 200: /* groupby_opt */
                   104719:     case 202: /* orderby_opt */
                   104720:     case 204: /* sclp */
                   104721:     case 214: /* sortlist */
                   104722:     case 216: /* nexprlist */
                   104723:     case 217: /* setlist */
                   104724:     case 220: /* itemlist */
                   104725:     case 221: /* exprlist */
                   104726:     case 226: /* case_exprlist */
                   104727: {
                   104728: sqlite3ExprListDelete(pParse->db, (yypminor->yy322));
                   104729: }
                   104730:       break;
                   104731:     case 193: /* fullname */
                   104732:     case 198: /* from */
                   104733:     case 206: /* seltablist */
                   104734:     case 207: /* stl_prefix */
                   104735: {
                   104736: sqlite3SrcListDelete(pParse->db, (yypminor->yy259));
                   104737: }
                   104738:       break;
                   104739:     case 199: /* where_opt */
                   104740:     case 201: /* having_opt */
                   104741:     case 210: /* on_opt */
                   104742:     case 215: /* sortitem */
                   104743:     case 225: /* case_operand */
                   104744:     case 227: /* case_else */
                   104745:     case 238: /* when_clause */
                   104746:     case 243: /* key_opt */
                   104747: {
                   104748: sqlite3ExprDelete(pParse->db, (yypminor->yy314));
                   104749: }
                   104750:       break;
                   104751:     case 211: /* using_opt */
                   104752:     case 213: /* inscollist */
                   104753:     case 219: /* inscollist_opt */
                   104754: {
                   104755: sqlite3IdListDelete(pParse->db, (yypminor->yy384));
                   104756: }
                   104757:       break;
                   104758:     case 234: /* trigger_cmd_list */
                   104759:     case 239: /* trigger_cmd */
                   104760: {
                   104761: sqlite3DeleteTriggerStep(pParse->db, (yypminor->yy203));
                   104762: }
                   104763:       break;
                   104764:     case 236: /* trigger_event */
                   104765: {
                   104766: sqlite3IdListDelete(pParse->db, (yypminor->yy90).b);
                   104767: }
                   104768:       break;
                   104769:     default:  break;   /* If no destructor action specified: do nothing */
                   104770:   }
                   104771: }
                   104772: 
                   104773: /*
                   104774: ** Pop the parser's stack once.
                   104775: **
                   104776: ** If there is a destructor routine associated with the token which
                   104777: ** is popped from the stack, then call it.
                   104778: **
                   104779: ** Return the major token number for the symbol popped.
                   104780: */
                   104781: static int yy_pop_parser_stack(yyParser *pParser){
                   104782:   YYCODETYPE yymajor;
                   104783:   yyStackEntry *yytos = &pParser->yystack[pParser->yyidx];
                   104784: 
                   104785:   /* There is no mechanism by which the parser stack can be popped below
                   104786:   ** empty in SQLite.  */
                   104787:   if( NEVER(pParser->yyidx<0) ) return 0;
                   104788: #ifndef NDEBUG
                   104789:   if( yyTraceFILE && pParser->yyidx>=0 ){
                   104790:     fprintf(yyTraceFILE,"%sPopping %s\n",
                   104791:       yyTracePrompt,
                   104792:       yyTokenName[yytos->major]);
                   104793:   }
                   104794: #endif
                   104795:   yymajor = yytos->major;
                   104796:   yy_destructor(pParser, yymajor, &yytos->minor);
                   104797:   pParser->yyidx--;
                   104798:   return yymajor;
                   104799: }
                   104800: 
                   104801: /* 
                   104802: ** Deallocate and destroy a parser.  Destructors are all called for
                   104803: ** all stack elements before shutting the parser down.
                   104804: **
                   104805: ** Inputs:
                   104806: ** <ul>
                   104807: ** <li>  A pointer to the parser.  This should be a pointer
                   104808: **       obtained from sqlite3ParserAlloc.
                   104809: ** <li>  A pointer to a function used to reclaim memory obtained
                   104810: **       from malloc.
                   104811: ** </ul>
                   104812: */
                   104813: SQLITE_PRIVATE void sqlite3ParserFree(
                   104814:   void *p,                    /* The parser to be deleted */
                   104815:   void (*freeProc)(void*)     /* Function used to reclaim memory */
                   104816: ){
                   104817:   yyParser *pParser = (yyParser*)p;
                   104818:   /* In SQLite, we never try to destroy a parser that was not successfully
                   104819:   ** created in the first place. */
                   104820:   if( NEVER(pParser==0) ) return;
                   104821:   while( pParser->yyidx>=0 ) yy_pop_parser_stack(pParser);
                   104822: #if YYSTACKDEPTH<=0
                   104823:   free(pParser->yystack);
                   104824: #endif
                   104825:   (*freeProc)((void*)pParser);
                   104826: }
                   104827: 
                   104828: /*
                   104829: ** Return the peak depth of the stack for a parser.
                   104830: */
                   104831: #ifdef YYTRACKMAXSTACKDEPTH
                   104832: SQLITE_PRIVATE int sqlite3ParserStackPeak(void *p){
                   104833:   yyParser *pParser = (yyParser*)p;
                   104834:   return pParser->yyidxMax;
                   104835: }
                   104836: #endif
                   104837: 
                   104838: /*
                   104839: ** Find the appropriate action for a parser given the terminal
                   104840: ** look-ahead token iLookAhead.
                   104841: **
                   104842: ** If the look-ahead token is YYNOCODE, then check to see if the action is
                   104843: ** independent of the look-ahead.  If it is, return the action, otherwise
                   104844: ** return YY_NO_ACTION.
                   104845: */
                   104846: static int yy_find_shift_action(
                   104847:   yyParser *pParser,        /* The parser */
                   104848:   YYCODETYPE iLookAhead     /* The look-ahead token */
                   104849: ){
                   104850:   int i;
                   104851:   int stateno = pParser->yystack[pParser->yyidx].stateno;
                   104852:  
                   104853:   if( stateno>YY_SHIFT_COUNT
                   104854:    || (i = yy_shift_ofst[stateno])==YY_SHIFT_USE_DFLT ){
                   104855:     return yy_default[stateno];
                   104856:   }
                   104857:   assert( iLookAhead!=YYNOCODE );
                   104858:   i += iLookAhead;
                   104859:   if( i<0 || i>=YY_ACTTAB_COUNT || yy_lookahead[i]!=iLookAhead ){
                   104860:     if( iLookAhead>0 ){
                   104861: #ifdef YYFALLBACK
                   104862:       YYCODETYPE iFallback;            /* Fallback token */
                   104863:       if( iLookAhead<sizeof(yyFallback)/sizeof(yyFallback[0])
                   104864:              && (iFallback = yyFallback[iLookAhead])!=0 ){
                   104865: #ifndef NDEBUG
                   104866:         if( yyTraceFILE ){
                   104867:           fprintf(yyTraceFILE, "%sFALLBACK %s => %s\n",
                   104868:              yyTracePrompt, yyTokenName[iLookAhead], yyTokenName[iFallback]);
                   104869:         }
                   104870: #endif
                   104871:         return yy_find_shift_action(pParser, iFallback);
                   104872:       }
                   104873: #endif
                   104874: #ifdef YYWILDCARD
                   104875:       {
                   104876:         int j = i - iLookAhead + YYWILDCARD;
                   104877:         if( 
                   104878: #if YY_SHIFT_MIN+YYWILDCARD<0
                   104879:           j>=0 &&
                   104880: #endif
                   104881: #if YY_SHIFT_MAX+YYWILDCARD>=YY_ACTTAB_COUNT
                   104882:           j<YY_ACTTAB_COUNT &&
                   104883: #endif
                   104884:           yy_lookahead[j]==YYWILDCARD
                   104885:         ){
                   104886: #ifndef NDEBUG
                   104887:           if( yyTraceFILE ){
                   104888:             fprintf(yyTraceFILE, "%sWILDCARD %s => %s\n",
                   104889:                yyTracePrompt, yyTokenName[iLookAhead], yyTokenName[YYWILDCARD]);
                   104890:           }
                   104891: #endif /* NDEBUG */
                   104892:           return yy_action[j];
                   104893:         }
                   104894:       }
                   104895: #endif /* YYWILDCARD */
                   104896:     }
                   104897:     return yy_default[stateno];
                   104898:   }else{
                   104899:     return yy_action[i];
                   104900:   }
                   104901: }
                   104902: 
                   104903: /*
                   104904: ** Find the appropriate action for a parser given the non-terminal
                   104905: ** look-ahead token iLookAhead.
                   104906: **
                   104907: ** If the look-ahead token is YYNOCODE, then check to see if the action is
                   104908: ** independent of the look-ahead.  If it is, return the action, otherwise
                   104909: ** return YY_NO_ACTION.
                   104910: */
                   104911: static int yy_find_reduce_action(
                   104912:   int stateno,              /* Current state number */
                   104913:   YYCODETYPE iLookAhead     /* The look-ahead token */
                   104914: ){
                   104915:   int i;
                   104916: #ifdef YYERRORSYMBOL
                   104917:   if( stateno>YY_REDUCE_COUNT ){
                   104918:     return yy_default[stateno];
                   104919:   }
                   104920: #else
                   104921:   assert( stateno<=YY_REDUCE_COUNT );
                   104922: #endif
                   104923:   i = yy_reduce_ofst[stateno];
                   104924:   assert( i!=YY_REDUCE_USE_DFLT );
                   104925:   assert( iLookAhead!=YYNOCODE );
                   104926:   i += iLookAhead;
                   104927: #ifdef YYERRORSYMBOL
                   104928:   if( i<0 || i>=YY_ACTTAB_COUNT || yy_lookahead[i]!=iLookAhead ){
                   104929:     return yy_default[stateno];
                   104930:   }
                   104931: #else
                   104932:   assert( i>=0 && i<YY_ACTTAB_COUNT );
                   104933:   assert( yy_lookahead[i]==iLookAhead );
                   104934: #endif
                   104935:   return yy_action[i];
                   104936: }
                   104937: 
                   104938: /*
                   104939: ** The following routine is called if the stack overflows.
                   104940: */
                   104941: static void yyStackOverflow(yyParser *yypParser, YYMINORTYPE *yypMinor){
                   104942:    sqlite3ParserARG_FETCH;
                   104943:    yypParser->yyidx--;
                   104944: #ifndef NDEBUG
                   104945:    if( yyTraceFILE ){
                   104946:      fprintf(yyTraceFILE,"%sStack Overflow!\n",yyTracePrompt);
                   104947:    }
                   104948: #endif
                   104949:    while( yypParser->yyidx>=0 ) yy_pop_parser_stack(yypParser);
                   104950:    /* Here code is inserted which will execute if the parser
                   104951:    ** stack every overflows */
                   104952: 
                   104953:   UNUSED_PARAMETER(yypMinor); /* Silence some compiler warnings */
                   104954:   sqlite3ErrorMsg(pParse, "parser stack overflow");
                   104955:   pParse->parseError = 1;
                   104956:    sqlite3ParserARG_STORE; /* Suppress warning about unused %extra_argument var */
                   104957: }
                   104958: 
                   104959: /*
                   104960: ** Perform a shift action.
                   104961: */
                   104962: static void yy_shift(
                   104963:   yyParser *yypParser,          /* The parser to be shifted */
                   104964:   int yyNewState,               /* The new state to shift in */
                   104965:   int yyMajor,                  /* The major token to shift in */
                   104966:   YYMINORTYPE *yypMinor         /* Pointer to the minor token to shift in */
                   104967: ){
                   104968:   yyStackEntry *yytos;
                   104969:   yypParser->yyidx++;
                   104970: #ifdef YYTRACKMAXSTACKDEPTH
                   104971:   if( yypParser->yyidx>yypParser->yyidxMax ){
                   104972:     yypParser->yyidxMax = yypParser->yyidx;
                   104973:   }
                   104974: #endif
                   104975: #if YYSTACKDEPTH>0 
                   104976:   if( yypParser->yyidx>=YYSTACKDEPTH ){
                   104977:     yyStackOverflow(yypParser, yypMinor);
                   104978:     return;
                   104979:   }
                   104980: #else
                   104981:   if( yypParser->yyidx>=yypParser->yystksz ){
                   104982:     yyGrowStack(yypParser);
                   104983:     if( yypParser->yyidx>=yypParser->yystksz ){
                   104984:       yyStackOverflow(yypParser, yypMinor);
                   104985:       return;
                   104986:     }
                   104987:   }
                   104988: #endif
                   104989:   yytos = &yypParser->yystack[yypParser->yyidx];
                   104990:   yytos->stateno = (YYACTIONTYPE)yyNewState;
                   104991:   yytos->major = (YYCODETYPE)yyMajor;
                   104992:   yytos->minor = *yypMinor;
                   104993: #ifndef NDEBUG
                   104994:   if( yyTraceFILE && yypParser->yyidx>0 ){
                   104995:     int i;
                   104996:     fprintf(yyTraceFILE,"%sShift %d\n",yyTracePrompt,yyNewState);
                   104997:     fprintf(yyTraceFILE,"%sStack:",yyTracePrompt);
                   104998:     for(i=1; i<=yypParser->yyidx; i++)
                   104999:       fprintf(yyTraceFILE," %s",yyTokenName[yypParser->yystack[i].major]);
                   105000:     fprintf(yyTraceFILE,"\n");
                   105001:   }
                   105002: #endif
                   105003: }
                   105004: 
                   105005: /* The following table contains information about every rule that
                   105006: ** is used during the reduce.
                   105007: */
                   105008: static const struct {
                   105009:   YYCODETYPE lhs;         /* Symbol on the left-hand side of the rule */
                   105010:   unsigned char nrhs;     /* Number of right-hand side symbols in the rule */
                   105011: } yyRuleInfo[] = {
                   105012:   { 142, 1 },
                   105013:   { 143, 2 },
                   105014:   { 143, 1 },
                   105015:   { 144, 1 },
                   105016:   { 144, 3 },
                   105017:   { 145, 0 },
                   105018:   { 145, 1 },
                   105019:   { 145, 3 },
                   105020:   { 146, 1 },
                   105021:   { 147, 3 },
                   105022:   { 149, 0 },
                   105023:   { 149, 1 },
                   105024:   { 149, 2 },
                   105025:   { 148, 0 },
                   105026:   { 148, 1 },
                   105027:   { 148, 1 },
                   105028:   { 148, 1 },
                   105029:   { 147, 2 },
                   105030:   { 147, 2 },
                   105031:   { 147, 2 },
                   105032:   { 151, 1 },
                   105033:   { 151, 0 },
                   105034:   { 147, 2 },
                   105035:   { 147, 3 },
                   105036:   { 147, 5 },
                   105037:   { 147, 2 },
                   105038:   { 152, 6 },
                   105039:   { 154, 1 },
                   105040:   { 156, 0 },
                   105041:   { 156, 3 },
                   105042:   { 155, 1 },
                   105043:   { 155, 0 },
                   105044:   { 153, 4 },
                   105045:   { 153, 2 },
                   105046:   { 158, 3 },
                   105047:   { 158, 1 },
                   105048:   { 161, 3 },
                   105049:   { 162, 1 },
                   105050:   { 165, 1 },
                   105051:   { 165, 1 },
                   105052:   { 166, 1 },
                   105053:   { 150, 1 },
                   105054:   { 150, 1 },
                   105055:   { 150, 1 },
                   105056:   { 163, 0 },
                   105057:   { 163, 1 },
                   105058:   { 167, 1 },
                   105059:   { 167, 4 },
                   105060:   { 167, 6 },
                   105061:   { 168, 1 },
                   105062:   { 168, 2 },
                   105063:   { 169, 1 },
                   105064:   { 169, 1 },
                   105065:   { 164, 2 },
                   105066:   { 164, 0 },
                   105067:   { 172, 3 },
                   105068:   { 172, 1 },
                   105069:   { 173, 2 },
                   105070:   { 173, 4 },
                   105071:   { 173, 3 },
                   105072:   { 173, 3 },
                   105073:   { 173, 2 },
                   105074:   { 173, 2 },
                   105075:   { 173, 3 },
                   105076:   { 173, 5 },
                   105077:   { 173, 2 },
                   105078:   { 173, 4 },
                   105079:   { 173, 4 },
                   105080:   { 173, 1 },
                   105081:   { 173, 2 },
                   105082:   { 178, 0 },
                   105083:   { 178, 1 },
                   105084:   { 180, 0 },
                   105085:   { 180, 2 },
                   105086:   { 182, 2 },
                   105087:   { 182, 3 },
                   105088:   { 182, 3 },
                   105089:   { 182, 3 },
                   105090:   { 183, 2 },
                   105091:   { 183, 2 },
                   105092:   { 183, 1 },
                   105093:   { 183, 1 },
                   105094:   { 183, 2 },
                   105095:   { 181, 3 },
                   105096:   { 181, 2 },
                   105097:   { 184, 0 },
                   105098:   { 184, 2 },
                   105099:   { 184, 2 },
                   105100:   { 159, 0 },
                   105101:   { 159, 2 },
                   105102:   { 185, 3 },
                   105103:   { 185, 2 },
                   105104:   { 185, 1 },
                   105105:   { 186, 2 },
                   105106:   { 186, 7 },
                   105107:   { 186, 5 },
                   105108:   { 186, 5 },
                   105109:   { 186, 10 },
                   105110:   { 188, 0 },
                   105111:   { 188, 1 },
                   105112:   { 176, 0 },
                   105113:   { 176, 3 },
                   105114:   { 189, 0 },
                   105115:   { 189, 2 },
                   105116:   { 190, 1 },
                   105117:   { 190, 1 },
                   105118:   { 190, 1 },
                   105119:   { 147, 4 },
                   105120:   { 192, 2 },
                   105121:   { 192, 0 },
                   105122:   { 147, 8 },
                   105123:   { 147, 4 },
                   105124:   { 147, 1 },
                   105125:   { 160, 1 },
                   105126:   { 160, 3 },
                   105127:   { 195, 1 },
                   105128:   { 195, 2 },
                   105129:   { 195, 1 },
                   105130:   { 194, 9 },
                   105131:   { 196, 1 },
                   105132:   { 196, 1 },
                   105133:   { 196, 0 },
                   105134:   { 204, 2 },
                   105135:   { 204, 0 },
                   105136:   { 197, 3 },
                   105137:   { 197, 2 },
                   105138:   { 197, 4 },
                   105139:   { 205, 2 },
                   105140:   { 205, 1 },
                   105141:   { 205, 0 },
                   105142:   { 198, 0 },
                   105143:   { 198, 2 },
                   105144:   { 207, 2 },
                   105145:   { 207, 0 },
                   105146:   { 206, 7 },
                   105147:   { 206, 7 },
                   105148:   { 206, 7 },
                   105149:   { 157, 0 },
                   105150:   { 157, 2 },
                   105151:   { 193, 2 },
                   105152:   { 208, 1 },
                   105153:   { 208, 2 },
                   105154:   { 208, 3 },
                   105155:   { 208, 4 },
                   105156:   { 210, 2 },
                   105157:   { 210, 0 },
                   105158:   { 209, 0 },
                   105159:   { 209, 3 },
                   105160:   { 209, 2 },
                   105161:   { 211, 4 },
                   105162:   { 211, 0 },
                   105163:   { 202, 0 },
                   105164:   { 202, 3 },
                   105165:   { 214, 4 },
                   105166:   { 214, 2 },
                   105167:   { 215, 1 },
                   105168:   { 177, 1 },
                   105169:   { 177, 1 },
                   105170:   { 177, 0 },
                   105171:   { 200, 0 },
                   105172:   { 200, 3 },
                   105173:   { 201, 0 },
                   105174:   { 201, 2 },
                   105175:   { 203, 0 },
                   105176:   { 203, 2 },
                   105177:   { 203, 4 },
                   105178:   { 203, 4 },
                   105179:   { 147, 5 },
                   105180:   { 199, 0 },
                   105181:   { 199, 2 },
                   105182:   { 147, 7 },
                   105183:   { 217, 5 },
                   105184:   { 217, 3 },
                   105185:   { 147, 8 },
                   105186:   { 147, 5 },
                   105187:   { 147, 6 },
                   105188:   { 218, 2 },
                   105189:   { 218, 1 },
                   105190:   { 220, 3 },
                   105191:   { 220, 1 },
                   105192:   { 219, 0 },
                   105193:   { 219, 3 },
                   105194:   { 213, 3 },
                   105195:   { 213, 1 },
                   105196:   { 175, 1 },
                   105197:   { 175, 3 },
                   105198:   { 174, 1 },
                   105199:   { 175, 1 },
                   105200:   { 175, 1 },
                   105201:   { 175, 3 },
                   105202:   { 175, 5 },
                   105203:   { 174, 1 },
                   105204:   { 174, 1 },
                   105205:   { 175, 1 },
                   105206:   { 175, 1 },
                   105207:   { 175, 3 },
                   105208:   { 175, 6 },
                   105209:   { 175, 5 },
                   105210:   { 175, 4 },
                   105211:   { 174, 1 },
                   105212:   { 175, 3 },
                   105213:   { 175, 3 },
                   105214:   { 175, 3 },
                   105215:   { 175, 3 },
                   105216:   { 175, 3 },
                   105217:   { 175, 3 },
                   105218:   { 175, 3 },
                   105219:   { 175, 3 },
                   105220:   { 222, 1 },
                   105221:   { 222, 2 },
                   105222:   { 222, 1 },
                   105223:   { 222, 2 },
                   105224:   { 175, 3 },
                   105225:   { 175, 5 },
                   105226:   { 175, 2 },
                   105227:   { 175, 3 },
                   105228:   { 175, 3 },
                   105229:   { 175, 4 },
                   105230:   { 175, 2 },
                   105231:   { 175, 2 },
                   105232:   { 175, 2 },
                   105233:   { 175, 2 },
                   105234:   { 223, 1 },
                   105235:   { 223, 2 },
                   105236:   { 175, 5 },
                   105237:   { 224, 1 },
                   105238:   { 224, 2 },
                   105239:   { 175, 5 },
                   105240:   { 175, 3 },
                   105241:   { 175, 5 },
                   105242:   { 175, 4 },
                   105243:   { 175, 4 },
                   105244:   { 175, 5 },
                   105245:   { 226, 5 },
                   105246:   { 226, 4 },
                   105247:   { 227, 2 },
                   105248:   { 227, 0 },
                   105249:   { 225, 1 },
                   105250:   { 225, 0 },
                   105251:   { 221, 1 },
                   105252:   { 221, 0 },
                   105253:   { 216, 3 },
                   105254:   { 216, 1 },
                   105255:   { 147, 11 },
                   105256:   { 228, 1 },
                   105257:   { 228, 0 },
                   105258:   { 179, 0 },
                   105259:   { 179, 3 },
                   105260:   { 187, 5 },
                   105261:   { 187, 3 },
                   105262:   { 229, 0 },
                   105263:   { 229, 2 },
                   105264:   { 147, 4 },
                   105265:   { 147, 1 },
                   105266:   { 147, 2 },
                   105267:   { 147, 3 },
                   105268:   { 147, 5 },
                   105269:   { 147, 6 },
                   105270:   { 147, 5 },
                   105271:   { 147, 6 },
                   105272:   { 230, 1 },
                   105273:   { 230, 1 },
                   105274:   { 230, 1 },
                   105275:   { 230, 1 },
                   105276:   { 230, 1 },
                   105277:   { 170, 2 },
                   105278:   { 171, 2 },
                   105279:   { 232, 1 },
                   105280:   { 231, 1 },
                   105281:   { 231, 0 },
                   105282:   { 147, 5 },
                   105283:   { 233, 11 },
                   105284:   { 235, 1 },
                   105285:   { 235, 1 },
                   105286:   { 235, 2 },
                   105287:   { 235, 0 },
                   105288:   { 236, 1 },
                   105289:   { 236, 1 },
                   105290:   { 236, 3 },
                   105291:   { 237, 0 },
                   105292:   { 237, 3 },
                   105293:   { 238, 0 },
                   105294:   { 238, 2 },
                   105295:   { 234, 3 },
                   105296:   { 234, 2 },
                   105297:   { 240, 1 },
                   105298:   { 240, 3 },
                   105299:   { 241, 0 },
                   105300:   { 241, 3 },
                   105301:   { 241, 2 },
                   105302:   { 239, 7 },
                   105303:   { 239, 8 },
                   105304:   { 239, 5 },
                   105305:   { 239, 5 },
                   105306:   { 239, 1 },
                   105307:   { 175, 4 },
                   105308:   { 175, 6 },
                   105309:   { 191, 1 },
                   105310:   { 191, 1 },
                   105311:   { 191, 1 },
                   105312:   { 147, 4 },
                   105313:   { 147, 6 },
                   105314:   { 147, 3 },
                   105315:   { 243, 0 },
                   105316:   { 243, 2 },
                   105317:   { 242, 1 },
                   105318:   { 242, 0 },
                   105319:   { 147, 1 },
                   105320:   { 147, 3 },
                   105321:   { 147, 1 },
                   105322:   { 147, 3 },
                   105323:   { 147, 6 },
                   105324:   { 147, 6 },
                   105325:   { 244, 1 },
                   105326:   { 245, 0 },
                   105327:   { 245, 1 },
                   105328:   { 147, 1 },
                   105329:   { 147, 4 },
                   105330:   { 246, 7 },
                   105331:   { 247, 1 },
                   105332:   { 247, 3 },
                   105333:   { 248, 0 },
                   105334:   { 248, 2 },
                   105335:   { 249, 1 },
                   105336:   { 249, 3 },
                   105337:   { 250, 1 },
                   105338:   { 251, 0 },
                   105339:   { 251, 4 },
                   105340:   { 251, 2 },
                   105341: };
                   105342: 
                   105343: static void yy_accept(yyParser*);  /* Forward Declaration */
                   105344: 
                   105345: /*
                   105346: ** Perform a reduce action and the shift that must immediately
                   105347: ** follow the reduce.
                   105348: */
                   105349: static void yy_reduce(
                   105350:   yyParser *yypParser,         /* The parser */
                   105351:   int yyruleno                 /* Number of the rule by which to reduce */
                   105352: ){
                   105353:   int yygoto;                     /* The next state */
                   105354:   int yyact;                      /* The next action */
                   105355:   YYMINORTYPE yygotominor;        /* The LHS of the rule reduced */
                   105356:   yyStackEntry *yymsp;            /* The top of the parser's stack */
                   105357:   int yysize;                     /* Amount to pop the stack */
                   105358:   sqlite3ParserARG_FETCH;
                   105359:   yymsp = &yypParser->yystack[yypParser->yyidx];
                   105360: #ifndef NDEBUG
                   105361:   if( yyTraceFILE && yyruleno>=0 
                   105362:         && yyruleno<(int)(sizeof(yyRuleName)/sizeof(yyRuleName[0])) ){
                   105363:     fprintf(yyTraceFILE, "%sReduce [%s].\n", yyTracePrompt,
                   105364:       yyRuleName[yyruleno]);
                   105365:   }
                   105366: #endif /* NDEBUG */
                   105367: 
                   105368:   /* Silence complaints from purify about yygotominor being uninitialized
                   105369:   ** in some cases when it is copied into the stack after the following
                   105370:   ** switch.  yygotominor is uninitialized when a rule reduces that does
                   105371:   ** not set the value of its left-hand side nonterminal.  Leaving the
                   105372:   ** value of the nonterminal uninitialized is utterly harmless as long
                   105373:   ** as the value is never used.  So really the only thing this code
                   105374:   ** accomplishes is to quieten purify.  
                   105375:   **
                   105376:   ** 2007-01-16:  The wireshark project (www.wireshark.org) reports that
                   105377:   ** without this code, their parser segfaults.  I'm not sure what there
                   105378:   ** parser is doing to make this happen.  This is the second bug report
                   105379:   ** from wireshark this week.  Clearly they are stressing Lemon in ways
                   105380:   ** that it has not been previously stressed...  (SQLite ticket #2172)
                   105381:   */
                   105382:   /*memset(&yygotominor, 0, sizeof(yygotominor));*/
                   105383:   yygotominor = yyzerominor;
                   105384: 
                   105385: 
                   105386:   switch( yyruleno ){
                   105387:   /* Beginning here are the reduction cases.  A typical example
                   105388:   ** follows:
                   105389:   **   case 0:
                   105390:   **  #line <lineno> <grammarfile>
                   105391:   **     { ... }           // User supplied code
                   105392:   **  #line <lineno> <thisfile>
                   105393:   **     break;
                   105394:   */
                   105395:       case 5: /* explain ::= */
                   105396: { sqlite3BeginParse(pParse, 0); }
                   105397:         break;
                   105398:       case 6: /* explain ::= EXPLAIN */
                   105399: { sqlite3BeginParse(pParse, 1); }
                   105400:         break;
                   105401:       case 7: /* explain ::= EXPLAIN QUERY PLAN */
                   105402: { sqlite3BeginParse(pParse, 2); }
                   105403:         break;
                   105404:       case 8: /* cmdx ::= cmd */
                   105405: { sqlite3FinishCoding(pParse); }
                   105406:         break;
                   105407:       case 9: /* cmd ::= BEGIN transtype trans_opt */
                   105408: {sqlite3BeginTransaction(pParse, yymsp[-1].minor.yy4);}
                   105409:         break;
                   105410:       case 13: /* transtype ::= */
                   105411: {yygotominor.yy4 = TK_DEFERRED;}
                   105412:         break;
                   105413:       case 14: /* transtype ::= DEFERRED */
                   105414:       case 15: /* transtype ::= IMMEDIATE */ yytestcase(yyruleno==15);
                   105415:       case 16: /* transtype ::= EXCLUSIVE */ yytestcase(yyruleno==16);
                   105416:       case 115: /* multiselect_op ::= UNION */ yytestcase(yyruleno==115);
                   105417:       case 117: /* multiselect_op ::= EXCEPT|INTERSECT */ yytestcase(yyruleno==117);
                   105418: {yygotominor.yy4 = yymsp[0].major;}
                   105419:         break;
                   105420:       case 17: /* cmd ::= COMMIT trans_opt */
                   105421:       case 18: /* cmd ::= END trans_opt */ yytestcase(yyruleno==18);
                   105422: {sqlite3CommitTransaction(pParse);}
                   105423:         break;
                   105424:       case 19: /* cmd ::= ROLLBACK trans_opt */
                   105425: {sqlite3RollbackTransaction(pParse);}
                   105426:         break;
                   105427:       case 22: /* cmd ::= SAVEPOINT nm */
                   105428: {
                   105429:   sqlite3Savepoint(pParse, SAVEPOINT_BEGIN, &yymsp[0].minor.yy0);
                   105430: }
                   105431:         break;
                   105432:       case 23: /* cmd ::= RELEASE savepoint_opt nm */
                   105433: {
                   105434:   sqlite3Savepoint(pParse, SAVEPOINT_RELEASE, &yymsp[0].minor.yy0);
                   105435: }
                   105436:         break;
                   105437:       case 24: /* cmd ::= ROLLBACK trans_opt TO savepoint_opt nm */
                   105438: {
                   105439:   sqlite3Savepoint(pParse, SAVEPOINT_ROLLBACK, &yymsp[0].minor.yy0);
                   105440: }
                   105441:         break;
                   105442:       case 26: /* create_table ::= createkw temp TABLE ifnotexists nm dbnm */
                   105443: {
                   105444:    sqlite3StartTable(pParse,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0,yymsp[-4].minor.yy4,0,0,yymsp[-2].minor.yy4);
                   105445: }
                   105446:         break;
                   105447:       case 27: /* createkw ::= CREATE */
                   105448: {
                   105449:   pParse->db->lookaside.bEnabled = 0;
                   105450:   yygotominor.yy0 = yymsp[0].minor.yy0;
                   105451: }
                   105452:         break;
                   105453:       case 28: /* ifnotexists ::= */
                   105454:       case 31: /* temp ::= */ yytestcase(yyruleno==31);
                   105455:       case 70: /* autoinc ::= */ yytestcase(yyruleno==70);
                   105456:       case 83: /* defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt */ yytestcase(yyruleno==83);
                   105457:       case 85: /* init_deferred_pred_opt ::= */ yytestcase(yyruleno==85);
                   105458:       case 87: /* init_deferred_pred_opt ::= INITIALLY IMMEDIATE */ yytestcase(yyruleno==87);
                   105459:       case 98: /* defer_subclause_opt ::= */ yytestcase(yyruleno==98);
                   105460:       case 109: /* ifexists ::= */ yytestcase(yyruleno==109);
                   105461:       case 120: /* distinct ::= ALL */ yytestcase(yyruleno==120);
                   105462:       case 121: /* distinct ::= */ yytestcase(yyruleno==121);
                   105463:       case 222: /* between_op ::= BETWEEN */ yytestcase(yyruleno==222);
                   105464:       case 225: /* in_op ::= IN */ yytestcase(yyruleno==225);
                   105465: {yygotominor.yy4 = 0;}
                   105466:         break;
                   105467:       case 29: /* ifnotexists ::= IF NOT EXISTS */
                   105468:       case 30: /* temp ::= TEMP */ yytestcase(yyruleno==30);
                   105469:       case 71: /* autoinc ::= AUTOINCR */ yytestcase(yyruleno==71);
                   105470:       case 86: /* init_deferred_pred_opt ::= INITIALLY DEFERRED */ yytestcase(yyruleno==86);
                   105471:       case 108: /* ifexists ::= IF EXISTS */ yytestcase(yyruleno==108);
                   105472:       case 119: /* distinct ::= DISTINCT */ yytestcase(yyruleno==119);
                   105473:       case 223: /* between_op ::= NOT BETWEEN */ yytestcase(yyruleno==223);
                   105474:       case 226: /* in_op ::= NOT IN */ yytestcase(yyruleno==226);
                   105475: {yygotominor.yy4 = 1;}
                   105476:         break;
                   105477:       case 32: /* create_table_args ::= LP columnlist conslist_opt RP */
                   105478: {
                   105479:   sqlite3EndTable(pParse,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0,0);
                   105480: }
                   105481:         break;
                   105482:       case 33: /* create_table_args ::= AS select */
                   105483: {
                   105484:   sqlite3EndTable(pParse,0,0,yymsp[0].minor.yy387);
                   105485:   sqlite3SelectDelete(pParse->db, yymsp[0].minor.yy387);
                   105486: }
                   105487:         break;
                   105488:       case 36: /* column ::= columnid type carglist */
                   105489: {
                   105490:   yygotominor.yy0.z = yymsp[-2].minor.yy0.z;
                   105491:   yygotominor.yy0.n = (int)(pParse->sLastToken.z-yymsp[-2].minor.yy0.z) + pParse->sLastToken.n;
                   105492: }
                   105493:         break;
                   105494:       case 37: /* columnid ::= nm */
                   105495: {
                   105496:   sqlite3AddColumn(pParse,&yymsp[0].minor.yy0);
                   105497:   yygotominor.yy0 = yymsp[0].minor.yy0;
                   105498: }
                   105499:         break;
                   105500:       case 38: /* id ::= ID */
                   105501:       case 39: /* id ::= INDEXED */ yytestcase(yyruleno==39);
                   105502:       case 40: /* ids ::= ID|STRING */ yytestcase(yyruleno==40);
                   105503:       case 41: /* nm ::= id */ yytestcase(yyruleno==41);
                   105504:       case 42: /* nm ::= STRING */ yytestcase(yyruleno==42);
                   105505:       case 43: /* nm ::= JOIN_KW */ yytestcase(yyruleno==43);
                   105506:       case 46: /* typetoken ::= typename */ yytestcase(yyruleno==46);
                   105507:       case 49: /* typename ::= ids */ yytestcase(yyruleno==49);
                   105508:       case 127: /* as ::= AS nm */ yytestcase(yyruleno==127);
                   105509:       case 128: /* as ::= ids */ yytestcase(yyruleno==128);
                   105510:       case 138: /* dbnm ::= DOT nm */ yytestcase(yyruleno==138);
                   105511:       case 147: /* indexed_opt ::= INDEXED BY nm */ yytestcase(yyruleno==147);
                   105512:       case 251: /* collate ::= COLLATE ids */ yytestcase(yyruleno==251);
                   105513:       case 260: /* nmnum ::= plus_num */ yytestcase(yyruleno==260);
                   105514:       case 261: /* nmnum ::= nm */ yytestcase(yyruleno==261);
                   105515:       case 262: /* nmnum ::= ON */ yytestcase(yyruleno==262);
                   105516:       case 263: /* nmnum ::= DELETE */ yytestcase(yyruleno==263);
                   105517:       case 264: /* nmnum ::= DEFAULT */ yytestcase(yyruleno==264);
                   105518:       case 265: /* plus_num ::= plus_opt number */ yytestcase(yyruleno==265);
                   105519:       case 266: /* minus_num ::= MINUS number */ yytestcase(yyruleno==266);
                   105520:       case 267: /* number ::= INTEGER|FLOAT */ yytestcase(yyruleno==267);
                   105521:       case 285: /* trnm ::= nm */ yytestcase(yyruleno==285);
                   105522: {yygotominor.yy0 = yymsp[0].minor.yy0;}
                   105523:         break;
                   105524:       case 45: /* type ::= typetoken */
                   105525: {sqlite3AddColumnType(pParse,&yymsp[0].minor.yy0);}
                   105526:         break;
                   105527:       case 47: /* typetoken ::= typename LP signed RP */
                   105528: {
                   105529:   yygotominor.yy0.z = yymsp[-3].minor.yy0.z;
                   105530:   yygotominor.yy0.n = (int)(&yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n] - yymsp[-3].minor.yy0.z);
                   105531: }
                   105532:         break;
                   105533:       case 48: /* typetoken ::= typename LP signed COMMA signed RP */
                   105534: {
                   105535:   yygotominor.yy0.z = yymsp[-5].minor.yy0.z;
                   105536:   yygotominor.yy0.n = (int)(&yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n] - yymsp[-5].minor.yy0.z);
                   105537: }
                   105538:         break;
                   105539:       case 50: /* typename ::= typename ids */
                   105540: {yygotominor.yy0.z=yymsp[-1].minor.yy0.z; yygotominor.yy0.n=yymsp[0].minor.yy0.n+(int)(yymsp[0].minor.yy0.z-yymsp[-1].minor.yy0.z);}
                   105541:         break;
                   105542:       case 57: /* ccons ::= DEFAULT term */
                   105543:       case 59: /* ccons ::= DEFAULT PLUS term */ yytestcase(yyruleno==59);
                   105544: {sqlite3AddDefaultValue(pParse,&yymsp[0].minor.yy118);}
                   105545:         break;
                   105546:       case 58: /* ccons ::= DEFAULT LP expr RP */
                   105547: {sqlite3AddDefaultValue(pParse,&yymsp[-1].minor.yy118);}
                   105548:         break;
                   105549:       case 60: /* ccons ::= DEFAULT MINUS term */
                   105550: {
                   105551:   ExprSpan v;
                   105552:   v.pExpr = sqlite3PExpr(pParse, TK_UMINUS, yymsp[0].minor.yy118.pExpr, 0, 0);
                   105553:   v.zStart = yymsp[-1].minor.yy0.z;
                   105554:   v.zEnd = yymsp[0].minor.yy118.zEnd;
                   105555:   sqlite3AddDefaultValue(pParse,&v);
                   105556: }
                   105557:         break;
                   105558:       case 61: /* ccons ::= DEFAULT id */
                   105559: {
                   105560:   ExprSpan v;
                   105561:   spanExpr(&v, pParse, TK_STRING, &yymsp[0].minor.yy0);
                   105562:   sqlite3AddDefaultValue(pParse,&v);
                   105563: }
                   105564:         break;
                   105565:       case 63: /* ccons ::= NOT NULL onconf */
                   105566: {sqlite3AddNotNull(pParse, yymsp[0].minor.yy4);}
                   105567:         break;
                   105568:       case 64: /* ccons ::= PRIMARY KEY sortorder onconf autoinc */
                   105569: {sqlite3AddPrimaryKey(pParse,0,yymsp[-1].minor.yy4,yymsp[0].minor.yy4,yymsp[-2].minor.yy4);}
                   105570:         break;
                   105571:       case 65: /* ccons ::= UNIQUE onconf */
                   105572: {sqlite3CreateIndex(pParse,0,0,0,0,yymsp[0].minor.yy4,0,0,0,0);}
                   105573:         break;
                   105574:       case 66: /* ccons ::= CHECK LP expr RP */
                   105575: {sqlite3AddCheckConstraint(pParse,yymsp[-1].minor.yy118.pExpr);}
                   105576:         break;
                   105577:       case 67: /* ccons ::= REFERENCES nm idxlist_opt refargs */
                   105578: {sqlite3CreateForeignKey(pParse,0,&yymsp[-2].minor.yy0,yymsp[-1].minor.yy322,yymsp[0].minor.yy4);}
                   105579:         break;
                   105580:       case 68: /* ccons ::= defer_subclause */
                   105581: {sqlite3DeferForeignKey(pParse,yymsp[0].minor.yy4);}
                   105582:         break;
                   105583:       case 69: /* ccons ::= COLLATE ids */
                   105584: {sqlite3AddCollateType(pParse, &yymsp[0].minor.yy0);}
                   105585:         break;
                   105586:       case 72: /* refargs ::= */
                   105587: { yygotominor.yy4 = OE_None*0x0101; /* EV: R-19803-45884 */}
                   105588:         break;
                   105589:       case 73: /* refargs ::= refargs refarg */
                   105590: { yygotominor.yy4 = (yymsp[-1].minor.yy4 & ~yymsp[0].minor.yy215.mask) | yymsp[0].minor.yy215.value; }
                   105591:         break;
                   105592:       case 74: /* refarg ::= MATCH nm */
                   105593:       case 75: /* refarg ::= ON INSERT refact */ yytestcase(yyruleno==75);
                   105594: { yygotominor.yy215.value = 0;     yygotominor.yy215.mask = 0x000000; }
                   105595:         break;
                   105596:       case 76: /* refarg ::= ON DELETE refact */
                   105597: { yygotominor.yy215.value = yymsp[0].minor.yy4;     yygotominor.yy215.mask = 0x0000ff; }
                   105598:         break;
                   105599:       case 77: /* refarg ::= ON UPDATE refact */
                   105600: { yygotominor.yy215.value = yymsp[0].minor.yy4<<8;  yygotominor.yy215.mask = 0x00ff00; }
                   105601:         break;
                   105602:       case 78: /* refact ::= SET NULL */
                   105603: { yygotominor.yy4 = OE_SetNull;  /* EV: R-33326-45252 */}
                   105604:         break;
                   105605:       case 79: /* refact ::= SET DEFAULT */
                   105606: { yygotominor.yy4 = OE_SetDflt;  /* EV: R-33326-45252 */}
                   105607:         break;
                   105608:       case 80: /* refact ::= CASCADE */
                   105609: { yygotominor.yy4 = OE_Cascade;  /* EV: R-33326-45252 */}
                   105610:         break;
                   105611:       case 81: /* refact ::= RESTRICT */
                   105612: { yygotominor.yy4 = OE_Restrict; /* EV: R-33326-45252 */}
                   105613:         break;
                   105614:       case 82: /* refact ::= NO ACTION */
                   105615: { yygotominor.yy4 = OE_None;     /* EV: R-33326-45252 */}
                   105616:         break;
                   105617:       case 84: /* defer_subclause ::= DEFERRABLE init_deferred_pred_opt */
                   105618:       case 99: /* defer_subclause_opt ::= defer_subclause */ yytestcase(yyruleno==99);
                   105619:       case 101: /* onconf ::= ON CONFLICT resolvetype */ yytestcase(yyruleno==101);
                   105620:       case 104: /* resolvetype ::= raisetype */ yytestcase(yyruleno==104);
                   105621: {yygotominor.yy4 = yymsp[0].minor.yy4;}
                   105622:         break;
                   105623:       case 88: /* conslist_opt ::= */
                   105624: {yygotominor.yy0.n = 0; yygotominor.yy0.z = 0;}
                   105625:         break;
                   105626:       case 89: /* conslist_opt ::= COMMA conslist */
                   105627: {yygotominor.yy0 = yymsp[-1].minor.yy0;}
                   105628:         break;
                   105629:       case 94: /* tcons ::= PRIMARY KEY LP idxlist autoinc RP onconf */
                   105630: {sqlite3AddPrimaryKey(pParse,yymsp[-3].minor.yy322,yymsp[0].minor.yy4,yymsp[-2].minor.yy4,0);}
                   105631:         break;
                   105632:       case 95: /* tcons ::= UNIQUE LP idxlist RP onconf */
                   105633: {sqlite3CreateIndex(pParse,0,0,0,yymsp[-2].minor.yy322,yymsp[0].minor.yy4,0,0,0,0);}
                   105634:         break;
                   105635:       case 96: /* tcons ::= CHECK LP expr RP onconf */
                   105636: {sqlite3AddCheckConstraint(pParse,yymsp[-2].minor.yy118.pExpr);}
                   105637:         break;
                   105638:       case 97: /* tcons ::= FOREIGN KEY LP idxlist RP REFERENCES nm idxlist_opt refargs defer_subclause_opt */
                   105639: {
                   105640:     sqlite3CreateForeignKey(pParse, yymsp[-6].minor.yy322, &yymsp[-3].minor.yy0, yymsp[-2].minor.yy322, yymsp[-1].minor.yy4);
                   105641:     sqlite3DeferForeignKey(pParse, yymsp[0].minor.yy4);
                   105642: }
                   105643:         break;
                   105644:       case 100: /* onconf ::= */
                   105645: {yygotominor.yy4 = OE_Default;}
                   105646:         break;
                   105647:       case 102: /* orconf ::= */
                   105648: {yygotominor.yy210 = OE_Default;}
                   105649:         break;
                   105650:       case 103: /* orconf ::= OR resolvetype */
                   105651: {yygotominor.yy210 = (u8)yymsp[0].minor.yy4;}
                   105652:         break;
                   105653:       case 105: /* resolvetype ::= IGNORE */
                   105654: {yygotominor.yy4 = OE_Ignore;}
                   105655:         break;
                   105656:       case 106: /* resolvetype ::= REPLACE */
                   105657: {yygotominor.yy4 = OE_Replace;}
                   105658:         break;
                   105659:       case 107: /* cmd ::= DROP TABLE ifexists fullname */
                   105660: {
                   105661:   sqlite3DropTable(pParse, yymsp[0].minor.yy259, 0, yymsp[-1].minor.yy4);
                   105662: }
                   105663:         break;
                   105664:       case 110: /* cmd ::= createkw temp VIEW ifnotexists nm dbnm AS select */
                   105665: {
                   105666:   sqlite3CreateView(pParse, &yymsp[-7].minor.yy0, &yymsp[-3].minor.yy0, &yymsp[-2].minor.yy0, yymsp[0].minor.yy387, yymsp[-6].minor.yy4, yymsp[-4].minor.yy4);
                   105667: }
                   105668:         break;
                   105669:       case 111: /* cmd ::= DROP VIEW ifexists fullname */
                   105670: {
                   105671:   sqlite3DropTable(pParse, yymsp[0].minor.yy259, 1, yymsp[-1].minor.yy4);
                   105672: }
                   105673:         break;
                   105674:       case 112: /* cmd ::= select */
                   105675: {
                   105676:   SelectDest dest = {SRT_Output, 0, 0, 0, 0};
                   105677:   sqlite3Select(pParse, yymsp[0].minor.yy387, &dest);
                   105678:   sqlite3SelectDelete(pParse->db, yymsp[0].minor.yy387);
                   105679: }
                   105680:         break;
                   105681:       case 113: /* select ::= oneselect */
                   105682: {yygotominor.yy387 = yymsp[0].minor.yy387;}
                   105683:         break;
                   105684:       case 114: /* select ::= select multiselect_op oneselect */
                   105685: {
                   105686:   if( yymsp[0].minor.yy387 ){
                   105687:     yymsp[0].minor.yy387->op = (u8)yymsp[-1].minor.yy4;
                   105688:     yymsp[0].minor.yy387->pPrior = yymsp[-2].minor.yy387;
                   105689:   }else{
                   105690:     sqlite3SelectDelete(pParse->db, yymsp[-2].minor.yy387);
                   105691:   }
                   105692:   yygotominor.yy387 = yymsp[0].minor.yy387;
                   105693: }
                   105694:         break;
                   105695:       case 116: /* multiselect_op ::= UNION ALL */
                   105696: {yygotominor.yy4 = TK_ALL;}
                   105697:         break;
                   105698:       case 118: /* oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt */
                   105699: {
                   105700:   yygotominor.yy387 = sqlite3SelectNew(pParse,yymsp[-6].minor.yy322,yymsp[-5].minor.yy259,yymsp[-4].minor.yy314,yymsp[-3].minor.yy322,yymsp[-2].minor.yy314,yymsp[-1].minor.yy322,yymsp[-7].minor.yy4,yymsp[0].minor.yy292.pLimit,yymsp[0].minor.yy292.pOffset);
                   105701: }
                   105702:         break;
                   105703:       case 122: /* sclp ::= selcollist COMMA */
                   105704:       case 247: /* idxlist_opt ::= LP idxlist RP */ yytestcase(yyruleno==247);
                   105705: {yygotominor.yy322 = yymsp[-1].minor.yy322;}
                   105706:         break;
                   105707:       case 123: /* sclp ::= */
                   105708:       case 151: /* orderby_opt ::= */ yytestcase(yyruleno==151);
                   105709:       case 159: /* groupby_opt ::= */ yytestcase(yyruleno==159);
                   105710:       case 240: /* exprlist ::= */ yytestcase(yyruleno==240);
                   105711:       case 246: /* idxlist_opt ::= */ yytestcase(yyruleno==246);
                   105712: {yygotominor.yy322 = 0;}
                   105713:         break;
                   105714:       case 124: /* selcollist ::= sclp expr as */
                   105715: {
                   105716:    yygotominor.yy322 = sqlite3ExprListAppend(pParse, yymsp[-2].minor.yy322, yymsp[-1].minor.yy118.pExpr);
                   105717:    if( yymsp[0].minor.yy0.n>0 ) sqlite3ExprListSetName(pParse, yygotominor.yy322, &yymsp[0].minor.yy0, 1);
                   105718:    sqlite3ExprListSetSpan(pParse,yygotominor.yy322,&yymsp[-1].minor.yy118);
                   105719: }
                   105720:         break;
                   105721:       case 125: /* selcollist ::= sclp STAR */
                   105722: {
                   105723:   Expr *p = sqlite3Expr(pParse->db, TK_ALL, 0);
                   105724:   yygotominor.yy322 = sqlite3ExprListAppend(pParse, yymsp[-1].minor.yy322, p);
                   105725: }
                   105726:         break;
                   105727:       case 126: /* selcollist ::= sclp nm DOT STAR */
                   105728: {
                   105729:   Expr *pRight = sqlite3PExpr(pParse, TK_ALL, 0, 0, &yymsp[0].minor.yy0);
                   105730:   Expr *pLeft = sqlite3PExpr(pParse, TK_ID, 0, 0, &yymsp[-2].minor.yy0);
                   105731:   Expr *pDot = sqlite3PExpr(pParse, TK_DOT, pLeft, pRight, 0);
                   105732:   yygotominor.yy322 = sqlite3ExprListAppend(pParse,yymsp[-3].minor.yy322, pDot);
                   105733: }
                   105734:         break;
                   105735:       case 129: /* as ::= */
                   105736: {yygotominor.yy0.n = 0;}
                   105737:         break;
                   105738:       case 130: /* from ::= */
                   105739: {yygotominor.yy259 = sqlite3DbMallocZero(pParse->db, sizeof(*yygotominor.yy259));}
                   105740:         break;
                   105741:       case 131: /* from ::= FROM seltablist */
                   105742: {
                   105743:   yygotominor.yy259 = yymsp[0].minor.yy259;
                   105744:   sqlite3SrcListShiftJoinType(yygotominor.yy259);
                   105745: }
                   105746:         break;
                   105747:       case 132: /* stl_prefix ::= seltablist joinop */
                   105748: {
                   105749:    yygotominor.yy259 = yymsp[-1].minor.yy259;
                   105750:    if( ALWAYS(yygotominor.yy259 && yygotominor.yy259->nSrc>0) ) yygotominor.yy259->a[yygotominor.yy259->nSrc-1].jointype = (u8)yymsp[0].minor.yy4;
                   105751: }
                   105752:         break;
                   105753:       case 133: /* stl_prefix ::= */
                   105754: {yygotominor.yy259 = 0;}
                   105755:         break;
                   105756:       case 134: /* seltablist ::= stl_prefix nm dbnm as indexed_opt on_opt using_opt */
                   105757: {
                   105758:   yygotominor.yy259 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-6].minor.yy259,&yymsp[-5].minor.yy0,&yymsp[-4].minor.yy0,&yymsp[-3].minor.yy0,0,yymsp[-1].minor.yy314,yymsp[0].minor.yy384);
                   105759:   sqlite3SrcListIndexedBy(pParse, yygotominor.yy259, &yymsp[-2].minor.yy0);
                   105760: }
                   105761:         break;
                   105762:       case 135: /* seltablist ::= stl_prefix LP select RP as on_opt using_opt */
                   105763: {
                   105764:     yygotominor.yy259 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-6].minor.yy259,0,0,&yymsp[-2].minor.yy0,yymsp[-4].minor.yy387,yymsp[-1].minor.yy314,yymsp[0].minor.yy384);
                   105765:   }
                   105766:         break;
                   105767:       case 136: /* seltablist ::= stl_prefix LP seltablist RP as on_opt using_opt */
                   105768: {
                   105769:     if( yymsp[-6].minor.yy259==0 && yymsp[-2].minor.yy0.n==0 && yymsp[-1].minor.yy314==0 && yymsp[0].minor.yy384==0 ){
                   105770:       yygotominor.yy259 = yymsp[-4].minor.yy259;
                   105771:     }else{
                   105772:       Select *pSubquery;
                   105773:       sqlite3SrcListShiftJoinType(yymsp[-4].minor.yy259);
                   105774:       pSubquery = sqlite3SelectNew(pParse,0,yymsp[-4].minor.yy259,0,0,0,0,0,0,0);
                   105775:       yygotominor.yy259 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-6].minor.yy259,0,0,&yymsp[-2].minor.yy0,pSubquery,yymsp[-1].minor.yy314,yymsp[0].minor.yy384);
                   105776:     }
                   105777:   }
                   105778:         break;
                   105779:       case 137: /* dbnm ::= */
                   105780:       case 146: /* indexed_opt ::= */ yytestcase(yyruleno==146);
                   105781: {yygotominor.yy0.z=0; yygotominor.yy0.n=0;}
                   105782:         break;
                   105783:       case 139: /* fullname ::= nm dbnm */
                   105784: {yygotominor.yy259 = sqlite3SrcListAppend(pParse->db,0,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0);}
                   105785:         break;
                   105786:       case 140: /* joinop ::= COMMA|JOIN */
                   105787: { yygotominor.yy4 = JT_INNER; }
                   105788:         break;
                   105789:       case 141: /* joinop ::= JOIN_KW JOIN */
                   105790: { yygotominor.yy4 = sqlite3JoinType(pParse,&yymsp[-1].minor.yy0,0,0); }
                   105791:         break;
                   105792:       case 142: /* joinop ::= JOIN_KW nm JOIN */
                   105793: { yygotominor.yy4 = sqlite3JoinType(pParse,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0,0); }
                   105794:         break;
                   105795:       case 143: /* joinop ::= JOIN_KW nm nm JOIN */
                   105796: { yygotominor.yy4 = sqlite3JoinType(pParse,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0); }
                   105797:         break;
                   105798:       case 144: /* on_opt ::= ON expr */
                   105799:       case 155: /* sortitem ::= expr */ yytestcase(yyruleno==155);
                   105800:       case 162: /* having_opt ::= HAVING expr */ yytestcase(yyruleno==162);
                   105801:       case 169: /* where_opt ::= WHERE expr */ yytestcase(yyruleno==169);
                   105802:       case 235: /* case_else ::= ELSE expr */ yytestcase(yyruleno==235);
                   105803:       case 237: /* case_operand ::= expr */ yytestcase(yyruleno==237);
                   105804: {yygotominor.yy314 = yymsp[0].minor.yy118.pExpr;}
                   105805:         break;
                   105806:       case 145: /* on_opt ::= */
                   105807:       case 161: /* having_opt ::= */ yytestcase(yyruleno==161);
                   105808:       case 168: /* where_opt ::= */ yytestcase(yyruleno==168);
                   105809:       case 236: /* case_else ::= */ yytestcase(yyruleno==236);
                   105810:       case 238: /* case_operand ::= */ yytestcase(yyruleno==238);
                   105811: {yygotominor.yy314 = 0;}
                   105812:         break;
                   105813:       case 148: /* indexed_opt ::= NOT INDEXED */
                   105814: {yygotominor.yy0.z=0; yygotominor.yy0.n=1;}
                   105815:         break;
                   105816:       case 149: /* using_opt ::= USING LP inscollist RP */
                   105817:       case 181: /* inscollist_opt ::= LP inscollist RP */ yytestcase(yyruleno==181);
                   105818: {yygotominor.yy384 = yymsp[-1].minor.yy384;}
                   105819:         break;
                   105820:       case 150: /* using_opt ::= */
                   105821:       case 180: /* inscollist_opt ::= */ yytestcase(yyruleno==180);
                   105822: {yygotominor.yy384 = 0;}
                   105823:         break;
                   105824:       case 152: /* orderby_opt ::= ORDER BY sortlist */
                   105825:       case 160: /* groupby_opt ::= GROUP BY nexprlist */ yytestcase(yyruleno==160);
                   105826:       case 239: /* exprlist ::= nexprlist */ yytestcase(yyruleno==239);
                   105827: {yygotominor.yy322 = yymsp[0].minor.yy322;}
                   105828:         break;
                   105829:       case 153: /* sortlist ::= sortlist COMMA sortitem sortorder */
                   105830: {
                   105831:   yygotominor.yy322 = sqlite3ExprListAppend(pParse,yymsp[-3].minor.yy322,yymsp[-1].minor.yy314);
                   105832:   if( yygotominor.yy322 ) yygotominor.yy322->a[yygotominor.yy322->nExpr-1].sortOrder = (u8)yymsp[0].minor.yy4;
                   105833: }
                   105834:         break;
                   105835:       case 154: /* sortlist ::= sortitem sortorder */
                   105836: {
                   105837:   yygotominor.yy322 = sqlite3ExprListAppend(pParse,0,yymsp[-1].minor.yy314);
                   105838:   if( yygotominor.yy322 && ALWAYS(yygotominor.yy322->a) ) yygotominor.yy322->a[0].sortOrder = (u8)yymsp[0].minor.yy4;
                   105839: }
                   105840:         break;
                   105841:       case 156: /* sortorder ::= ASC */
                   105842:       case 158: /* sortorder ::= */ yytestcase(yyruleno==158);
                   105843: {yygotominor.yy4 = SQLITE_SO_ASC;}
                   105844:         break;
                   105845:       case 157: /* sortorder ::= DESC */
                   105846: {yygotominor.yy4 = SQLITE_SO_DESC;}
                   105847:         break;
                   105848:       case 163: /* limit_opt ::= */
                   105849: {yygotominor.yy292.pLimit = 0; yygotominor.yy292.pOffset = 0;}
                   105850:         break;
                   105851:       case 164: /* limit_opt ::= LIMIT expr */
                   105852: {yygotominor.yy292.pLimit = yymsp[0].minor.yy118.pExpr; yygotominor.yy292.pOffset = 0;}
                   105853:         break;
                   105854:       case 165: /* limit_opt ::= LIMIT expr OFFSET expr */
                   105855: {yygotominor.yy292.pLimit = yymsp[-2].minor.yy118.pExpr; yygotominor.yy292.pOffset = yymsp[0].minor.yy118.pExpr;}
                   105856:         break;
                   105857:       case 166: /* limit_opt ::= LIMIT expr COMMA expr */
                   105858: {yygotominor.yy292.pOffset = yymsp[-2].minor.yy118.pExpr; yygotominor.yy292.pLimit = yymsp[0].minor.yy118.pExpr;}
                   105859:         break;
                   105860:       case 167: /* cmd ::= DELETE FROM fullname indexed_opt where_opt */
                   105861: {
                   105862:   sqlite3SrcListIndexedBy(pParse, yymsp[-2].minor.yy259, &yymsp[-1].minor.yy0);
                   105863:   sqlite3DeleteFrom(pParse,yymsp[-2].minor.yy259,yymsp[0].minor.yy314);
                   105864: }
                   105865:         break;
                   105866:       case 170: /* cmd ::= UPDATE orconf fullname indexed_opt SET setlist where_opt */
                   105867: {
                   105868:   sqlite3SrcListIndexedBy(pParse, yymsp[-4].minor.yy259, &yymsp[-3].minor.yy0);
                   105869:   sqlite3ExprListCheckLength(pParse,yymsp[-1].minor.yy322,"set list"); 
                   105870:   sqlite3Update(pParse,yymsp[-4].minor.yy259,yymsp[-1].minor.yy322,yymsp[0].minor.yy314,yymsp[-5].minor.yy210);
                   105871: }
                   105872:         break;
                   105873:       case 171: /* setlist ::= setlist COMMA nm EQ expr */
                   105874: {
                   105875:   yygotominor.yy322 = sqlite3ExprListAppend(pParse, yymsp[-4].minor.yy322, yymsp[0].minor.yy118.pExpr);
                   105876:   sqlite3ExprListSetName(pParse, yygotominor.yy322, &yymsp[-2].minor.yy0, 1);
                   105877: }
                   105878:         break;
                   105879:       case 172: /* setlist ::= nm EQ expr */
                   105880: {
                   105881:   yygotominor.yy322 = sqlite3ExprListAppend(pParse, 0, yymsp[0].minor.yy118.pExpr);
                   105882:   sqlite3ExprListSetName(pParse, yygotominor.yy322, &yymsp[-2].minor.yy0, 1);
                   105883: }
                   105884:         break;
                   105885:       case 173: /* cmd ::= insert_cmd INTO fullname inscollist_opt VALUES LP itemlist RP */
                   105886: {sqlite3Insert(pParse, yymsp[-5].minor.yy259, yymsp[-1].minor.yy322, 0, yymsp[-4].minor.yy384, yymsp[-7].minor.yy210);}
                   105887:         break;
                   105888:       case 174: /* cmd ::= insert_cmd INTO fullname inscollist_opt select */
                   105889: {sqlite3Insert(pParse, yymsp[-2].minor.yy259, 0, yymsp[0].minor.yy387, yymsp[-1].minor.yy384, yymsp[-4].minor.yy210);}
                   105890:         break;
                   105891:       case 175: /* cmd ::= insert_cmd INTO fullname inscollist_opt DEFAULT VALUES */
                   105892: {sqlite3Insert(pParse, yymsp[-3].minor.yy259, 0, 0, yymsp[-2].minor.yy384, yymsp[-5].minor.yy210);}
                   105893:         break;
                   105894:       case 176: /* insert_cmd ::= INSERT orconf */
                   105895: {yygotominor.yy210 = yymsp[0].minor.yy210;}
                   105896:         break;
                   105897:       case 177: /* insert_cmd ::= REPLACE */
                   105898: {yygotominor.yy210 = OE_Replace;}
                   105899:         break;
                   105900:       case 178: /* itemlist ::= itemlist COMMA expr */
                   105901:       case 241: /* nexprlist ::= nexprlist COMMA expr */ yytestcase(yyruleno==241);
                   105902: {yygotominor.yy322 = sqlite3ExprListAppend(pParse,yymsp[-2].minor.yy322,yymsp[0].minor.yy118.pExpr);}
                   105903:         break;
                   105904:       case 179: /* itemlist ::= expr */
                   105905:       case 242: /* nexprlist ::= expr */ yytestcase(yyruleno==242);
                   105906: {yygotominor.yy322 = sqlite3ExprListAppend(pParse,0,yymsp[0].minor.yy118.pExpr);}
                   105907:         break;
                   105908:       case 182: /* inscollist ::= inscollist COMMA nm */
                   105909: {yygotominor.yy384 = sqlite3IdListAppend(pParse->db,yymsp[-2].minor.yy384,&yymsp[0].minor.yy0);}
                   105910:         break;
                   105911:       case 183: /* inscollist ::= nm */
                   105912: {yygotominor.yy384 = sqlite3IdListAppend(pParse->db,0,&yymsp[0].minor.yy0);}
                   105913:         break;
                   105914:       case 184: /* expr ::= term */
                   105915: {yygotominor.yy118 = yymsp[0].minor.yy118;}
                   105916:         break;
                   105917:       case 185: /* expr ::= LP expr RP */
                   105918: {yygotominor.yy118.pExpr = yymsp[-1].minor.yy118.pExpr; spanSet(&yygotominor.yy118,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0);}
                   105919:         break;
                   105920:       case 186: /* term ::= NULL */
                   105921:       case 191: /* term ::= INTEGER|FLOAT|BLOB */ yytestcase(yyruleno==191);
                   105922:       case 192: /* term ::= STRING */ yytestcase(yyruleno==192);
                   105923: {spanExpr(&yygotominor.yy118, pParse, yymsp[0].major, &yymsp[0].minor.yy0);}
                   105924:         break;
                   105925:       case 187: /* expr ::= id */
                   105926:       case 188: /* expr ::= JOIN_KW */ yytestcase(yyruleno==188);
                   105927: {spanExpr(&yygotominor.yy118, pParse, TK_ID, &yymsp[0].minor.yy0);}
                   105928:         break;
                   105929:       case 189: /* expr ::= nm DOT nm */
                   105930: {
                   105931:   Expr *temp1 = sqlite3PExpr(pParse, TK_ID, 0, 0, &yymsp[-2].minor.yy0);
                   105932:   Expr *temp2 = sqlite3PExpr(pParse, TK_ID, 0, 0, &yymsp[0].minor.yy0);
                   105933:   yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_DOT, temp1, temp2, 0);
                   105934:   spanSet(&yygotominor.yy118,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0);
                   105935: }
                   105936:         break;
                   105937:       case 190: /* expr ::= nm DOT nm DOT nm */
                   105938: {
                   105939:   Expr *temp1 = sqlite3PExpr(pParse, TK_ID, 0, 0, &yymsp[-4].minor.yy0);
                   105940:   Expr *temp2 = sqlite3PExpr(pParse, TK_ID, 0, 0, &yymsp[-2].minor.yy0);
                   105941:   Expr *temp3 = sqlite3PExpr(pParse, TK_ID, 0, 0, &yymsp[0].minor.yy0);
                   105942:   Expr *temp4 = sqlite3PExpr(pParse, TK_DOT, temp2, temp3, 0);
                   105943:   yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_DOT, temp1, temp4, 0);
                   105944:   spanSet(&yygotominor.yy118,&yymsp[-4].minor.yy0,&yymsp[0].minor.yy0);
                   105945: }
                   105946:         break;
                   105947:       case 193: /* expr ::= REGISTER */
                   105948: {
                   105949:   /* When doing a nested parse, one can include terms in an expression
                   105950:   ** that look like this:   #1 #2 ...  These terms refer to registers
                   105951:   ** in the virtual machine.  #N is the N-th register. */
                   105952:   if( pParse->nested==0 ){
                   105953:     sqlite3ErrorMsg(pParse, "near \"%T\": syntax error", &yymsp[0].minor.yy0);
                   105954:     yygotominor.yy118.pExpr = 0;
                   105955:   }else{
                   105956:     yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_REGISTER, 0, 0, &yymsp[0].minor.yy0);
                   105957:     if( yygotominor.yy118.pExpr ) sqlite3GetInt32(&yymsp[0].minor.yy0.z[1], &yygotominor.yy118.pExpr->iTable);
                   105958:   }
                   105959:   spanSet(&yygotominor.yy118, &yymsp[0].minor.yy0, &yymsp[0].minor.yy0);
                   105960: }
                   105961:         break;
                   105962:       case 194: /* expr ::= VARIABLE */
                   105963: {
                   105964:   spanExpr(&yygotominor.yy118, pParse, TK_VARIABLE, &yymsp[0].minor.yy0);
                   105965:   sqlite3ExprAssignVarNumber(pParse, yygotominor.yy118.pExpr);
                   105966:   spanSet(&yygotominor.yy118, &yymsp[0].minor.yy0, &yymsp[0].minor.yy0);
                   105967: }
                   105968:         break;
                   105969:       case 195: /* expr ::= expr COLLATE ids */
                   105970: {
                   105971:   yygotominor.yy118.pExpr = sqlite3ExprSetCollByToken(pParse, yymsp[-2].minor.yy118.pExpr, &yymsp[0].minor.yy0);
                   105972:   yygotominor.yy118.zStart = yymsp[-2].minor.yy118.zStart;
                   105973:   yygotominor.yy118.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n];
                   105974: }
                   105975:         break;
                   105976:       case 196: /* expr ::= CAST LP expr AS typetoken RP */
                   105977: {
                   105978:   yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_CAST, yymsp[-3].minor.yy118.pExpr, 0, &yymsp[-1].minor.yy0);
                   105979:   spanSet(&yygotominor.yy118,&yymsp[-5].minor.yy0,&yymsp[0].minor.yy0);
                   105980: }
                   105981:         break;
                   105982:       case 197: /* expr ::= ID LP distinct exprlist RP */
                   105983: {
                   105984:   if( yymsp[-1].minor.yy322 && yymsp[-1].minor.yy322->nExpr>pParse->db->aLimit[SQLITE_LIMIT_FUNCTION_ARG] ){
                   105985:     sqlite3ErrorMsg(pParse, "too many arguments on function %T", &yymsp[-4].minor.yy0);
                   105986:   }
                   105987:   yygotominor.yy118.pExpr = sqlite3ExprFunction(pParse, yymsp[-1].minor.yy322, &yymsp[-4].minor.yy0);
                   105988:   spanSet(&yygotominor.yy118,&yymsp[-4].minor.yy0,&yymsp[0].minor.yy0);
                   105989:   if( yymsp[-2].minor.yy4 && yygotominor.yy118.pExpr ){
                   105990:     yygotominor.yy118.pExpr->flags |= EP_Distinct;
                   105991:   }
                   105992: }
                   105993:         break;
                   105994:       case 198: /* expr ::= ID LP STAR RP */
                   105995: {
                   105996:   yygotominor.yy118.pExpr = sqlite3ExprFunction(pParse, 0, &yymsp[-3].minor.yy0);
                   105997:   spanSet(&yygotominor.yy118,&yymsp[-3].minor.yy0,&yymsp[0].minor.yy0);
                   105998: }
                   105999:         break;
                   106000:       case 199: /* term ::= CTIME_KW */
                   106001: {
                   106002:   /* The CURRENT_TIME, CURRENT_DATE, and CURRENT_TIMESTAMP values are
                   106003:   ** treated as functions that return constants */
                   106004:   yygotominor.yy118.pExpr = sqlite3ExprFunction(pParse, 0,&yymsp[0].minor.yy0);
                   106005:   if( yygotominor.yy118.pExpr ){
                   106006:     yygotominor.yy118.pExpr->op = TK_CONST_FUNC;  
                   106007:   }
                   106008:   spanSet(&yygotominor.yy118, &yymsp[0].minor.yy0, &yymsp[0].minor.yy0);
                   106009: }
                   106010:         break;
                   106011:       case 200: /* expr ::= expr AND expr */
                   106012:       case 201: /* expr ::= expr OR expr */ yytestcase(yyruleno==201);
                   106013:       case 202: /* expr ::= expr LT|GT|GE|LE expr */ yytestcase(yyruleno==202);
                   106014:       case 203: /* expr ::= expr EQ|NE expr */ yytestcase(yyruleno==203);
                   106015:       case 204: /* expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr */ yytestcase(yyruleno==204);
                   106016:       case 205: /* expr ::= expr PLUS|MINUS expr */ yytestcase(yyruleno==205);
                   106017:       case 206: /* expr ::= expr STAR|SLASH|REM expr */ yytestcase(yyruleno==206);
                   106018:       case 207: /* expr ::= expr CONCAT expr */ yytestcase(yyruleno==207);
                   106019: {spanBinaryExpr(&yygotominor.yy118,pParse,yymsp[-1].major,&yymsp[-2].minor.yy118,&yymsp[0].minor.yy118);}
                   106020:         break;
                   106021:       case 208: /* likeop ::= LIKE_KW */
                   106022:       case 210: /* likeop ::= MATCH */ yytestcase(yyruleno==210);
                   106023: {yygotominor.yy342.eOperator = yymsp[0].minor.yy0; yygotominor.yy342.not = 0;}
                   106024:         break;
                   106025:       case 209: /* likeop ::= NOT LIKE_KW */
                   106026:       case 211: /* likeop ::= NOT MATCH */ yytestcase(yyruleno==211);
                   106027: {yygotominor.yy342.eOperator = yymsp[0].minor.yy0; yygotominor.yy342.not = 1;}
                   106028:         break;
                   106029:       case 212: /* expr ::= expr likeop expr */
                   106030: {
                   106031:   ExprList *pList;
                   106032:   pList = sqlite3ExprListAppend(pParse,0, yymsp[0].minor.yy118.pExpr);
                   106033:   pList = sqlite3ExprListAppend(pParse,pList, yymsp[-2].minor.yy118.pExpr);
                   106034:   yygotominor.yy118.pExpr = sqlite3ExprFunction(pParse, pList, &yymsp[-1].minor.yy342.eOperator);
                   106035:   if( yymsp[-1].minor.yy342.not ) yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_NOT, yygotominor.yy118.pExpr, 0, 0);
                   106036:   yygotominor.yy118.zStart = yymsp[-2].minor.yy118.zStart;
                   106037:   yygotominor.yy118.zEnd = yymsp[0].minor.yy118.zEnd;
                   106038:   if( yygotominor.yy118.pExpr ) yygotominor.yy118.pExpr->flags |= EP_InfixFunc;
                   106039: }
                   106040:         break;
                   106041:       case 213: /* expr ::= expr likeop expr ESCAPE expr */
                   106042: {
                   106043:   ExprList *pList;
                   106044:   pList = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy118.pExpr);
                   106045:   pList = sqlite3ExprListAppend(pParse,pList, yymsp[-4].minor.yy118.pExpr);
                   106046:   pList = sqlite3ExprListAppend(pParse,pList, yymsp[0].minor.yy118.pExpr);
                   106047:   yygotominor.yy118.pExpr = sqlite3ExprFunction(pParse, pList, &yymsp[-3].minor.yy342.eOperator);
                   106048:   if( yymsp[-3].minor.yy342.not ) yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_NOT, yygotominor.yy118.pExpr, 0, 0);
                   106049:   yygotominor.yy118.zStart = yymsp[-4].minor.yy118.zStart;
                   106050:   yygotominor.yy118.zEnd = yymsp[0].minor.yy118.zEnd;
                   106051:   if( yygotominor.yy118.pExpr ) yygotominor.yy118.pExpr->flags |= EP_InfixFunc;
                   106052: }
                   106053:         break;
                   106054:       case 214: /* expr ::= expr ISNULL|NOTNULL */
                   106055: {spanUnaryPostfix(&yygotominor.yy118,pParse,yymsp[0].major,&yymsp[-1].minor.yy118,&yymsp[0].minor.yy0);}
                   106056:         break;
                   106057:       case 215: /* expr ::= expr NOT NULL */
                   106058: {spanUnaryPostfix(&yygotominor.yy118,pParse,TK_NOTNULL,&yymsp[-2].minor.yy118,&yymsp[0].minor.yy0);}
                   106059:         break;
                   106060:       case 216: /* expr ::= expr IS expr */
                   106061: {
                   106062:   spanBinaryExpr(&yygotominor.yy118,pParse,TK_IS,&yymsp[-2].minor.yy118,&yymsp[0].minor.yy118);
                   106063:   binaryToUnaryIfNull(pParse, yymsp[0].minor.yy118.pExpr, yygotominor.yy118.pExpr, TK_ISNULL);
                   106064: }
                   106065:         break;
                   106066:       case 217: /* expr ::= expr IS NOT expr */
                   106067: {
                   106068:   spanBinaryExpr(&yygotominor.yy118,pParse,TK_ISNOT,&yymsp[-3].minor.yy118,&yymsp[0].minor.yy118);
                   106069:   binaryToUnaryIfNull(pParse, yymsp[0].minor.yy118.pExpr, yygotominor.yy118.pExpr, TK_NOTNULL);
                   106070: }
                   106071:         break;
                   106072:       case 218: /* expr ::= NOT expr */
                   106073:       case 219: /* expr ::= BITNOT expr */ yytestcase(yyruleno==219);
                   106074: {spanUnaryPrefix(&yygotominor.yy118,pParse,yymsp[-1].major,&yymsp[0].minor.yy118,&yymsp[-1].minor.yy0);}
                   106075:         break;
                   106076:       case 220: /* expr ::= MINUS expr */
                   106077: {spanUnaryPrefix(&yygotominor.yy118,pParse,TK_UMINUS,&yymsp[0].minor.yy118,&yymsp[-1].minor.yy0);}
                   106078:         break;
                   106079:       case 221: /* expr ::= PLUS expr */
                   106080: {spanUnaryPrefix(&yygotominor.yy118,pParse,TK_UPLUS,&yymsp[0].minor.yy118,&yymsp[-1].minor.yy0);}
                   106081:         break;
                   106082:       case 224: /* expr ::= expr between_op expr AND expr */
                   106083: {
                   106084:   ExprList *pList = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy118.pExpr);
                   106085:   pList = sqlite3ExprListAppend(pParse,pList, yymsp[0].minor.yy118.pExpr);
                   106086:   yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_BETWEEN, yymsp[-4].minor.yy118.pExpr, 0, 0);
                   106087:   if( yygotominor.yy118.pExpr ){
                   106088:     yygotominor.yy118.pExpr->x.pList = pList;
                   106089:   }else{
                   106090:     sqlite3ExprListDelete(pParse->db, pList);
                   106091:   } 
                   106092:   if( yymsp[-3].minor.yy4 ) yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_NOT, yygotominor.yy118.pExpr, 0, 0);
                   106093:   yygotominor.yy118.zStart = yymsp[-4].minor.yy118.zStart;
                   106094:   yygotominor.yy118.zEnd = yymsp[0].minor.yy118.zEnd;
                   106095: }
                   106096:         break;
                   106097:       case 227: /* expr ::= expr in_op LP exprlist RP */
                   106098: {
                   106099:     if( yymsp[-1].minor.yy322==0 ){
                   106100:       /* Expressions of the form
                   106101:       **
                   106102:       **      expr1 IN ()
                   106103:       **      expr1 NOT IN ()
                   106104:       **
                   106105:       ** simplify to constants 0 (false) and 1 (true), respectively,
                   106106:       ** regardless of the value of expr1.
                   106107:       */
                   106108:       yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_INTEGER, 0, 0, &sqlite3IntTokens[yymsp[-3].minor.yy4]);
                   106109:       sqlite3ExprDelete(pParse->db, yymsp[-4].minor.yy118.pExpr);
                   106110:     }else{
                   106111:       yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy118.pExpr, 0, 0);
                   106112:       if( yygotominor.yy118.pExpr ){
                   106113:         yygotominor.yy118.pExpr->x.pList = yymsp[-1].minor.yy322;
                   106114:         sqlite3ExprSetHeight(pParse, yygotominor.yy118.pExpr);
                   106115:       }else{
                   106116:         sqlite3ExprListDelete(pParse->db, yymsp[-1].minor.yy322);
                   106117:       }
                   106118:       if( yymsp[-3].minor.yy4 ) yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_NOT, yygotominor.yy118.pExpr, 0, 0);
                   106119:     }
                   106120:     yygotominor.yy118.zStart = yymsp[-4].minor.yy118.zStart;
                   106121:     yygotominor.yy118.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n];
                   106122:   }
                   106123:         break;
                   106124:       case 228: /* expr ::= LP select RP */
                   106125: {
                   106126:     yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_SELECT, 0, 0, 0);
                   106127:     if( yygotominor.yy118.pExpr ){
                   106128:       yygotominor.yy118.pExpr->x.pSelect = yymsp[-1].minor.yy387;
                   106129:       ExprSetProperty(yygotominor.yy118.pExpr, EP_xIsSelect);
                   106130:       sqlite3ExprSetHeight(pParse, yygotominor.yy118.pExpr);
                   106131:     }else{
                   106132:       sqlite3SelectDelete(pParse->db, yymsp[-1].minor.yy387);
                   106133:     }
                   106134:     yygotominor.yy118.zStart = yymsp[-2].minor.yy0.z;
                   106135:     yygotominor.yy118.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n];
                   106136:   }
                   106137:         break;
                   106138:       case 229: /* expr ::= expr in_op LP select RP */
                   106139: {
                   106140:     yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy118.pExpr, 0, 0);
                   106141:     if( yygotominor.yy118.pExpr ){
                   106142:       yygotominor.yy118.pExpr->x.pSelect = yymsp[-1].minor.yy387;
                   106143:       ExprSetProperty(yygotominor.yy118.pExpr, EP_xIsSelect);
                   106144:       sqlite3ExprSetHeight(pParse, yygotominor.yy118.pExpr);
                   106145:     }else{
                   106146:       sqlite3SelectDelete(pParse->db, yymsp[-1].minor.yy387);
                   106147:     }
                   106148:     if( yymsp[-3].minor.yy4 ) yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_NOT, yygotominor.yy118.pExpr, 0, 0);
                   106149:     yygotominor.yy118.zStart = yymsp[-4].minor.yy118.zStart;
                   106150:     yygotominor.yy118.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n];
                   106151:   }
                   106152:         break;
                   106153:       case 230: /* expr ::= expr in_op nm dbnm */
                   106154: {
                   106155:     SrcList *pSrc = sqlite3SrcListAppend(pParse->db, 0,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0);
                   106156:     yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_IN, yymsp[-3].minor.yy118.pExpr, 0, 0);
                   106157:     if( yygotominor.yy118.pExpr ){
                   106158:       yygotominor.yy118.pExpr->x.pSelect = sqlite3SelectNew(pParse, 0,pSrc,0,0,0,0,0,0,0);
                   106159:       ExprSetProperty(yygotominor.yy118.pExpr, EP_xIsSelect);
                   106160:       sqlite3ExprSetHeight(pParse, yygotominor.yy118.pExpr);
                   106161:     }else{
                   106162:       sqlite3SrcListDelete(pParse->db, pSrc);
                   106163:     }
                   106164:     if( yymsp[-2].minor.yy4 ) yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_NOT, yygotominor.yy118.pExpr, 0, 0);
                   106165:     yygotominor.yy118.zStart = yymsp[-3].minor.yy118.zStart;
                   106166:     yygotominor.yy118.zEnd = yymsp[0].minor.yy0.z ? &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n] : &yymsp[-1].minor.yy0.z[yymsp[-1].minor.yy0.n];
                   106167:   }
                   106168:         break;
                   106169:       case 231: /* expr ::= EXISTS LP select RP */
                   106170: {
                   106171:     Expr *p = yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_EXISTS, 0, 0, 0);
                   106172:     if( p ){
                   106173:       p->x.pSelect = yymsp[-1].minor.yy387;
                   106174:       ExprSetProperty(p, EP_xIsSelect);
                   106175:       sqlite3ExprSetHeight(pParse, p);
                   106176:     }else{
                   106177:       sqlite3SelectDelete(pParse->db, yymsp[-1].minor.yy387);
                   106178:     }
                   106179:     yygotominor.yy118.zStart = yymsp[-3].minor.yy0.z;
                   106180:     yygotominor.yy118.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n];
                   106181:   }
                   106182:         break;
                   106183:       case 232: /* expr ::= CASE case_operand case_exprlist case_else END */
                   106184: {
                   106185:   yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_CASE, yymsp[-3].minor.yy314, yymsp[-1].minor.yy314, 0);
                   106186:   if( yygotominor.yy118.pExpr ){
                   106187:     yygotominor.yy118.pExpr->x.pList = yymsp[-2].minor.yy322;
                   106188:     sqlite3ExprSetHeight(pParse, yygotominor.yy118.pExpr);
                   106189:   }else{
                   106190:     sqlite3ExprListDelete(pParse->db, yymsp[-2].minor.yy322);
                   106191:   }
                   106192:   yygotominor.yy118.zStart = yymsp[-4].minor.yy0.z;
                   106193:   yygotominor.yy118.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n];
                   106194: }
                   106195:         break;
                   106196:       case 233: /* case_exprlist ::= case_exprlist WHEN expr THEN expr */
                   106197: {
                   106198:   yygotominor.yy322 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy322, yymsp[-2].minor.yy118.pExpr);
                   106199:   yygotominor.yy322 = sqlite3ExprListAppend(pParse,yygotominor.yy322, yymsp[0].minor.yy118.pExpr);
                   106200: }
                   106201:         break;
                   106202:       case 234: /* case_exprlist ::= WHEN expr THEN expr */
                   106203: {
                   106204:   yygotominor.yy322 = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy118.pExpr);
                   106205:   yygotominor.yy322 = sqlite3ExprListAppend(pParse,yygotominor.yy322, yymsp[0].minor.yy118.pExpr);
                   106206: }
                   106207:         break;
                   106208:       case 243: /* cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP idxlist RP */
                   106209: {
                   106210:   sqlite3CreateIndex(pParse, &yymsp[-6].minor.yy0, &yymsp[-5].minor.yy0, 
                   106211:                      sqlite3SrcListAppend(pParse->db,0,&yymsp[-3].minor.yy0,0), yymsp[-1].minor.yy322, yymsp[-9].minor.yy4,
                   106212:                       &yymsp[-10].minor.yy0, &yymsp[0].minor.yy0, SQLITE_SO_ASC, yymsp[-7].minor.yy4);
                   106213: }
                   106214:         break;
                   106215:       case 244: /* uniqueflag ::= UNIQUE */
                   106216:       case 298: /* raisetype ::= ABORT */ yytestcase(yyruleno==298);
                   106217: {yygotominor.yy4 = OE_Abort;}
                   106218:         break;
                   106219:       case 245: /* uniqueflag ::= */
                   106220: {yygotominor.yy4 = OE_None;}
                   106221:         break;
                   106222:       case 248: /* idxlist ::= idxlist COMMA nm collate sortorder */
                   106223: {
                   106224:   Expr *p = 0;
                   106225:   if( yymsp[-1].minor.yy0.n>0 ){
                   106226:     p = sqlite3Expr(pParse->db, TK_COLUMN, 0);
                   106227:     sqlite3ExprSetCollByToken(pParse, p, &yymsp[-1].minor.yy0);
                   106228:   }
                   106229:   yygotominor.yy322 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy322, p);
                   106230:   sqlite3ExprListSetName(pParse,yygotominor.yy322,&yymsp[-2].minor.yy0,1);
                   106231:   sqlite3ExprListCheckLength(pParse, yygotominor.yy322, "index");
                   106232:   if( yygotominor.yy322 ) yygotominor.yy322->a[yygotominor.yy322->nExpr-1].sortOrder = (u8)yymsp[0].minor.yy4;
                   106233: }
                   106234:         break;
                   106235:       case 249: /* idxlist ::= nm collate sortorder */
                   106236: {
                   106237:   Expr *p = 0;
                   106238:   if( yymsp[-1].minor.yy0.n>0 ){
                   106239:     p = sqlite3PExpr(pParse, TK_COLUMN, 0, 0, 0);
                   106240:     sqlite3ExprSetCollByToken(pParse, p, &yymsp[-1].minor.yy0);
                   106241:   }
                   106242:   yygotominor.yy322 = sqlite3ExprListAppend(pParse,0, p);
                   106243:   sqlite3ExprListSetName(pParse, yygotominor.yy322, &yymsp[-2].minor.yy0, 1);
                   106244:   sqlite3ExprListCheckLength(pParse, yygotominor.yy322, "index");
                   106245:   if( yygotominor.yy322 ) yygotominor.yy322->a[yygotominor.yy322->nExpr-1].sortOrder = (u8)yymsp[0].minor.yy4;
                   106246: }
                   106247:         break;
                   106248:       case 250: /* collate ::= */
                   106249: {yygotominor.yy0.z = 0; yygotominor.yy0.n = 0;}
                   106250:         break;
                   106251:       case 252: /* cmd ::= DROP INDEX ifexists fullname */
                   106252: {sqlite3DropIndex(pParse, yymsp[0].minor.yy259, yymsp[-1].minor.yy4);}
                   106253:         break;
                   106254:       case 253: /* cmd ::= VACUUM */
                   106255:       case 254: /* cmd ::= VACUUM nm */ yytestcase(yyruleno==254);
                   106256: {sqlite3Vacuum(pParse);}
                   106257:         break;
                   106258:       case 255: /* cmd ::= PRAGMA nm dbnm */
                   106259: {sqlite3Pragma(pParse,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0,0,0);}
                   106260:         break;
                   106261:       case 256: /* cmd ::= PRAGMA nm dbnm EQ nmnum */
                   106262: {sqlite3Pragma(pParse,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0,0);}
                   106263:         break;
                   106264:       case 257: /* cmd ::= PRAGMA nm dbnm LP nmnum RP */
                   106265: {sqlite3Pragma(pParse,&yymsp[-4].minor.yy0,&yymsp[-3].minor.yy0,&yymsp[-1].minor.yy0,0);}
                   106266:         break;
                   106267:       case 258: /* cmd ::= PRAGMA nm dbnm EQ minus_num */
                   106268: {sqlite3Pragma(pParse,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0,1);}
                   106269:         break;
                   106270:       case 259: /* cmd ::= PRAGMA nm dbnm LP minus_num RP */
                   106271: {sqlite3Pragma(pParse,&yymsp[-4].minor.yy0,&yymsp[-3].minor.yy0,&yymsp[-1].minor.yy0,1);}
                   106272:         break;
                   106273:       case 270: /* cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END */
                   106274: {
                   106275:   Token all;
                   106276:   all.z = yymsp[-3].minor.yy0.z;
                   106277:   all.n = (int)(yymsp[0].minor.yy0.z - yymsp[-3].minor.yy0.z) + yymsp[0].minor.yy0.n;
                   106278:   sqlite3FinishTrigger(pParse, yymsp[-1].minor.yy203, &all);
                   106279: }
                   106280:         break;
                   106281:       case 271: /* trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause */
                   106282: {
                   106283:   sqlite3BeginTrigger(pParse, &yymsp[-7].minor.yy0, &yymsp[-6].minor.yy0, yymsp[-5].minor.yy4, yymsp[-4].minor.yy90.a, yymsp[-4].minor.yy90.b, yymsp[-2].minor.yy259, yymsp[0].minor.yy314, yymsp[-10].minor.yy4, yymsp[-8].minor.yy4);
                   106284:   yygotominor.yy0 = (yymsp[-6].minor.yy0.n==0?yymsp[-7].minor.yy0:yymsp[-6].minor.yy0);
                   106285: }
                   106286:         break;
                   106287:       case 272: /* trigger_time ::= BEFORE */
                   106288:       case 275: /* trigger_time ::= */ yytestcase(yyruleno==275);
                   106289: { yygotominor.yy4 = TK_BEFORE; }
                   106290:         break;
                   106291:       case 273: /* trigger_time ::= AFTER */
                   106292: { yygotominor.yy4 = TK_AFTER;  }
                   106293:         break;
                   106294:       case 274: /* trigger_time ::= INSTEAD OF */
                   106295: { yygotominor.yy4 = TK_INSTEAD;}
                   106296:         break;
                   106297:       case 276: /* trigger_event ::= DELETE|INSERT */
                   106298:       case 277: /* trigger_event ::= UPDATE */ yytestcase(yyruleno==277);
                   106299: {yygotominor.yy90.a = yymsp[0].major; yygotominor.yy90.b = 0;}
                   106300:         break;
                   106301:       case 278: /* trigger_event ::= UPDATE OF inscollist */
                   106302: {yygotominor.yy90.a = TK_UPDATE; yygotominor.yy90.b = yymsp[0].minor.yy384;}
                   106303:         break;
                   106304:       case 281: /* when_clause ::= */
                   106305:       case 303: /* key_opt ::= */ yytestcase(yyruleno==303);
                   106306: { yygotominor.yy314 = 0; }
                   106307:         break;
                   106308:       case 282: /* when_clause ::= WHEN expr */
                   106309:       case 304: /* key_opt ::= KEY expr */ yytestcase(yyruleno==304);
                   106310: { yygotominor.yy314 = yymsp[0].minor.yy118.pExpr; }
                   106311:         break;
                   106312:       case 283: /* trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */
                   106313: {
                   106314:   assert( yymsp[-2].minor.yy203!=0 );
                   106315:   yymsp[-2].minor.yy203->pLast->pNext = yymsp[-1].minor.yy203;
                   106316:   yymsp[-2].minor.yy203->pLast = yymsp[-1].minor.yy203;
                   106317:   yygotominor.yy203 = yymsp[-2].minor.yy203;
                   106318: }
                   106319:         break;
                   106320:       case 284: /* trigger_cmd_list ::= trigger_cmd SEMI */
                   106321: { 
                   106322:   assert( yymsp[-1].minor.yy203!=0 );
                   106323:   yymsp[-1].minor.yy203->pLast = yymsp[-1].minor.yy203;
                   106324:   yygotominor.yy203 = yymsp[-1].minor.yy203;
                   106325: }
                   106326:         break;
                   106327:       case 286: /* trnm ::= nm DOT nm */
                   106328: {
                   106329:   yygotominor.yy0 = yymsp[0].minor.yy0;
                   106330:   sqlite3ErrorMsg(pParse, 
                   106331:         "qualified table names are not allowed on INSERT, UPDATE, and DELETE "
                   106332:         "statements within triggers");
                   106333: }
                   106334:         break;
                   106335:       case 288: /* tridxby ::= INDEXED BY nm */
                   106336: {
                   106337:   sqlite3ErrorMsg(pParse,
                   106338:         "the INDEXED BY clause is not allowed on UPDATE or DELETE statements "
                   106339:         "within triggers");
                   106340: }
                   106341:         break;
                   106342:       case 289: /* tridxby ::= NOT INDEXED */
                   106343: {
                   106344:   sqlite3ErrorMsg(pParse,
                   106345:         "the NOT INDEXED clause is not allowed on UPDATE or DELETE statements "
                   106346:         "within triggers");
                   106347: }
                   106348:         break;
                   106349:       case 290: /* trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist where_opt */
                   106350: { yygotominor.yy203 = sqlite3TriggerUpdateStep(pParse->db, &yymsp[-4].minor.yy0, yymsp[-1].minor.yy322, yymsp[0].minor.yy314, yymsp[-5].minor.yy210); }
                   106351:         break;
                   106352:       case 291: /* trigger_cmd ::= insert_cmd INTO trnm inscollist_opt VALUES LP itemlist RP */
                   106353: {yygotominor.yy203 = sqlite3TriggerInsertStep(pParse->db, &yymsp[-5].minor.yy0, yymsp[-4].minor.yy384, yymsp[-1].minor.yy322, 0, yymsp[-7].minor.yy210);}
                   106354:         break;
                   106355:       case 292: /* trigger_cmd ::= insert_cmd INTO trnm inscollist_opt select */
                   106356: {yygotominor.yy203 = sqlite3TriggerInsertStep(pParse->db, &yymsp[-2].minor.yy0, yymsp[-1].minor.yy384, 0, yymsp[0].minor.yy387, yymsp[-4].minor.yy210);}
                   106357:         break;
                   106358:       case 293: /* trigger_cmd ::= DELETE FROM trnm tridxby where_opt */
                   106359: {yygotominor.yy203 = sqlite3TriggerDeleteStep(pParse->db, &yymsp[-2].minor.yy0, yymsp[0].minor.yy314);}
                   106360:         break;
                   106361:       case 294: /* trigger_cmd ::= select */
                   106362: {yygotominor.yy203 = sqlite3TriggerSelectStep(pParse->db, yymsp[0].minor.yy387); }
                   106363:         break;
                   106364:       case 295: /* expr ::= RAISE LP IGNORE RP */
                   106365: {
                   106366:   yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_RAISE, 0, 0, 0); 
                   106367:   if( yygotominor.yy118.pExpr ){
                   106368:     yygotominor.yy118.pExpr->affinity = OE_Ignore;
                   106369:   }
                   106370:   yygotominor.yy118.zStart = yymsp[-3].minor.yy0.z;
                   106371:   yygotominor.yy118.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n];
                   106372: }
                   106373:         break;
                   106374:       case 296: /* expr ::= RAISE LP raisetype COMMA nm RP */
                   106375: {
                   106376:   yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_RAISE, 0, 0, &yymsp[-1].minor.yy0); 
                   106377:   if( yygotominor.yy118.pExpr ) {
                   106378:     yygotominor.yy118.pExpr->affinity = (char)yymsp[-3].minor.yy4;
                   106379:   }
                   106380:   yygotominor.yy118.zStart = yymsp[-5].minor.yy0.z;
                   106381:   yygotominor.yy118.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n];
                   106382: }
                   106383:         break;
                   106384:       case 297: /* raisetype ::= ROLLBACK */
                   106385: {yygotominor.yy4 = OE_Rollback;}
                   106386:         break;
                   106387:       case 299: /* raisetype ::= FAIL */
                   106388: {yygotominor.yy4 = OE_Fail;}
                   106389:         break;
                   106390:       case 300: /* cmd ::= DROP TRIGGER ifexists fullname */
                   106391: {
                   106392:   sqlite3DropTrigger(pParse,yymsp[0].minor.yy259,yymsp[-1].minor.yy4);
                   106393: }
                   106394:         break;
                   106395:       case 301: /* cmd ::= ATTACH database_kw_opt expr AS expr key_opt */
                   106396: {
                   106397:   sqlite3Attach(pParse, yymsp[-3].minor.yy118.pExpr, yymsp[-1].minor.yy118.pExpr, yymsp[0].minor.yy314);
                   106398: }
                   106399:         break;
                   106400:       case 302: /* cmd ::= DETACH database_kw_opt expr */
                   106401: {
                   106402:   sqlite3Detach(pParse, yymsp[0].minor.yy118.pExpr);
                   106403: }
                   106404:         break;
                   106405:       case 307: /* cmd ::= REINDEX */
                   106406: {sqlite3Reindex(pParse, 0, 0);}
                   106407:         break;
                   106408:       case 308: /* cmd ::= REINDEX nm dbnm */
                   106409: {sqlite3Reindex(pParse, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0);}
                   106410:         break;
                   106411:       case 309: /* cmd ::= ANALYZE */
                   106412: {sqlite3Analyze(pParse, 0, 0);}
                   106413:         break;
                   106414:       case 310: /* cmd ::= ANALYZE nm dbnm */
                   106415: {sqlite3Analyze(pParse, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0);}
                   106416:         break;
                   106417:       case 311: /* cmd ::= ALTER TABLE fullname RENAME TO nm */
                   106418: {
                   106419:   sqlite3AlterRenameTable(pParse,yymsp[-3].minor.yy259,&yymsp[0].minor.yy0);
                   106420: }
                   106421:         break;
                   106422:       case 312: /* cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt column */
                   106423: {
                   106424:   sqlite3AlterFinishAddColumn(pParse, &yymsp[0].minor.yy0);
                   106425: }
                   106426:         break;
                   106427:       case 313: /* add_column_fullname ::= fullname */
                   106428: {
                   106429:   pParse->db->lookaside.bEnabled = 0;
                   106430:   sqlite3AlterBeginAddColumn(pParse, yymsp[0].minor.yy259);
                   106431: }
                   106432:         break;
                   106433:       case 316: /* cmd ::= create_vtab */
                   106434: {sqlite3VtabFinishParse(pParse,0);}
                   106435:         break;
                   106436:       case 317: /* cmd ::= create_vtab LP vtabarglist RP */
                   106437: {sqlite3VtabFinishParse(pParse,&yymsp[0].minor.yy0);}
                   106438:         break;
                   106439:       case 318: /* create_vtab ::= createkw VIRTUAL TABLE nm dbnm USING nm */
                   106440: {
                   106441:     sqlite3VtabBeginParse(pParse, &yymsp[-3].minor.yy0, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0);
                   106442: }
                   106443:         break;
                   106444:       case 321: /* vtabarg ::= */
                   106445: {sqlite3VtabArgInit(pParse);}
                   106446:         break;
                   106447:       case 323: /* vtabargtoken ::= ANY */
                   106448:       case 324: /* vtabargtoken ::= lp anylist RP */ yytestcase(yyruleno==324);
                   106449:       case 325: /* lp ::= LP */ yytestcase(yyruleno==325);
                   106450: {sqlite3VtabArgExtend(pParse,&yymsp[0].minor.yy0);}
                   106451:         break;
                   106452:       default:
                   106453:       /* (0) input ::= cmdlist */ yytestcase(yyruleno==0);
                   106454:       /* (1) cmdlist ::= cmdlist ecmd */ yytestcase(yyruleno==1);
                   106455:       /* (2) cmdlist ::= ecmd */ yytestcase(yyruleno==2);
                   106456:       /* (3) ecmd ::= SEMI */ yytestcase(yyruleno==3);
                   106457:       /* (4) ecmd ::= explain cmdx SEMI */ yytestcase(yyruleno==4);
                   106458:       /* (10) trans_opt ::= */ yytestcase(yyruleno==10);
                   106459:       /* (11) trans_opt ::= TRANSACTION */ yytestcase(yyruleno==11);
                   106460:       /* (12) trans_opt ::= TRANSACTION nm */ yytestcase(yyruleno==12);
                   106461:       /* (20) savepoint_opt ::= SAVEPOINT */ yytestcase(yyruleno==20);
                   106462:       /* (21) savepoint_opt ::= */ yytestcase(yyruleno==21);
                   106463:       /* (25) cmd ::= create_table create_table_args */ yytestcase(yyruleno==25);
                   106464:       /* (34) columnlist ::= columnlist COMMA column */ yytestcase(yyruleno==34);
                   106465:       /* (35) columnlist ::= column */ yytestcase(yyruleno==35);
                   106466:       /* (44) type ::= */ yytestcase(yyruleno==44);
                   106467:       /* (51) signed ::= plus_num */ yytestcase(yyruleno==51);
                   106468:       /* (52) signed ::= minus_num */ yytestcase(yyruleno==52);
                   106469:       /* (53) carglist ::= carglist carg */ yytestcase(yyruleno==53);
                   106470:       /* (54) carglist ::= */ yytestcase(yyruleno==54);
                   106471:       /* (55) carg ::= CONSTRAINT nm ccons */ yytestcase(yyruleno==55);
                   106472:       /* (56) carg ::= ccons */ yytestcase(yyruleno==56);
                   106473:       /* (62) ccons ::= NULL onconf */ yytestcase(yyruleno==62);
                   106474:       /* (90) conslist ::= conslist COMMA tcons */ yytestcase(yyruleno==90);
                   106475:       /* (91) conslist ::= conslist tcons */ yytestcase(yyruleno==91);
                   106476:       /* (92) conslist ::= tcons */ yytestcase(yyruleno==92);
                   106477:       /* (93) tcons ::= CONSTRAINT nm */ yytestcase(yyruleno==93);
                   106478:       /* (268) plus_opt ::= PLUS */ yytestcase(yyruleno==268);
                   106479:       /* (269) plus_opt ::= */ yytestcase(yyruleno==269);
                   106480:       /* (279) foreach_clause ::= */ yytestcase(yyruleno==279);
                   106481:       /* (280) foreach_clause ::= FOR EACH ROW */ yytestcase(yyruleno==280);
                   106482:       /* (287) tridxby ::= */ yytestcase(yyruleno==287);
                   106483:       /* (305) database_kw_opt ::= DATABASE */ yytestcase(yyruleno==305);
                   106484:       /* (306) database_kw_opt ::= */ yytestcase(yyruleno==306);
                   106485:       /* (314) kwcolumn_opt ::= */ yytestcase(yyruleno==314);
                   106486:       /* (315) kwcolumn_opt ::= COLUMNKW */ yytestcase(yyruleno==315);
                   106487:       /* (319) vtabarglist ::= vtabarg */ yytestcase(yyruleno==319);
                   106488:       /* (320) vtabarglist ::= vtabarglist COMMA vtabarg */ yytestcase(yyruleno==320);
                   106489:       /* (322) vtabarg ::= vtabarg vtabargtoken */ yytestcase(yyruleno==322);
                   106490:       /* (326) anylist ::= */ yytestcase(yyruleno==326);
                   106491:       /* (327) anylist ::= anylist LP anylist RP */ yytestcase(yyruleno==327);
                   106492:       /* (328) anylist ::= anylist ANY */ yytestcase(yyruleno==328);
                   106493:         break;
                   106494:   };
                   106495:   yygoto = yyRuleInfo[yyruleno].lhs;
                   106496:   yysize = yyRuleInfo[yyruleno].nrhs;
                   106497:   yypParser->yyidx -= yysize;
                   106498:   yyact = yy_find_reduce_action(yymsp[-yysize].stateno,(YYCODETYPE)yygoto);
                   106499:   if( yyact < YYNSTATE ){
                   106500: #ifdef NDEBUG
                   106501:     /* If we are not debugging and the reduce action popped at least
                   106502:     ** one element off the stack, then we can push the new element back
                   106503:     ** onto the stack here, and skip the stack overflow test in yy_shift().
                   106504:     ** That gives a significant speed improvement. */
                   106505:     if( yysize ){
                   106506:       yypParser->yyidx++;
                   106507:       yymsp -= yysize-1;
                   106508:       yymsp->stateno = (YYACTIONTYPE)yyact;
                   106509:       yymsp->major = (YYCODETYPE)yygoto;
                   106510:       yymsp->minor = yygotominor;
                   106511:     }else
                   106512: #endif
                   106513:     {
                   106514:       yy_shift(yypParser,yyact,yygoto,&yygotominor);
                   106515:     }
                   106516:   }else{
                   106517:     assert( yyact == YYNSTATE + YYNRULE + 1 );
                   106518:     yy_accept(yypParser);
                   106519:   }
                   106520: }
                   106521: 
                   106522: /*
                   106523: ** The following code executes when the parse fails
                   106524: */
                   106525: #ifndef YYNOERRORRECOVERY
                   106526: static void yy_parse_failed(
                   106527:   yyParser *yypParser           /* The parser */
                   106528: ){
                   106529:   sqlite3ParserARG_FETCH;
                   106530: #ifndef NDEBUG
                   106531:   if( yyTraceFILE ){
                   106532:     fprintf(yyTraceFILE,"%sFail!\n",yyTracePrompt);
                   106533:   }
                   106534: #endif
                   106535:   while( yypParser->yyidx>=0 ) yy_pop_parser_stack(yypParser);
                   106536:   /* Here code is inserted which will be executed whenever the
                   106537:   ** parser fails */
                   106538:   sqlite3ParserARG_STORE; /* Suppress warning about unused %extra_argument variable */
                   106539: }
                   106540: #endif /* YYNOERRORRECOVERY */
                   106541: 
                   106542: /*
                   106543: ** The following code executes when a syntax error first occurs.
                   106544: */
                   106545: static void yy_syntax_error(
                   106546:   yyParser *yypParser,           /* The parser */
                   106547:   int yymajor,                   /* The major type of the error token */
                   106548:   YYMINORTYPE yyminor            /* The minor type of the error token */
                   106549: ){
                   106550:   sqlite3ParserARG_FETCH;
                   106551: #define TOKEN (yyminor.yy0)
                   106552: 
                   106553:   UNUSED_PARAMETER(yymajor);  /* Silence some compiler warnings */
                   106554:   assert( TOKEN.z[0] );  /* The tokenizer always gives us a token */
                   106555:   sqlite3ErrorMsg(pParse, "near \"%T\": syntax error", &TOKEN);
                   106556:   pParse->parseError = 1;
                   106557:   sqlite3ParserARG_STORE; /* Suppress warning about unused %extra_argument variable */
                   106558: }
                   106559: 
                   106560: /*
                   106561: ** The following is executed when the parser accepts
                   106562: */
                   106563: static void yy_accept(
                   106564:   yyParser *yypParser           /* The parser */
                   106565: ){
                   106566:   sqlite3ParserARG_FETCH;
                   106567: #ifndef NDEBUG
                   106568:   if( yyTraceFILE ){
                   106569:     fprintf(yyTraceFILE,"%sAccept!\n",yyTracePrompt);
                   106570:   }
                   106571: #endif
                   106572:   while( yypParser->yyidx>=0 ) yy_pop_parser_stack(yypParser);
                   106573:   /* Here code is inserted which will be executed whenever the
                   106574:   ** parser accepts */
                   106575:   sqlite3ParserARG_STORE; /* Suppress warning about unused %extra_argument variable */
                   106576: }
                   106577: 
                   106578: /* The main parser program.
                   106579: ** The first argument is a pointer to a structure obtained from
                   106580: ** "sqlite3ParserAlloc" which describes the current state of the parser.
                   106581: ** The second argument is the major token number.  The third is
                   106582: ** the minor token.  The fourth optional argument is whatever the
                   106583: ** user wants (and specified in the grammar) and is available for
                   106584: ** use by the action routines.
                   106585: **
                   106586: ** Inputs:
                   106587: ** <ul>
                   106588: ** <li> A pointer to the parser (an opaque structure.)
                   106589: ** <li> The major token number.
                   106590: ** <li> The minor token number.
                   106591: ** <li> An option argument of a grammar-specified type.
                   106592: ** </ul>
                   106593: **
                   106594: ** Outputs:
                   106595: ** None.
                   106596: */
                   106597: SQLITE_PRIVATE void sqlite3Parser(
                   106598:   void *yyp,                   /* The parser */
                   106599:   int yymajor,                 /* The major token code number */
                   106600:   sqlite3ParserTOKENTYPE yyminor       /* The value for the token */
                   106601:   sqlite3ParserARG_PDECL               /* Optional %extra_argument parameter */
                   106602: ){
                   106603:   YYMINORTYPE yyminorunion;
                   106604:   int yyact;            /* The parser action. */
                   106605:   int yyendofinput;     /* True if we are at the end of input */
                   106606: #ifdef YYERRORSYMBOL
                   106607:   int yyerrorhit = 0;   /* True if yymajor has invoked an error */
                   106608: #endif
                   106609:   yyParser *yypParser;  /* The parser */
                   106610: 
                   106611:   /* (re)initialize the parser, if necessary */
                   106612:   yypParser = (yyParser*)yyp;
                   106613:   if( yypParser->yyidx<0 ){
                   106614: #if YYSTACKDEPTH<=0
                   106615:     if( yypParser->yystksz <=0 ){
                   106616:       /*memset(&yyminorunion, 0, sizeof(yyminorunion));*/
                   106617:       yyminorunion = yyzerominor;
                   106618:       yyStackOverflow(yypParser, &yyminorunion);
                   106619:       return;
                   106620:     }
                   106621: #endif
                   106622:     yypParser->yyidx = 0;
                   106623:     yypParser->yyerrcnt = -1;
                   106624:     yypParser->yystack[0].stateno = 0;
                   106625:     yypParser->yystack[0].major = 0;
                   106626:   }
                   106627:   yyminorunion.yy0 = yyminor;
                   106628:   yyendofinput = (yymajor==0);
                   106629:   sqlite3ParserARG_STORE;
                   106630: 
                   106631: #ifndef NDEBUG
                   106632:   if( yyTraceFILE ){
                   106633:     fprintf(yyTraceFILE,"%sInput %s\n",yyTracePrompt,yyTokenName[yymajor]);
                   106634:   }
                   106635: #endif
                   106636: 
                   106637:   do{
                   106638:     yyact = yy_find_shift_action(yypParser,(YYCODETYPE)yymajor);
                   106639:     if( yyact<YYNSTATE ){
                   106640:       assert( !yyendofinput );  /* Impossible to shift the $ token */
                   106641:       yy_shift(yypParser,yyact,yymajor,&yyminorunion);
                   106642:       yypParser->yyerrcnt--;
                   106643:       yymajor = YYNOCODE;
                   106644:     }else if( yyact < YYNSTATE + YYNRULE ){
                   106645:       yy_reduce(yypParser,yyact-YYNSTATE);
                   106646:     }else{
                   106647:       assert( yyact == YY_ERROR_ACTION );
                   106648: #ifdef YYERRORSYMBOL
                   106649:       int yymx;
                   106650: #endif
                   106651: #ifndef NDEBUG
                   106652:       if( yyTraceFILE ){
                   106653:         fprintf(yyTraceFILE,"%sSyntax Error!\n",yyTracePrompt);
                   106654:       }
                   106655: #endif
                   106656: #ifdef YYERRORSYMBOL
                   106657:       /* A syntax error has occurred.
                   106658:       ** The response to an error depends upon whether or not the
                   106659:       ** grammar defines an error token "ERROR".  
                   106660:       **
                   106661:       ** This is what we do if the grammar does define ERROR:
                   106662:       **
                   106663:       **  * Call the %syntax_error function.
                   106664:       **
                   106665:       **  * Begin popping the stack until we enter a state where
                   106666:       **    it is legal to shift the error symbol, then shift
                   106667:       **    the error symbol.
                   106668:       **
                   106669:       **  * Set the error count to three.
                   106670:       **
                   106671:       **  * Begin accepting and shifting new tokens.  No new error
                   106672:       **    processing will occur until three tokens have been
                   106673:       **    shifted successfully.
                   106674:       **
                   106675:       */
                   106676:       if( yypParser->yyerrcnt<0 ){
                   106677:         yy_syntax_error(yypParser,yymajor,yyminorunion);
                   106678:       }
                   106679:       yymx = yypParser->yystack[yypParser->yyidx].major;
                   106680:       if( yymx==YYERRORSYMBOL || yyerrorhit ){
                   106681: #ifndef NDEBUG
                   106682:         if( yyTraceFILE ){
                   106683:           fprintf(yyTraceFILE,"%sDiscard input token %s\n",
                   106684:              yyTracePrompt,yyTokenName[yymajor]);
                   106685:         }
                   106686: #endif
                   106687:         yy_destructor(yypParser, (YYCODETYPE)yymajor,&yyminorunion);
                   106688:         yymajor = YYNOCODE;
                   106689:       }else{
                   106690:          while(
                   106691:           yypParser->yyidx >= 0 &&
                   106692:           yymx != YYERRORSYMBOL &&
                   106693:           (yyact = yy_find_reduce_action(
                   106694:                         yypParser->yystack[yypParser->yyidx].stateno,
                   106695:                         YYERRORSYMBOL)) >= YYNSTATE
                   106696:         ){
                   106697:           yy_pop_parser_stack(yypParser);
                   106698:         }
                   106699:         if( yypParser->yyidx < 0 || yymajor==0 ){
                   106700:           yy_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion);
                   106701:           yy_parse_failed(yypParser);
                   106702:           yymajor = YYNOCODE;
                   106703:         }else if( yymx!=YYERRORSYMBOL ){
                   106704:           YYMINORTYPE u2;
                   106705:           u2.YYERRSYMDT = 0;
                   106706:           yy_shift(yypParser,yyact,YYERRORSYMBOL,&u2);
                   106707:         }
                   106708:       }
                   106709:       yypParser->yyerrcnt = 3;
                   106710:       yyerrorhit = 1;
                   106711: #elif defined(YYNOERRORRECOVERY)
                   106712:       /* If the YYNOERRORRECOVERY macro is defined, then do not attempt to
                   106713:       ** do any kind of error recovery.  Instead, simply invoke the syntax
                   106714:       ** error routine and continue going as if nothing had happened.
                   106715:       **
                   106716:       ** Applications can set this macro (for example inside %include) if
                   106717:       ** they intend to abandon the parse upon the first syntax error seen.
                   106718:       */
                   106719:       yy_syntax_error(yypParser,yymajor,yyminorunion);
                   106720:       yy_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion);
                   106721:       yymajor = YYNOCODE;
                   106722:       
                   106723: #else  /* YYERRORSYMBOL is not defined */
                   106724:       /* This is what we do if the grammar does not define ERROR:
                   106725:       **
                   106726:       **  * Report an error message, and throw away the input token.
                   106727:       **
                   106728:       **  * If the input token is $, then fail the parse.
                   106729:       **
                   106730:       ** As before, subsequent error messages are suppressed until
                   106731:       ** three input tokens have been successfully shifted.
                   106732:       */
                   106733:       if( yypParser->yyerrcnt<=0 ){
                   106734:         yy_syntax_error(yypParser,yymajor,yyminorunion);
                   106735:       }
                   106736:       yypParser->yyerrcnt = 3;
                   106737:       yy_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion);
                   106738:       if( yyendofinput ){
                   106739:         yy_parse_failed(yypParser);
                   106740:       }
                   106741:       yymajor = YYNOCODE;
                   106742: #endif
                   106743:     }
                   106744:   }while( yymajor!=YYNOCODE && yypParser->yyidx>=0 );
                   106745:   return;
                   106746: }
                   106747: 
                   106748: /************** End of parse.c ***********************************************/
                   106749: /************** Begin file tokenize.c ****************************************/
                   106750: /*
                   106751: ** 2001 September 15
                   106752: **
                   106753: ** The author disclaims copyright to this source code.  In place of
                   106754: ** a legal notice, here is a blessing:
                   106755: **
                   106756: **    May you do good and not evil.
                   106757: **    May you find forgiveness for yourself and forgive others.
                   106758: **    May you share freely, never taking more than you give.
                   106759: **
                   106760: *************************************************************************
                   106761: ** An tokenizer for SQL
                   106762: **
                   106763: ** This file contains C code that splits an SQL input string up into
                   106764: ** individual tokens and sends those tokens one-by-one over to the
                   106765: ** parser for analysis.
                   106766: */
                   106767: 
                   106768: /*
                   106769: ** The charMap() macro maps alphabetic characters into their
                   106770: ** lower-case ASCII equivalent.  On ASCII machines, this is just
                   106771: ** an upper-to-lower case map.  On EBCDIC machines we also need
                   106772: ** to adjust the encoding.  Only alphabetic characters and underscores
                   106773: ** need to be translated.
                   106774: */
                   106775: #ifdef SQLITE_ASCII
                   106776: # define charMap(X) sqlite3UpperToLower[(unsigned char)X]
                   106777: #endif
                   106778: #ifdef SQLITE_EBCDIC
                   106779: # define charMap(X) ebcdicToAscii[(unsigned char)X]
                   106780: const unsigned char ebcdicToAscii[] = {
                   106781: /* 0   1   2   3   4   5   6   7   8   9   A   B   C   D   E   F */
                   106782:    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  /* 0x */
                   106783:    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  /* 1x */
                   106784:    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  /* 2x */
                   106785:    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  /* 3x */
                   106786:    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  /* 4x */
                   106787:    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  /* 5x */
                   106788:    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 95,  0,  0,  /* 6x */
                   106789:    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  /* 7x */
                   106790:    0, 97, 98, 99,100,101,102,103,104,105,  0,  0,  0,  0,  0,  0,  /* 8x */
                   106791:    0,106,107,108,109,110,111,112,113,114,  0,  0,  0,  0,  0,  0,  /* 9x */
                   106792:    0,  0,115,116,117,118,119,120,121,122,  0,  0,  0,  0,  0,  0,  /* Ax */
                   106793:    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  /* Bx */
                   106794:    0, 97, 98, 99,100,101,102,103,104,105,  0,  0,  0,  0,  0,  0,  /* Cx */
                   106795:    0,106,107,108,109,110,111,112,113,114,  0,  0,  0,  0,  0,  0,  /* Dx */
                   106796:    0,  0,115,116,117,118,119,120,121,122,  0,  0,  0,  0,  0,  0,  /* Ex */
                   106797:    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  /* Fx */
                   106798: };
                   106799: #endif
                   106800: 
                   106801: /*
                   106802: ** The sqlite3KeywordCode function looks up an identifier to determine if
                   106803: ** it is a keyword.  If it is a keyword, the token code of that keyword is 
                   106804: ** returned.  If the input is not a keyword, TK_ID is returned.
                   106805: **
                   106806: ** The implementation of this routine was generated by a program,
                   106807: ** mkkeywordhash.h, located in the tool subdirectory of the distribution.
                   106808: ** The output of the mkkeywordhash.c program is written into a file
                   106809: ** named keywordhash.h and then included into this source file by
                   106810: ** the #include below.
                   106811: */
                   106812: /************** Include keywordhash.h in the middle of tokenize.c ************/
                   106813: /************** Begin file keywordhash.h *************************************/
                   106814: /***** This file contains automatically generated code ******
                   106815: **
                   106816: ** The code in this file has been automatically generated by
                   106817: **
                   106818: **   sqlite/tool/mkkeywordhash.c
                   106819: **
                   106820: ** The code in this file implements a function that determines whether
                   106821: ** or not a given identifier is really an SQL keyword.  The same thing
                   106822: ** might be implemented more directly using a hand-written hash table.
                   106823: ** But by using this automatically generated code, the size of the code
                   106824: ** is substantially reduced.  This is important for embedded applications
                   106825: ** on platforms with limited memory.
                   106826: */
                   106827: /* Hash score: 175 */
                   106828: static int keywordCode(const char *z, int n){
                   106829:   /* zText[] encodes 811 bytes of keywords in 541 bytes */
                   106830:   /*   REINDEXEDESCAPEACHECKEYBEFOREIGNOREGEXPLAINSTEADDATABASELECT       */
                   106831:   /*   ABLEFTHENDEFERRABLELSEXCEPTRANSACTIONATURALTERAISEXCLUSIVE         */
                   106832:   /*   XISTSAVEPOINTERSECTRIGGEREFERENCESCONSTRAINTOFFSETEMPORARY         */
                   106833:   /*   UNIQUERYATTACHAVINGROUPDATEBEGINNERELEASEBETWEENOTNULLIKE          */
                   106834:   /*   CASCADELETECASECOLLATECREATECURRENT_DATEDETACHIMMEDIATEJOIN        */
                   106835:   /*   SERTMATCHPLANALYZEPRAGMABORTVALUESVIRTUALIMITWHENWHERENAME         */
                   106836:   /*   AFTEREPLACEANDEFAULTAUTOINCREMENTCASTCOLUMNCOMMITCONFLICTCROSS     */
                   106837:   /*   CURRENT_TIMESTAMPRIMARYDEFERREDISTINCTDROPFAILFROMFULLGLOBYIF      */
                   106838:   /*   ISNULLORDERESTRICTOUTERIGHTROLLBACKROWUNIONUSINGVACUUMVIEW         */
                   106839:   /*   INITIALLY                                                          */
                   106840:   static const char zText[540] = {
                   106841:     'R','E','I','N','D','E','X','E','D','E','S','C','A','P','E','A','C','H',
                   106842:     'E','C','K','E','Y','B','E','F','O','R','E','I','G','N','O','R','E','G',
                   106843:     'E','X','P','L','A','I','N','S','T','E','A','D','D','A','T','A','B','A',
                   106844:     'S','E','L','E','C','T','A','B','L','E','F','T','H','E','N','D','E','F',
                   106845:     'E','R','R','A','B','L','E','L','S','E','X','C','E','P','T','R','A','N',
                   106846:     'S','A','C','T','I','O','N','A','T','U','R','A','L','T','E','R','A','I',
                   106847:     'S','E','X','C','L','U','S','I','V','E','X','I','S','T','S','A','V','E',
                   106848:     'P','O','I','N','T','E','R','S','E','C','T','R','I','G','G','E','R','E',
                   106849:     'F','E','R','E','N','C','E','S','C','O','N','S','T','R','A','I','N','T',
                   106850:     'O','F','F','S','E','T','E','M','P','O','R','A','R','Y','U','N','I','Q',
                   106851:     'U','E','R','Y','A','T','T','A','C','H','A','V','I','N','G','R','O','U',
                   106852:     'P','D','A','T','E','B','E','G','I','N','N','E','R','E','L','E','A','S',
                   106853:     'E','B','E','T','W','E','E','N','O','T','N','U','L','L','I','K','E','C',
                   106854:     'A','S','C','A','D','E','L','E','T','E','C','A','S','E','C','O','L','L',
                   106855:     'A','T','E','C','R','E','A','T','E','C','U','R','R','E','N','T','_','D',
                   106856:     'A','T','E','D','E','T','A','C','H','I','M','M','E','D','I','A','T','E',
                   106857:     'J','O','I','N','S','E','R','T','M','A','T','C','H','P','L','A','N','A',
                   106858:     'L','Y','Z','E','P','R','A','G','M','A','B','O','R','T','V','A','L','U',
                   106859:     'E','S','V','I','R','T','U','A','L','I','M','I','T','W','H','E','N','W',
                   106860:     'H','E','R','E','N','A','M','E','A','F','T','E','R','E','P','L','A','C',
                   106861:     'E','A','N','D','E','F','A','U','L','T','A','U','T','O','I','N','C','R',
                   106862:     'E','M','E','N','T','C','A','S','T','C','O','L','U','M','N','C','O','M',
                   106863:     'M','I','T','C','O','N','F','L','I','C','T','C','R','O','S','S','C','U',
                   106864:     'R','R','E','N','T','_','T','I','M','E','S','T','A','M','P','R','I','M',
                   106865:     'A','R','Y','D','E','F','E','R','R','E','D','I','S','T','I','N','C','T',
                   106866:     'D','R','O','P','F','A','I','L','F','R','O','M','F','U','L','L','G','L',
                   106867:     'O','B','Y','I','F','I','S','N','U','L','L','O','R','D','E','R','E','S',
                   106868:     'T','R','I','C','T','O','U','T','E','R','I','G','H','T','R','O','L','L',
                   106869:     'B','A','C','K','R','O','W','U','N','I','O','N','U','S','I','N','G','V',
                   106870:     'A','C','U','U','M','V','I','E','W','I','N','I','T','I','A','L','L','Y',
                   106871:   };
                   106872:   static const unsigned char aHash[127] = {
                   106873:       72, 101, 114,  70,   0,  45,   0,   0,  78,   0,  73,   0,   0,
                   106874:       42,  12,  74,  15,   0, 113,  81,  50, 108,   0,  19,   0,   0,
                   106875:      118,   0, 116, 111,   0,  22,  89,   0,   9,   0,   0,  66,  67,
                   106876:        0,  65,   6,   0,  48,  86,  98,   0, 115,  97,   0,   0,  44,
                   106877:        0,  99,  24,   0,  17,   0, 119,  49,  23,   0,   5, 106,  25,
                   106878:       92,   0,   0, 121, 102,  56, 120,  53,  28,  51,   0,  87,   0,
                   106879:       96,  26,   0,  95,   0,   0,   0,  91,  88,  93,  84, 105,  14,
                   106880:       39, 104,   0,  77,   0,  18,  85, 107,  32,   0, 117,  76, 109,
                   106881:       58,  46,  80,   0,   0,  90,  40,   0, 112,   0,  36,   0,   0,
                   106882:       29,   0,  82,  59,  60,   0,  20,  57,   0,  52,
                   106883:   };
                   106884:   static const unsigned char aNext[121] = {
                   106885:        0,   0,   0,   0,   4,   0,   0,   0,   0,   0,   0,   0,   0,
                   106886:        0,   2,   0,   0,   0,   0,   0,   0,  13,   0,   0,   0,   0,
                   106887:        0,   7,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
                   106888:        0,   0,   0,   0,  33,   0,  21,   0,   0,   0,  43,   3,  47,
                   106889:        0,   0,   0,   0,  30,   0,  54,   0,  38,   0,   0,   0,   1,
                   106890:       62,   0,   0,  63,   0,  41,   0,   0,   0,   0,   0,   0,   0,
                   106891:       61,   0,   0,   0,   0,  31,  55,  16,  34,  10,   0,   0,   0,
                   106892:        0,   0,   0,   0,  11,  68,  75,   0,   8,   0, 100,  94,   0,
                   106893:      103,   0,  83,   0,  71,   0,   0, 110,  27,  37,  69,  79,   0,
                   106894:       35,  64,   0,   0,
                   106895:   };
                   106896:   static const unsigned char aLen[121] = {
                   106897:        7,   7,   5,   4,   6,   4,   5,   3,   6,   7,   3,   6,   6,
                   106898:        7,   7,   3,   8,   2,   6,   5,   4,   4,   3,  10,   4,   6,
                   106899:       11,   6,   2,   7,   5,   5,   9,   6,   9,   9,   7,  10,  10,
                   106900:        4,   6,   2,   3,   9,   4,   2,   6,   5,   6,   6,   5,   6,
                   106901:        5,   5,   7,   7,   7,   3,   2,   4,   4,   7,   3,   6,   4,
                   106902:        7,   6,  12,   6,   9,   4,   6,   5,   4,   7,   6,   5,   6,
                   106903:        7,   5,   4,   5,   6,   5,   7,   3,   7,  13,   2,   2,   4,
                   106904:        6,   6,   8,   5,  17,  12,   7,   8,   8,   2,   4,   4,   4,
                   106905:        4,   4,   2,   2,   6,   5,   8,   5,   5,   8,   3,   5,   5,
                   106906:        6,   4,   9,   3,
                   106907:   };
                   106908:   static const unsigned short int aOffset[121] = {
                   106909:        0,   2,   2,   8,   9,  14,  16,  20,  23,  25,  25,  29,  33,
                   106910:       36,  41,  46,  48,  53,  54,  59,  62,  65,  67,  69,  78,  81,
                   106911:       86,  91,  95,  96, 101, 105, 109, 117, 122, 128, 136, 142, 152,
                   106912:      159, 162, 162, 165, 167, 167, 171, 176, 179, 184, 189, 194, 197,
                   106913:      203, 206, 210, 217, 223, 223, 223, 226, 229, 233, 234, 238, 244,
                   106914:      248, 255, 261, 273, 279, 288, 290, 296, 301, 303, 310, 315, 320,
                   106915:      326, 332, 337, 341, 344, 350, 354, 361, 363, 370, 372, 374, 383,
                   106916:      387, 393, 399, 407, 412, 412, 428, 435, 442, 443, 450, 454, 458,
                   106917:      462, 466, 469, 471, 473, 479, 483, 491, 495, 500, 508, 511, 516,
                   106918:      521, 527, 531, 536,
                   106919:   };
                   106920:   static const unsigned char aCode[121] = {
                   106921:     TK_REINDEX,    TK_INDEXED,    TK_INDEX,      TK_DESC,       TK_ESCAPE,     
                   106922:     TK_EACH,       TK_CHECK,      TK_KEY,        TK_BEFORE,     TK_FOREIGN,    
                   106923:     TK_FOR,        TK_IGNORE,     TK_LIKE_KW,    TK_EXPLAIN,    TK_INSTEAD,    
                   106924:     TK_ADD,        TK_DATABASE,   TK_AS,         TK_SELECT,     TK_TABLE,      
                   106925:     TK_JOIN_KW,    TK_THEN,       TK_END,        TK_DEFERRABLE, TK_ELSE,       
                   106926:     TK_EXCEPT,     TK_TRANSACTION,TK_ACTION,     TK_ON,         TK_JOIN_KW,    
                   106927:     TK_ALTER,      TK_RAISE,      TK_EXCLUSIVE,  TK_EXISTS,     TK_SAVEPOINT,  
                   106928:     TK_INTERSECT,  TK_TRIGGER,    TK_REFERENCES, TK_CONSTRAINT, TK_INTO,       
                   106929:     TK_OFFSET,     TK_OF,         TK_SET,        TK_TEMP,       TK_TEMP,       
                   106930:     TK_OR,         TK_UNIQUE,     TK_QUERY,      TK_ATTACH,     TK_HAVING,     
                   106931:     TK_GROUP,      TK_UPDATE,     TK_BEGIN,      TK_JOIN_KW,    TK_RELEASE,    
                   106932:     TK_BETWEEN,    TK_NOTNULL,    TK_NOT,        TK_NO,         TK_NULL,       
                   106933:     TK_LIKE_KW,    TK_CASCADE,    TK_ASC,        TK_DELETE,     TK_CASE,       
                   106934:     TK_COLLATE,    TK_CREATE,     TK_CTIME_KW,   TK_DETACH,     TK_IMMEDIATE,  
                   106935:     TK_JOIN,       TK_INSERT,     TK_MATCH,      TK_PLAN,       TK_ANALYZE,    
                   106936:     TK_PRAGMA,     TK_ABORT,      TK_VALUES,     TK_VIRTUAL,    TK_LIMIT,      
                   106937:     TK_WHEN,       TK_WHERE,      TK_RENAME,     TK_AFTER,      TK_REPLACE,    
                   106938:     TK_AND,        TK_DEFAULT,    TK_AUTOINCR,   TK_TO,         TK_IN,         
                   106939:     TK_CAST,       TK_COLUMNKW,   TK_COMMIT,     TK_CONFLICT,   TK_JOIN_KW,    
                   106940:     TK_CTIME_KW,   TK_CTIME_KW,   TK_PRIMARY,    TK_DEFERRED,   TK_DISTINCT,   
                   106941:     TK_IS,         TK_DROP,       TK_FAIL,       TK_FROM,       TK_JOIN_KW,    
                   106942:     TK_LIKE_KW,    TK_BY,         TK_IF,         TK_ISNULL,     TK_ORDER,      
                   106943:     TK_RESTRICT,   TK_JOIN_KW,    TK_JOIN_KW,    TK_ROLLBACK,   TK_ROW,        
                   106944:     TK_UNION,      TK_USING,      TK_VACUUM,     TK_VIEW,       TK_INITIALLY,  
                   106945:     TK_ALL,        
                   106946:   };
                   106947:   int h, i;
                   106948:   if( n<2 ) return TK_ID;
                   106949:   h = ((charMap(z[0])*4) ^
                   106950:       (charMap(z[n-1])*3) ^
                   106951:       n) % 127;
                   106952:   for(i=((int)aHash[h])-1; i>=0; i=((int)aNext[i])-1){
                   106953:     if( aLen[i]==n && sqlite3StrNICmp(&zText[aOffset[i]],z,n)==0 ){
                   106954:       testcase( i==0 ); /* REINDEX */
                   106955:       testcase( i==1 ); /* INDEXED */
                   106956:       testcase( i==2 ); /* INDEX */
                   106957:       testcase( i==3 ); /* DESC */
                   106958:       testcase( i==4 ); /* ESCAPE */
                   106959:       testcase( i==5 ); /* EACH */
                   106960:       testcase( i==6 ); /* CHECK */
                   106961:       testcase( i==7 ); /* KEY */
                   106962:       testcase( i==8 ); /* BEFORE */
                   106963:       testcase( i==9 ); /* FOREIGN */
                   106964:       testcase( i==10 ); /* FOR */
                   106965:       testcase( i==11 ); /* IGNORE */
                   106966:       testcase( i==12 ); /* REGEXP */
                   106967:       testcase( i==13 ); /* EXPLAIN */
                   106968:       testcase( i==14 ); /* INSTEAD */
                   106969:       testcase( i==15 ); /* ADD */
                   106970:       testcase( i==16 ); /* DATABASE */
                   106971:       testcase( i==17 ); /* AS */
                   106972:       testcase( i==18 ); /* SELECT */
                   106973:       testcase( i==19 ); /* TABLE */
                   106974:       testcase( i==20 ); /* LEFT */
                   106975:       testcase( i==21 ); /* THEN */
                   106976:       testcase( i==22 ); /* END */
                   106977:       testcase( i==23 ); /* DEFERRABLE */
                   106978:       testcase( i==24 ); /* ELSE */
                   106979:       testcase( i==25 ); /* EXCEPT */
                   106980:       testcase( i==26 ); /* TRANSACTION */
                   106981:       testcase( i==27 ); /* ACTION */
                   106982:       testcase( i==28 ); /* ON */
                   106983:       testcase( i==29 ); /* NATURAL */
                   106984:       testcase( i==30 ); /* ALTER */
                   106985:       testcase( i==31 ); /* RAISE */
                   106986:       testcase( i==32 ); /* EXCLUSIVE */
                   106987:       testcase( i==33 ); /* EXISTS */
                   106988:       testcase( i==34 ); /* SAVEPOINT */
                   106989:       testcase( i==35 ); /* INTERSECT */
                   106990:       testcase( i==36 ); /* TRIGGER */
                   106991:       testcase( i==37 ); /* REFERENCES */
                   106992:       testcase( i==38 ); /* CONSTRAINT */
                   106993:       testcase( i==39 ); /* INTO */
                   106994:       testcase( i==40 ); /* OFFSET */
                   106995:       testcase( i==41 ); /* OF */
                   106996:       testcase( i==42 ); /* SET */
                   106997:       testcase( i==43 ); /* TEMPORARY */
                   106998:       testcase( i==44 ); /* TEMP */
                   106999:       testcase( i==45 ); /* OR */
                   107000:       testcase( i==46 ); /* UNIQUE */
                   107001:       testcase( i==47 ); /* QUERY */
                   107002:       testcase( i==48 ); /* ATTACH */
                   107003:       testcase( i==49 ); /* HAVING */
                   107004:       testcase( i==50 ); /* GROUP */
                   107005:       testcase( i==51 ); /* UPDATE */
                   107006:       testcase( i==52 ); /* BEGIN */
                   107007:       testcase( i==53 ); /* INNER */
                   107008:       testcase( i==54 ); /* RELEASE */
                   107009:       testcase( i==55 ); /* BETWEEN */
                   107010:       testcase( i==56 ); /* NOTNULL */
                   107011:       testcase( i==57 ); /* NOT */
                   107012:       testcase( i==58 ); /* NO */
                   107013:       testcase( i==59 ); /* NULL */
                   107014:       testcase( i==60 ); /* LIKE */
                   107015:       testcase( i==61 ); /* CASCADE */
                   107016:       testcase( i==62 ); /* ASC */
                   107017:       testcase( i==63 ); /* DELETE */
                   107018:       testcase( i==64 ); /* CASE */
                   107019:       testcase( i==65 ); /* COLLATE */
                   107020:       testcase( i==66 ); /* CREATE */
                   107021:       testcase( i==67 ); /* CURRENT_DATE */
                   107022:       testcase( i==68 ); /* DETACH */
                   107023:       testcase( i==69 ); /* IMMEDIATE */
                   107024:       testcase( i==70 ); /* JOIN */
                   107025:       testcase( i==71 ); /* INSERT */
                   107026:       testcase( i==72 ); /* MATCH */
                   107027:       testcase( i==73 ); /* PLAN */
                   107028:       testcase( i==74 ); /* ANALYZE */
                   107029:       testcase( i==75 ); /* PRAGMA */
                   107030:       testcase( i==76 ); /* ABORT */
                   107031:       testcase( i==77 ); /* VALUES */
                   107032:       testcase( i==78 ); /* VIRTUAL */
                   107033:       testcase( i==79 ); /* LIMIT */
                   107034:       testcase( i==80 ); /* WHEN */
                   107035:       testcase( i==81 ); /* WHERE */
                   107036:       testcase( i==82 ); /* RENAME */
                   107037:       testcase( i==83 ); /* AFTER */
                   107038:       testcase( i==84 ); /* REPLACE */
                   107039:       testcase( i==85 ); /* AND */
                   107040:       testcase( i==86 ); /* DEFAULT */
                   107041:       testcase( i==87 ); /* AUTOINCREMENT */
                   107042:       testcase( i==88 ); /* TO */
                   107043:       testcase( i==89 ); /* IN */
                   107044:       testcase( i==90 ); /* CAST */
                   107045:       testcase( i==91 ); /* COLUMN */
                   107046:       testcase( i==92 ); /* COMMIT */
                   107047:       testcase( i==93 ); /* CONFLICT */
                   107048:       testcase( i==94 ); /* CROSS */
                   107049:       testcase( i==95 ); /* CURRENT_TIMESTAMP */
                   107050:       testcase( i==96 ); /* CURRENT_TIME */
                   107051:       testcase( i==97 ); /* PRIMARY */
                   107052:       testcase( i==98 ); /* DEFERRED */
                   107053:       testcase( i==99 ); /* DISTINCT */
                   107054:       testcase( i==100 ); /* IS */
                   107055:       testcase( i==101 ); /* DROP */
                   107056:       testcase( i==102 ); /* FAIL */
                   107057:       testcase( i==103 ); /* FROM */
                   107058:       testcase( i==104 ); /* FULL */
                   107059:       testcase( i==105 ); /* GLOB */
                   107060:       testcase( i==106 ); /* BY */
                   107061:       testcase( i==107 ); /* IF */
                   107062:       testcase( i==108 ); /* ISNULL */
                   107063:       testcase( i==109 ); /* ORDER */
                   107064:       testcase( i==110 ); /* RESTRICT */
                   107065:       testcase( i==111 ); /* OUTER */
                   107066:       testcase( i==112 ); /* RIGHT */
                   107067:       testcase( i==113 ); /* ROLLBACK */
                   107068:       testcase( i==114 ); /* ROW */
                   107069:       testcase( i==115 ); /* UNION */
                   107070:       testcase( i==116 ); /* USING */
                   107071:       testcase( i==117 ); /* VACUUM */
                   107072:       testcase( i==118 ); /* VIEW */
                   107073:       testcase( i==119 ); /* INITIALLY */
                   107074:       testcase( i==120 ); /* ALL */
                   107075:       return aCode[i];
                   107076:     }
                   107077:   }
                   107078:   return TK_ID;
                   107079: }
                   107080: SQLITE_PRIVATE int sqlite3KeywordCode(const unsigned char *z, int n){
                   107081:   return keywordCode((char*)z, n);
                   107082: }
                   107083: #define SQLITE_N_KEYWORD 121
                   107084: 
                   107085: /************** End of keywordhash.h *****************************************/
                   107086: /************** Continuing where we left off in tokenize.c *******************/
                   107087: 
                   107088: 
                   107089: /*
                   107090: ** If X is a character that can be used in an identifier then
                   107091: ** IdChar(X) will be true.  Otherwise it is false.
                   107092: **
                   107093: ** For ASCII, any character with the high-order bit set is
                   107094: ** allowed in an identifier.  For 7-bit characters, 
                   107095: ** sqlite3IsIdChar[X] must be 1.
                   107096: **
                   107097: ** For EBCDIC, the rules are more complex but have the same
                   107098: ** end result.
                   107099: **
                   107100: ** Ticket #1066.  the SQL standard does not allow '$' in the
                   107101: ** middle of identfiers.  But many SQL implementations do. 
                   107102: ** SQLite will allow '$' in identifiers for compatibility.
                   107103: ** But the feature is undocumented.
                   107104: */
                   107105: #ifdef SQLITE_ASCII
                   107106: #define IdChar(C)  ((sqlite3CtypeMap[(unsigned char)C]&0x46)!=0)
                   107107: #endif
                   107108: #ifdef SQLITE_EBCDIC
                   107109: SQLITE_PRIVATE const char sqlite3IsEbcdicIdChar[] = {
                   107110: /* x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF */
                   107111:     0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,  /* 4x */
                   107112:     0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0,  /* 5x */
                   107113:     0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0,  /* 6x */
                   107114:     0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,  /* 7x */
                   107115:     0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0,  /* 8x */
                   107116:     0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0,  /* 9x */
                   107117:     1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0,  /* Ax */
                   107118:     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  /* Bx */
                   107119:     0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1,  /* Cx */
                   107120:     0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1,  /* Dx */
                   107121:     0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1,  /* Ex */
                   107122:     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0,  /* Fx */
                   107123: };
                   107124: #define IdChar(C)  (((c=C)>=0x42 && sqlite3IsEbcdicIdChar[c-0x40]))
                   107125: #endif
                   107126: 
                   107127: 
                   107128: /*
                   107129: ** Return the length of the token that begins at z[0]. 
                   107130: ** Store the token type in *tokenType before returning.
                   107131: */
                   107132: SQLITE_PRIVATE int sqlite3GetToken(const unsigned char *z, int *tokenType){
                   107133:   int i, c;
                   107134:   switch( *z ){
                   107135:     case ' ': case '\t': case '\n': case '\f': case '\r': {
                   107136:       testcase( z[0]==' ' );
                   107137:       testcase( z[0]=='\t' );
                   107138:       testcase( z[0]=='\n' );
                   107139:       testcase( z[0]=='\f' );
                   107140:       testcase( z[0]=='\r' );
                   107141:       for(i=1; sqlite3Isspace(z[i]); i++){}
                   107142:       *tokenType = TK_SPACE;
                   107143:       return i;
                   107144:     }
                   107145:     case '-': {
                   107146:       if( z[1]=='-' ){
                   107147:         /* IMP: R-15891-05542 -- syntax diagram for comments */
                   107148:         for(i=2; (c=z[i])!=0 && c!='\n'; i++){}
                   107149:         *tokenType = TK_SPACE;   /* IMP: R-22934-25134 */
                   107150:         return i;
                   107151:       }
                   107152:       *tokenType = TK_MINUS;
                   107153:       return 1;
                   107154:     }
                   107155:     case '(': {
                   107156:       *tokenType = TK_LP;
                   107157:       return 1;
                   107158:     }
                   107159:     case ')': {
                   107160:       *tokenType = TK_RP;
                   107161:       return 1;
                   107162:     }
                   107163:     case ';': {
                   107164:       *tokenType = TK_SEMI;
                   107165:       return 1;
                   107166:     }
                   107167:     case '+': {
                   107168:       *tokenType = TK_PLUS;
                   107169:       return 1;
                   107170:     }
                   107171:     case '*': {
                   107172:       *tokenType = TK_STAR;
                   107173:       return 1;
                   107174:     }
                   107175:     case '/': {
                   107176:       if( z[1]!='*' || z[2]==0 ){
                   107177:         *tokenType = TK_SLASH;
                   107178:         return 1;
                   107179:       }
                   107180:       /* IMP: R-15891-05542 -- syntax diagram for comments */
                   107181:       for(i=3, c=z[2]; (c!='*' || z[i]!='/') && (c=z[i])!=0; i++){}
                   107182:       if( c ) i++;
                   107183:       *tokenType = TK_SPACE;   /* IMP: R-22934-25134 */
                   107184:       return i;
                   107185:     }
                   107186:     case '%': {
                   107187:       *tokenType = TK_REM;
                   107188:       return 1;
                   107189:     }
                   107190:     case '=': {
                   107191:       *tokenType = TK_EQ;
                   107192:       return 1 + (z[1]=='=');
                   107193:     }
                   107194:     case '<': {
                   107195:       if( (c=z[1])=='=' ){
                   107196:         *tokenType = TK_LE;
                   107197:         return 2;
                   107198:       }else if( c=='>' ){
                   107199:         *tokenType = TK_NE;
                   107200:         return 2;
                   107201:       }else if( c=='<' ){
                   107202:         *tokenType = TK_LSHIFT;
                   107203:         return 2;
                   107204:       }else{
                   107205:         *tokenType = TK_LT;
                   107206:         return 1;
                   107207:       }
                   107208:     }
                   107209:     case '>': {
                   107210:       if( (c=z[1])=='=' ){
                   107211:         *tokenType = TK_GE;
                   107212:         return 2;
                   107213:       }else if( c=='>' ){
                   107214:         *tokenType = TK_RSHIFT;
                   107215:         return 2;
                   107216:       }else{
                   107217:         *tokenType = TK_GT;
                   107218:         return 1;
                   107219:       }
                   107220:     }
                   107221:     case '!': {
                   107222:       if( z[1]!='=' ){
                   107223:         *tokenType = TK_ILLEGAL;
                   107224:         return 2;
                   107225:       }else{
                   107226:         *tokenType = TK_NE;
                   107227:         return 2;
                   107228:       }
                   107229:     }
                   107230:     case '|': {
                   107231:       if( z[1]!='|' ){
                   107232:         *tokenType = TK_BITOR;
                   107233:         return 1;
                   107234:       }else{
                   107235:         *tokenType = TK_CONCAT;
                   107236:         return 2;
                   107237:       }
                   107238:     }
                   107239:     case ',': {
                   107240:       *tokenType = TK_COMMA;
                   107241:       return 1;
                   107242:     }
                   107243:     case '&': {
                   107244:       *tokenType = TK_BITAND;
                   107245:       return 1;
                   107246:     }
                   107247:     case '~': {
                   107248:       *tokenType = TK_BITNOT;
                   107249:       return 1;
                   107250:     }
                   107251:     case '`':
                   107252:     case '\'':
                   107253:     case '"': {
                   107254:       int delim = z[0];
                   107255:       testcase( delim=='`' );
                   107256:       testcase( delim=='\'' );
                   107257:       testcase( delim=='"' );
                   107258:       for(i=1; (c=z[i])!=0; i++){
                   107259:         if( c==delim ){
                   107260:           if( z[i+1]==delim ){
                   107261:             i++;
                   107262:           }else{
                   107263:             break;
                   107264:           }
                   107265:         }
                   107266:       }
                   107267:       if( c=='\'' ){
                   107268:         *tokenType = TK_STRING;
                   107269:         return i+1;
                   107270:       }else if( c!=0 ){
                   107271:         *tokenType = TK_ID;
                   107272:         return i+1;
                   107273:       }else{
                   107274:         *tokenType = TK_ILLEGAL;
                   107275:         return i;
                   107276:       }
                   107277:     }
                   107278:     case '.': {
                   107279: #ifndef SQLITE_OMIT_FLOATING_POINT
                   107280:       if( !sqlite3Isdigit(z[1]) )
                   107281: #endif
                   107282:       {
                   107283:         *tokenType = TK_DOT;
                   107284:         return 1;
                   107285:       }
                   107286:       /* If the next character is a digit, this is a floating point
                   107287:       ** number that begins with ".".  Fall thru into the next case */
                   107288:     }
                   107289:     case '0': case '1': case '2': case '3': case '4':
                   107290:     case '5': case '6': case '7': case '8': case '9': {
                   107291:       testcase( z[0]=='0' );  testcase( z[0]=='1' );  testcase( z[0]=='2' );
                   107292:       testcase( z[0]=='3' );  testcase( z[0]=='4' );  testcase( z[0]=='5' );
                   107293:       testcase( z[0]=='6' );  testcase( z[0]=='7' );  testcase( z[0]=='8' );
                   107294:       testcase( z[0]=='9' );
                   107295:       *tokenType = TK_INTEGER;
                   107296:       for(i=0; sqlite3Isdigit(z[i]); i++){}
                   107297: #ifndef SQLITE_OMIT_FLOATING_POINT
                   107298:       if( z[i]=='.' ){
                   107299:         i++;
                   107300:         while( sqlite3Isdigit(z[i]) ){ i++; }
                   107301:         *tokenType = TK_FLOAT;
                   107302:       }
                   107303:       if( (z[i]=='e' || z[i]=='E') &&
                   107304:            ( sqlite3Isdigit(z[i+1]) 
                   107305:             || ((z[i+1]=='+' || z[i+1]=='-') && sqlite3Isdigit(z[i+2]))
                   107306:            )
                   107307:       ){
                   107308:         i += 2;
                   107309:         while( sqlite3Isdigit(z[i]) ){ i++; }
                   107310:         *tokenType = TK_FLOAT;
                   107311:       }
                   107312: #endif
                   107313:       while( IdChar(z[i]) ){
                   107314:         *tokenType = TK_ILLEGAL;
                   107315:         i++;
                   107316:       }
                   107317:       return i;
                   107318:     }
                   107319:     case '[': {
                   107320:       for(i=1, c=z[0]; c!=']' && (c=z[i])!=0; i++){}
                   107321:       *tokenType = c==']' ? TK_ID : TK_ILLEGAL;
                   107322:       return i;
                   107323:     }
                   107324:     case '?': {
                   107325:       *tokenType = TK_VARIABLE;
                   107326:       for(i=1; sqlite3Isdigit(z[i]); i++){}
                   107327:       return i;
                   107328:     }
                   107329:     case '#': {
                   107330:       for(i=1; sqlite3Isdigit(z[i]); i++){}
                   107331:       if( i>1 ){
                   107332:         /* Parameters of the form #NNN (where NNN is a number) are used
                   107333:         ** internally by sqlite3NestedParse.  */
                   107334:         *tokenType = TK_REGISTER;
                   107335:         return i;
                   107336:       }
                   107337:       /* Fall through into the next case if the '#' is not followed by
                   107338:       ** a digit. Try to match #AAAA where AAAA is a parameter name. */
                   107339:     }
                   107340: #ifndef SQLITE_OMIT_TCL_VARIABLE
                   107341:     case '$':
                   107342: #endif
                   107343:     case '@':  /* For compatibility with MS SQL Server */
                   107344:     case ':': {
                   107345:       int n = 0;
                   107346:       testcase( z[0]=='$' );  testcase( z[0]=='@' );  testcase( z[0]==':' );
                   107347:       *tokenType = TK_VARIABLE;
                   107348:       for(i=1; (c=z[i])!=0; i++){
                   107349:         if( IdChar(c) ){
                   107350:           n++;
                   107351: #ifndef SQLITE_OMIT_TCL_VARIABLE
                   107352:         }else if( c=='(' && n>0 ){
                   107353:           do{
                   107354:             i++;
                   107355:           }while( (c=z[i])!=0 && !sqlite3Isspace(c) && c!=')' );
                   107356:           if( c==')' ){
                   107357:             i++;
                   107358:           }else{
                   107359:             *tokenType = TK_ILLEGAL;
                   107360:           }
                   107361:           break;
                   107362:         }else if( c==':' && z[i+1]==':' ){
                   107363:           i++;
                   107364: #endif
                   107365:         }else{
                   107366:           break;
                   107367:         }
                   107368:       }
                   107369:       if( n==0 ) *tokenType = TK_ILLEGAL;
                   107370:       return i;
                   107371:     }
                   107372: #ifndef SQLITE_OMIT_BLOB_LITERAL
                   107373:     case 'x': case 'X': {
                   107374:       testcase( z[0]=='x' ); testcase( z[0]=='X' );
                   107375:       if( z[1]=='\'' ){
                   107376:         *tokenType = TK_BLOB;
                   107377:         for(i=2; sqlite3Isxdigit(z[i]); i++){}
                   107378:         if( z[i]!='\'' || i%2 ){
                   107379:           *tokenType = TK_ILLEGAL;
                   107380:           while( z[i] && z[i]!='\'' ){ i++; }
                   107381:         }
                   107382:         if( z[i] ) i++;
                   107383:         return i;
                   107384:       }
                   107385:       /* Otherwise fall through to the next case */
                   107386:     }
                   107387: #endif
                   107388:     default: {
                   107389:       if( !IdChar(*z) ){
                   107390:         break;
                   107391:       }
                   107392:       for(i=1; IdChar(z[i]); i++){}
                   107393:       *tokenType = keywordCode((char*)z, i);
                   107394:       return i;
                   107395:     }
                   107396:   }
                   107397:   *tokenType = TK_ILLEGAL;
                   107398:   return 1;
                   107399: }
                   107400: 
                   107401: /*
                   107402: ** Run the parser on the given SQL string.  The parser structure is
                   107403: ** passed in.  An SQLITE_ status code is returned.  If an error occurs
                   107404: ** then an and attempt is made to write an error message into 
                   107405: ** memory obtained from sqlite3_malloc() and to make *pzErrMsg point to that
                   107406: ** error message.
                   107407: */
                   107408: SQLITE_PRIVATE int sqlite3RunParser(Parse *pParse, const char *zSql, char **pzErrMsg){
                   107409:   int nErr = 0;                   /* Number of errors encountered */
                   107410:   int i;                          /* Loop counter */
                   107411:   void *pEngine;                  /* The LEMON-generated LALR(1) parser */
                   107412:   int tokenType;                  /* type of the next token */
                   107413:   int lastTokenParsed = -1;       /* type of the previous token */
                   107414:   u8 enableLookaside;             /* Saved value of db->lookaside.bEnabled */
                   107415:   sqlite3 *db = pParse->db;       /* The database connection */
                   107416:   int mxSqlLen;                   /* Max length of an SQL string */
                   107417: 
                   107418: 
                   107419:   mxSqlLen = db->aLimit[SQLITE_LIMIT_SQL_LENGTH];
                   107420:   if( db->activeVdbeCnt==0 ){
                   107421:     db->u1.isInterrupted = 0;
                   107422:   }
                   107423:   pParse->rc = SQLITE_OK;
                   107424:   pParse->zTail = zSql;
                   107425:   i = 0;
                   107426:   assert( pzErrMsg!=0 );
                   107427:   pEngine = sqlite3ParserAlloc((void*(*)(size_t))sqlite3Malloc);
                   107428:   if( pEngine==0 ){
                   107429:     db->mallocFailed = 1;
                   107430:     return SQLITE_NOMEM;
                   107431:   }
                   107432:   assert( pParse->pNewTable==0 );
                   107433:   assert( pParse->pNewTrigger==0 );
                   107434:   assert( pParse->nVar==0 );
                   107435:   assert( pParse->nzVar==0 );
                   107436:   assert( pParse->azVar==0 );
                   107437:   enableLookaside = db->lookaside.bEnabled;
                   107438:   if( db->lookaside.pStart ) db->lookaside.bEnabled = 1;
                   107439:   while( !db->mallocFailed && zSql[i]!=0 ){
                   107440:     assert( i>=0 );
                   107441:     pParse->sLastToken.z = &zSql[i];
                   107442:     pParse->sLastToken.n = sqlite3GetToken((unsigned char*)&zSql[i],&tokenType);
                   107443:     i += pParse->sLastToken.n;
                   107444:     if( i>mxSqlLen ){
                   107445:       pParse->rc = SQLITE_TOOBIG;
                   107446:       break;
                   107447:     }
                   107448:     switch( tokenType ){
                   107449:       case TK_SPACE: {
                   107450:         if( db->u1.isInterrupted ){
                   107451:           sqlite3ErrorMsg(pParse, "interrupt");
                   107452:           pParse->rc = SQLITE_INTERRUPT;
                   107453:           goto abort_parse;
                   107454:         }
                   107455:         break;
                   107456:       }
                   107457:       case TK_ILLEGAL: {
                   107458:         sqlite3DbFree(db, *pzErrMsg);
                   107459:         *pzErrMsg = sqlite3MPrintf(db, "unrecognized token: \"%T\"",
                   107460:                         &pParse->sLastToken);
                   107461:         nErr++;
                   107462:         goto abort_parse;
                   107463:       }
                   107464:       case TK_SEMI: {
                   107465:         pParse->zTail = &zSql[i];
                   107466:         /* Fall thru into the default case */
                   107467:       }
                   107468:       default: {
                   107469:         sqlite3Parser(pEngine, tokenType, pParse->sLastToken, pParse);
                   107470:         lastTokenParsed = tokenType;
                   107471:         if( pParse->rc!=SQLITE_OK ){
                   107472:           goto abort_parse;
                   107473:         }
                   107474:         break;
                   107475:       }
                   107476:     }
                   107477:   }
                   107478: abort_parse:
                   107479:   if( zSql[i]==0 && nErr==0 && pParse->rc==SQLITE_OK ){
                   107480:     if( lastTokenParsed!=TK_SEMI ){
                   107481:       sqlite3Parser(pEngine, TK_SEMI, pParse->sLastToken, pParse);
                   107482:       pParse->zTail = &zSql[i];
                   107483:     }
                   107484:     sqlite3Parser(pEngine, 0, pParse->sLastToken, pParse);
                   107485:   }
                   107486: #ifdef YYTRACKMAXSTACKDEPTH
                   107487:   sqlite3StatusSet(SQLITE_STATUS_PARSER_STACK,
                   107488:       sqlite3ParserStackPeak(pEngine)
                   107489:   );
                   107490: #endif /* YYDEBUG */
                   107491:   sqlite3ParserFree(pEngine, sqlite3_free);
                   107492:   db->lookaside.bEnabled = enableLookaside;
                   107493:   if( db->mallocFailed ){
                   107494:     pParse->rc = SQLITE_NOMEM;
                   107495:   }
                   107496:   if( pParse->rc!=SQLITE_OK && pParse->rc!=SQLITE_DONE && pParse->zErrMsg==0 ){
                   107497:     sqlite3SetString(&pParse->zErrMsg, db, "%s", sqlite3ErrStr(pParse->rc));
                   107498:   }
                   107499:   assert( pzErrMsg!=0 );
                   107500:   if( pParse->zErrMsg ){
                   107501:     *pzErrMsg = pParse->zErrMsg;
                   107502:     sqlite3_log(pParse->rc, "%s", *pzErrMsg);
                   107503:     pParse->zErrMsg = 0;
                   107504:     nErr++;
                   107505:   }
                   107506:   if( pParse->pVdbe && pParse->nErr>0 && pParse->nested==0 ){
                   107507:     sqlite3VdbeDelete(pParse->pVdbe);
                   107508:     pParse->pVdbe = 0;
                   107509:   }
                   107510: #ifndef SQLITE_OMIT_SHARED_CACHE
                   107511:   if( pParse->nested==0 ){
                   107512:     sqlite3DbFree(db, pParse->aTableLock);
                   107513:     pParse->aTableLock = 0;
                   107514:     pParse->nTableLock = 0;
                   107515:   }
                   107516: #endif
                   107517: #ifndef SQLITE_OMIT_VIRTUALTABLE
                   107518:   sqlite3_free(pParse->apVtabLock);
                   107519: #endif
                   107520: 
                   107521:   if( !IN_DECLARE_VTAB ){
                   107522:     /* If the pParse->declareVtab flag is set, do not delete any table 
                   107523:     ** structure built up in pParse->pNewTable. The calling code (see vtab.c)
                   107524:     ** will take responsibility for freeing the Table structure.
                   107525:     */
                   107526:     sqlite3DeleteTable(db, pParse->pNewTable);
                   107527:   }
                   107528: 
                   107529:   sqlite3DeleteTrigger(db, pParse->pNewTrigger);
                   107530:   for(i=pParse->nzVar-1; i>=0; i--) sqlite3DbFree(db, pParse->azVar[i]);
                   107531:   sqlite3DbFree(db, pParse->azVar);
                   107532:   sqlite3DbFree(db, pParse->aAlias);
                   107533:   while( pParse->pAinc ){
                   107534:     AutoincInfo *p = pParse->pAinc;
                   107535:     pParse->pAinc = p->pNext;
                   107536:     sqlite3DbFree(db, p);
                   107537:   }
                   107538:   while( pParse->pZombieTab ){
                   107539:     Table *p = pParse->pZombieTab;
                   107540:     pParse->pZombieTab = p->pNextZombie;
                   107541:     sqlite3DeleteTable(db, p);
                   107542:   }
                   107543:   if( nErr>0 && pParse->rc==SQLITE_OK ){
                   107544:     pParse->rc = SQLITE_ERROR;
                   107545:   }
                   107546:   return nErr;
                   107547: }
                   107548: 
                   107549: /************** End of tokenize.c ********************************************/
                   107550: /************** Begin file complete.c ****************************************/
                   107551: /*
                   107552: ** 2001 September 15
                   107553: **
                   107554: ** The author disclaims copyright to this source code.  In place of
                   107555: ** a legal notice, here is a blessing:
                   107556: **
                   107557: **    May you do good and not evil.
                   107558: **    May you find forgiveness for yourself and forgive others.
                   107559: **    May you share freely, never taking more than you give.
                   107560: **
                   107561: *************************************************************************
                   107562: ** An tokenizer for SQL
                   107563: **
                   107564: ** This file contains C code that implements the sqlite3_complete() API.
                   107565: ** This code used to be part of the tokenizer.c source file.  But by
                   107566: ** separating it out, the code will be automatically omitted from
                   107567: ** static links that do not use it.
                   107568: */
                   107569: #ifndef SQLITE_OMIT_COMPLETE
                   107570: 
                   107571: /*
                   107572: ** This is defined in tokenize.c.  We just have to import the definition.
                   107573: */
                   107574: #ifndef SQLITE_AMALGAMATION
                   107575: #ifdef SQLITE_ASCII
                   107576: #define IdChar(C)  ((sqlite3CtypeMap[(unsigned char)C]&0x46)!=0)
                   107577: #endif
                   107578: #ifdef SQLITE_EBCDIC
                   107579: SQLITE_PRIVATE const char sqlite3IsEbcdicIdChar[];
                   107580: #define IdChar(C)  (((c=C)>=0x42 && sqlite3IsEbcdicIdChar[c-0x40]))
                   107581: #endif
                   107582: #endif /* SQLITE_AMALGAMATION */
                   107583: 
                   107584: 
                   107585: /*
                   107586: ** Token types used by the sqlite3_complete() routine.  See the header
                   107587: ** comments on that procedure for additional information.
                   107588: */
                   107589: #define tkSEMI    0
                   107590: #define tkWS      1
                   107591: #define tkOTHER   2
                   107592: #ifndef SQLITE_OMIT_TRIGGER
                   107593: #define tkEXPLAIN 3
                   107594: #define tkCREATE  4
                   107595: #define tkTEMP    5
                   107596: #define tkTRIGGER 6
                   107597: #define tkEND     7
                   107598: #endif
                   107599: 
                   107600: /*
                   107601: ** Return TRUE if the given SQL string ends in a semicolon.
                   107602: **
                   107603: ** Special handling is require for CREATE TRIGGER statements.
                   107604: ** Whenever the CREATE TRIGGER keywords are seen, the statement
                   107605: ** must end with ";END;".
                   107606: **
                   107607: ** This implementation uses a state machine with 8 states:
                   107608: **
                   107609: **   (0) INVALID   We have not yet seen a non-whitespace character.
                   107610: **
                   107611: **   (1) START     At the beginning or end of an SQL statement.  This routine
                   107612: **                 returns 1 if it ends in the START state and 0 if it ends
                   107613: **                 in any other state.
                   107614: **
                   107615: **   (2) NORMAL    We are in the middle of statement which ends with a single
                   107616: **                 semicolon.
                   107617: **
                   107618: **   (3) EXPLAIN   The keyword EXPLAIN has been seen at the beginning of 
                   107619: **                 a statement.
                   107620: **
                   107621: **   (4) CREATE    The keyword CREATE has been seen at the beginning of a
1.1.1.3 ! misho    107622: **                 statement, possibly preceded by EXPLAIN and/or followed by
1.1       misho    107623: **                 TEMP or TEMPORARY
                   107624: **
                   107625: **   (5) TRIGGER   We are in the middle of a trigger definition that must be
                   107626: **                 ended by a semicolon, the keyword END, and another semicolon.
                   107627: **
                   107628: **   (6) SEMI      We've seen the first semicolon in the ";END;" that occurs at
                   107629: **                 the end of a trigger definition.
                   107630: **
                   107631: **   (7) END       We've seen the ";END" of the ";END;" that occurs at the end
                   107632: **                 of a trigger difinition.
                   107633: **
                   107634: ** Transitions between states above are determined by tokens extracted
                   107635: ** from the input.  The following tokens are significant:
                   107636: **
                   107637: **   (0) tkSEMI      A semicolon.
                   107638: **   (1) tkWS        Whitespace.
                   107639: **   (2) tkOTHER     Any other SQL token.
                   107640: **   (3) tkEXPLAIN   The "explain" keyword.
                   107641: **   (4) tkCREATE    The "create" keyword.
                   107642: **   (5) tkTEMP      The "temp" or "temporary" keyword.
                   107643: **   (6) tkTRIGGER   The "trigger" keyword.
                   107644: **   (7) tkEND       The "end" keyword.
                   107645: **
                   107646: ** Whitespace never causes a state transition and is always ignored.
                   107647: ** This means that a SQL string of all whitespace is invalid.
                   107648: **
                   107649: ** If we compile with SQLITE_OMIT_TRIGGER, all of the computation needed
                   107650: ** to recognize the end of a trigger can be omitted.  All we have to do
                   107651: ** is look for a semicolon that is not part of an string or comment.
                   107652: */
                   107653: SQLITE_API int sqlite3_complete(const char *zSql){
                   107654:   u8 state = 0;   /* Current state, using numbers defined in header comment */
                   107655:   u8 token;       /* Value of the next token */
                   107656: 
                   107657: #ifndef SQLITE_OMIT_TRIGGER
                   107658:   /* A complex statement machine used to detect the end of a CREATE TRIGGER
                   107659:   ** statement.  This is the normal case.
                   107660:   */
                   107661:   static const u8 trans[8][8] = {
                   107662:                      /* Token:                                                */
                   107663:      /* State:       **  SEMI  WS  OTHER  EXPLAIN  CREATE  TEMP  TRIGGER  END */
                   107664:      /* 0 INVALID: */ {    1,  0,     2,       3,      4,    2,       2,   2, },
                   107665:      /* 1   START: */ {    1,  1,     2,       3,      4,    2,       2,   2, },
                   107666:      /* 2  NORMAL: */ {    1,  2,     2,       2,      2,    2,       2,   2, },
                   107667:      /* 3 EXPLAIN: */ {    1,  3,     3,       2,      4,    2,       2,   2, },
                   107668:      /* 4  CREATE: */ {    1,  4,     2,       2,      2,    4,       5,   2, },
                   107669:      /* 5 TRIGGER: */ {    6,  5,     5,       5,      5,    5,       5,   5, },
                   107670:      /* 6    SEMI: */ {    6,  6,     5,       5,      5,    5,       5,   7, },
                   107671:      /* 7     END: */ {    1,  7,     5,       5,      5,    5,       5,   5, },
                   107672:   };
                   107673: #else
                   107674:   /* If triggers are not supported by this compile then the statement machine
                   107675:   ** used to detect the end of a statement is much simplier
                   107676:   */
                   107677:   static const u8 trans[3][3] = {
                   107678:                      /* Token:           */
                   107679:      /* State:       **  SEMI  WS  OTHER */
                   107680:      /* 0 INVALID: */ {    1,  0,     2, },
                   107681:      /* 1   START: */ {    1,  1,     2, },
                   107682:      /* 2  NORMAL: */ {    1,  2,     2, },
                   107683:   };
                   107684: #endif /* SQLITE_OMIT_TRIGGER */
                   107685: 
                   107686:   while( *zSql ){
                   107687:     switch( *zSql ){
                   107688:       case ';': {  /* A semicolon */
                   107689:         token = tkSEMI;
                   107690:         break;
                   107691:       }
                   107692:       case ' ':
                   107693:       case '\r':
                   107694:       case '\t':
                   107695:       case '\n':
                   107696:       case '\f': {  /* White space is ignored */
                   107697:         token = tkWS;
                   107698:         break;
                   107699:       }
                   107700:       case '/': {   /* C-style comments */
                   107701:         if( zSql[1]!='*' ){
                   107702:           token = tkOTHER;
                   107703:           break;
                   107704:         }
                   107705:         zSql += 2;
                   107706:         while( zSql[0] && (zSql[0]!='*' || zSql[1]!='/') ){ zSql++; }
                   107707:         if( zSql[0]==0 ) return 0;
                   107708:         zSql++;
                   107709:         token = tkWS;
                   107710:         break;
                   107711:       }
                   107712:       case '-': {   /* SQL-style comments from "--" to end of line */
                   107713:         if( zSql[1]!='-' ){
                   107714:           token = tkOTHER;
                   107715:           break;
                   107716:         }
                   107717:         while( *zSql && *zSql!='\n' ){ zSql++; }
                   107718:         if( *zSql==0 ) return state==1;
                   107719:         token = tkWS;
                   107720:         break;
                   107721:       }
                   107722:       case '[': {   /* Microsoft-style identifiers in [...] */
                   107723:         zSql++;
                   107724:         while( *zSql && *zSql!=']' ){ zSql++; }
                   107725:         if( *zSql==0 ) return 0;
                   107726:         token = tkOTHER;
                   107727:         break;
                   107728:       }
                   107729:       case '`':     /* Grave-accent quoted symbols used by MySQL */
                   107730:       case '"':     /* single- and double-quoted strings */
                   107731:       case '\'': {
                   107732:         int c = *zSql;
                   107733:         zSql++;
                   107734:         while( *zSql && *zSql!=c ){ zSql++; }
                   107735:         if( *zSql==0 ) return 0;
                   107736:         token = tkOTHER;
                   107737:         break;
                   107738:       }
                   107739:       default: {
                   107740: #ifdef SQLITE_EBCDIC
                   107741:         unsigned char c;
                   107742: #endif
                   107743:         if( IdChar((u8)*zSql) ){
                   107744:           /* Keywords and unquoted identifiers */
                   107745:           int nId;
                   107746:           for(nId=1; IdChar(zSql[nId]); nId++){}
                   107747: #ifdef SQLITE_OMIT_TRIGGER
                   107748:           token = tkOTHER;
                   107749: #else
                   107750:           switch( *zSql ){
                   107751:             case 'c': case 'C': {
                   107752:               if( nId==6 && sqlite3StrNICmp(zSql, "create", 6)==0 ){
                   107753:                 token = tkCREATE;
                   107754:               }else{
                   107755:                 token = tkOTHER;
                   107756:               }
                   107757:               break;
                   107758:             }
                   107759:             case 't': case 'T': {
                   107760:               if( nId==7 && sqlite3StrNICmp(zSql, "trigger", 7)==0 ){
                   107761:                 token = tkTRIGGER;
                   107762:               }else if( nId==4 && sqlite3StrNICmp(zSql, "temp", 4)==0 ){
                   107763:                 token = tkTEMP;
                   107764:               }else if( nId==9 && sqlite3StrNICmp(zSql, "temporary", 9)==0 ){
                   107765:                 token = tkTEMP;
                   107766:               }else{
                   107767:                 token = tkOTHER;
                   107768:               }
                   107769:               break;
                   107770:             }
                   107771:             case 'e':  case 'E': {
                   107772:               if( nId==3 && sqlite3StrNICmp(zSql, "end", 3)==0 ){
                   107773:                 token = tkEND;
                   107774:               }else
                   107775: #ifndef SQLITE_OMIT_EXPLAIN
                   107776:               if( nId==7 && sqlite3StrNICmp(zSql, "explain", 7)==0 ){
                   107777:                 token = tkEXPLAIN;
                   107778:               }else
                   107779: #endif
                   107780:               {
                   107781:                 token = tkOTHER;
                   107782:               }
                   107783:               break;
                   107784:             }
                   107785:             default: {
                   107786:               token = tkOTHER;
                   107787:               break;
                   107788:             }
                   107789:           }
                   107790: #endif /* SQLITE_OMIT_TRIGGER */
                   107791:           zSql += nId-1;
                   107792:         }else{
                   107793:           /* Operators and special symbols */
                   107794:           token = tkOTHER;
                   107795:         }
                   107796:         break;
                   107797:       }
                   107798:     }
                   107799:     state = trans[state][token];
                   107800:     zSql++;
                   107801:   }
                   107802:   return state==1;
                   107803: }
                   107804: 
                   107805: #ifndef SQLITE_OMIT_UTF16
                   107806: /*
                   107807: ** This routine is the same as the sqlite3_complete() routine described
                   107808: ** above, except that the parameter is required to be UTF-16 encoded, not
                   107809: ** UTF-8.
                   107810: */
                   107811: SQLITE_API int sqlite3_complete16(const void *zSql){
                   107812:   sqlite3_value *pVal;
                   107813:   char const *zSql8;
                   107814:   int rc = SQLITE_NOMEM;
                   107815: 
                   107816: #ifndef SQLITE_OMIT_AUTOINIT
                   107817:   rc = sqlite3_initialize();
                   107818:   if( rc ) return rc;
                   107819: #endif
                   107820:   pVal = sqlite3ValueNew(0);
                   107821:   sqlite3ValueSetStr(pVal, -1, zSql, SQLITE_UTF16NATIVE, SQLITE_STATIC);
                   107822:   zSql8 = sqlite3ValueText(pVal, SQLITE_UTF8);
                   107823:   if( zSql8 ){
                   107824:     rc = sqlite3_complete(zSql8);
                   107825:   }else{
                   107826:     rc = SQLITE_NOMEM;
                   107827:   }
                   107828:   sqlite3ValueFree(pVal);
                   107829:   return sqlite3ApiExit(0, rc);
                   107830: }
                   107831: #endif /* SQLITE_OMIT_UTF16 */
                   107832: #endif /* SQLITE_OMIT_COMPLETE */
                   107833: 
                   107834: /************** End of complete.c ********************************************/
                   107835: /************** Begin file main.c ********************************************/
                   107836: /*
                   107837: ** 2001 September 15
                   107838: **
                   107839: ** The author disclaims copyright to this source code.  In place of
                   107840: ** a legal notice, here is a blessing:
                   107841: **
                   107842: **    May you do good and not evil.
                   107843: **    May you find forgiveness for yourself and forgive others.
                   107844: **    May you share freely, never taking more than you give.
                   107845: **
                   107846: *************************************************************************
                   107847: ** Main file for the SQLite library.  The routines in this file
                   107848: ** implement the programmer interface to the library.  Routines in
                   107849: ** other files are for internal use by SQLite and should not be
                   107850: ** accessed by users of the library.
                   107851: */
                   107852: 
                   107853: #ifdef SQLITE_ENABLE_FTS3
                   107854: /************** Include fts3.h in the middle of main.c ***********************/
                   107855: /************** Begin file fts3.h ********************************************/
                   107856: /*
                   107857: ** 2006 Oct 10
                   107858: **
                   107859: ** The author disclaims copyright to this source code.  In place of
                   107860: ** a legal notice, here is a blessing:
                   107861: **
                   107862: **    May you do good and not evil.
                   107863: **    May you find forgiveness for yourself and forgive others.
                   107864: **    May you share freely, never taking more than you give.
                   107865: **
                   107866: ******************************************************************************
                   107867: **
                   107868: ** This header file is used by programs that want to link against the
                   107869: ** FTS3 library.  All it does is declare the sqlite3Fts3Init() interface.
                   107870: */
                   107871: 
                   107872: #if 0
                   107873: extern "C" {
                   107874: #endif  /* __cplusplus */
                   107875: 
                   107876: SQLITE_PRIVATE int sqlite3Fts3Init(sqlite3 *db);
                   107877: 
                   107878: #if 0
                   107879: }  /* extern "C" */
                   107880: #endif  /* __cplusplus */
                   107881: 
                   107882: /************** End of fts3.h ************************************************/
                   107883: /************** Continuing where we left off in main.c ***********************/
                   107884: #endif
                   107885: #ifdef SQLITE_ENABLE_RTREE
                   107886: /************** Include rtree.h in the middle of main.c **********************/
                   107887: /************** Begin file rtree.h *******************************************/
                   107888: /*
                   107889: ** 2008 May 26
                   107890: **
                   107891: ** The author disclaims copyright to this source code.  In place of
                   107892: ** a legal notice, here is a blessing:
                   107893: **
                   107894: **    May you do good and not evil.
                   107895: **    May you find forgiveness for yourself and forgive others.
                   107896: **    May you share freely, never taking more than you give.
                   107897: **
                   107898: ******************************************************************************
                   107899: **
                   107900: ** This header file is used by programs that want to link against the
                   107901: ** RTREE library.  All it does is declare the sqlite3RtreeInit() interface.
                   107902: */
                   107903: 
                   107904: #if 0
                   107905: extern "C" {
                   107906: #endif  /* __cplusplus */
                   107907: 
                   107908: SQLITE_PRIVATE int sqlite3RtreeInit(sqlite3 *db);
                   107909: 
                   107910: #if 0
                   107911: }  /* extern "C" */
                   107912: #endif  /* __cplusplus */
                   107913: 
                   107914: /************** End of rtree.h ***********************************************/
                   107915: /************** Continuing where we left off in main.c ***********************/
                   107916: #endif
                   107917: #ifdef SQLITE_ENABLE_ICU
                   107918: /************** Include sqliteicu.h in the middle of main.c ******************/
                   107919: /************** Begin file sqliteicu.h ***************************************/
                   107920: /*
                   107921: ** 2008 May 26
                   107922: **
                   107923: ** The author disclaims copyright to this source code.  In place of
                   107924: ** a legal notice, here is a blessing:
                   107925: **
                   107926: **    May you do good and not evil.
                   107927: **    May you find forgiveness for yourself and forgive others.
                   107928: **    May you share freely, never taking more than you give.
                   107929: **
                   107930: ******************************************************************************
                   107931: **
                   107932: ** This header file is used by programs that want to link against the
                   107933: ** ICU extension.  All it does is declare the sqlite3IcuInit() interface.
                   107934: */
                   107935: 
                   107936: #if 0
                   107937: extern "C" {
                   107938: #endif  /* __cplusplus */
                   107939: 
                   107940: SQLITE_PRIVATE int sqlite3IcuInit(sqlite3 *db);
                   107941: 
                   107942: #if 0
                   107943: }  /* extern "C" */
                   107944: #endif  /* __cplusplus */
                   107945: 
                   107946: 
                   107947: /************** End of sqliteicu.h *******************************************/
                   107948: /************** Continuing where we left off in main.c ***********************/
                   107949: #endif
                   107950: 
                   107951: #ifndef SQLITE_AMALGAMATION
                   107952: /* IMPLEMENTATION-OF: R-46656-45156 The sqlite3_version[] string constant
                   107953: ** contains the text of SQLITE_VERSION macro. 
                   107954: */
                   107955: SQLITE_API const char sqlite3_version[] = SQLITE_VERSION;
                   107956: #endif
                   107957: 
                   107958: /* IMPLEMENTATION-OF: R-53536-42575 The sqlite3_libversion() function returns
                   107959: ** a pointer to the to the sqlite3_version[] string constant. 
                   107960: */
                   107961: SQLITE_API const char *sqlite3_libversion(void){ return sqlite3_version; }
                   107962: 
                   107963: /* IMPLEMENTATION-OF: R-63124-39300 The sqlite3_sourceid() function returns a
                   107964: ** pointer to a string constant whose value is the same as the
                   107965: ** SQLITE_SOURCE_ID C preprocessor macro. 
                   107966: */
                   107967: SQLITE_API const char *sqlite3_sourceid(void){ return SQLITE_SOURCE_ID; }
                   107968: 
                   107969: /* IMPLEMENTATION-OF: R-35210-63508 The sqlite3_libversion_number() function
                   107970: ** returns an integer equal to SQLITE_VERSION_NUMBER.
                   107971: */
                   107972: SQLITE_API int sqlite3_libversion_number(void){ return SQLITE_VERSION_NUMBER; }
                   107973: 
                   107974: /* IMPLEMENTATION-OF: R-54823-41343 The sqlite3_threadsafe() function returns
                   107975: ** zero if and only if SQLite was compiled mutexing code omitted due to
                   107976: ** the SQLITE_THREADSAFE compile-time option being set to 0.
                   107977: */
                   107978: SQLITE_API int sqlite3_threadsafe(void){ return SQLITE_THREADSAFE; }
                   107979: 
                   107980: #if !defined(SQLITE_OMIT_TRACE) && defined(SQLITE_ENABLE_IOTRACE)
                   107981: /*
                   107982: ** If the following function pointer is not NULL and if
                   107983: ** SQLITE_ENABLE_IOTRACE is enabled, then messages describing
                   107984: ** I/O active are written using this function.  These messages
                   107985: ** are intended for debugging activity only.
                   107986: */
                   107987: SQLITE_PRIVATE void (*sqlite3IoTrace)(const char*, ...) = 0;
                   107988: #endif
                   107989: 
                   107990: /*
                   107991: ** If the following global variable points to a string which is the
                   107992: ** name of a directory, then that directory will be used to store
                   107993: ** temporary files.
                   107994: **
                   107995: ** See also the "PRAGMA temp_store_directory" SQL command.
                   107996: */
                   107997: SQLITE_API char *sqlite3_temp_directory = 0;
                   107998: 
                   107999: /*
                   108000: ** Initialize SQLite.  
                   108001: **
                   108002: ** This routine must be called to initialize the memory allocation,
                   108003: ** VFS, and mutex subsystems prior to doing any serious work with
                   108004: ** SQLite.  But as long as you do not compile with SQLITE_OMIT_AUTOINIT
                   108005: ** this routine will be called automatically by key routines such as
                   108006: ** sqlite3_open().  
                   108007: **
                   108008: ** This routine is a no-op except on its very first call for the process,
                   108009: ** or for the first call after a call to sqlite3_shutdown.
                   108010: **
                   108011: ** The first thread to call this routine runs the initialization to
                   108012: ** completion.  If subsequent threads call this routine before the first
                   108013: ** thread has finished the initialization process, then the subsequent
                   108014: ** threads must block until the first thread finishes with the initialization.
                   108015: **
                   108016: ** The first thread might call this routine recursively.  Recursive
                   108017: ** calls to this routine should not block, of course.  Otherwise the
                   108018: ** initialization process would never complete.
                   108019: **
                   108020: ** Let X be the first thread to enter this routine.  Let Y be some other
                   108021: ** thread.  Then while the initial invocation of this routine by X is
                   108022: ** incomplete, it is required that:
                   108023: **
                   108024: **    *  Calls to this routine from Y must block until the outer-most
                   108025: **       call by X completes.
                   108026: **
                   108027: **    *  Recursive calls to this routine from thread X return immediately
                   108028: **       without blocking.
                   108029: */
                   108030: SQLITE_API int sqlite3_initialize(void){
                   108031:   sqlite3_mutex *pMaster;                      /* The main static mutex */
                   108032:   int rc;                                      /* Result code */
                   108033: 
                   108034: #ifdef SQLITE_OMIT_WSD
                   108035:   rc = sqlite3_wsd_init(4096, 24);
                   108036:   if( rc!=SQLITE_OK ){
                   108037:     return rc;
                   108038:   }
                   108039: #endif
                   108040: 
                   108041:   /* If SQLite is already completely initialized, then this call
                   108042:   ** to sqlite3_initialize() should be a no-op.  But the initialization
                   108043:   ** must be complete.  So isInit must not be set until the very end
                   108044:   ** of this routine.
                   108045:   */
                   108046:   if( sqlite3GlobalConfig.isInit ) return SQLITE_OK;
                   108047: 
                   108048:   /* Make sure the mutex subsystem is initialized.  If unable to 
                   108049:   ** initialize the mutex subsystem, return early with the error.
                   108050:   ** If the system is so sick that we are unable to allocate a mutex,
                   108051:   ** there is not much SQLite is going to be able to do.
                   108052:   **
                   108053:   ** The mutex subsystem must take care of serializing its own
                   108054:   ** initialization.
                   108055:   */
                   108056:   rc = sqlite3MutexInit();
                   108057:   if( rc ) return rc;
                   108058: 
                   108059:   /* Initialize the malloc() system and the recursive pInitMutex mutex.
                   108060:   ** This operation is protected by the STATIC_MASTER mutex.  Note that
                   108061:   ** MutexAlloc() is called for a static mutex prior to initializing the
                   108062:   ** malloc subsystem - this implies that the allocation of a static
                   108063:   ** mutex must not require support from the malloc subsystem.
                   108064:   */
                   108065:   pMaster = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER);
                   108066:   sqlite3_mutex_enter(pMaster);
                   108067:   sqlite3GlobalConfig.isMutexInit = 1;
                   108068:   if( !sqlite3GlobalConfig.isMallocInit ){
                   108069:     rc = sqlite3MallocInit();
                   108070:   }
                   108071:   if( rc==SQLITE_OK ){
                   108072:     sqlite3GlobalConfig.isMallocInit = 1;
                   108073:     if( !sqlite3GlobalConfig.pInitMutex ){
                   108074:       sqlite3GlobalConfig.pInitMutex =
                   108075:            sqlite3MutexAlloc(SQLITE_MUTEX_RECURSIVE);
                   108076:       if( sqlite3GlobalConfig.bCoreMutex && !sqlite3GlobalConfig.pInitMutex ){
                   108077:         rc = SQLITE_NOMEM;
                   108078:       }
                   108079:     }
                   108080:   }
                   108081:   if( rc==SQLITE_OK ){
                   108082:     sqlite3GlobalConfig.nRefInitMutex++;
                   108083:   }
                   108084:   sqlite3_mutex_leave(pMaster);
                   108085: 
                   108086:   /* If rc is not SQLITE_OK at this point, then either the malloc
                   108087:   ** subsystem could not be initialized or the system failed to allocate
                   108088:   ** the pInitMutex mutex. Return an error in either case.  */
                   108089:   if( rc!=SQLITE_OK ){
                   108090:     return rc;
                   108091:   }
                   108092: 
                   108093:   /* Do the rest of the initialization under the recursive mutex so
                   108094:   ** that we will be able to handle recursive calls into
                   108095:   ** sqlite3_initialize().  The recursive calls normally come through
                   108096:   ** sqlite3_os_init() when it invokes sqlite3_vfs_register(), but other
                   108097:   ** recursive calls might also be possible.
                   108098:   **
                   108099:   ** IMPLEMENTATION-OF: R-00140-37445 SQLite automatically serializes calls
                   108100:   ** to the xInit method, so the xInit method need not be threadsafe.
                   108101:   **
                   108102:   ** The following mutex is what serializes access to the appdef pcache xInit
                   108103:   ** methods.  The sqlite3_pcache_methods.xInit() all is embedded in the
                   108104:   ** call to sqlite3PcacheInitialize().
                   108105:   */
                   108106:   sqlite3_mutex_enter(sqlite3GlobalConfig.pInitMutex);
                   108107:   if( sqlite3GlobalConfig.isInit==0 && sqlite3GlobalConfig.inProgress==0 ){
                   108108:     FuncDefHash *pHash = &GLOBAL(FuncDefHash, sqlite3GlobalFunctions);
                   108109:     sqlite3GlobalConfig.inProgress = 1;
                   108110:     memset(pHash, 0, sizeof(sqlite3GlobalFunctions));
                   108111:     sqlite3RegisterGlobalFunctions();
                   108112:     if( sqlite3GlobalConfig.isPCacheInit==0 ){
                   108113:       rc = sqlite3PcacheInitialize();
                   108114:     }
                   108115:     if( rc==SQLITE_OK ){
                   108116:       sqlite3GlobalConfig.isPCacheInit = 1;
                   108117:       rc = sqlite3OsInit();
                   108118:     }
                   108119:     if( rc==SQLITE_OK ){
                   108120:       sqlite3PCacheBufferSetup( sqlite3GlobalConfig.pPage, 
                   108121:           sqlite3GlobalConfig.szPage, sqlite3GlobalConfig.nPage);
                   108122:       sqlite3GlobalConfig.isInit = 1;
                   108123:     }
                   108124:     sqlite3GlobalConfig.inProgress = 0;
                   108125:   }
                   108126:   sqlite3_mutex_leave(sqlite3GlobalConfig.pInitMutex);
                   108127: 
                   108128:   /* Go back under the static mutex and clean up the recursive
                   108129:   ** mutex to prevent a resource leak.
                   108130:   */
                   108131:   sqlite3_mutex_enter(pMaster);
                   108132:   sqlite3GlobalConfig.nRefInitMutex--;
                   108133:   if( sqlite3GlobalConfig.nRefInitMutex<=0 ){
                   108134:     assert( sqlite3GlobalConfig.nRefInitMutex==0 );
                   108135:     sqlite3_mutex_free(sqlite3GlobalConfig.pInitMutex);
                   108136:     sqlite3GlobalConfig.pInitMutex = 0;
                   108137:   }
                   108138:   sqlite3_mutex_leave(pMaster);
                   108139: 
                   108140:   /* The following is just a sanity check to make sure SQLite has
                   108141:   ** been compiled correctly.  It is important to run this code, but
                   108142:   ** we don't want to run it too often and soak up CPU cycles for no
                   108143:   ** reason.  So we run it once during initialization.
                   108144:   */
                   108145: #ifndef NDEBUG
                   108146: #ifndef SQLITE_OMIT_FLOATING_POINT
                   108147:   /* This section of code's only "output" is via assert() statements. */
                   108148:   if ( rc==SQLITE_OK ){
                   108149:     u64 x = (((u64)1)<<63)-1;
                   108150:     double y;
                   108151:     assert(sizeof(x)==8);
                   108152:     assert(sizeof(x)==sizeof(y));
                   108153:     memcpy(&y, &x, 8);
                   108154:     assert( sqlite3IsNaN(y) );
                   108155:   }
                   108156: #endif
                   108157: #endif
                   108158: 
                   108159:   return rc;
                   108160: }
                   108161: 
                   108162: /*
                   108163: ** Undo the effects of sqlite3_initialize().  Must not be called while
                   108164: ** there are outstanding database connections or memory allocations or
                   108165: ** while any part of SQLite is otherwise in use in any thread.  This
                   108166: ** routine is not threadsafe.  But it is safe to invoke this routine
                   108167: ** on when SQLite is already shut down.  If SQLite is already shut down
                   108168: ** when this routine is invoked, then this routine is a harmless no-op.
                   108169: */
                   108170: SQLITE_API int sqlite3_shutdown(void){
                   108171:   if( sqlite3GlobalConfig.isInit ){
                   108172:     sqlite3_os_end();
                   108173:     sqlite3_reset_auto_extension();
                   108174:     sqlite3GlobalConfig.isInit = 0;
                   108175:   }
                   108176:   if( sqlite3GlobalConfig.isPCacheInit ){
                   108177:     sqlite3PcacheShutdown();
                   108178:     sqlite3GlobalConfig.isPCacheInit = 0;
                   108179:   }
                   108180:   if( sqlite3GlobalConfig.isMallocInit ){
                   108181:     sqlite3MallocEnd();
                   108182:     sqlite3GlobalConfig.isMallocInit = 0;
                   108183:   }
                   108184:   if( sqlite3GlobalConfig.isMutexInit ){
                   108185:     sqlite3MutexEnd();
                   108186:     sqlite3GlobalConfig.isMutexInit = 0;
                   108187:   }
                   108188: 
                   108189:   return SQLITE_OK;
                   108190: }
                   108191: 
                   108192: /*
                   108193: ** This API allows applications to modify the global configuration of
                   108194: ** the SQLite library at run-time.
                   108195: **
                   108196: ** This routine should only be called when there are no outstanding
                   108197: ** database connections or memory allocations.  This routine is not
                   108198: ** threadsafe.  Failure to heed these warnings can lead to unpredictable
                   108199: ** behavior.
                   108200: */
                   108201: SQLITE_API int sqlite3_config(int op, ...){
                   108202:   va_list ap;
                   108203:   int rc = SQLITE_OK;
                   108204: 
                   108205:   /* sqlite3_config() shall return SQLITE_MISUSE if it is invoked while
                   108206:   ** the SQLite library is in use. */
                   108207:   if( sqlite3GlobalConfig.isInit ) return SQLITE_MISUSE_BKPT;
                   108208: 
                   108209:   va_start(ap, op);
                   108210:   switch( op ){
                   108211: 
                   108212:     /* Mutex configuration options are only available in a threadsafe
                   108213:     ** compile. 
                   108214:     */
                   108215: #if defined(SQLITE_THREADSAFE) && SQLITE_THREADSAFE>0
                   108216:     case SQLITE_CONFIG_SINGLETHREAD: {
                   108217:       /* Disable all mutexing */
                   108218:       sqlite3GlobalConfig.bCoreMutex = 0;
                   108219:       sqlite3GlobalConfig.bFullMutex = 0;
                   108220:       break;
                   108221:     }
                   108222:     case SQLITE_CONFIG_MULTITHREAD: {
                   108223:       /* Disable mutexing of database connections */
                   108224:       /* Enable mutexing of core data structures */
                   108225:       sqlite3GlobalConfig.bCoreMutex = 1;
                   108226:       sqlite3GlobalConfig.bFullMutex = 0;
                   108227:       break;
                   108228:     }
                   108229:     case SQLITE_CONFIG_SERIALIZED: {
                   108230:       /* Enable all mutexing */
                   108231:       sqlite3GlobalConfig.bCoreMutex = 1;
                   108232:       sqlite3GlobalConfig.bFullMutex = 1;
                   108233:       break;
                   108234:     }
                   108235:     case SQLITE_CONFIG_MUTEX: {
                   108236:       /* Specify an alternative mutex implementation */
                   108237:       sqlite3GlobalConfig.mutex = *va_arg(ap, sqlite3_mutex_methods*);
                   108238:       break;
                   108239:     }
                   108240:     case SQLITE_CONFIG_GETMUTEX: {
                   108241:       /* Retrieve the current mutex implementation */
                   108242:       *va_arg(ap, sqlite3_mutex_methods*) = sqlite3GlobalConfig.mutex;
                   108243:       break;
                   108244:     }
                   108245: #endif
                   108246: 
                   108247: 
                   108248:     case SQLITE_CONFIG_MALLOC: {
                   108249:       /* Specify an alternative malloc implementation */
                   108250:       sqlite3GlobalConfig.m = *va_arg(ap, sqlite3_mem_methods*);
                   108251:       break;
                   108252:     }
                   108253:     case SQLITE_CONFIG_GETMALLOC: {
                   108254:       /* Retrieve the current malloc() implementation */
                   108255:       if( sqlite3GlobalConfig.m.xMalloc==0 ) sqlite3MemSetDefault();
                   108256:       *va_arg(ap, sqlite3_mem_methods*) = sqlite3GlobalConfig.m;
                   108257:       break;
                   108258:     }
                   108259:     case SQLITE_CONFIG_MEMSTATUS: {
                   108260:       /* Enable or disable the malloc status collection */
                   108261:       sqlite3GlobalConfig.bMemstat = va_arg(ap, int);
                   108262:       break;
                   108263:     }
                   108264:     case SQLITE_CONFIG_SCRATCH: {
                   108265:       /* Designate a buffer for scratch memory space */
                   108266:       sqlite3GlobalConfig.pScratch = va_arg(ap, void*);
                   108267:       sqlite3GlobalConfig.szScratch = va_arg(ap, int);
                   108268:       sqlite3GlobalConfig.nScratch = va_arg(ap, int);
                   108269:       break;
                   108270:     }
                   108271:     case SQLITE_CONFIG_PAGECACHE: {
                   108272:       /* Designate a buffer for page cache memory space */
                   108273:       sqlite3GlobalConfig.pPage = va_arg(ap, void*);
                   108274:       sqlite3GlobalConfig.szPage = va_arg(ap, int);
                   108275:       sqlite3GlobalConfig.nPage = va_arg(ap, int);
                   108276:       break;
                   108277:     }
                   108278: 
                   108279:     case SQLITE_CONFIG_PCACHE: {
                   108280:       /* Specify an alternative page cache implementation */
                   108281:       sqlite3GlobalConfig.pcache = *va_arg(ap, sqlite3_pcache_methods*);
                   108282:       break;
                   108283:     }
                   108284: 
                   108285:     case SQLITE_CONFIG_GETPCACHE: {
                   108286:       if( sqlite3GlobalConfig.pcache.xInit==0 ){
                   108287:         sqlite3PCacheSetDefault();
                   108288:       }
                   108289:       *va_arg(ap, sqlite3_pcache_methods*) = sqlite3GlobalConfig.pcache;
                   108290:       break;
                   108291:     }
                   108292: 
                   108293: #if defined(SQLITE_ENABLE_MEMSYS3) || defined(SQLITE_ENABLE_MEMSYS5)
                   108294:     case SQLITE_CONFIG_HEAP: {
                   108295:       /* Designate a buffer for heap memory space */
                   108296:       sqlite3GlobalConfig.pHeap = va_arg(ap, void*);
                   108297:       sqlite3GlobalConfig.nHeap = va_arg(ap, int);
                   108298:       sqlite3GlobalConfig.mnReq = va_arg(ap, int);
                   108299: 
                   108300:       if( sqlite3GlobalConfig.mnReq<1 ){
                   108301:         sqlite3GlobalConfig.mnReq = 1;
                   108302:       }else if( sqlite3GlobalConfig.mnReq>(1<<12) ){
                   108303:         /* cap min request size at 2^12 */
                   108304:         sqlite3GlobalConfig.mnReq = (1<<12);
                   108305:       }
                   108306: 
                   108307:       if( sqlite3GlobalConfig.pHeap==0 ){
                   108308:         /* If the heap pointer is NULL, then restore the malloc implementation
                   108309:         ** back to NULL pointers too.  This will cause the malloc to go
                   108310:         ** back to its default implementation when sqlite3_initialize() is
                   108311:         ** run.
                   108312:         */
                   108313:         memset(&sqlite3GlobalConfig.m, 0, sizeof(sqlite3GlobalConfig.m));
                   108314:       }else{
                   108315:         /* The heap pointer is not NULL, then install one of the
                   108316:         ** mem5.c/mem3.c methods. If neither ENABLE_MEMSYS3 nor
                   108317:         ** ENABLE_MEMSYS5 is defined, return an error.
                   108318:         */
                   108319: #ifdef SQLITE_ENABLE_MEMSYS3
                   108320:         sqlite3GlobalConfig.m = *sqlite3MemGetMemsys3();
                   108321: #endif
                   108322: #ifdef SQLITE_ENABLE_MEMSYS5
                   108323:         sqlite3GlobalConfig.m = *sqlite3MemGetMemsys5();
                   108324: #endif
                   108325:       }
                   108326:       break;
                   108327:     }
                   108328: #endif
                   108329: 
                   108330:     case SQLITE_CONFIG_LOOKASIDE: {
                   108331:       sqlite3GlobalConfig.szLookaside = va_arg(ap, int);
                   108332:       sqlite3GlobalConfig.nLookaside = va_arg(ap, int);
                   108333:       break;
                   108334:     }
                   108335:     
                   108336:     /* Record a pointer to the logger funcction and its first argument.
                   108337:     ** The default is NULL.  Logging is disabled if the function pointer is
                   108338:     ** NULL.
                   108339:     */
                   108340:     case SQLITE_CONFIG_LOG: {
                   108341:       /* MSVC is picky about pulling func ptrs from va lists.
                   108342:       ** http://support.microsoft.com/kb/47961
                   108343:       ** sqlite3GlobalConfig.xLog = va_arg(ap, void(*)(void*,int,const char*));
                   108344:       */
                   108345:       typedef void(*LOGFUNC_t)(void*,int,const char*);
                   108346:       sqlite3GlobalConfig.xLog = va_arg(ap, LOGFUNC_t);
                   108347:       sqlite3GlobalConfig.pLogArg = va_arg(ap, void*);
                   108348:       break;
                   108349:     }
                   108350: 
                   108351:     case SQLITE_CONFIG_URI: {
                   108352:       sqlite3GlobalConfig.bOpenUri = va_arg(ap, int);
                   108353:       break;
                   108354:     }
                   108355: 
                   108356:     default: {
                   108357:       rc = SQLITE_ERROR;
                   108358:       break;
                   108359:     }
                   108360:   }
                   108361:   va_end(ap);
                   108362:   return rc;
                   108363: }
                   108364: 
                   108365: /*
                   108366: ** Set up the lookaside buffers for a database connection.
                   108367: ** Return SQLITE_OK on success.  
                   108368: ** If lookaside is already active, return SQLITE_BUSY.
                   108369: **
                   108370: ** The sz parameter is the number of bytes in each lookaside slot.
                   108371: ** The cnt parameter is the number of slots.  If pStart is NULL the
                   108372: ** space for the lookaside memory is obtained from sqlite3_malloc().
                   108373: ** If pStart is not NULL then it is sz*cnt bytes of memory to use for
                   108374: ** the lookaside memory.
                   108375: */
                   108376: static int setupLookaside(sqlite3 *db, void *pBuf, int sz, int cnt){
                   108377:   void *pStart;
                   108378:   if( db->lookaside.nOut ){
                   108379:     return SQLITE_BUSY;
                   108380:   }
                   108381:   /* Free any existing lookaside buffer for this handle before
                   108382:   ** allocating a new one so we don't have to have space for 
                   108383:   ** both at the same time.
                   108384:   */
                   108385:   if( db->lookaside.bMalloced ){
                   108386:     sqlite3_free(db->lookaside.pStart);
                   108387:   }
                   108388:   /* The size of a lookaside slot needs to be larger than a pointer
                   108389:   ** to be useful.
                   108390:   */
                   108391:   if( sz<=(int)sizeof(LookasideSlot*) ) sz = 0;
                   108392:   if( cnt<0 ) cnt = 0;
                   108393:   if( sz==0 || cnt==0 ){
                   108394:     sz = 0;
                   108395:     pStart = 0;
                   108396:   }else if( pBuf==0 ){
                   108397:     sz = ROUNDDOWN8(sz); /* IMP: R-33038-09382 */
                   108398:     sqlite3BeginBenignMalloc();
                   108399:     pStart = sqlite3Malloc( sz*cnt );  /* IMP: R-61949-35727 */
                   108400:     sqlite3EndBenignMalloc();
                   108401:   }else{
                   108402:     sz = ROUNDDOWN8(sz); /* IMP: R-33038-09382 */
                   108403:     pStart = pBuf;
                   108404:   }
                   108405:   db->lookaside.pStart = pStart;
                   108406:   db->lookaside.pFree = 0;
                   108407:   db->lookaside.sz = (u16)sz;
                   108408:   if( pStart ){
                   108409:     int i;
                   108410:     LookasideSlot *p;
                   108411:     assert( sz > (int)sizeof(LookasideSlot*) );
                   108412:     p = (LookasideSlot*)pStart;
                   108413:     for(i=cnt-1; i>=0; i--){
                   108414:       p->pNext = db->lookaside.pFree;
                   108415:       db->lookaside.pFree = p;
                   108416:       p = (LookasideSlot*)&((u8*)p)[sz];
                   108417:     }
                   108418:     db->lookaside.pEnd = p;
                   108419:     db->lookaside.bEnabled = 1;
                   108420:     db->lookaside.bMalloced = pBuf==0 ?1:0;
                   108421:   }else{
                   108422:     db->lookaside.pEnd = 0;
                   108423:     db->lookaside.bEnabled = 0;
                   108424:     db->lookaside.bMalloced = 0;
                   108425:   }
                   108426:   return SQLITE_OK;
                   108427: }
                   108428: 
                   108429: /*
                   108430: ** Return the mutex associated with a database connection.
                   108431: */
                   108432: SQLITE_API sqlite3_mutex *sqlite3_db_mutex(sqlite3 *db){
                   108433:   return db->mutex;
                   108434: }
                   108435: 
                   108436: /*
                   108437: ** Configuration settings for an individual database connection
                   108438: */
                   108439: SQLITE_API int sqlite3_db_config(sqlite3 *db, int op, ...){
                   108440:   va_list ap;
                   108441:   int rc;
                   108442:   va_start(ap, op);
                   108443:   switch( op ){
                   108444:     case SQLITE_DBCONFIG_LOOKASIDE: {
                   108445:       void *pBuf = va_arg(ap, void*); /* IMP: R-26835-10964 */
                   108446:       int sz = va_arg(ap, int);       /* IMP: R-47871-25994 */
                   108447:       int cnt = va_arg(ap, int);      /* IMP: R-04460-53386 */
                   108448:       rc = setupLookaside(db, pBuf, sz, cnt);
                   108449:       break;
                   108450:     }
                   108451:     default: {
                   108452:       static const struct {
                   108453:         int op;      /* The opcode */
                   108454:         u32 mask;    /* Mask of the bit in sqlite3.flags to set/clear */
                   108455:       } aFlagOp[] = {
                   108456:         { SQLITE_DBCONFIG_ENABLE_FKEY,    SQLITE_ForeignKeys    },
                   108457:         { SQLITE_DBCONFIG_ENABLE_TRIGGER, SQLITE_EnableTrigger  },
                   108458:       };
                   108459:       unsigned int i;
                   108460:       rc = SQLITE_ERROR; /* IMP: R-42790-23372 */
                   108461:       for(i=0; i<ArraySize(aFlagOp); i++){
                   108462:         if( aFlagOp[i].op==op ){
                   108463:           int onoff = va_arg(ap, int);
                   108464:           int *pRes = va_arg(ap, int*);
                   108465:           int oldFlags = db->flags;
                   108466:           if( onoff>0 ){
                   108467:             db->flags |= aFlagOp[i].mask;
                   108468:           }else if( onoff==0 ){
                   108469:             db->flags &= ~aFlagOp[i].mask;
                   108470:           }
                   108471:           if( oldFlags!=db->flags ){
                   108472:             sqlite3ExpirePreparedStatements(db);
                   108473:           }
                   108474:           if( pRes ){
                   108475:             *pRes = (db->flags & aFlagOp[i].mask)!=0;
                   108476:           }
                   108477:           rc = SQLITE_OK;
                   108478:           break;
                   108479:         }
                   108480:       }
                   108481:       break;
                   108482:     }
                   108483:   }
                   108484:   va_end(ap);
                   108485:   return rc;
                   108486: }
                   108487: 
                   108488: 
                   108489: /*
                   108490: ** Return true if the buffer z[0..n-1] contains all spaces.
                   108491: */
                   108492: static int allSpaces(const char *z, int n){
                   108493:   while( n>0 && z[n-1]==' ' ){ n--; }
                   108494:   return n==0;
                   108495: }
                   108496: 
                   108497: /*
                   108498: ** This is the default collating function named "BINARY" which is always
                   108499: ** available.
                   108500: **
                   108501: ** If the padFlag argument is not NULL then space padding at the end
                   108502: ** of strings is ignored.  This implements the RTRIM collation.
                   108503: */
                   108504: static int binCollFunc(
                   108505:   void *padFlag,
                   108506:   int nKey1, const void *pKey1,
                   108507:   int nKey2, const void *pKey2
                   108508: ){
                   108509:   int rc, n;
                   108510:   n = nKey1<nKey2 ? nKey1 : nKey2;
                   108511:   rc = memcmp(pKey1, pKey2, n);
                   108512:   if( rc==0 ){
                   108513:     if( padFlag
                   108514:      && allSpaces(((char*)pKey1)+n, nKey1-n)
                   108515:      && allSpaces(((char*)pKey2)+n, nKey2-n)
                   108516:     ){
                   108517:       /* Leave rc unchanged at 0 */
                   108518:     }else{
                   108519:       rc = nKey1 - nKey2;
                   108520:     }
                   108521:   }
                   108522:   return rc;
                   108523: }
                   108524: 
                   108525: /*
                   108526: ** Another built-in collating sequence: NOCASE. 
                   108527: **
1.1.1.3 ! misho    108528: ** This collating sequence is intended to be used for "case independent
1.1       misho    108529: ** comparison". SQLite's knowledge of upper and lower case equivalents
                   108530: ** extends only to the 26 characters used in the English language.
                   108531: **
                   108532: ** At the moment there is only a UTF-8 implementation.
                   108533: */
                   108534: static int nocaseCollatingFunc(
                   108535:   void *NotUsed,
                   108536:   int nKey1, const void *pKey1,
                   108537:   int nKey2, const void *pKey2
                   108538: ){
                   108539:   int r = sqlite3StrNICmp(
                   108540:       (const char *)pKey1, (const char *)pKey2, (nKey1<nKey2)?nKey1:nKey2);
                   108541:   UNUSED_PARAMETER(NotUsed);
                   108542:   if( 0==r ){
                   108543:     r = nKey1-nKey2;
                   108544:   }
                   108545:   return r;
                   108546: }
                   108547: 
                   108548: /*
                   108549: ** Return the ROWID of the most recent insert
                   108550: */
                   108551: SQLITE_API sqlite_int64 sqlite3_last_insert_rowid(sqlite3 *db){
                   108552:   return db->lastRowid;
                   108553: }
                   108554: 
                   108555: /*
                   108556: ** Return the number of changes in the most recent call to sqlite3_exec().
                   108557: */
                   108558: SQLITE_API int sqlite3_changes(sqlite3 *db){
                   108559:   return db->nChange;
                   108560: }
                   108561: 
                   108562: /*
                   108563: ** Return the number of changes since the database handle was opened.
                   108564: */
                   108565: SQLITE_API int sqlite3_total_changes(sqlite3 *db){
                   108566:   return db->nTotalChange;
                   108567: }
                   108568: 
                   108569: /*
                   108570: ** Close all open savepoints. This function only manipulates fields of the
                   108571: ** database handle object, it does not close any savepoints that may be open
                   108572: ** at the b-tree/pager level.
                   108573: */
                   108574: SQLITE_PRIVATE void sqlite3CloseSavepoints(sqlite3 *db){
                   108575:   while( db->pSavepoint ){
                   108576:     Savepoint *pTmp = db->pSavepoint;
                   108577:     db->pSavepoint = pTmp->pNext;
                   108578:     sqlite3DbFree(db, pTmp);
                   108579:   }
                   108580:   db->nSavepoint = 0;
                   108581:   db->nStatement = 0;
                   108582:   db->isTransactionSavepoint = 0;
                   108583: }
                   108584: 
                   108585: /*
                   108586: ** Invoke the destructor function associated with FuncDef p, if any. Except,
                   108587: ** if this is not the last copy of the function, do not invoke it. Multiple
                   108588: ** copies of a single function are created when create_function() is called
                   108589: ** with SQLITE_ANY as the encoding.
                   108590: */
                   108591: static void functionDestroy(sqlite3 *db, FuncDef *p){
                   108592:   FuncDestructor *pDestructor = p->pDestructor;
                   108593:   if( pDestructor ){
                   108594:     pDestructor->nRef--;
                   108595:     if( pDestructor->nRef==0 ){
                   108596:       pDestructor->xDestroy(pDestructor->pUserData);
                   108597:       sqlite3DbFree(db, pDestructor);
                   108598:     }
                   108599:   }
                   108600: }
                   108601: 
                   108602: /*
                   108603: ** Close an existing SQLite database
                   108604: */
                   108605: SQLITE_API int sqlite3_close(sqlite3 *db){
                   108606:   HashElem *i;                    /* Hash table iterator */
                   108607:   int j;
                   108608: 
                   108609:   if( !db ){
                   108610:     return SQLITE_OK;
                   108611:   }
                   108612:   if( !sqlite3SafetyCheckSickOrOk(db) ){
                   108613:     return SQLITE_MISUSE_BKPT;
                   108614:   }
                   108615:   sqlite3_mutex_enter(db->mutex);
                   108616: 
                   108617:   /* Force xDestroy calls on all virtual tables */
                   108618:   sqlite3ResetInternalSchema(db, -1);
                   108619: 
                   108620:   /* If a transaction is open, the ResetInternalSchema() call above
                   108621:   ** will not have called the xDisconnect() method on any virtual
                   108622:   ** tables in the db->aVTrans[] array. The following sqlite3VtabRollback()
                   108623:   ** call will do so. We need to do this before the check for active
                   108624:   ** SQL statements below, as the v-table implementation may be storing
                   108625:   ** some prepared statements internally.
                   108626:   */
                   108627:   sqlite3VtabRollback(db);
                   108628: 
                   108629:   /* If there are any outstanding VMs, return SQLITE_BUSY. */
                   108630:   if( db->pVdbe ){
                   108631:     sqlite3Error(db, SQLITE_BUSY, 
                   108632:         "unable to close due to unfinalised statements");
                   108633:     sqlite3_mutex_leave(db->mutex);
                   108634:     return SQLITE_BUSY;
                   108635:   }
                   108636:   assert( sqlite3SafetyCheckSickOrOk(db) );
                   108637: 
                   108638:   for(j=0; j<db->nDb; j++){
                   108639:     Btree *pBt = db->aDb[j].pBt;
                   108640:     if( pBt && sqlite3BtreeIsInBackup(pBt) ){
                   108641:       sqlite3Error(db, SQLITE_BUSY, 
                   108642:           "unable to close due to unfinished backup operation");
                   108643:       sqlite3_mutex_leave(db->mutex);
                   108644:       return SQLITE_BUSY;
                   108645:     }
                   108646:   }
                   108647: 
                   108648:   /* Free any outstanding Savepoint structures. */
                   108649:   sqlite3CloseSavepoints(db);
                   108650: 
                   108651:   for(j=0; j<db->nDb; j++){
                   108652:     struct Db *pDb = &db->aDb[j];
                   108653:     if( pDb->pBt ){
                   108654:       sqlite3BtreeClose(pDb->pBt);
                   108655:       pDb->pBt = 0;
                   108656:       if( j!=1 ){
                   108657:         pDb->pSchema = 0;
                   108658:       }
                   108659:     }
                   108660:   }
                   108661:   sqlite3ResetInternalSchema(db, -1);
                   108662: 
                   108663:   /* Tell the code in notify.c that the connection no longer holds any
                   108664:   ** locks and does not require any further unlock-notify callbacks.
                   108665:   */
                   108666:   sqlite3ConnectionClosed(db);
                   108667: 
                   108668:   assert( db->nDb<=2 );
                   108669:   assert( db->aDb==db->aDbStatic );
                   108670:   for(j=0; j<ArraySize(db->aFunc.a); j++){
                   108671:     FuncDef *pNext, *pHash, *p;
                   108672:     for(p=db->aFunc.a[j]; p; p=pHash){
                   108673:       pHash = p->pHash;
                   108674:       while( p ){
                   108675:         functionDestroy(db, p);
                   108676:         pNext = p->pNext;
                   108677:         sqlite3DbFree(db, p);
                   108678:         p = pNext;
                   108679:       }
                   108680:     }
                   108681:   }
                   108682:   for(i=sqliteHashFirst(&db->aCollSeq); i; i=sqliteHashNext(i)){
                   108683:     CollSeq *pColl = (CollSeq *)sqliteHashData(i);
                   108684:     /* Invoke any destructors registered for collation sequence user data. */
                   108685:     for(j=0; j<3; j++){
                   108686:       if( pColl[j].xDel ){
                   108687:         pColl[j].xDel(pColl[j].pUser);
                   108688:       }
                   108689:     }
                   108690:     sqlite3DbFree(db, pColl);
                   108691:   }
                   108692:   sqlite3HashClear(&db->aCollSeq);
                   108693: #ifndef SQLITE_OMIT_VIRTUALTABLE
                   108694:   for(i=sqliteHashFirst(&db->aModule); i; i=sqliteHashNext(i)){
                   108695:     Module *pMod = (Module *)sqliteHashData(i);
                   108696:     if( pMod->xDestroy ){
                   108697:       pMod->xDestroy(pMod->pAux);
                   108698:     }
                   108699:     sqlite3DbFree(db, pMod);
                   108700:   }
                   108701:   sqlite3HashClear(&db->aModule);
                   108702: #endif
                   108703: 
                   108704:   sqlite3Error(db, SQLITE_OK, 0); /* Deallocates any cached error strings. */
                   108705:   if( db->pErr ){
                   108706:     sqlite3ValueFree(db->pErr);
                   108707:   }
                   108708:   sqlite3CloseExtensions(db);
                   108709: 
                   108710:   db->magic = SQLITE_MAGIC_ERROR;
                   108711: 
                   108712:   /* The temp-database schema is allocated differently from the other schema
                   108713:   ** objects (using sqliteMalloc() directly, instead of sqlite3BtreeSchema()).
                   108714:   ** So it needs to be freed here. Todo: Why not roll the temp schema into
                   108715:   ** the same sqliteMalloc() as the one that allocates the database 
                   108716:   ** structure?
                   108717:   */
                   108718:   sqlite3DbFree(db, db->aDb[1].pSchema);
                   108719:   sqlite3_mutex_leave(db->mutex);
                   108720:   db->magic = SQLITE_MAGIC_CLOSED;
                   108721:   sqlite3_mutex_free(db->mutex);
                   108722:   assert( db->lookaside.nOut==0 );  /* Fails on a lookaside memory leak */
                   108723:   if( db->lookaside.bMalloced ){
                   108724:     sqlite3_free(db->lookaside.pStart);
                   108725:   }
                   108726:   sqlite3_free(db);
                   108727:   return SQLITE_OK;
                   108728: }
                   108729: 
                   108730: /*
                   108731: ** Rollback all database files.
                   108732: */
                   108733: SQLITE_PRIVATE void sqlite3RollbackAll(sqlite3 *db){
                   108734:   int i;
                   108735:   int inTrans = 0;
                   108736:   assert( sqlite3_mutex_held(db->mutex) );
                   108737:   sqlite3BeginBenignMalloc();
                   108738:   for(i=0; i<db->nDb; i++){
                   108739:     if( db->aDb[i].pBt ){
                   108740:       if( sqlite3BtreeIsInTrans(db->aDb[i].pBt) ){
                   108741:         inTrans = 1;
                   108742:       }
                   108743:       sqlite3BtreeRollback(db->aDb[i].pBt);
                   108744:       db->aDb[i].inTrans = 0;
                   108745:     }
                   108746:   }
                   108747:   sqlite3VtabRollback(db);
                   108748:   sqlite3EndBenignMalloc();
                   108749: 
                   108750:   if( db->flags&SQLITE_InternChanges ){
                   108751:     sqlite3ExpirePreparedStatements(db);
                   108752:     sqlite3ResetInternalSchema(db, -1);
                   108753:   }
                   108754: 
                   108755:   /* Any deferred constraint violations have now been resolved. */
                   108756:   db->nDeferredCons = 0;
                   108757: 
                   108758:   /* If one has been configured, invoke the rollback-hook callback */
                   108759:   if( db->xRollbackCallback && (inTrans || !db->autoCommit) ){
                   108760:     db->xRollbackCallback(db->pRollbackArg);
                   108761:   }
                   108762: }
                   108763: 
                   108764: /*
                   108765: ** Return a static string that describes the kind of error specified in the
                   108766: ** argument.
                   108767: */
                   108768: SQLITE_PRIVATE const char *sqlite3ErrStr(int rc){
                   108769:   static const char* const aMsg[] = {
                   108770:     /* SQLITE_OK          */ "not an error",
                   108771:     /* SQLITE_ERROR       */ "SQL logic error or missing database",
                   108772:     /* SQLITE_INTERNAL    */ 0,
                   108773:     /* SQLITE_PERM        */ "access permission denied",
                   108774:     /* SQLITE_ABORT       */ "callback requested query abort",
                   108775:     /* SQLITE_BUSY        */ "database is locked",
                   108776:     /* SQLITE_LOCKED      */ "database table is locked",
                   108777:     /* SQLITE_NOMEM       */ "out of memory",
                   108778:     /* SQLITE_READONLY    */ "attempt to write a readonly database",
                   108779:     /* SQLITE_INTERRUPT   */ "interrupted",
                   108780:     /* SQLITE_IOERR       */ "disk I/O error",
                   108781:     /* SQLITE_CORRUPT     */ "database disk image is malformed",
                   108782:     /* SQLITE_NOTFOUND    */ "unknown operation",
                   108783:     /* SQLITE_FULL        */ "database or disk is full",
                   108784:     /* SQLITE_CANTOPEN    */ "unable to open database file",
                   108785:     /* SQLITE_PROTOCOL    */ "locking protocol",
                   108786:     /* SQLITE_EMPTY       */ "table contains no data",
                   108787:     /* SQLITE_SCHEMA      */ "database schema has changed",
                   108788:     /* SQLITE_TOOBIG      */ "string or blob too big",
                   108789:     /* SQLITE_CONSTRAINT  */ "constraint failed",
                   108790:     /* SQLITE_MISMATCH    */ "datatype mismatch",
                   108791:     /* SQLITE_MISUSE      */ "library routine called out of sequence",
                   108792:     /* SQLITE_NOLFS       */ "large file support is disabled",
                   108793:     /* SQLITE_AUTH        */ "authorization denied",
                   108794:     /* SQLITE_FORMAT      */ "auxiliary database format error",
                   108795:     /* SQLITE_RANGE       */ "bind or column index out of range",
                   108796:     /* SQLITE_NOTADB      */ "file is encrypted or is not a database",
                   108797:   };
                   108798:   rc &= 0xff;
                   108799:   if( ALWAYS(rc>=0) && rc<(int)(sizeof(aMsg)/sizeof(aMsg[0])) && aMsg[rc]!=0 ){
                   108800:     return aMsg[rc];
                   108801:   }else{
                   108802:     return "unknown error";
                   108803:   }
                   108804: }
                   108805: 
                   108806: /*
                   108807: ** This routine implements a busy callback that sleeps and tries
                   108808: ** again until a timeout value is reached.  The timeout value is
                   108809: ** an integer number of milliseconds passed in as the first
                   108810: ** argument.
                   108811: */
                   108812: static int sqliteDefaultBusyCallback(
                   108813:  void *ptr,               /* Database connection */
                   108814:  int count                /* Number of times table has been busy */
                   108815: ){
                   108816: #if SQLITE_OS_WIN || (defined(HAVE_USLEEP) && HAVE_USLEEP)
                   108817:   static const u8 delays[] =
                   108818:      { 1, 2, 5, 10, 15, 20, 25, 25,  25,  50,  50, 100 };
                   108819:   static const u8 totals[] =
                   108820:      { 0, 1, 3,  8, 18, 33, 53, 78, 103, 128, 178, 228 };
                   108821: # define NDELAY ArraySize(delays)
                   108822:   sqlite3 *db = (sqlite3 *)ptr;
                   108823:   int timeout = db->busyTimeout;
                   108824:   int delay, prior;
                   108825: 
                   108826:   assert( count>=0 );
                   108827:   if( count < NDELAY ){
                   108828:     delay = delays[count];
                   108829:     prior = totals[count];
                   108830:   }else{
                   108831:     delay = delays[NDELAY-1];
                   108832:     prior = totals[NDELAY-1] + delay*(count-(NDELAY-1));
                   108833:   }
                   108834:   if( prior + delay > timeout ){
                   108835:     delay = timeout - prior;
                   108836:     if( delay<=0 ) return 0;
                   108837:   }
                   108838:   sqlite3OsSleep(db->pVfs, delay*1000);
                   108839:   return 1;
                   108840: #else
                   108841:   sqlite3 *db = (sqlite3 *)ptr;
                   108842:   int timeout = ((sqlite3 *)ptr)->busyTimeout;
                   108843:   if( (count+1)*1000 > timeout ){
                   108844:     return 0;
                   108845:   }
                   108846:   sqlite3OsSleep(db->pVfs, 1000000);
                   108847:   return 1;
                   108848: #endif
                   108849: }
                   108850: 
                   108851: /*
                   108852: ** Invoke the given busy handler.
                   108853: **
                   108854: ** This routine is called when an operation failed with a lock.
                   108855: ** If this routine returns non-zero, the lock is retried.  If it
                   108856: ** returns 0, the operation aborts with an SQLITE_BUSY error.
                   108857: */
                   108858: SQLITE_PRIVATE int sqlite3InvokeBusyHandler(BusyHandler *p){
                   108859:   int rc;
                   108860:   if( NEVER(p==0) || p->xFunc==0 || p->nBusy<0 ) return 0;
                   108861:   rc = p->xFunc(p->pArg, p->nBusy);
                   108862:   if( rc==0 ){
                   108863:     p->nBusy = -1;
                   108864:   }else{
                   108865:     p->nBusy++;
                   108866:   }
                   108867:   return rc; 
                   108868: }
                   108869: 
                   108870: /*
                   108871: ** This routine sets the busy callback for an Sqlite database to the
                   108872: ** given callback function with the given argument.
                   108873: */
                   108874: SQLITE_API int sqlite3_busy_handler(
                   108875:   sqlite3 *db,
                   108876:   int (*xBusy)(void*,int),
                   108877:   void *pArg
                   108878: ){
                   108879:   sqlite3_mutex_enter(db->mutex);
                   108880:   db->busyHandler.xFunc = xBusy;
                   108881:   db->busyHandler.pArg = pArg;
                   108882:   db->busyHandler.nBusy = 0;
                   108883:   sqlite3_mutex_leave(db->mutex);
                   108884:   return SQLITE_OK;
                   108885: }
                   108886: 
                   108887: #ifndef SQLITE_OMIT_PROGRESS_CALLBACK
                   108888: /*
                   108889: ** This routine sets the progress callback for an Sqlite database to the
                   108890: ** given callback function with the given argument. The progress callback will
                   108891: ** be invoked every nOps opcodes.
                   108892: */
                   108893: SQLITE_API void sqlite3_progress_handler(
                   108894:   sqlite3 *db, 
                   108895:   int nOps,
                   108896:   int (*xProgress)(void*), 
                   108897:   void *pArg
                   108898: ){
                   108899:   sqlite3_mutex_enter(db->mutex);
                   108900:   if( nOps>0 ){
                   108901:     db->xProgress = xProgress;
                   108902:     db->nProgressOps = nOps;
                   108903:     db->pProgressArg = pArg;
                   108904:   }else{
                   108905:     db->xProgress = 0;
                   108906:     db->nProgressOps = 0;
                   108907:     db->pProgressArg = 0;
                   108908:   }
                   108909:   sqlite3_mutex_leave(db->mutex);
                   108910: }
                   108911: #endif
                   108912: 
                   108913: 
                   108914: /*
                   108915: ** This routine installs a default busy handler that waits for the
                   108916: ** specified number of milliseconds before returning 0.
                   108917: */
                   108918: SQLITE_API int sqlite3_busy_timeout(sqlite3 *db, int ms){
                   108919:   if( ms>0 ){
                   108920:     db->busyTimeout = ms;
                   108921:     sqlite3_busy_handler(db, sqliteDefaultBusyCallback, (void*)db);
                   108922:   }else{
                   108923:     sqlite3_busy_handler(db, 0, 0);
                   108924:   }
                   108925:   return SQLITE_OK;
                   108926: }
                   108927: 
                   108928: /*
                   108929: ** Cause any pending operation to stop at its earliest opportunity.
                   108930: */
                   108931: SQLITE_API void sqlite3_interrupt(sqlite3 *db){
                   108932:   db->u1.isInterrupted = 1;
                   108933: }
                   108934: 
                   108935: 
                   108936: /*
                   108937: ** This function is exactly the same as sqlite3_create_function(), except
                   108938: ** that it is designed to be called by internal code. The difference is
                   108939: ** that if a malloc() fails in sqlite3_create_function(), an error code
                   108940: ** is returned and the mallocFailed flag cleared. 
                   108941: */
                   108942: SQLITE_PRIVATE int sqlite3CreateFunc(
                   108943:   sqlite3 *db,
                   108944:   const char *zFunctionName,
                   108945:   int nArg,
                   108946:   int enc,
                   108947:   void *pUserData,
                   108948:   void (*xFunc)(sqlite3_context*,int,sqlite3_value **),
                   108949:   void (*xStep)(sqlite3_context*,int,sqlite3_value **),
                   108950:   void (*xFinal)(sqlite3_context*),
                   108951:   FuncDestructor *pDestructor
                   108952: ){
                   108953:   FuncDef *p;
                   108954:   int nName;
                   108955: 
                   108956:   assert( sqlite3_mutex_held(db->mutex) );
                   108957:   if( zFunctionName==0 ||
                   108958:       (xFunc && (xFinal || xStep)) || 
                   108959:       (!xFunc && (xFinal && !xStep)) ||
                   108960:       (!xFunc && (!xFinal && xStep)) ||
                   108961:       (nArg<-1 || nArg>SQLITE_MAX_FUNCTION_ARG) ||
                   108962:       (255<(nName = sqlite3Strlen30( zFunctionName))) ){
                   108963:     return SQLITE_MISUSE_BKPT;
                   108964:   }
                   108965:   
                   108966: #ifndef SQLITE_OMIT_UTF16
                   108967:   /* If SQLITE_UTF16 is specified as the encoding type, transform this
                   108968:   ** to one of SQLITE_UTF16LE or SQLITE_UTF16BE using the
                   108969:   ** SQLITE_UTF16NATIVE macro. SQLITE_UTF16 is not used internally.
                   108970:   **
                   108971:   ** If SQLITE_ANY is specified, add three versions of the function
                   108972:   ** to the hash table.
                   108973:   */
                   108974:   if( enc==SQLITE_UTF16 ){
                   108975:     enc = SQLITE_UTF16NATIVE;
                   108976:   }else if( enc==SQLITE_ANY ){
                   108977:     int rc;
                   108978:     rc = sqlite3CreateFunc(db, zFunctionName, nArg, SQLITE_UTF8,
                   108979:          pUserData, xFunc, xStep, xFinal, pDestructor);
                   108980:     if( rc==SQLITE_OK ){
                   108981:       rc = sqlite3CreateFunc(db, zFunctionName, nArg, SQLITE_UTF16LE,
                   108982:           pUserData, xFunc, xStep, xFinal, pDestructor);
                   108983:     }
                   108984:     if( rc!=SQLITE_OK ){
                   108985:       return rc;
                   108986:     }
                   108987:     enc = SQLITE_UTF16BE;
                   108988:   }
                   108989: #else
                   108990:   enc = SQLITE_UTF8;
                   108991: #endif
                   108992:   
                   108993:   /* Check if an existing function is being overridden or deleted. If so,
                   108994:   ** and there are active VMs, then return SQLITE_BUSY. If a function
                   108995:   ** is being overridden/deleted but there are no active VMs, allow the
                   108996:   ** operation to continue but invalidate all precompiled statements.
                   108997:   */
                   108998:   p = sqlite3FindFunction(db, zFunctionName, nName, nArg, (u8)enc, 0);
                   108999:   if( p && p->iPrefEnc==enc && p->nArg==nArg ){
                   109000:     if( db->activeVdbeCnt ){
                   109001:       sqlite3Error(db, SQLITE_BUSY, 
                   109002:         "unable to delete/modify user-function due to active statements");
                   109003:       assert( !db->mallocFailed );
                   109004:       return SQLITE_BUSY;
                   109005:     }else{
                   109006:       sqlite3ExpirePreparedStatements(db);
                   109007:     }
                   109008:   }
                   109009: 
                   109010:   p = sqlite3FindFunction(db, zFunctionName, nName, nArg, (u8)enc, 1);
                   109011:   assert(p || db->mallocFailed);
                   109012:   if( !p ){
                   109013:     return SQLITE_NOMEM;
                   109014:   }
                   109015: 
                   109016:   /* If an older version of the function with a configured destructor is
                   109017:   ** being replaced invoke the destructor function here. */
                   109018:   functionDestroy(db, p);
                   109019: 
                   109020:   if( pDestructor ){
                   109021:     pDestructor->nRef++;
                   109022:   }
                   109023:   p->pDestructor = pDestructor;
                   109024:   p->flags = 0;
                   109025:   p->xFunc = xFunc;
                   109026:   p->xStep = xStep;
                   109027:   p->xFinalize = xFinal;
                   109028:   p->pUserData = pUserData;
                   109029:   p->nArg = (u16)nArg;
                   109030:   return SQLITE_OK;
                   109031: }
                   109032: 
                   109033: /*
                   109034: ** Create new user functions.
                   109035: */
                   109036: SQLITE_API int sqlite3_create_function(
                   109037:   sqlite3 *db,
                   109038:   const char *zFunc,
                   109039:   int nArg,
                   109040:   int enc,
                   109041:   void *p,
                   109042:   void (*xFunc)(sqlite3_context*,int,sqlite3_value **),
                   109043:   void (*xStep)(sqlite3_context*,int,sqlite3_value **),
                   109044:   void (*xFinal)(sqlite3_context*)
                   109045: ){
                   109046:   return sqlite3_create_function_v2(db, zFunc, nArg, enc, p, xFunc, xStep,
                   109047:                                     xFinal, 0);
                   109048: }
                   109049: 
                   109050: SQLITE_API int sqlite3_create_function_v2(
                   109051:   sqlite3 *db,
                   109052:   const char *zFunc,
                   109053:   int nArg,
                   109054:   int enc,
                   109055:   void *p,
                   109056:   void (*xFunc)(sqlite3_context*,int,sqlite3_value **),
                   109057:   void (*xStep)(sqlite3_context*,int,sqlite3_value **),
                   109058:   void (*xFinal)(sqlite3_context*),
                   109059:   void (*xDestroy)(void *)
                   109060: ){
                   109061:   int rc = SQLITE_ERROR;
                   109062:   FuncDestructor *pArg = 0;
                   109063:   sqlite3_mutex_enter(db->mutex);
                   109064:   if( xDestroy ){
                   109065:     pArg = (FuncDestructor *)sqlite3DbMallocZero(db, sizeof(FuncDestructor));
                   109066:     if( !pArg ){
                   109067:       xDestroy(p);
                   109068:       goto out;
                   109069:     }
                   109070:     pArg->xDestroy = xDestroy;
                   109071:     pArg->pUserData = p;
                   109072:   }
                   109073:   rc = sqlite3CreateFunc(db, zFunc, nArg, enc, p, xFunc, xStep, xFinal, pArg);
                   109074:   if( pArg && pArg->nRef==0 ){
                   109075:     assert( rc!=SQLITE_OK );
                   109076:     xDestroy(p);
                   109077:     sqlite3DbFree(db, pArg);
                   109078:   }
                   109079: 
                   109080:  out:
                   109081:   rc = sqlite3ApiExit(db, rc);
                   109082:   sqlite3_mutex_leave(db->mutex);
                   109083:   return rc;
                   109084: }
                   109085: 
                   109086: #ifndef SQLITE_OMIT_UTF16
                   109087: SQLITE_API int sqlite3_create_function16(
                   109088:   sqlite3 *db,
                   109089:   const void *zFunctionName,
                   109090:   int nArg,
                   109091:   int eTextRep,
                   109092:   void *p,
                   109093:   void (*xFunc)(sqlite3_context*,int,sqlite3_value**),
                   109094:   void (*xStep)(sqlite3_context*,int,sqlite3_value**),
                   109095:   void (*xFinal)(sqlite3_context*)
                   109096: ){
                   109097:   int rc;
                   109098:   char *zFunc8;
                   109099:   sqlite3_mutex_enter(db->mutex);
                   109100:   assert( !db->mallocFailed );
                   109101:   zFunc8 = sqlite3Utf16to8(db, zFunctionName, -1, SQLITE_UTF16NATIVE);
                   109102:   rc = sqlite3CreateFunc(db, zFunc8, nArg, eTextRep, p, xFunc, xStep, xFinal,0);
                   109103:   sqlite3DbFree(db, zFunc8);
                   109104:   rc = sqlite3ApiExit(db, rc);
                   109105:   sqlite3_mutex_leave(db->mutex);
                   109106:   return rc;
                   109107: }
                   109108: #endif
                   109109: 
                   109110: 
                   109111: /*
                   109112: ** Declare that a function has been overloaded by a virtual table.
                   109113: **
                   109114: ** If the function already exists as a regular global function, then
                   109115: ** this routine is a no-op.  If the function does not exist, then create
                   109116: ** a new one that always throws a run-time error.  
                   109117: **
                   109118: ** When virtual tables intend to provide an overloaded function, they
                   109119: ** should call this routine to make sure the global function exists.
                   109120: ** A global function must exist in order for name resolution to work
                   109121: ** properly.
                   109122: */
                   109123: SQLITE_API int sqlite3_overload_function(
                   109124:   sqlite3 *db,
                   109125:   const char *zName,
                   109126:   int nArg
                   109127: ){
                   109128:   int nName = sqlite3Strlen30(zName);
                   109129:   int rc;
                   109130:   sqlite3_mutex_enter(db->mutex);
                   109131:   if( sqlite3FindFunction(db, zName, nName, nArg, SQLITE_UTF8, 0)==0 ){
                   109132:     sqlite3CreateFunc(db, zName, nArg, SQLITE_UTF8,
                   109133:                       0, sqlite3InvalidFunction, 0, 0, 0);
                   109134:   }
                   109135:   rc = sqlite3ApiExit(db, SQLITE_OK);
                   109136:   sqlite3_mutex_leave(db->mutex);
                   109137:   return rc;
                   109138: }
                   109139: 
                   109140: #ifndef SQLITE_OMIT_TRACE
                   109141: /*
                   109142: ** Register a trace function.  The pArg from the previously registered trace
                   109143: ** is returned.  
                   109144: **
                   109145: ** A NULL trace function means that no tracing is executes.  A non-NULL
                   109146: ** trace is a pointer to a function that is invoked at the start of each
                   109147: ** SQL statement.
                   109148: */
                   109149: SQLITE_API void *sqlite3_trace(sqlite3 *db, void (*xTrace)(void*,const char*), void *pArg){
                   109150:   void *pOld;
                   109151:   sqlite3_mutex_enter(db->mutex);
                   109152:   pOld = db->pTraceArg;
                   109153:   db->xTrace = xTrace;
                   109154:   db->pTraceArg = pArg;
                   109155:   sqlite3_mutex_leave(db->mutex);
                   109156:   return pOld;
                   109157: }
                   109158: /*
                   109159: ** Register a profile function.  The pArg from the previously registered 
                   109160: ** profile function is returned.  
                   109161: **
                   109162: ** A NULL profile function means that no profiling is executes.  A non-NULL
                   109163: ** profile is a pointer to a function that is invoked at the conclusion of
                   109164: ** each SQL statement that is run.
                   109165: */
                   109166: SQLITE_API void *sqlite3_profile(
                   109167:   sqlite3 *db,
                   109168:   void (*xProfile)(void*,const char*,sqlite_uint64),
                   109169:   void *pArg
                   109170: ){
                   109171:   void *pOld;
                   109172:   sqlite3_mutex_enter(db->mutex);
                   109173:   pOld = db->pProfileArg;
                   109174:   db->xProfile = xProfile;
                   109175:   db->pProfileArg = pArg;
                   109176:   sqlite3_mutex_leave(db->mutex);
                   109177:   return pOld;
                   109178: }
                   109179: #endif /* SQLITE_OMIT_TRACE */
                   109180: 
                   109181: /*** EXPERIMENTAL ***
                   109182: **
                   109183: ** Register a function to be invoked when a transaction comments.
                   109184: ** If the invoked function returns non-zero, then the commit becomes a
                   109185: ** rollback.
                   109186: */
                   109187: SQLITE_API void *sqlite3_commit_hook(
                   109188:   sqlite3 *db,              /* Attach the hook to this database */
                   109189:   int (*xCallback)(void*),  /* Function to invoke on each commit */
                   109190:   void *pArg                /* Argument to the function */
                   109191: ){
                   109192:   void *pOld;
                   109193:   sqlite3_mutex_enter(db->mutex);
                   109194:   pOld = db->pCommitArg;
                   109195:   db->xCommitCallback = xCallback;
                   109196:   db->pCommitArg = pArg;
                   109197:   sqlite3_mutex_leave(db->mutex);
                   109198:   return pOld;
                   109199: }
                   109200: 
                   109201: /*
                   109202: ** Register a callback to be invoked each time a row is updated,
                   109203: ** inserted or deleted using this database connection.
                   109204: */
                   109205: SQLITE_API void *sqlite3_update_hook(
                   109206:   sqlite3 *db,              /* Attach the hook to this database */
                   109207:   void (*xCallback)(void*,int,char const *,char const *,sqlite_int64),
                   109208:   void *pArg                /* Argument to the function */
                   109209: ){
                   109210:   void *pRet;
                   109211:   sqlite3_mutex_enter(db->mutex);
                   109212:   pRet = db->pUpdateArg;
                   109213:   db->xUpdateCallback = xCallback;
                   109214:   db->pUpdateArg = pArg;
                   109215:   sqlite3_mutex_leave(db->mutex);
                   109216:   return pRet;
                   109217: }
                   109218: 
                   109219: /*
                   109220: ** Register a callback to be invoked each time a transaction is rolled
                   109221: ** back by this database connection.
                   109222: */
                   109223: SQLITE_API void *sqlite3_rollback_hook(
                   109224:   sqlite3 *db,              /* Attach the hook to this database */
                   109225:   void (*xCallback)(void*), /* Callback function */
                   109226:   void *pArg                /* Argument to the function */
                   109227: ){
                   109228:   void *pRet;
                   109229:   sqlite3_mutex_enter(db->mutex);
                   109230:   pRet = db->pRollbackArg;
                   109231:   db->xRollbackCallback = xCallback;
                   109232:   db->pRollbackArg = pArg;
                   109233:   sqlite3_mutex_leave(db->mutex);
                   109234:   return pRet;
                   109235: }
                   109236: 
                   109237: #ifndef SQLITE_OMIT_WAL
                   109238: /*
                   109239: ** The sqlite3_wal_hook() callback registered by sqlite3_wal_autocheckpoint().
                   109240: ** Invoke sqlite3_wal_checkpoint if the number of frames in the log file
                   109241: ** is greater than sqlite3.pWalArg cast to an integer (the value configured by
                   109242: ** wal_autocheckpoint()).
                   109243: */ 
                   109244: SQLITE_PRIVATE int sqlite3WalDefaultHook(
                   109245:   void *pClientData,     /* Argument */
                   109246:   sqlite3 *db,           /* Connection */
                   109247:   const char *zDb,       /* Database */
                   109248:   int nFrame             /* Size of WAL */
                   109249: ){
                   109250:   if( nFrame>=SQLITE_PTR_TO_INT(pClientData) ){
                   109251:     sqlite3BeginBenignMalloc();
                   109252:     sqlite3_wal_checkpoint(db, zDb);
                   109253:     sqlite3EndBenignMalloc();
                   109254:   }
                   109255:   return SQLITE_OK;
                   109256: }
                   109257: #endif /* SQLITE_OMIT_WAL */
                   109258: 
                   109259: /*
                   109260: ** Configure an sqlite3_wal_hook() callback to automatically checkpoint
                   109261: ** a database after committing a transaction if there are nFrame or
                   109262: ** more frames in the log file. Passing zero or a negative value as the
                   109263: ** nFrame parameter disables automatic checkpoints entirely.
                   109264: **
                   109265: ** The callback registered by this function replaces any existing callback
                   109266: ** registered using sqlite3_wal_hook(). Likewise, registering a callback
                   109267: ** using sqlite3_wal_hook() disables the automatic checkpoint mechanism
                   109268: ** configured by this function.
                   109269: */
                   109270: SQLITE_API int sqlite3_wal_autocheckpoint(sqlite3 *db, int nFrame){
                   109271: #ifdef SQLITE_OMIT_WAL
                   109272:   UNUSED_PARAMETER(db);
                   109273:   UNUSED_PARAMETER(nFrame);
                   109274: #else
                   109275:   if( nFrame>0 ){
                   109276:     sqlite3_wal_hook(db, sqlite3WalDefaultHook, SQLITE_INT_TO_PTR(nFrame));
                   109277:   }else{
                   109278:     sqlite3_wal_hook(db, 0, 0);
                   109279:   }
                   109280: #endif
                   109281:   return SQLITE_OK;
                   109282: }
                   109283: 
                   109284: /*
                   109285: ** Register a callback to be invoked each time a transaction is written
                   109286: ** into the write-ahead-log by this database connection.
                   109287: */
                   109288: SQLITE_API void *sqlite3_wal_hook(
                   109289:   sqlite3 *db,                    /* Attach the hook to this db handle */
                   109290:   int(*xCallback)(void *, sqlite3*, const char*, int),
                   109291:   void *pArg                      /* First argument passed to xCallback() */
                   109292: ){
                   109293: #ifndef SQLITE_OMIT_WAL
                   109294:   void *pRet;
                   109295:   sqlite3_mutex_enter(db->mutex);
                   109296:   pRet = db->pWalArg;
                   109297:   db->xWalCallback = xCallback;
                   109298:   db->pWalArg = pArg;
                   109299:   sqlite3_mutex_leave(db->mutex);
                   109300:   return pRet;
                   109301: #else
                   109302:   return 0;
                   109303: #endif
                   109304: }
                   109305: 
                   109306: /*
                   109307: ** Checkpoint database zDb.
                   109308: */
                   109309: SQLITE_API int sqlite3_wal_checkpoint_v2(
                   109310:   sqlite3 *db,                    /* Database handle */
                   109311:   const char *zDb,                /* Name of attached database (or NULL) */
                   109312:   int eMode,                      /* SQLITE_CHECKPOINT_* value */
                   109313:   int *pnLog,                     /* OUT: Size of WAL log in frames */
                   109314:   int *pnCkpt                     /* OUT: Total number of frames checkpointed */
                   109315: ){
                   109316: #ifdef SQLITE_OMIT_WAL
                   109317:   return SQLITE_OK;
                   109318: #else
                   109319:   int rc;                         /* Return code */
                   109320:   int iDb = SQLITE_MAX_ATTACHED;  /* sqlite3.aDb[] index of db to checkpoint */
                   109321: 
                   109322:   /* Initialize the output variables to -1 in case an error occurs. */
                   109323:   if( pnLog ) *pnLog = -1;
                   109324:   if( pnCkpt ) *pnCkpt = -1;
                   109325: 
                   109326:   assert( SQLITE_CHECKPOINT_FULL>SQLITE_CHECKPOINT_PASSIVE );
                   109327:   assert( SQLITE_CHECKPOINT_FULL<SQLITE_CHECKPOINT_RESTART );
                   109328:   assert( SQLITE_CHECKPOINT_PASSIVE+2==SQLITE_CHECKPOINT_RESTART );
                   109329:   if( eMode<SQLITE_CHECKPOINT_PASSIVE || eMode>SQLITE_CHECKPOINT_RESTART ){
                   109330:     return SQLITE_MISUSE;
                   109331:   }
                   109332: 
                   109333:   sqlite3_mutex_enter(db->mutex);
                   109334:   if( zDb && zDb[0] ){
                   109335:     iDb = sqlite3FindDbName(db, zDb);
                   109336:   }
                   109337:   if( iDb<0 ){
                   109338:     rc = SQLITE_ERROR;
                   109339:     sqlite3Error(db, SQLITE_ERROR, "unknown database: %s", zDb);
                   109340:   }else{
                   109341:     rc = sqlite3Checkpoint(db, iDb, eMode, pnLog, pnCkpt);
                   109342:     sqlite3Error(db, rc, 0);
                   109343:   }
                   109344:   rc = sqlite3ApiExit(db, rc);
                   109345:   sqlite3_mutex_leave(db->mutex);
                   109346:   return rc;
                   109347: #endif
                   109348: }
                   109349: 
                   109350: 
                   109351: /*
                   109352: ** Checkpoint database zDb. If zDb is NULL, or if the buffer zDb points
                   109353: ** to contains a zero-length string, all attached databases are 
                   109354: ** checkpointed.
                   109355: */
                   109356: SQLITE_API int sqlite3_wal_checkpoint(sqlite3 *db, const char *zDb){
                   109357:   return sqlite3_wal_checkpoint_v2(db, zDb, SQLITE_CHECKPOINT_PASSIVE, 0, 0);
                   109358: }
                   109359: 
                   109360: #ifndef SQLITE_OMIT_WAL
                   109361: /*
                   109362: ** Run a checkpoint on database iDb. This is a no-op if database iDb is
                   109363: ** not currently open in WAL mode.
                   109364: **
                   109365: ** If a transaction is open on the database being checkpointed, this 
                   109366: ** function returns SQLITE_LOCKED and a checkpoint is not attempted. If 
                   109367: ** an error occurs while running the checkpoint, an SQLite error code is 
                   109368: ** returned (i.e. SQLITE_IOERR). Otherwise, SQLITE_OK.
                   109369: **
                   109370: ** The mutex on database handle db should be held by the caller. The mutex
                   109371: ** associated with the specific b-tree being checkpointed is taken by
                   109372: ** this function while the checkpoint is running.
                   109373: **
                   109374: ** If iDb is passed SQLITE_MAX_ATTACHED, then all attached databases are
                   109375: ** checkpointed. If an error is encountered it is returned immediately -
                   109376: ** no attempt is made to checkpoint any remaining databases.
                   109377: **
                   109378: ** Parameter eMode is one of SQLITE_CHECKPOINT_PASSIVE, FULL or RESTART.
                   109379: */
                   109380: SQLITE_PRIVATE int sqlite3Checkpoint(sqlite3 *db, int iDb, int eMode, int *pnLog, int *pnCkpt){
                   109381:   int rc = SQLITE_OK;             /* Return code */
                   109382:   int i;                          /* Used to iterate through attached dbs */
                   109383:   int bBusy = 0;                  /* True if SQLITE_BUSY has been encountered */
                   109384: 
                   109385:   assert( sqlite3_mutex_held(db->mutex) );
                   109386:   assert( !pnLog || *pnLog==-1 );
                   109387:   assert( !pnCkpt || *pnCkpt==-1 );
                   109388: 
                   109389:   for(i=0; i<db->nDb && rc==SQLITE_OK; i++){
                   109390:     if( i==iDb || iDb==SQLITE_MAX_ATTACHED ){
                   109391:       rc = sqlite3BtreeCheckpoint(db->aDb[i].pBt, eMode, pnLog, pnCkpt);
                   109392:       pnLog = 0;
                   109393:       pnCkpt = 0;
                   109394:       if( rc==SQLITE_BUSY ){
                   109395:         bBusy = 1;
                   109396:         rc = SQLITE_OK;
                   109397:       }
                   109398:     }
                   109399:   }
                   109400: 
                   109401:   return (rc==SQLITE_OK && bBusy) ? SQLITE_BUSY : rc;
                   109402: }
                   109403: #endif /* SQLITE_OMIT_WAL */
                   109404: 
                   109405: /*
                   109406: ** This function returns true if main-memory should be used instead of
                   109407: ** a temporary file for transient pager files and statement journals.
                   109408: ** The value returned depends on the value of db->temp_store (runtime
                   109409: ** parameter) and the compile time value of SQLITE_TEMP_STORE. The
                   109410: ** following table describes the relationship between these two values
                   109411: ** and this functions return value.
                   109412: **
                   109413: **   SQLITE_TEMP_STORE     db->temp_store     Location of temporary database
                   109414: **   -----------------     --------------     ------------------------------
                   109415: **   0                     any                file      (return 0)
                   109416: **   1                     1                  file      (return 0)
                   109417: **   1                     2                  memory    (return 1)
                   109418: **   1                     0                  file      (return 0)
                   109419: **   2                     1                  file      (return 0)
                   109420: **   2                     2                  memory    (return 1)
                   109421: **   2                     0                  memory    (return 1)
                   109422: **   3                     any                memory    (return 1)
                   109423: */
                   109424: SQLITE_PRIVATE int sqlite3TempInMemory(const sqlite3 *db){
                   109425: #if SQLITE_TEMP_STORE==1
                   109426:   return ( db->temp_store==2 );
                   109427: #endif
                   109428: #if SQLITE_TEMP_STORE==2
                   109429:   return ( db->temp_store!=1 );
                   109430: #endif
                   109431: #if SQLITE_TEMP_STORE==3
                   109432:   return 1;
                   109433: #endif
                   109434: #if SQLITE_TEMP_STORE<1 || SQLITE_TEMP_STORE>3
                   109435:   return 0;
                   109436: #endif
                   109437: }
                   109438: 
                   109439: /*
                   109440: ** Return UTF-8 encoded English language explanation of the most recent
                   109441: ** error.
                   109442: */
                   109443: SQLITE_API const char *sqlite3_errmsg(sqlite3 *db){
                   109444:   const char *z;
                   109445:   if( !db ){
                   109446:     return sqlite3ErrStr(SQLITE_NOMEM);
                   109447:   }
                   109448:   if( !sqlite3SafetyCheckSickOrOk(db) ){
                   109449:     return sqlite3ErrStr(SQLITE_MISUSE_BKPT);
                   109450:   }
                   109451:   sqlite3_mutex_enter(db->mutex);
                   109452:   if( db->mallocFailed ){
                   109453:     z = sqlite3ErrStr(SQLITE_NOMEM);
                   109454:   }else{
                   109455:     z = (char*)sqlite3_value_text(db->pErr);
                   109456:     assert( !db->mallocFailed );
                   109457:     if( z==0 ){
                   109458:       z = sqlite3ErrStr(db->errCode);
                   109459:     }
                   109460:   }
                   109461:   sqlite3_mutex_leave(db->mutex);
                   109462:   return z;
                   109463: }
                   109464: 
                   109465: #ifndef SQLITE_OMIT_UTF16
                   109466: /*
                   109467: ** Return UTF-16 encoded English language explanation of the most recent
                   109468: ** error.
                   109469: */
                   109470: SQLITE_API const void *sqlite3_errmsg16(sqlite3 *db){
                   109471:   static const u16 outOfMem[] = {
                   109472:     'o', 'u', 't', ' ', 'o', 'f', ' ', 'm', 'e', 'm', 'o', 'r', 'y', 0
                   109473:   };
                   109474:   static const u16 misuse[] = {
                   109475:     'l', 'i', 'b', 'r', 'a', 'r', 'y', ' ', 
                   109476:     'r', 'o', 'u', 't', 'i', 'n', 'e', ' ', 
                   109477:     'c', 'a', 'l', 'l', 'e', 'd', ' ', 
                   109478:     'o', 'u', 't', ' ', 
                   109479:     'o', 'f', ' ', 
                   109480:     's', 'e', 'q', 'u', 'e', 'n', 'c', 'e', 0
                   109481:   };
                   109482: 
                   109483:   const void *z;
                   109484:   if( !db ){
                   109485:     return (void *)outOfMem;
                   109486:   }
                   109487:   if( !sqlite3SafetyCheckSickOrOk(db) ){
                   109488:     return (void *)misuse;
                   109489:   }
                   109490:   sqlite3_mutex_enter(db->mutex);
                   109491:   if( db->mallocFailed ){
                   109492:     z = (void *)outOfMem;
                   109493:   }else{
                   109494:     z = sqlite3_value_text16(db->pErr);
                   109495:     if( z==0 ){
                   109496:       sqlite3ValueSetStr(db->pErr, -1, sqlite3ErrStr(db->errCode),
                   109497:            SQLITE_UTF8, SQLITE_STATIC);
                   109498:       z = sqlite3_value_text16(db->pErr);
                   109499:     }
                   109500:     /* A malloc() may have failed within the call to sqlite3_value_text16()
                   109501:     ** above. If this is the case, then the db->mallocFailed flag needs to
                   109502:     ** be cleared before returning. Do this directly, instead of via
                   109503:     ** sqlite3ApiExit(), to avoid setting the database handle error message.
                   109504:     */
                   109505:     db->mallocFailed = 0;
                   109506:   }
                   109507:   sqlite3_mutex_leave(db->mutex);
                   109508:   return z;
                   109509: }
                   109510: #endif /* SQLITE_OMIT_UTF16 */
                   109511: 
                   109512: /*
                   109513: ** Return the most recent error code generated by an SQLite routine. If NULL is
                   109514: ** passed to this function, we assume a malloc() failed during sqlite3_open().
                   109515: */
                   109516: SQLITE_API int sqlite3_errcode(sqlite3 *db){
                   109517:   if( db && !sqlite3SafetyCheckSickOrOk(db) ){
                   109518:     return SQLITE_MISUSE_BKPT;
                   109519:   }
                   109520:   if( !db || db->mallocFailed ){
                   109521:     return SQLITE_NOMEM;
                   109522:   }
                   109523:   return db->errCode & db->errMask;
                   109524: }
                   109525: SQLITE_API int sqlite3_extended_errcode(sqlite3 *db){
                   109526:   if( db && !sqlite3SafetyCheckSickOrOk(db) ){
                   109527:     return SQLITE_MISUSE_BKPT;
                   109528:   }
                   109529:   if( !db || db->mallocFailed ){
                   109530:     return SQLITE_NOMEM;
                   109531:   }
                   109532:   return db->errCode;
                   109533: }
                   109534: 
                   109535: /*
                   109536: ** Create a new collating function for database "db".  The name is zName
                   109537: ** and the encoding is enc.
                   109538: */
                   109539: static int createCollation(
                   109540:   sqlite3* db,
                   109541:   const char *zName, 
                   109542:   u8 enc,
                   109543:   u8 collType,
                   109544:   void* pCtx,
                   109545:   int(*xCompare)(void*,int,const void*,int,const void*),
                   109546:   void(*xDel)(void*)
                   109547: ){
                   109548:   CollSeq *pColl;
                   109549:   int enc2;
                   109550:   int nName = sqlite3Strlen30(zName);
                   109551:   
                   109552:   assert( sqlite3_mutex_held(db->mutex) );
                   109553: 
                   109554:   /* If SQLITE_UTF16 is specified as the encoding type, transform this
                   109555:   ** to one of SQLITE_UTF16LE or SQLITE_UTF16BE using the
                   109556:   ** SQLITE_UTF16NATIVE macro. SQLITE_UTF16 is not used internally.
                   109557:   */
                   109558:   enc2 = enc;
                   109559:   testcase( enc2==SQLITE_UTF16 );
                   109560:   testcase( enc2==SQLITE_UTF16_ALIGNED );
                   109561:   if( enc2==SQLITE_UTF16 || enc2==SQLITE_UTF16_ALIGNED ){
                   109562:     enc2 = SQLITE_UTF16NATIVE;
                   109563:   }
                   109564:   if( enc2<SQLITE_UTF8 || enc2>SQLITE_UTF16BE ){
                   109565:     return SQLITE_MISUSE_BKPT;
                   109566:   }
                   109567: 
                   109568:   /* Check if this call is removing or replacing an existing collation 
                   109569:   ** sequence. If so, and there are active VMs, return busy. If there
                   109570:   ** are no active VMs, invalidate any pre-compiled statements.
                   109571:   */
                   109572:   pColl = sqlite3FindCollSeq(db, (u8)enc2, zName, 0);
                   109573:   if( pColl && pColl->xCmp ){
                   109574:     if( db->activeVdbeCnt ){
                   109575:       sqlite3Error(db, SQLITE_BUSY, 
                   109576:         "unable to delete/modify collation sequence due to active statements");
                   109577:       return SQLITE_BUSY;
                   109578:     }
                   109579:     sqlite3ExpirePreparedStatements(db);
                   109580: 
                   109581:     /* If collation sequence pColl was created directly by a call to
                   109582:     ** sqlite3_create_collation, and not generated by synthCollSeq(),
                   109583:     ** then any copies made by synthCollSeq() need to be invalidated.
                   109584:     ** Also, collation destructor - CollSeq.xDel() - function may need
                   109585:     ** to be called.
                   109586:     */ 
                   109587:     if( (pColl->enc & ~SQLITE_UTF16_ALIGNED)==enc2 ){
                   109588:       CollSeq *aColl = sqlite3HashFind(&db->aCollSeq, zName, nName);
                   109589:       int j;
                   109590:       for(j=0; j<3; j++){
                   109591:         CollSeq *p = &aColl[j];
                   109592:         if( p->enc==pColl->enc ){
                   109593:           if( p->xDel ){
                   109594:             p->xDel(p->pUser);
                   109595:           }
                   109596:           p->xCmp = 0;
                   109597:         }
                   109598:       }
                   109599:     }
                   109600:   }
                   109601: 
                   109602:   pColl = sqlite3FindCollSeq(db, (u8)enc2, zName, 1);
                   109603:   if( pColl==0 ) return SQLITE_NOMEM;
                   109604:   pColl->xCmp = xCompare;
                   109605:   pColl->pUser = pCtx;
                   109606:   pColl->xDel = xDel;
                   109607:   pColl->enc = (u8)(enc2 | (enc & SQLITE_UTF16_ALIGNED));
                   109608:   pColl->type = collType;
                   109609:   sqlite3Error(db, SQLITE_OK, 0);
                   109610:   return SQLITE_OK;
                   109611: }
                   109612: 
                   109613: 
                   109614: /*
                   109615: ** This array defines hard upper bounds on limit values.  The
                   109616: ** initializer must be kept in sync with the SQLITE_LIMIT_*
                   109617: ** #defines in sqlite3.h.
                   109618: */
                   109619: static const int aHardLimit[] = {
                   109620:   SQLITE_MAX_LENGTH,
                   109621:   SQLITE_MAX_SQL_LENGTH,
                   109622:   SQLITE_MAX_COLUMN,
                   109623:   SQLITE_MAX_EXPR_DEPTH,
                   109624:   SQLITE_MAX_COMPOUND_SELECT,
                   109625:   SQLITE_MAX_VDBE_OP,
                   109626:   SQLITE_MAX_FUNCTION_ARG,
                   109627:   SQLITE_MAX_ATTACHED,
                   109628:   SQLITE_MAX_LIKE_PATTERN_LENGTH,
                   109629:   SQLITE_MAX_VARIABLE_NUMBER,
                   109630:   SQLITE_MAX_TRIGGER_DEPTH,
                   109631: };
                   109632: 
                   109633: /*
                   109634: ** Make sure the hard limits are set to reasonable values
                   109635: */
                   109636: #if SQLITE_MAX_LENGTH<100
                   109637: # error SQLITE_MAX_LENGTH must be at least 100
                   109638: #endif
                   109639: #if SQLITE_MAX_SQL_LENGTH<100
                   109640: # error SQLITE_MAX_SQL_LENGTH must be at least 100
                   109641: #endif
                   109642: #if SQLITE_MAX_SQL_LENGTH>SQLITE_MAX_LENGTH
                   109643: # error SQLITE_MAX_SQL_LENGTH must not be greater than SQLITE_MAX_LENGTH
                   109644: #endif
                   109645: #if SQLITE_MAX_COMPOUND_SELECT<2
                   109646: # error SQLITE_MAX_COMPOUND_SELECT must be at least 2
                   109647: #endif
                   109648: #if SQLITE_MAX_VDBE_OP<40
                   109649: # error SQLITE_MAX_VDBE_OP must be at least 40
                   109650: #endif
                   109651: #if SQLITE_MAX_FUNCTION_ARG<0 || SQLITE_MAX_FUNCTION_ARG>1000
                   109652: # error SQLITE_MAX_FUNCTION_ARG must be between 0 and 1000
                   109653: #endif
                   109654: #if SQLITE_MAX_ATTACHED<0 || SQLITE_MAX_ATTACHED>62
                   109655: # error SQLITE_MAX_ATTACHED must be between 0 and 62
                   109656: #endif
                   109657: #if SQLITE_MAX_LIKE_PATTERN_LENGTH<1
                   109658: # error SQLITE_MAX_LIKE_PATTERN_LENGTH must be at least 1
                   109659: #endif
                   109660: #if SQLITE_MAX_COLUMN>32767
                   109661: # error SQLITE_MAX_COLUMN must not exceed 32767
                   109662: #endif
                   109663: #if SQLITE_MAX_TRIGGER_DEPTH<1
                   109664: # error SQLITE_MAX_TRIGGER_DEPTH must be at least 1
                   109665: #endif
                   109666: 
                   109667: 
                   109668: /*
                   109669: ** Change the value of a limit.  Report the old value.
                   109670: ** If an invalid limit index is supplied, report -1.
                   109671: ** Make no changes but still report the old value if the
                   109672: ** new limit is negative.
                   109673: **
                   109674: ** A new lower limit does not shrink existing constructs.
                   109675: ** It merely prevents new constructs that exceed the limit
                   109676: ** from forming.
                   109677: */
                   109678: SQLITE_API int sqlite3_limit(sqlite3 *db, int limitId, int newLimit){
                   109679:   int oldLimit;
                   109680: 
                   109681: 
                   109682:   /* EVIDENCE-OF: R-30189-54097 For each limit category SQLITE_LIMIT_NAME
                   109683:   ** there is a hard upper bound set at compile-time by a C preprocessor
                   109684:   ** macro called SQLITE_MAX_NAME. (The "_LIMIT_" in the name is changed to
                   109685:   ** "_MAX_".)
                   109686:   */
                   109687:   assert( aHardLimit[SQLITE_LIMIT_LENGTH]==SQLITE_MAX_LENGTH );
                   109688:   assert( aHardLimit[SQLITE_LIMIT_SQL_LENGTH]==SQLITE_MAX_SQL_LENGTH );
                   109689:   assert( aHardLimit[SQLITE_LIMIT_COLUMN]==SQLITE_MAX_COLUMN );
                   109690:   assert( aHardLimit[SQLITE_LIMIT_EXPR_DEPTH]==SQLITE_MAX_EXPR_DEPTH );
                   109691:   assert( aHardLimit[SQLITE_LIMIT_COMPOUND_SELECT]==SQLITE_MAX_COMPOUND_SELECT);
                   109692:   assert( aHardLimit[SQLITE_LIMIT_VDBE_OP]==SQLITE_MAX_VDBE_OP );
                   109693:   assert( aHardLimit[SQLITE_LIMIT_FUNCTION_ARG]==SQLITE_MAX_FUNCTION_ARG );
                   109694:   assert( aHardLimit[SQLITE_LIMIT_ATTACHED]==SQLITE_MAX_ATTACHED );
                   109695:   assert( aHardLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH]==
                   109696:                                                SQLITE_MAX_LIKE_PATTERN_LENGTH );
                   109697:   assert( aHardLimit[SQLITE_LIMIT_VARIABLE_NUMBER]==SQLITE_MAX_VARIABLE_NUMBER);
                   109698:   assert( aHardLimit[SQLITE_LIMIT_TRIGGER_DEPTH]==SQLITE_MAX_TRIGGER_DEPTH );
                   109699:   assert( SQLITE_LIMIT_TRIGGER_DEPTH==(SQLITE_N_LIMIT-1) );
                   109700: 
                   109701: 
                   109702:   if( limitId<0 || limitId>=SQLITE_N_LIMIT ){
                   109703:     return -1;
                   109704:   }
                   109705:   oldLimit = db->aLimit[limitId];
                   109706:   if( newLimit>=0 ){                   /* IMP: R-52476-28732 */
                   109707:     if( newLimit>aHardLimit[limitId] ){
                   109708:       newLimit = aHardLimit[limitId];  /* IMP: R-51463-25634 */
                   109709:     }
                   109710:     db->aLimit[limitId] = newLimit;
                   109711:   }
                   109712:   return oldLimit;                     /* IMP: R-53341-35419 */
                   109713: }
                   109714: 
                   109715: /*
                   109716: ** This function is used to parse both URIs and non-URI filenames passed by the
                   109717: ** user to API functions sqlite3_open() or sqlite3_open_v2(), and for database
                   109718: ** URIs specified as part of ATTACH statements.
                   109719: **
                   109720: ** The first argument to this function is the name of the VFS to use (or
                   109721: ** a NULL to signify the default VFS) if the URI does not contain a "vfs=xxx"
                   109722: ** query parameter. The second argument contains the URI (or non-URI filename)
                   109723: ** itself. When this function is called the *pFlags variable should contain
                   109724: ** the default flags to open the database handle with. The value stored in
                   109725: ** *pFlags may be updated before returning if the URI filename contains 
                   109726: ** "cache=xxx" or "mode=xxx" query parameters.
                   109727: **
                   109728: ** If successful, SQLITE_OK is returned. In this case *ppVfs is set to point to
                   109729: ** the VFS that should be used to open the database file. *pzFile is set to
                   109730: ** point to a buffer containing the name of the file to open. It is the 
                   109731: ** responsibility of the caller to eventually call sqlite3_free() to release
                   109732: ** this buffer.
                   109733: **
                   109734: ** If an error occurs, then an SQLite error code is returned and *pzErrMsg
                   109735: ** may be set to point to a buffer containing an English language error 
                   109736: ** message. It is the responsibility of the caller to eventually release
                   109737: ** this buffer by calling sqlite3_free().
                   109738: */
                   109739: SQLITE_PRIVATE int sqlite3ParseUri(
                   109740:   const char *zDefaultVfs,        /* VFS to use if no "vfs=xxx" query option */
                   109741:   const char *zUri,               /* Nul-terminated URI to parse */
                   109742:   unsigned int *pFlags,           /* IN/OUT: SQLITE_OPEN_XXX flags */
                   109743:   sqlite3_vfs **ppVfs,            /* OUT: VFS to use */ 
                   109744:   char **pzFile,                  /* OUT: Filename component of URI */
                   109745:   char **pzErrMsg                 /* OUT: Error message (if rc!=SQLITE_OK) */
                   109746: ){
                   109747:   int rc = SQLITE_OK;
                   109748:   unsigned int flags = *pFlags;
                   109749:   const char *zVfs = zDefaultVfs;
                   109750:   char *zFile;
                   109751:   char c;
                   109752:   int nUri = sqlite3Strlen30(zUri);
                   109753: 
                   109754:   assert( *pzErrMsg==0 );
                   109755: 
                   109756:   if( ((flags & SQLITE_OPEN_URI) || sqlite3GlobalConfig.bOpenUri) 
                   109757:    && nUri>=5 && memcmp(zUri, "file:", 5)==0 
                   109758:   ){
                   109759:     char *zOpt;
                   109760:     int eState;                   /* Parser state when parsing URI */
                   109761:     int iIn;                      /* Input character index */
                   109762:     int iOut = 0;                 /* Output character index */
                   109763:     int nByte = nUri+2;           /* Bytes of space to allocate */
                   109764: 
                   109765:     /* Make sure the SQLITE_OPEN_URI flag is set to indicate to the VFS xOpen 
                   109766:     ** method that there may be extra parameters following the file-name.  */
                   109767:     flags |= SQLITE_OPEN_URI;
                   109768: 
                   109769:     for(iIn=0; iIn<nUri; iIn++) nByte += (zUri[iIn]=='&');
                   109770:     zFile = sqlite3_malloc(nByte);
                   109771:     if( !zFile ) return SQLITE_NOMEM;
                   109772: 
                   109773:     /* Discard the scheme and authority segments of the URI. */
                   109774:     if( zUri[5]=='/' && zUri[6]=='/' ){
                   109775:       iIn = 7;
                   109776:       while( zUri[iIn] && zUri[iIn]!='/' ) iIn++;
                   109777: 
                   109778:       if( iIn!=7 && (iIn!=16 || memcmp("localhost", &zUri[7], 9)) ){
                   109779:         *pzErrMsg = sqlite3_mprintf("invalid uri authority: %.*s", 
                   109780:             iIn-7, &zUri[7]);
                   109781:         rc = SQLITE_ERROR;
                   109782:         goto parse_uri_out;
                   109783:       }
                   109784:     }else{
                   109785:       iIn = 5;
                   109786:     }
                   109787: 
                   109788:     /* Copy the filename and any query parameters into the zFile buffer. 
                   109789:     ** Decode %HH escape codes along the way. 
                   109790:     **
                   109791:     ** Within this loop, variable eState may be set to 0, 1 or 2, depending
                   109792:     ** on the parsing context. As follows:
                   109793:     **
                   109794:     **   0: Parsing file-name.
                   109795:     **   1: Parsing name section of a name=value query parameter.
                   109796:     **   2: Parsing value section of a name=value query parameter.
                   109797:     */
                   109798:     eState = 0;
                   109799:     while( (c = zUri[iIn])!=0 && c!='#' ){
                   109800:       iIn++;
                   109801:       if( c=='%' 
                   109802:        && sqlite3Isxdigit(zUri[iIn]) 
                   109803:        && sqlite3Isxdigit(zUri[iIn+1]) 
                   109804:       ){
                   109805:         int octet = (sqlite3HexToInt(zUri[iIn++]) << 4);
                   109806:         octet += sqlite3HexToInt(zUri[iIn++]);
                   109807: 
                   109808:         assert( octet>=0 && octet<256 );
                   109809:         if( octet==0 ){
                   109810:           /* This branch is taken when "%00" appears within the URI. In this
                   109811:           ** case we ignore all text in the remainder of the path, name or
                   109812:           ** value currently being parsed. So ignore the current character
                   109813:           ** and skip to the next "?", "=" or "&", as appropriate. */
                   109814:           while( (c = zUri[iIn])!=0 && c!='#' 
                   109815:               && (eState!=0 || c!='?')
                   109816:               && (eState!=1 || (c!='=' && c!='&'))
                   109817:               && (eState!=2 || c!='&')
                   109818:           ){
                   109819:             iIn++;
                   109820:           }
                   109821:           continue;
                   109822:         }
                   109823:         c = octet;
                   109824:       }else if( eState==1 && (c=='&' || c=='=') ){
                   109825:         if( zFile[iOut-1]==0 ){
                   109826:           /* An empty option name. Ignore this option altogether. */
                   109827:           while( zUri[iIn] && zUri[iIn]!='#' && zUri[iIn-1]!='&' ) iIn++;
                   109828:           continue;
                   109829:         }
                   109830:         if( c=='&' ){
                   109831:           zFile[iOut++] = '\0';
                   109832:         }else{
                   109833:           eState = 2;
                   109834:         }
                   109835:         c = 0;
                   109836:       }else if( (eState==0 && c=='?') || (eState==2 && c=='&') ){
                   109837:         c = 0;
                   109838:         eState = 1;
                   109839:       }
                   109840:       zFile[iOut++] = c;
                   109841:     }
                   109842:     if( eState==1 ) zFile[iOut++] = '\0';
                   109843:     zFile[iOut++] = '\0';
                   109844:     zFile[iOut++] = '\0';
                   109845: 
                   109846:     /* Check if there were any options specified that should be interpreted 
                   109847:     ** here. Options that are interpreted here include "vfs" and those that
                   109848:     ** correspond to flags that may be passed to the sqlite3_open_v2()
                   109849:     ** method. */
                   109850:     zOpt = &zFile[sqlite3Strlen30(zFile)+1];
                   109851:     while( zOpt[0] ){
                   109852:       int nOpt = sqlite3Strlen30(zOpt);
                   109853:       char *zVal = &zOpt[nOpt+1];
                   109854:       int nVal = sqlite3Strlen30(zVal);
                   109855: 
                   109856:       if( nOpt==3 && memcmp("vfs", zOpt, 3)==0 ){
                   109857:         zVfs = zVal;
                   109858:       }else{
                   109859:         struct OpenMode {
                   109860:           const char *z;
                   109861:           int mode;
                   109862:         } *aMode = 0;
                   109863:         char *zModeType = 0;
                   109864:         int mask = 0;
                   109865:         int limit = 0;
                   109866: 
                   109867:         if( nOpt==5 && memcmp("cache", zOpt, 5)==0 ){
                   109868:           static struct OpenMode aCacheMode[] = {
                   109869:             { "shared",  SQLITE_OPEN_SHAREDCACHE },
                   109870:             { "private", SQLITE_OPEN_PRIVATECACHE },
                   109871:             { 0, 0 }
                   109872:           };
                   109873: 
                   109874:           mask = SQLITE_OPEN_SHAREDCACHE|SQLITE_OPEN_PRIVATECACHE;
                   109875:           aMode = aCacheMode;
                   109876:           limit = mask;
                   109877:           zModeType = "cache";
                   109878:         }
                   109879:         if( nOpt==4 && memcmp("mode", zOpt, 4)==0 ){
                   109880:           static struct OpenMode aOpenMode[] = {
                   109881:             { "ro",  SQLITE_OPEN_READONLY },
                   109882:             { "rw",  SQLITE_OPEN_READWRITE }, 
                   109883:             { "rwc", SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE },
                   109884:             { 0, 0 }
                   109885:           };
                   109886: 
                   109887:           mask = SQLITE_OPEN_READONLY|SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE;
                   109888:           aMode = aOpenMode;
                   109889:           limit = mask & flags;
                   109890:           zModeType = "access";
                   109891:         }
                   109892: 
                   109893:         if( aMode ){
                   109894:           int i;
                   109895:           int mode = 0;
                   109896:           for(i=0; aMode[i].z; i++){
                   109897:             const char *z = aMode[i].z;
                   109898:             if( nVal==sqlite3Strlen30(z) && 0==memcmp(zVal, z, nVal) ){
                   109899:               mode = aMode[i].mode;
                   109900:               break;
                   109901:             }
                   109902:           }
                   109903:           if( mode==0 ){
                   109904:             *pzErrMsg = sqlite3_mprintf("no such %s mode: %s", zModeType, zVal);
                   109905:             rc = SQLITE_ERROR;
                   109906:             goto parse_uri_out;
                   109907:           }
                   109908:           if( mode>limit ){
                   109909:             *pzErrMsg = sqlite3_mprintf("%s mode not allowed: %s",
                   109910:                                         zModeType, zVal);
                   109911:             rc = SQLITE_PERM;
                   109912:             goto parse_uri_out;
                   109913:           }
                   109914:           flags = (flags & ~mask) | mode;
                   109915:         }
                   109916:       }
                   109917: 
                   109918:       zOpt = &zVal[nVal+1];
                   109919:     }
                   109920: 
                   109921:   }else{
                   109922:     zFile = sqlite3_malloc(nUri+2);
                   109923:     if( !zFile ) return SQLITE_NOMEM;
                   109924:     memcpy(zFile, zUri, nUri);
                   109925:     zFile[nUri] = '\0';
                   109926:     zFile[nUri+1] = '\0';
                   109927:   }
                   109928: 
                   109929:   *ppVfs = sqlite3_vfs_find(zVfs);
                   109930:   if( *ppVfs==0 ){
                   109931:     *pzErrMsg = sqlite3_mprintf("no such vfs: %s", zVfs);
                   109932:     rc = SQLITE_ERROR;
                   109933:   }
                   109934:  parse_uri_out:
                   109935:   if( rc!=SQLITE_OK ){
                   109936:     sqlite3_free(zFile);
                   109937:     zFile = 0;
                   109938:   }
                   109939:   *pFlags = flags;
                   109940:   *pzFile = zFile;
                   109941:   return rc;
                   109942: }
                   109943: 
                   109944: 
                   109945: /*
                   109946: ** This routine does the work of opening a database on behalf of
                   109947: ** sqlite3_open() and sqlite3_open16(). The database filename "zFilename"  
                   109948: ** is UTF-8 encoded.
                   109949: */
                   109950: static int openDatabase(
                   109951:   const char *zFilename, /* Database filename UTF-8 encoded */
                   109952:   sqlite3 **ppDb,        /* OUT: Returned database handle */
                   109953:   unsigned int flags,    /* Operational flags */
                   109954:   const char *zVfs       /* Name of the VFS to use */
                   109955: ){
                   109956:   sqlite3 *db;                    /* Store allocated handle here */
                   109957:   int rc;                         /* Return code */
                   109958:   int isThreadsafe;               /* True for threadsafe connections */
                   109959:   char *zOpen = 0;                /* Filename argument to pass to BtreeOpen() */
                   109960:   char *zErrMsg = 0;              /* Error message from sqlite3ParseUri() */
                   109961: 
                   109962:   *ppDb = 0;
                   109963: #ifndef SQLITE_OMIT_AUTOINIT
                   109964:   rc = sqlite3_initialize();
                   109965:   if( rc ) return rc;
                   109966: #endif
                   109967: 
                   109968:   /* Only allow sensible combinations of bits in the flags argument.  
                   109969:   ** Throw an error if any non-sense combination is used.  If we
                   109970:   ** do not block illegal combinations here, it could trigger
                   109971:   ** assert() statements in deeper layers.  Sensible combinations
                   109972:   ** are:
                   109973:   **
                   109974:   **  1:  SQLITE_OPEN_READONLY
                   109975:   **  2:  SQLITE_OPEN_READWRITE
                   109976:   **  6:  SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE
                   109977:   */
                   109978:   assert( SQLITE_OPEN_READONLY  == 0x01 );
                   109979:   assert( SQLITE_OPEN_READWRITE == 0x02 );
                   109980:   assert( SQLITE_OPEN_CREATE    == 0x04 );
                   109981:   testcase( (1<<(flags&7))==0x02 ); /* READONLY */
                   109982:   testcase( (1<<(flags&7))==0x04 ); /* READWRITE */
                   109983:   testcase( (1<<(flags&7))==0x40 ); /* READWRITE | CREATE */
                   109984:   if( ((1<<(flags&7)) & 0x46)==0 ) return SQLITE_MISUSE_BKPT;
                   109985: 
                   109986:   if( sqlite3GlobalConfig.bCoreMutex==0 ){
                   109987:     isThreadsafe = 0;
                   109988:   }else if( flags & SQLITE_OPEN_NOMUTEX ){
                   109989:     isThreadsafe = 0;
                   109990:   }else if( flags & SQLITE_OPEN_FULLMUTEX ){
                   109991:     isThreadsafe = 1;
                   109992:   }else{
                   109993:     isThreadsafe = sqlite3GlobalConfig.bFullMutex;
                   109994:   }
                   109995:   if( flags & SQLITE_OPEN_PRIVATECACHE ){
                   109996:     flags &= ~SQLITE_OPEN_SHAREDCACHE;
                   109997:   }else if( sqlite3GlobalConfig.sharedCacheEnabled ){
                   109998:     flags |= SQLITE_OPEN_SHAREDCACHE;
                   109999:   }
                   110000: 
                   110001:   /* Remove harmful bits from the flags parameter
                   110002:   **
                   110003:   ** The SQLITE_OPEN_NOMUTEX and SQLITE_OPEN_FULLMUTEX flags were
                   110004:   ** dealt with in the previous code block.  Besides these, the only
                   110005:   ** valid input flags for sqlite3_open_v2() are SQLITE_OPEN_READONLY,
                   110006:   ** SQLITE_OPEN_READWRITE, SQLITE_OPEN_CREATE, SQLITE_OPEN_SHAREDCACHE,
                   110007:   ** SQLITE_OPEN_PRIVATECACHE, and some reserved bits.  Silently mask
                   110008:   ** off all other flags.
                   110009:   */
                   110010:   flags &=  ~( SQLITE_OPEN_DELETEONCLOSE |
                   110011:                SQLITE_OPEN_EXCLUSIVE |
                   110012:                SQLITE_OPEN_MAIN_DB |
                   110013:                SQLITE_OPEN_TEMP_DB | 
                   110014:                SQLITE_OPEN_TRANSIENT_DB | 
                   110015:                SQLITE_OPEN_MAIN_JOURNAL | 
                   110016:                SQLITE_OPEN_TEMP_JOURNAL | 
                   110017:                SQLITE_OPEN_SUBJOURNAL | 
                   110018:                SQLITE_OPEN_MASTER_JOURNAL |
                   110019:                SQLITE_OPEN_NOMUTEX |
                   110020:                SQLITE_OPEN_FULLMUTEX |
                   110021:                SQLITE_OPEN_WAL
                   110022:              );
                   110023: 
                   110024:   /* Allocate the sqlite data structure */
                   110025:   db = sqlite3MallocZero( sizeof(sqlite3) );
                   110026:   if( db==0 ) goto opendb_out;
                   110027:   if( isThreadsafe ){
                   110028:     db->mutex = sqlite3MutexAlloc(SQLITE_MUTEX_RECURSIVE);
                   110029:     if( db->mutex==0 ){
                   110030:       sqlite3_free(db);
                   110031:       db = 0;
                   110032:       goto opendb_out;
                   110033:     }
                   110034:   }
                   110035:   sqlite3_mutex_enter(db->mutex);
                   110036:   db->errMask = 0xff;
                   110037:   db->nDb = 2;
                   110038:   db->magic = SQLITE_MAGIC_BUSY;
                   110039:   db->aDb = db->aDbStatic;
                   110040: 
                   110041:   assert( sizeof(db->aLimit)==sizeof(aHardLimit) );
                   110042:   memcpy(db->aLimit, aHardLimit, sizeof(db->aLimit));
                   110043:   db->autoCommit = 1;
                   110044:   db->nextAutovac = -1;
                   110045:   db->nextPagesize = 0;
                   110046:   db->flags |= SQLITE_ShortColNames | SQLITE_AutoIndex | SQLITE_EnableTrigger
                   110047: #if SQLITE_DEFAULT_FILE_FORMAT<4
                   110048:                  | SQLITE_LegacyFileFmt
                   110049: #endif
                   110050: #ifdef SQLITE_ENABLE_LOAD_EXTENSION
                   110051:                  | SQLITE_LoadExtension
                   110052: #endif
                   110053: #if SQLITE_DEFAULT_RECURSIVE_TRIGGERS
                   110054:                  | SQLITE_RecTriggers
                   110055: #endif
                   110056: #if defined(SQLITE_DEFAULT_FOREIGN_KEYS) && SQLITE_DEFAULT_FOREIGN_KEYS
                   110057:                  | SQLITE_ForeignKeys
                   110058: #endif
                   110059:       ;
                   110060:   sqlite3HashInit(&db->aCollSeq);
                   110061: #ifndef SQLITE_OMIT_VIRTUALTABLE
                   110062:   sqlite3HashInit(&db->aModule);
                   110063: #endif
                   110064: 
                   110065:   /* Add the default collation sequence BINARY. BINARY works for both UTF-8
                   110066:   ** and UTF-16, so add a version for each to avoid any unnecessary
                   110067:   ** conversions. The only error that can occur here is a malloc() failure.
                   110068:   */
                   110069:   createCollation(db, "BINARY", SQLITE_UTF8, SQLITE_COLL_BINARY, 0,
                   110070:                   binCollFunc, 0);
                   110071:   createCollation(db, "BINARY", SQLITE_UTF16BE, SQLITE_COLL_BINARY, 0,
                   110072:                   binCollFunc, 0);
                   110073:   createCollation(db, "BINARY", SQLITE_UTF16LE, SQLITE_COLL_BINARY, 0,
                   110074:                   binCollFunc, 0);
                   110075:   createCollation(db, "RTRIM", SQLITE_UTF8, SQLITE_COLL_USER, (void*)1,
                   110076:                   binCollFunc, 0);
                   110077:   if( db->mallocFailed ){
                   110078:     goto opendb_out;
                   110079:   }
                   110080:   db->pDfltColl = sqlite3FindCollSeq(db, SQLITE_UTF8, "BINARY", 0);
                   110081:   assert( db->pDfltColl!=0 );
                   110082: 
                   110083:   /* Also add a UTF-8 case-insensitive collation sequence. */
                   110084:   createCollation(db, "NOCASE", SQLITE_UTF8, SQLITE_COLL_NOCASE, 0,
                   110085:                   nocaseCollatingFunc, 0);
                   110086: 
                   110087:   /* Parse the filename/URI argument. */
                   110088:   db->openFlags = flags;
                   110089:   rc = sqlite3ParseUri(zVfs, zFilename, &flags, &db->pVfs, &zOpen, &zErrMsg);
                   110090:   if( rc!=SQLITE_OK ){
                   110091:     if( rc==SQLITE_NOMEM ) db->mallocFailed = 1;
                   110092:     sqlite3Error(db, rc, zErrMsg ? "%s" : 0, zErrMsg);
                   110093:     sqlite3_free(zErrMsg);
                   110094:     goto opendb_out;
                   110095:   }
                   110096: 
                   110097:   /* Open the backend database driver */
                   110098:   rc = sqlite3BtreeOpen(db->pVfs, zOpen, db, &db->aDb[0].pBt, 0,
                   110099:                         flags | SQLITE_OPEN_MAIN_DB);
                   110100:   if( rc!=SQLITE_OK ){
                   110101:     if( rc==SQLITE_IOERR_NOMEM ){
                   110102:       rc = SQLITE_NOMEM;
                   110103:     }
                   110104:     sqlite3Error(db, rc, 0);
                   110105:     goto opendb_out;
                   110106:   }
                   110107:   db->aDb[0].pSchema = sqlite3SchemaGet(db, db->aDb[0].pBt);
                   110108:   db->aDb[1].pSchema = sqlite3SchemaGet(db, 0);
                   110109: 
                   110110: 
                   110111:   /* The default safety_level for the main database is 'full'; for the temp
                   110112:   ** database it is 'NONE'. This matches the pager layer defaults.  
                   110113:   */
                   110114:   db->aDb[0].zName = "main";
                   110115:   db->aDb[0].safety_level = 3;
                   110116:   db->aDb[1].zName = "temp";
                   110117:   db->aDb[1].safety_level = 1;
                   110118: 
                   110119:   db->magic = SQLITE_MAGIC_OPEN;
                   110120:   if( db->mallocFailed ){
                   110121:     goto opendb_out;
                   110122:   }
                   110123: 
                   110124:   /* Register all built-in functions, but do not attempt to read the
                   110125:   ** database schema yet. This is delayed until the first time the database
                   110126:   ** is accessed.
                   110127:   */
                   110128:   sqlite3Error(db, SQLITE_OK, 0);
                   110129:   sqlite3RegisterBuiltinFunctions(db);
                   110130: 
                   110131:   /* Load automatic extensions - extensions that have been registered
                   110132:   ** using the sqlite3_automatic_extension() API.
                   110133:   */
                   110134:   sqlite3AutoLoadExtensions(db);
                   110135:   rc = sqlite3_errcode(db);
                   110136:   if( rc!=SQLITE_OK ){
                   110137:     goto opendb_out;
                   110138:   }
                   110139: 
                   110140: #ifdef SQLITE_ENABLE_FTS1
                   110141:   if( !db->mallocFailed ){
                   110142:     extern int sqlite3Fts1Init(sqlite3*);
                   110143:     rc = sqlite3Fts1Init(db);
                   110144:   }
                   110145: #endif
                   110146: 
                   110147: #ifdef SQLITE_ENABLE_FTS2
                   110148:   if( !db->mallocFailed && rc==SQLITE_OK ){
                   110149:     extern int sqlite3Fts2Init(sqlite3*);
                   110150:     rc = sqlite3Fts2Init(db);
                   110151:   }
                   110152: #endif
                   110153: 
                   110154: #ifdef SQLITE_ENABLE_FTS3
                   110155:   if( !db->mallocFailed && rc==SQLITE_OK ){
                   110156:     rc = sqlite3Fts3Init(db);
                   110157:   }
                   110158: #endif
                   110159: 
                   110160: #ifdef SQLITE_ENABLE_ICU
                   110161:   if( !db->mallocFailed && rc==SQLITE_OK ){
                   110162:     rc = sqlite3IcuInit(db);
                   110163:   }
                   110164: #endif
                   110165: 
                   110166: #ifdef SQLITE_ENABLE_RTREE
                   110167:   if( !db->mallocFailed && rc==SQLITE_OK){
                   110168:     rc = sqlite3RtreeInit(db);
                   110169:   }
                   110170: #endif
                   110171: 
                   110172:   sqlite3Error(db, rc, 0);
                   110173: 
                   110174:   /* -DSQLITE_DEFAULT_LOCKING_MODE=1 makes EXCLUSIVE the default locking
                   110175:   ** mode.  -DSQLITE_DEFAULT_LOCKING_MODE=0 make NORMAL the default locking
                   110176:   ** mode.  Doing nothing at all also makes NORMAL the default.
                   110177:   */
                   110178: #ifdef SQLITE_DEFAULT_LOCKING_MODE
                   110179:   db->dfltLockMode = SQLITE_DEFAULT_LOCKING_MODE;
                   110180:   sqlite3PagerLockingMode(sqlite3BtreePager(db->aDb[0].pBt),
                   110181:                           SQLITE_DEFAULT_LOCKING_MODE);
                   110182: #endif
                   110183: 
                   110184:   /* Enable the lookaside-malloc subsystem */
                   110185:   setupLookaside(db, 0, sqlite3GlobalConfig.szLookaside,
                   110186:                         sqlite3GlobalConfig.nLookaside);
                   110187: 
                   110188:   sqlite3_wal_autocheckpoint(db, SQLITE_DEFAULT_WAL_AUTOCHECKPOINT);
                   110189: 
                   110190: opendb_out:
                   110191:   sqlite3_free(zOpen);
                   110192:   if( db ){
                   110193:     assert( db->mutex!=0 || isThreadsafe==0 || sqlite3GlobalConfig.bFullMutex==0 );
                   110194:     sqlite3_mutex_leave(db->mutex);
                   110195:   }
                   110196:   rc = sqlite3_errcode(db);
                   110197:   if( rc==SQLITE_NOMEM ){
                   110198:     sqlite3_close(db);
                   110199:     db = 0;
                   110200:   }else if( rc!=SQLITE_OK ){
                   110201:     db->magic = SQLITE_MAGIC_SICK;
                   110202:   }
                   110203:   *ppDb = db;
                   110204:   return sqlite3ApiExit(0, rc);
                   110205: }
                   110206: 
                   110207: /*
                   110208: ** Open a new database handle.
                   110209: */
                   110210: SQLITE_API int sqlite3_open(
                   110211:   const char *zFilename, 
                   110212:   sqlite3 **ppDb 
                   110213: ){
                   110214:   return openDatabase(zFilename, ppDb,
                   110215:                       SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, 0);
                   110216: }
                   110217: SQLITE_API int sqlite3_open_v2(
                   110218:   const char *filename,   /* Database filename (UTF-8) */
                   110219:   sqlite3 **ppDb,         /* OUT: SQLite db handle */
                   110220:   int flags,              /* Flags */
                   110221:   const char *zVfs        /* Name of VFS module to use */
                   110222: ){
                   110223:   return openDatabase(filename, ppDb, (unsigned int)flags, zVfs);
                   110224: }
                   110225: 
                   110226: #ifndef SQLITE_OMIT_UTF16
                   110227: /*
                   110228: ** Open a new database handle.
                   110229: */
                   110230: SQLITE_API int sqlite3_open16(
                   110231:   const void *zFilename, 
                   110232:   sqlite3 **ppDb
                   110233: ){
                   110234:   char const *zFilename8;   /* zFilename encoded in UTF-8 instead of UTF-16 */
                   110235:   sqlite3_value *pVal;
                   110236:   int rc;
                   110237: 
                   110238:   assert( zFilename );
                   110239:   assert( ppDb );
                   110240:   *ppDb = 0;
                   110241: #ifndef SQLITE_OMIT_AUTOINIT
                   110242:   rc = sqlite3_initialize();
                   110243:   if( rc ) return rc;
                   110244: #endif
                   110245:   pVal = sqlite3ValueNew(0);
                   110246:   sqlite3ValueSetStr(pVal, -1, zFilename, SQLITE_UTF16NATIVE, SQLITE_STATIC);
                   110247:   zFilename8 = sqlite3ValueText(pVal, SQLITE_UTF8);
                   110248:   if( zFilename8 ){
                   110249:     rc = openDatabase(zFilename8, ppDb,
                   110250:                       SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, 0);
                   110251:     assert( *ppDb || rc==SQLITE_NOMEM );
                   110252:     if( rc==SQLITE_OK && !DbHasProperty(*ppDb, 0, DB_SchemaLoaded) ){
                   110253:       ENC(*ppDb) = SQLITE_UTF16NATIVE;
                   110254:     }
                   110255:   }else{
                   110256:     rc = SQLITE_NOMEM;
                   110257:   }
                   110258:   sqlite3ValueFree(pVal);
                   110259: 
                   110260:   return sqlite3ApiExit(0, rc);
                   110261: }
                   110262: #endif /* SQLITE_OMIT_UTF16 */
                   110263: 
                   110264: /*
                   110265: ** Register a new collation sequence with the database handle db.
                   110266: */
                   110267: SQLITE_API int sqlite3_create_collation(
                   110268:   sqlite3* db, 
                   110269:   const char *zName, 
                   110270:   int enc, 
                   110271:   void* pCtx,
                   110272:   int(*xCompare)(void*,int,const void*,int,const void*)
                   110273: ){
                   110274:   int rc;
                   110275:   sqlite3_mutex_enter(db->mutex);
                   110276:   assert( !db->mallocFailed );
                   110277:   rc = createCollation(db, zName, (u8)enc, SQLITE_COLL_USER, pCtx, xCompare, 0);
                   110278:   rc = sqlite3ApiExit(db, rc);
                   110279:   sqlite3_mutex_leave(db->mutex);
                   110280:   return rc;
                   110281: }
                   110282: 
                   110283: /*
                   110284: ** Register a new collation sequence with the database handle db.
                   110285: */
                   110286: SQLITE_API int sqlite3_create_collation_v2(
                   110287:   sqlite3* db, 
                   110288:   const char *zName, 
                   110289:   int enc, 
                   110290:   void* pCtx,
                   110291:   int(*xCompare)(void*,int,const void*,int,const void*),
                   110292:   void(*xDel)(void*)
                   110293: ){
                   110294:   int rc;
                   110295:   sqlite3_mutex_enter(db->mutex);
                   110296:   assert( !db->mallocFailed );
                   110297:   rc = createCollation(db, zName, (u8)enc, SQLITE_COLL_USER, pCtx, xCompare, xDel);
                   110298:   rc = sqlite3ApiExit(db, rc);
                   110299:   sqlite3_mutex_leave(db->mutex);
                   110300:   return rc;
                   110301: }
                   110302: 
                   110303: #ifndef SQLITE_OMIT_UTF16
                   110304: /*
                   110305: ** Register a new collation sequence with the database handle db.
                   110306: */
                   110307: SQLITE_API int sqlite3_create_collation16(
                   110308:   sqlite3* db, 
                   110309:   const void *zName,
                   110310:   int enc, 
                   110311:   void* pCtx,
                   110312:   int(*xCompare)(void*,int,const void*,int,const void*)
                   110313: ){
                   110314:   int rc = SQLITE_OK;
                   110315:   char *zName8;
                   110316:   sqlite3_mutex_enter(db->mutex);
                   110317:   assert( !db->mallocFailed );
                   110318:   zName8 = sqlite3Utf16to8(db, zName, -1, SQLITE_UTF16NATIVE);
                   110319:   if( zName8 ){
                   110320:     rc = createCollation(db, zName8, (u8)enc, SQLITE_COLL_USER, pCtx, xCompare, 0);
                   110321:     sqlite3DbFree(db, zName8);
                   110322:   }
                   110323:   rc = sqlite3ApiExit(db, rc);
                   110324:   sqlite3_mutex_leave(db->mutex);
                   110325:   return rc;
                   110326: }
                   110327: #endif /* SQLITE_OMIT_UTF16 */
                   110328: 
                   110329: /*
                   110330: ** Register a collation sequence factory callback with the database handle
                   110331: ** db. Replace any previously installed collation sequence factory.
                   110332: */
                   110333: SQLITE_API int sqlite3_collation_needed(
                   110334:   sqlite3 *db, 
                   110335:   void *pCollNeededArg, 
                   110336:   void(*xCollNeeded)(void*,sqlite3*,int eTextRep,const char*)
                   110337: ){
                   110338:   sqlite3_mutex_enter(db->mutex);
                   110339:   db->xCollNeeded = xCollNeeded;
                   110340:   db->xCollNeeded16 = 0;
                   110341:   db->pCollNeededArg = pCollNeededArg;
                   110342:   sqlite3_mutex_leave(db->mutex);
                   110343:   return SQLITE_OK;
                   110344: }
                   110345: 
                   110346: #ifndef SQLITE_OMIT_UTF16
                   110347: /*
                   110348: ** Register a collation sequence factory callback with the database handle
                   110349: ** db. Replace any previously installed collation sequence factory.
                   110350: */
                   110351: SQLITE_API int sqlite3_collation_needed16(
                   110352:   sqlite3 *db, 
                   110353:   void *pCollNeededArg, 
                   110354:   void(*xCollNeeded16)(void*,sqlite3*,int eTextRep,const void*)
                   110355: ){
                   110356:   sqlite3_mutex_enter(db->mutex);
                   110357:   db->xCollNeeded = 0;
                   110358:   db->xCollNeeded16 = xCollNeeded16;
                   110359:   db->pCollNeededArg = pCollNeededArg;
                   110360:   sqlite3_mutex_leave(db->mutex);
                   110361:   return SQLITE_OK;
                   110362: }
                   110363: #endif /* SQLITE_OMIT_UTF16 */
                   110364: 
                   110365: #ifndef SQLITE_OMIT_DEPRECATED
                   110366: /*
                   110367: ** This function is now an anachronism. It used to be used to recover from a
                   110368: ** malloc() failure, but SQLite now does this automatically.
                   110369: */
                   110370: SQLITE_API int sqlite3_global_recover(void){
                   110371:   return SQLITE_OK;
                   110372: }
                   110373: #endif
                   110374: 
                   110375: /*
                   110376: ** Test to see whether or not the database connection is in autocommit
                   110377: ** mode.  Return TRUE if it is and FALSE if not.  Autocommit mode is on
                   110378: ** by default.  Autocommit is disabled by a BEGIN statement and reenabled
                   110379: ** by the next COMMIT or ROLLBACK.
                   110380: **
                   110381: ******* THIS IS AN EXPERIMENTAL API AND IS SUBJECT TO CHANGE ******
                   110382: */
                   110383: SQLITE_API int sqlite3_get_autocommit(sqlite3 *db){
                   110384:   return db->autoCommit;
                   110385: }
                   110386: 
                   110387: /*
                   110388: ** The following routines are subtitutes for constants SQLITE_CORRUPT,
                   110389: ** SQLITE_MISUSE, SQLITE_CANTOPEN, SQLITE_IOERR and possibly other error
                   110390: ** constants.  They server two purposes:
                   110391: **
                   110392: **   1.  Serve as a convenient place to set a breakpoint in a debugger
                   110393: **       to detect when version error conditions occurs.
                   110394: **
                   110395: **   2.  Invoke sqlite3_log() to provide the source code location where
                   110396: **       a low-level error is first detected.
                   110397: */
                   110398: SQLITE_PRIVATE int sqlite3CorruptError(int lineno){
                   110399:   testcase( sqlite3GlobalConfig.xLog!=0 );
                   110400:   sqlite3_log(SQLITE_CORRUPT,
                   110401:               "database corruption at line %d of [%.10s]",
                   110402:               lineno, 20+sqlite3_sourceid());
                   110403:   return SQLITE_CORRUPT;
                   110404: }
                   110405: SQLITE_PRIVATE int sqlite3MisuseError(int lineno){
                   110406:   testcase( sqlite3GlobalConfig.xLog!=0 );
                   110407:   sqlite3_log(SQLITE_MISUSE, 
                   110408:               "misuse at line %d of [%.10s]",
                   110409:               lineno, 20+sqlite3_sourceid());
                   110410:   return SQLITE_MISUSE;
                   110411: }
                   110412: SQLITE_PRIVATE int sqlite3CantopenError(int lineno){
                   110413:   testcase( sqlite3GlobalConfig.xLog!=0 );
                   110414:   sqlite3_log(SQLITE_CANTOPEN, 
                   110415:               "cannot open file at line %d of [%.10s]",
                   110416:               lineno, 20+sqlite3_sourceid());
                   110417:   return SQLITE_CANTOPEN;
                   110418: }
                   110419: 
                   110420: 
                   110421: #ifndef SQLITE_OMIT_DEPRECATED
                   110422: /*
                   110423: ** This is a convenience routine that makes sure that all thread-specific
                   110424: ** data for this thread has been deallocated.
                   110425: **
                   110426: ** SQLite no longer uses thread-specific data so this routine is now a
                   110427: ** no-op.  It is retained for historical compatibility.
                   110428: */
                   110429: SQLITE_API void sqlite3_thread_cleanup(void){
                   110430: }
                   110431: #endif
                   110432: 
                   110433: /*
                   110434: ** Return meta information about a specific column of a database table.
                   110435: ** See comment in sqlite3.h (sqlite.h.in) for details.
                   110436: */
                   110437: #ifdef SQLITE_ENABLE_COLUMN_METADATA
                   110438: SQLITE_API int sqlite3_table_column_metadata(
                   110439:   sqlite3 *db,                /* Connection handle */
                   110440:   const char *zDbName,        /* Database name or NULL */
                   110441:   const char *zTableName,     /* Table name */
                   110442:   const char *zColumnName,    /* Column name */
                   110443:   char const **pzDataType,    /* OUTPUT: Declared data type */
                   110444:   char const **pzCollSeq,     /* OUTPUT: Collation sequence name */
                   110445:   int *pNotNull,              /* OUTPUT: True if NOT NULL constraint exists */
                   110446:   int *pPrimaryKey,           /* OUTPUT: True if column part of PK */
                   110447:   int *pAutoinc               /* OUTPUT: True if column is auto-increment */
                   110448: ){
                   110449:   int rc;
                   110450:   char *zErrMsg = 0;
                   110451:   Table *pTab = 0;
                   110452:   Column *pCol = 0;
                   110453:   int iCol;
                   110454: 
                   110455:   char const *zDataType = 0;
                   110456:   char const *zCollSeq = 0;
                   110457:   int notnull = 0;
                   110458:   int primarykey = 0;
                   110459:   int autoinc = 0;
                   110460: 
                   110461:   /* Ensure the database schema has been loaded */
                   110462:   sqlite3_mutex_enter(db->mutex);
                   110463:   sqlite3BtreeEnterAll(db);
                   110464:   rc = sqlite3Init(db, &zErrMsg);
                   110465:   if( SQLITE_OK!=rc ){
                   110466:     goto error_out;
                   110467:   }
                   110468: 
                   110469:   /* Locate the table in question */
                   110470:   pTab = sqlite3FindTable(db, zTableName, zDbName);
                   110471:   if( !pTab || pTab->pSelect ){
                   110472:     pTab = 0;
                   110473:     goto error_out;
                   110474:   }
                   110475: 
                   110476:   /* Find the column for which info is requested */
                   110477:   if( sqlite3IsRowid(zColumnName) ){
                   110478:     iCol = pTab->iPKey;
                   110479:     if( iCol>=0 ){
                   110480:       pCol = &pTab->aCol[iCol];
                   110481:     }
                   110482:   }else{
                   110483:     for(iCol=0; iCol<pTab->nCol; iCol++){
                   110484:       pCol = &pTab->aCol[iCol];
                   110485:       if( 0==sqlite3StrICmp(pCol->zName, zColumnName) ){
                   110486:         break;
                   110487:       }
                   110488:     }
                   110489:     if( iCol==pTab->nCol ){
                   110490:       pTab = 0;
                   110491:       goto error_out;
                   110492:     }
                   110493:   }
                   110494: 
                   110495:   /* The following block stores the meta information that will be returned
                   110496:   ** to the caller in local variables zDataType, zCollSeq, notnull, primarykey
                   110497:   ** and autoinc. At this point there are two possibilities:
                   110498:   ** 
                   110499:   **     1. The specified column name was rowid", "oid" or "_rowid_" 
                   110500:   **        and there is no explicitly declared IPK column. 
                   110501:   **
                   110502:   **     2. The table is not a view and the column name identified an 
                   110503:   **        explicitly declared column. Copy meta information from *pCol.
                   110504:   */ 
                   110505:   if( pCol ){
                   110506:     zDataType = pCol->zType;
                   110507:     zCollSeq = pCol->zColl;
                   110508:     notnull = pCol->notNull!=0;
                   110509:     primarykey  = pCol->isPrimKey!=0;
                   110510:     autoinc = pTab->iPKey==iCol && (pTab->tabFlags & TF_Autoincrement)!=0;
                   110511:   }else{
                   110512:     zDataType = "INTEGER";
                   110513:     primarykey = 1;
                   110514:   }
                   110515:   if( !zCollSeq ){
                   110516:     zCollSeq = "BINARY";
                   110517:   }
                   110518: 
                   110519: error_out:
                   110520:   sqlite3BtreeLeaveAll(db);
                   110521: 
                   110522:   /* Whether the function call succeeded or failed, set the output parameters
                   110523:   ** to whatever their local counterparts contain. If an error did occur,
                   110524:   ** this has the effect of zeroing all output parameters.
                   110525:   */
                   110526:   if( pzDataType ) *pzDataType = zDataType;
                   110527:   if( pzCollSeq ) *pzCollSeq = zCollSeq;
                   110528:   if( pNotNull ) *pNotNull = notnull;
                   110529:   if( pPrimaryKey ) *pPrimaryKey = primarykey;
                   110530:   if( pAutoinc ) *pAutoinc = autoinc;
                   110531: 
                   110532:   if( SQLITE_OK==rc && !pTab ){
                   110533:     sqlite3DbFree(db, zErrMsg);
                   110534:     zErrMsg = sqlite3MPrintf(db, "no such table column: %s.%s", zTableName,
                   110535:         zColumnName);
                   110536:     rc = SQLITE_ERROR;
                   110537:   }
                   110538:   sqlite3Error(db, rc, (zErrMsg?"%s":0), zErrMsg);
                   110539:   sqlite3DbFree(db, zErrMsg);
                   110540:   rc = sqlite3ApiExit(db, rc);
                   110541:   sqlite3_mutex_leave(db->mutex);
                   110542:   return rc;
                   110543: }
                   110544: #endif
                   110545: 
                   110546: /*
                   110547: ** Sleep for a little while.  Return the amount of time slept.
                   110548: */
                   110549: SQLITE_API int sqlite3_sleep(int ms){
                   110550:   sqlite3_vfs *pVfs;
                   110551:   int rc;
                   110552:   pVfs = sqlite3_vfs_find(0);
                   110553:   if( pVfs==0 ) return 0;
                   110554: 
                   110555:   /* This function works in milliseconds, but the underlying OsSleep() 
                   110556:   ** API uses microseconds. Hence the 1000's.
                   110557:   */
                   110558:   rc = (sqlite3OsSleep(pVfs, 1000*ms)/1000);
                   110559:   return rc;
                   110560: }
                   110561: 
                   110562: /*
                   110563: ** Enable or disable the extended result codes.
                   110564: */
                   110565: SQLITE_API int sqlite3_extended_result_codes(sqlite3 *db, int onoff){
                   110566:   sqlite3_mutex_enter(db->mutex);
                   110567:   db->errMask = onoff ? 0xffffffff : 0xff;
                   110568:   sqlite3_mutex_leave(db->mutex);
                   110569:   return SQLITE_OK;
                   110570: }
                   110571: 
                   110572: /*
                   110573: ** Invoke the xFileControl method on a particular database.
                   110574: */
                   110575: SQLITE_API int sqlite3_file_control(sqlite3 *db, const char *zDbName, int op, void *pArg){
                   110576:   int rc = SQLITE_ERROR;
                   110577:   int iDb;
                   110578:   sqlite3_mutex_enter(db->mutex);
                   110579:   if( zDbName==0 ){
                   110580:     iDb = 0;
                   110581:   }else{
                   110582:     for(iDb=0; iDb<db->nDb; iDb++){
                   110583:       if( strcmp(db->aDb[iDb].zName, zDbName)==0 ) break;
                   110584:     }
                   110585:   }
                   110586:   if( iDb<db->nDb ){
                   110587:     Btree *pBtree = db->aDb[iDb].pBt;
                   110588:     if( pBtree ){
                   110589:       Pager *pPager;
                   110590:       sqlite3_file *fd;
                   110591:       sqlite3BtreeEnter(pBtree);
                   110592:       pPager = sqlite3BtreePager(pBtree);
                   110593:       assert( pPager!=0 );
                   110594:       fd = sqlite3PagerFile(pPager);
                   110595:       assert( fd!=0 );
                   110596:       if( op==SQLITE_FCNTL_FILE_POINTER ){
                   110597:         *(sqlite3_file**)pArg = fd;
                   110598:         rc = SQLITE_OK;
                   110599:       }else if( fd->pMethods ){
                   110600:         rc = sqlite3OsFileControl(fd, op, pArg);
                   110601:       }else{
                   110602:         rc = SQLITE_NOTFOUND;
                   110603:       }
                   110604:       sqlite3BtreeLeave(pBtree);
                   110605:     }
                   110606:   }
                   110607:   sqlite3_mutex_leave(db->mutex);
                   110608:   return rc;   
                   110609: }
                   110610: 
                   110611: /*
                   110612: ** Interface to the testing logic.
                   110613: */
                   110614: SQLITE_API int sqlite3_test_control(int op, ...){
                   110615:   int rc = 0;
                   110616: #ifndef SQLITE_OMIT_BUILTIN_TEST
                   110617:   va_list ap;
                   110618:   va_start(ap, op);
                   110619:   switch( op ){
                   110620: 
                   110621:     /*
                   110622:     ** Save the current state of the PRNG.
                   110623:     */
                   110624:     case SQLITE_TESTCTRL_PRNG_SAVE: {
                   110625:       sqlite3PrngSaveState();
                   110626:       break;
                   110627:     }
                   110628: 
                   110629:     /*
                   110630:     ** Restore the state of the PRNG to the last state saved using
                   110631:     ** PRNG_SAVE.  If PRNG_SAVE has never before been called, then
                   110632:     ** this verb acts like PRNG_RESET.
                   110633:     */
                   110634:     case SQLITE_TESTCTRL_PRNG_RESTORE: {
                   110635:       sqlite3PrngRestoreState();
                   110636:       break;
                   110637:     }
                   110638: 
                   110639:     /*
                   110640:     ** Reset the PRNG back to its uninitialized state.  The next call
                   110641:     ** to sqlite3_randomness() will reseed the PRNG using a single call
                   110642:     ** to the xRandomness method of the default VFS.
                   110643:     */
                   110644:     case SQLITE_TESTCTRL_PRNG_RESET: {
                   110645:       sqlite3PrngResetState();
                   110646:       break;
                   110647:     }
                   110648: 
                   110649:     /*
                   110650:     **  sqlite3_test_control(BITVEC_TEST, size, program)
                   110651:     **
                   110652:     ** Run a test against a Bitvec object of size.  The program argument
                   110653:     ** is an array of integers that defines the test.  Return -1 on a
                   110654:     ** memory allocation error, 0 on success, or non-zero for an error.
                   110655:     ** See the sqlite3BitvecBuiltinTest() for additional information.
                   110656:     */
                   110657:     case SQLITE_TESTCTRL_BITVEC_TEST: {
                   110658:       int sz = va_arg(ap, int);
                   110659:       int *aProg = va_arg(ap, int*);
                   110660:       rc = sqlite3BitvecBuiltinTest(sz, aProg);
                   110661:       break;
                   110662:     }
                   110663: 
                   110664:     /*
                   110665:     **  sqlite3_test_control(BENIGN_MALLOC_HOOKS, xBegin, xEnd)
                   110666:     **
                   110667:     ** Register hooks to call to indicate which malloc() failures 
                   110668:     ** are benign.
                   110669:     */
                   110670:     case SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS: {
                   110671:       typedef void (*void_function)(void);
                   110672:       void_function xBenignBegin;
                   110673:       void_function xBenignEnd;
                   110674:       xBenignBegin = va_arg(ap, void_function);
                   110675:       xBenignEnd = va_arg(ap, void_function);
                   110676:       sqlite3BenignMallocHooks(xBenignBegin, xBenignEnd);
                   110677:       break;
                   110678:     }
                   110679: 
                   110680:     /*
                   110681:     **  sqlite3_test_control(SQLITE_TESTCTRL_PENDING_BYTE, unsigned int X)
                   110682:     **
                   110683:     ** Set the PENDING byte to the value in the argument, if X>0.
                   110684:     ** Make no changes if X==0.  Return the value of the pending byte
                   110685:     ** as it existing before this routine was called.
                   110686:     **
                   110687:     ** IMPORTANT:  Changing the PENDING byte from 0x40000000 results in
                   110688:     ** an incompatible database file format.  Changing the PENDING byte
                   110689:     ** while any database connection is open results in undefined and
                   110690:     ** dileterious behavior.
                   110691:     */
                   110692:     case SQLITE_TESTCTRL_PENDING_BYTE: {
                   110693:       rc = PENDING_BYTE;
                   110694: #ifndef SQLITE_OMIT_WSD
                   110695:       {
                   110696:         unsigned int newVal = va_arg(ap, unsigned int);
                   110697:         if( newVal ) sqlite3PendingByte = newVal;
                   110698:       }
                   110699: #endif
                   110700:       break;
                   110701:     }
                   110702: 
                   110703:     /*
                   110704:     **  sqlite3_test_control(SQLITE_TESTCTRL_ASSERT, int X)
                   110705:     **
                   110706:     ** This action provides a run-time test to see whether or not
                   110707:     ** assert() was enabled at compile-time.  If X is true and assert()
                   110708:     ** is enabled, then the return value is true.  If X is true and
                   110709:     ** assert() is disabled, then the return value is zero.  If X is
                   110710:     ** false and assert() is enabled, then the assertion fires and the
                   110711:     ** process aborts.  If X is false and assert() is disabled, then the
                   110712:     ** return value is zero.
                   110713:     */
                   110714:     case SQLITE_TESTCTRL_ASSERT: {
                   110715:       volatile int x = 0;
                   110716:       assert( (x = va_arg(ap,int))!=0 );
                   110717:       rc = x;
                   110718:       break;
                   110719:     }
                   110720: 
                   110721: 
                   110722:     /*
                   110723:     **  sqlite3_test_control(SQLITE_TESTCTRL_ALWAYS, int X)
                   110724:     **
                   110725:     ** This action provides a run-time test to see how the ALWAYS and
                   110726:     ** NEVER macros were defined at compile-time.
                   110727:     **
                   110728:     ** The return value is ALWAYS(X).  
                   110729:     **
                   110730:     ** The recommended test is X==2.  If the return value is 2, that means
                   110731:     ** ALWAYS() and NEVER() are both no-op pass-through macros, which is the
                   110732:     ** default setting.  If the return value is 1, then ALWAYS() is either
                   110733:     ** hard-coded to true or else it asserts if its argument is false.
                   110734:     ** The first behavior (hard-coded to true) is the case if
                   110735:     ** SQLITE_TESTCTRL_ASSERT shows that assert() is disabled and the second
                   110736:     ** behavior (assert if the argument to ALWAYS() is false) is the case if
                   110737:     ** SQLITE_TESTCTRL_ASSERT shows that assert() is enabled.
                   110738:     **
                   110739:     ** The run-time test procedure might look something like this:
                   110740:     **
                   110741:     **    if( sqlite3_test_control(SQLITE_TESTCTRL_ALWAYS, 2)==2 ){
                   110742:     **      // ALWAYS() and NEVER() are no-op pass-through macros
                   110743:     **    }else if( sqlite3_test_control(SQLITE_TESTCTRL_ASSERT, 1) ){
                   110744:     **      // ALWAYS(x) asserts that x is true. NEVER(x) asserts x is false.
                   110745:     **    }else{
                   110746:     **      // ALWAYS(x) is a constant 1.  NEVER(x) is a constant 0.
                   110747:     **    }
                   110748:     */
                   110749:     case SQLITE_TESTCTRL_ALWAYS: {
                   110750:       int x = va_arg(ap,int);
                   110751:       rc = ALWAYS(x);
                   110752:       break;
                   110753:     }
                   110754: 
                   110755:     /*   sqlite3_test_control(SQLITE_TESTCTRL_RESERVE, sqlite3 *db, int N)
                   110756:     **
                   110757:     ** Set the nReserve size to N for the main database on the database
                   110758:     ** connection db.
                   110759:     */
                   110760:     case SQLITE_TESTCTRL_RESERVE: {
                   110761:       sqlite3 *db = va_arg(ap, sqlite3*);
                   110762:       int x = va_arg(ap,int);
                   110763:       sqlite3_mutex_enter(db->mutex);
                   110764:       sqlite3BtreeSetPageSize(db->aDb[0].pBt, 0, x, 0);
                   110765:       sqlite3_mutex_leave(db->mutex);
                   110766:       break;
                   110767:     }
                   110768: 
                   110769:     /*  sqlite3_test_control(SQLITE_TESTCTRL_OPTIMIZATIONS, sqlite3 *db, int N)
                   110770:     **
                   110771:     ** Enable or disable various optimizations for testing purposes.  The 
                   110772:     ** argument N is a bitmask of optimizations to be disabled.  For normal
                   110773:     ** operation N should be 0.  The idea is that a test program (like the
                   110774:     ** SQL Logic Test or SLT test module) can run the same SQL multiple times
                   110775:     ** with various optimizations disabled to verify that the same answer
                   110776:     ** is obtained in every case.
                   110777:     */
                   110778:     case SQLITE_TESTCTRL_OPTIMIZATIONS: {
                   110779:       sqlite3 *db = va_arg(ap, sqlite3*);
                   110780:       int x = va_arg(ap,int);
                   110781:       db->flags = (x & SQLITE_OptMask) | (db->flags & ~SQLITE_OptMask);
                   110782:       break;
                   110783:     }
                   110784: 
                   110785: #ifdef SQLITE_N_KEYWORD
                   110786:     /* sqlite3_test_control(SQLITE_TESTCTRL_ISKEYWORD, const char *zWord)
                   110787:     **
                   110788:     ** If zWord is a keyword recognized by the parser, then return the
                   110789:     ** number of keywords.  Or if zWord is not a keyword, return 0.
                   110790:     ** 
                   110791:     ** This test feature is only available in the amalgamation since
                   110792:     ** the SQLITE_N_KEYWORD macro is not defined in this file if SQLite
                   110793:     ** is built using separate source files.
                   110794:     */
                   110795:     case SQLITE_TESTCTRL_ISKEYWORD: {
                   110796:       const char *zWord = va_arg(ap, const char*);
                   110797:       int n = sqlite3Strlen30(zWord);
                   110798:       rc = (sqlite3KeywordCode((u8*)zWord, n)!=TK_ID) ? SQLITE_N_KEYWORD : 0;
                   110799:       break;
                   110800:     }
                   110801: #endif 
                   110802: 
                   110803:     /* sqlite3_test_control(SQLITE_TESTCTRL_PGHDRSZ)
                   110804:     **
                   110805:     ** Return the size of a pcache header in bytes.
                   110806:     */
                   110807:     case SQLITE_TESTCTRL_PGHDRSZ: {
                   110808:       rc = sizeof(PgHdr);
                   110809:       break;
                   110810:     }
                   110811: 
                   110812:     /* sqlite3_test_control(SQLITE_TESTCTRL_SCRATCHMALLOC, sz, &pNew, pFree);
                   110813:     **
                   110814:     ** Pass pFree into sqlite3ScratchFree(). 
                   110815:     ** If sz>0 then allocate a scratch buffer into pNew.  
                   110816:     */
                   110817:     case SQLITE_TESTCTRL_SCRATCHMALLOC: {
                   110818:       void *pFree, **ppNew;
                   110819:       int sz;
                   110820:       sz = va_arg(ap, int);
                   110821:       ppNew = va_arg(ap, void**);
                   110822:       pFree = va_arg(ap, void*);
                   110823:       if( sz ) *ppNew = sqlite3ScratchMalloc(sz);
                   110824:       sqlite3ScratchFree(pFree);
                   110825:       break;
                   110826:     }
                   110827: 
                   110828:     /*   sqlite3_test_control(SQLITE_TESTCTRL_LOCALTIME_FAULT, int onoff);
                   110829:     **
                   110830:     ** If parameter onoff is non-zero, configure the wrappers so that all
                   110831:     ** subsequent calls to localtime() and variants fail. If onoff is zero,
                   110832:     ** undo this setting.
                   110833:     */
                   110834:     case SQLITE_TESTCTRL_LOCALTIME_FAULT: {
                   110835:       sqlite3GlobalConfig.bLocaltimeFault = va_arg(ap, int);
                   110836:       break;
                   110837:     }
                   110838: 
                   110839:   }
                   110840:   va_end(ap);
                   110841: #endif /* SQLITE_OMIT_BUILTIN_TEST */
                   110842:   return rc;
                   110843: }
                   110844: 
                   110845: /*
                   110846: ** This is a utility routine, useful to VFS implementations, that checks
                   110847: ** to see if a database file was a URI that contained a specific query 
                   110848: ** parameter, and if so obtains the value of the query parameter.
                   110849: **
                   110850: ** The zFilename argument is the filename pointer passed into the xOpen()
                   110851: ** method of a VFS implementation.  The zParam argument is the name of the
                   110852: ** query parameter we seek.  This routine returns the value of the zParam
                   110853: ** parameter if it exists.  If the parameter does not exist, this routine
                   110854: ** returns a NULL pointer.
                   110855: */
                   110856: SQLITE_API const char *sqlite3_uri_parameter(const char *zFilename, const char *zParam){
                   110857:   zFilename += sqlite3Strlen30(zFilename) + 1;
                   110858:   while( zFilename[0] ){
                   110859:     int x = strcmp(zFilename, zParam);
                   110860:     zFilename += sqlite3Strlen30(zFilename) + 1;
                   110861:     if( x==0 ) return zFilename;
                   110862:     zFilename += sqlite3Strlen30(zFilename) + 1;
                   110863:   }
                   110864:   return 0;
                   110865: }
                   110866: 
                   110867: /************** End of main.c ************************************************/
                   110868: /************** Begin file notify.c ******************************************/
                   110869: /*
                   110870: ** 2009 March 3
                   110871: **
                   110872: ** The author disclaims copyright to this source code.  In place of
                   110873: ** a legal notice, here is a blessing:
                   110874: **
                   110875: **    May you do good and not evil.
                   110876: **    May you find forgiveness for yourself and forgive others.
                   110877: **    May you share freely, never taking more than you give.
                   110878: **
                   110879: *************************************************************************
                   110880: **
                   110881: ** This file contains the implementation of the sqlite3_unlock_notify()
                   110882: ** API method and its associated functionality.
                   110883: */
                   110884: 
                   110885: /* Omit this entire file if SQLITE_ENABLE_UNLOCK_NOTIFY is not defined. */
                   110886: #ifdef SQLITE_ENABLE_UNLOCK_NOTIFY
                   110887: 
                   110888: /*
                   110889: ** Public interfaces:
                   110890: **
                   110891: **   sqlite3ConnectionBlocked()
                   110892: **   sqlite3ConnectionUnlocked()
                   110893: **   sqlite3ConnectionClosed()
                   110894: **   sqlite3_unlock_notify()
                   110895: */
                   110896: 
                   110897: #define assertMutexHeld() \
                   110898:   assert( sqlite3_mutex_held(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER)) )
                   110899: 
                   110900: /*
                   110901: ** Head of a linked list of all sqlite3 objects created by this process
                   110902: ** for which either sqlite3.pBlockingConnection or sqlite3.pUnlockConnection
                   110903: ** is not NULL. This variable may only accessed while the STATIC_MASTER
                   110904: ** mutex is held.
                   110905: */
                   110906: static sqlite3 *SQLITE_WSD sqlite3BlockedList = 0;
                   110907: 
                   110908: #ifndef NDEBUG
                   110909: /*
                   110910: ** This function is a complex assert() that verifies the following 
                   110911: ** properties of the blocked connections list:
                   110912: **
                   110913: **   1) Each entry in the list has a non-NULL value for either 
                   110914: **      pUnlockConnection or pBlockingConnection, or both.
                   110915: **
                   110916: **   2) All entries in the list that share a common value for 
                   110917: **      xUnlockNotify are grouped together.
                   110918: **
                   110919: **   3) If the argument db is not NULL, then none of the entries in the
                   110920: **      blocked connections list have pUnlockConnection or pBlockingConnection
                   110921: **      set to db. This is used when closing connection db.
                   110922: */
                   110923: static void checkListProperties(sqlite3 *db){
                   110924:   sqlite3 *p;
                   110925:   for(p=sqlite3BlockedList; p; p=p->pNextBlocked){
                   110926:     int seen = 0;
                   110927:     sqlite3 *p2;
                   110928: 
                   110929:     /* Verify property (1) */
                   110930:     assert( p->pUnlockConnection || p->pBlockingConnection );
                   110931: 
                   110932:     /* Verify property (2) */
                   110933:     for(p2=sqlite3BlockedList; p2!=p; p2=p2->pNextBlocked){
                   110934:       if( p2->xUnlockNotify==p->xUnlockNotify ) seen = 1;
                   110935:       assert( p2->xUnlockNotify==p->xUnlockNotify || !seen );
                   110936:       assert( db==0 || p->pUnlockConnection!=db );
                   110937:       assert( db==0 || p->pBlockingConnection!=db );
                   110938:     }
                   110939:   }
                   110940: }
                   110941: #else
                   110942: # define checkListProperties(x)
                   110943: #endif
                   110944: 
                   110945: /*
                   110946: ** Remove connection db from the blocked connections list. If connection
                   110947: ** db is not currently a part of the list, this function is a no-op.
                   110948: */
                   110949: static void removeFromBlockedList(sqlite3 *db){
                   110950:   sqlite3 **pp;
                   110951:   assertMutexHeld();
                   110952:   for(pp=&sqlite3BlockedList; *pp; pp = &(*pp)->pNextBlocked){
                   110953:     if( *pp==db ){
                   110954:       *pp = (*pp)->pNextBlocked;
                   110955:       break;
                   110956:     }
                   110957:   }
                   110958: }
                   110959: 
                   110960: /*
                   110961: ** Add connection db to the blocked connections list. It is assumed
                   110962: ** that it is not already a part of the list.
                   110963: */
                   110964: static void addToBlockedList(sqlite3 *db){
                   110965:   sqlite3 **pp;
                   110966:   assertMutexHeld();
                   110967:   for(
                   110968:     pp=&sqlite3BlockedList; 
                   110969:     *pp && (*pp)->xUnlockNotify!=db->xUnlockNotify; 
                   110970:     pp=&(*pp)->pNextBlocked
                   110971:   );
                   110972:   db->pNextBlocked = *pp;
                   110973:   *pp = db;
                   110974: }
                   110975: 
                   110976: /*
                   110977: ** Obtain the STATIC_MASTER mutex.
                   110978: */
                   110979: static void enterMutex(void){
                   110980:   sqlite3_mutex_enter(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER));
                   110981:   checkListProperties(0);
                   110982: }
                   110983: 
                   110984: /*
                   110985: ** Release the STATIC_MASTER mutex.
                   110986: */
                   110987: static void leaveMutex(void){
                   110988:   assertMutexHeld();
                   110989:   checkListProperties(0);
                   110990:   sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER));
                   110991: }
                   110992: 
                   110993: /*
                   110994: ** Register an unlock-notify callback.
                   110995: **
                   110996: ** This is called after connection "db" has attempted some operation
                   110997: ** but has received an SQLITE_LOCKED error because another connection
                   110998: ** (call it pOther) in the same process was busy using the same shared
                   110999: ** cache.  pOther is found by looking at db->pBlockingConnection.
                   111000: **
                   111001: ** If there is no blocking connection, the callback is invoked immediately,
                   111002: ** before this routine returns.
                   111003: **
                   111004: ** If pOther is already blocked on db, then report SQLITE_LOCKED, to indicate
                   111005: ** a deadlock.
                   111006: **
                   111007: ** Otherwise, make arrangements to invoke xNotify when pOther drops
                   111008: ** its locks.
                   111009: **
                   111010: ** Each call to this routine overrides any prior callbacks registered
                   111011: ** on the same "db".  If xNotify==0 then any prior callbacks are immediately
                   111012: ** cancelled.
                   111013: */
                   111014: SQLITE_API int sqlite3_unlock_notify(
                   111015:   sqlite3 *db,
                   111016:   void (*xNotify)(void **, int),
                   111017:   void *pArg
                   111018: ){
                   111019:   int rc = SQLITE_OK;
                   111020: 
                   111021:   sqlite3_mutex_enter(db->mutex);
                   111022:   enterMutex();
                   111023: 
                   111024:   if( xNotify==0 ){
                   111025:     removeFromBlockedList(db);
                   111026:     db->pBlockingConnection = 0;
                   111027:     db->pUnlockConnection = 0;
                   111028:     db->xUnlockNotify = 0;
                   111029:     db->pUnlockArg = 0;
                   111030:   }else if( 0==db->pBlockingConnection ){
                   111031:     /* The blocking transaction has been concluded. Or there never was a 
                   111032:     ** blocking transaction. In either case, invoke the notify callback
                   111033:     ** immediately. 
                   111034:     */
                   111035:     xNotify(&pArg, 1);
                   111036:   }else{
                   111037:     sqlite3 *p;
                   111038: 
                   111039:     for(p=db->pBlockingConnection; p && p!=db; p=p->pUnlockConnection){}
                   111040:     if( p ){
                   111041:       rc = SQLITE_LOCKED;              /* Deadlock detected. */
                   111042:     }else{
                   111043:       db->pUnlockConnection = db->pBlockingConnection;
                   111044:       db->xUnlockNotify = xNotify;
                   111045:       db->pUnlockArg = pArg;
                   111046:       removeFromBlockedList(db);
                   111047:       addToBlockedList(db);
                   111048:     }
                   111049:   }
                   111050: 
                   111051:   leaveMutex();
                   111052:   assert( !db->mallocFailed );
                   111053:   sqlite3Error(db, rc, (rc?"database is deadlocked":0));
                   111054:   sqlite3_mutex_leave(db->mutex);
                   111055:   return rc;
                   111056: }
                   111057: 
                   111058: /*
                   111059: ** This function is called while stepping or preparing a statement 
                   111060: ** associated with connection db. The operation will return SQLITE_LOCKED
                   111061: ** to the user because it requires a lock that will not be available
                   111062: ** until connection pBlocker concludes its current transaction.
                   111063: */
                   111064: SQLITE_PRIVATE void sqlite3ConnectionBlocked(sqlite3 *db, sqlite3 *pBlocker){
                   111065:   enterMutex();
                   111066:   if( db->pBlockingConnection==0 && db->pUnlockConnection==0 ){
                   111067:     addToBlockedList(db);
                   111068:   }
                   111069:   db->pBlockingConnection = pBlocker;
                   111070:   leaveMutex();
                   111071: }
                   111072: 
                   111073: /*
                   111074: ** This function is called when
                   111075: ** the transaction opened by database db has just finished. Locks held 
                   111076: ** by database connection db have been released.
                   111077: **
                   111078: ** This function loops through each entry in the blocked connections
                   111079: ** list and does the following:
                   111080: **
                   111081: **   1) If the sqlite3.pBlockingConnection member of a list entry is
                   111082: **      set to db, then set pBlockingConnection=0.
                   111083: **
                   111084: **   2) If the sqlite3.pUnlockConnection member of a list entry is
                   111085: **      set to db, then invoke the configured unlock-notify callback and
                   111086: **      set pUnlockConnection=0.
                   111087: **
                   111088: **   3) If the two steps above mean that pBlockingConnection==0 and
                   111089: **      pUnlockConnection==0, remove the entry from the blocked connections
                   111090: **      list.
                   111091: */
                   111092: SQLITE_PRIVATE void sqlite3ConnectionUnlocked(sqlite3 *db){
                   111093:   void (*xUnlockNotify)(void **, int) = 0; /* Unlock-notify cb to invoke */
                   111094:   int nArg = 0;                            /* Number of entries in aArg[] */
                   111095:   sqlite3 **pp;                            /* Iterator variable */
                   111096:   void **aArg;               /* Arguments to the unlock callback */
                   111097:   void **aDyn = 0;           /* Dynamically allocated space for aArg[] */
                   111098:   void *aStatic[16];         /* Starter space for aArg[].  No malloc required */
                   111099: 
                   111100:   aArg = aStatic;
                   111101:   enterMutex();         /* Enter STATIC_MASTER mutex */
                   111102: 
                   111103:   /* This loop runs once for each entry in the blocked-connections list. */
                   111104:   for(pp=&sqlite3BlockedList; *pp; /* no-op */ ){
                   111105:     sqlite3 *p = *pp;
                   111106: 
                   111107:     /* Step 1. */
                   111108:     if( p->pBlockingConnection==db ){
                   111109:       p->pBlockingConnection = 0;
                   111110:     }
                   111111: 
                   111112:     /* Step 2. */
                   111113:     if( p->pUnlockConnection==db ){
                   111114:       assert( p->xUnlockNotify );
                   111115:       if( p->xUnlockNotify!=xUnlockNotify && nArg!=0 ){
                   111116:         xUnlockNotify(aArg, nArg);
                   111117:         nArg = 0;
                   111118:       }
                   111119: 
                   111120:       sqlite3BeginBenignMalloc();
                   111121:       assert( aArg==aDyn || (aDyn==0 && aArg==aStatic) );
                   111122:       assert( nArg<=(int)ArraySize(aStatic) || aArg==aDyn );
                   111123:       if( (!aDyn && nArg==(int)ArraySize(aStatic))
                   111124:        || (aDyn && nArg==(int)(sqlite3MallocSize(aDyn)/sizeof(void*)))
                   111125:       ){
                   111126:         /* The aArg[] array needs to grow. */
                   111127:         void **pNew = (void **)sqlite3Malloc(nArg*sizeof(void *)*2);
                   111128:         if( pNew ){
                   111129:           memcpy(pNew, aArg, nArg*sizeof(void *));
                   111130:           sqlite3_free(aDyn);
                   111131:           aDyn = aArg = pNew;
                   111132:         }else{
                   111133:           /* This occurs when the array of context pointers that need to
                   111134:           ** be passed to the unlock-notify callback is larger than the
                   111135:           ** aStatic[] array allocated on the stack and the attempt to 
                   111136:           ** allocate a larger array from the heap has failed.
                   111137:           **
                   111138:           ** This is a difficult situation to handle. Returning an error
                   111139:           ** code to the caller is insufficient, as even if an error code
                   111140:           ** is returned the transaction on connection db will still be
                   111141:           ** closed and the unlock-notify callbacks on blocked connections
                   111142:           ** will go unissued. This might cause the application to wait
                   111143:           ** indefinitely for an unlock-notify callback that will never 
                   111144:           ** arrive.
                   111145:           **
                   111146:           ** Instead, invoke the unlock-notify callback with the context
                   111147:           ** array already accumulated. We can then clear the array and
                   111148:           ** begin accumulating any further context pointers without 
                   111149:           ** requiring any dynamic allocation. This is sub-optimal because
                   111150:           ** it means that instead of one callback with a large array of
                   111151:           ** context pointers the application will receive two or more
                   111152:           ** callbacks with smaller arrays of context pointers, which will
                   111153:           ** reduce the applications ability to prioritize multiple 
                   111154:           ** connections. But it is the best that can be done under the
                   111155:           ** circumstances.
                   111156:           */
                   111157:           xUnlockNotify(aArg, nArg);
                   111158:           nArg = 0;
                   111159:         }
                   111160:       }
                   111161:       sqlite3EndBenignMalloc();
                   111162: 
                   111163:       aArg[nArg++] = p->pUnlockArg;
                   111164:       xUnlockNotify = p->xUnlockNotify;
                   111165:       p->pUnlockConnection = 0;
                   111166:       p->xUnlockNotify = 0;
                   111167:       p->pUnlockArg = 0;
                   111168:     }
                   111169: 
                   111170:     /* Step 3. */
                   111171:     if( p->pBlockingConnection==0 && p->pUnlockConnection==0 ){
                   111172:       /* Remove connection p from the blocked connections list. */
                   111173:       *pp = p->pNextBlocked;
                   111174:       p->pNextBlocked = 0;
                   111175:     }else{
                   111176:       pp = &p->pNextBlocked;
                   111177:     }
                   111178:   }
                   111179: 
                   111180:   if( nArg!=0 ){
                   111181:     xUnlockNotify(aArg, nArg);
                   111182:   }
                   111183:   sqlite3_free(aDyn);
                   111184:   leaveMutex();         /* Leave STATIC_MASTER mutex */
                   111185: }
                   111186: 
                   111187: /*
                   111188: ** This is called when the database connection passed as an argument is 
                   111189: ** being closed. The connection is removed from the blocked list.
                   111190: */
                   111191: SQLITE_PRIVATE void sqlite3ConnectionClosed(sqlite3 *db){
                   111192:   sqlite3ConnectionUnlocked(db);
                   111193:   enterMutex();
                   111194:   removeFromBlockedList(db);
                   111195:   checkListProperties(db);
                   111196:   leaveMutex();
                   111197: }
                   111198: #endif
                   111199: 
                   111200: /************** End of notify.c **********************************************/
                   111201: /************** Begin file fts3.c ********************************************/
                   111202: /*
                   111203: ** 2006 Oct 10
                   111204: **
                   111205: ** The author disclaims copyright to this source code.  In place of
                   111206: ** a legal notice, here is a blessing:
                   111207: **
                   111208: **    May you do good and not evil.
                   111209: **    May you find forgiveness for yourself and forgive others.
                   111210: **    May you share freely, never taking more than you give.
                   111211: **
                   111212: ******************************************************************************
                   111213: **
                   111214: ** This is an SQLite module implementing full-text search.
                   111215: */
                   111216: 
                   111217: /*
                   111218: ** The code in this file is only compiled if:
                   111219: **
                   111220: **     * The FTS3 module is being built as an extension
                   111221: **       (in which case SQLITE_CORE is not defined), or
                   111222: **
                   111223: **     * The FTS3 module is being built into the core of
                   111224: **       SQLite (in which case SQLITE_ENABLE_FTS3 is defined).
                   111225: */
                   111226: 
                   111227: /* The full-text index is stored in a series of b+tree (-like)
                   111228: ** structures called segments which map terms to doclists.  The
                   111229: ** structures are like b+trees in layout, but are constructed from the
                   111230: ** bottom up in optimal fashion and are not updatable.  Since trees
                   111231: ** are built from the bottom up, things will be described from the
                   111232: ** bottom up.
                   111233: **
                   111234: **
                   111235: **** Varints ****
                   111236: ** The basic unit of encoding is a variable-length integer called a
                   111237: ** varint.  We encode variable-length integers in little-endian order
                   111238: ** using seven bits * per byte as follows:
                   111239: **
                   111240: ** KEY:
                   111241: **         A = 0xxxxxxx    7 bits of data and one flag bit
                   111242: **         B = 1xxxxxxx    7 bits of data and one flag bit
                   111243: **
                   111244: **  7 bits - A
                   111245: ** 14 bits - BA
                   111246: ** 21 bits - BBA
                   111247: ** and so on.
                   111248: **
                   111249: ** This is similar in concept to how sqlite encodes "varints" but
                   111250: ** the encoding is not the same.  SQLite varints are big-endian
                   111251: ** are are limited to 9 bytes in length whereas FTS3 varints are
                   111252: ** little-endian and can be up to 10 bytes in length (in theory).
                   111253: **
                   111254: ** Example encodings:
                   111255: **
                   111256: **     1:    0x01
                   111257: **   127:    0x7f
                   111258: **   128:    0x81 0x00
                   111259: **
                   111260: **
                   111261: **** Document lists ****
                   111262: ** A doclist (document list) holds a docid-sorted list of hits for a
                   111263: ** given term.  Doclists hold docids and associated token positions.
                   111264: ** A docid is the unique integer identifier for a single document.
                   111265: ** A position is the index of a word within the document.  The first 
                   111266: ** word of the document has a position of 0.
                   111267: **
                   111268: ** FTS3 used to optionally store character offsets using a compile-time
                   111269: ** option.  But that functionality is no longer supported.
                   111270: **
                   111271: ** A doclist is stored like this:
                   111272: **
                   111273: ** array {
                   111274: **   varint docid;
                   111275: **   array {                (position list for column 0)
                   111276: **     varint position;     (2 more than the delta from previous position)
                   111277: **   }
                   111278: **   array {
                   111279: **     varint POS_COLUMN;   (marks start of position list for new column)
                   111280: **     varint column;       (index of new column)
                   111281: **     array {
                   111282: **       varint position;   (2 more than the delta from previous position)
                   111283: **     }
                   111284: **   }
                   111285: **   varint POS_END;        (marks end of positions for this document.
                   111286: ** }
                   111287: **
                   111288: ** Here, array { X } means zero or more occurrences of X, adjacent in
                   111289: ** memory.  A "position" is an index of a token in the token stream
                   111290: ** generated by the tokenizer. Note that POS_END and POS_COLUMN occur 
                   111291: ** in the same logical place as the position element, and act as sentinals
                   111292: ** ending a position list array.  POS_END is 0.  POS_COLUMN is 1.
                   111293: ** The positions numbers are not stored literally but rather as two more
                   111294: ** than the difference from the prior position, or the just the position plus
                   111295: ** 2 for the first position.  Example:
                   111296: **
                   111297: **   label:       A B C D E  F  G H   I  J K
                   111298: **   value:     123 5 9 1 1 14 35 0 234 72 0
                   111299: **
                   111300: ** The 123 value is the first docid.  For column zero in this document
                   111301: ** there are two matches at positions 3 and 10 (5-2 and 9-2+3).  The 1
                   111302: ** at D signals the start of a new column; the 1 at E indicates that the
                   111303: ** new column is column number 1.  There are two positions at 12 and 45
                   111304: ** (14-2 and 35-2+12).  The 0 at H indicate the end-of-document.  The
                   111305: ** 234 at I is the next docid.  It has one position 72 (72-2) and then
                   111306: ** terminates with the 0 at K.
                   111307: **
                   111308: ** A "position-list" is the list of positions for multiple columns for
                   111309: ** a single docid.  A "column-list" is the set of positions for a single
                   111310: ** column.  Hence, a position-list consists of one or more column-lists,
                   111311: ** a document record consists of a docid followed by a position-list and
                   111312: ** a doclist consists of one or more document records.
                   111313: **
                   111314: ** A bare doclist omits the position information, becoming an 
                   111315: ** array of varint-encoded docids.
                   111316: **
                   111317: **** Segment leaf nodes ****
                   111318: ** Segment leaf nodes store terms and doclists, ordered by term.  Leaf
                   111319: ** nodes are written using LeafWriter, and read using LeafReader (to
                   111320: ** iterate through a single leaf node's data) and LeavesReader (to
                   111321: ** iterate through a segment's entire leaf layer).  Leaf nodes have
                   111322: ** the format:
                   111323: **
                   111324: ** varint iHeight;             (height from leaf level, always 0)
                   111325: ** varint nTerm;               (length of first term)
                   111326: ** char pTerm[nTerm];          (content of first term)
                   111327: ** varint nDoclist;            (length of term's associated doclist)
                   111328: ** char pDoclist[nDoclist];    (content of doclist)
                   111329: ** array {
                   111330: **                             (further terms are delta-encoded)
                   111331: **   varint nPrefix;           (length of prefix shared with previous term)
                   111332: **   varint nSuffix;           (length of unshared suffix)
                   111333: **   char pTermSuffix[nSuffix];(unshared suffix of next term)
                   111334: **   varint nDoclist;          (length of term's associated doclist)
                   111335: **   char pDoclist[nDoclist];  (content of doclist)
                   111336: ** }
                   111337: **
                   111338: ** Here, array { X } means zero or more occurrences of X, adjacent in
                   111339: ** memory.
                   111340: **
                   111341: ** Leaf nodes are broken into blocks which are stored contiguously in
                   111342: ** the %_segments table in sorted order.  This means that when the end
                   111343: ** of a node is reached, the next term is in the node with the next
                   111344: ** greater node id.
                   111345: **
                   111346: ** New data is spilled to a new leaf node when the current node
                   111347: ** exceeds LEAF_MAX bytes (default 2048).  New data which itself is
                   111348: ** larger than STANDALONE_MIN (default 1024) is placed in a standalone
                   111349: ** node (a leaf node with a single term and doclist).  The goal of
                   111350: ** these settings is to pack together groups of small doclists while
                   111351: ** making it efficient to directly access large doclists.  The
                   111352: ** assumption is that large doclists represent terms which are more
                   111353: ** likely to be query targets.
                   111354: **
                   111355: ** TODO(shess) It may be useful for blocking decisions to be more
                   111356: ** dynamic.  For instance, it may make more sense to have a 2.5k leaf
                   111357: ** node rather than splitting into 2k and .5k nodes.  My intuition is
                   111358: ** that this might extend through 2x or 4x the pagesize.
                   111359: **
                   111360: **
                   111361: **** Segment interior nodes ****
                   111362: ** Segment interior nodes store blockids for subtree nodes and terms
                   111363: ** to describe what data is stored by the each subtree.  Interior
                   111364: ** nodes are written using InteriorWriter, and read using
                   111365: ** InteriorReader.  InteriorWriters are created as needed when
                   111366: ** SegmentWriter creates new leaf nodes, or when an interior node
                   111367: ** itself grows too big and must be split.  The format of interior
                   111368: ** nodes:
                   111369: **
                   111370: ** varint iHeight;           (height from leaf level, always >0)
                   111371: ** varint iBlockid;          (block id of node's leftmost subtree)
                   111372: ** optional {
                   111373: **   varint nTerm;           (length of first term)
                   111374: **   char pTerm[nTerm];      (content of first term)
                   111375: **   array {
                   111376: **                                (further terms are delta-encoded)
                   111377: **     varint nPrefix;            (length of shared prefix with previous term)
                   111378: **     varint nSuffix;            (length of unshared suffix)
                   111379: **     char pTermSuffix[nSuffix]; (unshared suffix of next term)
                   111380: **   }
                   111381: ** }
                   111382: **
                   111383: ** Here, optional { X } means an optional element, while array { X }
                   111384: ** means zero or more occurrences of X, adjacent in memory.
                   111385: **
                   111386: ** An interior node encodes n terms separating n+1 subtrees.  The
                   111387: ** subtree blocks are contiguous, so only the first subtree's blockid
                   111388: ** is encoded.  The subtree at iBlockid will contain all terms less
                   111389: ** than the first term encoded (or all terms if no term is encoded).
                   111390: ** Otherwise, for terms greater than or equal to pTerm[i] but less
                   111391: ** than pTerm[i+1], the subtree for that term will be rooted at
                   111392: ** iBlockid+i.  Interior nodes only store enough term data to
                   111393: ** distinguish adjacent children (if the rightmost term of the left
                   111394: ** child is "something", and the leftmost term of the right child is
                   111395: ** "wicked", only "w" is stored).
                   111396: **
                   111397: ** New data is spilled to a new interior node at the same height when
                   111398: ** the current node exceeds INTERIOR_MAX bytes (default 2048).
                   111399: ** INTERIOR_MIN_TERMS (default 7) keeps large terms from monopolizing
                   111400: ** interior nodes and making the tree too skinny.  The interior nodes
                   111401: ** at a given height are naturally tracked by interior nodes at
                   111402: ** height+1, and so on.
                   111403: **
                   111404: **
                   111405: **** Segment directory ****
                   111406: ** The segment directory in table %_segdir stores meta-information for
                   111407: ** merging and deleting segments, and also the root node of the
                   111408: ** segment's tree.
                   111409: **
                   111410: ** The root node is the top node of the segment's tree after encoding
                   111411: ** the entire segment, restricted to ROOT_MAX bytes (default 1024).
                   111412: ** This could be either a leaf node or an interior node.  If the top
                   111413: ** node requires more than ROOT_MAX bytes, it is flushed to %_segments
                   111414: ** and a new root interior node is generated (which should always fit
                   111415: ** within ROOT_MAX because it only needs space for 2 varints, the
                   111416: ** height and the blockid of the previous root).
                   111417: **
                   111418: ** The meta-information in the segment directory is:
                   111419: **   level               - segment level (see below)
                   111420: **   idx                 - index within level
                   111421: **                       - (level,idx uniquely identify a segment)
                   111422: **   start_block         - first leaf node
                   111423: **   leaves_end_block    - last leaf node
                   111424: **   end_block           - last block (including interior nodes)
                   111425: **   root                - contents of root node
                   111426: **
                   111427: ** If the root node is a leaf node, then start_block,
                   111428: ** leaves_end_block, and end_block are all 0.
                   111429: **
                   111430: **
                   111431: **** Segment merging ****
                   111432: ** To amortize update costs, segments are grouped into levels and
                   111433: ** merged in batches.  Each increase in level represents exponentially
                   111434: ** more documents.
                   111435: **
                   111436: ** New documents (actually, document updates) are tokenized and
                   111437: ** written individually (using LeafWriter) to a level 0 segment, with
                   111438: ** incrementing idx.  When idx reaches MERGE_COUNT (default 16), all
                   111439: ** level 0 segments are merged into a single level 1 segment.  Level 1
                   111440: ** is populated like level 0, and eventually MERGE_COUNT level 1
                   111441: ** segments are merged to a single level 2 segment (representing
                   111442: ** MERGE_COUNT^2 updates), and so on.
                   111443: **
                   111444: ** A segment merge traverses all segments at a given level in
                   111445: ** parallel, performing a straightforward sorted merge.  Since segment
                   111446: ** leaf nodes are written in to the %_segments table in order, this
                   111447: ** merge traverses the underlying sqlite disk structures efficiently.
                   111448: ** After the merge, all segment blocks from the merged level are
                   111449: ** deleted.
                   111450: **
                   111451: ** MERGE_COUNT controls how often we merge segments.  16 seems to be
                   111452: ** somewhat of a sweet spot for insertion performance.  32 and 64 show
                   111453: ** very similar performance numbers to 16 on insertion, though they're
                   111454: ** a tiny bit slower (perhaps due to more overhead in merge-time
                   111455: ** sorting).  8 is about 20% slower than 16, 4 about 50% slower than
                   111456: ** 16, 2 about 66% slower than 16.
                   111457: **
                   111458: ** At query time, high MERGE_COUNT increases the number of segments
                   111459: ** which need to be scanned and merged.  For instance, with 100k docs
                   111460: ** inserted:
                   111461: **
                   111462: **    MERGE_COUNT   segments
                   111463: **       16           25
                   111464: **        8           12
                   111465: **        4           10
                   111466: **        2            6
                   111467: **
                   111468: ** This appears to have only a moderate impact on queries for very
                   111469: ** frequent terms (which are somewhat dominated by segment merge
                   111470: ** costs), and infrequent and non-existent terms still seem to be fast
                   111471: ** even with many segments.
                   111472: **
                   111473: ** TODO(shess) That said, it would be nice to have a better query-side
                   111474: ** argument for MERGE_COUNT of 16.  Also, it is possible/likely that
                   111475: ** optimizations to things like doclist merging will swing the sweet
                   111476: ** spot around.
                   111477: **
                   111478: **
                   111479: **
                   111480: **** Handling of deletions and updates ****
                   111481: ** Since we're using a segmented structure, with no docid-oriented
                   111482: ** index into the term index, we clearly cannot simply update the term
                   111483: ** index when a document is deleted or updated.  For deletions, we
                   111484: ** write an empty doclist (varint(docid) varint(POS_END)), for updates
                   111485: ** we simply write the new doclist.  Segment merges overwrite older
                   111486: ** data for a particular docid with newer data, so deletes or updates
                   111487: ** will eventually overtake the earlier data and knock it out.  The
                   111488: ** query logic likewise merges doclists so that newer data knocks out
                   111489: ** older data.
                   111490: **
                   111491: ** TODO(shess) Provide a VACUUM type operation to clear out all
                   111492: ** deletions and duplications.  This would basically be a forced merge
                   111493: ** into a single segment.
                   111494: */
                   111495: 
                   111496: /************** Include fts3Int.h in the middle of fts3.c ********************/
                   111497: /************** Begin file fts3Int.h *****************************************/
                   111498: /*
                   111499: ** 2009 Nov 12
                   111500: **
                   111501: ** The author disclaims copyright to this source code.  In place of
                   111502: ** a legal notice, here is a blessing:
                   111503: **
                   111504: **    May you do good and not evil.
                   111505: **    May you find forgiveness for yourself and forgive others.
                   111506: **    May you share freely, never taking more than you give.
                   111507: **
                   111508: ******************************************************************************
                   111509: **
                   111510: */
                   111511: #ifndef _FTSINT_H
                   111512: #define _FTSINT_H
                   111513: 
                   111514: #if !defined(NDEBUG) && !defined(SQLITE_DEBUG) 
                   111515: # define NDEBUG 1
                   111516: #endif
                   111517: 
                   111518: /*
                   111519: ** FTS4 is really an extension for FTS3.  It is enabled using the
                   111520: ** SQLITE_ENABLE_FTS3 macro.  But to avoid confusion we also all
                   111521: ** the SQLITE_ENABLE_FTS4 macro to serve as an alisse for SQLITE_ENABLE_FTS3.
                   111522: */
                   111523: #if defined(SQLITE_ENABLE_FTS4) && !defined(SQLITE_ENABLE_FTS3)
                   111524: # define SQLITE_ENABLE_FTS3
                   111525: #endif
                   111526: 
                   111527: #ifdef SQLITE_ENABLE_FTS3
                   111528: /************** Include fts3_tokenizer.h in the middle of fts3Int.h **********/
                   111529: /************** Begin file fts3_tokenizer.h **********************************/
                   111530: /*
                   111531: ** 2006 July 10
                   111532: **
                   111533: ** The author disclaims copyright to this source code.
                   111534: **
                   111535: *************************************************************************
                   111536: ** Defines the interface to tokenizers used by fulltext-search.  There
                   111537: ** are three basic components:
                   111538: **
                   111539: ** sqlite3_tokenizer_module is a singleton defining the tokenizer
                   111540: ** interface functions.  This is essentially the class structure for
                   111541: ** tokenizers.
                   111542: **
                   111543: ** sqlite3_tokenizer is used to define a particular tokenizer, perhaps
                   111544: ** including customization information defined at creation time.
                   111545: **
                   111546: ** sqlite3_tokenizer_cursor is generated by a tokenizer to generate
                   111547: ** tokens from a particular input.
                   111548: */
                   111549: #ifndef _FTS3_TOKENIZER_H_
                   111550: #define _FTS3_TOKENIZER_H_
                   111551: 
                   111552: /* TODO(shess) Only used for SQLITE_OK and SQLITE_DONE at this time.
                   111553: ** If tokenizers are to be allowed to call sqlite3_*() functions, then
                   111554: ** we will need a way to register the API consistently.
                   111555: */
                   111556: 
                   111557: /*
                   111558: ** Structures used by the tokenizer interface. When a new tokenizer
                   111559: ** implementation is registered, the caller provides a pointer to
                   111560: ** an sqlite3_tokenizer_module containing pointers to the callback
                   111561: ** functions that make up an implementation.
                   111562: **
                   111563: ** When an fts3 table is created, it passes any arguments passed to
                   111564: ** the tokenizer clause of the CREATE VIRTUAL TABLE statement to the
                   111565: ** sqlite3_tokenizer_module.xCreate() function of the requested tokenizer
                   111566: ** implementation. The xCreate() function in turn returns an 
                   111567: ** sqlite3_tokenizer structure representing the specific tokenizer to
                   111568: ** be used for the fts3 table (customized by the tokenizer clause arguments).
                   111569: **
                   111570: ** To tokenize an input buffer, the sqlite3_tokenizer_module.xOpen()
                   111571: ** method is called. It returns an sqlite3_tokenizer_cursor object
                   111572: ** that may be used to tokenize a specific input buffer based on
                   111573: ** the tokenization rules supplied by a specific sqlite3_tokenizer
                   111574: ** object.
                   111575: */
                   111576: typedef struct sqlite3_tokenizer_module sqlite3_tokenizer_module;
                   111577: typedef struct sqlite3_tokenizer sqlite3_tokenizer;
                   111578: typedef struct sqlite3_tokenizer_cursor sqlite3_tokenizer_cursor;
                   111579: 
                   111580: struct sqlite3_tokenizer_module {
                   111581: 
                   111582:   /*
                   111583:   ** Structure version. Should always be set to 0.
                   111584:   */
                   111585:   int iVersion;
                   111586: 
                   111587:   /*
                   111588:   ** Create a new tokenizer. The values in the argv[] array are the
                   111589:   ** arguments passed to the "tokenizer" clause of the CREATE VIRTUAL
                   111590:   ** TABLE statement that created the fts3 table. For example, if
                   111591:   ** the following SQL is executed:
                   111592:   **
                   111593:   **   CREATE .. USING fts3( ... , tokenizer <tokenizer-name> arg1 arg2)
                   111594:   **
                   111595:   ** then argc is set to 2, and the argv[] array contains pointers
                   111596:   ** to the strings "arg1" and "arg2".
                   111597:   **
                   111598:   ** This method should return either SQLITE_OK (0), or an SQLite error 
                   111599:   ** code. If SQLITE_OK is returned, then *ppTokenizer should be set
                   111600:   ** to point at the newly created tokenizer structure. The generic
                   111601:   ** sqlite3_tokenizer.pModule variable should not be initialised by
                   111602:   ** this callback. The caller will do so.
                   111603:   */
                   111604:   int (*xCreate)(
                   111605:     int argc,                           /* Size of argv array */
                   111606:     const char *const*argv,             /* Tokenizer argument strings */
                   111607:     sqlite3_tokenizer **ppTokenizer     /* OUT: Created tokenizer */
                   111608:   );
                   111609: 
                   111610:   /*
                   111611:   ** Destroy an existing tokenizer. The fts3 module calls this method
                   111612:   ** exactly once for each successful call to xCreate().
                   111613:   */
                   111614:   int (*xDestroy)(sqlite3_tokenizer *pTokenizer);
                   111615: 
                   111616:   /*
                   111617:   ** Create a tokenizer cursor to tokenize an input buffer. The caller
                   111618:   ** is responsible for ensuring that the input buffer remains valid
                   111619:   ** until the cursor is closed (using the xClose() method). 
                   111620:   */
                   111621:   int (*xOpen)(
                   111622:     sqlite3_tokenizer *pTokenizer,       /* Tokenizer object */
                   111623:     const char *pInput, int nBytes,      /* Input buffer */
                   111624:     sqlite3_tokenizer_cursor **ppCursor  /* OUT: Created tokenizer cursor */
                   111625:   );
                   111626: 
                   111627:   /*
                   111628:   ** Destroy an existing tokenizer cursor. The fts3 module calls this 
                   111629:   ** method exactly once for each successful call to xOpen().
                   111630:   */
                   111631:   int (*xClose)(sqlite3_tokenizer_cursor *pCursor);
                   111632: 
                   111633:   /*
                   111634:   ** Retrieve the next token from the tokenizer cursor pCursor. This
                   111635:   ** method should either return SQLITE_OK and set the values of the
                   111636:   ** "OUT" variables identified below, or SQLITE_DONE to indicate that
                   111637:   ** the end of the buffer has been reached, or an SQLite error code.
                   111638:   **
                   111639:   ** *ppToken should be set to point at a buffer containing the 
                   111640:   ** normalized version of the token (i.e. after any case-folding and/or
                   111641:   ** stemming has been performed). *pnBytes should be set to the length
                   111642:   ** of this buffer in bytes. The input text that generated the token is
                   111643:   ** identified by the byte offsets returned in *piStartOffset and
                   111644:   ** *piEndOffset. *piStartOffset should be set to the index of the first
                   111645:   ** byte of the token in the input buffer. *piEndOffset should be set
                   111646:   ** to the index of the first byte just past the end of the token in
                   111647:   ** the input buffer.
                   111648:   **
                   111649:   ** The buffer *ppToken is set to point at is managed by the tokenizer
                   111650:   ** implementation. It is only required to be valid until the next call
                   111651:   ** to xNext() or xClose(). 
                   111652:   */
                   111653:   /* TODO(shess) current implementation requires pInput to be
                   111654:   ** nul-terminated.  This should either be fixed, or pInput/nBytes
                   111655:   ** should be converted to zInput.
                   111656:   */
                   111657:   int (*xNext)(
                   111658:     sqlite3_tokenizer_cursor *pCursor,   /* Tokenizer cursor */
                   111659:     const char **ppToken, int *pnBytes,  /* OUT: Normalized text for token */
                   111660:     int *piStartOffset,  /* OUT: Byte offset of token in input buffer */
                   111661:     int *piEndOffset,    /* OUT: Byte offset of end of token in input buffer */
                   111662:     int *piPosition      /* OUT: Number of tokens returned before this one */
                   111663:   );
                   111664: };
                   111665: 
                   111666: struct sqlite3_tokenizer {
                   111667:   const sqlite3_tokenizer_module *pModule;  /* The module for this tokenizer */
                   111668:   /* Tokenizer implementations will typically add additional fields */
                   111669: };
                   111670: 
                   111671: struct sqlite3_tokenizer_cursor {
                   111672:   sqlite3_tokenizer *pTokenizer;       /* Tokenizer for this cursor. */
                   111673:   /* Tokenizer implementations will typically add additional fields */
                   111674: };
                   111675: 
                   111676: int fts3_global_term_cnt(int iTerm, int iCol);
                   111677: int fts3_term_cnt(int iTerm, int iCol);
                   111678: 
                   111679: 
                   111680: #endif /* _FTS3_TOKENIZER_H_ */
                   111681: 
                   111682: /************** End of fts3_tokenizer.h **************************************/
                   111683: /************** Continuing where we left off in fts3Int.h ********************/
                   111684: /************** Include fts3_hash.h in the middle of fts3Int.h ***************/
                   111685: /************** Begin file fts3_hash.h ***************************************/
                   111686: /*
                   111687: ** 2001 September 22
                   111688: **
                   111689: ** The author disclaims copyright to this source code.  In place of
                   111690: ** a legal notice, here is a blessing:
                   111691: **
                   111692: **    May you do good and not evil.
                   111693: **    May you find forgiveness for yourself and forgive others.
                   111694: **    May you share freely, never taking more than you give.
                   111695: **
                   111696: *************************************************************************
                   111697: ** This is the header file for the generic hash-table implemenation
                   111698: ** used in SQLite.  We've modified it slightly to serve as a standalone
                   111699: ** hash table implementation for the full-text indexing module.
                   111700: **
                   111701: */
                   111702: #ifndef _FTS3_HASH_H_
                   111703: #define _FTS3_HASH_H_
                   111704: 
                   111705: /* Forward declarations of structures. */
                   111706: typedef struct Fts3Hash Fts3Hash;
                   111707: typedef struct Fts3HashElem Fts3HashElem;
                   111708: 
                   111709: /* A complete hash table is an instance of the following structure.
                   111710: ** The internals of this structure are intended to be opaque -- client
                   111711: ** code should not attempt to access or modify the fields of this structure
                   111712: ** directly.  Change this structure only by using the routines below.
                   111713: ** However, many of the "procedures" and "functions" for modifying and
                   111714: ** accessing this structure are really macros, so we can't really make
                   111715: ** this structure opaque.
                   111716: */
                   111717: struct Fts3Hash {
                   111718:   char keyClass;          /* HASH_INT, _POINTER, _STRING, _BINARY */
                   111719:   char copyKey;           /* True if copy of key made on insert */
                   111720:   int count;              /* Number of entries in this table */
                   111721:   Fts3HashElem *first;    /* The first element of the array */
                   111722:   int htsize;             /* Number of buckets in the hash table */
                   111723:   struct _fts3ht {        /* the hash table */
                   111724:     int count;               /* Number of entries with this hash */
                   111725:     Fts3HashElem *chain;     /* Pointer to first entry with this hash */
                   111726:   } *ht;
                   111727: };
                   111728: 
                   111729: /* Each element in the hash table is an instance of the following 
                   111730: ** structure.  All elements are stored on a single doubly-linked list.
                   111731: **
                   111732: ** Again, this structure is intended to be opaque, but it can't really
                   111733: ** be opaque because it is used by macros.
                   111734: */
                   111735: struct Fts3HashElem {
                   111736:   Fts3HashElem *next, *prev; /* Next and previous elements in the table */
                   111737:   void *data;                /* Data associated with this element */
                   111738:   void *pKey; int nKey;      /* Key associated with this element */
                   111739: };
                   111740: 
                   111741: /*
                   111742: ** There are 2 different modes of operation for a hash table:
                   111743: **
                   111744: **   FTS3_HASH_STRING        pKey points to a string that is nKey bytes long
                   111745: **                           (including the null-terminator, if any).  Case
                   111746: **                           is respected in comparisons.
                   111747: **
                   111748: **   FTS3_HASH_BINARY        pKey points to binary data nKey bytes long. 
                   111749: **                           memcmp() is used to compare keys.
                   111750: **
                   111751: ** A copy of the key is made if the copyKey parameter to fts3HashInit is 1.  
                   111752: */
                   111753: #define FTS3_HASH_STRING    1
                   111754: #define FTS3_HASH_BINARY    2
                   111755: 
                   111756: /*
                   111757: ** Access routines.  To delete, insert a NULL pointer.
                   111758: */
                   111759: SQLITE_PRIVATE void sqlite3Fts3HashInit(Fts3Hash *pNew, char keyClass, char copyKey);
                   111760: SQLITE_PRIVATE void *sqlite3Fts3HashInsert(Fts3Hash*, const void *pKey, int nKey, void *pData);
                   111761: SQLITE_PRIVATE void *sqlite3Fts3HashFind(const Fts3Hash*, const void *pKey, int nKey);
                   111762: SQLITE_PRIVATE void sqlite3Fts3HashClear(Fts3Hash*);
                   111763: SQLITE_PRIVATE Fts3HashElem *sqlite3Fts3HashFindElem(const Fts3Hash *, const void *, int);
                   111764: 
                   111765: /*
                   111766: ** Shorthand for the functions above
                   111767: */
                   111768: #define fts3HashInit     sqlite3Fts3HashInit
                   111769: #define fts3HashInsert   sqlite3Fts3HashInsert
                   111770: #define fts3HashFind     sqlite3Fts3HashFind
                   111771: #define fts3HashClear    sqlite3Fts3HashClear
                   111772: #define fts3HashFindElem sqlite3Fts3HashFindElem
                   111773: 
                   111774: /*
                   111775: ** Macros for looping over all elements of a hash table.  The idiom is
                   111776: ** like this:
                   111777: **
                   111778: **   Fts3Hash h;
                   111779: **   Fts3HashElem *p;
                   111780: **   ...
                   111781: **   for(p=fts3HashFirst(&h); p; p=fts3HashNext(p)){
                   111782: **     SomeStructure *pData = fts3HashData(p);
                   111783: **     // do something with pData
                   111784: **   }
                   111785: */
                   111786: #define fts3HashFirst(H)  ((H)->first)
                   111787: #define fts3HashNext(E)   ((E)->next)
                   111788: #define fts3HashData(E)   ((E)->data)
                   111789: #define fts3HashKey(E)    ((E)->pKey)
                   111790: #define fts3HashKeysize(E) ((E)->nKey)
                   111791: 
                   111792: /*
                   111793: ** Number of entries in a hash table
                   111794: */
                   111795: #define fts3HashCount(H)  ((H)->count)
                   111796: 
                   111797: #endif /* _FTS3_HASH_H_ */
                   111798: 
                   111799: /************** End of fts3_hash.h *******************************************/
                   111800: /************** Continuing where we left off in fts3Int.h ********************/
                   111801: 
                   111802: /*
                   111803: ** This constant controls how often segments are merged. Once there are
                   111804: ** FTS3_MERGE_COUNT segments of level N, they are merged into a single
                   111805: ** segment of level N+1.
                   111806: */
                   111807: #define FTS3_MERGE_COUNT 16
                   111808: 
                   111809: /*
                   111810: ** This is the maximum amount of data (in bytes) to store in the 
                   111811: ** Fts3Table.pendingTerms hash table. Normally, the hash table is
                   111812: ** populated as documents are inserted/updated/deleted in a transaction
                   111813: ** and used to create a new segment when the transaction is committed.
                   111814: ** However if this limit is reached midway through a transaction, a new 
                   111815: ** segment is created and the hash table cleared immediately.
                   111816: */
                   111817: #define FTS3_MAX_PENDING_DATA (1*1024*1024)
                   111818: 
                   111819: /*
                   111820: ** Macro to return the number of elements in an array. SQLite has a
                   111821: ** similar macro called ArraySize(). Use a different name to avoid
                   111822: ** a collision when building an amalgamation with built-in FTS3.
                   111823: */
                   111824: #define SizeofArray(X) ((int)(sizeof(X)/sizeof(X[0])))
                   111825: 
                   111826: 
                   111827: #ifndef MIN
                   111828: # define MIN(x,y) ((x)<(y)?(x):(y))
                   111829: #endif
                   111830: 
                   111831: /*
                   111832: ** Maximum length of a varint encoded integer. The varint format is different
                   111833: ** from that used by SQLite, so the maximum length is 10, not 9.
                   111834: */
                   111835: #define FTS3_VARINT_MAX 10
                   111836: 
                   111837: /*
                   111838: ** FTS4 virtual tables may maintain multiple indexes - one index of all terms
                   111839: ** in the document set and zero or more prefix indexes. All indexes are stored
                   111840: ** as one or more b+-trees in the %_segments and %_segdir tables. 
                   111841: **
                   111842: ** It is possible to determine which index a b+-tree belongs to based on the
                   111843: ** value stored in the "%_segdir.level" column. Given this value L, the index
                   111844: ** that the b+-tree belongs to is (L<<10). In other words, all b+-trees with
                   111845: ** level values between 0 and 1023 (inclusive) belong to index 0, all levels
                   111846: ** between 1024 and 2047 to index 1, and so on.
                   111847: **
                   111848: ** It is considered impossible for an index to use more than 1024 levels. In 
                   111849: ** theory though this may happen, but only after at least 
                   111850: ** (FTS3_MERGE_COUNT^1024) separate flushes of the pending-terms tables.
                   111851: */
                   111852: #define FTS3_SEGDIR_MAXLEVEL      1024
                   111853: #define FTS3_SEGDIR_MAXLEVEL_STR "1024"
                   111854: 
                   111855: /*
                   111856: ** The testcase() macro is only used by the amalgamation.  If undefined,
                   111857: ** make it a no-op.
                   111858: */
                   111859: #ifndef testcase
                   111860: # define testcase(X)
                   111861: #endif
                   111862: 
                   111863: /*
                   111864: ** Terminator values for position-lists and column-lists.
                   111865: */
                   111866: #define POS_COLUMN  (1)     /* Column-list terminator */
                   111867: #define POS_END     (0)     /* Position-list terminator */ 
                   111868: 
                   111869: /*
                   111870: ** This section provides definitions to allow the
                   111871: ** FTS3 extension to be compiled outside of the 
                   111872: ** amalgamation.
                   111873: */
                   111874: #ifndef SQLITE_AMALGAMATION
                   111875: /*
                   111876: ** Macros indicating that conditional expressions are always true or
                   111877: ** false.
                   111878: */
                   111879: #ifdef SQLITE_COVERAGE_TEST
                   111880: # define ALWAYS(x) (1)
                   111881: # define NEVER(X)  (0)
                   111882: #else
                   111883: # define ALWAYS(x) (x)
                   111884: # define NEVER(X)  (x)
                   111885: #endif
                   111886: 
                   111887: /*
                   111888: ** Internal types used by SQLite.
                   111889: */
                   111890: typedef unsigned char u8;         /* 1-byte (or larger) unsigned integer */
                   111891: typedef short int i16;            /* 2-byte (or larger) signed integer */
                   111892: typedef unsigned int u32;         /* 4-byte unsigned integer */
                   111893: typedef sqlite3_uint64 u64;       /* 8-byte unsigned integer */
                   111894: 
                   111895: /*
                   111896: ** Macro used to suppress compiler warnings for unused parameters.
                   111897: */
                   111898: #define UNUSED_PARAMETER(x) (void)(x)
                   111899: 
                   111900: /*
                   111901: ** Activate assert() only if SQLITE_TEST is enabled.
                   111902: */
                   111903: #if !defined(NDEBUG) && !defined(SQLITE_DEBUG) 
                   111904: # define NDEBUG 1
                   111905: #endif
                   111906: 
                   111907: /*
                   111908: ** The TESTONLY macro is used to enclose variable declarations or
                   111909: ** other bits of code that are needed to support the arguments
                   111910: ** within testcase() and assert() macros.
                   111911: */
                   111912: #if defined(SQLITE_DEBUG) || defined(SQLITE_COVERAGE_TEST)
                   111913: # define TESTONLY(X)  X
                   111914: #else
                   111915: # define TESTONLY(X)
                   111916: #endif
                   111917: 
                   111918: #endif /* SQLITE_AMALGAMATION */
                   111919: 
                   111920: typedef struct Fts3Table Fts3Table;
                   111921: typedef struct Fts3Cursor Fts3Cursor;
                   111922: typedef struct Fts3Expr Fts3Expr;
                   111923: typedef struct Fts3Phrase Fts3Phrase;
                   111924: typedef struct Fts3PhraseToken Fts3PhraseToken;
                   111925: 
                   111926: typedef struct Fts3Doclist Fts3Doclist;
                   111927: typedef struct Fts3SegFilter Fts3SegFilter;
                   111928: typedef struct Fts3DeferredToken Fts3DeferredToken;
                   111929: typedef struct Fts3SegReader Fts3SegReader;
                   111930: typedef struct Fts3MultiSegReader Fts3MultiSegReader;
                   111931: 
                   111932: /*
                   111933: ** A connection to a fulltext index is an instance of the following
                   111934: ** structure. The xCreate and xConnect methods create an instance
                   111935: ** of this structure and xDestroy and xDisconnect free that instance.
                   111936: ** All other methods receive a pointer to the structure as one of their
                   111937: ** arguments.
                   111938: */
                   111939: struct Fts3Table {
                   111940:   sqlite3_vtab base;              /* Base class used by SQLite core */
                   111941:   sqlite3 *db;                    /* The database connection */
                   111942:   const char *zDb;                /* logical database name */
                   111943:   const char *zName;              /* virtual table name */
                   111944:   int nColumn;                    /* number of named columns in virtual table */
                   111945:   char **azColumn;                /* column names.  malloced */
                   111946:   sqlite3_tokenizer *pTokenizer;  /* tokenizer for inserts and queries */
                   111947: 
                   111948:   /* Precompiled statements used by the implementation. Each of these 
                   111949:   ** statements is run and reset within a single virtual table API call. 
                   111950:   */
                   111951:   sqlite3_stmt *aStmt[27];
                   111952: 
                   111953:   char *zReadExprlist;
                   111954:   char *zWriteExprlist;
                   111955: 
                   111956:   int nNodeSize;                  /* Soft limit for node size */
                   111957:   u8 bHasStat;                    /* True if %_stat table exists */
                   111958:   u8 bHasDocsize;                 /* True if %_docsize table exists */
                   111959:   u8 bDescIdx;                    /* True if doclists are in reverse order */
                   111960:   int nPgsz;                      /* Page size for host database */
                   111961:   char *zSegmentsTbl;             /* Name of %_segments table */
                   111962:   sqlite3_blob *pSegments;        /* Blob handle open on %_segments table */
                   111963: 
                   111964:   /* TODO: Fix the first paragraph of this comment.
                   111965:   **
                   111966:   ** The following hash table is used to buffer pending index updates during
                   111967:   ** transactions. Variable nPendingData estimates the memory size of the 
                   111968:   ** pending data, including hash table overhead, but not malloc overhead. 
                   111969:   ** When nPendingData exceeds nMaxPendingData, the buffer is flushed 
                   111970:   ** automatically. Variable iPrevDocid is the docid of the most recently
                   111971:   ** inserted record.
                   111972:   **
                   111973:   ** A single FTS4 table may have multiple full-text indexes. For each index
                   111974:   ** there is an entry in the aIndex[] array. Index 0 is an index of all the
                   111975:   ** terms that appear in the document set. Each subsequent index in aIndex[]
                   111976:   ** is an index of prefixes of a specific length.
                   111977:   */
                   111978:   int nIndex;                     /* Size of aIndex[] */
                   111979:   struct Fts3Index {
                   111980:     int nPrefix;                  /* Prefix length (0 for main terms index) */
                   111981:     Fts3Hash hPending;            /* Pending terms table for this index */
                   111982:   } *aIndex;
                   111983:   int nMaxPendingData;            /* Max pending data before flush to disk */
                   111984:   int nPendingData;               /* Current bytes of pending data */
                   111985:   sqlite_int64 iPrevDocid;        /* Docid of most recently inserted document */
                   111986: 
                   111987: #if defined(SQLITE_DEBUG)
                   111988:   /* State variables used for validating that the transaction control
                   111989:   ** methods of the virtual table are called at appropriate times.  These
                   111990:   ** values do not contribution to the FTS computation; they are used for
                   111991:   ** verifying the SQLite core.
                   111992:   */
                   111993:   int inTransaction;     /* True after xBegin but before xCommit/xRollback */
                   111994:   int mxSavepoint;       /* Largest valid xSavepoint integer */
                   111995: #endif
                   111996: };
                   111997: 
                   111998: /*
                   111999: ** When the core wants to read from the virtual table, it creates a
                   112000: ** virtual table cursor (an instance of the following structure) using
                   112001: ** the xOpen method. Cursors are destroyed using the xClose method.
                   112002: */
                   112003: struct Fts3Cursor {
                   112004:   sqlite3_vtab_cursor base;       /* Base class used by SQLite core */
                   112005:   i16 eSearch;                    /* Search strategy (see below) */
                   112006:   u8 isEof;                       /* True if at End Of Results */
                   112007:   u8 isRequireSeek;               /* True if must seek pStmt to %_content row */
                   112008:   sqlite3_stmt *pStmt;            /* Prepared statement in use by the cursor */
                   112009:   Fts3Expr *pExpr;                /* Parsed MATCH query string */
                   112010:   int nPhrase;                    /* Number of matchable phrases in query */
                   112011:   Fts3DeferredToken *pDeferred;   /* Deferred search tokens, if any */
                   112012:   sqlite3_int64 iPrevId;          /* Previous id read from aDoclist */
                   112013:   char *pNextId;                  /* Pointer into the body of aDoclist */
                   112014:   char *aDoclist;                 /* List of docids for full-text queries */
                   112015:   int nDoclist;                   /* Size of buffer at aDoclist */
                   112016:   u8 bDesc;                       /* True to sort in descending order */
                   112017:   int eEvalmode;                  /* An FTS3_EVAL_XX constant */
                   112018:   int nRowAvg;                    /* Average size of database rows, in pages */
                   112019:   sqlite3_int64 nDoc;             /* Documents in table */
                   112020: 
                   112021:   int isMatchinfoNeeded;          /* True when aMatchinfo[] needs filling in */
                   112022:   u32 *aMatchinfo;                /* Information about most recent match */
                   112023:   int nMatchinfo;                 /* Number of elements in aMatchinfo[] */
                   112024:   char *zMatchinfo;               /* Matchinfo specification */
                   112025: };
                   112026: 
                   112027: #define FTS3_EVAL_FILTER    0
                   112028: #define FTS3_EVAL_NEXT      1
                   112029: #define FTS3_EVAL_MATCHINFO 2
                   112030: 
                   112031: /*
                   112032: ** The Fts3Cursor.eSearch member is always set to one of the following.
                   112033: ** Actualy, Fts3Cursor.eSearch can be greater than or equal to
                   112034: ** FTS3_FULLTEXT_SEARCH.  If so, then Fts3Cursor.eSearch - 2 is the index
                   112035: ** of the column to be searched.  For example, in
                   112036: **
                   112037: **     CREATE VIRTUAL TABLE ex1 USING fts3(a,b,c,d);
                   112038: **     SELECT docid FROM ex1 WHERE b MATCH 'one two three';
                   112039: ** 
                   112040: ** Because the LHS of the MATCH operator is 2nd column "b",
                   112041: ** Fts3Cursor.eSearch will be set to FTS3_FULLTEXT_SEARCH+1.  (+0 for a,
                   112042: ** +1 for b, +2 for c, +3 for d.)  If the LHS of MATCH were "ex1" 
                   112043: ** indicating that all columns should be searched,
                   112044: ** then eSearch would be set to FTS3_FULLTEXT_SEARCH+4.
                   112045: */
                   112046: #define FTS3_FULLSCAN_SEARCH 0    /* Linear scan of %_content table */
                   112047: #define FTS3_DOCID_SEARCH    1    /* Lookup by rowid on %_content table */
                   112048: #define FTS3_FULLTEXT_SEARCH 2    /* Full-text index search */
                   112049: 
                   112050: 
                   112051: struct Fts3Doclist {
                   112052:   char *aAll;                    /* Array containing doclist (or NULL) */
                   112053:   int nAll;                      /* Size of a[] in bytes */
                   112054:   char *pNextDocid;              /* Pointer to next docid */
                   112055: 
                   112056:   sqlite3_int64 iDocid;          /* Current docid (if pList!=0) */
                   112057:   int bFreeList;                 /* True if pList should be sqlite3_free()d */
                   112058:   char *pList;                   /* Pointer to position list following iDocid */
                   112059:   int nList;                     /* Length of position list */
                   112060: } doclist;
                   112061: 
                   112062: /*
                   112063: ** A "phrase" is a sequence of one or more tokens that must match in
                   112064: ** sequence.  A single token is the base case and the most common case.
                   112065: ** For a sequence of tokens contained in double-quotes (i.e. "one two three")
                   112066: ** nToken will be the number of tokens in the string.
                   112067: */
                   112068: struct Fts3PhraseToken {
                   112069:   char *z;                        /* Text of the token */
                   112070:   int n;                          /* Number of bytes in buffer z */
                   112071:   int isPrefix;                   /* True if token ends with a "*" character */
                   112072: 
                   112073:   /* Variables above this point are populated when the expression is
                   112074:   ** parsed (by code in fts3_expr.c). Below this point the variables are
                   112075:   ** used when evaluating the expression. */
                   112076:   Fts3DeferredToken *pDeferred;   /* Deferred token object for this token */
                   112077:   Fts3MultiSegReader *pSegcsr;    /* Segment-reader for this token */
                   112078: };
                   112079: 
                   112080: struct Fts3Phrase {
                   112081:   /* Cache of doclist for this phrase. */
                   112082:   Fts3Doclist doclist;
                   112083:   int bIncr;                 /* True if doclist is loaded incrementally */
                   112084:   int iDoclistToken;
                   112085: 
                   112086:   /* Variables below this point are populated by fts3_expr.c when parsing 
                   112087:   ** a MATCH expression. Everything above is part of the evaluation phase. 
                   112088:   */
                   112089:   int nToken;                /* Number of tokens in the phrase */
                   112090:   int iColumn;               /* Index of column this phrase must match */
                   112091:   Fts3PhraseToken aToken[1]; /* One entry for each token in the phrase */
                   112092: };
                   112093: 
                   112094: /*
                   112095: ** A tree of these objects forms the RHS of a MATCH operator.
                   112096: **
                   112097: ** If Fts3Expr.eType is FTSQUERY_PHRASE and isLoaded is true, then aDoclist 
                   112098: ** points to a malloced buffer, size nDoclist bytes, containing the results 
                   112099: ** of this phrase query in FTS3 doclist format. As usual, the initial 
                   112100: ** "Length" field found in doclists stored on disk is omitted from this 
                   112101: ** buffer.
                   112102: **
                   112103: ** Variable aMI is used only for FTSQUERY_NEAR nodes to store the global
                   112104: ** matchinfo data. If it is not NULL, it points to an array of size nCol*3,
                   112105: ** where nCol is the number of columns in the queried FTS table. The array
                   112106: ** is populated as follows:
                   112107: **
                   112108: **   aMI[iCol*3 + 0] = Undefined
                   112109: **   aMI[iCol*3 + 1] = Number of occurrences
                   112110: **   aMI[iCol*3 + 2] = Number of rows containing at least one instance
                   112111: **
                   112112: ** The aMI array is allocated using sqlite3_malloc(). It should be freed 
                   112113: ** when the expression node is.
                   112114: */
                   112115: struct Fts3Expr {
                   112116:   int eType;                 /* One of the FTSQUERY_XXX values defined below */
                   112117:   int nNear;                 /* Valid if eType==FTSQUERY_NEAR */
                   112118:   Fts3Expr *pParent;         /* pParent->pLeft==this or pParent->pRight==this */
                   112119:   Fts3Expr *pLeft;           /* Left operand */
                   112120:   Fts3Expr *pRight;          /* Right operand */
                   112121:   Fts3Phrase *pPhrase;       /* Valid if eType==FTSQUERY_PHRASE */
                   112122: 
                   112123:   /* The following are used by the fts3_eval.c module. */
                   112124:   sqlite3_int64 iDocid;      /* Current docid */
                   112125:   u8 bEof;                   /* True this expression is at EOF already */
                   112126:   u8 bStart;                 /* True if iDocid is valid */
                   112127:   u8 bDeferred;              /* True if this expression is entirely deferred */
                   112128: 
                   112129:   u32 *aMI;
                   112130: };
                   112131: 
                   112132: /*
                   112133: ** Candidate values for Fts3Query.eType. Note that the order of the first
                   112134: ** four values is in order of precedence when parsing expressions. For 
                   112135: ** example, the following:
                   112136: **
                   112137: **   "a OR b AND c NOT d NEAR e"
                   112138: **
                   112139: ** is equivalent to:
                   112140: **
                   112141: **   "a OR (b AND (c NOT (d NEAR e)))"
                   112142: */
                   112143: #define FTSQUERY_NEAR   1
                   112144: #define FTSQUERY_NOT    2
                   112145: #define FTSQUERY_AND    3
                   112146: #define FTSQUERY_OR     4
                   112147: #define FTSQUERY_PHRASE 5
                   112148: 
                   112149: 
                   112150: /* fts3_write.c */
                   112151: SQLITE_PRIVATE int sqlite3Fts3UpdateMethod(sqlite3_vtab*,int,sqlite3_value**,sqlite3_int64*);
                   112152: SQLITE_PRIVATE int sqlite3Fts3PendingTermsFlush(Fts3Table *);
                   112153: SQLITE_PRIVATE void sqlite3Fts3PendingTermsClear(Fts3Table *);
                   112154: SQLITE_PRIVATE int sqlite3Fts3Optimize(Fts3Table *);
                   112155: SQLITE_PRIVATE int sqlite3Fts3SegReaderNew(int, sqlite3_int64,
                   112156:   sqlite3_int64, sqlite3_int64, const char *, int, Fts3SegReader**);
                   112157: SQLITE_PRIVATE int sqlite3Fts3SegReaderPending(
                   112158:   Fts3Table*,int,const char*,int,int,Fts3SegReader**);
                   112159: SQLITE_PRIVATE void sqlite3Fts3SegReaderFree(Fts3SegReader *);
                   112160: SQLITE_PRIVATE int sqlite3Fts3AllSegdirs(Fts3Table*, int, int, sqlite3_stmt **);
                   112161: SQLITE_PRIVATE int sqlite3Fts3ReadLock(Fts3Table *);
                   112162: SQLITE_PRIVATE int sqlite3Fts3ReadBlock(Fts3Table*, sqlite3_int64, char **, int*, int*);
                   112163: 
                   112164: SQLITE_PRIVATE int sqlite3Fts3SelectDoctotal(Fts3Table *, sqlite3_stmt **);
                   112165: SQLITE_PRIVATE int sqlite3Fts3SelectDocsize(Fts3Table *, sqlite3_int64, sqlite3_stmt **);
                   112166: 
                   112167: SQLITE_PRIVATE void sqlite3Fts3FreeDeferredTokens(Fts3Cursor *);
                   112168: SQLITE_PRIVATE int sqlite3Fts3DeferToken(Fts3Cursor *, Fts3PhraseToken *, int);
                   112169: SQLITE_PRIVATE int sqlite3Fts3CacheDeferredDoclists(Fts3Cursor *);
                   112170: SQLITE_PRIVATE void sqlite3Fts3FreeDeferredDoclists(Fts3Cursor *);
                   112171: SQLITE_PRIVATE void sqlite3Fts3SegmentsClose(Fts3Table *);
                   112172: 
                   112173: /* Special values interpreted by sqlite3SegReaderCursor() */
                   112174: #define FTS3_SEGCURSOR_PENDING        -1
                   112175: #define FTS3_SEGCURSOR_ALL            -2
                   112176: 
                   112177: SQLITE_PRIVATE int sqlite3Fts3SegReaderStart(Fts3Table*, Fts3MultiSegReader*, Fts3SegFilter*);
                   112178: SQLITE_PRIVATE int sqlite3Fts3SegReaderStep(Fts3Table *, Fts3MultiSegReader *);
                   112179: SQLITE_PRIVATE void sqlite3Fts3SegReaderFinish(Fts3MultiSegReader *);
                   112180: 
                   112181: SQLITE_PRIVATE int sqlite3Fts3SegReaderCursor(
                   112182:     Fts3Table *, int, int, const char *, int, int, int, Fts3MultiSegReader *);
                   112183: 
                   112184: /* Flags allowed as part of the 4th argument to SegmentReaderIterate() */
                   112185: #define FTS3_SEGMENT_REQUIRE_POS   0x00000001
                   112186: #define FTS3_SEGMENT_IGNORE_EMPTY  0x00000002
                   112187: #define FTS3_SEGMENT_COLUMN_FILTER 0x00000004
                   112188: #define FTS3_SEGMENT_PREFIX        0x00000008
                   112189: #define FTS3_SEGMENT_SCAN          0x00000010
                   112190: 
                   112191: /* Type passed as 4th argument to SegmentReaderIterate() */
                   112192: struct Fts3SegFilter {
                   112193:   const char *zTerm;
                   112194:   int nTerm;
                   112195:   int iCol;
                   112196:   int flags;
                   112197: };
                   112198: 
                   112199: struct Fts3MultiSegReader {
                   112200:   /* Used internally by sqlite3Fts3SegReaderXXX() calls */
                   112201:   Fts3SegReader **apSegment;      /* Array of Fts3SegReader objects */
                   112202:   int nSegment;                   /* Size of apSegment array */
                   112203:   int nAdvance;                   /* How many seg-readers to advance */
                   112204:   Fts3SegFilter *pFilter;         /* Pointer to filter object */
                   112205:   char *aBuffer;                  /* Buffer to merge doclists in */
                   112206:   int nBuffer;                    /* Allocated size of aBuffer[] in bytes */
                   112207: 
                   112208:   int iColFilter;                 /* If >=0, filter for this column */
                   112209:   int bRestart;
                   112210: 
                   112211:   /* Used by fts3.c only. */
                   112212:   int nCost;                      /* Cost of running iterator */
                   112213:   int bLookup;                    /* True if a lookup of a single entry. */
                   112214: 
                   112215:   /* Output values. Valid only after Fts3SegReaderStep() returns SQLITE_ROW. */
                   112216:   char *zTerm;                    /* Pointer to term buffer */
                   112217:   int nTerm;                      /* Size of zTerm in bytes */
                   112218:   char *aDoclist;                 /* Pointer to doclist buffer */
                   112219:   int nDoclist;                   /* Size of aDoclist[] in bytes */
                   112220: };
                   112221: 
                   112222: /* fts3.c */
                   112223: SQLITE_PRIVATE int sqlite3Fts3PutVarint(char *, sqlite3_int64);
                   112224: SQLITE_PRIVATE int sqlite3Fts3GetVarint(const char *, sqlite_int64 *);
                   112225: SQLITE_PRIVATE int sqlite3Fts3GetVarint32(const char *, int *);
                   112226: SQLITE_PRIVATE int sqlite3Fts3VarintLen(sqlite3_uint64);
                   112227: SQLITE_PRIVATE void sqlite3Fts3Dequote(char *);
                   112228: SQLITE_PRIVATE void sqlite3Fts3DoclistPrev(int,char*,int,char**,sqlite3_int64*,int*,u8*);
                   112229: 
                   112230: SQLITE_PRIVATE int sqlite3Fts3EvalPhraseStats(Fts3Cursor *, Fts3Expr *, u32 *);
                   112231: 
                   112232: /* fts3_tokenizer.c */
                   112233: SQLITE_PRIVATE const char *sqlite3Fts3NextToken(const char *, int *);
                   112234: SQLITE_PRIVATE int sqlite3Fts3InitHashTable(sqlite3 *, Fts3Hash *, const char *);
                   112235: SQLITE_PRIVATE int sqlite3Fts3InitTokenizer(Fts3Hash *pHash, const char *, 
                   112236:     sqlite3_tokenizer **, char **
                   112237: );
                   112238: SQLITE_PRIVATE int sqlite3Fts3IsIdChar(char);
                   112239: 
                   112240: /* fts3_snippet.c */
                   112241: SQLITE_PRIVATE void sqlite3Fts3Offsets(sqlite3_context*, Fts3Cursor*);
                   112242: SQLITE_PRIVATE void sqlite3Fts3Snippet(sqlite3_context *, Fts3Cursor *, const char *,
                   112243:   const char *, const char *, int, int
                   112244: );
                   112245: SQLITE_PRIVATE void sqlite3Fts3Matchinfo(sqlite3_context *, Fts3Cursor *, const char *);
                   112246: 
                   112247: /* fts3_expr.c */
                   112248: SQLITE_PRIVATE int sqlite3Fts3ExprParse(sqlite3_tokenizer *, 
                   112249:   char **, int, int, const char *, int, Fts3Expr **
                   112250: );
                   112251: SQLITE_PRIVATE void sqlite3Fts3ExprFree(Fts3Expr *);
                   112252: #ifdef SQLITE_TEST
                   112253: SQLITE_PRIVATE int sqlite3Fts3ExprInitTestInterface(sqlite3 *db);
                   112254: SQLITE_PRIVATE int sqlite3Fts3InitTerm(sqlite3 *db);
                   112255: #endif
                   112256: 
                   112257: /* fts3_aux.c */
                   112258: SQLITE_PRIVATE int sqlite3Fts3InitAux(sqlite3 *db);
                   112259: 
                   112260: SQLITE_PRIVATE int sqlite3Fts3TermSegReaderCursor(
                   112261:   Fts3Cursor *pCsr,               /* Virtual table cursor handle */
                   112262:   const char *zTerm,              /* Term to query for */
                   112263:   int nTerm,                      /* Size of zTerm in bytes */
                   112264:   int isPrefix,                   /* True for a prefix search */
                   112265:   Fts3MultiSegReader **ppSegcsr   /* OUT: Allocated seg-reader cursor */
                   112266: );
                   112267: 
                   112268: SQLITE_PRIVATE void sqlite3Fts3EvalPhraseCleanup(Fts3Phrase *);
                   112269: 
                   112270: SQLITE_PRIVATE int sqlite3Fts3EvalStart(Fts3Cursor *, Fts3Expr *, int);
                   112271: SQLITE_PRIVATE int sqlite3Fts3EvalNext(Fts3Cursor *pCsr);
                   112272: 
                   112273: SQLITE_PRIVATE int sqlite3Fts3MsrIncrStart(
                   112274:     Fts3Table*, Fts3MultiSegReader*, int, const char*, int);
                   112275: SQLITE_PRIVATE int sqlite3Fts3MsrIncrNext(
                   112276:     Fts3Table *, Fts3MultiSegReader *, sqlite3_int64 *, char **, int *);
                   112277: SQLITE_PRIVATE char *sqlite3Fts3EvalPhrasePoslist(Fts3Cursor *, Fts3Expr *, int iCol); 
                   112278: SQLITE_PRIVATE int sqlite3Fts3MsrOvfl(Fts3Cursor *, Fts3MultiSegReader *, int *);
                   112279: SQLITE_PRIVATE int sqlite3Fts3MsrIncrRestart(Fts3MultiSegReader *pCsr);
                   112280: 
                   112281: SQLITE_PRIVATE int sqlite3Fts3DeferredTokenList(Fts3DeferredToken *, char **, int *);
                   112282: 
                   112283: #endif /* SQLITE_ENABLE_FTS3 */
                   112284: #endif /* _FTSINT_H */
                   112285: 
                   112286: /************** End of fts3Int.h *********************************************/
                   112287: /************** Continuing where we left off in fts3.c ***********************/
                   112288: #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3)
                   112289: 
                   112290: #if defined(SQLITE_ENABLE_FTS3) && !defined(SQLITE_CORE)
                   112291: # define SQLITE_CORE 1
                   112292: #endif
                   112293: 
                   112294: 
                   112295: #ifndef SQLITE_CORE 
                   112296:   SQLITE_EXTENSION_INIT1
                   112297: #endif
                   112298: 
                   112299: /* 
                   112300: ** Write a 64-bit variable-length integer to memory starting at p[0].
                   112301: ** The length of data written will be between 1 and FTS3_VARINT_MAX bytes.
                   112302: ** The number of bytes written is returned.
                   112303: */
                   112304: SQLITE_PRIVATE int sqlite3Fts3PutVarint(char *p, sqlite_int64 v){
                   112305:   unsigned char *q = (unsigned char *) p;
                   112306:   sqlite_uint64 vu = v;
                   112307:   do{
                   112308:     *q++ = (unsigned char) ((vu & 0x7f) | 0x80);
                   112309:     vu >>= 7;
                   112310:   }while( vu!=0 );
                   112311:   q[-1] &= 0x7f;  /* turn off high bit in final byte */
                   112312:   assert( q - (unsigned char *)p <= FTS3_VARINT_MAX );
                   112313:   return (int) (q - (unsigned char *)p);
                   112314: }
                   112315: 
                   112316: /* 
                   112317: ** Read a 64-bit variable-length integer from memory starting at p[0].
                   112318: ** Return the number of bytes read, or 0 on error.
                   112319: ** The value is stored in *v.
                   112320: */
                   112321: SQLITE_PRIVATE int sqlite3Fts3GetVarint(const char *p, sqlite_int64 *v){
                   112322:   const unsigned char *q = (const unsigned char *) p;
                   112323:   sqlite_uint64 x = 0, y = 1;
                   112324:   while( (*q&0x80)==0x80 && q-(unsigned char *)p<FTS3_VARINT_MAX ){
                   112325:     x += y * (*q++ & 0x7f);
                   112326:     y <<= 7;
                   112327:   }
                   112328:   x += y * (*q++);
                   112329:   *v = (sqlite_int64) x;
                   112330:   return (int) (q - (unsigned char *)p);
                   112331: }
                   112332: 
                   112333: /*
                   112334: ** Similar to sqlite3Fts3GetVarint(), except that the output is truncated to a
                   112335: ** 32-bit integer before it is returned.
                   112336: */
                   112337: SQLITE_PRIVATE int sqlite3Fts3GetVarint32(const char *p, int *pi){
                   112338:  sqlite_int64 i;
                   112339:  int ret = sqlite3Fts3GetVarint(p, &i);
                   112340:  *pi = (int) i;
                   112341:  return ret;
                   112342: }
                   112343: 
                   112344: /*
                   112345: ** Return the number of bytes required to encode v as a varint
                   112346: */
                   112347: SQLITE_PRIVATE int sqlite3Fts3VarintLen(sqlite3_uint64 v){
                   112348:   int i = 0;
                   112349:   do{
                   112350:     i++;
                   112351:     v >>= 7;
                   112352:   }while( v!=0 );
                   112353:   return i;
                   112354: }
                   112355: 
                   112356: /*
                   112357: ** Convert an SQL-style quoted string into a normal string by removing
                   112358: ** the quote characters.  The conversion is done in-place.  If the
                   112359: ** input does not begin with a quote character, then this routine
                   112360: ** is a no-op.
                   112361: **
                   112362: ** Examples:
                   112363: **
                   112364: **     "abc"   becomes   abc
                   112365: **     'xyz'   becomes   xyz
                   112366: **     [pqr]   becomes   pqr
                   112367: **     `mno`   becomes   mno
                   112368: **
                   112369: */
                   112370: SQLITE_PRIVATE void sqlite3Fts3Dequote(char *z){
                   112371:   char quote;                     /* Quote character (if any ) */
                   112372: 
                   112373:   quote = z[0];
                   112374:   if( quote=='[' || quote=='\'' || quote=='"' || quote=='`' ){
                   112375:     int iIn = 1;                  /* Index of next byte to read from input */
                   112376:     int iOut = 0;                 /* Index of next byte to write to output */
                   112377: 
                   112378:     /* If the first byte was a '[', then the close-quote character is a ']' */
                   112379:     if( quote=='[' ) quote = ']';  
                   112380: 
                   112381:     while( ALWAYS(z[iIn]) ){
                   112382:       if( z[iIn]==quote ){
                   112383:         if( z[iIn+1]!=quote ) break;
                   112384:         z[iOut++] = quote;
                   112385:         iIn += 2;
                   112386:       }else{
                   112387:         z[iOut++] = z[iIn++];
                   112388:       }
                   112389:     }
                   112390:     z[iOut] = '\0';
                   112391:   }
                   112392: }
                   112393: 
                   112394: /*
                   112395: ** Read a single varint from the doclist at *pp and advance *pp to point
                   112396: ** to the first byte past the end of the varint.  Add the value of the varint
                   112397: ** to *pVal.
                   112398: */
                   112399: static void fts3GetDeltaVarint(char **pp, sqlite3_int64 *pVal){
                   112400:   sqlite3_int64 iVal;
                   112401:   *pp += sqlite3Fts3GetVarint(*pp, &iVal);
                   112402:   *pVal += iVal;
                   112403: }
                   112404: 
                   112405: /*
                   112406: ** When this function is called, *pp points to the first byte following a
                   112407: ** varint that is part of a doclist (or position-list, or any other list
                   112408: ** of varints). This function moves *pp to point to the start of that varint,
                   112409: ** and sets *pVal by the varint value.
                   112410: **
                   112411: ** Argument pStart points to the first byte of the doclist that the
                   112412: ** varint is part of.
                   112413: */
                   112414: static void fts3GetReverseVarint(
                   112415:   char **pp, 
                   112416:   char *pStart, 
                   112417:   sqlite3_int64 *pVal
                   112418: ){
                   112419:   sqlite3_int64 iVal;
                   112420:   char *p = *pp;
                   112421: 
                   112422:   /* Pointer p now points at the first byte past the varint we are 
                   112423:   ** interested in. So, unless the doclist is corrupt, the 0x80 bit is
                   112424:   ** clear on character p[-1]. */
                   112425:   for(p = (*pp)-2; p>=pStart && *p&0x80; p--);
                   112426:   p++;
                   112427:   *pp = p;
                   112428: 
                   112429:   sqlite3Fts3GetVarint(p, &iVal);
                   112430:   *pVal = iVal;
                   112431: }
                   112432: 
                   112433: /*
                   112434: ** The xDisconnect() virtual table method.
                   112435: */
                   112436: static int fts3DisconnectMethod(sqlite3_vtab *pVtab){
                   112437:   Fts3Table *p = (Fts3Table *)pVtab;
                   112438:   int i;
                   112439: 
                   112440:   assert( p->nPendingData==0 );
                   112441:   assert( p->pSegments==0 );
                   112442: 
                   112443:   /* Free any prepared statements held */
                   112444:   for(i=0; i<SizeofArray(p->aStmt); i++){
                   112445:     sqlite3_finalize(p->aStmt[i]);
                   112446:   }
                   112447:   sqlite3_free(p->zSegmentsTbl);
                   112448:   sqlite3_free(p->zReadExprlist);
                   112449:   sqlite3_free(p->zWriteExprlist);
                   112450: 
                   112451:   /* Invoke the tokenizer destructor to free the tokenizer. */
                   112452:   p->pTokenizer->pModule->xDestroy(p->pTokenizer);
                   112453: 
                   112454:   sqlite3_free(p);
                   112455:   return SQLITE_OK;
                   112456: }
                   112457: 
                   112458: /*
                   112459: ** Construct one or more SQL statements from the format string given
                   112460: ** and then evaluate those statements. The success code is written
                   112461: ** into *pRc.
                   112462: **
                   112463: ** If *pRc is initially non-zero then this routine is a no-op.
                   112464: */
                   112465: static void fts3DbExec(
                   112466:   int *pRc,              /* Success code */
                   112467:   sqlite3 *db,           /* Database in which to run SQL */
                   112468:   const char *zFormat,   /* Format string for SQL */
                   112469:   ...                    /* Arguments to the format string */
                   112470: ){
                   112471:   va_list ap;
                   112472:   char *zSql;
                   112473:   if( *pRc ) return;
                   112474:   va_start(ap, zFormat);
                   112475:   zSql = sqlite3_vmprintf(zFormat, ap);
                   112476:   va_end(ap);
                   112477:   if( zSql==0 ){
                   112478:     *pRc = SQLITE_NOMEM;
                   112479:   }else{
                   112480:     *pRc = sqlite3_exec(db, zSql, 0, 0, 0);
                   112481:     sqlite3_free(zSql);
                   112482:   }
                   112483: }
                   112484: 
                   112485: /*
                   112486: ** The xDestroy() virtual table method.
                   112487: */
                   112488: static int fts3DestroyMethod(sqlite3_vtab *pVtab){
                   112489:   int rc = SQLITE_OK;              /* Return code */
                   112490:   Fts3Table *p = (Fts3Table *)pVtab;
                   112491:   sqlite3 *db = p->db;
                   112492: 
                   112493:   /* Drop the shadow tables */
                   112494:   fts3DbExec(&rc, db, "DROP TABLE IF EXISTS %Q.'%q_content'", p->zDb, p->zName);
                   112495:   fts3DbExec(&rc, db, "DROP TABLE IF EXISTS %Q.'%q_segments'", p->zDb,p->zName);
                   112496:   fts3DbExec(&rc, db, "DROP TABLE IF EXISTS %Q.'%q_segdir'", p->zDb, p->zName);
                   112497:   fts3DbExec(&rc, db, "DROP TABLE IF EXISTS %Q.'%q_docsize'", p->zDb, p->zName);
                   112498:   fts3DbExec(&rc, db, "DROP TABLE IF EXISTS %Q.'%q_stat'", p->zDb, p->zName);
                   112499: 
                   112500:   /* If everything has worked, invoke fts3DisconnectMethod() to free the
                   112501:   ** memory associated with the Fts3Table structure and return SQLITE_OK.
                   112502:   ** Otherwise, return an SQLite error code.
                   112503:   */
                   112504:   return (rc==SQLITE_OK ? fts3DisconnectMethod(pVtab) : rc);
                   112505: }
                   112506: 
                   112507: 
                   112508: /*
                   112509: ** Invoke sqlite3_declare_vtab() to declare the schema for the FTS3 table
                   112510: ** passed as the first argument. This is done as part of the xConnect()
                   112511: ** and xCreate() methods.
                   112512: **
                   112513: ** If *pRc is non-zero when this function is called, it is a no-op. 
                   112514: ** Otherwise, if an error occurs, an SQLite error code is stored in *pRc
                   112515: ** before returning.
                   112516: */
                   112517: static void fts3DeclareVtab(int *pRc, Fts3Table *p){
                   112518:   if( *pRc==SQLITE_OK ){
                   112519:     int i;                        /* Iterator variable */
                   112520:     int rc;                       /* Return code */
                   112521:     char *zSql;                   /* SQL statement passed to declare_vtab() */
                   112522:     char *zCols;                  /* List of user defined columns */
                   112523: 
                   112524:     sqlite3_vtab_config(p->db, SQLITE_VTAB_CONSTRAINT_SUPPORT, 1);
                   112525: 
                   112526:     /* Create a list of user columns for the virtual table */
                   112527:     zCols = sqlite3_mprintf("%Q, ", p->azColumn[0]);
                   112528:     for(i=1; zCols && i<p->nColumn; i++){
                   112529:       zCols = sqlite3_mprintf("%z%Q, ", zCols, p->azColumn[i]);
                   112530:     }
                   112531: 
                   112532:     /* Create the whole "CREATE TABLE" statement to pass to SQLite */
                   112533:     zSql = sqlite3_mprintf(
                   112534:         "CREATE TABLE x(%s %Q HIDDEN, docid HIDDEN)", zCols, p->zName
                   112535:     );
                   112536:     if( !zCols || !zSql ){
                   112537:       rc = SQLITE_NOMEM;
                   112538:     }else{
                   112539:       rc = sqlite3_declare_vtab(p->db, zSql);
                   112540:     }
                   112541: 
                   112542:     sqlite3_free(zSql);
                   112543:     sqlite3_free(zCols);
                   112544:     *pRc = rc;
                   112545:   }
                   112546: }
                   112547: 
                   112548: /*
                   112549: ** Create the backing store tables (%_content, %_segments and %_segdir)
                   112550: ** required by the FTS3 table passed as the only argument. This is done
                   112551: ** as part of the vtab xCreate() method.
                   112552: **
                   112553: ** If the p->bHasDocsize boolean is true (indicating that this is an
                   112554: ** FTS4 table, not an FTS3 table) then also create the %_docsize and
                   112555: ** %_stat tables required by FTS4.
                   112556: */
                   112557: static int fts3CreateTables(Fts3Table *p){
                   112558:   int rc = SQLITE_OK;             /* Return code */
                   112559:   int i;                          /* Iterator variable */
                   112560:   char *zContentCols;             /* Columns of %_content table */
                   112561:   sqlite3 *db = p->db;            /* The database connection */
                   112562: 
                   112563:   /* Create a list of user columns for the content table */
                   112564:   zContentCols = sqlite3_mprintf("docid INTEGER PRIMARY KEY");
                   112565:   for(i=0; zContentCols && i<p->nColumn; i++){
                   112566:     char *z = p->azColumn[i];
                   112567:     zContentCols = sqlite3_mprintf("%z, 'c%d%q'", zContentCols, i, z);
                   112568:   }
                   112569:   if( zContentCols==0 ) rc = SQLITE_NOMEM;
                   112570: 
                   112571:   /* Create the content table */
                   112572:   fts3DbExec(&rc, db, 
                   112573:      "CREATE TABLE %Q.'%q_content'(%s)",
                   112574:      p->zDb, p->zName, zContentCols
                   112575:   );
                   112576:   sqlite3_free(zContentCols);
                   112577:   /* Create other tables */
                   112578:   fts3DbExec(&rc, db, 
                   112579:       "CREATE TABLE %Q.'%q_segments'(blockid INTEGER PRIMARY KEY, block BLOB);",
                   112580:       p->zDb, p->zName
                   112581:   );
                   112582:   fts3DbExec(&rc, db, 
                   112583:       "CREATE TABLE %Q.'%q_segdir'("
                   112584:         "level INTEGER,"
                   112585:         "idx INTEGER,"
                   112586:         "start_block INTEGER,"
                   112587:         "leaves_end_block INTEGER,"
                   112588:         "end_block INTEGER,"
                   112589:         "root BLOB,"
                   112590:         "PRIMARY KEY(level, idx)"
                   112591:       ");",
                   112592:       p->zDb, p->zName
                   112593:   );
                   112594:   if( p->bHasDocsize ){
                   112595:     fts3DbExec(&rc, db, 
                   112596:         "CREATE TABLE %Q.'%q_docsize'(docid INTEGER PRIMARY KEY, size BLOB);",
                   112597:         p->zDb, p->zName
                   112598:     );
                   112599:   }
                   112600:   if( p->bHasStat ){
                   112601:     fts3DbExec(&rc, db, 
                   112602:         "CREATE TABLE %Q.'%q_stat'(id INTEGER PRIMARY KEY, value BLOB);",
                   112603:         p->zDb, p->zName
                   112604:     );
                   112605:   }
                   112606:   return rc;
                   112607: }
                   112608: 
                   112609: /*
                   112610: ** Store the current database page-size in bytes in p->nPgsz.
                   112611: **
                   112612: ** If *pRc is non-zero when this function is called, it is a no-op. 
                   112613: ** Otherwise, if an error occurs, an SQLite error code is stored in *pRc
                   112614: ** before returning.
                   112615: */
                   112616: static void fts3DatabasePageSize(int *pRc, Fts3Table *p){
                   112617:   if( *pRc==SQLITE_OK ){
                   112618:     int rc;                       /* Return code */
                   112619:     char *zSql;                   /* SQL text "PRAGMA %Q.page_size" */
                   112620:     sqlite3_stmt *pStmt;          /* Compiled "PRAGMA %Q.page_size" statement */
                   112621:   
                   112622:     zSql = sqlite3_mprintf("PRAGMA %Q.page_size", p->zDb);
                   112623:     if( !zSql ){
                   112624:       rc = SQLITE_NOMEM;
                   112625:     }else{
                   112626:       rc = sqlite3_prepare(p->db, zSql, -1, &pStmt, 0);
                   112627:       if( rc==SQLITE_OK ){
                   112628:         sqlite3_step(pStmt);
                   112629:         p->nPgsz = sqlite3_column_int(pStmt, 0);
                   112630:         rc = sqlite3_finalize(pStmt);
                   112631:       }else if( rc==SQLITE_AUTH ){
                   112632:         p->nPgsz = 1024;
                   112633:         rc = SQLITE_OK;
                   112634:       }
                   112635:     }
                   112636:     assert( p->nPgsz>0 || rc!=SQLITE_OK );
                   112637:     sqlite3_free(zSql);
                   112638:     *pRc = rc;
                   112639:   }
                   112640: }
                   112641: 
                   112642: /*
                   112643: ** "Special" FTS4 arguments are column specifications of the following form:
                   112644: **
                   112645: **   <key> = <value>
                   112646: **
                   112647: ** There may not be whitespace surrounding the "=" character. The <value> 
                   112648: ** term may be quoted, but the <key> may not.
                   112649: */
                   112650: static int fts3IsSpecialColumn(
                   112651:   const char *z, 
                   112652:   int *pnKey,
                   112653:   char **pzValue
                   112654: ){
                   112655:   char *zValue;
                   112656:   const char *zCsr = z;
                   112657: 
                   112658:   while( *zCsr!='=' ){
                   112659:     if( *zCsr=='\0' ) return 0;
                   112660:     zCsr++;
                   112661:   }
                   112662: 
                   112663:   *pnKey = (int)(zCsr-z);
                   112664:   zValue = sqlite3_mprintf("%s", &zCsr[1]);
                   112665:   if( zValue ){
                   112666:     sqlite3Fts3Dequote(zValue);
                   112667:   }
                   112668:   *pzValue = zValue;
                   112669:   return 1;
                   112670: }
                   112671: 
                   112672: /*
                   112673: ** Append the output of a printf() style formatting to an existing string.
                   112674: */
                   112675: static void fts3Appendf(
                   112676:   int *pRc,                       /* IN/OUT: Error code */
                   112677:   char **pz,                      /* IN/OUT: Pointer to string buffer */
                   112678:   const char *zFormat,            /* Printf format string to append */
                   112679:   ...                             /* Arguments for printf format string */
                   112680: ){
                   112681:   if( *pRc==SQLITE_OK ){
                   112682:     va_list ap;
                   112683:     char *z;
                   112684:     va_start(ap, zFormat);
                   112685:     z = sqlite3_vmprintf(zFormat, ap);
                   112686:     if( z && *pz ){
                   112687:       char *z2 = sqlite3_mprintf("%s%s", *pz, z);
                   112688:       sqlite3_free(z);
                   112689:       z = z2;
                   112690:     }
                   112691:     if( z==0 ) *pRc = SQLITE_NOMEM;
                   112692:     va_end(ap);
                   112693:     sqlite3_free(*pz);
                   112694:     *pz = z;
                   112695:   }
                   112696: }
                   112697: 
                   112698: /*
                   112699: ** Return a copy of input string zInput enclosed in double-quotes (") and
                   112700: ** with all double quote characters escaped. For example:
                   112701: **
                   112702: **     fts3QuoteId("un \"zip\"")   ->    "un \"\"zip\"\""
                   112703: **
                   112704: ** The pointer returned points to memory obtained from sqlite3_malloc(). It
                   112705: ** is the callers responsibility to call sqlite3_free() to release this
                   112706: ** memory.
                   112707: */
                   112708: static char *fts3QuoteId(char const *zInput){
                   112709:   int nRet;
                   112710:   char *zRet;
                   112711:   nRet = 2 + strlen(zInput)*2 + 1;
                   112712:   zRet = sqlite3_malloc(nRet);
                   112713:   if( zRet ){
                   112714:     int i;
                   112715:     char *z = zRet;
                   112716:     *(z++) = '"';
                   112717:     for(i=0; zInput[i]; i++){
                   112718:       if( zInput[i]=='"' ) *(z++) = '"';
                   112719:       *(z++) = zInput[i];
                   112720:     }
                   112721:     *(z++) = '"';
                   112722:     *(z++) = '\0';
                   112723:   }
                   112724:   return zRet;
                   112725: }
                   112726: 
                   112727: /*
                   112728: ** Return a list of comma separated SQL expressions that could be used
                   112729: ** in a SELECT statement such as the following:
                   112730: **
                   112731: **     SELECT <list of expressions> FROM %_content AS x ...
                   112732: **
                   112733: ** to return the docid, followed by each column of text data in order
                   112734: ** from left to write. If parameter zFunc is not NULL, then instead of
                   112735: ** being returned directly each column of text data is passed to an SQL
                   112736: ** function named zFunc first. For example, if zFunc is "unzip" and the
                   112737: ** table has the three user-defined columns "a", "b", and "c", the following
                   112738: ** string is returned:
                   112739: **
                   112740: **     "docid, unzip(x.'a'), unzip(x.'b'), unzip(x.'c')"
                   112741: **
                   112742: ** The pointer returned points to a buffer allocated by sqlite3_malloc(). It
                   112743: ** is the responsibility of the caller to eventually free it.
                   112744: **
                   112745: ** If *pRc is not SQLITE_OK when this function is called, it is a no-op (and
                   112746: ** a NULL pointer is returned). Otherwise, if an OOM error is encountered
                   112747: ** by this function, NULL is returned and *pRc is set to SQLITE_NOMEM. If
                   112748: ** no error occurs, *pRc is left unmodified.
                   112749: */
                   112750: static char *fts3ReadExprList(Fts3Table *p, const char *zFunc, int *pRc){
                   112751:   char *zRet = 0;
                   112752:   char *zFree = 0;
                   112753:   char *zFunction;
                   112754:   int i;
                   112755: 
                   112756:   if( !zFunc ){
                   112757:     zFunction = "";
                   112758:   }else{
                   112759:     zFree = zFunction = fts3QuoteId(zFunc);
                   112760:   }
                   112761:   fts3Appendf(pRc, &zRet, "docid");
                   112762:   for(i=0; i<p->nColumn; i++){
                   112763:     fts3Appendf(pRc, &zRet, ",%s(x.'c%d%q')", zFunction, i, p->azColumn[i]);
                   112764:   }
                   112765:   sqlite3_free(zFree);
                   112766:   return zRet;
                   112767: }
                   112768: 
                   112769: /*
                   112770: ** Return a list of N comma separated question marks, where N is the number
                   112771: ** of columns in the %_content table (one for the docid plus one for each
                   112772: ** user-defined text column).
                   112773: **
                   112774: ** If argument zFunc is not NULL, then all but the first question mark
                   112775: ** is preceded by zFunc and an open bracket, and followed by a closed
                   112776: ** bracket. For example, if zFunc is "zip" and the FTS3 table has three 
                   112777: ** user-defined text columns, the following string is returned:
                   112778: **
                   112779: **     "?, zip(?), zip(?), zip(?)"
                   112780: **
                   112781: ** The pointer returned points to a buffer allocated by sqlite3_malloc(). It
                   112782: ** is the responsibility of the caller to eventually free it.
                   112783: **
                   112784: ** If *pRc is not SQLITE_OK when this function is called, it is a no-op (and
                   112785: ** a NULL pointer is returned). Otherwise, if an OOM error is encountered
                   112786: ** by this function, NULL is returned and *pRc is set to SQLITE_NOMEM. If
                   112787: ** no error occurs, *pRc is left unmodified.
                   112788: */
                   112789: static char *fts3WriteExprList(Fts3Table *p, const char *zFunc, int *pRc){
                   112790:   char *zRet = 0;
                   112791:   char *zFree = 0;
                   112792:   char *zFunction;
                   112793:   int i;
                   112794: 
                   112795:   if( !zFunc ){
                   112796:     zFunction = "";
                   112797:   }else{
                   112798:     zFree = zFunction = fts3QuoteId(zFunc);
                   112799:   }
                   112800:   fts3Appendf(pRc, &zRet, "?");
                   112801:   for(i=0; i<p->nColumn; i++){
                   112802:     fts3Appendf(pRc, &zRet, ",%s(?)", zFunction);
                   112803:   }
                   112804:   sqlite3_free(zFree);
                   112805:   return zRet;
                   112806: }
                   112807: 
                   112808: static int fts3GobbleInt(const char **pp, int *pnOut){
                   112809:   const char *p = *pp;
                   112810:   int nInt = 0;
                   112811:   for(p=*pp; p[0]>='0' && p[0]<='9'; p++){
                   112812:     nInt = nInt * 10 + (p[0] - '0');
                   112813:   }
                   112814:   if( p==*pp ) return SQLITE_ERROR;
                   112815:   *pnOut = nInt;
                   112816:   *pp = p;
                   112817:   return SQLITE_OK;
                   112818: }
                   112819: 
                   112820: 
                   112821: static int fts3PrefixParameter(
                   112822:   const char *zParam,             /* ABC in prefix=ABC parameter to parse */
                   112823:   int *pnIndex,                   /* OUT: size of *apIndex[] array */
                   112824:   struct Fts3Index **apIndex,     /* OUT: Array of indexes for this table */
                   112825:   struct Fts3Index **apFree       /* OUT: Free this with sqlite3_free() */
                   112826: ){
                   112827:   struct Fts3Index *aIndex;
                   112828:   int nIndex = 1;
                   112829: 
                   112830:   if( zParam && zParam[0] ){
                   112831:     const char *p;
                   112832:     nIndex++;
                   112833:     for(p=zParam; *p; p++){
                   112834:       if( *p==',' ) nIndex++;
                   112835:     }
                   112836:   }
                   112837: 
                   112838:   aIndex = sqlite3_malloc(sizeof(struct Fts3Index) * nIndex);
                   112839:   *apIndex = *apFree = aIndex;
                   112840:   *pnIndex = nIndex;
                   112841:   if( !aIndex ){
                   112842:     return SQLITE_NOMEM;
                   112843:   }
                   112844: 
                   112845:   memset(aIndex, 0, sizeof(struct Fts3Index) * nIndex);
                   112846:   if( zParam ){
                   112847:     const char *p = zParam;
                   112848:     int i;
                   112849:     for(i=1; i<nIndex; i++){
                   112850:       int nPrefix;
                   112851:       if( fts3GobbleInt(&p, &nPrefix) ) return SQLITE_ERROR;
                   112852:       aIndex[i].nPrefix = nPrefix;
                   112853:       p++;
                   112854:     }
                   112855:   }
                   112856: 
                   112857:   return SQLITE_OK;
                   112858: }
                   112859: 
                   112860: /*
                   112861: ** This function is the implementation of both the xConnect and xCreate
                   112862: ** methods of the FTS3 virtual table.
                   112863: **
                   112864: ** The argv[] array contains the following:
                   112865: **
                   112866: **   argv[0]   -> module name  ("fts3" or "fts4")
                   112867: **   argv[1]   -> database name
                   112868: **   argv[2]   -> table name
                   112869: **   argv[...] -> "column name" and other module argument fields.
                   112870: */
                   112871: static int fts3InitVtab(
                   112872:   int isCreate,                   /* True for xCreate, false for xConnect */
                   112873:   sqlite3 *db,                    /* The SQLite database connection */
                   112874:   void *pAux,                     /* Hash table containing tokenizers */
                   112875:   int argc,                       /* Number of elements in argv array */
                   112876:   const char * const *argv,       /* xCreate/xConnect argument array */
                   112877:   sqlite3_vtab **ppVTab,          /* Write the resulting vtab structure here */
                   112878:   char **pzErr                    /* Write any error message here */
                   112879: ){
                   112880:   Fts3Hash *pHash = (Fts3Hash *)pAux;
                   112881:   Fts3Table *p = 0;               /* Pointer to allocated vtab */
                   112882:   int rc = SQLITE_OK;             /* Return code */
                   112883:   int i;                          /* Iterator variable */
                   112884:   int nByte;                      /* Size of allocation used for *p */
                   112885:   int iCol;                       /* Column index */
                   112886:   int nString = 0;                /* Bytes required to hold all column names */
                   112887:   int nCol = 0;                   /* Number of columns in the FTS table */
                   112888:   char *zCsr;                     /* Space for holding column names */
                   112889:   int nDb;                        /* Bytes required to hold database name */
                   112890:   int nName;                      /* Bytes required to hold table name */
                   112891:   int isFts4 = (argv[0][3]=='4'); /* True for FTS4, false for FTS3 */
                   112892:   const char **aCol;              /* Array of column names */
                   112893:   sqlite3_tokenizer *pTokenizer = 0;        /* Tokenizer for this table */
                   112894: 
                   112895:   int nIndex;                     /* Size of aIndex[] array */
                   112896:   struct Fts3Index *aIndex;       /* Array of indexes for this table */
                   112897:   struct Fts3Index *aFree = 0;    /* Free this before returning */
                   112898: 
                   112899:   /* The results of parsing supported FTS4 key=value options: */
                   112900:   int bNoDocsize = 0;             /* True to omit %_docsize table */
                   112901:   int bDescIdx = 0;               /* True to store descending indexes */
                   112902:   char *zPrefix = 0;              /* Prefix parameter value (or NULL) */
                   112903:   char *zCompress = 0;            /* compress=? parameter (or NULL) */
                   112904:   char *zUncompress = 0;          /* uncompress=? parameter (or NULL) */
                   112905: 
                   112906:   assert( strlen(argv[0])==4 );
                   112907:   assert( (sqlite3_strnicmp(argv[0], "fts4", 4)==0 && isFts4)
                   112908:        || (sqlite3_strnicmp(argv[0], "fts3", 4)==0 && !isFts4)
                   112909:   );
                   112910: 
                   112911:   nDb = (int)strlen(argv[1]) + 1;
                   112912:   nName = (int)strlen(argv[2]) + 1;
                   112913: 
                   112914:   aCol = (const char **)sqlite3_malloc(sizeof(const char *) * (argc-2) );
                   112915:   if( !aCol ) return SQLITE_NOMEM;
                   112916:   memset((void *)aCol, 0, sizeof(const char *) * (argc-2));
                   112917: 
                   112918:   /* Loop through all of the arguments passed by the user to the FTS3/4
                   112919:   ** module (i.e. all the column names and special arguments). This loop
                   112920:   ** does the following:
                   112921:   **
                   112922:   **   + Figures out the number of columns the FTSX table will have, and
                   112923:   **     the number of bytes of space that must be allocated to store copies
                   112924:   **     of the column names.
                   112925:   **
                   112926:   **   + If there is a tokenizer specification included in the arguments,
                   112927:   **     initializes the tokenizer pTokenizer.
                   112928:   */
                   112929:   for(i=3; rc==SQLITE_OK && i<argc; i++){
                   112930:     char const *z = argv[i];
                   112931:     int nKey;
                   112932:     char *zVal;
                   112933: 
                   112934:     /* Check if this is a tokenizer specification */
                   112935:     if( !pTokenizer 
                   112936:      && strlen(z)>8
                   112937:      && 0==sqlite3_strnicmp(z, "tokenize", 8) 
                   112938:      && 0==sqlite3Fts3IsIdChar(z[8])
                   112939:     ){
                   112940:       rc = sqlite3Fts3InitTokenizer(pHash, &z[9], &pTokenizer, pzErr);
                   112941:     }
                   112942: 
                   112943:     /* Check if it is an FTS4 special argument. */
                   112944:     else if( isFts4 && fts3IsSpecialColumn(z, &nKey, &zVal) ){
                   112945:       struct Fts4Option {
                   112946:         const char *zOpt;
                   112947:         int nOpt;
                   112948:         char **pzVar;
                   112949:       } aFts4Opt[] = {
                   112950:         { "matchinfo",   9, 0 },            /* 0 -> MATCHINFO */
                   112951:         { "prefix",      6, 0 },            /* 1 -> PREFIX */
                   112952:         { "compress",    8, 0 },            /* 2 -> COMPRESS */
                   112953:         { "uncompress", 10, 0 },            /* 3 -> UNCOMPRESS */
                   112954:         { "order",       5, 0 }             /* 4 -> ORDER */
                   112955:       };
                   112956: 
                   112957:       int iOpt;
                   112958:       if( !zVal ){
                   112959:         rc = SQLITE_NOMEM;
                   112960:       }else{
                   112961:         for(iOpt=0; iOpt<SizeofArray(aFts4Opt); iOpt++){
                   112962:           struct Fts4Option *pOp = &aFts4Opt[iOpt];
                   112963:           if( nKey==pOp->nOpt && !sqlite3_strnicmp(z, pOp->zOpt, pOp->nOpt) ){
                   112964:             break;
                   112965:           }
                   112966:         }
                   112967:         if( iOpt==SizeofArray(aFts4Opt) ){
                   112968:           *pzErr = sqlite3_mprintf("unrecognized parameter: %s", z);
                   112969:           rc = SQLITE_ERROR;
                   112970:         }else{
                   112971:           switch( iOpt ){
                   112972:             case 0:               /* MATCHINFO */
                   112973:               if( strlen(zVal)!=4 || sqlite3_strnicmp(zVal, "fts3", 4) ){
                   112974:                 *pzErr = sqlite3_mprintf("unrecognized matchinfo: %s", zVal);
                   112975:                 rc = SQLITE_ERROR;
                   112976:               }
                   112977:               bNoDocsize = 1;
                   112978:               break;
                   112979: 
                   112980:             case 1:               /* PREFIX */
                   112981:               sqlite3_free(zPrefix);
                   112982:               zPrefix = zVal;
                   112983:               zVal = 0;
                   112984:               break;
                   112985: 
                   112986:             case 2:               /* COMPRESS */
                   112987:               sqlite3_free(zCompress);
                   112988:               zCompress = zVal;
                   112989:               zVal = 0;
                   112990:               break;
                   112991: 
                   112992:             case 3:               /* UNCOMPRESS */
                   112993:               sqlite3_free(zUncompress);
                   112994:               zUncompress = zVal;
                   112995:               zVal = 0;
                   112996:               break;
                   112997: 
                   112998:             case 4:               /* ORDER */
                   112999:               if( (strlen(zVal)!=3 || sqlite3_strnicmp(zVal, "asc", 3)) 
                   113000:                && (strlen(zVal)!=4 || sqlite3_strnicmp(zVal, "desc", 3)) 
                   113001:               ){
                   113002:                 *pzErr = sqlite3_mprintf("unrecognized order: %s", zVal);
                   113003:                 rc = SQLITE_ERROR;
                   113004:               }
                   113005:               bDescIdx = (zVal[0]=='d' || zVal[0]=='D');
                   113006:               break;
                   113007:           }
                   113008:         }
                   113009:         sqlite3_free(zVal);
                   113010:       }
                   113011:     }
                   113012: 
                   113013:     /* Otherwise, the argument is a column name. */
                   113014:     else {
                   113015:       nString += (int)(strlen(z) + 1);
                   113016:       aCol[nCol++] = z;
                   113017:     }
                   113018:   }
                   113019:   if( rc!=SQLITE_OK ) goto fts3_init_out;
                   113020: 
                   113021:   if( nCol==0 ){
                   113022:     assert( nString==0 );
                   113023:     aCol[0] = "content";
                   113024:     nString = 8;
                   113025:     nCol = 1;
                   113026:   }
                   113027: 
                   113028:   if( pTokenizer==0 ){
                   113029:     rc = sqlite3Fts3InitTokenizer(pHash, "simple", &pTokenizer, pzErr);
                   113030:     if( rc!=SQLITE_OK ) goto fts3_init_out;
                   113031:   }
                   113032:   assert( pTokenizer );
                   113033: 
                   113034:   rc = fts3PrefixParameter(zPrefix, &nIndex, &aIndex, &aFree);
                   113035:   if( rc==SQLITE_ERROR ){
                   113036:     assert( zPrefix );
                   113037:     *pzErr = sqlite3_mprintf("error parsing prefix parameter: %s", zPrefix);
                   113038:   }
                   113039:   if( rc!=SQLITE_OK ) goto fts3_init_out;
                   113040: 
                   113041:   /* Allocate and populate the Fts3Table structure. */
                   113042:   nByte = sizeof(Fts3Table) +                  /* Fts3Table */
                   113043:           nCol * sizeof(char *) +              /* azColumn */
                   113044:           nIndex * sizeof(struct Fts3Index) +  /* aIndex */
                   113045:           nName +                              /* zName */
                   113046:           nDb +                                /* zDb */
                   113047:           nString;                             /* Space for azColumn strings */
                   113048:   p = (Fts3Table*)sqlite3_malloc(nByte);
                   113049:   if( p==0 ){
                   113050:     rc = SQLITE_NOMEM;
                   113051:     goto fts3_init_out;
                   113052:   }
                   113053:   memset(p, 0, nByte);
                   113054:   p->db = db;
                   113055:   p->nColumn = nCol;
                   113056:   p->nPendingData = 0;
                   113057:   p->azColumn = (char **)&p[1];
                   113058:   p->pTokenizer = pTokenizer;
                   113059:   p->nMaxPendingData = FTS3_MAX_PENDING_DATA;
                   113060:   p->bHasDocsize = (isFts4 && bNoDocsize==0);
                   113061:   p->bHasStat = isFts4;
                   113062:   p->bDescIdx = bDescIdx;
                   113063:   TESTONLY( p->inTransaction = -1 );
                   113064:   TESTONLY( p->mxSavepoint = -1 );
                   113065: 
                   113066:   p->aIndex = (struct Fts3Index *)&p->azColumn[nCol];
                   113067:   memcpy(p->aIndex, aIndex, sizeof(struct Fts3Index) * nIndex);
                   113068:   p->nIndex = nIndex;
                   113069:   for(i=0; i<nIndex; i++){
                   113070:     fts3HashInit(&p->aIndex[i].hPending, FTS3_HASH_STRING, 1);
                   113071:   }
                   113072: 
                   113073:   /* Fill in the zName and zDb fields of the vtab structure. */
                   113074:   zCsr = (char *)&p->aIndex[nIndex];
                   113075:   p->zName = zCsr;
                   113076:   memcpy(zCsr, argv[2], nName);
                   113077:   zCsr += nName;
                   113078:   p->zDb = zCsr;
                   113079:   memcpy(zCsr, argv[1], nDb);
                   113080:   zCsr += nDb;
                   113081: 
                   113082:   /* Fill in the azColumn array */
                   113083:   for(iCol=0; iCol<nCol; iCol++){
                   113084:     char *z; 
                   113085:     int n = 0;
                   113086:     z = (char *)sqlite3Fts3NextToken(aCol[iCol], &n);
                   113087:     memcpy(zCsr, z, n);
                   113088:     zCsr[n] = '\0';
                   113089:     sqlite3Fts3Dequote(zCsr);
                   113090:     p->azColumn[iCol] = zCsr;
                   113091:     zCsr += n+1;
                   113092:     assert( zCsr <= &((char *)p)[nByte] );
                   113093:   }
                   113094: 
                   113095:   if( (zCompress==0)!=(zUncompress==0) ){
                   113096:     char const *zMiss = (zCompress==0 ? "compress" : "uncompress");
                   113097:     rc = SQLITE_ERROR;
                   113098:     *pzErr = sqlite3_mprintf("missing %s parameter in fts4 constructor", zMiss);
                   113099:   }
                   113100:   p->zReadExprlist = fts3ReadExprList(p, zUncompress, &rc);
                   113101:   p->zWriteExprlist = fts3WriteExprList(p, zCompress, &rc);
                   113102:   if( rc!=SQLITE_OK ) goto fts3_init_out;
                   113103: 
                   113104:   /* If this is an xCreate call, create the underlying tables in the 
                   113105:   ** database. TODO: For xConnect(), it could verify that said tables exist.
                   113106:   */
                   113107:   if( isCreate ){
                   113108:     rc = fts3CreateTables(p);
                   113109:   }
                   113110: 
                   113111:   /* Figure out the page-size for the database. This is required in order to
                   113112:   ** estimate the cost of loading large doclists from the database.  */
                   113113:   fts3DatabasePageSize(&rc, p);
                   113114:   p->nNodeSize = p->nPgsz-35;
                   113115: 
                   113116:   /* Declare the table schema to SQLite. */
                   113117:   fts3DeclareVtab(&rc, p);
                   113118: 
                   113119: fts3_init_out:
                   113120:   sqlite3_free(zPrefix);
                   113121:   sqlite3_free(aFree);
                   113122:   sqlite3_free(zCompress);
                   113123:   sqlite3_free(zUncompress);
                   113124:   sqlite3_free((void *)aCol);
                   113125:   if( rc!=SQLITE_OK ){
                   113126:     if( p ){
                   113127:       fts3DisconnectMethod((sqlite3_vtab *)p);
                   113128:     }else if( pTokenizer ){
                   113129:       pTokenizer->pModule->xDestroy(pTokenizer);
                   113130:     }
                   113131:   }else{
                   113132:     assert( p->pSegments==0 );
                   113133:     *ppVTab = &p->base;
                   113134:   }
                   113135:   return rc;
                   113136: }
                   113137: 
                   113138: /*
                   113139: ** The xConnect() and xCreate() methods for the virtual table. All the
                   113140: ** work is done in function fts3InitVtab().
                   113141: */
                   113142: static int fts3ConnectMethod(
                   113143:   sqlite3 *db,                    /* Database connection */
                   113144:   void *pAux,                     /* Pointer to tokenizer hash table */
                   113145:   int argc,                       /* Number of elements in argv array */
                   113146:   const char * const *argv,       /* xCreate/xConnect argument array */
                   113147:   sqlite3_vtab **ppVtab,          /* OUT: New sqlite3_vtab object */
                   113148:   char **pzErr                    /* OUT: sqlite3_malloc'd error message */
                   113149: ){
                   113150:   return fts3InitVtab(0, db, pAux, argc, argv, ppVtab, pzErr);
                   113151: }
                   113152: static int fts3CreateMethod(
                   113153:   sqlite3 *db,                    /* Database connection */
                   113154:   void *pAux,                     /* Pointer to tokenizer hash table */
                   113155:   int argc,                       /* Number of elements in argv array */
                   113156:   const char * const *argv,       /* xCreate/xConnect argument array */
                   113157:   sqlite3_vtab **ppVtab,          /* OUT: New sqlite3_vtab object */
                   113158:   char **pzErr                    /* OUT: sqlite3_malloc'd error message */
                   113159: ){
                   113160:   return fts3InitVtab(1, db, pAux, argc, argv, ppVtab, pzErr);
                   113161: }
                   113162: 
                   113163: /* 
                   113164: ** Implementation of the xBestIndex method for FTS3 tables. There
                   113165: ** are three possible strategies, in order of preference:
                   113166: **
                   113167: **   1. Direct lookup by rowid or docid. 
                   113168: **   2. Full-text search using a MATCH operator on a non-docid column.
                   113169: **   3. Linear scan of %_content table.
                   113170: */
                   113171: static int fts3BestIndexMethod(sqlite3_vtab *pVTab, sqlite3_index_info *pInfo){
                   113172:   Fts3Table *p = (Fts3Table *)pVTab;
                   113173:   int i;                          /* Iterator variable */
                   113174:   int iCons = -1;                 /* Index of constraint to use */
                   113175: 
                   113176:   /* By default use a full table scan. This is an expensive option,
                   113177:   ** so search through the constraints to see if a more efficient 
                   113178:   ** strategy is possible.
                   113179:   */
                   113180:   pInfo->idxNum = FTS3_FULLSCAN_SEARCH;
                   113181:   pInfo->estimatedCost = 500000;
                   113182:   for(i=0; i<pInfo->nConstraint; i++){
                   113183:     struct sqlite3_index_constraint *pCons = &pInfo->aConstraint[i];
                   113184:     if( pCons->usable==0 ) continue;
                   113185: 
                   113186:     /* A direct lookup on the rowid or docid column. Assign a cost of 1.0. */
                   113187:     if( pCons->op==SQLITE_INDEX_CONSTRAINT_EQ 
                   113188:      && (pCons->iColumn<0 || pCons->iColumn==p->nColumn+1 )
                   113189:     ){
                   113190:       pInfo->idxNum = FTS3_DOCID_SEARCH;
                   113191:       pInfo->estimatedCost = 1.0;
                   113192:       iCons = i;
                   113193:     }
                   113194: 
                   113195:     /* A MATCH constraint. Use a full-text search.
                   113196:     **
                   113197:     ** If there is more than one MATCH constraint available, use the first
                   113198:     ** one encountered. If there is both a MATCH constraint and a direct
                   113199:     ** rowid/docid lookup, prefer the MATCH strategy. This is done even 
                   113200:     ** though the rowid/docid lookup is faster than a MATCH query, selecting
                   113201:     ** it would lead to an "unable to use function MATCH in the requested 
                   113202:     ** context" error.
                   113203:     */
                   113204:     if( pCons->op==SQLITE_INDEX_CONSTRAINT_MATCH 
                   113205:      && pCons->iColumn>=0 && pCons->iColumn<=p->nColumn
                   113206:     ){
                   113207:       pInfo->idxNum = FTS3_FULLTEXT_SEARCH + pCons->iColumn;
                   113208:       pInfo->estimatedCost = 2.0;
                   113209:       iCons = i;
                   113210:       break;
                   113211:     }
                   113212:   }
                   113213: 
                   113214:   if( iCons>=0 ){
                   113215:     pInfo->aConstraintUsage[iCons].argvIndex = 1;
                   113216:     pInfo->aConstraintUsage[iCons].omit = 1;
                   113217:   } 
                   113218: 
                   113219:   /* Regardless of the strategy selected, FTS can deliver rows in rowid (or
                   113220:   ** docid) order. Both ascending and descending are possible. 
                   113221:   */
                   113222:   if( pInfo->nOrderBy==1 ){
                   113223:     struct sqlite3_index_orderby *pOrder = &pInfo->aOrderBy[0];
                   113224:     if( pOrder->iColumn<0 || pOrder->iColumn==p->nColumn+1 ){
                   113225:       if( pOrder->desc ){
                   113226:         pInfo->idxStr = "DESC";
                   113227:       }else{
                   113228:         pInfo->idxStr = "ASC";
                   113229:       }
                   113230:       pInfo->orderByConsumed = 1;
                   113231:     }
                   113232:   }
                   113233: 
                   113234:   assert( p->pSegments==0 );
                   113235:   return SQLITE_OK;
                   113236: }
                   113237: 
                   113238: /*
                   113239: ** Implementation of xOpen method.
                   113240: */
                   113241: static int fts3OpenMethod(sqlite3_vtab *pVTab, sqlite3_vtab_cursor **ppCsr){
                   113242:   sqlite3_vtab_cursor *pCsr;               /* Allocated cursor */
                   113243: 
                   113244:   UNUSED_PARAMETER(pVTab);
                   113245: 
                   113246:   /* Allocate a buffer large enough for an Fts3Cursor structure. If the
                   113247:   ** allocation succeeds, zero it and return SQLITE_OK. Otherwise, 
                   113248:   ** if the allocation fails, return SQLITE_NOMEM.
                   113249:   */
                   113250:   *ppCsr = pCsr = (sqlite3_vtab_cursor *)sqlite3_malloc(sizeof(Fts3Cursor));
                   113251:   if( !pCsr ){
                   113252:     return SQLITE_NOMEM;
                   113253:   }
                   113254:   memset(pCsr, 0, sizeof(Fts3Cursor));
                   113255:   return SQLITE_OK;
                   113256: }
                   113257: 
                   113258: /*
                   113259: ** Close the cursor.  For additional information see the documentation
                   113260: ** on the xClose method of the virtual table interface.
                   113261: */
                   113262: static int fts3CloseMethod(sqlite3_vtab_cursor *pCursor){
                   113263:   Fts3Cursor *pCsr = (Fts3Cursor *)pCursor;
                   113264:   assert( ((Fts3Table *)pCsr->base.pVtab)->pSegments==0 );
                   113265:   sqlite3_finalize(pCsr->pStmt);
                   113266:   sqlite3Fts3ExprFree(pCsr->pExpr);
                   113267:   sqlite3Fts3FreeDeferredTokens(pCsr);
                   113268:   sqlite3_free(pCsr->aDoclist);
                   113269:   sqlite3_free(pCsr->aMatchinfo);
                   113270:   assert( ((Fts3Table *)pCsr->base.pVtab)->pSegments==0 );
                   113271:   sqlite3_free(pCsr);
                   113272:   return SQLITE_OK;
                   113273: }
                   113274: 
                   113275: /*
                   113276: ** Position the pCsr->pStmt statement so that it is on the row
                   113277: ** of the %_content table that contains the last match.  Return
                   113278: ** SQLITE_OK on success.  
                   113279: */
                   113280: static int fts3CursorSeek(sqlite3_context *pContext, Fts3Cursor *pCsr){
                   113281:   if( pCsr->isRequireSeek ){
                   113282:     sqlite3_bind_int64(pCsr->pStmt, 1, pCsr->iPrevId);
                   113283:     pCsr->isRequireSeek = 0;
                   113284:     if( SQLITE_ROW==sqlite3_step(pCsr->pStmt) ){
                   113285:       return SQLITE_OK;
                   113286:     }else{
                   113287:       int rc = sqlite3_reset(pCsr->pStmt);
                   113288:       if( rc==SQLITE_OK ){
1.1.1.3 ! misho    113289:         /* If no row was found and no error has occurred, then the %_content
1.1       misho    113290:         ** table is missing a row that is present in the full-text index.
                   113291:         ** The data structures are corrupt.
                   113292:         */
                   113293:         rc = SQLITE_CORRUPT_VTAB;
                   113294:       }
                   113295:       pCsr->isEof = 1;
                   113296:       if( pContext ){
                   113297:         sqlite3_result_error_code(pContext, rc);
                   113298:       }
                   113299:       return rc;
                   113300:     }
                   113301:   }else{
                   113302:     return SQLITE_OK;
                   113303:   }
                   113304: }
                   113305: 
                   113306: /*
                   113307: ** This function is used to process a single interior node when searching
                   113308: ** a b-tree for a term or term prefix. The node data is passed to this 
                   113309: ** function via the zNode/nNode parameters. The term to search for is
                   113310: ** passed in zTerm/nTerm.
                   113311: **
                   113312: ** If piFirst is not NULL, then this function sets *piFirst to the blockid
                   113313: ** of the child node that heads the sub-tree that may contain the term.
                   113314: **
                   113315: ** If piLast is not NULL, then *piLast is set to the right-most child node
                   113316: ** that heads a sub-tree that may contain a term for which zTerm/nTerm is
                   113317: ** a prefix.
                   113318: **
                   113319: ** If an OOM error occurs, SQLITE_NOMEM is returned. Otherwise, SQLITE_OK.
                   113320: */
                   113321: static int fts3ScanInteriorNode(
                   113322:   const char *zTerm,              /* Term to select leaves for */
                   113323:   int nTerm,                      /* Size of term zTerm in bytes */
                   113324:   const char *zNode,              /* Buffer containing segment interior node */
                   113325:   int nNode,                      /* Size of buffer at zNode */
                   113326:   sqlite3_int64 *piFirst,         /* OUT: Selected child node */
                   113327:   sqlite3_int64 *piLast           /* OUT: Selected child node */
                   113328: ){
                   113329:   int rc = SQLITE_OK;             /* Return code */
                   113330:   const char *zCsr = zNode;       /* Cursor to iterate through node */
                   113331:   const char *zEnd = &zCsr[nNode];/* End of interior node buffer */
                   113332:   char *zBuffer = 0;              /* Buffer to load terms into */
                   113333:   int nAlloc = 0;                 /* Size of allocated buffer */
                   113334:   int isFirstTerm = 1;            /* True when processing first term on page */
                   113335:   sqlite3_int64 iChild;           /* Block id of child node to descend to */
                   113336: 
                   113337:   /* Skip over the 'height' varint that occurs at the start of every 
                   113338:   ** interior node. Then load the blockid of the left-child of the b-tree
                   113339:   ** node into variable iChild.  
                   113340:   **
                   113341:   ** Even if the data structure on disk is corrupted, this (reading two
                   113342:   ** varints from the buffer) does not risk an overread. If zNode is a
                   113343:   ** root node, then the buffer comes from a SELECT statement. SQLite does
                   113344:   ** not make this guarantee explicitly, but in practice there are always
                   113345:   ** either more than 20 bytes of allocated space following the nNode bytes of
                   113346:   ** contents, or two zero bytes. Or, if the node is read from the %_segments
                   113347:   ** table, then there are always 20 bytes of zeroed padding following the
                   113348:   ** nNode bytes of content (see sqlite3Fts3ReadBlock() for details).
                   113349:   */
                   113350:   zCsr += sqlite3Fts3GetVarint(zCsr, &iChild);
                   113351:   zCsr += sqlite3Fts3GetVarint(zCsr, &iChild);
                   113352:   if( zCsr>zEnd ){
                   113353:     return SQLITE_CORRUPT_VTAB;
                   113354:   }
                   113355:   
                   113356:   while( zCsr<zEnd && (piFirst || piLast) ){
                   113357:     int cmp;                      /* memcmp() result */
                   113358:     int nSuffix;                  /* Size of term suffix */
                   113359:     int nPrefix = 0;              /* Size of term prefix */
                   113360:     int nBuffer;                  /* Total term size */
                   113361:   
                   113362:     /* Load the next term on the node into zBuffer. Use realloc() to expand
                   113363:     ** the size of zBuffer if required.  */
                   113364:     if( !isFirstTerm ){
                   113365:       zCsr += sqlite3Fts3GetVarint32(zCsr, &nPrefix);
                   113366:     }
                   113367:     isFirstTerm = 0;
                   113368:     zCsr += sqlite3Fts3GetVarint32(zCsr, &nSuffix);
                   113369:     
                   113370:     if( nPrefix<0 || nSuffix<0 || &zCsr[nSuffix]>zEnd ){
                   113371:       rc = SQLITE_CORRUPT_VTAB;
                   113372:       goto finish_scan;
                   113373:     }
                   113374:     if( nPrefix+nSuffix>nAlloc ){
                   113375:       char *zNew;
                   113376:       nAlloc = (nPrefix+nSuffix) * 2;
                   113377:       zNew = (char *)sqlite3_realloc(zBuffer, nAlloc);
                   113378:       if( !zNew ){
                   113379:         rc = SQLITE_NOMEM;
                   113380:         goto finish_scan;
                   113381:       }
                   113382:       zBuffer = zNew;
                   113383:     }
                   113384:     memcpy(&zBuffer[nPrefix], zCsr, nSuffix);
                   113385:     nBuffer = nPrefix + nSuffix;
                   113386:     zCsr += nSuffix;
                   113387: 
                   113388:     /* Compare the term we are searching for with the term just loaded from
                   113389:     ** the interior node. If the specified term is greater than or equal
                   113390:     ** to the term from the interior node, then all terms on the sub-tree 
                   113391:     ** headed by node iChild are smaller than zTerm. No need to search 
                   113392:     ** iChild.
                   113393:     **
                   113394:     ** If the interior node term is larger than the specified term, then
                   113395:     ** the tree headed by iChild may contain the specified term.
                   113396:     */
                   113397:     cmp = memcmp(zTerm, zBuffer, (nBuffer>nTerm ? nTerm : nBuffer));
                   113398:     if( piFirst && (cmp<0 || (cmp==0 && nBuffer>nTerm)) ){
                   113399:       *piFirst = iChild;
                   113400:       piFirst = 0;
                   113401:     }
                   113402: 
                   113403:     if( piLast && cmp<0 ){
                   113404:       *piLast = iChild;
                   113405:       piLast = 0;
                   113406:     }
                   113407: 
                   113408:     iChild++;
                   113409:   };
                   113410: 
                   113411:   if( piFirst ) *piFirst = iChild;
                   113412:   if( piLast ) *piLast = iChild;
                   113413: 
                   113414:  finish_scan:
                   113415:   sqlite3_free(zBuffer);
                   113416:   return rc;
                   113417: }
                   113418: 
                   113419: 
                   113420: /*
                   113421: ** The buffer pointed to by argument zNode (size nNode bytes) contains an
                   113422: ** interior node of a b-tree segment. The zTerm buffer (size nTerm bytes)
                   113423: ** contains a term. This function searches the sub-tree headed by the zNode
                   113424: ** node for the range of leaf nodes that may contain the specified term
                   113425: ** or terms for which the specified term is a prefix.
                   113426: **
                   113427: ** If piLeaf is not NULL, then *piLeaf is set to the blockid of the 
                   113428: ** left-most leaf node in the tree that may contain the specified term.
                   113429: ** If piLeaf2 is not NULL, then *piLeaf2 is set to the blockid of the
                   113430: ** right-most leaf node that may contain a term for which the specified
                   113431: ** term is a prefix.
                   113432: **
                   113433: ** It is possible that the range of returned leaf nodes does not contain 
                   113434: ** the specified term or any terms for which it is a prefix. However, if the 
                   113435: ** segment does contain any such terms, they are stored within the identified
                   113436: ** range. Because this function only inspects interior segment nodes (and
                   113437: ** never loads leaf nodes into memory), it is not possible to be sure.
                   113438: **
                   113439: ** If an error occurs, an error code other than SQLITE_OK is returned.
                   113440: */ 
                   113441: static int fts3SelectLeaf(
                   113442:   Fts3Table *p,                   /* Virtual table handle */
                   113443:   const char *zTerm,              /* Term to select leaves for */
                   113444:   int nTerm,                      /* Size of term zTerm in bytes */
                   113445:   const char *zNode,              /* Buffer containing segment interior node */
                   113446:   int nNode,                      /* Size of buffer at zNode */
                   113447:   sqlite3_int64 *piLeaf,          /* Selected leaf node */
                   113448:   sqlite3_int64 *piLeaf2          /* Selected leaf node */
                   113449: ){
                   113450:   int rc;                         /* Return code */
                   113451:   int iHeight;                    /* Height of this node in tree */
                   113452: 
                   113453:   assert( piLeaf || piLeaf2 );
                   113454: 
                   113455:   sqlite3Fts3GetVarint32(zNode, &iHeight);
                   113456:   rc = fts3ScanInteriorNode(zTerm, nTerm, zNode, nNode, piLeaf, piLeaf2);
                   113457:   assert( !piLeaf2 || !piLeaf || rc!=SQLITE_OK || (*piLeaf<=*piLeaf2) );
                   113458: 
                   113459:   if( rc==SQLITE_OK && iHeight>1 ){
                   113460:     char *zBlob = 0;              /* Blob read from %_segments table */
                   113461:     int nBlob;                    /* Size of zBlob in bytes */
                   113462: 
                   113463:     if( piLeaf && piLeaf2 && (*piLeaf!=*piLeaf2) ){
                   113464:       rc = sqlite3Fts3ReadBlock(p, *piLeaf, &zBlob, &nBlob, 0);
                   113465:       if( rc==SQLITE_OK ){
                   113466:         rc = fts3SelectLeaf(p, zTerm, nTerm, zBlob, nBlob, piLeaf, 0);
                   113467:       }
                   113468:       sqlite3_free(zBlob);
                   113469:       piLeaf = 0;
                   113470:       zBlob = 0;
                   113471:     }
                   113472: 
                   113473:     if( rc==SQLITE_OK ){
                   113474:       rc = sqlite3Fts3ReadBlock(p, piLeaf?*piLeaf:*piLeaf2, &zBlob, &nBlob, 0);
                   113475:     }
                   113476:     if( rc==SQLITE_OK ){
                   113477:       rc = fts3SelectLeaf(p, zTerm, nTerm, zBlob, nBlob, piLeaf, piLeaf2);
                   113478:     }
                   113479:     sqlite3_free(zBlob);
                   113480:   }
                   113481: 
                   113482:   return rc;
                   113483: }
                   113484: 
                   113485: /*
                   113486: ** This function is used to create delta-encoded serialized lists of FTS3 
                   113487: ** varints. Each call to this function appends a single varint to a list.
                   113488: */
                   113489: static void fts3PutDeltaVarint(
                   113490:   char **pp,                      /* IN/OUT: Output pointer */
                   113491:   sqlite3_int64 *piPrev,          /* IN/OUT: Previous value written to list */
                   113492:   sqlite3_int64 iVal              /* Write this value to the list */
                   113493: ){
                   113494:   assert( iVal-*piPrev > 0 || (*piPrev==0 && iVal==0) );
                   113495:   *pp += sqlite3Fts3PutVarint(*pp, iVal-*piPrev);
                   113496:   *piPrev = iVal;
                   113497: }
                   113498: 
                   113499: /*
                   113500: ** When this function is called, *ppPoslist is assumed to point to the 
                   113501: ** start of a position-list. After it returns, *ppPoslist points to the
                   113502: ** first byte after the position-list.
                   113503: **
                   113504: ** A position list is list of positions (delta encoded) and columns for 
                   113505: ** a single document record of a doclist.  So, in other words, this
                   113506: ** routine advances *ppPoslist so that it points to the next docid in
                   113507: ** the doclist, or to the first byte past the end of the doclist.
                   113508: **
                   113509: ** If pp is not NULL, then the contents of the position list are copied
                   113510: ** to *pp. *pp is set to point to the first byte past the last byte copied
                   113511: ** before this function returns.
                   113512: */
                   113513: static void fts3PoslistCopy(char **pp, char **ppPoslist){
                   113514:   char *pEnd = *ppPoslist;
                   113515:   char c = 0;
                   113516: 
                   113517:   /* The end of a position list is marked by a zero encoded as an FTS3 
                   113518:   ** varint. A single POS_END (0) byte. Except, if the 0 byte is preceded by
                   113519:   ** a byte with the 0x80 bit set, then it is not a varint 0, but the tail
                   113520:   ** of some other, multi-byte, value.
                   113521:   **
                   113522:   ** The following while-loop moves pEnd to point to the first byte that is not 
                   113523:   ** immediately preceded by a byte with the 0x80 bit set. Then increments
                   113524:   ** pEnd once more so that it points to the byte immediately following the
                   113525:   ** last byte in the position-list.
                   113526:   */
                   113527:   while( *pEnd | c ){
                   113528:     c = *pEnd++ & 0x80;
                   113529:     testcase( c!=0 && (*pEnd)==0 );
                   113530:   }
                   113531:   pEnd++;  /* Advance past the POS_END terminator byte */
                   113532: 
                   113533:   if( pp ){
                   113534:     int n = (int)(pEnd - *ppPoslist);
                   113535:     char *p = *pp;
                   113536:     memcpy(p, *ppPoslist, n);
                   113537:     p += n;
                   113538:     *pp = p;
                   113539:   }
                   113540:   *ppPoslist = pEnd;
                   113541: }
                   113542: 
                   113543: /*
                   113544: ** When this function is called, *ppPoslist is assumed to point to the 
                   113545: ** start of a column-list. After it returns, *ppPoslist points to the
                   113546: ** to the terminator (POS_COLUMN or POS_END) byte of the column-list.
                   113547: **
                   113548: ** A column-list is list of delta-encoded positions for a single column
                   113549: ** within a single document within a doclist.
                   113550: **
                   113551: ** The column-list is terminated either by a POS_COLUMN varint (1) or
                   113552: ** a POS_END varint (0).  This routine leaves *ppPoslist pointing to
                   113553: ** the POS_COLUMN or POS_END that terminates the column-list.
                   113554: **
                   113555: ** If pp is not NULL, then the contents of the column-list are copied
                   113556: ** to *pp. *pp is set to point to the first byte past the last byte copied
                   113557: ** before this function returns.  The POS_COLUMN or POS_END terminator
                   113558: ** is not copied into *pp.
                   113559: */
                   113560: static void fts3ColumnlistCopy(char **pp, char **ppPoslist){
                   113561:   char *pEnd = *ppPoslist;
                   113562:   char c = 0;
                   113563: 
                   113564:   /* A column-list is terminated by either a 0x01 or 0x00 byte that is
                   113565:   ** not part of a multi-byte varint.
                   113566:   */
                   113567:   while( 0xFE & (*pEnd | c) ){
                   113568:     c = *pEnd++ & 0x80;
                   113569:     testcase( c!=0 && ((*pEnd)&0xfe)==0 );
                   113570:   }
                   113571:   if( pp ){
                   113572:     int n = (int)(pEnd - *ppPoslist);
                   113573:     char *p = *pp;
                   113574:     memcpy(p, *ppPoslist, n);
                   113575:     p += n;
                   113576:     *pp = p;
                   113577:   }
                   113578:   *ppPoslist = pEnd;
                   113579: }
                   113580: 
                   113581: /*
                   113582: ** Value used to signify the end of an position-list. This is safe because
                   113583: ** it is not possible to have a document with 2^31 terms.
                   113584: */
                   113585: #define POSITION_LIST_END 0x7fffffff
                   113586: 
                   113587: /*
                   113588: ** This function is used to help parse position-lists. When this function is
                   113589: ** called, *pp may point to the start of the next varint in the position-list
                   113590: ** being parsed, or it may point to 1 byte past the end of the position-list
                   113591: ** (in which case **pp will be a terminator bytes POS_END (0) or
                   113592: ** (1)).
                   113593: **
                   113594: ** If *pp points past the end of the current position-list, set *pi to 
                   113595: ** POSITION_LIST_END and return. Otherwise, read the next varint from *pp,
                   113596: ** increment the current value of *pi by the value read, and set *pp to
                   113597: ** point to the next value before returning.
                   113598: **
                   113599: ** Before calling this routine *pi must be initialized to the value of
                   113600: ** the previous position, or zero if we are reading the first position
                   113601: ** in the position-list.  Because positions are delta-encoded, the value
                   113602: ** of the previous position is needed in order to compute the value of
                   113603: ** the next position.
                   113604: */
                   113605: static void fts3ReadNextPos(
                   113606:   char **pp,                    /* IN/OUT: Pointer into position-list buffer */
                   113607:   sqlite3_int64 *pi             /* IN/OUT: Value read from position-list */
                   113608: ){
                   113609:   if( (**pp)&0xFE ){
                   113610:     fts3GetDeltaVarint(pp, pi);
                   113611:     *pi -= 2;
                   113612:   }else{
                   113613:     *pi = POSITION_LIST_END;
                   113614:   }
                   113615: }
                   113616: 
                   113617: /*
                   113618: ** If parameter iCol is not 0, write an POS_COLUMN (1) byte followed by
                   113619: ** the value of iCol encoded as a varint to *pp.   This will start a new
                   113620: ** column list.
                   113621: **
                   113622: ** Set *pp to point to the byte just after the last byte written before 
                   113623: ** returning (do not modify it if iCol==0). Return the total number of bytes
                   113624: ** written (0 if iCol==0).
                   113625: */
                   113626: static int fts3PutColNumber(char **pp, int iCol){
                   113627:   int n = 0;                      /* Number of bytes written */
                   113628:   if( iCol ){
                   113629:     char *p = *pp;                /* Output pointer */
                   113630:     n = 1 + sqlite3Fts3PutVarint(&p[1], iCol);
                   113631:     *p = 0x01;
                   113632:     *pp = &p[n];
                   113633:   }
                   113634:   return n;
                   113635: }
                   113636: 
                   113637: /*
                   113638: ** Compute the union of two position lists.  The output written
                   113639: ** into *pp contains all positions of both *pp1 and *pp2 in sorted
                   113640: ** order and with any duplicates removed.  All pointers are
                   113641: ** updated appropriately.   The caller is responsible for insuring
                   113642: ** that there is enough space in *pp to hold the complete output.
                   113643: */
                   113644: static void fts3PoslistMerge(
                   113645:   char **pp,                      /* Output buffer */
                   113646:   char **pp1,                     /* Left input list */
                   113647:   char **pp2                      /* Right input list */
                   113648: ){
                   113649:   char *p = *pp;
                   113650:   char *p1 = *pp1;
                   113651:   char *p2 = *pp2;
                   113652: 
                   113653:   while( *p1 || *p2 ){
                   113654:     int iCol1;         /* The current column index in pp1 */
                   113655:     int iCol2;         /* The current column index in pp2 */
                   113656: 
                   113657:     if( *p1==POS_COLUMN ) sqlite3Fts3GetVarint32(&p1[1], &iCol1);
                   113658:     else if( *p1==POS_END ) iCol1 = POSITION_LIST_END;
                   113659:     else iCol1 = 0;
                   113660: 
                   113661:     if( *p2==POS_COLUMN ) sqlite3Fts3GetVarint32(&p2[1], &iCol2);
                   113662:     else if( *p2==POS_END ) iCol2 = POSITION_LIST_END;
                   113663:     else iCol2 = 0;
                   113664: 
                   113665:     if( iCol1==iCol2 ){
                   113666:       sqlite3_int64 i1 = 0;       /* Last position from pp1 */
                   113667:       sqlite3_int64 i2 = 0;       /* Last position from pp2 */
                   113668:       sqlite3_int64 iPrev = 0;
                   113669:       int n = fts3PutColNumber(&p, iCol1);
                   113670:       p1 += n;
                   113671:       p2 += n;
                   113672: 
                   113673:       /* At this point, both p1 and p2 point to the start of column-lists
                   113674:       ** for the same column (the column with index iCol1 and iCol2).
                   113675:       ** A column-list is a list of non-negative delta-encoded varints, each 
                   113676:       ** incremented by 2 before being stored. Each list is terminated by a
                   113677:       ** POS_END (0) or POS_COLUMN (1). The following block merges the two lists
                   113678:       ** and writes the results to buffer p. p is left pointing to the byte
                   113679:       ** after the list written. No terminator (POS_END or POS_COLUMN) is
                   113680:       ** written to the output.
                   113681:       */
                   113682:       fts3GetDeltaVarint(&p1, &i1);
                   113683:       fts3GetDeltaVarint(&p2, &i2);
                   113684:       do {
                   113685:         fts3PutDeltaVarint(&p, &iPrev, (i1<i2) ? i1 : i2); 
                   113686:         iPrev -= 2;
                   113687:         if( i1==i2 ){
                   113688:           fts3ReadNextPos(&p1, &i1);
                   113689:           fts3ReadNextPos(&p2, &i2);
                   113690:         }else if( i1<i2 ){
                   113691:           fts3ReadNextPos(&p1, &i1);
                   113692:         }else{
                   113693:           fts3ReadNextPos(&p2, &i2);
                   113694:         }
                   113695:       }while( i1!=POSITION_LIST_END || i2!=POSITION_LIST_END );
                   113696:     }else if( iCol1<iCol2 ){
                   113697:       p1 += fts3PutColNumber(&p, iCol1);
                   113698:       fts3ColumnlistCopy(&p, &p1);
                   113699:     }else{
                   113700:       p2 += fts3PutColNumber(&p, iCol2);
                   113701:       fts3ColumnlistCopy(&p, &p2);
                   113702:     }
                   113703:   }
                   113704: 
                   113705:   *p++ = POS_END;
                   113706:   *pp = p;
                   113707:   *pp1 = p1 + 1;
                   113708:   *pp2 = p2 + 1;
                   113709: }
                   113710: 
                   113711: /*
                   113712: ** nToken==1 searches for adjacent positions.
                   113713: **
                   113714: ** This function is used to merge two position lists into one. When it is
                   113715: ** called, *pp1 and *pp2 must both point to position lists. A position-list is
                   113716: ** the part of a doclist that follows each document id. For example, if a row
                   113717: ** contains:
                   113718: **
                   113719: **     'a b c'|'x y z'|'a b b a'
                   113720: **
                   113721: ** Then the position list for this row for token 'b' would consist of:
                   113722: **
                   113723: **     0x02 0x01 0x02 0x03 0x03 0x00
                   113724: **
                   113725: ** When this function returns, both *pp1 and *pp2 are left pointing to the
                   113726: ** byte following the 0x00 terminator of their respective position lists.
                   113727: **
                   113728: ** If isSaveLeft is 0, an entry is added to the output position list for 
                   113729: ** each position in *pp2 for which there exists one or more positions in
                   113730: ** *pp1 so that (pos(*pp2)>pos(*pp1) && pos(*pp2)-pos(*pp1)<=nToken). i.e.
                   113731: ** when the *pp1 token appears before the *pp2 token, but not more than nToken
                   113732: ** slots before it.
                   113733: */
                   113734: static int fts3PoslistPhraseMerge(
                   113735:   char **pp,                      /* IN/OUT: Preallocated output buffer */
                   113736:   int nToken,                     /* Maximum difference in token positions */
                   113737:   int isSaveLeft,                 /* Save the left position */
                   113738:   int isExact,                    /* If *pp1 is exactly nTokens before *pp2 */
                   113739:   char **pp1,                     /* IN/OUT: Left input list */
                   113740:   char **pp2                      /* IN/OUT: Right input list */
                   113741: ){
                   113742:   char *p = (pp ? *pp : 0);
                   113743:   char *p1 = *pp1;
                   113744:   char *p2 = *pp2;
                   113745:   int iCol1 = 0;
                   113746:   int iCol2 = 0;
                   113747: 
                   113748:   /* Never set both isSaveLeft and isExact for the same invocation. */
                   113749:   assert( isSaveLeft==0 || isExact==0 );
                   113750: 
                   113751:   assert( *p1!=0 && *p2!=0 );
                   113752:   if( *p1==POS_COLUMN ){ 
                   113753:     p1++;
                   113754:     p1 += sqlite3Fts3GetVarint32(p1, &iCol1);
                   113755:   }
                   113756:   if( *p2==POS_COLUMN ){ 
                   113757:     p2++;
                   113758:     p2 += sqlite3Fts3GetVarint32(p2, &iCol2);
                   113759:   }
                   113760: 
                   113761:   while( 1 ){
                   113762:     if( iCol1==iCol2 ){
                   113763:       char *pSave = p;
                   113764:       sqlite3_int64 iPrev = 0;
                   113765:       sqlite3_int64 iPos1 = 0;
                   113766:       sqlite3_int64 iPos2 = 0;
                   113767: 
                   113768:       if( pp && iCol1 ){
                   113769:         *p++ = POS_COLUMN;
                   113770:         p += sqlite3Fts3PutVarint(p, iCol1);
                   113771:       }
                   113772: 
                   113773:       assert( *p1!=POS_END && *p1!=POS_COLUMN );
                   113774:       assert( *p2!=POS_END && *p2!=POS_COLUMN );
                   113775:       fts3GetDeltaVarint(&p1, &iPos1); iPos1 -= 2;
                   113776:       fts3GetDeltaVarint(&p2, &iPos2); iPos2 -= 2;
                   113777: 
                   113778:       while( 1 ){
                   113779:         if( iPos2==iPos1+nToken 
                   113780:          || (isExact==0 && iPos2>iPos1 && iPos2<=iPos1+nToken) 
                   113781:         ){
                   113782:           sqlite3_int64 iSave;
                   113783:           if( !pp ){
                   113784:             fts3PoslistCopy(0, &p2);
                   113785:             fts3PoslistCopy(0, &p1);
                   113786:             *pp1 = p1;
                   113787:             *pp2 = p2;
                   113788:             return 1;
                   113789:           }
                   113790:           iSave = isSaveLeft ? iPos1 : iPos2;
                   113791:           fts3PutDeltaVarint(&p, &iPrev, iSave+2); iPrev -= 2;
                   113792:           pSave = 0;
                   113793:         }
                   113794:         if( (!isSaveLeft && iPos2<=(iPos1+nToken)) || iPos2<=iPos1 ){
                   113795:           if( (*p2&0xFE)==0 ) break;
                   113796:           fts3GetDeltaVarint(&p2, &iPos2); iPos2 -= 2;
                   113797:         }else{
                   113798:           if( (*p1&0xFE)==0 ) break;
                   113799:           fts3GetDeltaVarint(&p1, &iPos1); iPos1 -= 2;
                   113800:         }
                   113801:       }
                   113802: 
                   113803:       if( pSave ){
                   113804:         assert( pp && p );
                   113805:         p = pSave;
                   113806:       }
                   113807: 
                   113808:       fts3ColumnlistCopy(0, &p1);
                   113809:       fts3ColumnlistCopy(0, &p2);
                   113810:       assert( (*p1&0xFE)==0 && (*p2&0xFE)==0 );
                   113811:       if( 0==*p1 || 0==*p2 ) break;
                   113812: 
                   113813:       p1++;
                   113814:       p1 += sqlite3Fts3GetVarint32(p1, &iCol1);
                   113815:       p2++;
                   113816:       p2 += sqlite3Fts3GetVarint32(p2, &iCol2);
                   113817:     }
                   113818: 
                   113819:     /* Advance pointer p1 or p2 (whichever corresponds to the smaller of
                   113820:     ** iCol1 and iCol2) so that it points to either the 0x00 that marks the
                   113821:     ** end of the position list, or the 0x01 that precedes the next 
                   113822:     ** column-number in the position list. 
                   113823:     */
                   113824:     else if( iCol1<iCol2 ){
                   113825:       fts3ColumnlistCopy(0, &p1);
                   113826:       if( 0==*p1 ) break;
                   113827:       p1++;
                   113828:       p1 += sqlite3Fts3GetVarint32(p1, &iCol1);
                   113829:     }else{
                   113830:       fts3ColumnlistCopy(0, &p2);
                   113831:       if( 0==*p2 ) break;
                   113832:       p2++;
                   113833:       p2 += sqlite3Fts3GetVarint32(p2, &iCol2);
                   113834:     }
                   113835:   }
                   113836: 
                   113837:   fts3PoslistCopy(0, &p2);
                   113838:   fts3PoslistCopy(0, &p1);
                   113839:   *pp1 = p1;
                   113840:   *pp2 = p2;
                   113841:   if( !pp || *pp==p ){
                   113842:     return 0;
                   113843:   }
                   113844:   *p++ = 0x00;
                   113845:   *pp = p;
                   113846:   return 1;
                   113847: }
                   113848: 
                   113849: /*
                   113850: ** Merge two position-lists as required by the NEAR operator. The argument
                   113851: ** position lists correspond to the left and right phrases of an expression 
                   113852: ** like:
                   113853: **
                   113854: **     "phrase 1" NEAR "phrase number 2"
                   113855: **
                   113856: ** Position list *pp1 corresponds to the left-hand side of the NEAR 
                   113857: ** expression and *pp2 to the right. As usual, the indexes in the position 
                   113858: ** lists are the offsets of the last token in each phrase (tokens "1" and "2" 
                   113859: ** in the example above).
                   113860: **
                   113861: ** The output position list - written to *pp - is a copy of *pp2 with those
                   113862: ** entries that are not sufficiently NEAR entries in *pp1 removed.
                   113863: */
                   113864: static int fts3PoslistNearMerge(
                   113865:   char **pp,                      /* Output buffer */
                   113866:   char *aTmp,                     /* Temporary buffer space */
                   113867:   int nRight,                     /* Maximum difference in token positions */
                   113868:   int nLeft,                      /* Maximum difference in token positions */
                   113869:   char **pp1,                     /* IN/OUT: Left input list */
                   113870:   char **pp2                      /* IN/OUT: Right input list */
                   113871: ){
                   113872:   char *p1 = *pp1;
                   113873:   char *p2 = *pp2;
                   113874: 
                   113875:   char *pTmp1 = aTmp;
                   113876:   char *pTmp2;
                   113877:   char *aTmp2;
                   113878:   int res = 1;
                   113879: 
                   113880:   fts3PoslistPhraseMerge(&pTmp1, nRight, 0, 0, pp1, pp2);
                   113881:   aTmp2 = pTmp2 = pTmp1;
                   113882:   *pp1 = p1;
                   113883:   *pp2 = p2;
                   113884:   fts3PoslistPhraseMerge(&pTmp2, nLeft, 1, 0, pp2, pp1);
                   113885:   if( pTmp1!=aTmp && pTmp2!=aTmp2 ){
                   113886:     fts3PoslistMerge(pp, &aTmp, &aTmp2);
                   113887:   }else if( pTmp1!=aTmp ){
                   113888:     fts3PoslistCopy(pp, &aTmp);
                   113889:   }else if( pTmp2!=aTmp2 ){
                   113890:     fts3PoslistCopy(pp, &aTmp2);
                   113891:   }else{
                   113892:     res = 0;
                   113893:   }
                   113894: 
                   113895:   return res;
                   113896: }
                   113897: 
                   113898: /* 
                   113899: ** A pointer to an instance of this structure is used as the context 
                   113900: ** argument to sqlite3Fts3SegReaderIterate()
                   113901: */
                   113902: typedef struct TermSelect TermSelect;
                   113903: struct TermSelect {
                   113904:   int isReqPos;
                   113905:   char *aaOutput[16];             /* Malloc'd output buffer */
                   113906:   int anOutput[16];               /* Size of output in bytes */
                   113907: };
                   113908: 
                   113909: 
                   113910: static void fts3GetDeltaVarint3(
                   113911:   char **pp, 
                   113912:   char *pEnd, 
                   113913:   int bDescIdx,
                   113914:   sqlite3_int64 *pVal
                   113915: ){
                   113916:   if( *pp>=pEnd ){
                   113917:     *pp = 0;
                   113918:   }else{
                   113919:     sqlite3_int64 iVal;
                   113920:     *pp += sqlite3Fts3GetVarint(*pp, &iVal);
                   113921:     if( bDescIdx ){
                   113922:       *pVal -= iVal;
                   113923:     }else{
                   113924:       *pVal += iVal;
                   113925:     }
                   113926:   }
                   113927: }
                   113928: 
                   113929: static void fts3PutDeltaVarint3(
                   113930:   char **pp,                      /* IN/OUT: Output pointer */
                   113931:   int bDescIdx,                   /* True for descending docids */
                   113932:   sqlite3_int64 *piPrev,          /* IN/OUT: Previous value written to list */
                   113933:   int *pbFirst,                   /* IN/OUT: True after first int written */
                   113934:   sqlite3_int64 iVal              /* Write this value to the list */
                   113935: ){
                   113936:   sqlite3_int64 iWrite;
                   113937:   if( bDescIdx==0 || *pbFirst==0 ){
                   113938:     iWrite = iVal - *piPrev;
                   113939:   }else{
                   113940:     iWrite = *piPrev - iVal;
                   113941:   }
                   113942:   assert( *pbFirst || *piPrev==0 );
                   113943:   assert( *pbFirst==0 || iWrite>0 );
                   113944:   *pp += sqlite3Fts3PutVarint(*pp, iWrite);
                   113945:   *piPrev = iVal;
                   113946:   *pbFirst = 1;
                   113947: }
                   113948: 
                   113949: #define COMPARE_DOCID(i1, i2) ((bDescIdx?-1:1) * (i1-i2))
                   113950: 
                   113951: static int fts3DoclistOrMerge(
                   113952:   int bDescIdx,                   /* True if arguments are desc */
                   113953:   char *a1, int n1,               /* First doclist */
                   113954:   char *a2, int n2,               /* Second doclist */
                   113955:   char **paOut, int *pnOut        /* OUT: Malloc'd doclist */
                   113956: ){
                   113957:   sqlite3_int64 i1 = 0;
                   113958:   sqlite3_int64 i2 = 0;
                   113959:   sqlite3_int64 iPrev = 0;
                   113960:   char *pEnd1 = &a1[n1];
                   113961:   char *pEnd2 = &a2[n2];
                   113962:   char *p1 = a1;
                   113963:   char *p2 = a2;
                   113964:   char *p;
                   113965:   char *aOut;
                   113966:   int bFirstOut = 0;
                   113967: 
                   113968:   *paOut = 0;
                   113969:   *pnOut = 0;
                   113970:   aOut = sqlite3_malloc(n1+n2);
                   113971:   if( !aOut ) return SQLITE_NOMEM;
                   113972: 
                   113973:   p = aOut;
                   113974:   fts3GetDeltaVarint3(&p1, pEnd1, 0, &i1);
                   113975:   fts3GetDeltaVarint3(&p2, pEnd2, 0, &i2);
                   113976:   while( p1 || p2 ){
                   113977:     sqlite3_int64 iDiff = COMPARE_DOCID(i1, i2);
                   113978: 
                   113979:     if( p2 && p1 && iDiff==0 ){
                   113980:       fts3PutDeltaVarint3(&p, bDescIdx, &iPrev, &bFirstOut, i1);
                   113981:       fts3PoslistMerge(&p, &p1, &p2);
                   113982:       fts3GetDeltaVarint3(&p1, pEnd1, bDescIdx, &i1);
                   113983:       fts3GetDeltaVarint3(&p2, pEnd2, bDescIdx, &i2);
                   113984:     }else if( !p2 || (p1 && iDiff<0) ){
                   113985:       fts3PutDeltaVarint3(&p, bDescIdx, &iPrev, &bFirstOut, i1);
                   113986:       fts3PoslistCopy(&p, &p1);
                   113987:       fts3GetDeltaVarint3(&p1, pEnd1, bDescIdx, &i1);
                   113988:     }else{
                   113989:       fts3PutDeltaVarint3(&p, bDescIdx, &iPrev, &bFirstOut, i2);
                   113990:       fts3PoslistCopy(&p, &p2);
                   113991:       fts3GetDeltaVarint3(&p2, pEnd2, bDescIdx, &i2);
                   113992:     }
                   113993:   }
                   113994: 
                   113995:   *paOut = aOut;
                   113996:   *pnOut = (p-aOut);
                   113997:   return SQLITE_OK;
                   113998: }
                   113999: 
                   114000: static void fts3DoclistPhraseMerge(
                   114001:   int bDescIdx,                   /* True if arguments are desc */
                   114002:   int nDist,                      /* Distance from left to right (1=adjacent) */
                   114003:   char *aLeft, int nLeft,         /* Left doclist */
                   114004:   char *aRight, int *pnRight      /* IN/OUT: Right/output doclist */
                   114005: ){
                   114006:   sqlite3_int64 i1 = 0;
                   114007:   sqlite3_int64 i2 = 0;
                   114008:   sqlite3_int64 iPrev = 0;
                   114009:   char *pEnd1 = &aLeft[nLeft];
                   114010:   char *pEnd2 = &aRight[*pnRight];
                   114011:   char *p1 = aLeft;
                   114012:   char *p2 = aRight;
                   114013:   char *p;
                   114014:   int bFirstOut = 0;
                   114015:   char *aOut = aRight;
                   114016: 
                   114017:   assert( nDist>0 );
                   114018: 
                   114019:   p = aOut;
                   114020:   fts3GetDeltaVarint3(&p1, pEnd1, 0, &i1);
                   114021:   fts3GetDeltaVarint3(&p2, pEnd2, 0, &i2);
                   114022: 
                   114023:   while( p1 && p2 ){
                   114024:     sqlite3_int64 iDiff = COMPARE_DOCID(i1, i2);
                   114025:     if( iDiff==0 ){
                   114026:       char *pSave = p;
                   114027:       sqlite3_int64 iPrevSave = iPrev;
                   114028:       int bFirstOutSave = bFirstOut;
                   114029: 
                   114030:       fts3PutDeltaVarint3(&p, bDescIdx, &iPrev, &bFirstOut, i1);
                   114031:       if( 0==fts3PoslistPhraseMerge(&p, nDist, 0, 1, &p1, &p2) ){
                   114032:         p = pSave;
                   114033:         iPrev = iPrevSave;
                   114034:         bFirstOut = bFirstOutSave;
                   114035:       }
                   114036:       fts3GetDeltaVarint3(&p1, pEnd1, bDescIdx, &i1);
                   114037:       fts3GetDeltaVarint3(&p2, pEnd2, bDescIdx, &i2);
                   114038:     }else if( iDiff<0 ){
                   114039:       fts3PoslistCopy(0, &p1);
                   114040:       fts3GetDeltaVarint3(&p1, pEnd1, bDescIdx, &i1);
                   114041:     }else{
                   114042:       fts3PoslistCopy(0, &p2);
                   114043:       fts3GetDeltaVarint3(&p2, pEnd2, bDescIdx, &i2);
                   114044:     }
                   114045:   }
                   114046: 
                   114047:   *pnRight = p - aOut;
                   114048: }
                   114049: 
                   114050: 
                   114051: /*
                   114052: ** Merge all doclists in the TermSelect.aaOutput[] array into a single
                   114053: ** doclist stored in TermSelect.aaOutput[0]. If successful, delete all
                   114054: ** other doclists (except the aaOutput[0] one) and return SQLITE_OK.
                   114055: **
                   114056: ** If an OOM error occurs, return SQLITE_NOMEM. In this case it is
                   114057: ** the responsibility of the caller to free any doclists left in the
                   114058: ** TermSelect.aaOutput[] array.
                   114059: */
                   114060: static int fts3TermSelectMerge(Fts3Table *p, TermSelect *pTS){
                   114061:   char *aOut = 0;
                   114062:   int nOut = 0;
                   114063:   int i;
                   114064: 
                   114065:   /* Loop through the doclists in the aaOutput[] array. Merge them all
                   114066:   ** into a single doclist.
                   114067:   */
                   114068:   for(i=0; i<SizeofArray(pTS->aaOutput); i++){
                   114069:     if( pTS->aaOutput[i] ){
                   114070:       if( !aOut ){
                   114071:         aOut = pTS->aaOutput[i];
                   114072:         nOut = pTS->anOutput[i];
                   114073:         pTS->aaOutput[i] = 0;
                   114074:       }else{
                   114075:         int nNew;
                   114076:         char *aNew;
                   114077: 
                   114078:         int rc = fts3DoclistOrMerge(p->bDescIdx, 
                   114079:             pTS->aaOutput[i], pTS->anOutput[i], aOut, nOut, &aNew, &nNew
                   114080:         );
                   114081:         if( rc!=SQLITE_OK ){
                   114082:           sqlite3_free(aOut);
                   114083:           return rc;
                   114084:         }
                   114085: 
                   114086:         sqlite3_free(pTS->aaOutput[i]);
                   114087:         sqlite3_free(aOut);
                   114088:         pTS->aaOutput[i] = 0;
                   114089:         aOut = aNew;
                   114090:         nOut = nNew;
                   114091:       }
                   114092:     }
                   114093:   }
                   114094: 
                   114095:   pTS->aaOutput[0] = aOut;
                   114096:   pTS->anOutput[0] = nOut;
                   114097:   return SQLITE_OK;
                   114098: }
                   114099: 
                   114100: /*
                   114101: ** This function is used as the sqlite3Fts3SegReaderIterate() callback when
                   114102: ** querying the full-text index for a doclist associated with a term or
                   114103: ** term-prefix.
                   114104: */
                   114105: static int fts3TermSelectCb(
                   114106:   Fts3Table *p,                   /* Virtual table object */
                   114107:   void *pContext,                 /* Pointer to TermSelect structure */
                   114108:   char *zTerm,
                   114109:   int nTerm,
                   114110:   char *aDoclist,
                   114111:   int nDoclist
                   114112: ){
                   114113:   TermSelect *pTS = (TermSelect *)pContext;
                   114114: 
                   114115:   UNUSED_PARAMETER(p);
                   114116:   UNUSED_PARAMETER(zTerm);
                   114117:   UNUSED_PARAMETER(nTerm);
                   114118: 
                   114119:   if( pTS->aaOutput[0]==0 ){
                   114120:     /* If this is the first term selected, copy the doclist to the output
                   114121:     ** buffer using memcpy(). */
                   114122:     pTS->aaOutput[0] = sqlite3_malloc(nDoclist);
                   114123:     pTS->anOutput[0] = nDoclist;
                   114124:     if( pTS->aaOutput[0] ){
                   114125:       memcpy(pTS->aaOutput[0], aDoclist, nDoclist);
                   114126:     }else{
                   114127:       return SQLITE_NOMEM;
                   114128:     }
                   114129:   }else{
                   114130:     char *aMerge = aDoclist;
                   114131:     int nMerge = nDoclist;
                   114132:     int iOut;
                   114133: 
                   114134:     for(iOut=0; iOut<SizeofArray(pTS->aaOutput); iOut++){
                   114135:       if( pTS->aaOutput[iOut]==0 ){
                   114136:         assert( iOut>0 );
                   114137:         pTS->aaOutput[iOut] = aMerge;
                   114138:         pTS->anOutput[iOut] = nMerge;
                   114139:         break;
                   114140:       }else{
                   114141:         char *aNew;
                   114142:         int nNew;
                   114143: 
                   114144:         int rc = fts3DoclistOrMerge(p->bDescIdx, aMerge, nMerge, 
                   114145:             pTS->aaOutput[iOut], pTS->anOutput[iOut], &aNew, &nNew
                   114146:         );
                   114147:         if( rc!=SQLITE_OK ){
                   114148:           if( aMerge!=aDoclist ) sqlite3_free(aMerge);
                   114149:           return rc;
                   114150:         }
                   114151: 
                   114152:         if( aMerge!=aDoclist ) sqlite3_free(aMerge);
                   114153:         sqlite3_free(pTS->aaOutput[iOut]);
                   114154:         pTS->aaOutput[iOut] = 0;
                   114155:   
                   114156:         aMerge = aNew;
                   114157:         nMerge = nNew;
                   114158:         if( (iOut+1)==SizeofArray(pTS->aaOutput) ){
                   114159:           pTS->aaOutput[iOut] = aMerge;
                   114160:           pTS->anOutput[iOut] = nMerge;
                   114161:         }
                   114162:       }
                   114163:     }
                   114164:   }
                   114165:   return SQLITE_OK;
                   114166: }
                   114167: 
                   114168: /*
                   114169: ** Append SegReader object pNew to the end of the pCsr->apSegment[] array.
                   114170: */
                   114171: static int fts3SegReaderCursorAppend(
                   114172:   Fts3MultiSegReader *pCsr, 
                   114173:   Fts3SegReader *pNew
                   114174: ){
                   114175:   if( (pCsr->nSegment%16)==0 ){
                   114176:     Fts3SegReader **apNew;
                   114177:     int nByte = (pCsr->nSegment + 16)*sizeof(Fts3SegReader*);
                   114178:     apNew = (Fts3SegReader **)sqlite3_realloc(pCsr->apSegment, nByte);
                   114179:     if( !apNew ){
                   114180:       sqlite3Fts3SegReaderFree(pNew);
                   114181:       return SQLITE_NOMEM;
                   114182:     }
                   114183:     pCsr->apSegment = apNew;
                   114184:   }
                   114185:   pCsr->apSegment[pCsr->nSegment++] = pNew;
                   114186:   return SQLITE_OK;
                   114187: }
                   114188: 
                   114189: static int fts3SegReaderCursor(
                   114190:   Fts3Table *p,                   /* FTS3 table handle */
                   114191:   int iIndex,                     /* Index to search (from 0 to p->nIndex-1) */
                   114192:   int iLevel,                     /* Level of segments to scan */
                   114193:   const char *zTerm,              /* Term to query for */
                   114194:   int nTerm,                      /* Size of zTerm in bytes */
                   114195:   int isPrefix,                   /* True for a prefix search */
                   114196:   int isScan,                     /* True to scan from zTerm to EOF */
                   114197:   Fts3MultiSegReader *pCsr       /* Cursor object to populate */
                   114198: ){
                   114199:   int rc = SQLITE_OK;
                   114200:   int rc2;
                   114201:   sqlite3_stmt *pStmt = 0;
                   114202: 
                   114203:   /* If iLevel is less than 0 and this is not a scan, include a seg-reader 
                   114204:   ** for the pending-terms. If this is a scan, then this call must be being
                   114205:   ** made by an fts4aux module, not an FTS table. In this case calling
                   114206:   ** Fts3SegReaderPending might segfault, as the data structures used by 
                   114207:   ** fts4aux are not completely populated. So it's easiest to filter these
                   114208:   ** calls out here.  */
                   114209:   if( iLevel<0 && p->aIndex ){
                   114210:     Fts3SegReader *pSeg = 0;
                   114211:     rc = sqlite3Fts3SegReaderPending(p, iIndex, zTerm, nTerm, isPrefix, &pSeg);
                   114212:     if( rc==SQLITE_OK && pSeg ){
                   114213:       rc = fts3SegReaderCursorAppend(pCsr, pSeg);
                   114214:     }
                   114215:   }
                   114216: 
                   114217:   if( iLevel!=FTS3_SEGCURSOR_PENDING ){
                   114218:     if( rc==SQLITE_OK ){
                   114219:       rc = sqlite3Fts3AllSegdirs(p, iIndex, iLevel, &pStmt);
                   114220:     }
                   114221: 
                   114222:     while( rc==SQLITE_OK && SQLITE_ROW==(rc = sqlite3_step(pStmt)) ){
                   114223:       Fts3SegReader *pSeg = 0;
                   114224: 
                   114225:       /* Read the values returned by the SELECT into local variables. */
                   114226:       sqlite3_int64 iStartBlock = sqlite3_column_int64(pStmt, 1);
                   114227:       sqlite3_int64 iLeavesEndBlock = sqlite3_column_int64(pStmt, 2);
                   114228:       sqlite3_int64 iEndBlock = sqlite3_column_int64(pStmt, 3);
                   114229:       int nRoot = sqlite3_column_bytes(pStmt, 4);
                   114230:       char const *zRoot = sqlite3_column_blob(pStmt, 4);
                   114231: 
                   114232:       /* If zTerm is not NULL, and this segment is not stored entirely on its
                   114233:       ** root node, the range of leaves scanned can be reduced. Do this. */
                   114234:       if( iStartBlock && zTerm ){
                   114235:         sqlite3_int64 *pi = (isPrefix ? &iLeavesEndBlock : 0);
                   114236:         rc = fts3SelectLeaf(p, zTerm, nTerm, zRoot, nRoot, &iStartBlock, pi);
                   114237:         if( rc!=SQLITE_OK ) goto finished;
                   114238:         if( isPrefix==0 && isScan==0 ) iLeavesEndBlock = iStartBlock;
                   114239:       }
                   114240:  
                   114241:       rc = sqlite3Fts3SegReaderNew(pCsr->nSegment+1, 
                   114242:           iStartBlock, iLeavesEndBlock, iEndBlock, zRoot, nRoot, &pSeg
                   114243:       );
                   114244:       if( rc!=SQLITE_OK ) goto finished;
                   114245:       rc = fts3SegReaderCursorAppend(pCsr, pSeg);
                   114246:     }
                   114247:   }
                   114248: 
                   114249:  finished:
                   114250:   rc2 = sqlite3_reset(pStmt);
                   114251:   if( rc==SQLITE_DONE ) rc = rc2;
                   114252: 
                   114253:   return rc;
                   114254: }
                   114255: 
                   114256: /*
                   114257: ** Set up a cursor object for iterating through a full-text index or a 
                   114258: ** single level therein.
                   114259: */
                   114260: SQLITE_PRIVATE int sqlite3Fts3SegReaderCursor(
                   114261:   Fts3Table *p,                   /* FTS3 table handle */
                   114262:   int iIndex,                     /* Index to search (from 0 to p->nIndex-1) */
                   114263:   int iLevel,                     /* Level of segments to scan */
                   114264:   const char *zTerm,              /* Term to query for */
                   114265:   int nTerm,                      /* Size of zTerm in bytes */
                   114266:   int isPrefix,                   /* True for a prefix search */
                   114267:   int isScan,                     /* True to scan from zTerm to EOF */
                   114268:   Fts3MultiSegReader *pCsr       /* Cursor object to populate */
                   114269: ){
                   114270:   assert( iIndex>=0 && iIndex<p->nIndex );
                   114271:   assert( iLevel==FTS3_SEGCURSOR_ALL
                   114272:       ||  iLevel==FTS3_SEGCURSOR_PENDING 
                   114273:       ||  iLevel>=0
                   114274:   );
                   114275:   assert( iLevel<FTS3_SEGDIR_MAXLEVEL );
                   114276:   assert( FTS3_SEGCURSOR_ALL<0 && FTS3_SEGCURSOR_PENDING<0 );
                   114277:   assert( isPrefix==0 || isScan==0 );
                   114278: 
                   114279:   /* "isScan" is only set to true by the ft4aux module, an ordinary
                   114280:   ** full-text tables. */
                   114281:   assert( isScan==0 || p->aIndex==0 );
                   114282: 
                   114283:   memset(pCsr, 0, sizeof(Fts3MultiSegReader));
                   114284: 
                   114285:   return fts3SegReaderCursor(
                   114286:       p, iIndex, iLevel, zTerm, nTerm, isPrefix, isScan, pCsr
                   114287:   );
                   114288: }
                   114289: 
                   114290: static int fts3SegReaderCursorAddZero(
                   114291:   Fts3Table *p,
                   114292:   const char *zTerm,
                   114293:   int nTerm,
                   114294:   Fts3MultiSegReader *pCsr
                   114295: ){
                   114296:   return fts3SegReaderCursor(p, 0, FTS3_SEGCURSOR_ALL, zTerm, nTerm, 0, 0,pCsr);
                   114297: }
                   114298: 
                   114299: 
                   114300: SQLITE_PRIVATE int sqlite3Fts3TermSegReaderCursor(
                   114301:   Fts3Cursor *pCsr,               /* Virtual table cursor handle */
                   114302:   const char *zTerm,              /* Term to query for */
                   114303:   int nTerm,                      /* Size of zTerm in bytes */
                   114304:   int isPrefix,                   /* True for a prefix search */
                   114305:   Fts3MultiSegReader **ppSegcsr   /* OUT: Allocated seg-reader cursor */
                   114306: ){
                   114307:   Fts3MultiSegReader *pSegcsr;   /* Object to allocate and return */
                   114308:   int rc = SQLITE_NOMEM;          /* Return code */
                   114309: 
                   114310:   pSegcsr = sqlite3_malloc(sizeof(Fts3MultiSegReader));
                   114311:   if( pSegcsr ){
                   114312:     int i;
                   114313:     int bFound = 0;               /* True once an index has been found */
                   114314:     Fts3Table *p = (Fts3Table *)pCsr->base.pVtab;
                   114315: 
                   114316:     if( isPrefix ){
                   114317:       for(i=1; bFound==0 && i<p->nIndex; i++){
                   114318:         if( p->aIndex[i].nPrefix==nTerm ){
                   114319:           bFound = 1;
                   114320:           rc = sqlite3Fts3SegReaderCursor(
                   114321:               p, i, FTS3_SEGCURSOR_ALL, zTerm, nTerm, 0, 0, pSegcsr);
                   114322:           pSegcsr->bLookup = 1;
                   114323:         }
                   114324:       }
                   114325: 
                   114326:       for(i=1; bFound==0 && i<p->nIndex; i++){
                   114327:         if( p->aIndex[i].nPrefix==nTerm+1 ){
                   114328:           bFound = 1;
                   114329:           rc = sqlite3Fts3SegReaderCursor(
                   114330:               p, i, FTS3_SEGCURSOR_ALL, zTerm, nTerm, 1, 0, pSegcsr
                   114331:           );
                   114332:           if( rc==SQLITE_OK ){
                   114333:             rc = fts3SegReaderCursorAddZero(p, zTerm, nTerm, pSegcsr);
                   114334:           }
                   114335:         }
                   114336:       }
                   114337:     }
                   114338: 
                   114339:     if( bFound==0 ){
                   114340:       rc = sqlite3Fts3SegReaderCursor(
                   114341:           p, 0, FTS3_SEGCURSOR_ALL, zTerm, nTerm, isPrefix, 0, pSegcsr
                   114342:       );
                   114343:       pSegcsr->bLookup = !isPrefix;
                   114344:     }
                   114345:   }
                   114346: 
                   114347:   *ppSegcsr = pSegcsr;
                   114348:   return rc;
                   114349: }
                   114350: 
                   114351: static void fts3SegReaderCursorFree(Fts3MultiSegReader *pSegcsr){
                   114352:   sqlite3Fts3SegReaderFinish(pSegcsr);
                   114353:   sqlite3_free(pSegcsr);
                   114354: }
                   114355: 
                   114356: /*
                   114357: ** This function retreives the doclist for the specified term (or term
                   114358: ** prefix) from the database. 
                   114359: **
                   114360: ** The returned doclist may be in one of two formats, depending on the 
                   114361: ** value of parameter isReqPos. If isReqPos is zero, then the doclist is
                   114362: ** a sorted list of delta-compressed docids (a bare doclist). If isReqPos
                   114363: ** is non-zero, then the returned list is in the same format as is stored 
                   114364: ** in the database without the found length specifier at the start of on-disk
                   114365: ** doclists.
                   114366: */
                   114367: static int fts3TermSelect(
                   114368:   Fts3Table *p,                   /* Virtual table handle */
                   114369:   Fts3PhraseToken *pTok,          /* Token to query for */
                   114370:   int iColumn,                    /* Column to query (or -ve for all columns) */
                   114371:   int isReqPos,                   /* True to include position lists in output */
                   114372:   int *pnOut,                     /* OUT: Size of buffer at *ppOut */
                   114373:   char **ppOut                    /* OUT: Malloced result buffer */
                   114374: ){
                   114375:   int rc;                         /* Return code */
                   114376:   Fts3MultiSegReader *pSegcsr;   /* Seg-reader cursor for this term */
                   114377:   TermSelect tsc;                 /* Context object for fts3TermSelectCb() */
                   114378:   Fts3SegFilter filter;           /* Segment term filter configuration */
                   114379: 
                   114380:   pSegcsr = pTok->pSegcsr;
                   114381:   memset(&tsc, 0, sizeof(TermSelect));
                   114382:   tsc.isReqPos = isReqPos;
                   114383: 
                   114384:   filter.flags = FTS3_SEGMENT_IGNORE_EMPTY 
                   114385:         | (pTok->isPrefix ? FTS3_SEGMENT_PREFIX : 0)
                   114386:         | (isReqPos ? FTS3_SEGMENT_REQUIRE_POS : 0)
                   114387:         | (iColumn<p->nColumn ? FTS3_SEGMENT_COLUMN_FILTER : 0);
                   114388:   filter.iCol = iColumn;
                   114389:   filter.zTerm = pTok->z;
                   114390:   filter.nTerm = pTok->n;
                   114391: 
                   114392:   rc = sqlite3Fts3SegReaderStart(p, pSegcsr, &filter);
                   114393:   while( SQLITE_OK==rc
                   114394:       && SQLITE_ROW==(rc = sqlite3Fts3SegReaderStep(p, pSegcsr)) 
                   114395:   ){
                   114396:     rc = fts3TermSelectCb(p, (void *)&tsc, 
                   114397:         pSegcsr->zTerm, pSegcsr->nTerm, pSegcsr->aDoclist, pSegcsr->nDoclist
                   114398:     );
                   114399:   }
                   114400: 
                   114401:   if( rc==SQLITE_OK ){
                   114402:     rc = fts3TermSelectMerge(p, &tsc);
                   114403:   }
                   114404:   if( rc==SQLITE_OK ){
                   114405:     *ppOut = tsc.aaOutput[0];
                   114406:     *pnOut = tsc.anOutput[0];
                   114407:   }else{
                   114408:     int i;
                   114409:     for(i=0; i<SizeofArray(tsc.aaOutput); i++){
                   114410:       sqlite3_free(tsc.aaOutput[i]);
                   114411:     }
                   114412:   }
                   114413: 
                   114414:   fts3SegReaderCursorFree(pSegcsr);
                   114415:   pTok->pSegcsr = 0;
                   114416:   return rc;
                   114417: }
                   114418: 
                   114419: /*
                   114420: ** This function counts the total number of docids in the doclist stored
                   114421: ** in buffer aList[], size nList bytes.
                   114422: **
                   114423: ** If the isPoslist argument is true, then it is assumed that the doclist
                   114424: ** contains a position-list following each docid. Otherwise, it is assumed
                   114425: ** that the doclist is simply a list of docids stored as delta encoded 
                   114426: ** varints.
                   114427: */
                   114428: static int fts3DoclistCountDocids(int isPoslist, char *aList, int nList){
                   114429:   int nDoc = 0;                   /* Return value */
                   114430:   if( aList ){
                   114431:     char *aEnd = &aList[nList];   /* Pointer to one byte after EOF */
                   114432:     char *p = aList;              /* Cursor */
                   114433:     if( !isPoslist ){
                   114434:       /* The number of docids in the list is the same as the number of 
                   114435:       ** varints. In FTS3 a varint consists of a single byte with the 0x80 
                   114436:       ** bit cleared and zero or more bytes with the 0x80 bit set. So to
                   114437:       ** count the varints in the buffer, just count the number of bytes
                   114438:       ** with the 0x80 bit clear.  */
                   114439:       while( p<aEnd ) nDoc += (((*p++)&0x80)==0);
                   114440:     }else{
                   114441:       while( p<aEnd ){
                   114442:         nDoc++;
                   114443:         while( (*p++)&0x80 );     /* Skip docid varint */
                   114444:         fts3PoslistCopy(0, &p);   /* Skip over position list */
                   114445:       }
                   114446:     }
                   114447:   }
                   114448: 
                   114449:   return nDoc;
                   114450: }
                   114451: 
                   114452: /*
                   114453: ** Advance the cursor to the next row in the %_content table that
                   114454: ** matches the search criteria.  For a MATCH search, this will be
                   114455: ** the next row that matches. For a full-table scan, this will be
                   114456: ** simply the next row in the %_content table.  For a docid lookup,
                   114457: ** this routine simply sets the EOF flag.
                   114458: **
                   114459: ** Return SQLITE_OK if nothing goes wrong.  SQLITE_OK is returned
                   114460: ** even if we reach end-of-file.  The fts3EofMethod() will be called
                   114461: ** subsequently to determine whether or not an EOF was hit.
                   114462: */
                   114463: static int fts3NextMethod(sqlite3_vtab_cursor *pCursor){
                   114464:   int rc;
                   114465:   Fts3Cursor *pCsr = (Fts3Cursor *)pCursor;
                   114466:   if( pCsr->eSearch==FTS3_DOCID_SEARCH || pCsr->eSearch==FTS3_FULLSCAN_SEARCH ){
                   114467:     if( SQLITE_ROW!=sqlite3_step(pCsr->pStmt) ){
                   114468:       pCsr->isEof = 1;
                   114469:       rc = sqlite3_reset(pCsr->pStmt);
                   114470:     }else{
                   114471:       pCsr->iPrevId = sqlite3_column_int64(pCsr->pStmt, 0);
                   114472:       rc = SQLITE_OK;
                   114473:     }
                   114474:   }else{
                   114475:     rc = sqlite3Fts3EvalNext((Fts3Cursor *)pCursor);
                   114476:   }
                   114477:   assert( ((Fts3Table *)pCsr->base.pVtab)->pSegments==0 );
                   114478:   return rc;
                   114479: }
                   114480: 
                   114481: /*
                   114482: ** This is the xFilter interface for the virtual table.  See
                   114483: ** the virtual table xFilter method documentation for additional
                   114484: ** information.
                   114485: **
                   114486: ** If idxNum==FTS3_FULLSCAN_SEARCH then do a full table scan against
                   114487: ** the %_content table.
                   114488: **
                   114489: ** If idxNum==FTS3_DOCID_SEARCH then do a docid lookup for a single entry
                   114490: ** in the %_content table.
                   114491: **
                   114492: ** If idxNum>=FTS3_FULLTEXT_SEARCH then use the full text index.  The
                   114493: ** column on the left-hand side of the MATCH operator is column
                   114494: ** number idxNum-FTS3_FULLTEXT_SEARCH, 0 indexed.  argv[0] is the right-hand
                   114495: ** side of the MATCH operator.
                   114496: */
                   114497: static int fts3FilterMethod(
                   114498:   sqlite3_vtab_cursor *pCursor,   /* The cursor used for this query */
                   114499:   int idxNum,                     /* Strategy index */
                   114500:   const char *idxStr,             /* Unused */
                   114501:   int nVal,                       /* Number of elements in apVal */
                   114502:   sqlite3_value **apVal           /* Arguments for the indexing scheme */
                   114503: ){
                   114504:   int rc;
                   114505:   char *zSql;                     /* SQL statement used to access %_content */
                   114506:   Fts3Table *p = (Fts3Table *)pCursor->pVtab;
                   114507:   Fts3Cursor *pCsr = (Fts3Cursor *)pCursor;
                   114508: 
                   114509:   UNUSED_PARAMETER(idxStr);
                   114510:   UNUSED_PARAMETER(nVal);
                   114511: 
                   114512:   assert( idxNum>=0 && idxNum<=(FTS3_FULLTEXT_SEARCH+p->nColumn) );
                   114513:   assert( nVal==0 || nVal==1 );
                   114514:   assert( (nVal==0)==(idxNum==FTS3_FULLSCAN_SEARCH) );
                   114515:   assert( p->pSegments==0 );
                   114516: 
                   114517:   /* In case the cursor has been used before, clear it now. */
                   114518:   sqlite3_finalize(pCsr->pStmt);
                   114519:   sqlite3_free(pCsr->aDoclist);
                   114520:   sqlite3Fts3ExprFree(pCsr->pExpr);
                   114521:   memset(&pCursor[1], 0, sizeof(Fts3Cursor)-sizeof(sqlite3_vtab_cursor));
                   114522: 
                   114523:   if( idxStr ){
                   114524:     pCsr->bDesc = (idxStr[0]=='D');
                   114525:   }else{
                   114526:     pCsr->bDesc = p->bDescIdx;
                   114527:   }
                   114528:   pCsr->eSearch = (i16)idxNum;
                   114529: 
                   114530:   if( idxNum!=FTS3_DOCID_SEARCH && idxNum!=FTS3_FULLSCAN_SEARCH ){
                   114531:     int iCol = idxNum-FTS3_FULLTEXT_SEARCH;
                   114532:     const char *zQuery = (const char *)sqlite3_value_text(apVal[0]);
                   114533: 
                   114534:     if( zQuery==0 && sqlite3_value_type(apVal[0])!=SQLITE_NULL ){
                   114535:       return SQLITE_NOMEM;
                   114536:     }
                   114537: 
                   114538:     rc = sqlite3Fts3ExprParse(p->pTokenizer, p->azColumn, p->nColumn, 
                   114539:         iCol, zQuery, -1, &pCsr->pExpr
                   114540:     );
                   114541:     if( rc!=SQLITE_OK ){
                   114542:       if( rc==SQLITE_ERROR ){
                   114543:         static const char *zErr = "malformed MATCH expression: [%s]";
                   114544:         p->base.zErrMsg = sqlite3_mprintf(zErr, zQuery);
                   114545:       }
                   114546:       return rc;
                   114547:     }
                   114548: 
                   114549:     rc = sqlite3Fts3ReadLock(p);
                   114550:     if( rc!=SQLITE_OK ) return rc;
                   114551: 
                   114552:     rc = sqlite3Fts3EvalStart(pCsr, pCsr->pExpr, 1);
                   114553: 
                   114554:     sqlite3Fts3SegmentsClose(p);
                   114555:     if( rc!=SQLITE_OK ) return rc;
                   114556:     pCsr->pNextId = pCsr->aDoclist;
                   114557:     pCsr->iPrevId = 0;
                   114558:   }
                   114559: 
                   114560:   /* Compile a SELECT statement for this cursor. For a full-table-scan, the
                   114561:   ** statement loops through all rows of the %_content table. For a
                   114562:   ** full-text query or docid lookup, the statement retrieves a single
                   114563:   ** row by docid.
                   114564:   */
                   114565:   if( idxNum==FTS3_FULLSCAN_SEARCH ){
                   114566:     const char *zSort = (pCsr->bDesc ? "DESC" : "ASC");
                   114567:     const char *zTmpl = "SELECT %s FROM %Q.'%q_content' AS x ORDER BY docid %s";
                   114568:     zSql = sqlite3_mprintf(zTmpl, p->zReadExprlist, p->zDb, p->zName, zSort);
                   114569:   }else{
                   114570:     const char *zTmpl = "SELECT %s FROM %Q.'%q_content' AS x WHERE docid = ?";
                   114571:     zSql = sqlite3_mprintf(zTmpl, p->zReadExprlist, p->zDb, p->zName);
                   114572:   }
                   114573:   if( !zSql ) return SQLITE_NOMEM;
                   114574:   rc = sqlite3_prepare_v2(p->db, zSql, -1, &pCsr->pStmt, 0);
                   114575:   sqlite3_free(zSql);
                   114576:   if( rc!=SQLITE_OK ) return rc;
                   114577: 
                   114578:   if( idxNum==FTS3_DOCID_SEARCH ){
                   114579:     rc = sqlite3_bind_value(pCsr->pStmt, 1, apVal[0]);
                   114580:     if( rc!=SQLITE_OK ) return rc;
                   114581:   }
                   114582: 
                   114583:   return fts3NextMethod(pCursor);
                   114584: }
                   114585: 
                   114586: /* 
                   114587: ** This is the xEof method of the virtual table. SQLite calls this 
                   114588: ** routine to find out if it has reached the end of a result set.
                   114589: */
                   114590: static int fts3EofMethod(sqlite3_vtab_cursor *pCursor){
                   114591:   return ((Fts3Cursor *)pCursor)->isEof;
                   114592: }
                   114593: 
                   114594: /* 
                   114595: ** This is the xRowid method. The SQLite core calls this routine to
                   114596: ** retrieve the rowid for the current row of the result set. fts3
                   114597: ** exposes %_content.docid as the rowid for the virtual table. The
                   114598: ** rowid should be written to *pRowid.
                   114599: */
                   114600: static int fts3RowidMethod(sqlite3_vtab_cursor *pCursor, sqlite_int64 *pRowid){
                   114601:   Fts3Cursor *pCsr = (Fts3Cursor *) pCursor;
                   114602:   *pRowid = pCsr->iPrevId;
                   114603:   return SQLITE_OK;
                   114604: }
                   114605: 
                   114606: /* 
                   114607: ** This is the xColumn method, called by SQLite to request a value from
                   114608: ** the row that the supplied cursor currently points to.
                   114609: */
                   114610: static int fts3ColumnMethod(
                   114611:   sqlite3_vtab_cursor *pCursor,   /* Cursor to retrieve value from */
                   114612:   sqlite3_context *pContext,      /* Context for sqlite3_result_xxx() calls */
                   114613:   int iCol                        /* Index of column to read value from */
                   114614: ){
                   114615:   int rc = SQLITE_OK;             /* Return Code */
                   114616:   Fts3Cursor *pCsr = (Fts3Cursor *) pCursor;
                   114617:   Fts3Table *p = (Fts3Table *)pCursor->pVtab;
                   114618: 
                   114619:   /* The column value supplied by SQLite must be in range. */
                   114620:   assert( iCol>=0 && iCol<=p->nColumn+1 );
                   114621: 
                   114622:   if( iCol==p->nColumn+1 ){
                   114623:     /* This call is a request for the "docid" column. Since "docid" is an 
                   114624:     ** alias for "rowid", use the xRowid() method to obtain the value.
                   114625:     */
                   114626:     sqlite3_result_int64(pContext, pCsr->iPrevId);
                   114627:   }else if( iCol==p->nColumn ){
                   114628:     /* The extra column whose name is the same as the table.
                   114629:     ** Return a blob which is a pointer to the cursor.
                   114630:     */
                   114631:     sqlite3_result_blob(pContext, &pCsr, sizeof(pCsr), SQLITE_TRANSIENT);
                   114632:   }else{
                   114633:     rc = fts3CursorSeek(0, pCsr);
                   114634:     if( rc==SQLITE_OK ){
                   114635:       sqlite3_result_value(pContext, sqlite3_column_value(pCsr->pStmt, iCol+1));
                   114636:     }
                   114637:   }
                   114638: 
                   114639:   assert( ((Fts3Table *)pCsr->base.pVtab)->pSegments==0 );
                   114640:   return rc;
                   114641: }
                   114642: 
                   114643: /* 
                   114644: ** This function is the implementation of the xUpdate callback used by 
                   114645: ** FTS3 virtual tables. It is invoked by SQLite each time a row is to be
                   114646: ** inserted, updated or deleted.
                   114647: */
                   114648: static int fts3UpdateMethod(
                   114649:   sqlite3_vtab *pVtab,            /* Virtual table handle */
                   114650:   int nArg,                       /* Size of argument array */
                   114651:   sqlite3_value **apVal,          /* Array of arguments */
                   114652:   sqlite_int64 *pRowid            /* OUT: The affected (or effected) rowid */
                   114653: ){
                   114654:   return sqlite3Fts3UpdateMethod(pVtab, nArg, apVal, pRowid);
                   114655: }
                   114656: 
                   114657: /*
                   114658: ** Implementation of xSync() method. Flush the contents of the pending-terms
                   114659: ** hash-table to the database.
                   114660: */
                   114661: static int fts3SyncMethod(sqlite3_vtab *pVtab){
                   114662:   int rc = sqlite3Fts3PendingTermsFlush((Fts3Table *)pVtab);
                   114663:   sqlite3Fts3SegmentsClose((Fts3Table *)pVtab);
                   114664:   return rc;
                   114665: }
                   114666: 
                   114667: /*
                   114668: ** Implementation of xBegin() method. This is a no-op.
                   114669: */
                   114670: static int fts3BeginMethod(sqlite3_vtab *pVtab){
                   114671:   TESTONLY( Fts3Table *p = (Fts3Table*)pVtab );
                   114672:   UNUSED_PARAMETER(pVtab);
                   114673:   assert( p->pSegments==0 );
                   114674:   assert( p->nPendingData==0 );
                   114675:   assert( p->inTransaction!=1 );
                   114676:   TESTONLY( p->inTransaction = 1 );
                   114677:   TESTONLY( p->mxSavepoint = -1; );
                   114678:   return SQLITE_OK;
                   114679: }
                   114680: 
                   114681: /*
                   114682: ** Implementation of xCommit() method. This is a no-op. The contents of
                   114683: ** the pending-terms hash-table have already been flushed into the database
                   114684: ** by fts3SyncMethod().
                   114685: */
                   114686: static int fts3CommitMethod(sqlite3_vtab *pVtab){
                   114687:   TESTONLY( Fts3Table *p = (Fts3Table*)pVtab );
                   114688:   UNUSED_PARAMETER(pVtab);
                   114689:   assert( p->nPendingData==0 );
                   114690:   assert( p->inTransaction!=0 );
                   114691:   assert( p->pSegments==0 );
                   114692:   TESTONLY( p->inTransaction = 0 );
                   114693:   TESTONLY( p->mxSavepoint = -1; );
                   114694:   return SQLITE_OK;
                   114695: }
                   114696: 
                   114697: /*
                   114698: ** Implementation of xRollback(). Discard the contents of the pending-terms
                   114699: ** hash-table. Any changes made to the database are reverted by SQLite.
                   114700: */
                   114701: static int fts3RollbackMethod(sqlite3_vtab *pVtab){
                   114702:   Fts3Table *p = (Fts3Table*)pVtab;
                   114703:   sqlite3Fts3PendingTermsClear(p);
                   114704:   assert( p->inTransaction!=0 );
                   114705:   TESTONLY( p->inTransaction = 0 );
                   114706:   TESTONLY( p->mxSavepoint = -1; );
                   114707:   return SQLITE_OK;
                   114708: }
                   114709: 
                   114710: /*
                   114711: ** When called, *ppPoslist must point to the byte immediately following the
                   114712: ** end of a position-list. i.e. ( (*ppPoslist)[-1]==POS_END ). This function
                   114713: ** moves *ppPoslist so that it instead points to the first byte of the
                   114714: ** same position list.
                   114715: */
                   114716: static void fts3ReversePoslist(char *pStart, char **ppPoslist){
                   114717:   char *p = &(*ppPoslist)[-2];
                   114718:   char c;
                   114719: 
                   114720:   while( p>pStart && (c=*p--)==0 );
                   114721:   while( p>pStart && (*p & 0x80) | c ){ 
                   114722:     c = *p--; 
                   114723:   }
                   114724:   if( p>pStart ){ p = &p[2]; }
                   114725:   while( *p++&0x80 );
                   114726:   *ppPoslist = p;
                   114727: }
                   114728: 
                   114729: /*
                   114730: ** Helper function used by the implementation of the overloaded snippet(),
                   114731: ** offsets() and optimize() SQL functions.
                   114732: **
                   114733: ** If the value passed as the third argument is a blob of size
                   114734: ** sizeof(Fts3Cursor*), then the blob contents are copied to the 
                   114735: ** output variable *ppCsr and SQLITE_OK is returned. Otherwise, an error
                   114736: ** message is written to context pContext and SQLITE_ERROR returned. The
                   114737: ** string passed via zFunc is used as part of the error message.
                   114738: */
                   114739: static int fts3FunctionArg(
                   114740:   sqlite3_context *pContext,      /* SQL function call context */
                   114741:   const char *zFunc,              /* Function name */
                   114742:   sqlite3_value *pVal,            /* argv[0] passed to function */
                   114743:   Fts3Cursor **ppCsr              /* OUT: Store cursor handle here */
                   114744: ){
                   114745:   Fts3Cursor *pRet;
                   114746:   if( sqlite3_value_type(pVal)!=SQLITE_BLOB 
                   114747:    || sqlite3_value_bytes(pVal)!=sizeof(Fts3Cursor *)
                   114748:   ){
                   114749:     char *zErr = sqlite3_mprintf("illegal first argument to %s", zFunc);
                   114750:     sqlite3_result_error(pContext, zErr, -1);
                   114751:     sqlite3_free(zErr);
                   114752:     return SQLITE_ERROR;
                   114753:   }
                   114754:   memcpy(&pRet, sqlite3_value_blob(pVal), sizeof(Fts3Cursor *));
                   114755:   *ppCsr = pRet;
                   114756:   return SQLITE_OK;
                   114757: }
                   114758: 
                   114759: /*
                   114760: ** Implementation of the snippet() function for FTS3
                   114761: */
                   114762: static void fts3SnippetFunc(
                   114763:   sqlite3_context *pContext,      /* SQLite function call context */
                   114764:   int nVal,                       /* Size of apVal[] array */
                   114765:   sqlite3_value **apVal           /* Array of arguments */
                   114766: ){
                   114767:   Fts3Cursor *pCsr;               /* Cursor handle passed through apVal[0] */
                   114768:   const char *zStart = "<b>";
                   114769:   const char *zEnd = "</b>";
                   114770:   const char *zEllipsis = "<b>...</b>";
                   114771:   int iCol = -1;
                   114772:   int nToken = 15;                /* Default number of tokens in snippet */
                   114773: 
                   114774:   /* There must be at least one argument passed to this function (otherwise
                   114775:   ** the non-overloaded version would have been called instead of this one).
                   114776:   */
                   114777:   assert( nVal>=1 );
                   114778: 
                   114779:   if( nVal>6 ){
                   114780:     sqlite3_result_error(pContext, 
                   114781:         "wrong number of arguments to function snippet()", -1);
                   114782:     return;
                   114783:   }
                   114784:   if( fts3FunctionArg(pContext, "snippet", apVal[0], &pCsr) ) return;
                   114785: 
                   114786:   switch( nVal ){
                   114787:     case 6: nToken = sqlite3_value_int(apVal[5]);
                   114788:     case 5: iCol = sqlite3_value_int(apVal[4]);
                   114789:     case 4: zEllipsis = (const char*)sqlite3_value_text(apVal[3]);
                   114790:     case 3: zEnd = (const char*)sqlite3_value_text(apVal[2]);
                   114791:     case 2: zStart = (const char*)sqlite3_value_text(apVal[1]);
                   114792:   }
                   114793:   if( !zEllipsis || !zEnd || !zStart ){
                   114794:     sqlite3_result_error_nomem(pContext);
                   114795:   }else if( SQLITE_OK==fts3CursorSeek(pContext, pCsr) ){
                   114796:     sqlite3Fts3Snippet(pContext, pCsr, zStart, zEnd, zEllipsis, iCol, nToken);
                   114797:   }
                   114798: }
                   114799: 
                   114800: /*
                   114801: ** Implementation of the offsets() function for FTS3
                   114802: */
                   114803: static void fts3OffsetsFunc(
                   114804:   sqlite3_context *pContext,      /* SQLite function call context */
                   114805:   int nVal,                       /* Size of argument array */
                   114806:   sqlite3_value **apVal           /* Array of arguments */
                   114807: ){
                   114808:   Fts3Cursor *pCsr;               /* Cursor handle passed through apVal[0] */
                   114809: 
                   114810:   UNUSED_PARAMETER(nVal);
                   114811: 
                   114812:   assert( nVal==1 );
                   114813:   if( fts3FunctionArg(pContext, "offsets", apVal[0], &pCsr) ) return;
                   114814:   assert( pCsr );
                   114815:   if( SQLITE_OK==fts3CursorSeek(pContext, pCsr) ){
                   114816:     sqlite3Fts3Offsets(pContext, pCsr);
                   114817:   }
                   114818: }
                   114819: 
                   114820: /* 
                   114821: ** Implementation of the special optimize() function for FTS3. This 
                   114822: ** function merges all segments in the database to a single segment.
                   114823: ** Example usage is:
                   114824: **
                   114825: **   SELECT optimize(t) FROM t LIMIT 1;
                   114826: **
                   114827: ** where 't' is the name of an FTS3 table.
                   114828: */
                   114829: static void fts3OptimizeFunc(
                   114830:   sqlite3_context *pContext,      /* SQLite function call context */
                   114831:   int nVal,                       /* Size of argument array */
                   114832:   sqlite3_value **apVal           /* Array of arguments */
                   114833: ){
                   114834:   int rc;                         /* Return code */
                   114835:   Fts3Table *p;                   /* Virtual table handle */
                   114836:   Fts3Cursor *pCursor;            /* Cursor handle passed through apVal[0] */
                   114837: 
                   114838:   UNUSED_PARAMETER(nVal);
                   114839: 
                   114840:   assert( nVal==1 );
                   114841:   if( fts3FunctionArg(pContext, "optimize", apVal[0], &pCursor) ) return;
                   114842:   p = (Fts3Table *)pCursor->base.pVtab;
                   114843:   assert( p );
                   114844: 
                   114845:   rc = sqlite3Fts3Optimize(p);
                   114846: 
                   114847:   switch( rc ){
                   114848:     case SQLITE_OK:
                   114849:       sqlite3_result_text(pContext, "Index optimized", -1, SQLITE_STATIC);
                   114850:       break;
                   114851:     case SQLITE_DONE:
                   114852:       sqlite3_result_text(pContext, "Index already optimal", -1, SQLITE_STATIC);
                   114853:       break;
                   114854:     default:
                   114855:       sqlite3_result_error_code(pContext, rc);
                   114856:       break;
                   114857:   }
                   114858: }
                   114859: 
                   114860: /*
                   114861: ** Implementation of the matchinfo() function for FTS3
                   114862: */
                   114863: static void fts3MatchinfoFunc(
                   114864:   sqlite3_context *pContext,      /* SQLite function call context */
                   114865:   int nVal,                       /* Size of argument array */
                   114866:   sqlite3_value **apVal           /* Array of arguments */
                   114867: ){
                   114868:   Fts3Cursor *pCsr;               /* Cursor handle passed through apVal[0] */
                   114869:   assert( nVal==1 || nVal==2 );
                   114870:   if( SQLITE_OK==fts3FunctionArg(pContext, "matchinfo", apVal[0], &pCsr) ){
                   114871:     const char *zArg = 0;
                   114872:     if( nVal>1 ){
                   114873:       zArg = (const char *)sqlite3_value_text(apVal[1]);
                   114874:     }
                   114875:     sqlite3Fts3Matchinfo(pContext, pCsr, zArg);
                   114876:   }
                   114877: }
                   114878: 
                   114879: /*
                   114880: ** This routine implements the xFindFunction method for the FTS3
                   114881: ** virtual table.
                   114882: */
                   114883: static int fts3FindFunctionMethod(
                   114884:   sqlite3_vtab *pVtab,            /* Virtual table handle */
                   114885:   int nArg,                       /* Number of SQL function arguments */
                   114886:   const char *zName,              /* Name of SQL function */
                   114887:   void (**pxFunc)(sqlite3_context*,int,sqlite3_value**), /* OUT: Result */
                   114888:   void **ppArg                    /* Unused */
                   114889: ){
                   114890:   struct Overloaded {
                   114891:     const char *zName;
                   114892:     void (*xFunc)(sqlite3_context*,int,sqlite3_value**);
                   114893:   } aOverload[] = {
                   114894:     { "snippet", fts3SnippetFunc },
                   114895:     { "offsets", fts3OffsetsFunc },
                   114896:     { "optimize", fts3OptimizeFunc },
                   114897:     { "matchinfo", fts3MatchinfoFunc },
                   114898:   };
                   114899:   int i;                          /* Iterator variable */
                   114900: 
                   114901:   UNUSED_PARAMETER(pVtab);
                   114902:   UNUSED_PARAMETER(nArg);
                   114903:   UNUSED_PARAMETER(ppArg);
                   114904: 
                   114905:   for(i=0; i<SizeofArray(aOverload); i++){
                   114906:     if( strcmp(zName, aOverload[i].zName)==0 ){
                   114907:       *pxFunc = aOverload[i].xFunc;
                   114908:       return 1;
                   114909:     }
                   114910:   }
                   114911: 
                   114912:   /* No function of the specified name was found. Return 0. */
                   114913:   return 0;
                   114914: }
                   114915: 
                   114916: /*
                   114917: ** Implementation of FTS3 xRename method. Rename an fts3 table.
                   114918: */
                   114919: static int fts3RenameMethod(
                   114920:   sqlite3_vtab *pVtab,            /* Virtual table handle */
                   114921:   const char *zName               /* New name of table */
                   114922: ){
                   114923:   Fts3Table *p = (Fts3Table *)pVtab;
                   114924:   sqlite3 *db = p->db;            /* Database connection */
                   114925:   int rc;                         /* Return Code */
                   114926: 
                   114927:   rc = sqlite3Fts3PendingTermsFlush(p);
                   114928:   if( rc!=SQLITE_OK ){
                   114929:     return rc;
                   114930:   }
                   114931: 
                   114932:   fts3DbExec(&rc, db,
                   114933:     "ALTER TABLE %Q.'%q_content'  RENAME TO '%q_content';",
                   114934:     p->zDb, p->zName, zName
                   114935:   );
                   114936:   if( p->bHasDocsize ){
                   114937:     fts3DbExec(&rc, db,
                   114938:       "ALTER TABLE %Q.'%q_docsize'  RENAME TO '%q_docsize';",
                   114939:       p->zDb, p->zName, zName
                   114940:     );
                   114941:   }
                   114942:   if( p->bHasStat ){
                   114943:     fts3DbExec(&rc, db,
                   114944:       "ALTER TABLE %Q.'%q_stat'  RENAME TO '%q_stat';",
                   114945:       p->zDb, p->zName, zName
                   114946:     );
                   114947:   }
                   114948:   fts3DbExec(&rc, db,
                   114949:     "ALTER TABLE %Q.'%q_segments' RENAME TO '%q_segments';",
                   114950:     p->zDb, p->zName, zName
                   114951:   );
                   114952:   fts3DbExec(&rc, db,
                   114953:     "ALTER TABLE %Q.'%q_segdir'   RENAME TO '%q_segdir';",
                   114954:     p->zDb, p->zName, zName
                   114955:   );
                   114956:   return rc;
                   114957: }
                   114958: 
                   114959: static int fts3SavepointMethod(sqlite3_vtab *pVtab, int iSavepoint){
                   114960:   UNUSED_PARAMETER(iSavepoint);
                   114961:   assert( ((Fts3Table *)pVtab)->inTransaction );
                   114962:   assert( ((Fts3Table *)pVtab)->mxSavepoint < iSavepoint );
                   114963:   TESTONLY( ((Fts3Table *)pVtab)->mxSavepoint = iSavepoint );
                   114964:   return fts3SyncMethod(pVtab);
                   114965: }
                   114966: static int fts3ReleaseMethod(sqlite3_vtab *pVtab, int iSavepoint){
                   114967:   TESTONLY( Fts3Table *p = (Fts3Table*)pVtab );
                   114968:   UNUSED_PARAMETER(iSavepoint);
                   114969:   UNUSED_PARAMETER(pVtab);
                   114970:   assert( p->inTransaction );
                   114971:   assert( p->mxSavepoint >= iSavepoint );
                   114972:   TESTONLY( p->mxSavepoint = iSavepoint-1 );
                   114973:   return SQLITE_OK;
                   114974: }
                   114975: static int fts3RollbackToMethod(sqlite3_vtab *pVtab, int iSavepoint){
                   114976:   Fts3Table *p = (Fts3Table*)pVtab;
                   114977:   UNUSED_PARAMETER(iSavepoint);
                   114978:   assert( p->inTransaction );
                   114979:   assert( p->mxSavepoint >= iSavepoint );
                   114980:   TESTONLY( p->mxSavepoint = iSavepoint );
                   114981:   sqlite3Fts3PendingTermsClear(p);
                   114982:   return SQLITE_OK;
                   114983: }
                   114984: 
                   114985: static const sqlite3_module fts3Module = {
                   114986:   /* iVersion      */ 2,
                   114987:   /* xCreate       */ fts3CreateMethod,
                   114988:   /* xConnect      */ fts3ConnectMethod,
                   114989:   /* xBestIndex    */ fts3BestIndexMethod,
                   114990:   /* xDisconnect   */ fts3DisconnectMethod,
                   114991:   /* xDestroy      */ fts3DestroyMethod,
                   114992:   /* xOpen         */ fts3OpenMethod,
                   114993:   /* xClose        */ fts3CloseMethod,
                   114994:   /* xFilter       */ fts3FilterMethod,
                   114995:   /* xNext         */ fts3NextMethod,
                   114996:   /* xEof          */ fts3EofMethod,
                   114997:   /* xColumn       */ fts3ColumnMethod,
                   114998:   /* xRowid        */ fts3RowidMethod,
                   114999:   /* xUpdate       */ fts3UpdateMethod,
                   115000:   /* xBegin        */ fts3BeginMethod,
                   115001:   /* xSync         */ fts3SyncMethod,
                   115002:   /* xCommit       */ fts3CommitMethod,
                   115003:   /* xRollback     */ fts3RollbackMethod,
                   115004:   /* xFindFunction */ fts3FindFunctionMethod,
                   115005:   /* xRename */       fts3RenameMethod,
                   115006:   /* xSavepoint    */ fts3SavepointMethod,
                   115007:   /* xRelease      */ fts3ReleaseMethod,
                   115008:   /* xRollbackTo   */ fts3RollbackToMethod,
                   115009: };
                   115010: 
                   115011: /*
                   115012: ** This function is registered as the module destructor (called when an
                   115013: ** FTS3 enabled database connection is closed). It frees the memory
                   115014: ** allocated for the tokenizer hash table.
                   115015: */
                   115016: static void hashDestroy(void *p){
                   115017:   Fts3Hash *pHash = (Fts3Hash *)p;
                   115018:   sqlite3Fts3HashClear(pHash);
                   115019:   sqlite3_free(pHash);
                   115020: }
                   115021: 
                   115022: /*
                   115023: ** The fts3 built-in tokenizers - "simple", "porter" and "icu"- are 
                   115024: ** implemented in files fts3_tokenizer1.c, fts3_porter.c and fts3_icu.c
                   115025: ** respectively. The following three forward declarations are for functions
                   115026: ** declared in these files used to retrieve the respective implementations.
                   115027: **
                   115028: ** Calling sqlite3Fts3SimpleTokenizerModule() sets the value pointed
                   115029: ** to by the argument to point to the "simple" tokenizer implementation.
                   115030: ** And so on.
                   115031: */
                   115032: SQLITE_PRIVATE void sqlite3Fts3SimpleTokenizerModule(sqlite3_tokenizer_module const**ppModule);
                   115033: SQLITE_PRIVATE void sqlite3Fts3PorterTokenizerModule(sqlite3_tokenizer_module const**ppModule);
                   115034: #ifdef SQLITE_ENABLE_ICU
                   115035: SQLITE_PRIVATE void sqlite3Fts3IcuTokenizerModule(sqlite3_tokenizer_module const**ppModule);
                   115036: #endif
                   115037: 
                   115038: /*
                   115039: ** Initialise the fts3 extension. If this extension is built as part
                   115040: ** of the sqlite library, then this function is called directly by
                   115041: ** SQLite. If fts3 is built as a dynamically loadable extension, this
                   115042: ** function is called by the sqlite3_extension_init() entry point.
                   115043: */
                   115044: SQLITE_PRIVATE int sqlite3Fts3Init(sqlite3 *db){
                   115045:   int rc = SQLITE_OK;
                   115046:   Fts3Hash *pHash = 0;
                   115047:   const sqlite3_tokenizer_module *pSimple = 0;
                   115048:   const sqlite3_tokenizer_module *pPorter = 0;
                   115049: 
                   115050: #ifdef SQLITE_ENABLE_ICU
                   115051:   const sqlite3_tokenizer_module *pIcu = 0;
                   115052:   sqlite3Fts3IcuTokenizerModule(&pIcu);
                   115053: #endif
                   115054: 
                   115055: #ifdef SQLITE_TEST
                   115056:   rc = sqlite3Fts3InitTerm(db);
                   115057:   if( rc!=SQLITE_OK ) return rc;
                   115058: #endif
                   115059: 
                   115060:   rc = sqlite3Fts3InitAux(db);
                   115061:   if( rc!=SQLITE_OK ) return rc;
                   115062: 
                   115063:   sqlite3Fts3SimpleTokenizerModule(&pSimple);
                   115064:   sqlite3Fts3PorterTokenizerModule(&pPorter);
                   115065: 
                   115066:   /* Allocate and initialise the hash-table used to store tokenizers. */
                   115067:   pHash = sqlite3_malloc(sizeof(Fts3Hash));
                   115068:   if( !pHash ){
                   115069:     rc = SQLITE_NOMEM;
                   115070:   }else{
                   115071:     sqlite3Fts3HashInit(pHash, FTS3_HASH_STRING, 1);
                   115072:   }
                   115073: 
                   115074:   /* Load the built-in tokenizers into the hash table */
                   115075:   if( rc==SQLITE_OK ){
                   115076:     if( sqlite3Fts3HashInsert(pHash, "simple", 7, (void *)pSimple)
                   115077:      || sqlite3Fts3HashInsert(pHash, "porter", 7, (void *)pPorter) 
                   115078: #ifdef SQLITE_ENABLE_ICU
                   115079:      || (pIcu && sqlite3Fts3HashInsert(pHash, "icu", 4, (void *)pIcu))
                   115080: #endif
                   115081:     ){
                   115082:       rc = SQLITE_NOMEM;
                   115083:     }
                   115084:   }
                   115085: 
                   115086: #ifdef SQLITE_TEST
                   115087:   if( rc==SQLITE_OK ){
                   115088:     rc = sqlite3Fts3ExprInitTestInterface(db);
                   115089:   }
                   115090: #endif
                   115091: 
                   115092:   /* Create the virtual table wrapper around the hash-table and overload 
                   115093:   ** the two scalar functions. If this is successful, register the
                   115094:   ** module with sqlite.
                   115095:   */
                   115096:   if( SQLITE_OK==rc 
                   115097:    && SQLITE_OK==(rc = sqlite3Fts3InitHashTable(db, pHash, "fts3_tokenizer"))
                   115098:    && SQLITE_OK==(rc = sqlite3_overload_function(db, "snippet", -1))
                   115099:    && SQLITE_OK==(rc = sqlite3_overload_function(db, "offsets", 1))
                   115100:    && SQLITE_OK==(rc = sqlite3_overload_function(db, "matchinfo", 1))
                   115101:    && SQLITE_OK==(rc = sqlite3_overload_function(db, "matchinfo", 2))
                   115102:    && SQLITE_OK==(rc = sqlite3_overload_function(db, "optimize", 1))
                   115103:   ){
                   115104:     rc = sqlite3_create_module_v2(
                   115105:         db, "fts3", &fts3Module, (void *)pHash, hashDestroy
                   115106:     );
                   115107:     if( rc==SQLITE_OK ){
                   115108:       rc = sqlite3_create_module_v2(
                   115109:           db, "fts4", &fts3Module, (void *)pHash, 0
                   115110:       );
                   115111:     }
                   115112:     return rc;
                   115113:   }
                   115114: 
                   115115:   /* An error has occurred. Delete the hash table and return the error code. */
                   115116:   assert( rc!=SQLITE_OK );
                   115117:   if( pHash ){
                   115118:     sqlite3Fts3HashClear(pHash);
                   115119:     sqlite3_free(pHash);
                   115120:   }
                   115121:   return rc;
                   115122: }
                   115123: 
                   115124: #if !SQLITE_CORE
                   115125: SQLITE_API int sqlite3_extension_init(
                   115126:   sqlite3 *db, 
                   115127:   char **pzErrMsg,
                   115128:   const sqlite3_api_routines *pApi
                   115129: ){
                   115130:   SQLITE_EXTENSION_INIT2(pApi)
                   115131:   return sqlite3Fts3Init(db);
                   115132: }
                   115133: #endif
                   115134: 
                   115135: 
                   115136: /*
                   115137: ** Allocate an Fts3MultiSegReader for each token in the expression headed
                   115138: ** by pExpr. 
                   115139: **
                   115140: ** An Fts3SegReader object is a cursor that can seek or scan a range of
                   115141: ** entries within a single segment b-tree. An Fts3MultiSegReader uses multiple
                   115142: ** Fts3SegReader objects internally to provide an interface to seek or scan
                   115143: ** within the union of all segments of a b-tree. Hence the name.
                   115144: **
                   115145: ** If the allocated Fts3MultiSegReader just seeks to a single entry in a
                   115146: ** segment b-tree (if the term is not a prefix or it is a prefix for which
                   115147: ** there exists prefix b-tree of the right length) then it may be traversed
                   115148: ** and merged incrementally. Otherwise, it has to be merged into an in-memory 
                   115149: ** doclist and then traversed.
                   115150: */
                   115151: static void fts3EvalAllocateReaders(
                   115152:   Fts3Cursor *pCsr, 
                   115153:   Fts3Expr *pExpr, 
                   115154:   int *pnToken,                   /* OUT: Total number of tokens in phrase. */
                   115155:   int *pnOr,                      /* OUT: Total number of OR nodes in expr. */
                   115156:   int *pRc
                   115157: ){
                   115158:   if( pExpr && SQLITE_OK==*pRc ){
                   115159:     if( pExpr->eType==FTSQUERY_PHRASE ){
                   115160:       int i;
                   115161:       int nToken = pExpr->pPhrase->nToken;
                   115162:       *pnToken += nToken;
                   115163:       for(i=0; i<nToken; i++){
                   115164:         Fts3PhraseToken *pToken = &pExpr->pPhrase->aToken[i];
                   115165:         int rc = sqlite3Fts3TermSegReaderCursor(pCsr, 
                   115166:             pToken->z, pToken->n, pToken->isPrefix, &pToken->pSegcsr
                   115167:         );
                   115168:         if( rc!=SQLITE_OK ){
                   115169:           *pRc = rc;
                   115170:           return;
                   115171:         }
                   115172:       }
                   115173:       assert( pExpr->pPhrase->iDoclistToken==0 );
                   115174:       pExpr->pPhrase->iDoclistToken = -1;
                   115175:     }else{
                   115176:       *pnOr += (pExpr->eType==FTSQUERY_OR);
                   115177:       fts3EvalAllocateReaders(pCsr, pExpr->pLeft, pnToken, pnOr, pRc);
                   115178:       fts3EvalAllocateReaders(pCsr, pExpr->pRight, pnToken, pnOr, pRc);
                   115179:     }
                   115180:   }
                   115181: }
                   115182: 
                   115183: static void fts3EvalPhraseMergeToken(
                   115184:   Fts3Table *pTab,
                   115185:   Fts3Phrase *p,
                   115186:   int iToken,
                   115187:   char *pList,
                   115188:   int nList
                   115189: ){
                   115190:   assert( iToken!=p->iDoclistToken );
                   115191: 
                   115192:   if( pList==0 ){
                   115193:     sqlite3_free(p->doclist.aAll);
                   115194:     p->doclist.aAll = 0;
                   115195:     p->doclist.nAll = 0;
                   115196:   }
                   115197: 
                   115198:   else if( p->iDoclistToken<0 ){
                   115199:     p->doclist.aAll = pList;
                   115200:     p->doclist.nAll = nList;
                   115201:   }
                   115202: 
                   115203:   else if( p->doclist.aAll==0 ){
                   115204:     sqlite3_free(pList);
                   115205:   }
                   115206: 
                   115207:   else {
                   115208:     char *pLeft;
                   115209:     char *pRight;
                   115210:     int nLeft;
                   115211:     int nRight;
                   115212:     int nDiff;
                   115213: 
                   115214:     if( p->iDoclistToken<iToken ){
                   115215:       pLeft = p->doclist.aAll;
                   115216:       nLeft = p->doclist.nAll;
                   115217:       pRight = pList;
                   115218:       nRight = nList;
                   115219:       nDiff = iToken - p->iDoclistToken;
                   115220:     }else{
                   115221:       pRight = p->doclist.aAll;
                   115222:       nRight = p->doclist.nAll;
                   115223:       pLeft = pList;
                   115224:       nLeft = nList;
                   115225:       nDiff = p->iDoclistToken - iToken;
                   115226:     }
                   115227: 
                   115228:     fts3DoclistPhraseMerge(pTab->bDescIdx, nDiff, pLeft, nLeft, pRight,&nRight);
                   115229:     sqlite3_free(pLeft);
                   115230:     p->doclist.aAll = pRight;
                   115231:     p->doclist.nAll = nRight;
                   115232:   }
                   115233: 
                   115234:   if( iToken>p->iDoclistToken ) p->iDoclistToken = iToken;
                   115235: }
                   115236: 
                   115237: static int fts3EvalPhraseLoad(
                   115238:   Fts3Cursor *pCsr, 
                   115239:   Fts3Phrase *p
                   115240: ){
                   115241:   Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab;
                   115242:   int iToken;
                   115243:   int rc = SQLITE_OK;
                   115244: 
                   115245:   for(iToken=0; rc==SQLITE_OK && iToken<p->nToken; iToken++){
                   115246:     Fts3PhraseToken *pToken = &p->aToken[iToken];
                   115247:     assert( pToken->pDeferred==0 || pToken->pSegcsr==0 );
                   115248: 
                   115249:     if( pToken->pSegcsr ){
                   115250:       int nThis = 0;
                   115251:       char *pThis = 0;
                   115252:       rc = fts3TermSelect(pTab, pToken, p->iColumn, 1, &nThis, &pThis);
                   115253:       if( rc==SQLITE_OK ){
                   115254:         fts3EvalPhraseMergeToken(pTab, p, iToken, pThis, nThis);
                   115255:       }
                   115256:     }
                   115257:     assert( pToken->pSegcsr==0 );
                   115258:   }
                   115259: 
                   115260:   return rc;
                   115261: }
                   115262: 
                   115263: static int fts3EvalDeferredPhrase(Fts3Cursor *pCsr, Fts3Phrase *pPhrase){
                   115264:   int iToken;
                   115265:   int rc = SQLITE_OK;
                   115266: 
                   115267:   int nMaxUndeferred = pPhrase->iDoclistToken;
                   115268:   char *aPoslist = 0;
                   115269:   int nPoslist = 0;
                   115270:   int iPrev = -1;
                   115271: 
                   115272:   assert( pPhrase->doclist.bFreeList==0 );
                   115273: 
                   115274:   for(iToken=0; rc==SQLITE_OK && iToken<pPhrase->nToken; iToken++){
                   115275:     Fts3PhraseToken *pToken = &pPhrase->aToken[iToken];
                   115276:     Fts3DeferredToken *pDeferred = pToken->pDeferred;
                   115277: 
                   115278:     if( pDeferred ){
                   115279:       char *pList;
                   115280:       int nList;
                   115281:       rc = sqlite3Fts3DeferredTokenList(pDeferred, &pList, &nList);
                   115282:       if( rc!=SQLITE_OK ) return rc;
                   115283: 
                   115284:       if( pList==0 ){
                   115285:         sqlite3_free(aPoslist);
                   115286:         pPhrase->doclist.pList = 0;
                   115287:         pPhrase->doclist.nList = 0;
                   115288:         return SQLITE_OK;
                   115289: 
                   115290:       }else if( aPoslist==0 ){
                   115291:         aPoslist = pList;
                   115292:         nPoslist = nList;
                   115293: 
                   115294:       }else{
                   115295:         char *aOut = pList;
                   115296:         char *p1 = aPoslist;
                   115297:         char *p2 = aOut;
                   115298: 
                   115299:         assert( iPrev>=0 );
                   115300:         fts3PoslistPhraseMerge(&aOut, iToken-iPrev, 0, 1, &p1, &p2);
                   115301:         sqlite3_free(aPoslist);
                   115302:         aPoslist = pList;
                   115303:         nPoslist = aOut - aPoslist;
                   115304:         if( nPoslist==0 ){
                   115305:           sqlite3_free(aPoslist);
                   115306:           pPhrase->doclist.pList = 0;
                   115307:           pPhrase->doclist.nList = 0;
                   115308:           return SQLITE_OK;
                   115309:         }
                   115310:       }
                   115311:       iPrev = iToken;
                   115312:     }
                   115313:   }
                   115314: 
                   115315:   if( iPrev>=0 ){
                   115316:     if( nMaxUndeferred<0 ){
                   115317:       pPhrase->doclist.pList = aPoslist;
                   115318:       pPhrase->doclist.nList = nPoslist;
                   115319:       pPhrase->doclist.iDocid = pCsr->iPrevId;
                   115320:       pPhrase->doclist.bFreeList = 1;
                   115321:     }else{
                   115322:       int nDistance;
                   115323:       char *p1;
                   115324:       char *p2;
                   115325:       char *aOut;
                   115326: 
                   115327:       if( nMaxUndeferred>iPrev ){
                   115328:         p1 = aPoslist;
                   115329:         p2 = pPhrase->doclist.pList;
                   115330:         nDistance = nMaxUndeferred - iPrev;
                   115331:       }else{
                   115332:         p1 = pPhrase->doclist.pList;
                   115333:         p2 = aPoslist;
                   115334:         nDistance = iPrev - nMaxUndeferred;
                   115335:       }
                   115336: 
                   115337:       aOut = (char *)sqlite3_malloc(nPoslist+8);
                   115338:       if( !aOut ){
                   115339:         sqlite3_free(aPoslist);
                   115340:         return SQLITE_NOMEM;
                   115341:       }
                   115342:       
                   115343:       pPhrase->doclist.pList = aOut;
                   115344:       if( fts3PoslistPhraseMerge(&aOut, nDistance, 0, 1, &p1, &p2) ){
                   115345:         pPhrase->doclist.bFreeList = 1;
                   115346:         pPhrase->doclist.nList = (aOut - pPhrase->doclist.pList);
                   115347:       }else{
                   115348:         sqlite3_free(aOut);
                   115349:         pPhrase->doclist.pList = 0;
                   115350:         pPhrase->doclist.nList = 0;
                   115351:       }
                   115352:       sqlite3_free(aPoslist);
                   115353:     }
                   115354:   }
                   115355: 
                   115356:   return SQLITE_OK;
                   115357: }
                   115358: 
                   115359: /*
                   115360: ** This function is called for each Fts3Phrase in a full-text query 
                   115361: ** expression to initialize the mechanism for returning rows. Once this
                   115362: ** function has been called successfully on an Fts3Phrase, it may be
                   115363: ** used with fts3EvalPhraseNext() to iterate through the matching docids.
                   115364: */
                   115365: static int fts3EvalPhraseStart(Fts3Cursor *pCsr, int bOptOk, Fts3Phrase *p){
                   115366:   int rc;
                   115367:   Fts3PhraseToken *pFirst = &p->aToken[0];
                   115368:   Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab;
                   115369: 
                   115370:   if( pCsr->bDesc==pTab->bDescIdx 
                   115371:    && bOptOk==1 
                   115372:    && p->nToken==1 
                   115373:    && pFirst->pSegcsr 
                   115374:    && pFirst->pSegcsr->bLookup 
                   115375:   ){
                   115376:     /* Use the incremental approach. */
                   115377:     int iCol = (p->iColumn >= pTab->nColumn ? -1 : p->iColumn);
                   115378:     rc = sqlite3Fts3MsrIncrStart(
                   115379:         pTab, pFirst->pSegcsr, iCol, pFirst->z, pFirst->n);
                   115380:     p->bIncr = 1;
                   115381: 
                   115382:   }else{
                   115383:     /* Load the full doclist for the phrase into memory. */
                   115384:     rc = fts3EvalPhraseLoad(pCsr, p);
                   115385:     p->bIncr = 0;
                   115386:   }
                   115387: 
                   115388:   assert( rc!=SQLITE_OK || p->nToken<1 || p->aToken[0].pSegcsr==0 || p->bIncr );
                   115389:   return rc;
                   115390: }
                   115391: 
                   115392: /*
                   115393: ** This function is used to iterate backwards (from the end to start) 
                   115394: ** through doclists.
                   115395: */
                   115396: SQLITE_PRIVATE void sqlite3Fts3DoclistPrev(
                   115397:   int bDescIdx,                   /* True if the doclist is desc */
                   115398:   char *aDoclist,                 /* Pointer to entire doclist */
                   115399:   int nDoclist,                   /* Length of aDoclist in bytes */
                   115400:   char **ppIter,                  /* IN/OUT: Iterator pointer */
                   115401:   sqlite3_int64 *piDocid,         /* IN/OUT: Docid pointer */
                   115402:   int *pnList,                    /* IN/OUT: List length pointer */
                   115403:   u8 *pbEof                       /* OUT: End-of-file flag */
                   115404: ){
                   115405:   char *p = *ppIter;
                   115406: 
                   115407:   assert( nDoclist>0 );
                   115408:   assert( *pbEof==0 );
                   115409:   assert( p || *piDocid==0 );
                   115410:   assert( !p || (p>aDoclist && p<&aDoclist[nDoclist]) );
                   115411: 
                   115412:   if( p==0 ){
                   115413:     sqlite3_int64 iDocid = 0;
                   115414:     char *pNext = 0;
                   115415:     char *pDocid = aDoclist;
                   115416:     char *pEnd = &aDoclist[nDoclist];
                   115417:     int iMul = 1;
                   115418: 
                   115419:     while( pDocid<pEnd ){
                   115420:       sqlite3_int64 iDelta;
                   115421:       pDocid += sqlite3Fts3GetVarint(pDocid, &iDelta);
                   115422:       iDocid += (iMul * iDelta);
                   115423:       pNext = pDocid;
                   115424:       fts3PoslistCopy(0, &pDocid);
                   115425:       while( pDocid<pEnd && *pDocid==0 ) pDocid++;
                   115426:       iMul = (bDescIdx ? -1 : 1);
                   115427:     }
                   115428: 
                   115429:     *pnList = pEnd - pNext;
                   115430:     *ppIter = pNext;
                   115431:     *piDocid = iDocid;
                   115432:   }else{
                   115433:     int iMul = (bDescIdx ? -1 : 1);
                   115434:     sqlite3_int64 iDelta;
                   115435:     fts3GetReverseVarint(&p, aDoclist, &iDelta);
                   115436:     *piDocid -= (iMul * iDelta);
                   115437: 
                   115438:     if( p==aDoclist ){
                   115439:       *pbEof = 1;
                   115440:     }else{
                   115441:       char *pSave = p;
                   115442:       fts3ReversePoslist(aDoclist, &p);
                   115443:       *pnList = (pSave - p);
                   115444:     }
                   115445:     *ppIter = p;
                   115446:   }
                   115447: }
                   115448: 
                   115449: /*
                   115450: ** Attempt to move the phrase iterator to point to the next matching docid. 
                   115451: ** If an error occurs, return an SQLite error code. Otherwise, return 
                   115452: ** SQLITE_OK.
                   115453: **
                   115454: ** If there is no "next" entry and no error occurs, then *pbEof is set to
                   115455: ** 1 before returning. Otherwise, if no error occurs and the iterator is
                   115456: ** successfully advanced, *pbEof is set to 0.
                   115457: */
                   115458: static int fts3EvalPhraseNext(
                   115459:   Fts3Cursor *pCsr, 
                   115460:   Fts3Phrase *p, 
                   115461:   u8 *pbEof
                   115462: ){
                   115463:   int rc = SQLITE_OK;
                   115464:   Fts3Doclist *pDL = &p->doclist;
                   115465:   Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab;
                   115466: 
                   115467:   if( p->bIncr ){
                   115468:     assert( p->nToken==1 );
                   115469:     assert( pDL->pNextDocid==0 );
                   115470:     rc = sqlite3Fts3MsrIncrNext(pTab, p->aToken[0].pSegcsr, 
                   115471:         &pDL->iDocid, &pDL->pList, &pDL->nList
                   115472:     );
                   115473:     if( rc==SQLITE_OK && !pDL->pList ){
                   115474:       *pbEof = 1;
                   115475:     }
                   115476:   }else if( pCsr->bDesc!=pTab->bDescIdx && pDL->nAll ){
                   115477:     sqlite3Fts3DoclistPrev(pTab->bDescIdx, pDL->aAll, pDL->nAll, 
                   115478:         &pDL->pNextDocid, &pDL->iDocid, &pDL->nList, pbEof
                   115479:     );
                   115480:     pDL->pList = pDL->pNextDocid;
                   115481:   }else{
                   115482:     char *pIter;                            /* Used to iterate through aAll */
                   115483:     char *pEnd = &pDL->aAll[pDL->nAll];     /* 1 byte past end of aAll */
                   115484:     if( pDL->pNextDocid ){
                   115485:       pIter = pDL->pNextDocid;
                   115486:     }else{
                   115487:       pIter = pDL->aAll;
                   115488:     }
                   115489: 
                   115490:     if( pIter>=pEnd ){
                   115491:       /* We have already reached the end of this doclist. EOF. */
                   115492:       *pbEof = 1;
                   115493:     }else{
                   115494:       sqlite3_int64 iDelta;
                   115495:       pIter += sqlite3Fts3GetVarint(pIter, &iDelta);
                   115496:       if( pTab->bDescIdx==0 || pDL->pNextDocid==0 ){
                   115497:         pDL->iDocid += iDelta;
                   115498:       }else{
                   115499:         pDL->iDocid -= iDelta;
                   115500:       }
                   115501:       pDL->pList = pIter;
                   115502:       fts3PoslistCopy(0, &pIter);
                   115503:       pDL->nList = (pIter - pDL->pList);
                   115504: 
                   115505:       /* pIter now points just past the 0x00 that terminates the position-
                   115506:       ** list for document pDL->iDocid. However, if this position-list was
                   115507:       ** edited in place by fts3EvalNearTrim2(), then pIter may not actually
                   115508:       ** point to the start of the next docid value. The following line deals
                   115509:       ** with this case by advancing pIter past the zero-padding added by
                   115510:       ** fts3EvalNearTrim2().  */
                   115511:       while( pIter<pEnd && *pIter==0 ) pIter++;
                   115512: 
                   115513:       pDL->pNextDocid = pIter;
                   115514:       assert( pIter>=&pDL->aAll[pDL->nAll] || *pIter );
                   115515:       *pbEof = 0;
                   115516:     }
                   115517:   }
                   115518: 
                   115519:   return rc;
                   115520: }
                   115521: 
                   115522: static void fts3EvalStartReaders(
                   115523:   Fts3Cursor *pCsr, 
                   115524:   Fts3Expr *pExpr, 
                   115525:   int bOptOk,
                   115526:   int *pRc
                   115527: ){
                   115528:   if( pExpr && SQLITE_OK==*pRc ){
                   115529:     if( pExpr->eType==FTSQUERY_PHRASE ){
                   115530:       int i;
                   115531:       int nToken = pExpr->pPhrase->nToken;
                   115532:       for(i=0; i<nToken; i++){
                   115533:         if( pExpr->pPhrase->aToken[i].pDeferred==0 ) break;
                   115534:       }
                   115535:       pExpr->bDeferred = (i==nToken);
                   115536:       *pRc = fts3EvalPhraseStart(pCsr, bOptOk, pExpr->pPhrase);
                   115537:     }else{
                   115538:       fts3EvalStartReaders(pCsr, pExpr->pLeft, bOptOk, pRc);
                   115539:       fts3EvalStartReaders(pCsr, pExpr->pRight, bOptOk, pRc);
                   115540:       pExpr->bDeferred = (pExpr->pLeft->bDeferred && pExpr->pRight->bDeferred);
                   115541:     }
                   115542:   }
                   115543: }
                   115544: 
                   115545: typedef struct Fts3TokenAndCost Fts3TokenAndCost;
                   115546: struct Fts3TokenAndCost {
                   115547:   Fts3Phrase *pPhrase;            /* The phrase the token belongs to */
                   115548:   int iToken;                     /* Position of token in phrase */
                   115549:   Fts3PhraseToken *pToken;        /* The token itself */
                   115550:   Fts3Expr *pRoot; 
                   115551:   int nOvfl;
                   115552:   int iCol;                       /* The column the token must match */
                   115553: };
                   115554: 
                   115555: static void fts3EvalTokenCosts(
                   115556:   Fts3Cursor *pCsr, 
                   115557:   Fts3Expr *pRoot, 
                   115558:   Fts3Expr *pExpr, 
                   115559:   Fts3TokenAndCost **ppTC,
                   115560:   Fts3Expr ***ppOr,
                   115561:   int *pRc
                   115562: ){
                   115563:   if( *pRc==SQLITE_OK && pExpr ){
                   115564:     if( pExpr->eType==FTSQUERY_PHRASE ){
                   115565:       Fts3Phrase *pPhrase = pExpr->pPhrase;
                   115566:       int i;
                   115567:       for(i=0; *pRc==SQLITE_OK && i<pPhrase->nToken; i++){
                   115568:         Fts3TokenAndCost *pTC = (*ppTC)++;
                   115569:         pTC->pPhrase = pPhrase;
                   115570:         pTC->iToken = i;
                   115571:         pTC->pRoot = pRoot;
                   115572:         pTC->pToken = &pPhrase->aToken[i];
                   115573:         pTC->iCol = pPhrase->iColumn;
                   115574:         *pRc = sqlite3Fts3MsrOvfl(pCsr, pTC->pToken->pSegcsr, &pTC->nOvfl);
                   115575:       }
                   115576:     }else if( pExpr->eType!=FTSQUERY_NOT ){
                   115577:       if( pExpr->eType==FTSQUERY_OR ){
                   115578:         pRoot = pExpr->pLeft;
                   115579:         **ppOr = pRoot;
                   115580:         (*ppOr)++;
                   115581:       }
                   115582:       fts3EvalTokenCosts(pCsr, pRoot, pExpr->pLeft, ppTC, ppOr, pRc);
                   115583:       if( pExpr->eType==FTSQUERY_OR ){
                   115584:         pRoot = pExpr->pRight;
                   115585:         **ppOr = pRoot;
                   115586:         (*ppOr)++;
                   115587:       }
                   115588:       fts3EvalTokenCosts(pCsr, pRoot, pExpr->pRight, ppTC, ppOr, pRc);
                   115589:     }
                   115590:   }
                   115591: }
                   115592: 
                   115593: static int fts3EvalAverageDocsize(Fts3Cursor *pCsr, int *pnPage){
                   115594:   if( pCsr->nRowAvg==0 ){
                   115595:     /* The average document size, which is required to calculate the cost
                   115596:      ** of each doclist, has not yet been determined. Read the required 
                   115597:      ** data from the %_stat table to calculate it.
                   115598:      **
                   115599:      ** Entry 0 of the %_stat table is a blob containing (nCol+1) FTS3 
                   115600:      ** varints, where nCol is the number of columns in the FTS3 table.
                   115601:      ** The first varint is the number of documents currently stored in
                   115602:      ** the table. The following nCol varints contain the total amount of
                   115603:      ** data stored in all rows of each column of the table, from left
                   115604:      ** to right.
                   115605:      */
                   115606:     int rc;
                   115607:     Fts3Table *p = (Fts3Table*)pCsr->base.pVtab;
                   115608:     sqlite3_stmt *pStmt;
                   115609:     sqlite3_int64 nDoc = 0;
                   115610:     sqlite3_int64 nByte = 0;
                   115611:     const char *pEnd;
                   115612:     const char *a;
                   115613: 
                   115614:     rc = sqlite3Fts3SelectDoctotal(p, &pStmt);
                   115615:     if( rc!=SQLITE_OK ) return rc;
                   115616:     a = sqlite3_column_blob(pStmt, 0);
                   115617:     assert( a );
                   115618: 
                   115619:     pEnd = &a[sqlite3_column_bytes(pStmt, 0)];
                   115620:     a += sqlite3Fts3GetVarint(a, &nDoc);
                   115621:     while( a<pEnd ){
                   115622:       a += sqlite3Fts3GetVarint(a, &nByte);
                   115623:     }
                   115624:     if( nDoc==0 || nByte==0 ){
                   115625:       sqlite3_reset(pStmt);
                   115626:       return SQLITE_CORRUPT_VTAB;
                   115627:     }
                   115628: 
                   115629:     pCsr->nDoc = nDoc;
                   115630:     pCsr->nRowAvg = (int)(((nByte / nDoc) + p->nPgsz) / p->nPgsz);
                   115631:     assert( pCsr->nRowAvg>0 ); 
                   115632:     rc = sqlite3_reset(pStmt);
                   115633:     if( rc!=SQLITE_OK ) return rc;
                   115634:   }
                   115635: 
                   115636:   *pnPage = pCsr->nRowAvg;
                   115637:   return SQLITE_OK;
                   115638: }
                   115639: 
                   115640: static int fts3EvalSelectDeferred(
                   115641:   Fts3Cursor *pCsr,
                   115642:   Fts3Expr *pRoot,
                   115643:   Fts3TokenAndCost *aTC,
                   115644:   int nTC
                   115645: ){
                   115646:   int nDocSize = 0;
                   115647:   int nDocEst = 0;
                   115648:   int rc = SQLITE_OK;
                   115649:   Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab;
                   115650:   int ii;
                   115651: 
                   115652:   int nOvfl = 0;
                   115653:   int nTerm = 0;
                   115654: 
                   115655:   for(ii=0; ii<nTC; ii++){
                   115656:     if( aTC[ii].pRoot==pRoot ){
                   115657:       nOvfl += aTC[ii].nOvfl;
                   115658:       nTerm++;
                   115659:     }
                   115660:   }
                   115661:   if( nOvfl==0 || nTerm<2 ) return SQLITE_OK;
                   115662: 
                   115663:   rc = fts3EvalAverageDocsize(pCsr, &nDocSize);
                   115664: 
                   115665:   for(ii=0; ii<nTerm && rc==SQLITE_OK; ii++){
                   115666:     int jj;
                   115667:     Fts3TokenAndCost *pTC = 0;
                   115668: 
                   115669:     for(jj=0; jj<nTC; jj++){
                   115670:       if( aTC[jj].pToken && aTC[jj].pRoot==pRoot 
                   115671:        && (!pTC || aTC[jj].nOvfl<pTC->nOvfl) 
                   115672:       ){
                   115673:         pTC = &aTC[jj];
                   115674:       }
                   115675:     }
                   115676:     assert( pTC );
                   115677: 
                   115678:     /* At this point pTC points to the cheapest remaining token. */
                   115679:     if( ii==0 ){
                   115680:       if( pTC->nOvfl ){
                   115681:         nDocEst = (pTC->nOvfl * pTab->nPgsz + pTab->nPgsz) / 10;
                   115682:       }else{
                   115683:         Fts3PhraseToken *pToken = pTC->pToken;
                   115684:         int nList = 0;
                   115685:         char *pList = 0;
                   115686:         rc = fts3TermSelect(pTab, pToken, pTC->iCol, 1, &nList, &pList);
                   115687:         assert( rc==SQLITE_OK || pList==0 );
                   115688: 
                   115689:         if( rc==SQLITE_OK ){
                   115690:           nDocEst = fts3DoclistCountDocids(1, pList, nList);
                   115691:           fts3EvalPhraseMergeToken(pTab, pTC->pPhrase, pTC->iToken,pList,nList);
                   115692:         }
                   115693:       }
                   115694:     }else{
                   115695:       if( pTC->nOvfl>=(nDocEst*nDocSize) ){
                   115696:         Fts3PhraseToken *pToken = pTC->pToken;
                   115697:         rc = sqlite3Fts3DeferToken(pCsr, pToken, pTC->iCol);
                   115698:         fts3SegReaderCursorFree(pToken->pSegcsr);
                   115699:         pToken->pSegcsr = 0;
                   115700:       }
                   115701:       nDocEst = 1 + (nDocEst/4);
                   115702:     }
                   115703:     pTC->pToken = 0;
                   115704:   }
                   115705: 
                   115706:   return rc;
                   115707: }
                   115708: 
                   115709: SQLITE_PRIVATE int sqlite3Fts3EvalStart(Fts3Cursor *pCsr, Fts3Expr *pExpr, int bOptOk){
                   115710:   Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab;
                   115711:   int rc = SQLITE_OK;
                   115712:   int nToken = 0;
                   115713:   int nOr = 0;
                   115714: 
                   115715:   /* Allocate a MultiSegReader for each token in the expression. */
                   115716:   fts3EvalAllocateReaders(pCsr, pExpr, &nToken, &nOr, &rc);
                   115717: 
                   115718:   /* Call fts3EvalPhraseStart() on all phrases in the expression. TODO:
                   115719:   ** This call will eventually also be responsible for determining which
                   115720:   ** tokens are 'deferred' until the document text is loaded into memory.
                   115721:   **
                   115722:   ** Each token in each phrase is dealt with using one of the following
                   115723:   ** three strategies:
                   115724:   **
                   115725:   **   1. Entire doclist loaded into memory as part of the
                   115726:   **      fts3EvalStartReaders() call.
                   115727:   **
                   115728:   **   2. Doclist loaded into memory incrementally, as part of each
                   115729:   **      sqlite3Fts3EvalNext() call.
                   115730:   **
                   115731:   **   3. Token doclist is never loaded. Instead, documents are loaded into
                   115732:   **      memory and scanned for the token as part of the sqlite3Fts3EvalNext()
                   115733:   **      call. This is known as a "deferred" token.
                   115734:   */
                   115735: 
                   115736:   /* If bOptOk is true, check if there are any tokens that should be deferred.
                   115737:   */
                   115738:   if( rc==SQLITE_OK && bOptOk && nToken>1 && pTab->bHasStat ){
                   115739:     Fts3TokenAndCost *aTC;
                   115740:     Fts3Expr **apOr;
                   115741:     aTC = (Fts3TokenAndCost *)sqlite3_malloc(
                   115742:         sizeof(Fts3TokenAndCost) * nToken
                   115743:       + sizeof(Fts3Expr *) * nOr * 2
                   115744:     );
                   115745:     apOr = (Fts3Expr **)&aTC[nToken];
                   115746: 
                   115747:     if( !aTC ){
                   115748:       rc = SQLITE_NOMEM;
                   115749:     }else{
                   115750:       int ii;
                   115751:       Fts3TokenAndCost *pTC = aTC;
                   115752:       Fts3Expr **ppOr = apOr;
                   115753: 
                   115754:       fts3EvalTokenCosts(pCsr, 0, pExpr, &pTC, &ppOr, &rc);
                   115755:       nToken = pTC-aTC;
                   115756:       nOr = ppOr-apOr;
                   115757: 
                   115758:       if( rc==SQLITE_OK ){
                   115759:         rc = fts3EvalSelectDeferred(pCsr, 0, aTC, nToken);
                   115760:         for(ii=0; rc==SQLITE_OK && ii<nOr; ii++){
                   115761:           rc = fts3EvalSelectDeferred(pCsr, apOr[ii], aTC, nToken);
                   115762:         }
                   115763:       }
                   115764: 
                   115765:       sqlite3_free(aTC);
                   115766:     }
                   115767:   }
                   115768: 
                   115769:   fts3EvalStartReaders(pCsr, pExpr, bOptOk, &rc);
                   115770:   return rc;
                   115771: }
                   115772: 
                   115773: static void fts3EvalZeroPoslist(Fts3Phrase *pPhrase){
                   115774:   if( pPhrase->doclist.bFreeList ){
                   115775:     sqlite3_free(pPhrase->doclist.pList);
                   115776:   }
                   115777:   pPhrase->doclist.pList = 0;
                   115778:   pPhrase->doclist.nList = 0;
                   115779:   pPhrase->doclist.bFreeList = 0;
                   115780: }
                   115781: 
                   115782: static int fts3EvalNearTrim2(
                   115783:   int nNear,
                   115784:   char *aTmp,                     /* Temporary space to use */
                   115785:   char **paPoslist,               /* IN/OUT: Position list */
                   115786:   int *pnToken,                   /* IN/OUT: Tokens in phrase of *paPoslist */
                   115787:   Fts3Phrase *pPhrase             /* The phrase object to trim the doclist of */
                   115788: ){
                   115789:   int nParam1 = nNear + pPhrase->nToken;
                   115790:   int nParam2 = nNear + *pnToken;
                   115791:   int nNew;
                   115792:   char *p2; 
                   115793:   char *pOut; 
                   115794:   int res;
                   115795: 
                   115796:   assert( pPhrase->doclist.pList );
                   115797: 
                   115798:   p2 = pOut = pPhrase->doclist.pList;
                   115799:   res = fts3PoslistNearMerge(
                   115800:     &pOut, aTmp, nParam1, nParam2, paPoslist, &p2
                   115801:   );
                   115802:   if( res ){
                   115803:     nNew = (pOut - pPhrase->doclist.pList) - 1;
                   115804:     assert( pPhrase->doclist.pList[nNew]=='\0' );
                   115805:     assert( nNew<=pPhrase->doclist.nList && nNew>0 );
                   115806:     memset(&pPhrase->doclist.pList[nNew], 0, pPhrase->doclist.nList - nNew);
                   115807:     pPhrase->doclist.nList = nNew;
                   115808:     *paPoslist = pPhrase->doclist.pList;
                   115809:     *pnToken = pPhrase->nToken;
                   115810:   }
                   115811: 
                   115812:   return res;
                   115813: }
                   115814: 
                   115815: static int fts3EvalNearTest(Fts3Expr *pExpr, int *pRc){
                   115816:   int res = 1;
                   115817: 
                   115818:   /* The following block runs if pExpr is the root of a NEAR query.
                   115819:   ** For example, the query:
                   115820:   **
                   115821:   **         "w" NEAR "x" NEAR "y" NEAR "z"
                   115822:   **
                   115823:   ** which is represented in tree form as:
                   115824:   **
                   115825:   **                               |
                   115826:   **                          +--NEAR--+      <-- root of NEAR query
                   115827:   **                          |        |
                   115828:   **                     +--NEAR--+   "z"
                   115829:   **                     |        |
                   115830:   **                +--NEAR--+   "y"
                   115831:   **                |        |
                   115832:   **               "w"      "x"
                   115833:   **
                   115834:   ** The right-hand child of a NEAR node is always a phrase. The 
                   115835:   ** left-hand child may be either a phrase or a NEAR node. There are
                   115836:   ** no exceptions to this.
                   115837:   */
                   115838:   if( *pRc==SQLITE_OK 
                   115839:    && pExpr->eType==FTSQUERY_NEAR 
                   115840:    && pExpr->bEof==0
                   115841:    && (pExpr->pParent==0 || pExpr->pParent->eType!=FTSQUERY_NEAR)
                   115842:   ){
                   115843:     Fts3Expr *p; 
                   115844:     int nTmp = 0;                 /* Bytes of temp space */
                   115845:     char *aTmp;                   /* Temp space for PoslistNearMerge() */
                   115846: 
                   115847:     /* Allocate temporary working space. */
                   115848:     for(p=pExpr; p->pLeft; p=p->pLeft){
                   115849:       nTmp += p->pRight->pPhrase->doclist.nList;
                   115850:     }
                   115851:     nTmp += p->pPhrase->doclist.nList;
                   115852:     aTmp = sqlite3_malloc(nTmp*2);
                   115853:     if( !aTmp ){
                   115854:       *pRc = SQLITE_NOMEM;
                   115855:       res = 0;
                   115856:     }else{
                   115857:       char *aPoslist = p->pPhrase->doclist.pList;
                   115858:       int nToken = p->pPhrase->nToken;
                   115859: 
                   115860:       for(p=p->pParent;res && p && p->eType==FTSQUERY_NEAR; p=p->pParent){
                   115861:         Fts3Phrase *pPhrase = p->pRight->pPhrase;
                   115862:         int nNear = p->nNear;
                   115863:         res = fts3EvalNearTrim2(nNear, aTmp, &aPoslist, &nToken, pPhrase);
                   115864:       }
                   115865:   
                   115866:       aPoslist = pExpr->pRight->pPhrase->doclist.pList;
                   115867:       nToken = pExpr->pRight->pPhrase->nToken;
                   115868:       for(p=pExpr->pLeft; p && res; p=p->pLeft){
                   115869:         int nNear = p->pParent->nNear;
                   115870:         Fts3Phrase *pPhrase = (
                   115871:             p->eType==FTSQUERY_NEAR ? p->pRight->pPhrase : p->pPhrase
                   115872:         );
                   115873:         res = fts3EvalNearTrim2(nNear, aTmp, &aPoslist, &nToken, pPhrase);
                   115874:       }
                   115875:     }
                   115876: 
                   115877:     sqlite3_free(aTmp);
                   115878:   }
                   115879: 
                   115880:   return res;
                   115881: }
                   115882: 
                   115883: /*
                   115884: ** This macro is used by the fts3EvalNext() function. The two arguments are
                   115885: ** 64-bit docid values. If the current query is "ORDER BY docid ASC", then
                   115886: ** the macro returns (i1 - i2). Or if it is "ORDER BY docid DESC", then
                   115887: ** it returns (i2 - i1). This allows the same code to be used for merging
                   115888: ** doclists in ascending or descending order.
                   115889: */
                   115890: #define DOCID_CMP(i1, i2) ((pCsr->bDesc?-1:1) * (i1-i2))
                   115891: 
                   115892: static void fts3EvalNext(
                   115893:   Fts3Cursor *pCsr, 
                   115894:   Fts3Expr *pExpr, 
                   115895:   int *pRc
                   115896: ){
                   115897:   if( *pRc==SQLITE_OK ){
                   115898:     assert( pExpr->bEof==0 );
                   115899:     pExpr->bStart = 1;
                   115900: 
                   115901:     switch( pExpr->eType ){
                   115902:       case FTSQUERY_NEAR:
                   115903:       case FTSQUERY_AND: {
                   115904:         Fts3Expr *pLeft = pExpr->pLeft;
                   115905:         Fts3Expr *pRight = pExpr->pRight;
                   115906:         assert( !pLeft->bDeferred || !pRight->bDeferred );
                   115907:         if( pLeft->bDeferred ){
                   115908:           fts3EvalNext(pCsr, pRight, pRc);
                   115909:           pExpr->iDocid = pRight->iDocid;
                   115910:           pExpr->bEof = pRight->bEof;
                   115911:         }else if( pRight->bDeferred ){
                   115912:           fts3EvalNext(pCsr, pLeft, pRc);
                   115913:           pExpr->iDocid = pLeft->iDocid;
                   115914:           pExpr->bEof = pLeft->bEof;
                   115915:         }else{
                   115916:           fts3EvalNext(pCsr, pLeft, pRc);
                   115917:           fts3EvalNext(pCsr, pRight, pRc);
                   115918: 
                   115919:           while( !pLeft->bEof && !pRight->bEof && *pRc==SQLITE_OK ){
                   115920:             sqlite3_int64 iDiff = DOCID_CMP(pLeft->iDocid, pRight->iDocid);
                   115921:             if( iDiff==0 ) break;
                   115922:             if( iDiff<0 ){
                   115923:               fts3EvalNext(pCsr, pLeft, pRc);
                   115924:             }else{
                   115925:               fts3EvalNext(pCsr, pRight, pRc);
                   115926:             }
                   115927:           }
                   115928: 
                   115929:           pExpr->iDocid = pLeft->iDocid;
                   115930:           pExpr->bEof = (pLeft->bEof || pRight->bEof);
                   115931:         }
                   115932:         break;
                   115933:       }
                   115934:   
                   115935:       case FTSQUERY_OR: {
                   115936:         Fts3Expr *pLeft = pExpr->pLeft;
                   115937:         Fts3Expr *pRight = pExpr->pRight;
                   115938:         sqlite3_int64 iCmp = DOCID_CMP(pLeft->iDocid, pRight->iDocid);
                   115939: 
                   115940:         assert( pLeft->bStart || pLeft->iDocid==pRight->iDocid );
                   115941:         assert( pRight->bStart || pLeft->iDocid==pRight->iDocid );
                   115942: 
                   115943:         if( pRight->bEof || (pLeft->bEof==0 && iCmp<0) ){
                   115944:           fts3EvalNext(pCsr, pLeft, pRc);
                   115945:         }else if( pLeft->bEof || (pRight->bEof==0 && iCmp>0) ){
                   115946:           fts3EvalNext(pCsr, pRight, pRc);
                   115947:         }else{
                   115948:           fts3EvalNext(pCsr, pLeft, pRc);
                   115949:           fts3EvalNext(pCsr, pRight, pRc);
                   115950:         }
                   115951: 
                   115952:         pExpr->bEof = (pLeft->bEof && pRight->bEof);
                   115953:         iCmp = DOCID_CMP(pLeft->iDocid, pRight->iDocid);
                   115954:         if( pRight->bEof || (pLeft->bEof==0 &&  iCmp<0) ){
                   115955:           pExpr->iDocid = pLeft->iDocid;
                   115956:         }else{
                   115957:           pExpr->iDocid = pRight->iDocid;
                   115958:         }
                   115959: 
                   115960:         break;
                   115961:       }
                   115962: 
                   115963:       case FTSQUERY_NOT: {
                   115964:         Fts3Expr *pLeft = pExpr->pLeft;
                   115965:         Fts3Expr *pRight = pExpr->pRight;
                   115966: 
                   115967:         if( pRight->bStart==0 ){
                   115968:           fts3EvalNext(pCsr, pRight, pRc);
                   115969:           assert( *pRc!=SQLITE_OK || pRight->bStart );
                   115970:         }
                   115971: 
                   115972:         fts3EvalNext(pCsr, pLeft, pRc);
                   115973:         if( pLeft->bEof==0 ){
                   115974:           while( !*pRc 
                   115975:               && !pRight->bEof 
                   115976:               && DOCID_CMP(pLeft->iDocid, pRight->iDocid)>0 
                   115977:           ){
                   115978:             fts3EvalNext(pCsr, pRight, pRc);
                   115979:           }
                   115980:         }
                   115981:         pExpr->iDocid = pLeft->iDocid;
                   115982:         pExpr->bEof = pLeft->bEof;
                   115983:         break;
                   115984:       }
                   115985: 
                   115986:       default: {
                   115987:         Fts3Phrase *pPhrase = pExpr->pPhrase;
                   115988:         fts3EvalZeroPoslist(pPhrase);
                   115989:         *pRc = fts3EvalPhraseNext(pCsr, pPhrase, &pExpr->bEof);
                   115990:         pExpr->iDocid = pPhrase->doclist.iDocid;
                   115991:         break;
                   115992:       }
                   115993:     }
                   115994:   }
                   115995: }
                   115996: 
                   115997: static int fts3EvalDeferredTest(Fts3Cursor *pCsr, Fts3Expr *pExpr, int *pRc){
                   115998:   int bHit = 1;
                   115999:   if( *pRc==SQLITE_OK ){
                   116000:     switch( pExpr->eType ){
                   116001:       case FTSQUERY_NEAR:
                   116002:       case FTSQUERY_AND:
                   116003:         bHit = (
                   116004:             fts3EvalDeferredTest(pCsr, pExpr->pLeft, pRc)
                   116005:          && fts3EvalDeferredTest(pCsr, pExpr->pRight, pRc)
                   116006:          && fts3EvalNearTest(pExpr, pRc)
                   116007:         );
                   116008: 
                   116009:         /* If the NEAR expression does not match any rows, zero the doclist for 
                   116010:         ** all phrases involved in the NEAR. This is because the snippet(),
                   116011:         ** offsets() and matchinfo() functions are not supposed to recognize 
                   116012:         ** any instances of phrases that are part of unmatched NEAR queries. 
                   116013:         ** For example if this expression:
                   116014:         **
                   116015:         **    ... MATCH 'a OR (b NEAR c)'
                   116016:         **
                   116017:         ** is matched against a row containing:
                   116018:         **
                   116019:         **        'a b d e'
                   116020:         **
                   116021:         ** then any snippet() should ony highlight the "a" term, not the "b"
                   116022:         ** (as "b" is part of a non-matching NEAR clause).
                   116023:         */
                   116024:         if( bHit==0 
                   116025:          && pExpr->eType==FTSQUERY_NEAR 
                   116026:          && (pExpr->pParent==0 || pExpr->pParent->eType!=FTSQUERY_NEAR)
                   116027:         ){
                   116028:           Fts3Expr *p;
                   116029:           for(p=pExpr; p->pPhrase==0; p=p->pLeft){
                   116030:             if( p->pRight->iDocid==pCsr->iPrevId ){
                   116031:               fts3EvalZeroPoslist(p->pRight->pPhrase);
                   116032:             }
                   116033:           }
                   116034:           if( p->iDocid==pCsr->iPrevId ){
                   116035:             fts3EvalZeroPoslist(p->pPhrase);
                   116036:           }
                   116037:         }
                   116038: 
                   116039:         break;
                   116040: 
                   116041:       case FTSQUERY_OR: {
                   116042:         int bHit1 = fts3EvalDeferredTest(pCsr, pExpr->pLeft, pRc);
                   116043:         int bHit2 = fts3EvalDeferredTest(pCsr, pExpr->pRight, pRc);
                   116044:         bHit = bHit1 || bHit2;
                   116045:         break;
                   116046:       }
                   116047: 
                   116048:       case FTSQUERY_NOT:
                   116049:         bHit = (
                   116050:             fts3EvalDeferredTest(pCsr, pExpr->pLeft, pRc)
                   116051:          && !fts3EvalDeferredTest(pCsr, pExpr->pRight, pRc)
                   116052:         );
                   116053:         break;
                   116054: 
                   116055:       default: {
                   116056:         if( pCsr->pDeferred 
                   116057:          && (pExpr->iDocid==pCsr->iPrevId || pExpr->bDeferred)
                   116058:         ){
                   116059:           Fts3Phrase *pPhrase = pExpr->pPhrase;
                   116060:           assert( pExpr->bDeferred || pPhrase->doclist.bFreeList==0 );
                   116061:           if( pExpr->bDeferred ){
                   116062:             fts3EvalZeroPoslist(pPhrase);
                   116063:           }
                   116064:           *pRc = fts3EvalDeferredPhrase(pCsr, pPhrase);
                   116065:           bHit = (pPhrase->doclist.pList!=0);
                   116066:           pExpr->iDocid = pCsr->iPrevId;
                   116067:         }else{
                   116068:           bHit = (pExpr->bEof==0 && pExpr->iDocid==pCsr->iPrevId);
                   116069:         }
                   116070:         break;
                   116071:       }
                   116072:     }
                   116073:   }
                   116074:   return bHit;
                   116075: }
                   116076: 
                   116077: /*
                   116078: ** Return 1 if both of the following are true:
                   116079: **
                   116080: **   1. *pRc is SQLITE_OK when this function returns, and
                   116081: **
                   116082: **   2. After scanning the current FTS table row for the deferred tokens,
                   116083: **      it is determined that the row does not match the query.
                   116084: **
                   116085: ** Or, if no error occurs and it seems the current row does match the FTS
                   116086: ** query, return 0.
                   116087: */
                   116088: static int fts3EvalLoadDeferred(Fts3Cursor *pCsr, int *pRc){
                   116089:   int rc = *pRc;
                   116090:   int bMiss = 0;
                   116091:   if( rc==SQLITE_OK ){
                   116092:     if( pCsr->pDeferred ){
                   116093:       rc = fts3CursorSeek(0, pCsr);
                   116094:       if( rc==SQLITE_OK ){
                   116095:         rc = sqlite3Fts3CacheDeferredDoclists(pCsr);
                   116096:       }
                   116097:     }
                   116098:     bMiss = (0==fts3EvalDeferredTest(pCsr, pCsr->pExpr, &rc));
                   116099:     sqlite3Fts3FreeDeferredDoclists(pCsr);
                   116100:     *pRc = rc;
                   116101:   }
                   116102:   return (rc==SQLITE_OK && bMiss);
                   116103: }
                   116104: 
                   116105: /*
                   116106: ** Advance to the next document that matches the FTS expression in
                   116107: ** Fts3Cursor.pExpr.
                   116108: */
                   116109: SQLITE_PRIVATE int sqlite3Fts3EvalNext(Fts3Cursor *pCsr){
                   116110:   int rc = SQLITE_OK;             /* Return Code */
                   116111:   Fts3Expr *pExpr = pCsr->pExpr;
                   116112:   assert( pCsr->isEof==0 );
                   116113:   if( pExpr==0 ){
                   116114:     pCsr->isEof = 1;
                   116115:   }else{
                   116116:     do {
                   116117:       if( pCsr->isRequireSeek==0 ){
                   116118:         sqlite3_reset(pCsr->pStmt);
                   116119:       }
                   116120:       assert( sqlite3_data_count(pCsr->pStmt)==0 );
                   116121:       fts3EvalNext(pCsr, pExpr, &rc);
                   116122:       pCsr->isEof = pExpr->bEof;
                   116123:       pCsr->isRequireSeek = 1;
                   116124:       pCsr->isMatchinfoNeeded = 1;
                   116125:       pCsr->iPrevId = pExpr->iDocid;
                   116126:     }while( pCsr->isEof==0 && fts3EvalLoadDeferred(pCsr, &rc) );
                   116127:   }
                   116128:   return rc;
                   116129: }
                   116130: 
                   116131: /*
                   116132: ** Restart interation for expression pExpr so that the next call to
                   116133: ** sqlite3Fts3EvalNext() visits the first row. Do not allow incremental 
                   116134: ** loading or merging of phrase doclists for this iteration.
                   116135: **
                   116136: ** If *pRc is other than SQLITE_OK when this function is called, it is
                   116137: ** a no-op. If an error occurs within this function, *pRc is set to an
                   116138: ** SQLite error code before returning.
                   116139: */
                   116140: static void fts3EvalRestart(
                   116141:   Fts3Cursor *pCsr,
                   116142:   Fts3Expr *pExpr,
                   116143:   int *pRc
                   116144: ){
                   116145:   if( pExpr && *pRc==SQLITE_OK ){
                   116146:     Fts3Phrase *pPhrase = pExpr->pPhrase;
                   116147: 
                   116148:     if( pPhrase ){
                   116149:       fts3EvalZeroPoslist(pPhrase);
                   116150:       if( pPhrase->bIncr ){
                   116151:         assert( pPhrase->nToken==1 );
                   116152:         assert( pPhrase->aToken[0].pSegcsr );
                   116153:         sqlite3Fts3MsrIncrRestart(pPhrase->aToken[0].pSegcsr);
                   116154:         *pRc = fts3EvalPhraseStart(pCsr, 0, pPhrase);
                   116155:       }
                   116156: 
                   116157:       pPhrase->doclist.pNextDocid = 0;
                   116158:       pPhrase->doclist.iDocid = 0;
                   116159:     }
                   116160: 
                   116161:     pExpr->iDocid = 0;
                   116162:     pExpr->bEof = 0;
                   116163:     pExpr->bStart = 0;
                   116164: 
                   116165:     fts3EvalRestart(pCsr, pExpr->pLeft, pRc);
                   116166:     fts3EvalRestart(pCsr, pExpr->pRight, pRc);
                   116167:   }
                   116168: }
                   116169: 
                   116170: /*
                   116171: ** After allocating the Fts3Expr.aMI[] array for each phrase in the 
                   116172: ** expression rooted at pExpr, the cursor iterates through all rows matched
                   116173: ** by pExpr, calling this function for each row. This function increments
                   116174: ** the values in Fts3Expr.aMI[] according to the position-list currently
                   116175: ** found in Fts3Expr.pPhrase->doclist.pList for each of the phrase 
                   116176: ** expression nodes.
                   116177: */
                   116178: static void fts3EvalUpdateCounts(Fts3Expr *pExpr){
                   116179:   if( pExpr ){
                   116180:     Fts3Phrase *pPhrase = pExpr->pPhrase;
                   116181:     if( pPhrase && pPhrase->doclist.pList ){
                   116182:       int iCol = 0;
                   116183:       char *p = pPhrase->doclist.pList;
                   116184: 
                   116185:       assert( *p );
                   116186:       while( 1 ){
                   116187:         u8 c = 0;
                   116188:         int iCnt = 0;
                   116189:         while( 0xFE & (*p | c) ){
                   116190:           if( (c&0x80)==0 ) iCnt++;
                   116191:           c = *p++ & 0x80;
                   116192:         }
                   116193: 
                   116194:         /* aMI[iCol*3 + 1] = Number of occurrences
                   116195:         ** aMI[iCol*3 + 2] = Number of rows containing at least one instance
                   116196:         */
                   116197:         pExpr->aMI[iCol*3 + 1] += iCnt;
                   116198:         pExpr->aMI[iCol*3 + 2] += (iCnt>0);
                   116199:         if( *p==0x00 ) break;
                   116200:         p++;
                   116201:         p += sqlite3Fts3GetVarint32(p, &iCol);
                   116202:       }
                   116203:     }
                   116204: 
                   116205:     fts3EvalUpdateCounts(pExpr->pLeft);
                   116206:     fts3EvalUpdateCounts(pExpr->pRight);
                   116207:   }
                   116208: }
                   116209: 
                   116210: /*
                   116211: ** Expression pExpr must be of type FTSQUERY_PHRASE.
                   116212: **
                   116213: ** If it is not already allocated and populated, this function allocates and
                   116214: ** populates the Fts3Expr.aMI[] array for expression pExpr. If pExpr is part
                   116215: ** of a NEAR expression, then it also allocates and populates the same array
                   116216: ** for all other phrases that are part of the NEAR expression.
                   116217: **
                   116218: ** SQLITE_OK is returned if the aMI[] array is successfully allocated and
                   116219: ** populated. Otherwise, if an error occurs, an SQLite error code is returned.
                   116220: */
                   116221: static int fts3EvalGatherStats(
                   116222:   Fts3Cursor *pCsr,               /* Cursor object */
                   116223:   Fts3Expr *pExpr                 /* FTSQUERY_PHRASE expression */
                   116224: ){
                   116225:   int rc = SQLITE_OK;             /* Return code */
                   116226: 
                   116227:   assert( pExpr->eType==FTSQUERY_PHRASE );
                   116228:   if( pExpr->aMI==0 ){
                   116229:     Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab;
                   116230:     Fts3Expr *pRoot;                /* Root of NEAR expression */
                   116231:     Fts3Expr *p;                    /* Iterator used for several purposes */
                   116232: 
                   116233:     sqlite3_int64 iPrevId = pCsr->iPrevId;
                   116234:     sqlite3_int64 iDocid;
                   116235:     u8 bEof;
                   116236: 
                   116237:     /* Find the root of the NEAR expression */
                   116238:     pRoot = pExpr;
                   116239:     while( pRoot->pParent && pRoot->pParent->eType==FTSQUERY_NEAR ){
                   116240:       pRoot = pRoot->pParent;
                   116241:     }
                   116242:     iDocid = pRoot->iDocid;
                   116243:     bEof = pRoot->bEof;
                   116244:     assert( pRoot->bStart );
                   116245: 
                   116246:     /* Allocate space for the aMSI[] array of each FTSQUERY_PHRASE node */
                   116247:     for(p=pRoot; p; p=p->pLeft){
                   116248:       Fts3Expr *pE = (p->eType==FTSQUERY_PHRASE?p:p->pRight);
                   116249:       assert( pE->aMI==0 );
                   116250:       pE->aMI = (u32 *)sqlite3_malloc(pTab->nColumn * 3 * sizeof(u32));
                   116251:       if( !pE->aMI ) return SQLITE_NOMEM;
                   116252:       memset(pE->aMI, 0, pTab->nColumn * 3 * sizeof(u32));
                   116253:     }
                   116254: 
                   116255:     fts3EvalRestart(pCsr, pRoot, &rc);
                   116256: 
                   116257:     while( pCsr->isEof==0 && rc==SQLITE_OK ){
                   116258: 
                   116259:       do {
                   116260:         /* Ensure the %_content statement is reset. */
                   116261:         if( pCsr->isRequireSeek==0 ) sqlite3_reset(pCsr->pStmt);
                   116262:         assert( sqlite3_data_count(pCsr->pStmt)==0 );
                   116263: 
                   116264:         /* Advance to the next document */
                   116265:         fts3EvalNext(pCsr, pRoot, &rc);
                   116266:         pCsr->isEof = pRoot->bEof;
                   116267:         pCsr->isRequireSeek = 1;
                   116268:         pCsr->isMatchinfoNeeded = 1;
                   116269:         pCsr->iPrevId = pRoot->iDocid;
                   116270:       }while( pCsr->isEof==0 
                   116271:            && pRoot->eType==FTSQUERY_NEAR 
                   116272:            && fts3EvalLoadDeferred(pCsr, &rc) 
                   116273:       );
                   116274: 
                   116275:       if( rc==SQLITE_OK && pCsr->isEof==0 ){
                   116276:         fts3EvalUpdateCounts(pRoot);
                   116277:       }
                   116278:     }
                   116279: 
                   116280:     pCsr->isEof = 0;
                   116281:     pCsr->iPrevId = iPrevId;
                   116282: 
                   116283:     if( bEof ){
                   116284:       pRoot->bEof = bEof;
                   116285:     }else{
                   116286:       /* Caution: pRoot may iterate through docids in ascending or descending
                   116287:       ** order. For this reason, even though it seems more defensive, the 
                   116288:       ** do loop can not be written:
                   116289:       **
                   116290:       **   do {...} while( pRoot->iDocid<iDocid && rc==SQLITE_OK );
                   116291:       */
                   116292:       fts3EvalRestart(pCsr, pRoot, &rc);
                   116293:       do {
                   116294:         fts3EvalNext(pCsr, pRoot, &rc);
                   116295:         assert( pRoot->bEof==0 );
                   116296:       }while( pRoot->iDocid!=iDocid && rc==SQLITE_OK );
                   116297:       fts3EvalLoadDeferred(pCsr, &rc);
                   116298:     }
                   116299:   }
                   116300:   return rc;
                   116301: }
                   116302: 
                   116303: /*
                   116304: ** This function is used by the matchinfo() module to query a phrase 
                   116305: ** expression node for the following information:
                   116306: **
                   116307: **   1. The total number of occurrences of the phrase in each column of 
                   116308: **      the FTS table (considering all rows), and
                   116309: **
                   116310: **   2. For each column, the number of rows in the table for which the
                   116311: **      column contains at least one instance of the phrase.
                   116312: **
                   116313: ** If no error occurs, SQLITE_OK is returned and the values for each column
                   116314: ** written into the array aiOut as follows:
                   116315: **
                   116316: **   aiOut[iCol*3 + 1] = Number of occurrences
                   116317: **   aiOut[iCol*3 + 2] = Number of rows containing at least one instance
                   116318: **
                   116319: ** Caveats:
                   116320: **
                   116321: **   * If a phrase consists entirely of deferred tokens, then all output 
                   116322: **     values are set to the number of documents in the table. In other
                   116323: **     words we assume that very common tokens occur exactly once in each 
                   116324: **     column of each row of the table.
                   116325: **
                   116326: **   * If a phrase contains some deferred tokens (and some non-deferred 
                   116327: **     tokens), count the potential occurrence identified by considering
                   116328: **     the non-deferred tokens instead of actual phrase occurrences.
                   116329: **
                   116330: **   * If the phrase is part of a NEAR expression, then only phrase instances
                   116331: **     that meet the NEAR constraint are included in the counts.
                   116332: */
                   116333: SQLITE_PRIVATE int sqlite3Fts3EvalPhraseStats(
                   116334:   Fts3Cursor *pCsr,               /* FTS cursor handle */
                   116335:   Fts3Expr *pExpr,                /* Phrase expression */
                   116336:   u32 *aiOut                      /* Array to write results into (see above) */
                   116337: ){
                   116338:   Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab;
                   116339:   int rc = SQLITE_OK;
                   116340:   int iCol;
                   116341: 
                   116342:   if( pExpr->bDeferred && pExpr->pParent->eType!=FTSQUERY_NEAR ){
                   116343:     assert( pCsr->nDoc>0 );
                   116344:     for(iCol=0; iCol<pTab->nColumn; iCol++){
                   116345:       aiOut[iCol*3 + 1] = (u32)pCsr->nDoc;
                   116346:       aiOut[iCol*3 + 2] = (u32)pCsr->nDoc;
                   116347:     }
                   116348:   }else{
                   116349:     rc = fts3EvalGatherStats(pCsr, pExpr);
                   116350:     if( rc==SQLITE_OK ){
                   116351:       assert( pExpr->aMI );
                   116352:       for(iCol=0; iCol<pTab->nColumn; iCol++){
                   116353:         aiOut[iCol*3 + 1] = pExpr->aMI[iCol*3 + 1];
                   116354:         aiOut[iCol*3 + 2] = pExpr->aMI[iCol*3 + 2];
                   116355:       }
                   116356:     }
                   116357:   }
                   116358: 
                   116359:   return rc;
                   116360: }
                   116361: 
                   116362: /*
                   116363: ** The expression pExpr passed as the second argument to this function
                   116364: ** must be of type FTSQUERY_PHRASE. 
                   116365: **
                   116366: ** The returned value is either NULL or a pointer to a buffer containing
                   116367: ** a position-list indicating the occurrences of the phrase in column iCol
                   116368: ** of the current row. 
                   116369: **
                   116370: ** More specifically, the returned buffer contains 1 varint for each 
1.1.1.3 ! misho    116371: ** occurrence of the phrase in the column, stored using the normal (delta+2) 
1.1       misho    116372: ** compression and is terminated by either an 0x01 or 0x00 byte. For example,
                   116373: ** if the requested column contains "a b X c d X X" and the position-list
                   116374: ** for 'X' is requested, the buffer returned may contain:
                   116375: **
                   116376: **     0x04 0x05 0x03 0x01   or   0x04 0x05 0x03 0x00
                   116377: **
                   116378: ** This function works regardless of whether or not the phrase is deferred,
                   116379: ** incremental, or neither.
                   116380: */
                   116381: SQLITE_PRIVATE char *sqlite3Fts3EvalPhrasePoslist(
                   116382:   Fts3Cursor *pCsr,               /* FTS3 cursor object */
                   116383:   Fts3Expr *pExpr,                /* Phrase to return doclist for */
                   116384:   int iCol                        /* Column to return position list for */
                   116385: ){
                   116386:   Fts3Phrase *pPhrase = pExpr->pPhrase;
                   116387:   Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab;
                   116388:   char *pIter = pPhrase->doclist.pList;
                   116389:   int iThis;
                   116390: 
                   116391:   assert( iCol>=0 && iCol<pTab->nColumn );
                   116392:   if( !pIter 
                   116393:    || pExpr->bEof 
                   116394:    || pExpr->iDocid!=pCsr->iPrevId
                   116395:    || (pPhrase->iColumn<pTab->nColumn && pPhrase->iColumn!=iCol) 
                   116396:   ){
                   116397:     return 0;
                   116398:   }
                   116399: 
                   116400:   assert( pPhrase->doclist.nList>0 );
                   116401:   if( *pIter==0x01 ){
                   116402:     pIter++;
                   116403:     pIter += sqlite3Fts3GetVarint32(pIter, &iThis);
                   116404:   }else{
                   116405:     iThis = 0;
                   116406:   }
                   116407:   while( iThis<iCol ){
                   116408:     fts3ColumnlistCopy(0, &pIter);
                   116409:     if( *pIter==0x00 ) return 0;
                   116410:     pIter++;
                   116411:     pIter += sqlite3Fts3GetVarint32(pIter, &iThis);
                   116412:   }
                   116413: 
                   116414:   return ((iCol==iThis)?pIter:0);
                   116415: }
                   116416: 
                   116417: /*
                   116418: ** Free all components of the Fts3Phrase structure that were allocated by
                   116419: ** the eval module. Specifically, this means to free:
                   116420: **
                   116421: **   * the contents of pPhrase->doclist, and
                   116422: **   * any Fts3MultiSegReader objects held by phrase tokens.
                   116423: */
                   116424: SQLITE_PRIVATE void sqlite3Fts3EvalPhraseCleanup(Fts3Phrase *pPhrase){
                   116425:   if( pPhrase ){
                   116426:     int i;
                   116427:     sqlite3_free(pPhrase->doclist.aAll);
                   116428:     fts3EvalZeroPoslist(pPhrase);
                   116429:     memset(&pPhrase->doclist, 0, sizeof(Fts3Doclist));
                   116430:     for(i=0; i<pPhrase->nToken; i++){
                   116431:       fts3SegReaderCursorFree(pPhrase->aToken[i].pSegcsr);
                   116432:       pPhrase->aToken[i].pSegcsr = 0;
                   116433:     }
                   116434:   }
                   116435: }
                   116436: 
                   116437: #endif
                   116438: 
                   116439: /************** End of fts3.c ************************************************/
                   116440: /************** Begin file fts3_aux.c ****************************************/
                   116441: /*
                   116442: ** 2011 Jan 27
                   116443: **
                   116444: ** The author disclaims copyright to this source code.  In place of
                   116445: ** a legal notice, here is a blessing:
                   116446: **
                   116447: **    May you do good and not evil.
                   116448: **    May you find forgiveness for yourself and forgive others.
                   116449: **    May you share freely, never taking more than you give.
                   116450: **
                   116451: ******************************************************************************
                   116452: **
                   116453: */
                   116454: #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3)
                   116455: 
                   116456: 
                   116457: typedef struct Fts3auxTable Fts3auxTable;
                   116458: typedef struct Fts3auxCursor Fts3auxCursor;
                   116459: 
                   116460: struct Fts3auxTable {
                   116461:   sqlite3_vtab base;              /* Base class used by SQLite core */
                   116462:   Fts3Table *pFts3Tab;
                   116463: };
                   116464: 
                   116465: struct Fts3auxCursor {
                   116466:   sqlite3_vtab_cursor base;       /* Base class used by SQLite core */
                   116467:   Fts3MultiSegReader csr;        /* Must be right after "base" */
                   116468:   Fts3SegFilter filter;
                   116469:   char *zStop;
                   116470:   int nStop;                      /* Byte-length of string zStop */
                   116471:   int isEof;                      /* True if cursor is at EOF */
                   116472:   sqlite3_int64 iRowid;           /* Current rowid */
                   116473: 
                   116474:   int iCol;                       /* Current value of 'col' column */
                   116475:   int nStat;                      /* Size of aStat[] array */
                   116476:   struct Fts3auxColstats {
                   116477:     sqlite3_int64 nDoc;           /* 'documents' values for current csr row */
                   116478:     sqlite3_int64 nOcc;           /* 'occurrences' values for current csr row */
                   116479:   } *aStat;
                   116480: };
                   116481: 
                   116482: /*
                   116483: ** Schema of the terms table.
                   116484: */
                   116485: #define FTS3_TERMS_SCHEMA "CREATE TABLE x(term, col, documents, occurrences)"
                   116486: 
                   116487: /*
                   116488: ** This function does all the work for both the xConnect and xCreate methods.
                   116489: ** These tables have no persistent representation of their own, so xConnect
                   116490: ** and xCreate are identical operations.
                   116491: */
                   116492: static int fts3auxConnectMethod(
                   116493:   sqlite3 *db,                    /* Database connection */
                   116494:   void *pUnused,                  /* Unused */
                   116495:   int argc,                       /* Number of elements in argv array */
                   116496:   const char * const *argv,       /* xCreate/xConnect argument array */
                   116497:   sqlite3_vtab **ppVtab,          /* OUT: New sqlite3_vtab object */
                   116498:   char **pzErr                    /* OUT: sqlite3_malloc'd error message */
                   116499: ){
                   116500:   char const *zDb;                /* Name of database (e.g. "main") */
                   116501:   char const *zFts3;              /* Name of fts3 table */
                   116502:   int nDb;                        /* Result of strlen(zDb) */
                   116503:   int nFts3;                      /* Result of strlen(zFts3) */
                   116504:   int nByte;                      /* Bytes of space to allocate here */
                   116505:   int rc;                         /* value returned by declare_vtab() */
                   116506:   Fts3auxTable *p;                /* Virtual table object to return */
                   116507: 
                   116508:   UNUSED_PARAMETER(pUnused);
                   116509: 
                   116510:   /* The user should specify a single argument - the name of an fts3 table. */
                   116511:   if( argc!=4 ){
                   116512:     *pzErr = sqlite3_mprintf(
                   116513:         "wrong number of arguments to fts4aux constructor"
                   116514:     );
                   116515:     return SQLITE_ERROR;
                   116516:   }
                   116517: 
                   116518:   zDb = argv[1]; 
                   116519:   nDb = strlen(zDb);
                   116520:   zFts3 = argv[3];
                   116521:   nFts3 = strlen(zFts3);
                   116522: 
                   116523:   rc = sqlite3_declare_vtab(db, FTS3_TERMS_SCHEMA);
                   116524:   if( rc!=SQLITE_OK ) return rc;
                   116525: 
                   116526:   nByte = sizeof(Fts3auxTable) + sizeof(Fts3Table) + nDb + nFts3 + 2;
                   116527:   p = (Fts3auxTable *)sqlite3_malloc(nByte);
                   116528:   if( !p ) return SQLITE_NOMEM;
                   116529:   memset(p, 0, nByte);
                   116530: 
                   116531:   p->pFts3Tab = (Fts3Table *)&p[1];
                   116532:   p->pFts3Tab->zDb = (char *)&p->pFts3Tab[1];
                   116533:   p->pFts3Tab->zName = &p->pFts3Tab->zDb[nDb+1];
                   116534:   p->pFts3Tab->db = db;
                   116535:   p->pFts3Tab->nIndex = 1;
                   116536: 
                   116537:   memcpy((char *)p->pFts3Tab->zDb, zDb, nDb);
                   116538:   memcpy((char *)p->pFts3Tab->zName, zFts3, nFts3);
                   116539:   sqlite3Fts3Dequote((char *)p->pFts3Tab->zName);
                   116540: 
                   116541:   *ppVtab = (sqlite3_vtab *)p;
                   116542:   return SQLITE_OK;
                   116543: }
                   116544: 
                   116545: /*
                   116546: ** This function does the work for both the xDisconnect and xDestroy methods.
                   116547: ** These tables have no persistent representation of their own, so xDisconnect
                   116548: ** and xDestroy are identical operations.
                   116549: */
                   116550: static int fts3auxDisconnectMethod(sqlite3_vtab *pVtab){
                   116551:   Fts3auxTable *p = (Fts3auxTable *)pVtab;
                   116552:   Fts3Table *pFts3 = p->pFts3Tab;
                   116553:   int i;
                   116554: 
                   116555:   /* Free any prepared statements held */
                   116556:   for(i=0; i<SizeofArray(pFts3->aStmt); i++){
                   116557:     sqlite3_finalize(pFts3->aStmt[i]);
                   116558:   }
                   116559:   sqlite3_free(pFts3->zSegmentsTbl);
                   116560:   sqlite3_free(p);
                   116561:   return SQLITE_OK;
                   116562: }
                   116563: 
                   116564: #define FTS4AUX_EQ_CONSTRAINT 1
                   116565: #define FTS4AUX_GE_CONSTRAINT 2
                   116566: #define FTS4AUX_LE_CONSTRAINT 4
                   116567: 
                   116568: /*
                   116569: ** xBestIndex - Analyze a WHERE and ORDER BY clause.
                   116570: */
                   116571: static int fts3auxBestIndexMethod(
                   116572:   sqlite3_vtab *pVTab, 
                   116573:   sqlite3_index_info *pInfo
                   116574: ){
                   116575:   int i;
                   116576:   int iEq = -1;
                   116577:   int iGe = -1;
                   116578:   int iLe = -1;
                   116579: 
                   116580:   UNUSED_PARAMETER(pVTab);
                   116581: 
                   116582:   /* This vtab delivers always results in "ORDER BY term ASC" order. */
                   116583:   if( pInfo->nOrderBy==1 
                   116584:    && pInfo->aOrderBy[0].iColumn==0 
                   116585:    && pInfo->aOrderBy[0].desc==0
                   116586:   ){
                   116587:     pInfo->orderByConsumed = 1;
                   116588:   }
                   116589: 
                   116590:   /* Search for equality and range constraints on the "term" column. */
                   116591:   for(i=0; i<pInfo->nConstraint; i++){
                   116592:     if( pInfo->aConstraint[i].usable && pInfo->aConstraint[i].iColumn==0 ){
                   116593:       int op = pInfo->aConstraint[i].op;
                   116594:       if( op==SQLITE_INDEX_CONSTRAINT_EQ ) iEq = i;
                   116595:       if( op==SQLITE_INDEX_CONSTRAINT_LT ) iLe = i;
                   116596:       if( op==SQLITE_INDEX_CONSTRAINT_LE ) iLe = i;
                   116597:       if( op==SQLITE_INDEX_CONSTRAINT_GT ) iGe = i;
                   116598:       if( op==SQLITE_INDEX_CONSTRAINT_GE ) iGe = i;
                   116599:     }
                   116600:   }
                   116601: 
                   116602:   if( iEq>=0 ){
                   116603:     pInfo->idxNum = FTS4AUX_EQ_CONSTRAINT;
                   116604:     pInfo->aConstraintUsage[iEq].argvIndex = 1;
                   116605:     pInfo->estimatedCost = 5;
                   116606:   }else{
                   116607:     pInfo->idxNum = 0;
                   116608:     pInfo->estimatedCost = 20000;
                   116609:     if( iGe>=0 ){
                   116610:       pInfo->idxNum += FTS4AUX_GE_CONSTRAINT;
                   116611:       pInfo->aConstraintUsage[iGe].argvIndex = 1;
                   116612:       pInfo->estimatedCost /= 2;
                   116613:     }
                   116614:     if( iLe>=0 ){
                   116615:       pInfo->idxNum += FTS4AUX_LE_CONSTRAINT;
                   116616:       pInfo->aConstraintUsage[iLe].argvIndex = 1 + (iGe>=0);
                   116617:       pInfo->estimatedCost /= 2;
                   116618:     }
                   116619:   }
                   116620: 
                   116621:   return SQLITE_OK;
                   116622: }
                   116623: 
                   116624: /*
                   116625: ** xOpen - Open a cursor.
                   116626: */
                   116627: static int fts3auxOpenMethod(sqlite3_vtab *pVTab, sqlite3_vtab_cursor **ppCsr){
                   116628:   Fts3auxCursor *pCsr;            /* Pointer to cursor object to return */
                   116629: 
                   116630:   UNUSED_PARAMETER(pVTab);
                   116631: 
                   116632:   pCsr = (Fts3auxCursor *)sqlite3_malloc(sizeof(Fts3auxCursor));
                   116633:   if( !pCsr ) return SQLITE_NOMEM;
                   116634:   memset(pCsr, 0, sizeof(Fts3auxCursor));
                   116635: 
                   116636:   *ppCsr = (sqlite3_vtab_cursor *)pCsr;
                   116637:   return SQLITE_OK;
                   116638: }
                   116639: 
                   116640: /*
                   116641: ** xClose - Close a cursor.
                   116642: */
                   116643: static int fts3auxCloseMethod(sqlite3_vtab_cursor *pCursor){
                   116644:   Fts3Table *pFts3 = ((Fts3auxTable *)pCursor->pVtab)->pFts3Tab;
                   116645:   Fts3auxCursor *pCsr = (Fts3auxCursor *)pCursor;
                   116646: 
                   116647:   sqlite3Fts3SegmentsClose(pFts3);
                   116648:   sqlite3Fts3SegReaderFinish(&pCsr->csr);
                   116649:   sqlite3_free((void *)pCsr->filter.zTerm);
                   116650:   sqlite3_free(pCsr->zStop);
                   116651:   sqlite3_free(pCsr->aStat);
                   116652:   sqlite3_free(pCsr);
                   116653:   return SQLITE_OK;
                   116654: }
                   116655: 
                   116656: static int fts3auxGrowStatArray(Fts3auxCursor *pCsr, int nSize){
                   116657:   if( nSize>pCsr->nStat ){
                   116658:     struct Fts3auxColstats *aNew;
                   116659:     aNew = (struct Fts3auxColstats *)sqlite3_realloc(pCsr->aStat, 
                   116660:         sizeof(struct Fts3auxColstats) * nSize
                   116661:     );
                   116662:     if( aNew==0 ) return SQLITE_NOMEM;
                   116663:     memset(&aNew[pCsr->nStat], 0, 
                   116664:         sizeof(struct Fts3auxColstats) * (nSize - pCsr->nStat)
                   116665:     );
                   116666:     pCsr->aStat = aNew;
                   116667:     pCsr->nStat = nSize;
                   116668:   }
                   116669:   return SQLITE_OK;
                   116670: }
                   116671: 
                   116672: /*
                   116673: ** xNext - Advance the cursor to the next row, if any.
                   116674: */
                   116675: static int fts3auxNextMethod(sqlite3_vtab_cursor *pCursor){
                   116676:   Fts3auxCursor *pCsr = (Fts3auxCursor *)pCursor;
                   116677:   Fts3Table *pFts3 = ((Fts3auxTable *)pCursor->pVtab)->pFts3Tab;
                   116678:   int rc;
                   116679: 
                   116680:   /* Increment our pretend rowid value. */
                   116681:   pCsr->iRowid++;
                   116682: 
                   116683:   for(pCsr->iCol++; pCsr->iCol<pCsr->nStat; pCsr->iCol++){
                   116684:     if( pCsr->aStat[pCsr->iCol].nDoc>0 ) return SQLITE_OK;
                   116685:   }
                   116686: 
                   116687:   rc = sqlite3Fts3SegReaderStep(pFts3, &pCsr->csr);
                   116688:   if( rc==SQLITE_ROW ){
                   116689:     int i = 0;
                   116690:     int nDoclist = pCsr->csr.nDoclist;
                   116691:     char *aDoclist = pCsr->csr.aDoclist;
                   116692:     int iCol;
                   116693: 
                   116694:     int eState = 0;
                   116695: 
                   116696:     if( pCsr->zStop ){
                   116697:       int n = (pCsr->nStop<pCsr->csr.nTerm) ? pCsr->nStop : pCsr->csr.nTerm;
                   116698:       int mc = memcmp(pCsr->zStop, pCsr->csr.zTerm, n);
                   116699:       if( mc<0 || (mc==0 && pCsr->csr.nTerm>pCsr->nStop) ){
                   116700:         pCsr->isEof = 1;
                   116701:         return SQLITE_OK;
                   116702:       }
                   116703:     }
                   116704: 
                   116705:     if( fts3auxGrowStatArray(pCsr, 2) ) return SQLITE_NOMEM;
                   116706:     memset(pCsr->aStat, 0, sizeof(struct Fts3auxColstats) * pCsr->nStat);
                   116707:     iCol = 0;
                   116708: 
                   116709:     while( i<nDoclist ){
                   116710:       sqlite3_int64 v = 0;
                   116711: 
                   116712:       i += sqlite3Fts3GetVarint(&aDoclist[i], &v);
                   116713:       switch( eState ){
                   116714:         /* State 0. In this state the integer just read was a docid. */
                   116715:         case 0:
                   116716:           pCsr->aStat[0].nDoc++;
                   116717:           eState = 1;
                   116718:           iCol = 0;
                   116719:           break;
                   116720: 
                   116721:         /* State 1. In this state we are expecting either a 1, indicating
                   116722:         ** that the following integer will be a column number, or the
                   116723:         ** start of a position list for column 0.  
                   116724:         ** 
                   116725:         ** The only difference between state 1 and state 2 is that if the
                   116726:         ** integer encountered in state 1 is not 0 or 1, then we need to
                   116727:         ** increment the column 0 "nDoc" count for this term.
                   116728:         */
                   116729:         case 1:
                   116730:           assert( iCol==0 );
                   116731:           if( v>1 ){
                   116732:             pCsr->aStat[1].nDoc++;
                   116733:           }
                   116734:           eState = 2;
                   116735:           /* fall through */
                   116736: 
                   116737:         case 2:
                   116738:           if( v==0 ){       /* 0x00. Next integer will be a docid. */
                   116739:             eState = 0;
                   116740:           }else if( v==1 ){ /* 0x01. Next integer will be a column number. */
                   116741:             eState = 3;
                   116742:           }else{            /* 2 or greater. A position. */
                   116743:             pCsr->aStat[iCol+1].nOcc++;
                   116744:             pCsr->aStat[0].nOcc++;
                   116745:           }
                   116746:           break;
                   116747: 
                   116748:         /* State 3. The integer just read is a column number. */
                   116749:         default: assert( eState==3 );
                   116750:           iCol = (int)v;
                   116751:           if( fts3auxGrowStatArray(pCsr, iCol+2) ) return SQLITE_NOMEM;
                   116752:           pCsr->aStat[iCol+1].nDoc++;
                   116753:           eState = 2;
                   116754:           break;
                   116755:       }
                   116756:     }
                   116757: 
                   116758:     pCsr->iCol = 0;
                   116759:     rc = SQLITE_OK;
                   116760:   }else{
                   116761:     pCsr->isEof = 1;
                   116762:   }
                   116763:   return rc;
                   116764: }
                   116765: 
                   116766: /*
                   116767: ** xFilter - Initialize a cursor to point at the start of its data.
                   116768: */
                   116769: static int fts3auxFilterMethod(
                   116770:   sqlite3_vtab_cursor *pCursor,   /* The cursor used for this query */
                   116771:   int idxNum,                     /* Strategy index */
                   116772:   const char *idxStr,             /* Unused */
                   116773:   int nVal,                       /* Number of elements in apVal */
                   116774:   sqlite3_value **apVal           /* Arguments for the indexing scheme */
                   116775: ){
                   116776:   Fts3auxCursor *pCsr = (Fts3auxCursor *)pCursor;
                   116777:   Fts3Table *pFts3 = ((Fts3auxTable *)pCursor->pVtab)->pFts3Tab;
                   116778:   int rc;
                   116779:   int isScan;
                   116780: 
                   116781:   UNUSED_PARAMETER(nVal);
                   116782:   UNUSED_PARAMETER(idxStr);
                   116783: 
                   116784:   assert( idxStr==0 );
                   116785:   assert( idxNum==FTS4AUX_EQ_CONSTRAINT || idxNum==0
                   116786:        || idxNum==FTS4AUX_LE_CONSTRAINT || idxNum==FTS4AUX_GE_CONSTRAINT
                   116787:        || idxNum==(FTS4AUX_LE_CONSTRAINT|FTS4AUX_GE_CONSTRAINT)
                   116788:   );
                   116789:   isScan = (idxNum!=FTS4AUX_EQ_CONSTRAINT);
                   116790: 
                   116791:   /* In case this cursor is being reused, close and zero it. */
                   116792:   testcase(pCsr->filter.zTerm);
                   116793:   sqlite3Fts3SegReaderFinish(&pCsr->csr);
                   116794:   sqlite3_free((void *)pCsr->filter.zTerm);
                   116795:   sqlite3_free(pCsr->aStat);
                   116796:   memset(&pCsr->csr, 0, ((u8*)&pCsr[1]) - (u8*)&pCsr->csr);
                   116797: 
                   116798:   pCsr->filter.flags = FTS3_SEGMENT_REQUIRE_POS|FTS3_SEGMENT_IGNORE_EMPTY;
                   116799:   if( isScan ) pCsr->filter.flags |= FTS3_SEGMENT_SCAN;
                   116800: 
                   116801:   if( idxNum&(FTS4AUX_EQ_CONSTRAINT|FTS4AUX_GE_CONSTRAINT) ){
                   116802:     const unsigned char *zStr = sqlite3_value_text(apVal[0]);
                   116803:     if( zStr ){
                   116804:       pCsr->filter.zTerm = sqlite3_mprintf("%s", zStr);
                   116805:       pCsr->filter.nTerm = sqlite3_value_bytes(apVal[0]);
                   116806:       if( pCsr->filter.zTerm==0 ) return SQLITE_NOMEM;
                   116807:     }
                   116808:   }
                   116809:   if( idxNum&FTS4AUX_LE_CONSTRAINT ){
                   116810:     int iIdx = (idxNum&FTS4AUX_GE_CONSTRAINT) ? 1 : 0;
                   116811:     pCsr->zStop = sqlite3_mprintf("%s", sqlite3_value_text(apVal[iIdx]));
                   116812:     pCsr->nStop = sqlite3_value_bytes(apVal[iIdx]);
                   116813:     if( pCsr->zStop==0 ) return SQLITE_NOMEM;
                   116814:   }
                   116815: 
                   116816:   rc = sqlite3Fts3SegReaderCursor(pFts3, 0, FTS3_SEGCURSOR_ALL,
                   116817:       pCsr->filter.zTerm, pCsr->filter.nTerm, 0, isScan, &pCsr->csr
                   116818:   );
                   116819:   if( rc==SQLITE_OK ){
                   116820:     rc = sqlite3Fts3SegReaderStart(pFts3, &pCsr->csr, &pCsr->filter);
                   116821:   }
                   116822: 
                   116823:   if( rc==SQLITE_OK ) rc = fts3auxNextMethod(pCursor);
                   116824:   return rc;
                   116825: }
                   116826: 
                   116827: /*
                   116828: ** xEof - Return true if the cursor is at EOF, or false otherwise.
                   116829: */
                   116830: static int fts3auxEofMethod(sqlite3_vtab_cursor *pCursor){
                   116831:   Fts3auxCursor *pCsr = (Fts3auxCursor *)pCursor;
                   116832:   return pCsr->isEof;
                   116833: }
                   116834: 
                   116835: /*
                   116836: ** xColumn - Return a column value.
                   116837: */
                   116838: static int fts3auxColumnMethod(
                   116839:   sqlite3_vtab_cursor *pCursor,   /* Cursor to retrieve value from */
                   116840:   sqlite3_context *pContext,      /* Context for sqlite3_result_xxx() calls */
                   116841:   int iCol                        /* Index of column to read value from */
                   116842: ){
                   116843:   Fts3auxCursor *p = (Fts3auxCursor *)pCursor;
                   116844: 
                   116845:   assert( p->isEof==0 );
                   116846:   if( iCol==0 ){        /* Column "term" */
                   116847:     sqlite3_result_text(pContext, p->csr.zTerm, p->csr.nTerm, SQLITE_TRANSIENT);
                   116848:   }else if( iCol==1 ){  /* Column "col" */
                   116849:     if( p->iCol ){
                   116850:       sqlite3_result_int(pContext, p->iCol-1);
                   116851:     }else{
                   116852:       sqlite3_result_text(pContext, "*", -1, SQLITE_STATIC);
                   116853:     }
                   116854:   }else if( iCol==2 ){  /* Column "documents" */
                   116855:     sqlite3_result_int64(pContext, p->aStat[p->iCol].nDoc);
                   116856:   }else{                /* Column "occurrences" */
                   116857:     sqlite3_result_int64(pContext, p->aStat[p->iCol].nOcc);
                   116858:   }
                   116859: 
                   116860:   return SQLITE_OK;
                   116861: }
                   116862: 
                   116863: /*
                   116864: ** xRowid - Return the current rowid for the cursor.
                   116865: */
                   116866: static int fts3auxRowidMethod(
                   116867:   sqlite3_vtab_cursor *pCursor,   /* Cursor to retrieve value from */
                   116868:   sqlite_int64 *pRowid            /* OUT: Rowid value */
                   116869: ){
                   116870:   Fts3auxCursor *pCsr = (Fts3auxCursor *)pCursor;
                   116871:   *pRowid = pCsr->iRowid;
                   116872:   return SQLITE_OK;
                   116873: }
                   116874: 
                   116875: /*
                   116876: ** Register the fts3aux module with database connection db. Return SQLITE_OK
                   116877: ** if successful or an error code if sqlite3_create_module() fails.
                   116878: */
                   116879: SQLITE_PRIVATE int sqlite3Fts3InitAux(sqlite3 *db){
                   116880:   static const sqlite3_module fts3aux_module = {
                   116881:      0,                           /* iVersion      */
                   116882:      fts3auxConnectMethod,        /* xCreate       */
                   116883:      fts3auxConnectMethod,        /* xConnect      */
                   116884:      fts3auxBestIndexMethod,      /* xBestIndex    */
                   116885:      fts3auxDisconnectMethod,     /* xDisconnect   */
                   116886:      fts3auxDisconnectMethod,     /* xDestroy      */
                   116887:      fts3auxOpenMethod,           /* xOpen         */
                   116888:      fts3auxCloseMethod,          /* xClose        */
                   116889:      fts3auxFilterMethod,         /* xFilter       */
                   116890:      fts3auxNextMethod,           /* xNext         */
                   116891:      fts3auxEofMethod,            /* xEof          */
                   116892:      fts3auxColumnMethod,         /* xColumn       */
                   116893:      fts3auxRowidMethod,          /* xRowid        */
                   116894:      0,                           /* xUpdate       */
                   116895:      0,                           /* xBegin        */
                   116896:      0,                           /* xSync         */
                   116897:      0,                           /* xCommit       */
                   116898:      0,                           /* xRollback     */
                   116899:      0,                           /* xFindFunction */
                   116900:      0,                           /* xRename       */
                   116901:      0,                           /* xSavepoint    */
                   116902:      0,                           /* xRelease      */
                   116903:      0                            /* xRollbackTo   */
                   116904:   };
                   116905:   int rc;                         /* Return code */
                   116906: 
                   116907:   rc = sqlite3_create_module(db, "fts4aux", &fts3aux_module, 0);
                   116908:   return rc;
                   116909: }
                   116910: 
                   116911: #endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) */
                   116912: 
                   116913: /************** End of fts3_aux.c ********************************************/
                   116914: /************** Begin file fts3_expr.c ***************************************/
                   116915: /*
                   116916: ** 2008 Nov 28
                   116917: **
                   116918: ** The author disclaims copyright to this source code.  In place of
                   116919: ** a legal notice, here is a blessing:
                   116920: **
                   116921: **    May you do good and not evil.
                   116922: **    May you find forgiveness for yourself and forgive others.
                   116923: **    May you share freely, never taking more than you give.
                   116924: **
                   116925: ******************************************************************************
                   116926: **
                   116927: ** This module contains code that implements a parser for fts3 query strings
                   116928: ** (the right-hand argument to the MATCH operator). Because the supported 
                   116929: ** syntax is relatively simple, the whole tokenizer/parser system is
                   116930: ** hand-coded. 
                   116931: */
                   116932: #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3)
                   116933: 
                   116934: /*
                   116935: ** By default, this module parses the legacy syntax that has been 
                   116936: ** traditionally used by fts3. Or, if SQLITE_ENABLE_FTS3_PARENTHESIS
                   116937: ** is defined, then it uses the new syntax. The differences between
                   116938: ** the new and the old syntaxes are:
                   116939: **
                   116940: **  a) The new syntax supports parenthesis. The old does not.
                   116941: **
                   116942: **  b) The new syntax supports the AND and NOT operators. The old does not.
                   116943: **
                   116944: **  c) The old syntax supports the "-" token qualifier. This is not 
                   116945: **     supported by the new syntax (it is replaced by the NOT operator).
                   116946: **
                   116947: **  d) When using the old syntax, the OR operator has a greater precedence
                   116948: **     than an implicit AND. When using the new, both implicity and explicit
                   116949: **     AND operators have a higher precedence than OR.
                   116950: **
                   116951: ** If compiled with SQLITE_TEST defined, then this module exports the
                   116952: ** symbol "int sqlite3_fts3_enable_parentheses". Setting this variable
                   116953: ** to zero causes the module to use the old syntax. If it is set to 
                   116954: ** non-zero the new syntax is activated. This is so both syntaxes can
                   116955: ** be tested using a single build of testfixture.
                   116956: **
                   116957: ** The following describes the syntax supported by the fts3 MATCH
                   116958: ** operator in a similar format to that used by the lemon parser
                   116959: ** generator. This module does not use actually lemon, it uses a
                   116960: ** custom parser.
                   116961: **
                   116962: **   query ::= andexpr (OR andexpr)*.
                   116963: **
                   116964: **   andexpr ::= notexpr (AND? notexpr)*.
                   116965: **
                   116966: **   notexpr ::= nearexpr (NOT nearexpr|-TOKEN)*.
                   116967: **   notexpr ::= LP query RP.
                   116968: **
                   116969: **   nearexpr ::= phrase (NEAR distance_opt nearexpr)*.
                   116970: **
                   116971: **   distance_opt ::= .
                   116972: **   distance_opt ::= / INTEGER.
                   116973: **
                   116974: **   phrase ::= TOKEN.
                   116975: **   phrase ::= COLUMN:TOKEN.
                   116976: **   phrase ::= "TOKEN TOKEN TOKEN...".
                   116977: */
                   116978: 
                   116979: #ifdef SQLITE_TEST
                   116980: SQLITE_API int sqlite3_fts3_enable_parentheses = 0;
                   116981: #else
                   116982: # ifdef SQLITE_ENABLE_FTS3_PARENTHESIS 
                   116983: #  define sqlite3_fts3_enable_parentheses 1
                   116984: # else
                   116985: #  define sqlite3_fts3_enable_parentheses 0
                   116986: # endif
                   116987: #endif
                   116988: 
                   116989: /*
                   116990: ** Default span for NEAR operators.
                   116991: */
                   116992: #define SQLITE_FTS3_DEFAULT_NEAR_PARAM 10
                   116993: 
                   116994: 
                   116995: /*
                   116996: ** isNot:
                   116997: **   This variable is used by function getNextNode(). When getNextNode() is
                   116998: **   called, it sets ParseContext.isNot to true if the 'next node' is a 
                   116999: **   FTSQUERY_PHRASE with a unary "-" attached to it. i.e. "mysql" in the
                   117000: **   FTS3 query "sqlite -mysql". Otherwise, ParseContext.isNot is set to
                   117001: **   zero.
                   117002: */
                   117003: typedef struct ParseContext ParseContext;
                   117004: struct ParseContext {
                   117005:   sqlite3_tokenizer *pTokenizer;      /* Tokenizer module */
                   117006:   const char **azCol;                 /* Array of column names for fts3 table */
                   117007:   int nCol;                           /* Number of entries in azCol[] */
                   117008:   int iDefaultCol;                    /* Default column to query */
                   117009:   int isNot;                          /* True if getNextNode() sees a unary - */
                   117010:   sqlite3_context *pCtx;              /* Write error message here */
                   117011:   int nNest;                          /* Number of nested brackets */
                   117012: };
                   117013: 
                   117014: /*
                   117015: ** This function is equivalent to the standard isspace() function. 
                   117016: **
                   117017: ** The standard isspace() can be awkward to use safely, because although it
                   117018: ** is defined to accept an argument of type int, its behaviour when passed
                   117019: ** an integer that falls outside of the range of the unsigned char type
                   117020: ** is undefined (and sometimes, "undefined" means segfault). This wrapper
                   117021: ** is defined to accept an argument of type char, and always returns 0 for
                   117022: ** any values that fall outside of the range of the unsigned char type (i.e.
                   117023: ** negative values).
                   117024: */
                   117025: static int fts3isspace(char c){
                   117026:   return c==' ' || c=='\t' || c=='\n' || c=='\r' || c=='\v' || c=='\f';
                   117027: }
                   117028: 
                   117029: /*
                   117030: ** Allocate nByte bytes of memory using sqlite3_malloc(). If successful,
                   117031: ** zero the memory before returning a pointer to it. If unsuccessful, 
                   117032: ** return NULL.
                   117033: */
                   117034: static void *fts3MallocZero(int nByte){
                   117035:   void *pRet = sqlite3_malloc(nByte);
                   117036:   if( pRet ) memset(pRet, 0, nByte);
                   117037:   return pRet;
                   117038: }
                   117039: 
                   117040: 
                   117041: /*
                   117042: ** Extract the next token from buffer z (length n) using the tokenizer
                   117043: ** and other information (column names etc.) in pParse. Create an Fts3Expr
                   117044: ** structure of type FTSQUERY_PHRASE containing a phrase consisting of this
                   117045: ** single token and set *ppExpr to point to it. If the end of the buffer is
                   117046: ** reached before a token is found, set *ppExpr to zero. It is the
                   117047: ** responsibility of the caller to eventually deallocate the allocated 
                   117048: ** Fts3Expr structure (if any) by passing it to sqlite3_free().
                   117049: **
                   117050: ** Return SQLITE_OK if successful, or SQLITE_NOMEM if a memory allocation
                   117051: ** fails.
                   117052: */
                   117053: static int getNextToken(
                   117054:   ParseContext *pParse,                   /* fts3 query parse context */
                   117055:   int iCol,                               /* Value for Fts3Phrase.iColumn */
                   117056:   const char *z, int n,                   /* Input string */
                   117057:   Fts3Expr **ppExpr,                      /* OUT: expression */
                   117058:   int *pnConsumed                         /* OUT: Number of bytes consumed */
                   117059: ){
                   117060:   sqlite3_tokenizer *pTokenizer = pParse->pTokenizer;
                   117061:   sqlite3_tokenizer_module const *pModule = pTokenizer->pModule;
                   117062:   int rc;
                   117063:   sqlite3_tokenizer_cursor *pCursor;
                   117064:   Fts3Expr *pRet = 0;
                   117065:   int nConsumed = 0;
                   117066: 
                   117067:   rc = pModule->xOpen(pTokenizer, z, n, &pCursor);
                   117068:   if( rc==SQLITE_OK ){
                   117069:     const char *zToken;
                   117070:     int nToken, iStart, iEnd, iPosition;
                   117071:     int nByte;                               /* total space to allocate */
                   117072: 
                   117073:     pCursor->pTokenizer = pTokenizer;
                   117074:     rc = pModule->xNext(pCursor, &zToken, &nToken, &iStart, &iEnd, &iPosition);
                   117075: 
                   117076:     if( rc==SQLITE_OK ){
                   117077:       nByte = sizeof(Fts3Expr) + sizeof(Fts3Phrase) + nToken;
                   117078:       pRet = (Fts3Expr *)fts3MallocZero(nByte);
                   117079:       if( !pRet ){
                   117080:         rc = SQLITE_NOMEM;
                   117081:       }else{
                   117082:         pRet->eType = FTSQUERY_PHRASE;
                   117083:         pRet->pPhrase = (Fts3Phrase *)&pRet[1];
                   117084:         pRet->pPhrase->nToken = 1;
                   117085:         pRet->pPhrase->iColumn = iCol;
                   117086:         pRet->pPhrase->aToken[0].n = nToken;
                   117087:         pRet->pPhrase->aToken[0].z = (char *)&pRet->pPhrase[1];
                   117088:         memcpy(pRet->pPhrase->aToken[0].z, zToken, nToken);
                   117089: 
                   117090:         if( iEnd<n && z[iEnd]=='*' ){
                   117091:           pRet->pPhrase->aToken[0].isPrefix = 1;
                   117092:           iEnd++;
                   117093:         }
                   117094:         if( !sqlite3_fts3_enable_parentheses && iStart>0 && z[iStart-1]=='-' ){
                   117095:           pParse->isNot = 1;
                   117096:         }
                   117097:       }
                   117098:       nConsumed = iEnd;
                   117099:     }
                   117100: 
                   117101:     pModule->xClose(pCursor);
                   117102:   }
                   117103:   
                   117104:   *pnConsumed = nConsumed;
                   117105:   *ppExpr = pRet;
                   117106:   return rc;
                   117107: }
                   117108: 
                   117109: 
                   117110: /*
                   117111: ** Enlarge a memory allocation.  If an out-of-memory allocation occurs,
                   117112: ** then free the old allocation.
                   117113: */
                   117114: static void *fts3ReallocOrFree(void *pOrig, int nNew){
                   117115:   void *pRet = sqlite3_realloc(pOrig, nNew);
                   117116:   if( !pRet ){
                   117117:     sqlite3_free(pOrig);
                   117118:   }
                   117119:   return pRet;
                   117120: }
                   117121: 
                   117122: /*
                   117123: ** Buffer zInput, length nInput, contains the contents of a quoted string
                   117124: ** that appeared as part of an fts3 query expression. Neither quote character
                   117125: ** is included in the buffer. This function attempts to tokenize the entire
                   117126: ** input buffer and create an Fts3Expr structure of type FTSQUERY_PHRASE 
                   117127: ** containing the results.
                   117128: **
                   117129: ** If successful, SQLITE_OK is returned and *ppExpr set to point at the
                   117130: ** allocated Fts3Expr structure. Otherwise, either SQLITE_NOMEM (out of memory
                   117131: ** error) or SQLITE_ERROR (tokenization error) is returned and *ppExpr set
                   117132: ** to 0.
                   117133: */
                   117134: static int getNextString(
                   117135:   ParseContext *pParse,                   /* fts3 query parse context */
                   117136:   const char *zInput, int nInput,         /* Input string */
                   117137:   Fts3Expr **ppExpr                       /* OUT: expression */
                   117138: ){
                   117139:   sqlite3_tokenizer *pTokenizer = pParse->pTokenizer;
                   117140:   sqlite3_tokenizer_module const *pModule = pTokenizer->pModule;
                   117141:   int rc;
                   117142:   Fts3Expr *p = 0;
                   117143:   sqlite3_tokenizer_cursor *pCursor = 0;
                   117144:   char *zTemp = 0;
                   117145:   int nTemp = 0;
                   117146: 
                   117147:   const int nSpace = sizeof(Fts3Expr) + sizeof(Fts3Phrase);
                   117148:   int nToken = 0;
                   117149: 
                   117150:   /* The final Fts3Expr data structure, including the Fts3Phrase,
                   117151:   ** Fts3PhraseToken structures token buffers are all stored as a single 
                   117152:   ** allocation so that the expression can be freed with a single call to
                   117153:   ** sqlite3_free(). Setting this up requires a two pass approach.
                   117154:   **
                   117155:   ** The first pass, in the block below, uses a tokenizer cursor to iterate
                   117156:   ** through the tokens in the expression. This pass uses fts3ReallocOrFree()
                   117157:   ** to assemble data in two dynamic buffers:
                   117158:   **
                   117159:   **   Buffer p: Points to the Fts3Expr structure, followed by the Fts3Phrase
                   117160:   **             structure, followed by the array of Fts3PhraseToken 
                   117161:   **             structures. This pass only populates the Fts3PhraseToken array.
                   117162:   **
                   117163:   **   Buffer zTemp: Contains copies of all tokens.
                   117164:   **
                   117165:   ** The second pass, in the block that begins "if( rc==SQLITE_DONE )" below,
                   117166:   ** appends buffer zTemp to buffer p, and fills in the Fts3Expr and Fts3Phrase
                   117167:   ** structures.
                   117168:   */
                   117169:   rc = pModule->xOpen(pTokenizer, zInput, nInput, &pCursor);
                   117170:   if( rc==SQLITE_OK ){
                   117171:     int ii;
                   117172:     pCursor->pTokenizer = pTokenizer;
                   117173:     for(ii=0; rc==SQLITE_OK; ii++){
                   117174:       const char *zByte;
                   117175:       int nByte, iBegin, iEnd, iPos;
                   117176:       rc = pModule->xNext(pCursor, &zByte, &nByte, &iBegin, &iEnd, &iPos);
                   117177:       if( rc==SQLITE_OK ){
                   117178:         Fts3PhraseToken *pToken;
                   117179: 
                   117180:         p = fts3ReallocOrFree(p, nSpace + ii*sizeof(Fts3PhraseToken));
                   117181:         if( !p ) goto no_mem;
                   117182: 
                   117183:         zTemp = fts3ReallocOrFree(zTemp, nTemp + nByte);
                   117184:         if( !zTemp ) goto no_mem;
                   117185: 
                   117186:         assert( nToken==ii );
                   117187:         pToken = &((Fts3Phrase *)(&p[1]))->aToken[ii];
                   117188:         memset(pToken, 0, sizeof(Fts3PhraseToken));
                   117189: 
                   117190:         memcpy(&zTemp[nTemp], zByte, nByte);
                   117191:         nTemp += nByte;
                   117192: 
                   117193:         pToken->n = nByte;
                   117194:         pToken->isPrefix = (iEnd<nInput && zInput[iEnd]=='*');
                   117195:         nToken = ii+1;
                   117196:       }
                   117197:     }
                   117198: 
                   117199:     pModule->xClose(pCursor);
                   117200:     pCursor = 0;
                   117201:   }
                   117202: 
                   117203:   if( rc==SQLITE_DONE ){
                   117204:     int jj;
                   117205:     char *zBuf = 0;
                   117206: 
                   117207:     p = fts3ReallocOrFree(p, nSpace + nToken*sizeof(Fts3PhraseToken) + nTemp);
                   117208:     if( !p ) goto no_mem;
                   117209:     memset(p, 0, (char *)&(((Fts3Phrase *)&p[1])->aToken[0])-(char *)p);
                   117210:     p->eType = FTSQUERY_PHRASE;
                   117211:     p->pPhrase = (Fts3Phrase *)&p[1];
                   117212:     p->pPhrase->iColumn = pParse->iDefaultCol;
                   117213:     p->pPhrase->nToken = nToken;
                   117214: 
                   117215:     zBuf = (char *)&p->pPhrase->aToken[nToken];
                   117216:     memcpy(zBuf, zTemp, nTemp);
                   117217:     sqlite3_free(zTemp);
                   117218: 
                   117219:     for(jj=0; jj<p->pPhrase->nToken; jj++){
                   117220:       p->pPhrase->aToken[jj].z = zBuf;
                   117221:       zBuf += p->pPhrase->aToken[jj].n;
                   117222:     }
                   117223:     rc = SQLITE_OK;
                   117224:   }
                   117225: 
                   117226:   *ppExpr = p;
                   117227:   return rc;
                   117228: no_mem:
                   117229: 
                   117230:   if( pCursor ){
                   117231:     pModule->xClose(pCursor);
                   117232:   }
                   117233:   sqlite3_free(zTemp);
                   117234:   sqlite3_free(p);
                   117235:   *ppExpr = 0;
                   117236:   return SQLITE_NOMEM;
                   117237: }
                   117238: 
                   117239: /*
                   117240: ** Function getNextNode(), which is called by fts3ExprParse(), may itself
                   117241: ** call fts3ExprParse(). So this forward declaration is required.
                   117242: */
                   117243: static int fts3ExprParse(ParseContext *, const char *, int, Fts3Expr **, int *);
                   117244: 
                   117245: /*
                   117246: ** The output variable *ppExpr is populated with an allocated Fts3Expr 
                   117247: ** structure, or set to 0 if the end of the input buffer is reached.
                   117248: **
                   117249: ** Returns an SQLite error code. SQLITE_OK if everything works, SQLITE_NOMEM
                   117250: ** if a malloc failure occurs, or SQLITE_ERROR if a parse error is encountered.
                   117251: ** If SQLITE_ERROR is returned, pContext is populated with an error message.
                   117252: */
                   117253: static int getNextNode(
                   117254:   ParseContext *pParse,                   /* fts3 query parse context */
                   117255:   const char *z, int n,                   /* Input string */
                   117256:   Fts3Expr **ppExpr,                      /* OUT: expression */
                   117257:   int *pnConsumed                         /* OUT: Number of bytes consumed */
                   117258: ){
                   117259:   static const struct Fts3Keyword {
                   117260:     char *z;                              /* Keyword text */
                   117261:     unsigned char n;                      /* Length of the keyword */
                   117262:     unsigned char parenOnly;              /* Only valid in paren mode */
                   117263:     unsigned char eType;                  /* Keyword code */
                   117264:   } aKeyword[] = {
                   117265:     { "OR" ,  2, 0, FTSQUERY_OR   },
                   117266:     { "AND",  3, 1, FTSQUERY_AND  },
                   117267:     { "NOT",  3, 1, FTSQUERY_NOT  },
                   117268:     { "NEAR", 4, 0, FTSQUERY_NEAR }
                   117269:   };
                   117270:   int ii;
                   117271:   int iCol;
                   117272:   int iColLen;
                   117273:   int rc;
                   117274:   Fts3Expr *pRet = 0;
                   117275: 
                   117276:   const char *zInput = z;
                   117277:   int nInput = n;
                   117278: 
                   117279:   pParse->isNot = 0;
                   117280: 
                   117281:   /* Skip over any whitespace before checking for a keyword, an open or
                   117282:   ** close bracket, or a quoted string. 
                   117283:   */
                   117284:   while( nInput>0 && fts3isspace(*zInput) ){
                   117285:     nInput--;
                   117286:     zInput++;
                   117287:   }
                   117288:   if( nInput==0 ){
                   117289:     return SQLITE_DONE;
                   117290:   }
                   117291: 
                   117292:   /* See if we are dealing with a keyword. */
                   117293:   for(ii=0; ii<(int)(sizeof(aKeyword)/sizeof(struct Fts3Keyword)); ii++){
                   117294:     const struct Fts3Keyword *pKey = &aKeyword[ii];
                   117295: 
                   117296:     if( (pKey->parenOnly & ~sqlite3_fts3_enable_parentheses)!=0 ){
                   117297:       continue;
                   117298:     }
                   117299: 
                   117300:     if( nInput>=pKey->n && 0==memcmp(zInput, pKey->z, pKey->n) ){
                   117301:       int nNear = SQLITE_FTS3_DEFAULT_NEAR_PARAM;
                   117302:       int nKey = pKey->n;
                   117303:       char cNext;
                   117304: 
                   117305:       /* If this is a "NEAR" keyword, check for an explicit nearness. */
                   117306:       if( pKey->eType==FTSQUERY_NEAR ){
                   117307:         assert( nKey==4 );
                   117308:         if( zInput[4]=='/' && zInput[5]>='0' && zInput[5]<='9' ){
                   117309:           nNear = 0;
                   117310:           for(nKey=5; zInput[nKey]>='0' && zInput[nKey]<='9'; nKey++){
                   117311:             nNear = nNear * 10 + (zInput[nKey] - '0');
                   117312:           }
                   117313:         }
                   117314:       }
                   117315: 
                   117316:       /* At this point this is probably a keyword. But for that to be true,
                   117317:       ** the next byte must contain either whitespace, an open or close
                   117318:       ** parenthesis, a quote character, or EOF. 
                   117319:       */
                   117320:       cNext = zInput[nKey];
                   117321:       if( fts3isspace(cNext) 
                   117322:        || cNext=='"' || cNext=='(' || cNext==')' || cNext==0
                   117323:       ){
                   117324:         pRet = (Fts3Expr *)fts3MallocZero(sizeof(Fts3Expr));
                   117325:         if( !pRet ){
                   117326:           return SQLITE_NOMEM;
                   117327:         }
                   117328:         pRet->eType = pKey->eType;
                   117329:         pRet->nNear = nNear;
                   117330:         *ppExpr = pRet;
                   117331:         *pnConsumed = (int)((zInput - z) + nKey);
                   117332:         return SQLITE_OK;
                   117333:       }
                   117334: 
                   117335:       /* Turns out that wasn't a keyword after all. This happens if the
                   117336:       ** user has supplied a token such as "ORacle". Continue.
                   117337:       */
                   117338:     }
                   117339:   }
                   117340: 
                   117341:   /* Check for an open bracket. */
                   117342:   if( sqlite3_fts3_enable_parentheses ){
                   117343:     if( *zInput=='(' ){
                   117344:       int nConsumed;
                   117345:       pParse->nNest++;
                   117346:       rc = fts3ExprParse(pParse, &zInput[1], nInput-1, ppExpr, &nConsumed);
                   117347:       if( rc==SQLITE_OK && !*ppExpr ){
                   117348:         rc = SQLITE_DONE;
                   117349:       }
                   117350:       *pnConsumed = (int)((zInput - z) + 1 + nConsumed);
                   117351:       return rc;
                   117352:     }
                   117353:   
                   117354:     /* Check for a close bracket. */
                   117355:     if( *zInput==')' ){
                   117356:       pParse->nNest--;
                   117357:       *pnConsumed = (int)((zInput - z) + 1);
                   117358:       return SQLITE_DONE;
                   117359:     }
                   117360:   }
                   117361: 
                   117362:   /* See if we are dealing with a quoted phrase. If this is the case, then
                   117363:   ** search for the closing quote and pass the whole string to getNextString()
                   117364:   ** for processing. This is easy to do, as fts3 has no syntax for escaping
                   117365:   ** a quote character embedded in a string.
                   117366:   */
                   117367:   if( *zInput=='"' ){
                   117368:     for(ii=1; ii<nInput && zInput[ii]!='"'; ii++);
                   117369:     *pnConsumed = (int)((zInput - z) + ii + 1);
                   117370:     if( ii==nInput ){
                   117371:       return SQLITE_ERROR;
                   117372:     }
                   117373:     return getNextString(pParse, &zInput[1], ii-1, ppExpr);
                   117374:   }
                   117375: 
                   117376: 
                   117377:   /* If control flows to this point, this must be a regular token, or 
                   117378:   ** the end of the input. Read a regular token using the sqlite3_tokenizer
                   117379:   ** interface. Before doing so, figure out if there is an explicit
                   117380:   ** column specifier for the token. 
                   117381:   **
                   117382:   ** TODO: Strangely, it is not possible to associate a column specifier
                   117383:   ** with a quoted phrase, only with a single token. Not sure if this was
                   117384:   ** an implementation artifact or an intentional decision when fts3 was
                   117385:   ** first implemented. Whichever it was, this module duplicates the 
                   117386:   ** limitation.
                   117387:   */
                   117388:   iCol = pParse->iDefaultCol;
                   117389:   iColLen = 0;
                   117390:   for(ii=0; ii<pParse->nCol; ii++){
                   117391:     const char *zStr = pParse->azCol[ii];
                   117392:     int nStr = (int)strlen(zStr);
                   117393:     if( nInput>nStr && zInput[nStr]==':' 
                   117394:      && sqlite3_strnicmp(zStr, zInput, nStr)==0 
                   117395:     ){
                   117396:       iCol = ii;
                   117397:       iColLen = (int)((zInput - z) + nStr + 1);
                   117398:       break;
                   117399:     }
                   117400:   }
                   117401:   rc = getNextToken(pParse, iCol, &z[iColLen], n-iColLen, ppExpr, pnConsumed);
                   117402:   *pnConsumed += iColLen;
                   117403:   return rc;
                   117404: }
                   117405: 
                   117406: /*
                   117407: ** The argument is an Fts3Expr structure for a binary operator (any type
                   117408: ** except an FTSQUERY_PHRASE). Return an integer value representing the
                   117409: ** precedence of the operator. Lower values have a higher precedence (i.e.
                   117410: ** group more tightly). For example, in the C language, the == operator
                   117411: ** groups more tightly than ||, and would therefore have a higher precedence.
                   117412: **
                   117413: ** When using the new fts3 query syntax (when SQLITE_ENABLE_FTS3_PARENTHESIS
                   117414: ** is defined), the order of the operators in precedence from highest to
                   117415: ** lowest is:
                   117416: **
                   117417: **   NEAR
                   117418: **   NOT
                   117419: **   AND (including implicit ANDs)
                   117420: **   OR
                   117421: **
                   117422: ** Note that when using the old query syntax, the OR operator has a higher
                   117423: ** precedence than the AND operator.
                   117424: */
                   117425: static int opPrecedence(Fts3Expr *p){
                   117426:   assert( p->eType!=FTSQUERY_PHRASE );
                   117427:   if( sqlite3_fts3_enable_parentheses ){
                   117428:     return p->eType;
                   117429:   }else if( p->eType==FTSQUERY_NEAR ){
                   117430:     return 1;
                   117431:   }else if( p->eType==FTSQUERY_OR ){
                   117432:     return 2;
                   117433:   }
                   117434:   assert( p->eType==FTSQUERY_AND );
                   117435:   return 3;
                   117436: }
                   117437: 
                   117438: /*
                   117439: ** Argument ppHead contains a pointer to the current head of a query 
                   117440: ** expression tree being parsed. pPrev is the expression node most recently
                   117441: ** inserted into the tree. This function adds pNew, which is always a binary
                   117442: ** operator node, into the expression tree based on the relative precedence
                   117443: ** of pNew and the existing nodes of the tree. This may result in the head
                   117444: ** of the tree changing, in which case *ppHead is set to the new root node.
                   117445: */
                   117446: static void insertBinaryOperator(
                   117447:   Fts3Expr **ppHead,       /* Pointer to the root node of a tree */
                   117448:   Fts3Expr *pPrev,         /* Node most recently inserted into the tree */
                   117449:   Fts3Expr *pNew           /* New binary node to insert into expression tree */
                   117450: ){
                   117451:   Fts3Expr *pSplit = pPrev;
                   117452:   while( pSplit->pParent && opPrecedence(pSplit->pParent)<=opPrecedence(pNew) ){
                   117453:     pSplit = pSplit->pParent;
                   117454:   }
                   117455: 
                   117456:   if( pSplit->pParent ){
                   117457:     assert( pSplit->pParent->pRight==pSplit );
                   117458:     pSplit->pParent->pRight = pNew;
                   117459:     pNew->pParent = pSplit->pParent;
                   117460:   }else{
                   117461:     *ppHead = pNew;
                   117462:   }
                   117463:   pNew->pLeft = pSplit;
                   117464:   pSplit->pParent = pNew;
                   117465: }
                   117466: 
                   117467: /*
                   117468: ** Parse the fts3 query expression found in buffer z, length n. This function
                   117469: ** returns either when the end of the buffer is reached or an unmatched 
                   117470: ** closing bracket - ')' - is encountered.
                   117471: **
                   117472: ** If successful, SQLITE_OK is returned, *ppExpr is set to point to the
                   117473: ** parsed form of the expression and *pnConsumed is set to the number of
                   117474: ** bytes read from buffer z. Otherwise, *ppExpr is set to 0 and SQLITE_NOMEM
                   117475: ** (out of memory error) or SQLITE_ERROR (parse error) is returned.
                   117476: */
                   117477: static int fts3ExprParse(
                   117478:   ParseContext *pParse,                   /* fts3 query parse context */
                   117479:   const char *z, int n,                   /* Text of MATCH query */
                   117480:   Fts3Expr **ppExpr,                      /* OUT: Parsed query structure */
                   117481:   int *pnConsumed                         /* OUT: Number of bytes consumed */
                   117482: ){
                   117483:   Fts3Expr *pRet = 0;
                   117484:   Fts3Expr *pPrev = 0;
                   117485:   Fts3Expr *pNotBranch = 0;               /* Only used in legacy parse mode */
                   117486:   int nIn = n;
                   117487:   const char *zIn = z;
                   117488:   int rc = SQLITE_OK;
                   117489:   int isRequirePhrase = 1;
                   117490: 
                   117491:   while( rc==SQLITE_OK ){
                   117492:     Fts3Expr *p = 0;
                   117493:     int nByte = 0;
                   117494:     rc = getNextNode(pParse, zIn, nIn, &p, &nByte);
                   117495:     if( rc==SQLITE_OK ){
                   117496:       int isPhrase;
                   117497: 
                   117498:       if( !sqlite3_fts3_enable_parentheses 
                   117499:        && p->eType==FTSQUERY_PHRASE && pParse->isNot 
                   117500:       ){
                   117501:         /* Create an implicit NOT operator. */
                   117502:         Fts3Expr *pNot = fts3MallocZero(sizeof(Fts3Expr));
                   117503:         if( !pNot ){
                   117504:           sqlite3Fts3ExprFree(p);
                   117505:           rc = SQLITE_NOMEM;
                   117506:           goto exprparse_out;
                   117507:         }
                   117508:         pNot->eType = FTSQUERY_NOT;
                   117509:         pNot->pRight = p;
                   117510:         if( pNotBranch ){
                   117511:           pNot->pLeft = pNotBranch;
                   117512:         }
                   117513:         pNotBranch = pNot;
                   117514:         p = pPrev;
                   117515:       }else{
                   117516:         int eType = p->eType;
                   117517:         isPhrase = (eType==FTSQUERY_PHRASE || p->pLeft);
                   117518: 
                   117519:         /* The isRequirePhrase variable is set to true if a phrase or
                   117520:         ** an expression contained in parenthesis is required. If a
                   117521:         ** binary operator (AND, OR, NOT or NEAR) is encounted when
                   117522:         ** isRequirePhrase is set, this is a syntax error.
                   117523:         */
                   117524:         if( !isPhrase && isRequirePhrase ){
                   117525:           sqlite3Fts3ExprFree(p);
                   117526:           rc = SQLITE_ERROR;
                   117527:           goto exprparse_out;
                   117528:         }
                   117529:   
                   117530:         if( isPhrase && !isRequirePhrase ){
                   117531:           /* Insert an implicit AND operator. */
                   117532:           Fts3Expr *pAnd;
                   117533:           assert( pRet && pPrev );
                   117534:           pAnd = fts3MallocZero(sizeof(Fts3Expr));
                   117535:           if( !pAnd ){
                   117536:             sqlite3Fts3ExprFree(p);
                   117537:             rc = SQLITE_NOMEM;
                   117538:             goto exprparse_out;
                   117539:           }
                   117540:           pAnd->eType = FTSQUERY_AND;
                   117541:           insertBinaryOperator(&pRet, pPrev, pAnd);
                   117542:           pPrev = pAnd;
                   117543:         }
                   117544: 
                   117545:         /* This test catches attempts to make either operand of a NEAR
                   117546:         ** operator something other than a phrase. For example, either of
                   117547:         ** the following:
                   117548:         **
                   117549:         **    (bracketed expression) NEAR phrase
                   117550:         **    phrase NEAR (bracketed expression)
                   117551:         **
                   117552:         ** Return an error in either case.
                   117553:         */
                   117554:         if( pPrev && (
                   117555:             (eType==FTSQUERY_NEAR && !isPhrase && pPrev->eType!=FTSQUERY_PHRASE)
                   117556:          || (eType!=FTSQUERY_PHRASE && isPhrase && pPrev->eType==FTSQUERY_NEAR)
                   117557:         )){
                   117558:           sqlite3Fts3ExprFree(p);
                   117559:           rc = SQLITE_ERROR;
                   117560:           goto exprparse_out;
                   117561:         }
                   117562:   
                   117563:         if( isPhrase ){
                   117564:           if( pRet ){
                   117565:             assert( pPrev && pPrev->pLeft && pPrev->pRight==0 );
                   117566:             pPrev->pRight = p;
                   117567:             p->pParent = pPrev;
                   117568:           }else{
                   117569:             pRet = p;
                   117570:           }
                   117571:         }else{
                   117572:           insertBinaryOperator(&pRet, pPrev, p);
                   117573:         }
                   117574:         isRequirePhrase = !isPhrase;
                   117575:       }
                   117576:       assert( nByte>0 );
                   117577:     }
                   117578:     assert( rc!=SQLITE_OK || (nByte>0 && nByte<=nIn) );
                   117579:     nIn -= nByte;
                   117580:     zIn += nByte;
                   117581:     pPrev = p;
                   117582:   }
                   117583: 
                   117584:   if( rc==SQLITE_DONE && pRet && isRequirePhrase ){
                   117585:     rc = SQLITE_ERROR;
                   117586:   }
                   117587: 
                   117588:   if( rc==SQLITE_DONE ){
                   117589:     rc = SQLITE_OK;
                   117590:     if( !sqlite3_fts3_enable_parentheses && pNotBranch ){
                   117591:       if( !pRet ){
                   117592:         rc = SQLITE_ERROR;
                   117593:       }else{
                   117594:         Fts3Expr *pIter = pNotBranch;
                   117595:         while( pIter->pLeft ){
                   117596:           pIter = pIter->pLeft;
                   117597:         }
                   117598:         pIter->pLeft = pRet;
                   117599:         pRet = pNotBranch;
                   117600:       }
                   117601:     }
                   117602:   }
                   117603:   *pnConsumed = n - nIn;
                   117604: 
                   117605: exprparse_out:
                   117606:   if( rc!=SQLITE_OK ){
                   117607:     sqlite3Fts3ExprFree(pRet);
                   117608:     sqlite3Fts3ExprFree(pNotBranch);
                   117609:     pRet = 0;
                   117610:   }
                   117611:   *ppExpr = pRet;
                   117612:   return rc;
                   117613: }
                   117614: 
                   117615: /*
                   117616: ** Parameters z and n contain a pointer to and length of a buffer containing
                   117617: ** an fts3 query expression, respectively. This function attempts to parse the
                   117618: ** query expression and create a tree of Fts3Expr structures representing the
                   117619: ** parsed expression. If successful, *ppExpr is set to point to the head
                   117620: ** of the parsed expression tree and SQLITE_OK is returned. If an error
                   117621: ** occurs, either SQLITE_NOMEM (out-of-memory error) or SQLITE_ERROR (parse
                   117622: ** error) is returned and *ppExpr is set to 0.
                   117623: **
                   117624: ** If parameter n is a negative number, then z is assumed to point to a
                   117625: ** nul-terminated string and the length is determined using strlen().
                   117626: **
                   117627: ** The first parameter, pTokenizer, is passed the fts3 tokenizer module to
                   117628: ** use to normalize query tokens while parsing the expression. The azCol[]
                   117629: ** array, which is assumed to contain nCol entries, should contain the names
                   117630: ** of each column in the target fts3 table, in order from left to right. 
                   117631: ** Column names must be nul-terminated strings.
                   117632: **
                   117633: ** The iDefaultCol parameter should be passed the index of the table column
                   117634: ** that appears on the left-hand-side of the MATCH operator (the default
                   117635: ** column to match against for tokens for which a column name is not explicitly
                   117636: ** specified as part of the query string), or -1 if tokens may by default
                   117637: ** match any table column.
                   117638: */
                   117639: SQLITE_PRIVATE int sqlite3Fts3ExprParse(
                   117640:   sqlite3_tokenizer *pTokenizer,      /* Tokenizer module */
                   117641:   char **azCol,                       /* Array of column names for fts3 table */
                   117642:   int nCol,                           /* Number of entries in azCol[] */
                   117643:   int iDefaultCol,                    /* Default column to query */
                   117644:   const char *z, int n,               /* Text of MATCH query */
                   117645:   Fts3Expr **ppExpr                   /* OUT: Parsed query structure */
                   117646: ){
                   117647:   int nParsed;
                   117648:   int rc;
                   117649:   ParseContext sParse;
                   117650:   sParse.pTokenizer = pTokenizer;
                   117651:   sParse.azCol = (const char **)azCol;
                   117652:   sParse.nCol = nCol;
                   117653:   sParse.iDefaultCol = iDefaultCol;
                   117654:   sParse.nNest = 0;
                   117655:   if( z==0 ){
                   117656:     *ppExpr = 0;
                   117657:     return SQLITE_OK;
                   117658:   }
                   117659:   if( n<0 ){
                   117660:     n = (int)strlen(z);
                   117661:   }
                   117662:   rc = fts3ExprParse(&sParse, z, n, ppExpr, &nParsed);
                   117663: 
                   117664:   /* Check for mismatched parenthesis */
                   117665:   if( rc==SQLITE_OK && sParse.nNest ){
                   117666:     rc = SQLITE_ERROR;
                   117667:     sqlite3Fts3ExprFree(*ppExpr);
                   117668:     *ppExpr = 0;
                   117669:   }
                   117670: 
                   117671:   return rc;
                   117672: }
                   117673: 
                   117674: /*
                   117675: ** Free a parsed fts3 query expression allocated by sqlite3Fts3ExprParse().
                   117676: */
                   117677: SQLITE_PRIVATE void sqlite3Fts3ExprFree(Fts3Expr *p){
                   117678:   if( p ){
                   117679:     assert( p->eType==FTSQUERY_PHRASE || p->pPhrase==0 );
                   117680:     sqlite3Fts3ExprFree(p->pLeft);
                   117681:     sqlite3Fts3ExprFree(p->pRight);
                   117682:     sqlite3Fts3EvalPhraseCleanup(p->pPhrase);
                   117683:     sqlite3_free(p->aMI);
                   117684:     sqlite3_free(p);
                   117685:   }
                   117686: }
                   117687: 
                   117688: /****************************************************************************
                   117689: *****************************************************************************
                   117690: ** Everything after this point is just test code.
                   117691: */
                   117692: 
                   117693: #ifdef SQLITE_TEST
                   117694: 
                   117695: 
                   117696: /*
                   117697: ** Function to query the hash-table of tokenizers (see README.tokenizers).
                   117698: */
                   117699: static int queryTestTokenizer(
                   117700:   sqlite3 *db, 
                   117701:   const char *zName,  
                   117702:   const sqlite3_tokenizer_module **pp
                   117703: ){
                   117704:   int rc;
                   117705:   sqlite3_stmt *pStmt;
                   117706:   const char zSql[] = "SELECT fts3_tokenizer(?)";
                   117707: 
                   117708:   *pp = 0;
                   117709:   rc = sqlite3_prepare_v2(db, zSql, -1, &pStmt, 0);
                   117710:   if( rc!=SQLITE_OK ){
                   117711:     return rc;
                   117712:   }
                   117713: 
                   117714:   sqlite3_bind_text(pStmt, 1, zName, -1, SQLITE_STATIC);
                   117715:   if( SQLITE_ROW==sqlite3_step(pStmt) ){
                   117716:     if( sqlite3_column_type(pStmt, 0)==SQLITE_BLOB ){
                   117717:       memcpy((void *)pp, sqlite3_column_blob(pStmt, 0), sizeof(*pp));
                   117718:     }
                   117719:   }
                   117720: 
                   117721:   return sqlite3_finalize(pStmt);
                   117722: }
                   117723: 
                   117724: /*
                   117725: ** Return a pointer to a buffer containing a text representation of the
                   117726: ** expression passed as the first argument. The buffer is obtained from
                   117727: ** sqlite3_malloc(). It is the responsibility of the caller to use 
                   117728: ** sqlite3_free() to release the memory. If an OOM condition is encountered,
                   117729: ** NULL is returned.
                   117730: **
                   117731: ** If the second argument is not NULL, then its contents are prepended to 
                   117732: ** the returned expression text and then freed using sqlite3_free().
                   117733: */
                   117734: static char *exprToString(Fts3Expr *pExpr, char *zBuf){
                   117735:   switch( pExpr->eType ){
                   117736:     case FTSQUERY_PHRASE: {
                   117737:       Fts3Phrase *pPhrase = pExpr->pPhrase;
                   117738:       int i;
                   117739:       zBuf = sqlite3_mprintf(
                   117740:           "%zPHRASE %d 0", zBuf, pPhrase->iColumn);
                   117741:       for(i=0; zBuf && i<pPhrase->nToken; i++){
                   117742:         zBuf = sqlite3_mprintf("%z %.*s%s", zBuf, 
                   117743:             pPhrase->aToken[i].n, pPhrase->aToken[i].z,
                   117744:             (pPhrase->aToken[i].isPrefix?"+":"")
                   117745:         );
                   117746:       }
                   117747:       return zBuf;
                   117748:     }
                   117749: 
                   117750:     case FTSQUERY_NEAR:
                   117751:       zBuf = sqlite3_mprintf("%zNEAR/%d ", zBuf, pExpr->nNear);
                   117752:       break;
                   117753:     case FTSQUERY_NOT:
                   117754:       zBuf = sqlite3_mprintf("%zNOT ", zBuf);
                   117755:       break;
                   117756:     case FTSQUERY_AND:
                   117757:       zBuf = sqlite3_mprintf("%zAND ", zBuf);
                   117758:       break;
                   117759:     case FTSQUERY_OR:
                   117760:       zBuf = sqlite3_mprintf("%zOR ", zBuf);
                   117761:       break;
                   117762:   }
                   117763: 
                   117764:   if( zBuf ) zBuf = sqlite3_mprintf("%z{", zBuf);
                   117765:   if( zBuf ) zBuf = exprToString(pExpr->pLeft, zBuf);
                   117766:   if( zBuf ) zBuf = sqlite3_mprintf("%z} {", zBuf);
                   117767: 
                   117768:   if( zBuf ) zBuf = exprToString(pExpr->pRight, zBuf);
                   117769:   if( zBuf ) zBuf = sqlite3_mprintf("%z}", zBuf);
                   117770: 
                   117771:   return zBuf;
                   117772: }
                   117773: 
                   117774: /*
                   117775: ** This is the implementation of a scalar SQL function used to test the 
                   117776: ** expression parser. It should be called as follows:
                   117777: **
                   117778: **   fts3_exprtest(<tokenizer>, <expr>, <column 1>, ...);
                   117779: **
                   117780: ** The first argument, <tokenizer>, is the name of the fts3 tokenizer used
                   117781: ** to parse the query expression (see README.tokenizers). The second argument
                   117782: ** is the query expression to parse. Each subsequent argument is the name
                   117783: ** of a column of the fts3 table that the query expression may refer to.
                   117784: ** For example:
                   117785: **
                   117786: **   SELECT fts3_exprtest('simple', 'Bill col2:Bloggs', 'col1', 'col2');
                   117787: */
                   117788: static void fts3ExprTest(
                   117789:   sqlite3_context *context,
                   117790:   int argc,
                   117791:   sqlite3_value **argv
                   117792: ){
                   117793:   sqlite3_tokenizer_module const *pModule = 0;
                   117794:   sqlite3_tokenizer *pTokenizer = 0;
                   117795:   int rc;
                   117796:   char **azCol = 0;
                   117797:   const char *zExpr;
                   117798:   int nExpr;
                   117799:   int nCol;
                   117800:   int ii;
                   117801:   Fts3Expr *pExpr;
                   117802:   char *zBuf = 0;
                   117803:   sqlite3 *db = sqlite3_context_db_handle(context);
                   117804: 
                   117805:   if( argc<3 ){
                   117806:     sqlite3_result_error(context, 
                   117807:         "Usage: fts3_exprtest(tokenizer, expr, col1, ...", -1
                   117808:     );
                   117809:     return;
                   117810:   }
                   117811: 
                   117812:   rc = queryTestTokenizer(db,
                   117813:                           (const char *)sqlite3_value_text(argv[0]), &pModule);
                   117814:   if( rc==SQLITE_NOMEM ){
                   117815:     sqlite3_result_error_nomem(context);
                   117816:     goto exprtest_out;
                   117817:   }else if( !pModule ){
                   117818:     sqlite3_result_error(context, "No such tokenizer module", -1);
                   117819:     goto exprtest_out;
                   117820:   }
                   117821: 
                   117822:   rc = pModule->xCreate(0, 0, &pTokenizer);
                   117823:   assert( rc==SQLITE_NOMEM || rc==SQLITE_OK );
                   117824:   if( rc==SQLITE_NOMEM ){
                   117825:     sqlite3_result_error_nomem(context);
                   117826:     goto exprtest_out;
                   117827:   }
                   117828:   pTokenizer->pModule = pModule;
                   117829: 
                   117830:   zExpr = (const char *)sqlite3_value_text(argv[1]);
                   117831:   nExpr = sqlite3_value_bytes(argv[1]);
                   117832:   nCol = argc-2;
                   117833:   azCol = (char **)sqlite3_malloc(nCol*sizeof(char *));
                   117834:   if( !azCol ){
                   117835:     sqlite3_result_error_nomem(context);
                   117836:     goto exprtest_out;
                   117837:   }
                   117838:   for(ii=0; ii<nCol; ii++){
                   117839:     azCol[ii] = (char *)sqlite3_value_text(argv[ii+2]);
                   117840:   }
                   117841: 
                   117842:   rc = sqlite3Fts3ExprParse(
                   117843:       pTokenizer, azCol, nCol, nCol, zExpr, nExpr, &pExpr
                   117844:   );
                   117845:   if( rc!=SQLITE_OK && rc!=SQLITE_NOMEM ){
                   117846:     sqlite3_result_error(context, "Error parsing expression", -1);
                   117847:   }else if( rc==SQLITE_NOMEM || !(zBuf = exprToString(pExpr, 0)) ){
                   117848:     sqlite3_result_error_nomem(context);
                   117849:   }else{
                   117850:     sqlite3_result_text(context, zBuf, -1, SQLITE_TRANSIENT);
                   117851:     sqlite3_free(zBuf);
                   117852:   }
                   117853: 
                   117854:   sqlite3Fts3ExprFree(pExpr);
                   117855: 
                   117856: exprtest_out:
                   117857:   if( pModule && pTokenizer ){
                   117858:     rc = pModule->xDestroy(pTokenizer);
                   117859:   }
                   117860:   sqlite3_free(azCol);
                   117861: }
                   117862: 
                   117863: /*
                   117864: ** Register the query expression parser test function fts3_exprtest() 
                   117865: ** with database connection db. 
                   117866: */
                   117867: SQLITE_PRIVATE int sqlite3Fts3ExprInitTestInterface(sqlite3* db){
                   117868:   return sqlite3_create_function(
                   117869:       db, "fts3_exprtest", -1, SQLITE_UTF8, 0, fts3ExprTest, 0, 0
                   117870:   );
                   117871: }
                   117872: 
                   117873: #endif
                   117874: #endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) */
                   117875: 
                   117876: /************** End of fts3_expr.c *******************************************/
                   117877: /************** Begin file fts3_hash.c ***************************************/
                   117878: /*
                   117879: ** 2001 September 22
                   117880: **
                   117881: ** The author disclaims copyright to this source code.  In place of
                   117882: ** a legal notice, here is a blessing:
                   117883: **
                   117884: **    May you do good and not evil.
                   117885: **    May you find forgiveness for yourself and forgive others.
                   117886: **    May you share freely, never taking more than you give.
                   117887: **
                   117888: *************************************************************************
                   117889: ** This is the implementation of generic hash-tables used in SQLite.
                   117890: ** We've modified it slightly to serve as a standalone hash table
                   117891: ** implementation for the full-text indexing module.
                   117892: */
                   117893: 
                   117894: /*
                   117895: ** The code in this file is only compiled if:
                   117896: **
                   117897: **     * The FTS3 module is being built as an extension
                   117898: **       (in which case SQLITE_CORE is not defined), or
                   117899: **
                   117900: **     * The FTS3 module is being built into the core of
                   117901: **       SQLite (in which case SQLITE_ENABLE_FTS3 is defined).
                   117902: */
                   117903: #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3)
                   117904: 
                   117905: 
                   117906: 
                   117907: /*
                   117908: ** Malloc and Free functions
                   117909: */
                   117910: static void *fts3HashMalloc(int n){
                   117911:   void *p = sqlite3_malloc(n);
                   117912:   if( p ){
                   117913:     memset(p, 0, n);
                   117914:   }
                   117915:   return p;
                   117916: }
                   117917: static void fts3HashFree(void *p){
                   117918:   sqlite3_free(p);
                   117919: }
                   117920: 
                   117921: /* Turn bulk memory into a hash table object by initializing the
                   117922: ** fields of the Hash structure.
                   117923: **
                   117924: ** "pNew" is a pointer to the hash table that is to be initialized.
                   117925: ** keyClass is one of the constants 
                   117926: ** FTS3_HASH_BINARY or FTS3_HASH_STRING.  The value of keyClass 
                   117927: ** determines what kind of key the hash table will use.  "copyKey" is
                   117928: ** true if the hash table should make its own private copy of keys and
                   117929: ** false if it should just use the supplied pointer.
                   117930: */
                   117931: SQLITE_PRIVATE void sqlite3Fts3HashInit(Fts3Hash *pNew, char keyClass, char copyKey){
                   117932:   assert( pNew!=0 );
                   117933:   assert( keyClass>=FTS3_HASH_STRING && keyClass<=FTS3_HASH_BINARY );
                   117934:   pNew->keyClass = keyClass;
                   117935:   pNew->copyKey = copyKey;
                   117936:   pNew->first = 0;
                   117937:   pNew->count = 0;
                   117938:   pNew->htsize = 0;
                   117939:   pNew->ht = 0;
                   117940: }
                   117941: 
                   117942: /* Remove all entries from a hash table.  Reclaim all memory.
                   117943: ** Call this routine to delete a hash table or to reset a hash table
                   117944: ** to the empty state.
                   117945: */
                   117946: SQLITE_PRIVATE void sqlite3Fts3HashClear(Fts3Hash *pH){
                   117947:   Fts3HashElem *elem;         /* For looping over all elements of the table */
                   117948: 
                   117949:   assert( pH!=0 );
                   117950:   elem = pH->first;
                   117951:   pH->first = 0;
                   117952:   fts3HashFree(pH->ht);
                   117953:   pH->ht = 0;
                   117954:   pH->htsize = 0;
                   117955:   while( elem ){
                   117956:     Fts3HashElem *next_elem = elem->next;
                   117957:     if( pH->copyKey && elem->pKey ){
                   117958:       fts3HashFree(elem->pKey);
                   117959:     }
                   117960:     fts3HashFree(elem);
                   117961:     elem = next_elem;
                   117962:   }
                   117963:   pH->count = 0;
                   117964: }
                   117965: 
                   117966: /*
                   117967: ** Hash and comparison functions when the mode is FTS3_HASH_STRING
                   117968: */
                   117969: static int fts3StrHash(const void *pKey, int nKey){
                   117970:   const char *z = (const char *)pKey;
                   117971:   int h = 0;
                   117972:   if( nKey<=0 ) nKey = (int) strlen(z);
                   117973:   while( nKey > 0  ){
                   117974:     h = (h<<3) ^ h ^ *z++;
                   117975:     nKey--;
                   117976:   }
                   117977:   return h & 0x7fffffff;
                   117978: }
                   117979: static int fts3StrCompare(const void *pKey1, int n1, const void *pKey2, int n2){
                   117980:   if( n1!=n2 ) return 1;
                   117981:   return strncmp((const char*)pKey1,(const char*)pKey2,n1);
                   117982: }
                   117983: 
                   117984: /*
                   117985: ** Hash and comparison functions when the mode is FTS3_HASH_BINARY
                   117986: */
                   117987: static int fts3BinHash(const void *pKey, int nKey){
                   117988:   int h = 0;
                   117989:   const char *z = (const char *)pKey;
                   117990:   while( nKey-- > 0 ){
                   117991:     h = (h<<3) ^ h ^ *(z++);
                   117992:   }
                   117993:   return h & 0x7fffffff;
                   117994: }
                   117995: static int fts3BinCompare(const void *pKey1, int n1, const void *pKey2, int n2){
                   117996:   if( n1!=n2 ) return 1;
                   117997:   return memcmp(pKey1,pKey2,n1);
                   117998: }
                   117999: 
                   118000: /*
                   118001: ** Return a pointer to the appropriate hash function given the key class.
                   118002: **
                   118003: ** The C syntax in this function definition may be unfamilar to some 
                   118004: ** programmers, so we provide the following additional explanation:
                   118005: **
                   118006: ** The name of the function is "ftsHashFunction".  The function takes a
                   118007: ** single parameter "keyClass".  The return value of ftsHashFunction()
                   118008: ** is a pointer to another function.  Specifically, the return value
                   118009: ** of ftsHashFunction() is a pointer to a function that takes two parameters
                   118010: ** with types "const void*" and "int" and returns an "int".
                   118011: */
                   118012: static int (*ftsHashFunction(int keyClass))(const void*,int){
                   118013:   if( keyClass==FTS3_HASH_STRING ){
                   118014:     return &fts3StrHash;
                   118015:   }else{
                   118016:     assert( keyClass==FTS3_HASH_BINARY );
                   118017:     return &fts3BinHash;
                   118018:   }
                   118019: }
                   118020: 
                   118021: /*
                   118022: ** Return a pointer to the appropriate hash function given the key class.
                   118023: **
                   118024: ** For help in interpreted the obscure C code in the function definition,
                   118025: ** see the header comment on the previous function.
                   118026: */
                   118027: static int (*ftsCompareFunction(int keyClass))(const void*,int,const void*,int){
                   118028:   if( keyClass==FTS3_HASH_STRING ){
                   118029:     return &fts3StrCompare;
                   118030:   }else{
                   118031:     assert( keyClass==FTS3_HASH_BINARY );
                   118032:     return &fts3BinCompare;
                   118033:   }
                   118034: }
                   118035: 
                   118036: /* Link an element into the hash table
                   118037: */
                   118038: static void fts3HashInsertElement(
                   118039:   Fts3Hash *pH,            /* The complete hash table */
                   118040:   struct _fts3ht *pEntry,  /* The entry into which pNew is inserted */
                   118041:   Fts3HashElem *pNew       /* The element to be inserted */
                   118042: ){
                   118043:   Fts3HashElem *pHead;     /* First element already in pEntry */
                   118044:   pHead = pEntry->chain;
                   118045:   if( pHead ){
                   118046:     pNew->next = pHead;
                   118047:     pNew->prev = pHead->prev;
                   118048:     if( pHead->prev ){ pHead->prev->next = pNew; }
                   118049:     else             { pH->first = pNew; }
                   118050:     pHead->prev = pNew;
                   118051:   }else{
                   118052:     pNew->next = pH->first;
                   118053:     if( pH->first ){ pH->first->prev = pNew; }
                   118054:     pNew->prev = 0;
                   118055:     pH->first = pNew;
                   118056:   }
                   118057:   pEntry->count++;
                   118058:   pEntry->chain = pNew;
                   118059: }
                   118060: 
                   118061: 
                   118062: /* Resize the hash table so that it cantains "new_size" buckets.
                   118063: ** "new_size" must be a power of 2.  The hash table might fail 
                   118064: ** to resize if sqliteMalloc() fails.
                   118065: **
                   118066: ** Return non-zero if a memory allocation error occurs.
                   118067: */
                   118068: static int fts3Rehash(Fts3Hash *pH, int new_size){
                   118069:   struct _fts3ht *new_ht;          /* The new hash table */
                   118070:   Fts3HashElem *elem, *next_elem;  /* For looping over existing elements */
                   118071:   int (*xHash)(const void*,int);   /* The hash function */
                   118072: 
                   118073:   assert( (new_size & (new_size-1))==0 );
                   118074:   new_ht = (struct _fts3ht *)fts3HashMalloc( new_size*sizeof(struct _fts3ht) );
                   118075:   if( new_ht==0 ) return 1;
                   118076:   fts3HashFree(pH->ht);
                   118077:   pH->ht = new_ht;
                   118078:   pH->htsize = new_size;
                   118079:   xHash = ftsHashFunction(pH->keyClass);
                   118080:   for(elem=pH->first, pH->first=0; elem; elem = next_elem){
                   118081:     int h = (*xHash)(elem->pKey, elem->nKey) & (new_size-1);
                   118082:     next_elem = elem->next;
                   118083:     fts3HashInsertElement(pH, &new_ht[h], elem);
                   118084:   }
                   118085:   return 0;
                   118086: }
                   118087: 
                   118088: /* This function (for internal use only) locates an element in an
                   118089: ** hash table that matches the given key.  The hash for this key has
                   118090: ** already been computed and is passed as the 4th parameter.
                   118091: */
                   118092: static Fts3HashElem *fts3FindElementByHash(
                   118093:   const Fts3Hash *pH, /* The pH to be searched */
                   118094:   const void *pKey,   /* The key we are searching for */
                   118095:   int nKey,
                   118096:   int h               /* The hash for this key. */
                   118097: ){
                   118098:   Fts3HashElem *elem;            /* Used to loop thru the element list */
                   118099:   int count;                     /* Number of elements left to test */
                   118100:   int (*xCompare)(const void*,int,const void*,int);  /* comparison function */
                   118101: 
                   118102:   if( pH->ht ){
                   118103:     struct _fts3ht *pEntry = &pH->ht[h];
                   118104:     elem = pEntry->chain;
                   118105:     count = pEntry->count;
                   118106:     xCompare = ftsCompareFunction(pH->keyClass);
                   118107:     while( count-- && elem ){
                   118108:       if( (*xCompare)(elem->pKey,elem->nKey,pKey,nKey)==0 ){ 
                   118109:         return elem;
                   118110:       }
                   118111:       elem = elem->next;
                   118112:     }
                   118113:   }
                   118114:   return 0;
                   118115: }
                   118116: 
                   118117: /* Remove a single entry from the hash table given a pointer to that
                   118118: ** element and a hash on the element's key.
                   118119: */
                   118120: static void fts3RemoveElementByHash(
                   118121:   Fts3Hash *pH,         /* The pH containing "elem" */
                   118122:   Fts3HashElem* elem,   /* The element to be removed from the pH */
                   118123:   int h                 /* Hash value for the element */
                   118124: ){
                   118125:   struct _fts3ht *pEntry;
                   118126:   if( elem->prev ){
                   118127:     elem->prev->next = elem->next; 
                   118128:   }else{
                   118129:     pH->first = elem->next;
                   118130:   }
                   118131:   if( elem->next ){
                   118132:     elem->next->prev = elem->prev;
                   118133:   }
                   118134:   pEntry = &pH->ht[h];
                   118135:   if( pEntry->chain==elem ){
                   118136:     pEntry->chain = elem->next;
                   118137:   }
                   118138:   pEntry->count--;
                   118139:   if( pEntry->count<=0 ){
                   118140:     pEntry->chain = 0;
                   118141:   }
                   118142:   if( pH->copyKey && elem->pKey ){
                   118143:     fts3HashFree(elem->pKey);
                   118144:   }
                   118145:   fts3HashFree( elem );
                   118146:   pH->count--;
                   118147:   if( pH->count<=0 ){
                   118148:     assert( pH->first==0 );
                   118149:     assert( pH->count==0 );
                   118150:     fts3HashClear(pH);
                   118151:   }
                   118152: }
                   118153: 
                   118154: SQLITE_PRIVATE Fts3HashElem *sqlite3Fts3HashFindElem(
                   118155:   const Fts3Hash *pH, 
                   118156:   const void *pKey, 
                   118157:   int nKey
                   118158: ){
                   118159:   int h;                          /* A hash on key */
                   118160:   int (*xHash)(const void*,int);  /* The hash function */
                   118161: 
                   118162:   if( pH==0 || pH->ht==0 ) return 0;
                   118163:   xHash = ftsHashFunction(pH->keyClass);
                   118164:   assert( xHash!=0 );
                   118165:   h = (*xHash)(pKey,nKey);
                   118166:   assert( (pH->htsize & (pH->htsize-1))==0 );
                   118167:   return fts3FindElementByHash(pH,pKey,nKey, h & (pH->htsize-1));
                   118168: }
                   118169: 
                   118170: /* 
                   118171: ** Attempt to locate an element of the hash table pH with a key
                   118172: ** that matches pKey,nKey.  Return the data for this element if it is
                   118173: ** found, or NULL if there is no match.
                   118174: */
                   118175: SQLITE_PRIVATE void *sqlite3Fts3HashFind(const Fts3Hash *pH, const void *pKey, int nKey){
                   118176:   Fts3HashElem *pElem;            /* The element that matches key (if any) */
                   118177: 
                   118178:   pElem = sqlite3Fts3HashFindElem(pH, pKey, nKey);
                   118179:   return pElem ? pElem->data : 0;
                   118180: }
                   118181: 
                   118182: /* Insert an element into the hash table pH.  The key is pKey,nKey
                   118183: ** and the data is "data".
                   118184: **
                   118185: ** If no element exists with a matching key, then a new
                   118186: ** element is created.  A copy of the key is made if the copyKey
                   118187: ** flag is set.  NULL is returned.
                   118188: **
                   118189: ** If another element already exists with the same key, then the
                   118190: ** new data replaces the old data and the old data is returned.
                   118191: ** The key is not copied in this instance.  If a malloc fails, then
                   118192: ** the new data is returned and the hash table is unchanged.
                   118193: **
                   118194: ** If the "data" parameter to this function is NULL, then the
                   118195: ** element corresponding to "key" is removed from the hash table.
                   118196: */
                   118197: SQLITE_PRIVATE void *sqlite3Fts3HashInsert(
                   118198:   Fts3Hash *pH,        /* The hash table to insert into */
                   118199:   const void *pKey,    /* The key */
                   118200:   int nKey,            /* Number of bytes in the key */
                   118201:   void *data           /* The data */
                   118202: ){
                   118203:   int hraw;                 /* Raw hash value of the key */
                   118204:   int h;                    /* the hash of the key modulo hash table size */
                   118205:   Fts3HashElem *elem;       /* Used to loop thru the element list */
                   118206:   Fts3HashElem *new_elem;   /* New element added to the pH */
                   118207:   int (*xHash)(const void*,int);  /* The hash function */
                   118208: 
                   118209:   assert( pH!=0 );
                   118210:   xHash = ftsHashFunction(pH->keyClass);
                   118211:   assert( xHash!=0 );
                   118212:   hraw = (*xHash)(pKey, nKey);
                   118213:   assert( (pH->htsize & (pH->htsize-1))==0 );
                   118214:   h = hraw & (pH->htsize-1);
                   118215:   elem = fts3FindElementByHash(pH,pKey,nKey,h);
                   118216:   if( elem ){
                   118217:     void *old_data = elem->data;
                   118218:     if( data==0 ){
                   118219:       fts3RemoveElementByHash(pH,elem,h);
                   118220:     }else{
                   118221:       elem->data = data;
                   118222:     }
                   118223:     return old_data;
                   118224:   }
                   118225:   if( data==0 ) return 0;
                   118226:   if( (pH->htsize==0 && fts3Rehash(pH,8))
                   118227:    || (pH->count>=pH->htsize && fts3Rehash(pH, pH->htsize*2))
                   118228:   ){
                   118229:     pH->count = 0;
                   118230:     return data;
                   118231:   }
                   118232:   assert( pH->htsize>0 );
                   118233:   new_elem = (Fts3HashElem*)fts3HashMalloc( sizeof(Fts3HashElem) );
                   118234:   if( new_elem==0 ) return data;
                   118235:   if( pH->copyKey && pKey!=0 ){
                   118236:     new_elem->pKey = fts3HashMalloc( nKey );
                   118237:     if( new_elem->pKey==0 ){
                   118238:       fts3HashFree(new_elem);
                   118239:       return data;
                   118240:     }
                   118241:     memcpy((void*)new_elem->pKey, pKey, nKey);
                   118242:   }else{
                   118243:     new_elem->pKey = (void*)pKey;
                   118244:   }
                   118245:   new_elem->nKey = nKey;
                   118246:   pH->count++;
                   118247:   assert( pH->htsize>0 );
                   118248:   assert( (pH->htsize & (pH->htsize-1))==0 );
                   118249:   h = hraw & (pH->htsize-1);
                   118250:   fts3HashInsertElement(pH, &pH->ht[h], new_elem);
                   118251:   new_elem->data = data;
                   118252:   return 0;
                   118253: }
                   118254: 
                   118255: #endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) */
                   118256: 
                   118257: /************** End of fts3_hash.c *******************************************/
                   118258: /************** Begin file fts3_porter.c *************************************/
                   118259: /*
                   118260: ** 2006 September 30
                   118261: **
                   118262: ** The author disclaims copyright to this source code.  In place of
                   118263: ** a legal notice, here is a blessing:
                   118264: **
                   118265: **    May you do good and not evil.
                   118266: **    May you find forgiveness for yourself and forgive others.
                   118267: **    May you share freely, never taking more than you give.
                   118268: **
                   118269: *************************************************************************
                   118270: ** Implementation of the full-text-search tokenizer that implements
                   118271: ** a Porter stemmer.
                   118272: */
                   118273: 
                   118274: /*
                   118275: ** The code in this file is only compiled if:
                   118276: **
                   118277: **     * The FTS3 module is being built as an extension
                   118278: **       (in which case SQLITE_CORE is not defined), or
                   118279: **
                   118280: **     * The FTS3 module is being built into the core of
                   118281: **       SQLite (in which case SQLITE_ENABLE_FTS3 is defined).
                   118282: */
                   118283: #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3)
                   118284: 
                   118285: 
                   118286: 
                   118287: /*
                   118288: ** Class derived from sqlite3_tokenizer
                   118289: */
                   118290: typedef struct porter_tokenizer {
                   118291:   sqlite3_tokenizer base;      /* Base class */
                   118292: } porter_tokenizer;
                   118293: 
                   118294: /*
                   118295: ** Class derived from sqlit3_tokenizer_cursor
                   118296: */
                   118297: typedef struct porter_tokenizer_cursor {
                   118298:   sqlite3_tokenizer_cursor base;
                   118299:   const char *zInput;          /* input we are tokenizing */
                   118300:   int nInput;                  /* size of the input */
                   118301:   int iOffset;                 /* current position in zInput */
                   118302:   int iToken;                  /* index of next token to be returned */
                   118303:   char *zToken;                /* storage for current token */
                   118304:   int nAllocated;              /* space allocated to zToken buffer */
                   118305: } porter_tokenizer_cursor;
                   118306: 
                   118307: 
                   118308: /*
                   118309: ** Create a new tokenizer instance.
                   118310: */
                   118311: static int porterCreate(
                   118312:   int argc, const char * const *argv,
                   118313:   sqlite3_tokenizer **ppTokenizer
                   118314: ){
                   118315:   porter_tokenizer *t;
                   118316: 
                   118317:   UNUSED_PARAMETER(argc);
                   118318:   UNUSED_PARAMETER(argv);
                   118319: 
                   118320:   t = (porter_tokenizer *) sqlite3_malloc(sizeof(*t));
                   118321:   if( t==NULL ) return SQLITE_NOMEM;
                   118322:   memset(t, 0, sizeof(*t));
                   118323:   *ppTokenizer = &t->base;
                   118324:   return SQLITE_OK;
                   118325: }
                   118326: 
                   118327: /*
                   118328: ** Destroy a tokenizer
                   118329: */
                   118330: static int porterDestroy(sqlite3_tokenizer *pTokenizer){
                   118331:   sqlite3_free(pTokenizer);
                   118332:   return SQLITE_OK;
                   118333: }
                   118334: 
                   118335: /*
                   118336: ** Prepare to begin tokenizing a particular string.  The input
                   118337: ** string to be tokenized is zInput[0..nInput-1].  A cursor
                   118338: ** used to incrementally tokenize this string is returned in 
                   118339: ** *ppCursor.
                   118340: */
                   118341: static int porterOpen(
                   118342:   sqlite3_tokenizer *pTokenizer,         /* The tokenizer */
                   118343:   const char *zInput, int nInput,        /* String to be tokenized */
                   118344:   sqlite3_tokenizer_cursor **ppCursor    /* OUT: Tokenization cursor */
                   118345: ){
                   118346:   porter_tokenizer_cursor *c;
                   118347: 
                   118348:   UNUSED_PARAMETER(pTokenizer);
                   118349: 
                   118350:   c = (porter_tokenizer_cursor *) sqlite3_malloc(sizeof(*c));
                   118351:   if( c==NULL ) return SQLITE_NOMEM;
                   118352: 
                   118353:   c->zInput = zInput;
                   118354:   if( zInput==0 ){
                   118355:     c->nInput = 0;
                   118356:   }else if( nInput<0 ){
                   118357:     c->nInput = (int)strlen(zInput);
                   118358:   }else{
                   118359:     c->nInput = nInput;
                   118360:   }
                   118361:   c->iOffset = 0;                 /* start tokenizing at the beginning */
                   118362:   c->iToken = 0;
                   118363:   c->zToken = NULL;               /* no space allocated, yet. */
                   118364:   c->nAllocated = 0;
                   118365: 
                   118366:   *ppCursor = &c->base;
                   118367:   return SQLITE_OK;
                   118368: }
                   118369: 
                   118370: /*
                   118371: ** Close a tokenization cursor previously opened by a call to
                   118372: ** porterOpen() above.
                   118373: */
                   118374: static int porterClose(sqlite3_tokenizer_cursor *pCursor){
                   118375:   porter_tokenizer_cursor *c = (porter_tokenizer_cursor *) pCursor;
                   118376:   sqlite3_free(c->zToken);
                   118377:   sqlite3_free(c);
                   118378:   return SQLITE_OK;
                   118379: }
                   118380: /*
                   118381: ** Vowel or consonant
                   118382: */
                   118383: static const char cType[] = {
                   118384:    0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0,
                   118385:    1, 1, 1, 2, 1
                   118386: };
                   118387: 
                   118388: /*
                   118389: ** isConsonant() and isVowel() determine if their first character in
                   118390: ** the string they point to is a consonant or a vowel, according
                   118391: ** to Porter ruls.  
                   118392: **
                   118393: ** A consonate is any letter other than 'a', 'e', 'i', 'o', or 'u'.
                   118394: ** 'Y' is a consonant unless it follows another consonant,
                   118395: ** in which case it is a vowel.
                   118396: **
                   118397: ** In these routine, the letters are in reverse order.  So the 'y' rule
                   118398: ** is that 'y' is a consonant unless it is followed by another
                   118399: ** consonent.
                   118400: */
                   118401: static int isVowel(const char*);
                   118402: static int isConsonant(const char *z){
                   118403:   int j;
                   118404:   char x = *z;
                   118405:   if( x==0 ) return 0;
                   118406:   assert( x>='a' && x<='z' );
                   118407:   j = cType[x-'a'];
                   118408:   if( j<2 ) return j;
                   118409:   return z[1]==0 || isVowel(z + 1);
                   118410: }
                   118411: static int isVowel(const char *z){
                   118412:   int j;
                   118413:   char x = *z;
                   118414:   if( x==0 ) return 0;
                   118415:   assert( x>='a' && x<='z' );
                   118416:   j = cType[x-'a'];
                   118417:   if( j<2 ) return 1-j;
                   118418:   return isConsonant(z + 1);
                   118419: }
                   118420: 
                   118421: /*
                   118422: ** Let any sequence of one or more vowels be represented by V and let
                   118423: ** C be sequence of one or more consonants.  Then every word can be
                   118424: ** represented as:
                   118425: **
                   118426: **           [C] (VC){m} [V]
                   118427: **
                   118428: ** In prose:  A word is an optional consonant followed by zero or
                   118429: ** vowel-consonant pairs followed by an optional vowel.  "m" is the
                   118430: ** number of vowel consonant pairs.  This routine computes the value
                   118431: ** of m for the first i bytes of a word.
                   118432: **
                   118433: ** Return true if the m-value for z is 1 or more.  In other words,
                   118434: ** return true if z contains at least one vowel that is followed
                   118435: ** by a consonant.
                   118436: **
                   118437: ** In this routine z[] is in reverse order.  So we are really looking
                   118438: ** for an instance of of a consonant followed by a vowel.
                   118439: */
                   118440: static int m_gt_0(const char *z){
                   118441:   while( isVowel(z) ){ z++; }
                   118442:   if( *z==0 ) return 0;
                   118443:   while( isConsonant(z) ){ z++; }
                   118444:   return *z!=0;
                   118445: }
                   118446: 
                   118447: /* Like mgt0 above except we are looking for a value of m which is
                   118448: ** exactly 1
                   118449: */
                   118450: static int m_eq_1(const char *z){
                   118451:   while( isVowel(z) ){ z++; }
                   118452:   if( *z==0 ) return 0;
                   118453:   while( isConsonant(z) ){ z++; }
                   118454:   if( *z==0 ) return 0;
                   118455:   while( isVowel(z) ){ z++; }
                   118456:   if( *z==0 ) return 1;
                   118457:   while( isConsonant(z) ){ z++; }
                   118458:   return *z==0;
                   118459: }
                   118460: 
                   118461: /* Like mgt0 above except we are looking for a value of m>1 instead
                   118462: ** or m>0
                   118463: */
                   118464: static int m_gt_1(const char *z){
                   118465:   while( isVowel(z) ){ z++; }
                   118466:   if( *z==0 ) return 0;
                   118467:   while( isConsonant(z) ){ z++; }
                   118468:   if( *z==0 ) return 0;
                   118469:   while( isVowel(z) ){ z++; }
                   118470:   if( *z==0 ) return 0;
                   118471:   while( isConsonant(z) ){ z++; }
                   118472:   return *z!=0;
                   118473: }
                   118474: 
                   118475: /*
                   118476: ** Return TRUE if there is a vowel anywhere within z[0..n-1]
                   118477: */
                   118478: static int hasVowel(const char *z){
                   118479:   while( isConsonant(z) ){ z++; }
                   118480:   return *z!=0;
                   118481: }
                   118482: 
                   118483: /*
                   118484: ** Return TRUE if the word ends in a double consonant.
                   118485: **
                   118486: ** The text is reversed here. So we are really looking at
                   118487: ** the first two characters of z[].
                   118488: */
                   118489: static int doubleConsonant(const char *z){
                   118490:   return isConsonant(z) && z[0]==z[1];
                   118491: }
                   118492: 
                   118493: /*
                   118494: ** Return TRUE if the word ends with three letters which
                   118495: ** are consonant-vowel-consonent and where the final consonant
                   118496: ** is not 'w', 'x', or 'y'.
                   118497: **
                   118498: ** The word is reversed here.  So we are really checking the
                   118499: ** first three letters and the first one cannot be in [wxy].
                   118500: */
                   118501: static int star_oh(const char *z){
                   118502:   return
                   118503:     isConsonant(z) &&
                   118504:     z[0]!='w' && z[0]!='x' && z[0]!='y' &&
                   118505:     isVowel(z+1) &&
                   118506:     isConsonant(z+2);
                   118507: }
                   118508: 
                   118509: /*
                   118510: ** If the word ends with zFrom and xCond() is true for the stem
1.1.1.3 ! misho    118511: ** of the word that preceds the zFrom ending, then change the 
1.1       misho    118512: ** ending to zTo.
                   118513: **
                   118514: ** The input word *pz and zFrom are both in reverse order.  zTo
                   118515: ** is in normal order. 
                   118516: **
                   118517: ** Return TRUE if zFrom matches.  Return FALSE if zFrom does not
                   118518: ** match.  Not that TRUE is returned even if xCond() fails and
                   118519: ** no substitution occurs.
                   118520: */
                   118521: static int stem(
                   118522:   char **pz,             /* The word being stemmed (Reversed) */
                   118523:   const char *zFrom,     /* If the ending matches this... (Reversed) */
                   118524:   const char *zTo,       /* ... change the ending to this (not reversed) */
                   118525:   int (*xCond)(const char*)   /* Condition that must be true */
                   118526: ){
                   118527:   char *z = *pz;
                   118528:   while( *zFrom && *zFrom==*z ){ z++; zFrom++; }
                   118529:   if( *zFrom!=0 ) return 0;
                   118530:   if( xCond && !xCond(z) ) return 1;
                   118531:   while( *zTo ){
                   118532:     *(--z) = *(zTo++);
                   118533:   }
                   118534:   *pz = z;
                   118535:   return 1;
                   118536: }
                   118537: 
                   118538: /*
                   118539: ** This is the fallback stemmer used when the porter stemmer is
                   118540: ** inappropriate.  The input word is copied into the output with
                   118541: ** US-ASCII case folding.  If the input word is too long (more
                   118542: ** than 20 bytes if it contains no digits or more than 6 bytes if
                   118543: ** it contains digits) then word is truncated to 20 or 6 bytes
                   118544: ** by taking 10 or 3 bytes from the beginning and end.
                   118545: */
                   118546: static void copy_stemmer(const char *zIn, int nIn, char *zOut, int *pnOut){
                   118547:   int i, mx, j;
                   118548:   int hasDigit = 0;
                   118549:   for(i=0; i<nIn; i++){
                   118550:     char c = zIn[i];
                   118551:     if( c>='A' && c<='Z' ){
                   118552:       zOut[i] = c - 'A' + 'a';
                   118553:     }else{
                   118554:       if( c>='0' && c<='9' ) hasDigit = 1;
                   118555:       zOut[i] = c;
                   118556:     }
                   118557:   }
                   118558:   mx = hasDigit ? 3 : 10;
                   118559:   if( nIn>mx*2 ){
                   118560:     for(j=mx, i=nIn-mx; i<nIn; i++, j++){
                   118561:       zOut[j] = zOut[i];
                   118562:     }
                   118563:     i = j;
                   118564:   }
                   118565:   zOut[i] = 0;
                   118566:   *pnOut = i;
                   118567: }
                   118568: 
                   118569: 
                   118570: /*
                   118571: ** Stem the input word zIn[0..nIn-1].  Store the output in zOut.
                   118572: ** zOut is at least big enough to hold nIn bytes.  Write the actual
                   118573: ** size of the output word (exclusive of the '\0' terminator) into *pnOut.
                   118574: **
                   118575: ** Any upper-case characters in the US-ASCII character set ([A-Z])
                   118576: ** are converted to lower case.  Upper-case UTF characters are
                   118577: ** unchanged.
                   118578: **
                   118579: ** Words that are longer than about 20 bytes are stemmed by retaining
                   118580: ** a few bytes from the beginning and the end of the word.  If the
                   118581: ** word contains digits, 3 bytes are taken from the beginning and
                   118582: ** 3 bytes from the end.  For long words without digits, 10 bytes
                   118583: ** are taken from each end.  US-ASCII case folding still applies.
                   118584: ** 
                   118585: ** If the input word contains not digits but does characters not 
                   118586: ** in [a-zA-Z] then no stemming is attempted and this routine just 
                   118587: ** copies the input into the input into the output with US-ASCII
                   118588: ** case folding.
                   118589: **
                   118590: ** Stemming never increases the length of the word.  So there is
                   118591: ** no chance of overflowing the zOut buffer.
                   118592: */
                   118593: static void porter_stemmer(const char *zIn, int nIn, char *zOut, int *pnOut){
                   118594:   int i, j;
                   118595:   char zReverse[28];
                   118596:   char *z, *z2;
                   118597:   if( nIn<3 || nIn>=(int)sizeof(zReverse)-7 ){
                   118598:     /* The word is too big or too small for the porter stemmer.
                   118599:     ** Fallback to the copy stemmer */
                   118600:     copy_stemmer(zIn, nIn, zOut, pnOut);
                   118601:     return;
                   118602:   }
                   118603:   for(i=0, j=sizeof(zReverse)-6; i<nIn; i++, j--){
                   118604:     char c = zIn[i];
                   118605:     if( c>='A' && c<='Z' ){
                   118606:       zReverse[j] = c + 'a' - 'A';
                   118607:     }else if( c>='a' && c<='z' ){
                   118608:       zReverse[j] = c;
                   118609:     }else{
                   118610:       /* The use of a character not in [a-zA-Z] means that we fallback
                   118611:       ** to the copy stemmer */
                   118612:       copy_stemmer(zIn, nIn, zOut, pnOut);
                   118613:       return;
                   118614:     }
                   118615:   }
                   118616:   memset(&zReverse[sizeof(zReverse)-5], 0, 5);
                   118617:   z = &zReverse[j+1];
                   118618: 
                   118619: 
                   118620:   /* Step 1a */
                   118621:   if( z[0]=='s' ){
                   118622:     if(
                   118623:      !stem(&z, "sess", "ss", 0) &&
                   118624:      !stem(&z, "sei", "i", 0)  &&
                   118625:      !stem(&z, "ss", "ss", 0)
                   118626:     ){
                   118627:       z++;
                   118628:     }
                   118629:   }
                   118630: 
                   118631:   /* Step 1b */  
                   118632:   z2 = z;
                   118633:   if( stem(&z, "dee", "ee", m_gt_0) ){
                   118634:     /* Do nothing.  The work was all in the test */
                   118635:   }else if( 
                   118636:      (stem(&z, "gni", "", hasVowel) || stem(&z, "de", "", hasVowel))
                   118637:       && z!=z2
                   118638:   ){
                   118639:      if( stem(&z, "ta", "ate", 0) ||
                   118640:          stem(&z, "lb", "ble", 0) ||
                   118641:          stem(&z, "zi", "ize", 0) ){
                   118642:        /* Do nothing.  The work was all in the test */
                   118643:      }else if( doubleConsonant(z) && (*z!='l' && *z!='s' && *z!='z') ){
                   118644:        z++;
                   118645:      }else if( m_eq_1(z) && star_oh(z) ){
                   118646:        *(--z) = 'e';
                   118647:      }
                   118648:   }
                   118649: 
                   118650:   /* Step 1c */
                   118651:   if( z[0]=='y' && hasVowel(z+1) ){
                   118652:     z[0] = 'i';
                   118653:   }
                   118654: 
                   118655:   /* Step 2 */
                   118656:   switch( z[1] ){
                   118657:    case 'a':
                   118658:      stem(&z, "lanoita", "ate", m_gt_0) ||
                   118659:      stem(&z, "lanoit", "tion", m_gt_0);
                   118660:      break;
                   118661:    case 'c':
                   118662:      stem(&z, "icne", "ence", m_gt_0) ||
                   118663:      stem(&z, "icna", "ance", m_gt_0);
                   118664:      break;
                   118665:    case 'e':
                   118666:      stem(&z, "rezi", "ize", m_gt_0);
                   118667:      break;
                   118668:    case 'g':
                   118669:      stem(&z, "igol", "log", m_gt_0);
                   118670:      break;
                   118671:    case 'l':
                   118672:      stem(&z, "ilb", "ble", m_gt_0) ||
                   118673:      stem(&z, "illa", "al", m_gt_0) ||
                   118674:      stem(&z, "iltne", "ent", m_gt_0) ||
                   118675:      stem(&z, "ile", "e", m_gt_0) ||
                   118676:      stem(&z, "ilsuo", "ous", m_gt_0);
                   118677:      break;
                   118678:    case 'o':
                   118679:      stem(&z, "noitazi", "ize", m_gt_0) ||
                   118680:      stem(&z, "noita", "ate", m_gt_0) ||
                   118681:      stem(&z, "rota", "ate", m_gt_0);
                   118682:      break;
                   118683:    case 's':
                   118684:      stem(&z, "msila", "al", m_gt_0) ||
                   118685:      stem(&z, "ssenevi", "ive", m_gt_0) ||
                   118686:      stem(&z, "ssenluf", "ful", m_gt_0) ||
                   118687:      stem(&z, "ssensuo", "ous", m_gt_0);
                   118688:      break;
                   118689:    case 't':
                   118690:      stem(&z, "itila", "al", m_gt_0) ||
                   118691:      stem(&z, "itivi", "ive", m_gt_0) ||
                   118692:      stem(&z, "itilib", "ble", m_gt_0);
                   118693:      break;
                   118694:   }
                   118695: 
                   118696:   /* Step 3 */
                   118697:   switch( z[0] ){
                   118698:    case 'e':
                   118699:      stem(&z, "etaci", "ic", m_gt_0) ||
                   118700:      stem(&z, "evita", "", m_gt_0)   ||
                   118701:      stem(&z, "ezila", "al", m_gt_0);
                   118702:      break;
                   118703:    case 'i':
                   118704:      stem(&z, "itici", "ic", m_gt_0);
                   118705:      break;
                   118706:    case 'l':
                   118707:      stem(&z, "laci", "ic", m_gt_0) ||
                   118708:      stem(&z, "luf", "", m_gt_0);
                   118709:      break;
                   118710:    case 's':
                   118711:      stem(&z, "ssen", "", m_gt_0);
                   118712:      break;
                   118713:   }
                   118714: 
                   118715:   /* Step 4 */
                   118716:   switch( z[1] ){
                   118717:    case 'a':
                   118718:      if( z[0]=='l' && m_gt_1(z+2) ){
                   118719:        z += 2;
                   118720:      }
                   118721:      break;
                   118722:    case 'c':
                   118723:      if( z[0]=='e' && z[2]=='n' && (z[3]=='a' || z[3]=='e')  && m_gt_1(z+4)  ){
                   118724:        z += 4;
                   118725:      }
                   118726:      break;
                   118727:    case 'e':
                   118728:      if( z[0]=='r' && m_gt_1(z+2) ){
                   118729:        z += 2;
                   118730:      }
                   118731:      break;
                   118732:    case 'i':
                   118733:      if( z[0]=='c' && m_gt_1(z+2) ){
                   118734:        z += 2;
                   118735:      }
                   118736:      break;
                   118737:    case 'l':
                   118738:      if( z[0]=='e' && z[2]=='b' && (z[3]=='a' || z[3]=='i') && m_gt_1(z+4) ){
                   118739:        z += 4;
                   118740:      }
                   118741:      break;
                   118742:    case 'n':
                   118743:      if( z[0]=='t' ){
                   118744:        if( z[2]=='a' ){
                   118745:          if( m_gt_1(z+3) ){
                   118746:            z += 3;
                   118747:          }
                   118748:        }else if( z[2]=='e' ){
                   118749:          stem(&z, "tneme", "", m_gt_1) ||
                   118750:          stem(&z, "tnem", "", m_gt_1) ||
                   118751:          stem(&z, "tne", "", m_gt_1);
                   118752:        }
                   118753:      }
                   118754:      break;
                   118755:    case 'o':
                   118756:      if( z[0]=='u' ){
                   118757:        if( m_gt_1(z+2) ){
                   118758:          z += 2;
                   118759:        }
                   118760:      }else if( z[3]=='s' || z[3]=='t' ){
                   118761:        stem(&z, "noi", "", m_gt_1);
                   118762:      }
                   118763:      break;
                   118764:    case 's':
                   118765:      if( z[0]=='m' && z[2]=='i' && m_gt_1(z+3) ){
                   118766:        z += 3;
                   118767:      }
                   118768:      break;
                   118769:    case 't':
                   118770:      stem(&z, "eta", "", m_gt_1) ||
                   118771:      stem(&z, "iti", "", m_gt_1);
                   118772:      break;
                   118773:    case 'u':
                   118774:      if( z[0]=='s' && z[2]=='o' && m_gt_1(z+3) ){
                   118775:        z += 3;
                   118776:      }
                   118777:      break;
                   118778:    case 'v':
                   118779:    case 'z':
                   118780:      if( z[0]=='e' && z[2]=='i' && m_gt_1(z+3) ){
                   118781:        z += 3;
                   118782:      }
                   118783:      break;
                   118784:   }
                   118785: 
                   118786:   /* Step 5a */
                   118787:   if( z[0]=='e' ){
                   118788:     if( m_gt_1(z+1) ){
                   118789:       z++;
                   118790:     }else if( m_eq_1(z+1) && !star_oh(z+1) ){
                   118791:       z++;
                   118792:     }
                   118793:   }
                   118794: 
                   118795:   /* Step 5b */
                   118796:   if( m_gt_1(z) && z[0]=='l' && z[1]=='l' ){
                   118797:     z++;
                   118798:   }
                   118799: 
                   118800:   /* z[] is now the stemmed word in reverse order.  Flip it back
                   118801:   ** around into forward order and return.
                   118802:   */
                   118803:   *pnOut = i = (int)strlen(z);
                   118804:   zOut[i] = 0;
                   118805:   while( *z ){
                   118806:     zOut[--i] = *(z++);
                   118807:   }
                   118808: }
                   118809: 
                   118810: /*
                   118811: ** Characters that can be part of a token.  We assume any character
                   118812: ** whose value is greater than 0x80 (any UTF character) can be
                   118813: ** part of a token.  In other words, delimiters all must have
                   118814: ** values of 0x7f or lower.
                   118815: */
                   118816: static const char porterIdChar[] = {
                   118817: /* x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF */
                   118818:     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,  /* 3x */
                   118819:     0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  /* 4x */
                   118820:     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1,  /* 5x */
                   118821:     0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  /* 6x */
                   118822:     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,  /* 7x */
                   118823: };
                   118824: #define isDelim(C) (((ch=C)&0x80)==0 && (ch<0x30 || !porterIdChar[ch-0x30]))
                   118825: 
                   118826: /*
                   118827: ** Extract the next token from a tokenization cursor.  The cursor must
                   118828: ** have been opened by a prior call to porterOpen().
                   118829: */
                   118830: static int porterNext(
                   118831:   sqlite3_tokenizer_cursor *pCursor,  /* Cursor returned by porterOpen */
                   118832:   const char **pzToken,               /* OUT: *pzToken is the token text */
                   118833:   int *pnBytes,                       /* OUT: Number of bytes in token */
                   118834:   int *piStartOffset,                 /* OUT: Starting offset of token */
                   118835:   int *piEndOffset,                   /* OUT: Ending offset of token */
                   118836:   int *piPosition                     /* OUT: Position integer of token */
                   118837: ){
                   118838:   porter_tokenizer_cursor *c = (porter_tokenizer_cursor *) pCursor;
                   118839:   const char *z = c->zInput;
                   118840: 
                   118841:   while( c->iOffset<c->nInput ){
                   118842:     int iStartOffset, ch;
                   118843: 
                   118844:     /* Scan past delimiter characters */
                   118845:     while( c->iOffset<c->nInput && isDelim(z[c->iOffset]) ){
                   118846:       c->iOffset++;
                   118847:     }
                   118848: 
                   118849:     /* Count non-delimiter characters. */
                   118850:     iStartOffset = c->iOffset;
                   118851:     while( c->iOffset<c->nInput && !isDelim(z[c->iOffset]) ){
                   118852:       c->iOffset++;
                   118853:     }
                   118854: 
                   118855:     if( c->iOffset>iStartOffset ){
                   118856:       int n = c->iOffset-iStartOffset;
                   118857:       if( n>c->nAllocated ){
                   118858:         char *pNew;
                   118859:         c->nAllocated = n+20;
                   118860:         pNew = sqlite3_realloc(c->zToken, c->nAllocated);
                   118861:         if( !pNew ) return SQLITE_NOMEM;
                   118862:         c->zToken = pNew;
                   118863:       }
                   118864:       porter_stemmer(&z[iStartOffset], n, c->zToken, pnBytes);
                   118865:       *pzToken = c->zToken;
                   118866:       *piStartOffset = iStartOffset;
                   118867:       *piEndOffset = c->iOffset;
                   118868:       *piPosition = c->iToken++;
                   118869:       return SQLITE_OK;
                   118870:     }
                   118871:   }
                   118872:   return SQLITE_DONE;
                   118873: }
                   118874: 
                   118875: /*
                   118876: ** The set of routines that implement the porter-stemmer tokenizer
                   118877: */
                   118878: static const sqlite3_tokenizer_module porterTokenizerModule = {
                   118879:   0,
                   118880:   porterCreate,
                   118881:   porterDestroy,
                   118882:   porterOpen,
                   118883:   porterClose,
                   118884:   porterNext,
                   118885: };
                   118886: 
                   118887: /*
                   118888: ** Allocate a new porter tokenizer.  Return a pointer to the new
                   118889: ** tokenizer in *ppModule
                   118890: */
                   118891: SQLITE_PRIVATE void sqlite3Fts3PorterTokenizerModule(
                   118892:   sqlite3_tokenizer_module const**ppModule
                   118893: ){
                   118894:   *ppModule = &porterTokenizerModule;
                   118895: }
                   118896: 
                   118897: #endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) */
                   118898: 
                   118899: /************** End of fts3_porter.c *****************************************/
                   118900: /************** Begin file fts3_tokenizer.c **********************************/
                   118901: /*
                   118902: ** 2007 June 22
                   118903: **
                   118904: ** The author disclaims copyright to this source code.  In place of
                   118905: ** a legal notice, here is a blessing:
                   118906: **
                   118907: **    May you do good and not evil.
                   118908: **    May you find forgiveness for yourself and forgive others.
                   118909: **    May you share freely, never taking more than you give.
                   118910: **
                   118911: ******************************************************************************
                   118912: **
                   118913: ** This is part of an SQLite module implementing full-text search.
                   118914: ** This particular file implements the generic tokenizer interface.
                   118915: */
                   118916: 
                   118917: /*
                   118918: ** The code in this file is only compiled if:
                   118919: **
                   118920: **     * The FTS3 module is being built as an extension
                   118921: **       (in which case SQLITE_CORE is not defined), or
                   118922: **
                   118923: **     * The FTS3 module is being built into the core of
                   118924: **       SQLite (in which case SQLITE_ENABLE_FTS3 is defined).
                   118925: */
                   118926: #ifndef SQLITE_CORE
                   118927:   SQLITE_EXTENSION_INIT1
                   118928: #endif
                   118929: 
                   118930: #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3)
                   118931: 
                   118932: 
                   118933: /*
                   118934: ** Implementation of the SQL scalar function for accessing the underlying 
                   118935: ** hash table. This function may be called as follows:
                   118936: **
                   118937: **   SELECT <function-name>(<key-name>);
                   118938: **   SELECT <function-name>(<key-name>, <pointer>);
                   118939: **
                   118940: ** where <function-name> is the name passed as the second argument
                   118941: ** to the sqlite3Fts3InitHashTable() function (e.g. 'fts3_tokenizer').
                   118942: **
                   118943: ** If the <pointer> argument is specified, it must be a blob value
                   118944: ** containing a pointer to be stored as the hash data corresponding
                   118945: ** to the string <key-name>. If <pointer> is not specified, then
                   118946: ** the string <key-name> must already exist in the has table. Otherwise,
                   118947: ** an error is returned.
                   118948: **
                   118949: ** Whether or not the <pointer> argument is specified, the value returned
                   118950: ** is a blob containing the pointer stored as the hash data corresponding
                   118951: ** to string <key-name> (after the hash-table is updated, if applicable).
                   118952: */
                   118953: static void scalarFunc(
                   118954:   sqlite3_context *context,
                   118955:   int argc,
                   118956:   sqlite3_value **argv
                   118957: ){
                   118958:   Fts3Hash *pHash;
                   118959:   void *pPtr = 0;
                   118960:   const unsigned char *zName;
                   118961:   int nName;
                   118962: 
                   118963:   assert( argc==1 || argc==2 );
                   118964: 
                   118965:   pHash = (Fts3Hash *)sqlite3_user_data(context);
                   118966: 
                   118967:   zName = sqlite3_value_text(argv[0]);
                   118968:   nName = sqlite3_value_bytes(argv[0])+1;
                   118969: 
                   118970:   if( argc==2 ){
                   118971:     void *pOld;
                   118972:     int n = sqlite3_value_bytes(argv[1]);
                   118973:     if( n!=sizeof(pPtr) ){
                   118974:       sqlite3_result_error(context, "argument type mismatch", -1);
                   118975:       return;
                   118976:     }
                   118977:     pPtr = *(void **)sqlite3_value_blob(argv[1]);
                   118978:     pOld = sqlite3Fts3HashInsert(pHash, (void *)zName, nName, pPtr);
                   118979:     if( pOld==pPtr ){
                   118980:       sqlite3_result_error(context, "out of memory", -1);
                   118981:       return;
                   118982:     }
                   118983:   }else{
                   118984:     pPtr = sqlite3Fts3HashFind(pHash, zName, nName);
                   118985:     if( !pPtr ){
                   118986:       char *zErr = sqlite3_mprintf("unknown tokenizer: %s", zName);
                   118987:       sqlite3_result_error(context, zErr, -1);
                   118988:       sqlite3_free(zErr);
                   118989:       return;
                   118990:     }
                   118991:   }
                   118992: 
                   118993:   sqlite3_result_blob(context, (void *)&pPtr, sizeof(pPtr), SQLITE_TRANSIENT);
                   118994: }
                   118995: 
                   118996: SQLITE_PRIVATE int sqlite3Fts3IsIdChar(char c){
                   118997:   static const char isFtsIdChar[] = {
                   118998:       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  /* 0x */
                   118999:       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  /* 1x */
                   119000:       0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  /* 2x */
                   119001:       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,  /* 3x */
                   119002:       0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  /* 4x */
                   119003:       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1,  /* 5x */
                   119004:       0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  /* 6x */
                   119005:       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,  /* 7x */
                   119006:   };
                   119007:   return (c&0x80 || isFtsIdChar[(int)(c)]);
                   119008: }
                   119009: 
                   119010: SQLITE_PRIVATE const char *sqlite3Fts3NextToken(const char *zStr, int *pn){
                   119011:   const char *z1;
                   119012:   const char *z2 = 0;
                   119013: 
                   119014:   /* Find the start of the next token. */
                   119015:   z1 = zStr;
                   119016:   while( z2==0 ){
                   119017:     char c = *z1;
                   119018:     switch( c ){
                   119019:       case '\0': return 0;        /* No more tokens here */
                   119020:       case '\'':
                   119021:       case '"':
                   119022:       case '`': {
                   119023:         z2 = z1;
                   119024:         while( *++z2 && (*z2!=c || *++z2==c) );
                   119025:         break;
                   119026:       }
                   119027:       case '[':
                   119028:         z2 = &z1[1];
                   119029:         while( *z2 && z2[0]!=']' ) z2++;
                   119030:         if( *z2 ) z2++;
                   119031:         break;
                   119032: 
                   119033:       default:
                   119034:         if( sqlite3Fts3IsIdChar(*z1) ){
                   119035:           z2 = &z1[1];
                   119036:           while( sqlite3Fts3IsIdChar(*z2) ) z2++;
                   119037:         }else{
                   119038:           z1++;
                   119039:         }
                   119040:     }
                   119041:   }
                   119042: 
                   119043:   *pn = (int)(z2-z1);
                   119044:   return z1;
                   119045: }
                   119046: 
                   119047: SQLITE_PRIVATE int sqlite3Fts3InitTokenizer(
                   119048:   Fts3Hash *pHash,                /* Tokenizer hash table */
                   119049:   const char *zArg,               /* Tokenizer name */
                   119050:   sqlite3_tokenizer **ppTok,      /* OUT: Tokenizer (if applicable) */
                   119051:   char **pzErr                    /* OUT: Set to malloced error message */
                   119052: ){
                   119053:   int rc;
                   119054:   char *z = (char *)zArg;
                   119055:   int n = 0;
                   119056:   char *zCopy;
                   119057:   char *zEnd;                     /* Pointer to nul-term of zCopy */
                   119058:   sqlite3_tokenizer_module *m;
                   119059: 
                   119060:   zCopy = sqlite3_mprintf("%s", zArg);
                   119061:   if( !zCopy ) return SQLITE_NOMEM;
                   119062:   zEnd = &zCopy[strlen(zCopy)];
                   119063: 
                   119064:   z = (char *)sqlite3Fts3NextToken(zCopy, &n);
                   119065:   z[n] = '\0';
                   119066:   sqlite3Fts3Dequote(z);
                   119067: 
                   119068:   m = (sqlite3_tokenizer_module *)sqlite3Fts3HashFind(pHash,z,(int)strlen(z)+1);
                   119069:   if( !m ){
                   119070:     *pzErr = sqlite3_mprintf("unknown tokenizer: %s", z);
                   119071:     rc = SQLITE_ERROR;
                   119072:   }else{
                   119073:     char const **aArg = 0;
                   119074:     int iArg = 0;
                   119075:     z = &z[n+1];
                   119076:     while( z<zEnd && (NULL!=(z = (char *)sqlite3Fts3NextToken(z, &n))) ){
                   119077:       int nNew = sizeof(char *)*(iArg+1);
                   119078:       char const **aNew = (const char **)sqlite3_realloc((void *)aArg, nNew);
                   119079:       if( !aNew ){
                   119080:         sqlite3_free(zCopy);
                   119081:         sqlite3_free((void *)aArg);
                   119082:         return SQLITE_NOMEM;
                   119083:       }
                   119084:       aArg = aNew;
                   119085:       aArg[iArg++] = z;
                   119086:       z[n] = '\0';
                   119087:       sqlite3Fts3Dequote(z);
                   119088:       z = &z[n+1];
                   119089:     }
                   119090:     rc = m->xCreate(iArg, aArg, ppTok);
                   119091:     assert( rc!=SQLITE_OK || *ppTok );
                   119092:     if( rc!=SQLITE_OK ){
                   119093:       *pzErr = sqlite3_mprintf("unknown tokenizer");
                   119094:     }else{
                   119095:       (*ppTok)->pModule = m; 
                   119096:     }
                   119097:     sqlite3_free((void *)aArg);
                   119098:   }
                   119099: 
                   119100:   sqlite3_free(zCopy);
                   119101:   return rc;
                   119102: }
                   119103: 
                   119104: 
                   119105: #ifdef SQLITE_TEST
                   119106: 
                   119107: 
                   119108: /*
                   119109: ** Implementation of a special SQL scalar function for testing tokenizers 
                   119110: ** designed to be used in concert with the Tcl testing framework. This
                   119111: ** function must be called with two arguments:
                   119112: **
                   119113: **   SELECT <function-name>(<key-name>, <input-string>);
                   119114: **   SELECT <function-name>(<key-name>, <pointer>);
                   119115: **
                   119116: ** where <function-name> is the name passed as the second argument
                   119117: ** to the sqlite3Fts3InitHashTable() function (e.g. 'fts3_tokenizer')
                   119118: ** concatenated with the string '_test' (e.g. 'fts3_tokenizer_test').
                   119119: **
                   119120: ** The return value is a string that may be interpreted as a Tcl
                   119121: ** list. For each token in the <input-string>, three elements are
                   119122: ** added to the returned list. The first is the token position, the 
                   119123: ** second is the token text (folded, stemmed, etc.) and the third is the
                   119124: ** substring of <input-string> associated with the token. For example, 
                   119125: ** using the built-in "simple" tokenizer:
                   119126: **
                   119127: **   SELECT fts_tokenizer_test('simple', 'I don't see how');
                   119128: **
                   119129: ** will return the string:
                   119130: **
                   119131: **   "{0 i I 1 dont don't 2 see see 3 how how}"
                   119132: **   
                   119133: */
                   119134: static void testFunc(
                   119135:   sqlite3_context *context,
                   119136:   int argc,
                   119137:   sqlite3_value **argv
                   119138: ){
                   119139:   Fts3Hash *pHash;
                   119140:   sqlite3_tokenizer_module *p;
                   119141:   sqlite3_tokenizer *pTokenizer = 0;
                   119142:   sqlite3_tokenizer_cursor *pCsr = 0;
                   119143: 
                   119144:   const char *zErr = 0;
                   119145: 
                   119146:   const char *zName;
                   119147:   int nName;
                   119148:   const char *zInput;
                   119149:   int nInput;
                   119150: 
                   119151:   const char *zArg = 0;
                   119152: 
                   119153:   const char *zToken;
                   119154:   int nToken;
                   119155:   int iStart;
                   119156:   int iEnd;
                   119157:   int iPos;
                   119158: 
                   119159:   Tcl_Obj *pRet;
                   119160: 
                   119161:   assert( argc==2 || argc==3 );
                   119162: 
                   119163:   nName = sqlite3_value_bytes(argv[0]);
                   119164:   zName = (const char *)sqlite3_value_text(argv[0]);
                   119165:   nInput = sqlite3_value_bytes(argv[argc-1]);
                   119166:   zInput = (const char *)sqlite3_value_text(argv[argc-1]);
                   119167: 
                   119168:   if( argc==3 ){
                   119169:     zArg = (const char *)sqlite3_value_text(argv[1]);
                   119170:   }
                   119171: 
                   119172:   pHash = (Fts3Hash *)sqlite3_user_data(context);
                   119173:   p = (sqlite3_tokenizer_module *)sqlite3Fts3HashFind(pHash, zName, nName+1);
                   119174: 
                   119175:   if( !p ){
                   119176:     char *zErr = sqlite3_mprintf("unknown tokenizer: %s", zName);
                   119177:     sqlite3_result_error(context, zErr, -1);
                   119178:     sqlite3_free(zErr);
                   119179:     return;
                   119180:   }
                   119181: 
                   119182:   pRet = Tcl_NewObj();
                   119183:   Tcl_IncrRefCount(pRet);
                   119184: 
                   119185:   if( SQLITE_OK!=p->xCreate(zArg ? 1 : 0, &zArg, &pTokenizer) ){
                   119186:     zErr = "error in xCreate()";
                   119187:     goto finish;
                   119188:   }
                   119189:   pTokenizer->pModule = p;
                   119190:   if( SQLITE_OK!=p->xOpen(pTokenizer, zInput, nInput, &pCsr) ){
                   119191:     zErr = "error in xOpen()";
                   119192:     goto finish;
                   119193:   }
                   119194:   pCsr->pTokenizer = pTokenizer;
                   119195: 
                   119196:   while( SQLITE_OK==p->xNext(pCsr, &zToken, &nToken, &iStart, &iEnd, &iPos) ){
                   119197:     Tcl_ListObjAppendElement(0, pRet, Tcl_NewIntObj(iPos));
                   119198:     Tcl_ListObjAppendElement(0, pRet, Tcl_NewStringObj(zToken, nToken));
                   119199:     zToken = &zInput[iStart];
                   119200:     nToken = iEnd-iStart;
                   119201:     Tcl_ListObjAppendElement(0, pRet, Tcl_NewStringObj(zToken, nToken));
                   119202:   }
                   119203: 
                   119204:   if( SQLITE_OK!=p->xClose(pCsr) ){
                   119205:     zErr = "error in xClose()";
                   119206:     goto finish;
                   119207:   }
                   119208:   if( SQLITE_OK!=p->xDestroy(pTokenizer) ){
                   119209:     zErr = "error in xDestroy()";
                   119210:     goto finish;
                   119211:   }
                   119212: 
                   119213: finish:
                   119214:   if( zErr ){
                   119215:     sqlite3_result_error(context, zErr, -1);
                   119216:   }else{
                   119217:     sqlite3_result_text(context, Tcl_GetString(pRet), -1, SQLITE_TRANSIENT);
                   119218:   }
                   119219:   Tcl_DecrRefCount(pRet);
                   119220: }
                   119221: 
                   119222: static
                   119223: int registerTokenizer(
                   119224:   sqlite3 *db, 
                   119225:   char *zName, 
                   119226:   const sqlite3_tokenizer_module *p
                   119227: ){
                   119228:   int rc;
                   119229:   sqlite3_stmt *pStmt;
                   119230:   const char zSql[] = "SELECT fts3_tokenizer(?, ?)";
                   119231: 
                   119232:   rc = sqlite3_prepare_v2(db, zSql, -1, &pStmt, 0);
                   119233:   if( rc!=SQLITE_OK ){
                   119234:     return rc;
                   119235:   }
                   119236: 
                   119237:   sqlite3_bind_text(pStmt, 1, zName, -1, SQLITE_STATIC);
                   119238:   sqlite3_bind_blob(pStmt, 2, &p, sizeof(p), SQLITE_STATIC);
                   119239:   sqlite3_step(pStmt);
                   119240: 
                   119241:   return sqlite3_finalize(pStmt);
                   119242: }
                   119243: 
                   119244: static
                   119245: int queryTokenizer(
                   119246:   sqlite3 *db, 
                   119247:   char *zName,  
                   119248:   const sqlite3_tokenizer_module **pp
                   119249: ){
                   119250:   int rc;
                   119251:   sqlite3_stmt *pStmt;
                   119252:   const char zSql[] = "SELECT fts3_tokenizer(?)";
                   119253: 
                   119254:   *pp = 0;
                   119255:   rc = sqlite3_prepare_v2(db, zSql, -1, &pStmt, 0);
                   119256:   if( rc!=SQLITE_OK ){
                   119257:     return rc;
                   119258:   }
                   119259: 
                   119260:   sqlite3_bind_text(pStmt, 1, zName, -1, SQLITE_STATIC);
                   119261:   if( SQLITE_ROW==sqlite3_step(pStmt) ){
                   119262:     if( sqlite3_column_type(pStmt, 0)==SQLITE_BLOB ){
                   119263:       memcpy((void *)pp, sqlite3_column_blob(pStmt, 0), sizeof(*pp));
                   119264:     }
                   119265:   }
                   119266: 
                   119267:   return sqlite3_finalize(pStmt);
                   119268: }
                   119269: 
                   119270: SQLITE_PRIVATE void sqlite3Fts3SimpleTokenizerModule(sqlite3_tokenizer_module const**ppModule);
                   119271: 
                   119272: /*
                   119273: ** Implementation of the scalar function fts3_tokenizer_internal_test().
                   119274: ** This function is used for testing only, it is not included in the
                   119275: ** build unless SQLITE_TEST is defined.
                   119276: **
                   119277: ** The purpose of this is to test that the fts3_tokenizer() function
                   119278: ** can be used as designed by the C-code in the queryTokenizer and
                   119279: ** registerTokenizer() functions above. These two functions are repeated
                   119280: ** in the README.tokenizer file as an example, so it is important to
                   119281: ** test them.
                   119282: **
                   119283: ** To run the tests, evaluate the fts3_tokenizer_internal_test() scalar
                   119284: ** function with no arguments. An assert() will fail if a problem is
                   119285: ** detected. i.e.:
                   119286: **
                   119287: **     SELECT fts3_tokenizer_internal_test();
                   119288: **
                   119289: */
                   119290: static void intTestFunc(
                   119291:   sqlite3_context *context,
                   119292:   int argc,
                   119293:   sqlite3_value **argv
                   119294: ){
                   119295:   int rc;
                   119296:   const sqlite3_tokenizer_module *p1;
                   119297:   const sqlite3_tokenizer_module *p2;
                   119298:   sqlite3 *db = (sqlite3 *)sqlite3_user_data(context);
                   119299: 
                   119300:   UNUSED_PARAMETER(argc);
                   119301:   UNUSED_PARAMETER(argv);
                   119302: 
                   119303:   /* Test the query function */
                   119304:   sqlite3Fts3SimpleTokenizerModule(&p1);
                   119305:   rc = queryTokenizer(db, "simple", &p2);
                   119306:   assert( rc==SQLITE_OK );
                   119307:   assert( p1==p2 );
                   119308:   rc = queryTokenizer(db, "nosuchtokenizer", &p2);
                   119309:   assert( rc==SQLITE_ERROR );
                   119310:   assert( p2==0 );
                   119311:   assert( 0==strcmp(sqlite3_errmsg(db), "unknown tokenizer: nosuchtokenizer") );
                   119312: 
                   119313:   /* Test the storage function */
                   119314:   rc = registerTokenizer(db, "nosuchtokenizer", p1);
                   119315:   assert( rc==SQLITE_OK );
                   119316:   rc = queryTokenizer(db, "nosuchtokenizer", &p2);
                   119317:   assert( rc==SQLITE_OK );
                   119318:   assert( p2==p1 );
                   119319: 
                   119320:   sqlite3_result_text(context, "ok", -1, SQLITE_STATIC);
                   119321: }
                   119322: 
                   119323: #endif
                   119324: 
                   119325: /*
                   119326: ** Set up SQL objects in database db used to access the contents of
                   119327: ** the hash table pointed to by argument pHash. The hash table must
                   119328: ** been initialised to use string keys, and to take a private copy 
                   119329: ** of the key when a value is inserted. i.e. by a call similar to:
                   119330: **
                   119331: **    sqlite3Fts3HashInit(pHash, FTS3_HASH_STRING, 1);
                   119332: **
                   119333: ** This function adds a scalar function (see header comment above
                   119334: ** scalarFunc() in this file for details) and, if ENABLE_TABLE is
                   119335: ** defined at compilation time, a temporary virtual table (see header 
                   119336: ** comment above struct HashTableVtab) to the database schema. Both 
                   119337: ** provide read/write access to the contents of *pHash.
                   119338: **
                   119339: ** The third argument to this function, zName, is used as the name
                   119340: ** of both the scalar and, if created, the virtual table.
                   119341: */
                   119342: SQLITE_PRIVATE int sqlite3Fts3InitHashTable(
                   119343:   sqlite3 *db, 
                   119344:   Fts3Hash *pHash, 
                   119345:   const char *zName
                   119346: ){
                   119347:   int rc = SQLITE_OK;
                   119348:   void *p = (void *)pHash;
                   119349:   const int any = SQLITE_ANY;
                   119350: 
                   119351: #ifdef SQLITE_TEST
                   119352:   char *zTest = 0;
                   119353:   char *zTest2 = 0;
                   119354:   void *pdb = (void *)db;
                   119355:   zTest = sqlite3_mprintf("%s_test", zName);
                   119356:   zTest2 = sqlite3_mprintf("%s_internal_test", zName);
                   119357:   if( !zTest || !zTest2 ){
                   119358:     rc = SQLITE_NOMEM;
                   119359:   }
                   119360: #endif
                   119361: 
                   119362:   if( SQLITE_OK==rc ){
                   119363:     rc = sqlite3_create_function(db, zName, 1, any, p, scalarFunc, 0, 0);
                   119364:   }
                   119365:   if( SQLITE_OK==rc ){
                   119366:     rc = sqlite3_create_function(db, zName, 2, any, p, scalarFunc, 0, 0);
                   119367:   }
                   119368: #ifdef SQLITE_TEST
                   119369:   if( SQLITE_OK==rc ){
                   119370:     rc = sqlite3_create_function(db, zTest, 2, any, p, testFunc, 0, 0);
                   119371:   }
                   119372:   if( SQLITE_OK==rc ){
                   119373:     rc = sqlite3_create_function(db, zTest, 3, any, p, testFunc, 0, 0);
                   119374:   }
                   119375:   if( SQLITE_OK==rc ){
                   119376:     rc = sqlite3_create_function(db, zTest2, 0, any, pdb, intTestFunc, 0, 0);
                   119377:   }
                   119378: #endif
                   119379: 
                   119380: #ifdef SQLITE_TEST
                   119381:   sqlite3_free(zTest);
                   119382:   sqlite3_free(zTest2);
                   119383: #endif
                   119384: 
                   119385:   return rc;
                   119386: }
                   119387: 
                   119388: #endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) */
                   119389: 
                   119390: /************** End of fts3_tokenizer.c **************************************/
                   119391: /************** Begin file fts3_tokenizer1.c *********************************/
                   119392: /*
                   119393: ** 2006 Oct 10
                   119394: **
                   119395: ** The author disclaims copyright to this source code.  In place of
                   119396: ** a legal notice, here is a blessing:
                   119397: **
                   119398: **    May you do good and not evil.
                   119399: **    May you find forgiveness for yourself and forgive others.
                   119400: **    May you share freely, never taking more than you give.
                   119401: **
                   119402: ******************************************************************************
                   119403: **
                   119404: ** Implementation of the "simple" full-text-search tokenizer.
                   119405: */
                   119406: 
                   119407: /*
                   119408: ** The code in this file is only compiled if:
                   119409: **
                   119410: **     * The FTS3 module is being built as an extension
                   119411: **       (in which case SQLITE_CORE is not defined), or
                   119412: **
                   119413: **     * The FTS3 module is being built into the core of
                   119414: **       SQLite (in which case SQLITE_ENABLE_FTS3 is defined).
                   119415: */
                   119416: #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3)
                   119417: 
                   119418: 
                   119419: 
                   119420: typedef struct simple_tokenizer {
                   119421:   sqlite3_tokenizer base;
                   119422:   char delim[128];             /* flag ASCII delimiters */
                   119423: } simple_tokenizer;
                   119424: 
                   119425: typedef struct simple_tokenizer_cursor {
                   119426:   sqlite3_tokenizer_cursor base;
                   119427:   const char *pInput;          /* input we are tokenizing */
                   119428:   int nBytes;                  /* size of the input */
                   119429:   int iOffset;                 /* current position in pInput */
                   119430:   int iToken;                  /* index of next token to be returned */
                   119431:   char *pToken;                /* storage for current token */
                   119432:   int nTokenAllocated;         /* space allocated to zToken buffer */
                   119433: } simple_tokenizer_cursor;
                   119434: 
                   119435: 
                   119436: static int simpleDelim(simple_tokenizer *t, unsigned char c){
                   119437:   return c<0x80 && t->delim[c];
                   119438: }
                   119439: static int fts3_isalnum(int x){
                   119440:   return (x>='0' && x<='9') || (x>='A' && x<='Z') || (x>='a' && x<='z');
                   119441: }
                   119442: 
                   119443: /*
                   119444: ** Create a new tokenizer instance.
                   119445: */
                   119446: static int simpleCreate(
                   119447:   int argc, const char * const *argv,
                   119448:   sqlite3_tokenizer **ppTokenizer
                   119449: ){
                   119450:   simple_tokenizer *t;
                   119451: 
                   119452:   t = (simple_tokenizer *) sqlite3_malloc(sizeof(*t));
                   119453:   if( t==NULL ) return SQLITE_NOMEM;
                   119454:   memset(t, 0, sizeof(*t));
                   119455: 
                   119456:   /* TODO(shess) Delimiters need to remain the same from run to run,
                   119457:   ** else we need to reindex.  One solution would be a meta-table to
                   119458:   ** track such information in the database, then we'd only want this
                   119459:   ** information on the initial create.
                   119460:   */
                   119461:   if( argc>1 ){
                   119462:     int i, n = (int)strlen(argv[1]);
                   119463:     for(i=0; i<n; i++){
                   119464:       unsigned char ch = argv[1][i];
                   119465:       /* We explicitly don't support UTF-8 delimiters for now. */
                   119466:       if( ch>=0x80 ){
                   119467:         sqlite3_free(t);
                   119468:         return SQLITE_ERROR;
                   119469:       }
                   119470:       t->delim[ch] = 1;
                   119471:     }
                   119472:   } else {
                   119473:     /* Mark non-alphanumeric ASCII characters as delimiters */
                   119474:     int i;
                   119475:     for(i=1; i<0x80; i++){
                   119476:       t->delim[i] = !fts3_isalnum(i) ? -1 : 0;
                   119477:     }
                   119478:   }
                   119479: 
                   119480:   *ppTokenizer = &t->base;
                   119481:   return SQLITE_OK;
                   119482: }
                   119483: 
                   119484: /*
                   119485: ** Destroy a tokenizer
                   119486: */
                   119487: static int simpleDestroy(sqlite3_tokenizer *pTokenizer){
                   119488:   sqlite3_free(pTokenizer);
                   119489:   return SQLITE_OK;
                   119490: }
                   119491: 
                   119492: /*
                   119493: ** Prepare to begin tokenizing a particular string.  The input
                   119494: ** string to be tokenized is pInput[0..nBytes-1].  A cursor
                   119495: ** used to incrementally tokenize this string is returned in 
                   119496: ** *ppCursor.
                   119497: */
                   119498: static int simpleOpen(
                   119499:   sqlite3_tokenizer *pTokenizer,         /* The tokenizer */
                   119500:   const char *pInput, int nBytes,        /* String to be tokenized */
                   119501:   sqlite3_tokenizer_cursor **ppCursor    /* OUT: Tokenization cursor */
                   119502: ){
                   119503:   simple_tokenizer_cursor *c;
                   119504: 
                   119505:   UNUSED_PARAMETER(pTokenizer);
                   119506: 
                   119507:   c = (simple_tokenizer_cursor *) sqlite3_malloc(sizeof(*c));
                   119508:   if( c==NULL ) return SQLITE_NOMEM;
                   119509: 
                   119510:   c->pInput = pInput;
                   119511:   if( pInput==0 ){
                   119512:     c->nBytes = 0;
                   119513:   }else if( nBytes<0 ){
                   119514:     c->nBytes = (int)strlen(pInput);
                   119515:   }else{
                   119516:     c->nBytes = nBytes;
                   119517:   }
                   119518:   c->iOffset = 0;                 /* start tokenizing at the beginning */
                   119519:   c->iToken = 0;
                   119520:   c->pToken = NULL;               /* no space allocated, yet. */
                   119521:   c->nTokenAllocated = 0;
                   119522: 
                   119523:   *ppCursor = &c->base;
                   119524:   return SQLITE_OK;
                   119525: }
                   119526: 
                   119527: /*
                   119528: ** Close a tokenization cursor previously opened by a call to
                   119529: ** simpleOpen() above.
                   119530: */
                   119531: static int simpleClose(sqlite3_tokenizer_cursor *pCursor){
                   119532:   simple_tokenizer_cursor *c = (simple_tokenizer_cursor *) pCursor;
                   119533:   sqlite3_free(c->pToken);
                   119534:   sqlite3_free(c);
                   119535:   return SQLITE_OK;
                   119536: }
                   119537: 
                   119538: /*
                   119539: ** Extract the next token from a tokenization cursor.  The cursor must
                   119540: ** have been opened by a prior call to simpleOpen().
                   119541: */
                   119542: static int simpleNext(
                   119543:   sqlite3_tokenizer_cursor *pCursor,  /* Cursor returned by simpleOpen */
                   119544:   const char **ppToken,               /* OUT: *ppToken is the token text */
                   119545:   int *pnBytes,                       /* OUT: Number of bytes in token */
                   119546:   int *piStartOffset,                 /* OUT: Starting offset of token */
                   119547:   int *piEndOffset,                   /* OUT: Ending offset of token */
                   119548:   int *piPosition                     /* OUT: Position integer of token */
                   119549: ){
                   119550:   simple_tokenizer_cursor *c = (simple_tokenizer_cursor *) pCursor;
                   119551:   simple_tokenizer *t = (simple_tokenizer *) pCursor->pTokenizer;
                   119552:   unsigned char *p = (unsigned char *)c->pInput;
                   119553: 
                   119554:   while( c->iOffset<c->nBytes ){
                   119555:     int iStartOffset;
                   119556: 
                   119557:     /* Scan past delimiter characters */
                   119558:     while( c->iOffset<c->nBytes && simpleDelim(t, p[c->iOffset]) ){
                   119559:       c->iOffset++;
                   119560:     }
                   119561: 
                   119562:     /* Count non-delimiter characters. */
                   119563:     iStartOffset = c->iOffset;
                   119564:     while( c->iOffset<c->nBytes && !simpleDelim(t, p[c->iOffset]) ){
                   119565:       c->iOffset++;
                   119566:     }
                   119567: 
                   119568:     if( c->iOffset>iStartOffset ){
                   119569:       int i, n = c->iOffset-iStartOffset;
                   119570:       if( n>c->nTokenAllocated ){
                   119571:         char *pNew;
                   119572:         c->nTokenAllocated = n+20;
                   119573:         pNew = sqlite3_realloc(c->pToken, c->nTokenAllocated);
                   119574:         if( !pNew ) return SQLITE_NOMEM;
                   119575:         c->pToken = pNew;
                   119576:       }
                   119577:       for(i=0; i<n; i++){
                   119578:         /* TODO(shess) This needs expansion to handle UTF-8
                   119579:         ** case-insensitivity.
                   119580:         */
                   119581:         unsigned char ch = p[iStartOffset+i];
                   119582:         c->pToken[i] = (char)((ch>='A' && ch<='Z') ? ch-'A'+'a' : ch);
                   119583:       }
                   119584:       *ppToken = c->pToken;
                   119585:       *pnBytes = n;
                   119586:       *piStartOffset = iStartOffset;
                   119587:       *piEndOffset = c->iOffset;
                   119588:       *piPosition = c->iToken++;
                   119589: 
                   119590:       return SQLITE_OK;
                   119591:     }
                   119592:   }
                   119593:   return SQLITE_DONE;
                   119594: }
                   119595: 
                   119596: /*
                   119597: ** The set of routines that implement the simple tokenizer
                   119598: */
                   119599: static const sqlite3_tokenizer_module simpleTokenizerModule = {
                   119600:   0,
                   119601:   simpleCreate,
                   119602:   simpleDestroy,
                   119603:   simpleOpen,
                   119604:   simpleClose,
                   119605:   simpleNext,
                   119606: };
                   119607: 
                   119608: /*
                   119609: ** Allocate a new simple tokenizer.  Return a pointer to the new
                   119610: ** tokenizer in *ppModule
                   119611: */
                   119612: SQLITE_PRIVATE void sqlite3Fts3SimpleTokenizerModule(
                   119613:   sqlite3_tokenizer_module const**ppModule
                   119614: ){
                   119615:   *ppModule = &simpleTokenizerModule;
                   119616: }
                   119617: 
                   119618: #endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) */
                   119619: 
                   119620: /************** End of fts3_tokenizer1.c *************************************/
                   119621: /************** Begin file fts3_write.c **************************************/
                   119622: /*
                   119623: ** 2009 Oct 23
                   119624: **
                   119625: ** The author disclaims copyright to this source code.  In place of
                   119626: ** a legal notice, here is a blessing:
                   119627: **
                   119628: **    May you do good and not evil.
                   119629: **    May you find forgiveness for yourself and forgive others.
                   119630: **    May you share freely, never taking more than you give.
                   119631: **
                   119632: ******************************************************************************
                   119633: **
                   119634: ** This file is part of the SQLite FTS3 extension module. Specifically,
                   119635: ** this file contains code to insert, update and delete rows from FTS3
                   119636: ** tables. It also contains code to merge FTS3 b-tree segments. Some
                   119637: ** of the sub-routines used to merge segments are also used by the query 
                   119638: ** code in fts3.c.
                   119639: */
                   119640: 
                   119641: #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3)
                   119642: 
                   119643: 
                   119644: /*
                   119645: ** When full-text index nodes are loaded from disk, the buffer that they
                   119646: ** are loaded into has the following number of bytes of padding at the end 
                   119647: ** of it. i.e. if a full-text index node is 900 bytes in size, then a buffer
                   119648: ** of 920 bytes is allocated for it.
                   119649: **
                   119650: ** This means that if we have a pointer into a buffer containing node data,
                   119651: ** it is always safe to read up to two varints from it without risking an
                   119652: ** overread, even if the node data is corrupted.
                   119653: */
                   119654: #define FTS3_NODE_PADDING (FTS3_VARINT_MAX*2)
                   119655: 
                   119656: /*
                   119657: ** Under certain circumstances, b-tree nodes (doclists) can be loaded into
                   119658: ** memory incrementally instead of all at once. This can be a big performance
                   119659: ** win (reduced IO and CPU) if SQLite stops calling the virtual table xNext()
                   119660: ** method before retrieving all query results (as may happen, for example,
                   119661: ** if a query has a LIMIT clause).
                   119662: **
                   119663: ** Incremental loading is used for b-tree nodes FTS3_NODE_CHUNK_THRESHOLD 
                   119664: ** bytes and larger. Nodes are loaded in chunks of FTS3_NODE_CHUNKSIZE bytes.
                   119665: ** The code is written so that the hard lower-limit for each of these values 
                   119666: ** is 1. Clearly such small values would be inefficient, but can be useful 
                   119667: ** for testing purposes.
                   119668: **
                   119669: ** If this module is built with SQLITE_TEST defined, these constants may
                   119670: ** be overridden at runtime for testing purposes. File fts3_test.c contains
                   119671: ** a Tcl interface to read and write the values.
                   119672: */
                   119673: #ifdef SQLITE_TEST
                   119674: int test_fts3_node_chunksize = (4*1024);
                   119675: int test_fts3_node_chunk_threshold = (4*1024)*4;
                   119676: # define FTS3_NODE_CHUNKSIZE       test_fts3_node_chunksize
                   119677: # define FTS3_NODE_CHUNK_THRESHOLD test_fts3_node_chunk_threshold
                   119678: #else
                   119679: # define FTS3_NODE_CHUNKSIZE (4*1024) 
                   119680: # define FTS3_NODE_CHUNK_THRESHOLD (FTS3_NODE_CHUNKSIZE*4)
                   119681: #endif
                   119682: 
                   119683: typedef struct PendingList PendingList;
                   119684: typedef struct SegmentNode SegmentNode;
                   119685: typedef struct SegmentWriter SegmentWriter;
                   119686: 
                   119687: /*
                   119688: ** An instance of the following data structure is used to build doclists
                   119689: ** incrementally. See function fts3PendingListAppend() for details.
                   119690: */
                   119691: struct PendingList {
                   119692:   int nData;
                   119693:   char *aData;
                   119694:   int nSpace;
                   119695:   sqlite3_int64 iLastDocid;
                   119696:   sqlite3_int64 iLastCol;
                   119697:   sqlite3_int64 iLastPos;
                   119698: };
                   119699: 
                   119700: 
                   119701: /*
                   119702: ** Each cursor has a (possibly empty) linked list of the following objects.
                   119703: */
                   119704: struct Fts3DeferredToken {
                   119705:   Fts3PhraseToken *pToken;        /* Pointer to corresponding expr token */
                   119706:   int iCol;                       /* Column token must occur in */
                   119707:   Fts3DeferredToken *pNext;       /* Next in list of deferred tokens */
                   119708:   PendingList *pList;             /* Doclist is assembled here */
                   119709: };
                   119710: 
                   119711: /*
                   119712: ** An instance of this structure is used to iterate through the terms on
                   119713: ** a contiguous set of segment b-tree leaf nodes. Although the details of
                   119714: ** this structure are only manipulated by code in this file, opaque handles
                   119715: ** of type Fts3SegReader* are also used by code in fts3.c to iterate through
                   119716: ** terms when querying the full-text index. See functions:
                   119717: **
                   119718: **   sqlite3Fts3SegReaderNew()
                   119719: **   sqlite3Fts3SegReaderFree()
                   119720: **   sqlite3Fts3SegReaderIterate()
                   119721: **
                   119722: ** Methods used to manipulate Fts3SegReader structures:
                   119723: **
                   119724: **   fts3SegReaderNext()
                   119725: **   fts3SegReaderFirstDocid()
                   119726: **   fts3SegReaderNextDocid()
                   119727: */
                   119728: struct Fts3SegReader {
                   119729:   int iIdx;                       /* Index within level, or 0x7FFFFFFF for PT */
                   119730: 
                   119731:   sqlite3_int64 iStartBlock;      /* Rowid of first leaf block to traverse */
                   119732:   sqlite3_int64 iLeafEndBlock;    /* Rowid of final leaf block to traverse */
                   119733:   sqlite3_int64 iEndBlock;        /* Rowid of final block in segment (or 0) */
                   119734:   sqlite3_int64 iCurrentBlock;    /* Current leaf block (or 0) */
                   119735: 
                   119736:   char *aNode;                    /* Pointer to node data (or NULL) */
                   119737:   int nNode;                      /* Size of buffer at aNode (or 0) */
                   119738:   int nPopulate;                  /* If >0, bytes of buffer aNode[] loaded */
                   119739:   sqlite3_blob *pBlob;            /* If not NULL, blob handle to read node */
                   119740: 
                   119741:   Fts3HashElem **ppNextElem;
                   119742: 
                   119743:   /* Variables set by fts3SegReaderNext(). These may be read directly
                   119744:   ** by the caller. They are valid from the time SegmentReaderNew() returns
                   119745:   ** until SegmentReaderNext() returns something other than SQLITE_OK
                   119746:   ** (i.e. SQLITE_DONE).
                   119747:   */
                   119748:   int nTerm;                      /* Number of bytes in current term */
                   119749:   char *zTerm;                    /* Pointer to current term */
                   119750:   int nTermAlloc;                 /* Allocated size of zTerm buffer */
                   119751:   char *aDoclist;                 /* Pointer to doclist of current entry */
                   119752:   int nDoclist;                   /* Size of doclist in current entry */
                   119753: 
                   119754:   /* The following variables are used by fts3SegReaderNextDocid() to iterate 
                   119755:   ** through the current doclist (aDoclist/nDoclist).
                   119756:   */
                   119757:   char *pOffsetList;
                   119758:   int nOffsetList;                /* For descending pending seg-readers only */
                   119759:   sqlite3_int64 iDocid;
                   119760: };
                   119761: 
                   119762: #define fts3SegReaderIsPending(p) ((p)->ppNextElem!=0)
                   119763: #define fts3SegReaderIsRootOnly(p) ((p)->aNode==(char *)&(p)[1])
                   119764: 
                   119765: /*
                   119766: ** An instance of this structure is used to create a segment b-tree in the
                   119767: ** database. The internal details of this type are only accessed by the
                   119768: ** following functions:
                   119769: **
                   119770: **   fts3SegWriterAdd()
                   119771: **   fts3SegWriterFlush()
                   119772: **   fts3SegWriterFree()
                   119773: */
                   119774: struct SegmentWriter {
                   119775:   SegmentNode *pTree;             /* Pointer to interior tree structure */
                   119776:   sqlite3_int64 iFirst;           /* First slot in %_segments written */
                   119777:   sqlite3_int64 iFree;            /* Next free slot in %_segments */
                   119778:   char *zTerm;                    /* Pointer to previous term buffer */
                   119779:   int nTerm;                      /* Number of bytes in zTerm */
                   119780:   int nMalloc;                    /* Size of malloc'd buffer at zMalloc */
                   119781:   char *zMalloc;                  /* Malloc'd space (possibly) used for zTerm */
                   119782:   int nSize;                      /* Size of allocation at aData */
                   119783:   int nData;                      /* Bytes of data in aData */
                   119784:   char *aData;                    /* Pointer to block from malloc() */
                   119785: };
                   119786: 
                   119787: /*
                   119788: ** Type SegmentNode is used by the following three functions to create
                   119789: ** the interior part of the segment b+-tree structures (everything except
                   119790: ** the leaf nodes). These functions and type are only ever used by code
                   119791: ** within the fts3SegWriterXXX() family of functions described above.
                   119792: **
                   119793: **   fts3NodeAddTerm()
                   119794: **   fts3NodeWrite()
                   119795: **   fts3NodeFree()
                   119796: **
                   119797: ** When a b+tree is written to the database (either as a result of a merge
                   119798: ** or the pending-terms table being flushed), leaves are written into the 
                   119799: ** database file as soon as they are completely populated. The interior of
                   119800: ** the tree is assembled in memory and written out only once all leaves have
                   119801: ** been populated and stored. This is Ok, as the b+-tree fanout is usually
                   119802: ** very large, meaning that the interior of the tree consumes relatively 
                   119803: ** little memory.
                   119804: */
                   119805: struct SegmentNode {
                   119806:   SegmentNode *pParent;           /* Parent node (or NULL for root node) */
                   119807:   SegmentNode *pRight;            /* Pointer to right-sibling */
                   119808:   SegmentNode *pLeftmost;         /* Pointer to left-most node of this depth */
                   119809:   int nEntry;                     /* Number of terms written to node so far */
                   119810:   char *zTerm;                    /* Pointer to previous term buffer */
                   119811:   int nTerm;                      /* Number of bytes in zTerm */
                   119812:   int nMalloc;                    /* Size of malloc'd buffer at zMalloc */
                   119813:   char *zMalloc;                  /* Malloc'd space (possibly) used for zTerm */
                   119814:   int nData;                      /* Bytes of valid data so far */
                   119815:   char *aData;                    /* Node data */
                   119816: };
                   119817: 
                   119818: /*
                   119819: ** Valid values for the second argument to fts3SqlStmt().
                   119820: */
                   119821: #define SQL_DELETE_CONTENT             0
                   119822: #define SQL_IS_EMPTY                   1
                   119823: #define SQL_DELETE_ALL_CONTENT         2 
                   119824: #define SQL_DELETE_ALL_SEGMENTS        3
                   119825: #define SQL_DELETE_ALL_SEGDIR          4
                   119826: #define SQL_DELETE_ALL_DOCSIZE         5
                   119827: #define SQL_DELETE_ALL_STAT            6
                   119828: #define SQL_SELECT_CONTENT_BY_ROWID    7
                   119829: #define SQL_NEXT_SEGMENT_INDEX         8
                   119830: #define SQL_INSERT_SEGMENTS            9
                   119831: #define SQL_NEXT_SEGMENTS_ID          10
                   119832: #define SQL_INSERT_SEGDIR             11
                   119833: #define SQL_SELECT_LEVEL              12
                   119834: #define SQL_SELECT_LEVEL_RANGE        13
                   119835: #define SQL_SELECT_LEVEL_COUNT        14
                   119836: #define SQL_SELECT_SEGDIR_MAX_LEVEL   15
                   119837: #define SQL_DELETE_SEGDIR_LEVEL       16
                   119838: #define SQL_DELETE_SEGMENTS_RANGE     17
                   119839: #define SQL_CONTENT_INSERT            18
                   119840: #define SQL_DELETE_DOCSIZE            19
                   119841: #define SQL_REPLACE_DOCSIZE           20
                   119842: #define SQL_SELECT_DOCSIZE            21
                   119843: #define SQL_SELECT_DOCTOTAL           22
                   119844: #define SQL_REPLACE_DOCTOTAL          23
                   119845: 
                   119846: #define SQL_SELECT_ALL_PREFIX_LEVEL   24
                   119847: #define SQL_DELETE_ALL_TERMS_SEGDIR   25
                   119848: 
                   119849: #define SQL_DELETE_SEGDIR_RANGE       26
                   119850: 
                   119851: /*
                   119852: ** This function is used to obtain an SQLite prepared statement handle
                   119853: ** for the statement identified by the second argument. If successful,
                   119854: ** *pp is set to the requested statement handle and SQLITE_OK returned.
                   119855: ** Otherwise, an SQLite error code is returned and *pp is set to 0.
                   119856: **
                   119857: ** If argument apVal is not NULL, then it must point to an array with
                   119858: ** at least as many entries as the requested statement has bound 
                   119859: ** parameters. The values are bound to the statements parameters before
                   119860: ** returning.
                   119861: */
                   119862: static int fts3SqlStmt(
                   119863:   Fts3Table *p,                   /* Virtual table handle */
                   119864:   int eStmt,                      /* One of the SQL_XXX constants above */
                   119865:   sqlite3_stmt **pp,              /* OUT: Statement handle */
                   119866:   sqlite3_value **apVal           /* Values to bind to statement */
                   119867: ){
                   119868:   const char *azSql[] = {
                   119869: /* 0  */  "DELETE FROM %Q.'%q_content' WHERE rowid = ?",
                   119870: /* 1  */  "SELECT NOT EXISTS(SELECT docid FROM %Q.'%q_content' WHERE rowid!=?)",
                   119871: /* 2  */  "DELETE FROM %Q.'%q_content'",
                   119872: /* 3  */  "DELETE FROM %Q.'%q_segments'",
                   119873: /* 4  */  "DELETE FROM %Q.'%q_segdir'",
                   119874: /* 5  */  "DELETE FROM %Q.'%q_docsize'",
                   119875: /* 6  */  "DELETE FROM %Q.'%q_stat'",
                   119876: /* 7  */  "SELECT %s FROM %Q.'%q_content' AS x WHERE rowid=?",
                   119877: /* 8  */  "SELECT (SELECT max(idx) FROM %Q.'%q_segdir' WHERE level = ?) + 1",
                   119878: /* 9  */  "INSERT INTO %Q.'%q_segments'(blockid, block) VALUES(?, ?)",
                   119879: /* 10 */  "SELECT coalesce((SELECT max(blockid) FROM %Q.'%q_segments') + 1, 1)",
                   119880: /* 11 */  "INSERT INTO %Q.'%q_segdir' VALUES(?,?,?,?,?,?)",
                   119881: 
                   119882:           /* Return segments in order from oldest to newest.*/ 
                   119883: /* 12 */  "SELECT idx, start_block, leaves_end_block, end_block, root "
                   119884:             "FROM %Q.'%q_segdir' WHERE level = ? ORDER BY idx ASC",
                   119885: /* 13 */  "SELECT idx, start_block, leaves_end_block, end_block, root "
                   119886:             "FROM %Q.'%q_segdir' WHERE level BETWEEN ? AND ?"
                   119887:             "ORDER BY level DESC, idx ASC",
                   119888: 
                   119889: /* 14 */  "SELECT count(*) FROM %Q.'%q_segdir' WHERE level = ?",
                   119890: /* 15 */  "SELECT max(level) FROM %Q.'%q_segdir' WHERE level BETWEEN ? AND ?",
                   119891: 
                   119892: /* 16 */  "DELETE FROM %Q.'%q_segdir' WHERE level = ?",
                   119893: /* 17 */  "DELETE FROM %Q.'%q_segments' WHERE blockid BETWEEN ? AND ?",
                   119894: /* 18 */  "INSERT INTO %Q.'%q_content' VALUES(%s)",
                   119895: /* 19 */  "DELETE FROM %Q.'%q_docsize' WHERE docid = ?",
                   119896: /* 20 */  "REPLACE INTO %Q.'%q_docsize' VALUES(?,?)",
                   119897: /* 21 */  "SELECT size FROM %Q.'%q_docsize' WHERE docid=?",
                   119898: /* 22 */  "SELECT value FROM %Q.'%q_stat' WHERE id=0",
                   119899: /* 23 */  "REPLACE INTO %Q.'%q_stat' VALUES(0,?)",
                   119900: /* 24 */  "",
                   119901: /* 25 */  "",
                   119902: 
                   119903: /* 26 */ "DELETE FROM %Q.'%q_segdir' WHERE level BETWEEN ? AND ?",
                   119904: 
                   119905:   };
                   119906:   int rc = SQLITE_OK;
                   119907:   sqlite3_stmt *pStmt;
                   119908: 
                   119909:   assert( SizeofArray(azSql)==SizeofArray(p->aStmt) );
                   119910:   assert( eStmt<SizeofArray(azSql) && eStmt>=0 );
                   119911:   
                   119912:   pStmt = p->aStmt[eStmt];
                   119913:   if( !pStmt ){
                   119914:     char *zSql;
                   119915:     if( eStmt==SQL_CONTENT_INSERT ){
                   119916:       zSql = sqlite3_mprintf(azSql[eStmt], p->zDb, p->zName, p->zWriteExprlist);
                   119917:     }else if( eStmt==SQL_SELECT_CONTENT_BY_ROWID ){
                   119918:       zSql = sqlite3_mprintf(azSql[eStmt], p->zReadExprlist, p->zDb, p->zName);
                   119919:     }else{
                   119920:       zSql = sqlite3_mprintf(azSql[eStmt], p->zDb, p->zName);
                   119921:     }
                   119922:     if( !zSql ){
                   119923:       rc = SQLITE_NOMEM;
                   119924:     }else{
                   119925:       rc = sqlite3_prepare_v2(p->db, zSql, -1, &pStmt, NULL);
                   119926:       sqlite3_free(zSql);
                   119927:       assert( rc==SQLITE_OK || pStmt==0 );
                   119928:       p->aStmt[eStmt] = pStmt;
                   119929:     }
                   119930:   }
                   119931:   if( apVal ){
                   119932:     int i;
                   119933:     int nParam = sqlite3_bind_parameter_count(pStmt);
                   119934:     for(i=0; rc==SQLITE_OK && i<nParam; i++){
                   119935:       rc = sqlite3_bind_value(pStmt, i+1, apVal[i]);
                   119936:     }
                   119937:   }
                   119938:   *pp = pStmt;
                   119939:   return rc;
                   119940: }
                   119941: 
                   119942: static int fts3SelectDocsize(
                   119943:   Fts3Table *pTab,                /* FTS3 table handle */
                   119944:   int eStmt,                      /* Either SQL_SELECT_DOCSIZE or DOCTOTAL */
                   119945:   sqlite3_int64 iDocid,           /* Docid to bind for SQL_SELECT_DOCSIZE */
                   119946:   sqlite3_stmt **ppStmt           /* OUT: Statement handle */
                   119947: ){
                   119948:   sqlite3_stmt *pStmt = 0;        /* Statement requested from fts3SqlStmt() */
                   119949:   int rc;                         /* Return code */
                   119950: 
                   119951:   assert( eStmt==SQL_SELECT_DOCSIZE || eStmt==SQL_SELECT_DOCTOTAL );
                   119952: 
                   119953:   rc = fts3SqlStmt(pTab, eStmt, &pStmt, 0);
                   119954:   if( rc==SQLITE_OK ){
                   119955:     if( eStmt==SQL_SELECT_DOCSIZE ){
                   119956:       sqlite3_bind_int64(pStmt, 1, iDocid);
                   119957:     }
                   119958:     rc = sqlite3_step(pStmt);
                   119959:     if( rc!=SQLITE_ROW || sqlite3_column_type(pStmt, 0)!=SQLITE_BLOB ){
                   119960:       rc = sqlite3_reset(pStmt);
                   119961:       if( rc==SQLITE_OK ) rc = SQLITE_CORRUPT_VTAB;
                   119962:       pStmt = 0;
                   119963:     }else{
                   119964:       rc = SQLITE_OK;
                   119965:     }
                   119966:   }
                   119967: 
                   119968:   *ppStmt = pStmt;
                   119969:   return rc;
                   119970: }
                   119971: 
                   119972: SQLITE_PRIVATE int sqlite3Fts3SelectDoctotal(
                   119973:   Fts3Table *pTab,                /* Fts3 table handle */
                   119974:   sqlite3_stmt **ppStmt           /* OUT: Statement handle */
                   119975: ){
                   119976:   return fts3SelectDocsize(pTab, SQL_SELECT_DOCTOTAL, 0, ppStmt);
                   119977: }
                   119978: 
                   119979: SQLITE_PRIVATE int sqlite3Fts3SelectDocsize(
                   119980:   Fts3Table *pTab,                /* Fts3 table handle */
                   119981:   sqlite3_int64 iDocid,           /* Docid to read size data for */
                   119982:   sqlite3_stmt **ppStmt           /* OUT: Statement handle */
                   119983: ){
                   119984:   return fts3SelectDocsize(pTab, SQL_SELECT_DOCSIZE, iDocid, ppStmt);
                   119985: }
                   119986: 
                   119987: /*
                   119988: ** Similar to fts3SqlStmt(). Except, after binding the parameters in
                   119989: ** array apVal[] to the SQL statement identified by eStmt, the statement
                   119990: ** is executed.
                   119991: **
                   119992: ** Returns SQLITE_OK if the statement is successfully executed, or an
                   119993: ** SQLite error code otherwise.
                   119994: */
                   119995: static void fts3SqlExec(
                   119996:   int *pRC,                /* Result code */
                   119997:   Fts3Table *p,            /* The FTS3 table */
                   119998:   int eStmt,               /* Index of statement to evaluate */
                   119999:   sqlite3_value **apVal    /* Parameters to bind */
                   120000: ){
                   120001:   sqlite3_stmt *pStmt;
                   120002:   int rc;
                   120003:   if( *pRC ) return;
                   120004:   rc = fts3SqlStmt(p, eStmt, &pStmt, apVal); 
                   120005:   if( rc==SQLITE_OK ){
                   120006:     sqlite3_step(pStmt);
                   120007:     rc = sqlite3_reset(pStmt);
                   120008:   }
                   120009:   *pRC = rc;
                   120010: }
                   120011: 
                   120012: 
                   120013: /*
                   120014: ** This function ensures that the caller has obtained a shared-cache
                   120015: ** table-lock on the %_content table. This is required before reading
                   120016: ** data from the fts3 table. If this lock is not acquired first, then
                   120017: ** the caller may end up holding read-locks on the %_segments and %_segdir
                   120018: ** tables, but no read-lock on the %_content table. If this happens 
                   120019: ** a second connection will be able to write to the fts3 table, but
                   120020: ** attempting to commit those writes might return SQLITE_LOCKED or
                   120021: ** SQLITE_LOCKED_SHAREDCACHE (because the commit attempts to obtain 
                   120022: ** write-locks on the %_segments and %_segdir ** tables). 
                   120023: **
                   120024: ** We try to avoid this because if FTS3 returns any error when committing
                   120025: ** a transaction, the whole transaction will be rolled back. And this is
                   120026: ** not what users expect when they get SQLITE_LOCKED_SHAREDCACHE. It can
                   120027: ** still happen if the user reads data directly from the %_segments or
                   120028: ** %_segdir tables instead of going through FTS3 though.
                   120029: */
                   120030: SQLITE_PRIVATE int sqlite3Fts3ReadLock(Fts3Table *p){
                   120031:   int rc;                         /* Return code */
                   120032:   sqlite3_stmt *pStmt;            /* Statement used to obtain lock */
                   120033: 
                   120034:   rc = fts3SqlStmt(p, SQL_SELECT_CONTENT_BY_ROWID, &pStmt, 0);
                   120035:   if( rc==SQLITE_OK ){
                   120036:     sqlite3_bind_null(pStmt, 1);
                   120037:     sqlite3_step(pStmt);
                   120038:     rc = sqlite3_reset(pStmt);
                   120039:   }
                   120040:   return rc;
                   120041: }
                   120042: 
                   120043: /*
                   120044: ** Set *ppStmt to a statement handle that may be used to iterate through
                   120045: ** all rows in the %_segdir table, from oldest to newest. If successful,
                   120046: ** return SQLITE_OK. If an error occurs while preparing the statement, 
                   120047: ** return an SQLite error code.
                   120048: **
                   120049: ** There is only ever one instance of this SQL statement compiled for
                   120050: ** each FTS3 table.
                   120051: **
                   120052: ** The statement returns the following columns from the %_segdir table:
                   120053: **
                   120054: **   0: idx
                   120055: **   1: start_block
                   120056: **   2: leaves_end_block
                   120057: **   3: end_block
                   120058: **   4: root
                   120059: */
                   120060: SQLITE_PRIVATE int sqlite3Fts3AllSegdirs(
                   120061:   Fts3Table *p,                   /* FTS3 table */
                   120062:   int iIndex,                     /* Index for p->aIndex[] */
                   120063:   int iLevel,                     /* Level to select */
                   120064:   sqlite3_stmt **ppStmt           /* OUT: Compiled statement */
                   120065: ){
                   120066:   int rc;
                   120067:   sqlite3_stmt *pStmt = 0;
                   120068: 
                   120069:   assert( iLevel==FTS3_SEGCURSOR_ALL || iLevel>=0 );
                   120070:   assert( iLevel<FTS3_SEGDIR_MAXLEVEL );
                   120071:   assert( iIndex>=0 && iIndex<p->nIndex );
                   120072: 
                   120073:   if( iLevel<0 ){
                   120074:     /* "SELECT * FROM %_segdir WHERE level BETWEEN ? AND ? ORDER BY ..." */
                   120075:     rc = fts3SqlStmt(p, SQL_SELECT_LEVEL_RANGE, &pStmt, 0);
                   120076:     if( rc==SQLITE_OK ){ 
                   120077:       sqlite3_bind_int(pStmt, 1, iIndex*FTS3_SEGDIR_MAXLEVEL);
                   120078:       sqlite3_bind_int(pStmt, 2, (iIndex+1)*FTS3_SEGDIR_MAXLEVEL-1);
                   120079:     }
                   120080:   }else{
                   120081:     /* "SELECT * FROM %_segdir WHERE level = ? ORDER BY ..." */
                   120082:     rc = fts3SqlStmt(p, SQL_SELECT_LEVEL, &pStmt, 0);
                   120083:     if( rc==SQLITE_OK ){ 
                   120084:       sqlite3_bind_int(pStmt, 1, iLevel+iIndex*FTS3_SEGDIR_MAXLEVEL);
                   120085:     }
                   120086:   }
                   120087:   *ppStmt = pStmt;
                   120088:   return rc;
                   120089: }
                   120090: 
                   120091: 
                   120092: /*
                   120093: ** Append a single varint to a PendingList buffer. SQLITE_OK is returned
                   120094: ** if successful, or an SQLite error code otherwise.
                   120095: **
                   120096: ** This function also serves to allocate the PendingList structure itself.
                   120097: ** For example, to create a new PendingList structure containing two
                   120098: ** varints:
                   120099: **
                   120100: **   PendingList *p = 0;
                   120101: **   fts3PendingListAppendVarint(&p, 1);
                   120102: **   fts3PendingListAppendVarint(&p, 2);
                   120103: */
                   120104: static int fts3PendingListAppendVarint(
                   120105:   PendingList **pp,               /* IN/OUT: Pointer to PendingList struct */
                   120106:   sqlite3_int64 i                 /* Value to append to data */
                   120107: ){
                   120108:   PendingList *p = *pp;
                   120109: 
                   120110:   /* Allocate or grow the PendingList as required. */
                   120111:   if( !p ){
                   120112:     p = sqlite3_malloc(sizeof(*p) + 100);
                   120113:     if( !p ){
                   120114:       return SQLITE_NOMEM;
                   120115:     }
                   120116:     p->nSpace = 100;
                   120117:     p->aData = (char *)&p[1];
                   120118:     p->nData = 0;
                   120119:   }
                   120120:   else if( p->nData+FTS3_VARINT_MAX+1>p->nSpace ){
                   120121:     int nNew = p->nSpace * 2;
                   120122:     p = sqlite3_realloc(p, sizeof(*p) + nNew);
                   120123:     if( !p ){
                   120124:       sqlite3_free(*pp);
                   120125:       *pp = 0;
                   120126:       return SQLITE_NOMEM;
                   120127:     }
                   120128:     p->nSpace = nNew;
                   120129:     p->aData = (char *)&p[1];
                   120130:   }
                   120131: 
                   120132:   /* Append the new serialized varint to the end of the list. */
                   120133:   p->nData += sqlite3Fts3PutVarint(&p->aData[p->nData], i);
                   120134:   p->aData[p->nData] = '\0';
                   120135:   *pp = p;
                   120136:   return SQLITE_OK;
                   120137: }
                   120138: 
                   120139: /*
                   120140: ** Add a docid/column/position entry to a PendingList structure. Non-zero
                   120141: ** is returned if the structure is sqlite3_realloced as part of adding
                   120142: ** the entry. Otherwise, zero.
                   120143: **
                   120144: ** If an OOM error occurs, *pRc is set to SQLITE_NOMEM before returning.
                   120145: ** Zero is always returned in this case. Otherwise, if no OOM error occurs,
                   120146: ** it is set to SQLITE_OK.
                   120147: */
                   120148: static int fts3PendingListAppend(
                   120149:   PendingList **pp,               /* IN/OUT: PendingList structure */
                   120150:   sqlite3_int64 iDocid,           /* Docid for entry to add */
                   120151:   sqlite3_int64 iCol,             /* Column for entry to add */
                   120152:   sqlite3_int64 iPos,             /* Position of term for entry to add */
                   120153:   int *pRc                        /* OUT: Return code */
                   120154: ){
                   120155:   PendingList *p = *pp;
                   120156:   int rc = SQLITE_OK;
                   120157: 
                   120158:   assert( !p || p->iLastDocid<=iDocid );
                   120159: 
                   120160:   if( !p || p->iLastDocid!=iDocid ){
                   120161:     sqlite3_int64 iDelta = iDocid - (p ? p->iLastDocid : 0);
                   120162:     if( p ){
                   120163:       assert( p->nData<p->nSpace );
                   120164:       assert( p->aData[p->nData]==0 );
                   120165:       p->nData++;
                   120166:     }
                   120167:     if( SQLITE_OK!=(rc = fts3PendingListAppendVarint(&p, iDelta)) ){
                   120168:       goto pendinglistappend_out;
                   120169:     }
                   120170:     p->iLastCol = -1;
                   120171:     p->iLastPos = 0;
                   120172:     p->iLastDocid = iDocid;
                   120173:   }
                   120174:   if( iCol>0 && p->iLastCol!=iCol ){
                   120175:     if( SQLITE_OK!=(rc = fts3PendingListAppendVarint(&p, 1))
                   120176:      || SQLITE_OK!=(rc = fts3PendingListAppendVarint(&p, iCol))
                   120177:     ){
                   120178:       goto pendinglistappend_out;
                   120179:     }
                   120180:     p->iLastCol = iCol;
                   120181:     p->iLastPos = 0;
                   120182:   }
                   120183:   if( iCol>=0 ){
                   120184:     assert( iPos>p->iLastPos || (iPos==0 && p->iLastPos==0) );
                   120185:     rc = fts3PendingListAppendVarint(&p, 2+iPos-p->iLastPos);
                   120186:     if( rc==SQLITE_OK ){
                   120187:       p->iLastPos = iPos;
                   120188:     }
                   120189:   }
                   120190: 
                   120191:  pendinglistappend_out:
                   120192:   *pRc = rc;
                   120193:   if( p!=*pp ){
                   120194:     *pp = p;
                   120195:     return 1;
                   120196:   }
                   120197:   return 0;
                   120198: }
                   120199: 
                   120200: /*
                   120201: ** Free a PendingList object allocated by fts3PendingListAppend().
                   120202: */
                   120203: static void fts3PendingListDelete(PendingList *pList){
                   120204:   sqlite3_free(pList);
                   120205: }
                   120206: 
                   120207: /*
                   120208: ** Add an entry to one of the pending-terms hash tables.
                   120209: */
                   120210: static int fts3PendingTermsAddOne(
                   120211:   Fts3Table *p,
                   120212:   int iCol,
                   120213:   int iPos,
                   120214:   Fts3Hash *pHash,                /* Pending terms hash table to add entry to */
                   120215:   const char *zToken,
                   120216:   int nToken
                   120217: ){
                   120218:   PendingList *pList;
                   120219:   int rc = SQLITE_OK;
                   120220: 
                   120221:   pList = (PendingList *)fts3HashFind(pHash, zToken, nToken);
                   120222:   if( pList ){
                   120223:     p->nPendingData -= (pList->nData + nToken + sizeof(Fts3HashElem));
                   120224:   }
                   120225:   if( fts3PendingListAppend(&pList, p->iPrevDocid, iCol, iPos, &rc) ){
                   120226:     if( pList==fts3HashInsert(pHash, zToken, nToken, pList) ){
                   120227:       /* Malloc failed while inserting the new entry. This can only 
                   120228:       ** happen if there was no previous entry for this token.
                   120229:       */
                   120230:       assert( 0==fts3HashFind(pHash, zToken, nToken) );
                   120231:       sqlite3_free(pList);
                   120232:       rc = SQLITE_NOMEM;
                   120233:     }
                   120234:   }
                   120235:   if( rc==SQLITE_OK ){
                   120236:     p->nPendingData += (pList->nData + nToken + sizeof(Fts3HashElem));
                   120237:   }
                   120238:   return rc;
                   120239: }
                   120240: 
                   120241: /*
                   120242: ** Tokenize the nul-terminated string zText and add all tokens to the
                   120243: ** pending-terms hash-table. The docid used is that currently stored in
                   120244: ** p->iPrevDocid, and the column is specified by argument iCol.
                   120245: **
                   120246: ** If successful, SQLITE_OK is returned. Otherwise, an SQLite error code.
                   120247: */
                   120248: static int fts3PendingTermsAdd(
                   120249:   Fts3Table *p,                   /* Table into which text will be inserted */
                   120250:   const char *zText,              /* Text of document to be inserted */
                   120251:   int iCol,                       /* Column into which text is being inserted */
                   120252:   u32 *pnWord                     /* OUT: Number of tokens inserted */
                   120253: ){
                   120254:   int rc;
                   120255:   int iStart;
                   120256:   int iEnd;
                   120257:   int iPos;
                   120258:   int nWord = 0;
                   120259: 
                   120260:   char const *zToken;
                   120261:   int nToken;
                   120262: 
                   120263:   sqlite3_tokenizer *pTokenizer = p->pTokenizer;
                   120264:   sqlite3_tokenizer_module const *pModule = pTokenizer->pModule;
                   120265:   sqlite3_tokenizer_cursor *pCsr;
                   120266:   int (*xNext)(sqlite3_tokenizer_cursor *pCursor,
                   120267:       const char**,int*,int*,int*,int*);
                   120268: 
                   120269:   assert( pTokenizer && pModule );
                   120270: 
                   120271:   /* If the user has inserted a NULL value, this function may be called with
                   120272:   ** zText==0. In this case, add zero token entries to the hash table and 
                   120273:   ** return early. */
                   120274:   if( zText==0 ){
                   120275:     *pnWord = 0;
                   120276:     return SQLITE_OK;
                   120277:   }
                   120278: 
                   120279:   rc = pModule->xOpen(pTokenizer, zText, -1, &pCsr);
                   120280:   if( rc!=SQLITE_OK ){
                   120281:     return rc;
                   120282:   }
                   120283:   pCsr->pTokenizer = pTokenizer;
                   120284: 
                   120285:   xNext = pModule->xNext;
                   120286:   while( SQLITE_OK==rc
                   120287:       && SQLITE_OK==(rc = xNext(pCsr, &zToken, &nToken, &iStart, &iEnd, &iPos))
                   120288:   ){
                   120289:     int i;
                   120290:     if( iPos>=nWord ) nWord = iPos+1;
                   120291: 
                   120292:     /* Positions cannot be negative; we use -1 as a terminator internally.
                   120293:     ** Tokens must have a non-zero length.
                   120294:     */
                   120295:     if( iPos<0 || !zToken || nToken<=0 ){
                   120296:       rc = SQLITE_ERROR;
                   120297:       break;
                   120298:     }
                   120299: 
                   120300:     /* Add the term to the terms index */
                   120301:     rc = fts3PendingTermsAddOne(
                   120302:         p, iCol, iPos, &p->aIndex[0].hPending, zToken, nToken
                   120303:     );
                   120304:     
                   120305:     /* Add the term to each of the prefix indexes that it is not too 
                   120306:     ** short for. */
                   120307:     for(i=1; rc==SQLITE_OK && i<p->nIndex; i++){
                   120308:       struct Fts3Index *pIndex = &p->aIndex[i];
                   120309:       if( nToken<pIndex->nPrefix ) continue;
                   120310:       rc = fts3PendingTermsAddOne(
                   120311:           p, iCol, iPos, &pIndex->hPending, zToken, pIndex->nPrefix
                   120312:       );
                   120313:     }
                   120314:   }
                   120315: 
                   120316:   pModule->xClose(pCsr);
                   120317:   *pnWord = nWord;
                   120318:   return (rc==SQLITE_DONE ? SQLITE_OK : rc);
                   120319: }
                   120320: 
                   120321: /* 
                   120322: ** Calling this function indicates that subsequent calls to 
                   120323: ** fts3PendingTermsAdd() are to add term/position-list pairs for the
                   120324: ** contents of the document with docid iDocid.
                   120325: */
                   120326: static int fts3PendingTermsDocid(Fts3Table *p, sqlite_int64 iDocid){
                   120327:   /* TODO(shess) Explore whether partially flushing the buffer on
                   120328:   ** forced-flush would provide better performance.  I suspect that if
                   120329:   ** we ordered the doclists by size and flushed the largest until the
                   120330:   ** buffer was half empty, that would let the less frequent terms
                   120331:   ** generate longer doclists.
                   120332:   */
                   120333:   if( iDocid<=p->iPrevDocid || p->nPendingData>p->nMaxPendingData ){
                   120334:     int rc = sqlite3Fts3PendingTermsFlush(p);
                   120335:     if( rc!=SQLITE_OK ) return rc;
                   120336:   }
                   120337:   p->iPrevDocid = iDocid;
                   120338:   return SQLITE_OK;
                   120339: }
                   120340: 
                   120341: /*
                   120342: ** Discard the contents of the pending-terms hash tables. 
                   120343: */
                   120344: SQLITE_PRIVATE void sqlite3Fts3PendingTermsClear(Fts3Table *p){
                   120345:   int i;
                   120346:   for(i=0; i<p->nIndex; i++){
                   120347:     Fts3HashElem *pElem;
                   120348:     Fts3Hash *pHash = &p->aIndex[i].hPending;
                   120349:     for(pElem=fts3HashFirst(pHash); pElem; pElem=fts3HashNext(pElem)){
                   120350:       PendingList *pList = (PendingList *)fts3HashData(pElem);
                   120351:       fts3PendingListDelete(pList);
                   120352:     }
                   120353:     fts3HashClear(pHash);
                   120354:   }
                   120355:   p->nPendingData = 0;
                   120356: }
                   120357: 
                   120358: /*
                   120359: ** This function is called by the xUpdate() method as part of an INSERT
                   120360: ** operation. It adds entries for each term in the new record to the
                   120361: ** pendingTerms hash table.
                   120362: **
                   120363: ** Argument apVal is the same as the similarly named argument passed to
                   120364: ** fts3InsertData(). Parameter iDocid is the docid of the new row.
                   120365: */
                   120366: static int fts3InsertTerms(Fts3Table *p, sqlite3_value **apVal, u32 *aSz){
                   120367:   int i;                          /* Iterator variable */
                   120368:   for(i=2; i<p->nColumn+2; i++){
                   120369:     const char *zText = (const char *)sqlite3_value_text(apVal[i]);
                   120370:     int rc = fts3PendingTermsAdd(p, zText, i-2, &aSz[i-2]);
                   120371:     if( rc!=SQLITE_OK ){
                   120372:       return rc;
                   120373:     }
                   120374:     aSz[p->nColumn] += sqlite3_value_bytes(apVal[i]);
                   120375:   }
                   120376:   return SQLITE_OK;
                   120377: }
                   120378: 
                   120379: /*
                   120380: ** This function is called by the xUpdate() method for an INSERT operation.
                   120381: ** The apVal parameter is passed a copy of the apVal argument passed by
                   120382: ** SQLite to the xUpdate() method. i.e:
                   120383: **
                   120384: **   apVal[0]                Not used for INSERT.
                   120385: **   apVal[1]                rowid
                   120386: **   apVal[2]                Left-most user-defined column
                   120387: **   ...
                   120388: **   apVal[p->nColumn+1]     Right-most user-defined column
                   120389: **   apVal[p->nColumn+2]     Hidden column with same name as table
                   120390: **   apVal[p->nColumn+3]     Hidden "docid" column (alias for rowid)
                   120391: */
                   120392: static int fts3InsertData(
                   120393:   Fts3Table *p,                   /* Full-text table */
                   120394:   sqlite3_value **apVal,          /* Array of values to insert */
                   120395:   sqlite3_int64 *piDocid          /* OUT: Docid for row just inserted */
                   120396: ){
                   120397:   int rc;                         /* Return code */
                   120398:   sqlite3_stmt *pContentInsert;   /* INSERT INTO %_content VALUES(...) */
                   120399: 
                   120400:   /* Locate the statement handle used to insert data into the %_content
                   120401:   ** table. The SQL for this statement is:
                   120402:   **
                   120403:   **   INSERT INTO %_content VALUES(?, ?, ?, ...)
                   120404:   **
                   120405:   ** The statement features N '?' variables, where N is the number of user
                   120406:   ** defined columns in the FTS3 table, plus one for the docid field.
                   120407:   */
                   120408:   rc = fts3SqlStmt(p, SQL_CONTENT_INSERT, &pContentInsert, &apVal[1]);
                   120409:   if( rc!=SQLITE_OK ){
                   120410:     return rc;
                   120411:   }
                   120412: 
                   120413:   /* There is a quirk here. The users INSERT statement may have specified
                   120414:   ** a value for the "rowid" field, for the "docid" field, or for both.
                   120415:   ** Which is a problem, since "rowid" and "docid" are aliases for the
                   120416:   ** same value. For example:
                   120417:   **
                   120418:   **   INSERT INTO fts3tbl(rowid, docid) VALUES(1, 2);
                   120419:   **
                   120420:   ** In FTS3, this is an error. It is an error to specify non-NULL values
                   120421:   ** for both docid and some other rowid alias.
                   120422:   */
                   120423:   if( SQLITE_NULL!=sqlite3_value_type(apVal[3+p->nColumn]) ){
                   120424:     if( SQLITE_NULL==sqlite3_value_type(apVal[0])
                   120425:      && SQLITE_NULL!=sqlite3_value_type(apVal[1])
                   120426:     ){
                   120427:       /* A rowid/docid conflict. */
                   120428:       return SQLITE_ERROR;
                   120429:     }
                   120430:     rc = sqlite3_bind_value(pContentInsert, 1, apVal[3+p->nColumn]);
                   120431:     if( rc!=SQLITE_OK ) return rc;
                   120432:   }
                   120433: 
                   120434:   /* Execute the statement to insert the record. Set *piDocid to the 
                   120435:   ** new docid value. 
                   120436:   */
                   120437:   sqlite3_step(pContentInsert);
                   120438:   rc = sqlite3_reset(pContentInsert);
                   120439: 
                   120440:   *piDocid = sqlite3_last_insert_rowid(p->db);
                   120441:   return rc;
                   120442: }
                   120443: 
                   120444: 
                   120445: 
                   120446: /*
                   120447: ** Remove all data from the FTS3 table. Clear the hash table containing
                   120448: ** pending terms.
                   120449: */
                   120450: static int fts3DeleteAll(Fts3Table *p){
                   120451:   int rc = SQLITE_OK;             /* Return code */
                   120452: 
                   120453:   /* Discard the contents of the pending-terms hash table. */
                   120454:   sqlite3Fts3PendingTermsClear(p);
                   120455: 
                   120456:   /* Delete everything from the %_content, %_segments and %_segdir tables. */
                   120457:   fts3SqlExec(&rc, p, SQL_DELETE_ALL_CONTENT, 0);
                   120458:   fts3SqlExec(&rc, p, SQL_DELETE_ALL_SEGMENTS, 0);
                   120459:   fts3SqlExec(&rc, p, SQL_DELETE_ALL_SEGDIR, 0);
                   120460:   if( p->bHasDocsize ){
                   120461:     fts3SqlExec(&rc, p, SQL_DELETE_ALL_DOCSIZE, 0);
                   120462:   }
                   120463:   if( p->bHasStat ){
                   120464:     fts3SqlExec(&rc, p, SQL_DELETE_ALL_STAT, 0);
                   120465:   }
                   120466:   return rc;
                   120467: }
                   120468: 
                   120469: /*
                   120470: ** The first element in the apVal[] array is assumed to contain the docid
                   120471: ** (an integer) of a row about to be deleted. Remove all terms from the
                   120472: ** full-text index.
                   120473: */
                   120474: static void fts3DeleteTerms( 
                   120475:   int *pRC,               /* Result code */
                   120476:   Fts3Table *p,           /* The FTS table to delete from */
                   120477:   sqlite3_value *pRowid,  /* The docid to be deleted */
                   120478:   u32 *aSz                /* Sizes of deleted document written here */
                   120479: ){
                   120480:   int rc;
                   120481:   sqlite3_stmt *pSelect;
                   120482: 
                   120483:   if( *pRC ) return;
                   120484:   rc = fts3SqlStmt(p, SQL_SELECT_CONTENT_BY_ROWID, &pSelect, &pRowid);
                   120485:   if( rc==SQLITE_OK ){
                   120486:     if( SQLITE_ROW==sqlite3_step(pSelect) ){
                   120487:       int i;
                   120488:       for(i=1; i<=p->nColumn; i++){
                   120489:         const char *zText = (const char *)sqlite3_column_text(pSelect, i);
                   120490:         rc = fts3PendingTermsAdd(p, zText, -1, &aSz[i-1]);
                   120491:         if( rc!=SQLITE_OK ){
                   120492:           sqlite3_reset(pSelect);
                   120493:           *pRC = rc;
                   120494:           return;
                   120495:         }
                   120496:         aSz[p->nColumn] += sqlite3_column_bytes(pSelect, i);
                   120497:       }
                   120498:     }
                   120499:     rc = sqlite3_reset(pSelect);
                   120500:   }else{
                   120501:     sqlite3_reset(pSelect);
                   120502:   }
                   120503:   *pRC = rc;
                   120504: }
                   120505: 
                   120506: /*
                   120507: ** Forward declaration to account for the circular dependency between
                   120508: ** functions fts3SegmentMerge() and fts3AllocateSegdirIdx().
                   120509: */
                   120510: static int fts3SegmentMerge(Fts3Table *, int, int);
                   120511: 
                   120512: /* 
                   120513: ** This function allocates a new level iLevel index in the segdir table.
                   120514: ** Usually, indexes are allocated within a level sequentially starting
                   120515: ** with 0, so the allocated index is one greater than the value returned
                   120516: ** by:
                   120517: **
                   120518: **   SELECT max(idx) FROM %_segdir WHERE level = :iLevel
                   120519: **
                   120520: ** However, if there are already FTS3_MERGE_COUNT indexes at the requested
                   120521: ** level, they are merged into a single level (iLevel+1) segment and the 
                   120522: ** allocated index is 0.
                   120523: **
                   120524: ** If successful, *piIdx is set to the allocated index slot and SQLITE_OK
                   120525: ** returned. Otherwise, an SQLite error code is returned.
                   120526: */
                   120527: static int fts3AllocateSegdirIdx(
                   120528:   Fts3Table *p, 
                   120529:   int iIndex,                     /* Index for p->aIndex */
                   120530:   int iLevel, 
                   120531:   int *piIdx
                   120532: ){
                   120533:   int rc;                         /* Return Code */
                   120534:   sqlite3_stmt *pNextIdx;         /* Query for next idx at level iLevel */
                   120535:   int iNext = 0;                  /* Result of query pNextIdx */
                   120536: 
                   120537:   /* Set variable iNext to the next available segdir index at level iLevel. */
                   120538:   rc = fts3SqlStmt(p, SQL_NEXT_SEGMENT_INDEX, &pNextIdx, 0);
                   120539:   if( rc==SQLITE_OK ){
                   120540:     sqlite3_bind_int(pNextIdx, 1, iIndex*FTS3_SEGDIR_MAXLEVEL + iLevel);
                   120541:     if( SQLITE_ROW==sqlite3_step(pNextIdx) ){
                   120542:       iNext = sqlite3_column_int(pNextIdx, 0);
                   120543:     }
                   120544:     rc = sqlite3_reset(pNextIdx);
                   120545:   }
                   120546: 
                   120547:   if( rc==SQLITE_OK ){
                   120548:     /* If iNext is FTS3_MERGE_COUNT, indicating that level iLevel is already
                   120549:     ** full, merge all segments in level iLevel into a single iLevel+1
                   120550:     ** segment and allocate (newly freed) index 0 at level iLevel. Otherwise,
                   120551:     ** if iNext is less than FTS3_MERGE_COUNT, allocate index iNext.
                   120552:     */
                   120553:     if( iNext>=FTS3_MERGE_COUNT ){
                   120554:       rc = fts3SegmentMerge(p, iIndex, iLevel);
                   120555:       *piIdx = 0;
                   120556:     }else{
                   120557:       *piIdx = iNext;
                   120558:     }
                   120559:   }
                   120560: 
                   120561:   return rc;
                   120562: }
                   120563: 
                   120564: /*
                   120565: ** The %_segments table is declared as follows:
                   120566: **
                   120567: **   CREATE TABLE %_segments(blockid INTEGER PRIMARY KEY, block BLOB)
                   120568: **
                   120569: ** This function reads data from a single row of the %_segments table. The
                   120570: ** specific row is identified by the iBlockid parameter. If paBlob is not
                   120571: ** NULL, then a buffer is allocated using sqlite3_malloc() and populated
                   120572: ** with the contents of the blob stored in the "block" column of the 
                   120573: ** identified table row is. Whether or not paBlob is NULL, *pnBlob is set
                   120574: ** to the size of the blob in bytes before returning.
                   120575: **
                   120576: ** If an error occurs, or the table does not contain the specified row,
                   120577: ** an SQLite error code is returned. Otherwise, SQLITE_OK is returned. If
                   120578: ** paBlob is non-NULL, then it is the responsibility of the caller to
                   120579: ** eventually free the returned buffer.
                   120580: **
                   120581: ** This function may leave an open sqlite3_blob* handle in the
                   120582: ** Fts3Table.pSegments variable. This handle is reused by subsequent calls
                   120583: ** to this function. The handle may be closed by calling the
                   120584: ** sqlite3Fts3SegmentsClose() function. Reusing a blob handle is a handy
                   120585: ** performance improvement, but the blob handle should always be closed
                   120586: ** before control is returned to the user (to prevent a lock being held
                   120587: ** on the database file for longer than necessary). Thus, any virtual table
                   120588: ** method (xFilter etc.) that may directly or indirectly call this function
                   120589: ** must call sqlite3Fts3SegmentsClose() before returning.
                   120590: */
                   120591: SQLITE_PRIVATE int sqlite3Fts3ReadBlock(
                   120592:   Fts3Table *p,                   /* FTS3 table handle */
                   120593:   sqlite3_int64 iBlockid,         /* Access the row with blockid=$iBlockid */
                   120594:   char **paBlob,                  /* OUT: Blob data in malloc'd buffer */
                   120595:   int *pnBlob,                    /* OUT: Size of blob data */
                   120596:   int *pnLoad                     /* OUT: Bytes actually loaded */
                   120597: ){
                   120598:   int rc;                         /* Return code */
                   120599: 
                   120600:   /* pnBlob must be non-NULL. paBlob may be NULL or non-NULL. */
                   120601:   assert( pnBlob);
                   120602: 
                   120603:   if( p->pSegments ){
                   120604:     rc = sqlite3_blob_reopen(p->pSegments, iBlockid);
                   120605:   }else{
                   120606:     if( 0==p->zSegmentsTbl ){
                   120607:       p->zSegmentsTbl = sqlite3_mprintf("%s_segments", p->zName);
                   120608:       if( 0==p->zSegmentsTbl ) return SQLITE_NOMEM;
                   120609:     }
                   120610:     rc = sqlite3_blob_open(
                   120611:        p->db, p->zDb, p->zSegmentsTbl, "block", iBlockid, 0, &p->pSegments
                   120612:     );
                   120613:   }
                   120614: 
                   120615:   if( rc==SQLITE_OK ){
                   120616:     int nByte = sqlite3_blob_bytes(p->pSegments);
                   120617:     *pnBlob = nByte;
                   120618:     if( paBlob ){
                   120619:       char *aByte = sqlite3_malloc(nByte + FTS3_NODE_PADDING);
                   120620:       if( !aByte ){
                   120621:         rc = SQLITE_NOMEM;
                   120622:       }else{
                   120623:         if( pnLoad && nByte>(FTS3_NODE_CHUNK_THRESHOLD) ){
                   120624:           nByte = FTS3_NODE_CHUNKSIZE;
                   120625:           *pnLoad = nByte;
                   120626:         }
                   120627:         rc = sqlite3_blob_read(p->pSegments, aByte, nByte, 0);
                   120628:         memset(&aByte[nByte], 0, FTS3_NODE_PADDING);
                   120629:         if( rc!=SQLITE_OK ){
                   120630:           sqlite3_free(aByte);
                   120631:           aByte = 0;
                   120632:         }
                   120633:       }
                   120634:       *paBlob = aByte;
                   120635:     }
                   120636:   }
                   120637: 
                   120638:   return rc;
                   120639: }
                   120640: 
                   120641: /*
                   120642: ** Close the blob handle at p->pSegments, if it is open. See comments above
                   120643: ** the sqlite3Fts3ReadBlock() function for details.
                   120644: */
                   120645: SQLITE_PRIVATE void sqlite3Fts3SegmentsClose(Fts3Table *p){
                   120646:   sqlite3_blob_close(p->pSegments);
                   120647:   p->pSegments = 0;
                   120648: }
                   120649:     
                   120650: static int fts3SegReaderIncrRead(Fts3SegReader *pReader){
                   120651:   int nRead;                      /* Number of bytes to read */
                   120652:   int rc;                         /* Return code */
                   120653: 
                   120654:   nRead = MIN(pReader->nNode - pReader->nPopulate, FTS3_NODE_CHUNKSIZE);
                   120655:   rc = sqlite3_blob_read(
                   120656:       pReader->pBlob, 
                   120657:       &pReader->aNode[pReader->nPopulate],
                   120658:       nRead,
                   120659:       pReader->nPopulate
                   120660:   );
                   120661: 
                   120662:   if( rc==SQLITE_OK ){
                   120663:     pReader->nPopulate += nRead;
                   120664:     memset(&pReader->aNode[pReader->nPopulate], 0, FTS3_NODE_PADDING);
                   120665:     if( pReader->nPopulate==pReader->nNode ){
                   120666:       sqlite3_blob_close(pReader->pBlob);
                   120667:       pReader->pBlob = 0;
                   120668:       pReader->nPopulate = 0;
                   120669:     }
                   120670:   }
                   120671:   return rc;
                   120672: }
                   120673: 
                   120674: static int fts3SegReaderRequire(Fts3SegReader *pReader, char *pFrom, int nByte){
                   120675:   int rc = SQLITE_OK;
                   120676:   assert( !pReader->pBlob 
                   120677:        || (pFrom>=pReader->aNode && pFrom<&pReader->aNode[pReader->nNode])
                   120678:   );
                   120679:   while( pReader->pBlob && rc==SQLITE_OK 
                   120680:      &&  (pFrom - pReader->aNode + nByte)>pReader->nPopulate
                   120681:   ){
                   120682:     rc = fts3SegReaderIncrRead(pReader);
                   120683:   }
                   120684:   return rc;
                   120685: }
                   120686: 
                   120687: /*
                   120688: ** Move the iterator passed as the first argument to the next term in the
                   120689: ** segment. If successful, SQLITE_OK is returned. If there is no next term,
                   120690: ** SQLITE_DONE. Otherwise, an SQLite error code.
                   120691: */
                   120692: static int fts3SegReaderNext(
                   120693:   Fts3Table *p, 
                   120694:   Fts3SegReader *pReader,
                   120695:   int bIncr
                   120696: ){
                   120697:   int rc;                         /* Return code of various sub-routines */
                   120698:   char *pNext;                    /* Cursor variable */
                   120699:   int nPrefix;                    /* Number of bytes in term prefix */
                   120700:   int nSuffix;                    /* Number of bytes in term suffix */
                   120701: 
                   120702:   if( !pReader->aDoclist ){
                   120703:     pNext = pReader->aNode;
                   120704:   }else{
                   120705:     pNext = &pReader->aDoclist[pReader->nDoclist];
                   120706:   }
                   120707: 
                   120708:   if( !pNext || pNext>=&pReader->aNode[pReader->nNode] ){
                   120709: 
                   120710:     if( fts3SegReaderIsPending(pReader) ){
                   120711:       Fts3HashElem *pElem = *(pReader->ppNextElem);
                   120712:       if( pElem==0 ){
                   120713:         pReader->aNode = 0;
                   120714:       }else{
                   120715:         PendingList *pList = (PendingList *)fts3HashData(pElem);
                   120716:         pReader->zTerm = (char *)fts3HashKey(pElem);
                   120717:         pReader->nTerm = fts3HashKeysize(pElem);
                   120718:         pReader->nNode = pReader->nDoclist = pList->nData + 1;
                   120719:         pReader->aNode = pReader->aDoclist = pList->aData;
                   120720:         pReader->ppNextElem++;
                   120721:         assert( pReader->aNode );
                   120722:       }
                   120723:       return SQLITE_OK;
                   120724:     }
                   120725: 
                   120726:     if( !fts3SegReaderIsRootOnly(pReader) ){
                   120727:       sqlite3_free(pReader->aNode);
                   120728:       sqlite3_blob_close(pReader->pBlob);
                   120729:       pReader->pBlob = 0;
                   120730:     }
                   120731:     pReader->aNode = 0;
                   120732: 
                   120733:     /* If iCurrentBlock>=iLeafEndBlock, this is an EOF condition. All leaf 
                   120734:     ** blocks have already been traversed.  */
                   120735:     assert( pReader->iCurrentBlock<=pReader->iLeafEndBlock );
                   120736:     if( pReader->iCurrentBlock>=pReader->iLeafEndBlock ){
                   120737:       return SQLITE_OK;
                   120738:     }
                   120739: 
                   120740:     rc = sqlite3Fts3ReadBlock(
                   120741:         p, ++pReader->iCurrentBlock, &pReader->aNode, &pReader->nNode, 
                   120742:         (bIncr ? &pReader->nPopulate : 0)
                   120743:     );
                   120744:     if( rc!=SQLITE_OK ) return rc;
                   120745:     assert( pReader->pBlob==0 );
                   120746:     if( bIncr && pReader->nPopulate<pReader->nNode ){
                   120747:       pReader->pBlob = p->pSegments;
                   120748:       p->pSegments = 0;
                   120749:     }
                   120750:     pNext = pReader->aNode;
                   120751:   }
                   120752: 
                   120753:   assert( !fts3SegReaderIsPending(pReader) );
                   120754: 
                   120755:   rc = fts3SegReaderRequire(pReader, pNext, FTS3_VARINT_MAX*2);
                   120756:   if( rc!=SQLITE_OK ) return rc;
                   120757:   
                   120758:   /* Because of the FTS3_NODE_PADDING bytes of padding, the following is 
                   120759:   ** safe (no risk of overread) even if the node data is corrupted. */
                   120760:   pNext += sqlite3Fts3GetVarint32(pNext, &nPrefix);
                   120761:   pNext += sqlite3Fts3GetVarint32(pNext, &nSuffix);
                   120762:   if( nPrefix<0 || nSuffix<=0 
                   120763:    || &pNext[nSuffix]>&pReader->aNode[pReader->nNode] 
                   120764:   ){
                   120765:     return SQLITE_CORRUPT_VTAB;
                   120766:   }
                   120767: 
                   120768:   if( nPrefix+nSuffix>pReader->nTermAlloc ){
                   120769:     int nNew = (nPrefix+nSuffix)*2;
                   120770:     char *zNew = sqlite3_realloc(pReader->zTerm, nNew);
                   120771:     if( !zNew ){
                   120772:       return SQLITE_NOMEM;
                   120773:     }
                   120774:     pReader->zTerm = zNew;
                   120775:     pReader->nTermAlloc = nNew;
                   120776:   }
                   120777: 
                   120778:   rc = fts3SegReaderRequire(pReader, pNext, nSuffix+FTS3_VARINT_MAX);
                   120779:   if( rc!=SQLITE_OK ) return rc;
                   120780: 
                   120781:   memcpy(&pReader->zTerm[nPrefix], pNext, nSuffix);
                   120782:   pReader->nTerm = nPrefix+nSuffix;
                   120783:   pNext += nSuffix;
                   120784:   pNext += sqlite3Fts3GetVarint32(pNext, &pReader->nDoclist);
                   120785:   pReader->aDoclist = pNext;
                   120786:   pReader->pOffsetList = 0;
                   120787: 
                   120788:   /* Check that the doclist does not appear to extend past the end of the
                   120789:   ** b-tree node. And that the final byte of the doclist is 0x00. If either 
                   120790:   ** of these statements is untrue, then the data structure is corrupt.
                   120791:   */
                   120792:   if( &pReader->aDoclist[pReader->nDoclist]>&pReader->aNode[pReader->nNode] 
                   120793:    || (pReader->nPopulate==0 && pReader->aDoclist[pReader->nDoclist-1])
                   120794:   ){
                   120795:     return SQLITE_CORRUPT_VTAB;
                   120796:   }
                   120797:   return SQLITE_OK;
                   120798: }
                   120799: 
                   120800: /*
                   120801: ** Set the SegReader to point to the first docid in the doclist associated
                   120802: ** with the current term.
                   120803: */
                   120804: static int fts3SegReaderFirstDocid(Fts3Table *pTab, Fts3SegReader *pReader){
                   120805:   int rc = SQLITE_OK;
                   120806:   assert( pReader->aDoclist );
                   120807:   assert( !pReader->pOffsetList );
                   120808:   if( pTab->bDescIdx && fts3SegReaderIsPending(pReader) ){
                   120809:     u8 bEof = 0;
                   120810:     pReader->iDocid = 0;
                   120811:     pReader->nOffsetList = 0;
                   120812:     sqlite3Fts3DoclistPrev(0,
                   120813:         pReader->aDoclist, pReader->nDoclist, &pReader->pOffsetList, 
                   120814:         &pReader->iDocid, &pReader->nOffsetList, &bEof
                   120815:     );
                   120816:   }else{
                   120817:     rc = fts3SegReaderRequire(pReader, pReader->aDoclist, FTS3_VARINT_MAX);
                   120818:     if( rc==SQLITE_OK ){
                   120819:       int n = sqlite3Fts3GetVarint(pReader->aDoclist, &pReader->iDocid);
                   120820:       pReader->pOffsetList = &pReader->aDoclist[n];
                   120821:     }
                   120822:   }
                   120823:   return rc;
                   120824: }
                   120825: 
                   120826: /*
                   120827: ** Advance the SegReader to point to the next docid in the doclist
                   120828: ** associated with the current term.
                   120829: ** 
                   120830: ** If arguments ppOffsetList and pnOffsetList are not NULL, then 
                   120831: ** *ppOffsetList is set to point to the first column-offset list
                   120832: ** in the doclist entry (i.e. immediately past the docid varint).
                   120833: ** *pnOffsetList is set to the length of the set of column-offset
                   120834: ** lists, not including the nul-terminator byte. For example:
                   120835: */
                   120836: static int fts3SegReaderNextDocid(
                   120837:   Fts3Table *pTab,
                   120838:   Fts3SegReader *pReader,         /* Reader to advance to next docid */
                   120839:   char **ppOffsetList,            /* OUT: Pointer to current position-list */
                   120840:   int *pnOffsetList               /* OUT: Length of *ppOffsetList in bytes */
                   120841: ){
                   120842:   int rc = SQLITE_OK;
                   120843:   char *p = pReader->pOffsetList;
                   120844:   char c = 0;
                   120845: 
                   120846:   assert( p );
                   120847: 
                   120848:   if( pTab->bDescIdx && fts3SegReaderIsPending(pReader) ){
                   120849:     /* A pending-terms seg-reader for an FTS4 table that uses order=desc.
                   120850:     ** Pending-terms doclists are always built up in ascending order, so
                   120851:     ** we have to iterate through them backwards here. */
                   120852:     u8 bEof = 0;
                   120853:     if( ppOffsetList ){
                   120854:       *ppOffsetList = pReader->pOffsetList;
                   120855:       *pnOffsetList = pReader->nOffsetList - 1;
                   120856:     }
                   120857:     sqlite3Fts3DoclistPrev(0,
                   120858:         pReader->aDoclist, pReader->nDoclist, &p, &pReader->iDocid,
                   120859:         &pReader->nOffsetList, &bEof
                   120860:     );
                   120861:     if( bEof ){
                   120862:       pReader->pOffsetList = 0;
                   120863:     }else{
                   120864:       pReader->pOffsetList = p;
                   120865:     }
                   120866:   }else{
                   120867:     char *pEnd = &pReader->aDoclist[pReader->nDoclist];
                   120868: 
                   120869:     /* Pointer p currently points at the first byte of an offset list. The
                   120870:     ** following block advances it to point one byte past the end of
                   120871:     ** the same offset list. */
                   120872:     while( 1 ){
                   120873:   
                   120874:       /* The following line of code (and the "p++" below the while() loop) is
                   120875:       ** normally all that is required to move pointer p to the desired 
                   120876:       ** position. The exception is if this node is being loaded from disk
                   120877:       ** incrementally and pointer "p" now points to the first byte passed
                   120878:       ** the populated part of pReader->aNode[].
                   120879:       */
                   120880:       while( *p | c ) c = *p++ & 0x80;
                   120881:       assert( *p==0 );
                   120882:   
                   120883:       if( pReader->pBlob==0 || p<&pReader->aNode[pReader->nPopulate] ) break;
                   120884:       rc = fts3SegReaderIncrRead(pReader);
                   120885:       if( rc!=SQLITE_OK ) return rc;
                   120886:     }
                   120887:     p++;
                   120888:   
                   120889:     /* If required, populate the output variables with a pointer to and the
                   120890:     ** size of the previous offset-list.
                   120891:     */
                   120892:     if( ppOffsetList ){
                   120893:       *ppOffsetList = pReader->pOffsetList;
                   120894:       *pnOffsetList = (int)(p - pReader->pOffsetList - 1);
                   120895:     }
                   120896: 
                   120897:     while( p<pEnd && *p==0 ) p++;
                   120898:   
                   120899:     /* If there are no more entries in the doclist, set pOffsetList to
                   120900:     ** NULL. Otherwise, set Fts3SegReader.iDocid to the next docid and
                   120901:     ** Fts3SegReader.pOffsetList to point to the next offset list before
                   120902:     ** returning.
                   120903:     */
                   120904:     if( p>=pEnd ){
                   120905:       pReader->pOffsetList = 0;
                   120906:     }else{
                   120907:       rc = fts3SegReaderRequire(pReader, p, FTS3_VARINT_MAX);
                   120908:       if( rc==SQLITE_OK ){
                   120909:         sqlite3_int64 iDelta;
                   120910:         pReader->pOffsetList = p + sqlite3Fts3GetVarint(p, &iDelta);
                   120911:         if( pTab->bDescIdx ){
                   120912:           pReader->iDocid -= iDelta;
                   120913:         }else{
                   120914:           pReader->iDocid += iDelta;
                   120915:         }
                   120916:       }
                   120917:     }
                   120918:   }
                   120919: 
                   120920:   return SQLITE_OK;
                   120921: }
                   120922: 
                   120923: 
                   120924: SQLITE_PRIVATE int sqlite3Fts3MsrOvfl(
                   120925:   Fts3Cursor *pCsr, 
                   120926:   Fts3MultiSegReader *pMsr,
                   120927:   int *pnOvfl
                   120928: ){
                   120929:   Fts3Table *p = (Fts3Table*)pCsr->base.pVtab;
                   120930:   int nOvfl = 0;
                   120931:   int ii;
                   120932:   int rc = SQLITE_OK;
                   120933:   int pgsz = p->nPgsz;
                   120934: 
                   120935:   assert( p->bHasStat );
                   120936:   assert( pgsz>0 );
                   120937: 
                   120938:   for(ii=0; rc==SQLITE_OK && ii<pMsr->nSegment; ii++){
                   120939:     Fts3SegReader *pReader = pMsr->apSegment[ii];
                   120940:     if( !fts3SegReaderIsPending(pReader) 
                   120941:      && !fts3SegReaderIsRootOnly(pReader) 
                   120942:     ){
                   120943:       sqlite3_int64 jj;
                   120944:       for(jj=pReader->iStartBlock; jj<=pReader->iLeafEndBlock; jj++){
                   120945:         int nBlob;
                   120946:         rc = sqlite3Fts3ReadBlock(p, jj, 0, &nBlob, 0);
                   120947:         if( rc!=SQLITE_OK ) break;
                   120948:         if( (nBlob+35)>pgsz ){
                   120949:           nOvfl += (nBlob + 34)/pgsz;
                   120950:         }
                   120951:       }
                   120952:     }
                   120953:   }
                   120954:   *pnOvfl = nOvfl;
                   120955:   return rc;
                   120956: }
                   120957: 
                   120958: /*
                   120959: ** Free all allocations associated with the iterator passed as the 
                   120960: ** second argument.
                   120961: */
                   120962: SQLITE_PRIVATE void sqlite3Fts3SegReaderFree(Fts3SegReader *pReader){
                   120963:   if( pReader && !fts3SegReaderIsPending(pReader) ){
                   120964:     sqlite3_free(pReader->zTerm);
                   120965:     if( !fts3SegReaderIsRootOnly(pReader) ){
                   120966:       sqlite3_free(pReader->aNode);
                   120967:       sqlite3_blob_close(pReader->pBlob);
                   120968:     }
                   120969:   }
                   120970:   sqlite3_free(pReader);
                   120971: }
                   120972: 
                   120973: /*
                   120974: ** Allocate a new SegReader object.
                   120975: */
                   120976: SQLITE_PRIVATE int sqlite3Fts3SegReaderNew(
                   120977:   int iAge,                       /* Segment "age". */
                   120978:   sqlite3_int64 iStartLeaf,       /* First leaf to traverse */
                   120979:   sqlite3_int64 iEndLeaf,         /* Final leaf to traverse */
                   120980:   sqlite3_int64 iEndBlock,        /* Final block of segment */
                   120981:   const char *zRoot,              /* Buffer containing root node */
                   120982:   int nRoot,                      /* Size of buffer containing root node */
                   120983:   Fts3SegReader **ppReader        /* OUT: Allocated Fts3SegReader */
                   120984: ){
                   120985:   int rc = SQLITE_OK;             /* Return code */
                   120986:   Fts3SegReader *pReader;         /* Newly allocated SegReader object */
                   120987:   int nExtra = 0;                 /* Bytes to allocate segment root node */
                   120988: 
                   120989:   assert( iStartLeaf<=iEndLeaf );
                   120990:   if( iStartLeaf==0 ){
                   120991:     nExtra = nRoot + FTS3_NODE_PADDING;
                   120992:   }
                   120993: 
                   120994:   pReader = (Fts3SegReader *)sqlite3_malloc(sizeof(Fts3SegReader) + nExtra);
                   120995:   if( !pReader ){
                   120996:     return SQLITE_NOMEM;
                   120997:   }
                   120998:   memset(pReader, 0, sizeof(Fts3SegReader));
                   120999:   pReader->iIdx = iAge;
                   121000:   pReader->iStartBlock = iStartLeaf;
                   121001:   pReader->iLeafEndBlock = iEndLeaf;
                   121002:   pReader->iEndBlock = iEndBlock;
                   121003: 
                   121004:   if( nExtra ){
                   121005:     /* The entire segment is stored in the root node. */
                   121006:     pReader->aNode = (char *)&pReader[1];
                   121007:     pReader->nNode = nRoot;
                   121008:     memcpy(pReader->aNode, zRoot, nRoot);
                   121009:     memset(&pReader->aNode[nRoot], 0, FTS3_NODE_PADDING);
                   121010:   }else{
                   121011:     pReader->iCurrentBlock = iStartLeaf-1;
                   121012:   }
                   121013: 
                   121014:   if( rc==SQLITE_OK ){
                   121015:     *ppReader = pReader;
                   121016:   }else{
                   121017:     sqlite3Fts3SegReaderFree(pReader);
                   121018:   }
                   121019:   return rc;
                   121020: }
                   121021: 
                   121022: /*
                   121023: ** This is a comparison function used as a qsort() callback when sorting
                   121024: ** an array of pending terms by term. This occurs as part of flushing
                   121025: ** the contents of the pending-terms hash table to the database.
                   121026: */
                   121027: static int fts3CompareElemByTerm(const void *lhs, const void *rhs){
                   121028:   char *z1 = fts3HashKey(*(Fts3HashElem **)lhs);
                   121029:   char *z2 = fts3HashKey(*(Fts3HashElem **)rhs);
                   121030:   int n1 = fts3HashKeysize(*(Fts3HashElem **)lhs);
                   121031:   int n2 = fts3HashKeysize(*(Fts3HashElem **)rhs);
                   121032: 
                   121033:   int n = (n1<n2 ? n1 : n2);
                   121034:   int c = memcmp(z1, z2, n);
                   121035:   if( c==0 ){
                   121036:     c = n1 - n2;
                   121037:   }
                   121038:   return c;
                   121039: }
                   121040: 
                   121041: /*
                   121042: ** This function is used to allocate an Fts3SegReader that iterates through
                   121043: ** a subset of the terms stored in the Fts3Table.pendingTerms array.
                   121044: **
                   121045: ** If the isPrefixIter parameter is zero, then the returned SegReader iterates
                   121046: ** through each term in the pending-terms table. Or, if isPrefixIter is
                   121047: ** non-zero, it iterates through each term and its prefixes. For example, if
                   121048: ** the pending terms hash table contains the terms "sqlite", "mysql" and
                   121049: ** "firebird", then the iterator visits the following 'terms' (in the order
                   121050: ** shown):
                   121051: **
                   121052: **   f fi fir fire fireb firebi firebir firebird
                   121053: **   m my mys mysq mysql
                   121054: **   s sq sql sqli sqlit sqlite
                   121055: **
                   121056: ** Whereas if isPrefixIter is zero, the terms visited are:
                   121057: **
                   121058: **   firebird mysql sqlite
                   121059: */
                   121060: SQLITE_PRIVATE int sqlite3Fts3SegReaderPending(
                   121061:   Fts3Table *p,                   /* Virtual table handle */
                   121062:   int iIndex,                     /* Index for p->aIndex */
                   121063:   const char *zTerm,              /* Term to search for */
                   121064:   int nTerm,                      /* Size of buffer zTerm */
                   121065:   int bPrefix,                    /* True for a prefix iterator */
                   121066:   Fts3SegReader **ppReader        /* OUT: SegReader for pending-terms */
                   121067: ){
                   121068:   Fts3SegReader *pReader = 0;     /* Fts3SegReader object to return */
                   121069:   Fts3HashElem **aElem = 0;       /* Array of term hash entries to scan */
                   121070:   int nElem = 0;                  /* Size of array at aElem */
                   121071:   int rc = SQLITE_OK;             /* Return Code */
                   121072:   Fts3Hash *pHash;
                   121073: 
                   121074:   pHash = &p->aIndex[iIndex].hPending;
                   121075:   if( bPrefix ){
                   121076:     int nAlloc = 0;               /* Size of allocated array at aElem */
                   121077:     Fts3HashElem *pE = 0;         /* Iterator variable */
                   121078: 
                   121079:     for(pE=fts3HashFirst(pHash); pE; pE=fts3HashNext(pE)){
                   121080:       char *zKey = (char *)fts3HashKey(pE);
                   121081:       int nKey = fts3HashKeysize(pE);
                   121082:       if( nTerm==0 || (nKey>=nTerm && 0==memcmp(zKey, zTerm, nTerm)) ){
                   121083:         if( nElem==nAlloc ){
                   121084:           Fts3HashElem **aElem2;
                   121085:           nAlloc += 16;
                   121086:           aElem2 = (Fts3HashElem **)sqlite3_realloc(
                   121087:               aElem, nAlloc*sizeof(Fts3HashElem *)
                   121088:           );
                   121089:           if( !aElem2 ){
                   121090:             rc = SQLITE_NOMEM;
                   121091:             nElem = 0;
                   121092:             break;
                   121093:           }
                   121094:           aElem = aElem2;
                   121095:         }
                   121096: 
                   121097:         aElem[nElem++] = pE;
                   121098:       }
                   121099:     }
                   121100: 
                   121101:     /* If more than one term matches the prefix, sort the Fts3HashElem
                   121102:     ** objects in term order using qsort(). This uses the same comparison
                   121103:     ** callback as is used when flushing terms to disk.
                   121104:     */
                   121105:     if( nElem>1 ){
                   121106:       qsort(aElem, nElem, sizeof(Fts3HashElem *), fts3CompareElemByTerm);
                   121107:     }
                   121108: 
                   121109:   }else{
                   121110:     /* The query is a simple term lookup that matches at most one term in
                   121111:     ** the index. All that is required is a straight hash-lookup. */
                   121112:     Fts3HashElem *pE = fts3HashFindElem(pHash, zTerm, nTerm);
                   121113:     if( pE ){
                   121114:       aElem = &pE;
                   121115:       nElem = 1;
                   121116:     }
                   121117:   }
                   121118: 
                   121119:   if( nElem>0 ){
                   121120:     int nByte = sizeof(Fts3SegReader) + (nElem+1)*sizeof(Fts3HashElem *);
                   121121:     pReader = (Fts3SegReader *)sqlite3_malloc(nByte);
                   121122:     if( !pReader ){
                   121123:       rc = SQLITE_NOMEM;
                   121124:     }else{
                   121125:       memset(pReader, 0, nByte);
                   121126:       pReader->iIdx = 0x7FFFFFFF;
                   121127:       pReader->ppNextElem = (Fts3HashElem **)&pReader[1];
                   121128:       memcpy(pReader->ppNextElem, aElem, nElem*sizeof(Fts3HashElem *));
                   121129:     }
                   121130:   }
                   121131: 
                   121132:   if( bPrefix ){
                   121133:     sqlite3_free(aElem);
                   121134:   }
                   121135:   *ppReader = pReader;
                   121136:   return rc;
                   121137: }
                   121138: 
                   121139: /*
                   121140: ** Compare the entries pointed to by two Fts3SegReader structures. 
                   121141: ** Comparison is as follows:
                   121142: **
                   121143: **   1) EOF is greater than not EOF.
                   121144: **
                   121145: **   2) The current terms (if any) are compared using memcmp(). If one
                   121146: **      term is a prefix of another, the longer term is considered the
                   121147: **      larger.
                   121148: **
                   121149: **   3) By segment age. An older segment is considered larger.
                   121150: */
                   121151: static int fts3SegReaderCmp(Fts3SegReader *pLhs, Fts3SegReader *pRhs){
                   121152:   int rc;
                   121153:   if( pLhs->aNode && pRhs->aNode ){
                   121154:     int rc2 = pLhs->nTerm - pRhs->nTerm;
                   121155:     if( rc2<0 ){
                   121156:       rc = memcmp(pLhs->zTerm, pRhs->zTerm, pLhs->nTerm);
                   121157:     }else{
                   121158:       rc = memcmp(pLhs->zTerm, pRhs->zTerm, pRhs->nTerm);
                   121159:     }
                   121160:     if( rc==0 ){
                   121161:       rc = rc2;
                   121162:     }
                   121163:   }else{
                   121164:     rc = (pLhs->aNode==0) - (pRhs->aNode==0);
                   121165:   }
                   121166:   if( rc==0 ){
                   121167:     rc = pRhs->iIdx - pLhs->iIdx;
                   121168:   }
                   121169:   assert( rc!=0 );
                   121170:   return rc;
                   121171: }
                   121172: 
                   121173: /*
                   121174: ** A different comparison function for SegReader structures. In this
                   121175: ** version, it is assumed that each SegReader points to an entry in
                   121176: ** a doclist for identical terms. Comparison is made as follows:
                   121177: **
                   121178: **   1) EOF (end of doclist in this case) is greater than not EOF.
                   121179: **
                   121180: **   2) By current docid.
                   121181: **
                   121182: **   3) By segment age. An older segment is considered larger.
                   121183: */
                   121184: static int fts3SegReaderDoclistCmp(Fts3SegReader *pLhs, Fts3SegReader *pRhs){
                   121185:   int rc = (pLhs->pOffsetList==0)-(pRhs->pOffsetList==0);
                   121186:   if( rc==0 ){
                   121187:     if( pLhs->iDocid==pRhs->iDocid ){
                   121188:       rc = pRhs->iIdx - pLhs->iIdx;
                   121189:     }else{
                   121190:       rc = (pLhs->iDocid > pRhs->iDocid) ? 1 : -1;
                   121191:     }
                   121192:   }
                   121193:   assert( pLhs->aNode && pRhs->aNode );
                   121194:   return rc;
                   121195: }
                   121196: static int fts3SegReaderDoclistCmpRev(Fts3SegReader *pLhs, Fts3SegReader *pRhs){
                   121197:   int rc = (pLhs->pOffsetList==0)-(pRhs->pOffsetList==0);
                   121198:   if( rc==0 ){
                   121199:     if( pLhs->iDocid==pRhs->iDocid ){
                   121200:       rc = pRhs->iIdx - pLhs->iIdx;
                   121201:     }else{
                   121202:       rc = (pLhs->iDocid < pRhs->iDocid) ? 1 : -1;
                   121203:     }
                   121204:   }
                   121205:   assert( pLhs->aNode && pRhs->aNode );
                   121206:   return rc;
                   121207: }
                   121208: 
                   121209: /*
                   121210: ** Compare the term that the Fts3SegReader object passed as the first argument
                   121211: ** points to with the term specified by arguments zTerm and nTerm. 
                   121212: **
                   121213: ** If the pSeg iterator is already at EOF, return 0. Otherwise, return
                   121214: ** -ve if the pSeg term is less than zTerm/nTerm, 0 if the two terms are
                   121215: ** equal, or +ve if the pSeg term is greater than zTerm/nTerm.
                   121216: */
                   121217: static int fts3SegReaderTermCmp(
                   121218:   Fts3SegReader *pSeg,            /* Segment reader object */
                   121219:   const char *zTerm,              /* Term to compare to */
                   121220:   int nTerm                       /* Size of term zTerm in bytes */
                   121221: ){
                   121222:   int res = 0;
                   121223:   if( pSeg->aNode ){
                   121224:     if( pSeg->nTerm>nTerm ){
                   121225:       res = memcmp(pSeg->zTerm, zTerm, nTerm);
                   121226:     }else{
                   121227:       res = memcmp(pSeg->zTerm, zTerm, pSeg->nTerm);
                   121228:     }
                   121229:     if( res==0 ){
                   121230:       res = pSeg->nTerm-nTerm;
                   121231:     }
                   121232:   }
                   121233:   return res;
                   121234: }
                   121235: 
                   121236: /*
                   121237: ** Argument apSegment is an array of nSegment elements. It is known that
                   121238: ** the final (nSegment-nSuspect) members are already in sorted order
                   121239: ** (according to the comparison function provided). This function shuffles
                   121240: ** the array around until all entries are in sorted order.
                   121241: */
                   121242: static void fts3SegReaderSort(
                   121243:   Fts3SegReader **apSegment,                     /* Array to sort entries of */
                   121244:   int nSegment,                                  /* Size of apSegment array */
                   121245:   int nSuspect,                                  /* Unsorted entry count */
                   121246:   int (*xCmp)(Fts3SegReader *, Fts3SegReader *)  /* Comparison function */
                   121247: ){
                   121248:   int i;                          /* Iterator variable */
                   121249: 
                   121250:   assert( nSuspect<=nSegment );
                   121251: 
                   121252:   if( nSuspect==nSegment ) nSuspect--;
                   121253:   for(i=nSuspect-1; i>=0; i--){
                   121254:     int j;
                   121255:     for(j=i; j<(nSegment-1); j++){
                   121256:       Fts3SegReader *pTmp;
                   121257:       if( xCmp(apSegment[j], apSegment[j+1])<0 ) break;
                   121258:       pTmp = apSegment[j+1];
                   121259:       apSegment[j+1] = apSegment[j];
                   121260:       apSegment[j] = pTmp;
                   121261:     }
                   121262:   }
                   121263: 
                   121264: #ifndef NDEBUG
                   121265:   /* Check that the list really is sorted now. */
                   121266:   for(i=0; i<(nSuspect-1); i++){
                   121267:     assert( xCmp(apSegment[i], apSegment[i+1])<0 );
                   121268:   }
                   121269: #endif
                   121270: }
                   121271: 
                   121272: /* 
                   121273: ** Insert a record into the %_segments table.
                   121274: */
                   121275: static int fts3WriteSegment(
                   121276:   Fts3Table *p,                   /* Virtual table handle */
                   121277:   sqlite3_int64 iBlock,           /* Block id for new block */
                   121278:   char *z,                        /* Pointer to buffer containing block data */
                   121279:   int n                           /* Size of buffer z in bytes */
                   121280: ){
                   121281:   sqlite3_stmt *pStmt;
                   121282:   int rc = fts3SqlStmt(p, SQL_INSERT_SEGMENTS, &pStmt, 0);
                   121283:   if( rc==SQLITE_OK ){
                   121284:     sqlite3_bind_int64(pStmt, 1, iBlock);
                   121285:     sqlite3_bind_blob(pStmt, 2, z, n, SQLITE_STATIC);
                   121286:     sqlite3_step(pStmt);
                   121287:     rc = sqlite3_reset(pStmt);
                   121288:   }
                   121289:   return rc;
                   121290: }
                   121291: 
                   121292: /* 
                   121293: ** Insert a record into the %_segdir table.
                   121294: */
                   121295: static int fts3WriteSegdir(
                   121296:   Fts3Table *p,                   /* Virtual table handle */
                   121297:   int iLevel,                     /* Value for "level" field */
                   121298:   int iIdx,                       /* Value for "idx" field */
                   121299:   sqlite3_int64 iStartBlock,      /* Value for "start_block" field */
                   121300:   sqlite3_int64 iLeafEndBlock,    /* Value for "leaves_end_block" field */
                   121301:   sqlite3_int64 iEndBlock,        /* Value for "end_block" field */
                   121302:   char *zRoot,                    /* Blob value for "root" field */
                   121303:   int nRoot                       /* Number of bytes in buffer zRoot */
                   121304: ){
                   121305:   sqlite3_stmt *pStmt;
                   121306:   int rc = fts3SqlStmt(p, SQL_INSERT_SEGDIR, &pStmt, 0);
                   121307:   if( rc==SQLITE_OK ){
                   121308:     sqlite3_bind_int(pStmt, 1, iLevel);
                   121309:     sqlite3_bind_int(pStmt, 2, iIdx);
                   121310:     sqlite3_bind_int64(pStmt, 3, iStartBlock);
                   121311:     sqlite3_bind_int64(pStmt, 4, iLeafEndBlock);
                   121312:     sqlite3_bind_int64(pStmt, 5, iEndBlock);
                   121313:     sqlite3_bind_blob(pStmt, 6, zRoot, nRoot, SQLITE_STATIC);
                   121314:     sqlite3_step(pStmt);
                   121315:     rc = sqlite3_reset(pStmt);
                   121316:   }
                   121317:   return rc;
                   121318: }
                   121319: 
                   121320: /*
                   121321: ** Return the size of the common prefix (if any) shared by zPrev and
                   121322: ** zNext, in bytes. For example, 
                   121323: **
                   121324: **   fts3PrefixCompress("abc", 3, "abcdef", 6)   // returns 3
                   121325: **   fts3PrefixCompress("abX", 3, "abcdef", 6)   // returns 2
                   121326: **   fts3PrefixCompress("abX", 3, "Xbcdef", 6)   // returns 0
                   121327: */
                   121328: static int fts3PrefixCompress(
                   121329:   const char *zPrev,              /* Buffer containing previous term */
                   121330:   int nPrev,                      /* Size of buffer zPrev in bytes */
                   121331:   const char *zNext,              /* Buffer containing next term */
                   121332:   int nNext                       /* Size of buffer zNext in bytes */
                   121333: ){
                   121334:   int n;
                   121335:   UNUSED_PARAMETER(nNext);
                   121336:   for(n=0; n<nPrev && zPrev[n]==zNext[n]; n++);
                   121337:   return n;
                   121338: }
                   121339: 
                   121340: /*
                   121341: ** Add term zTerm to the SegmentNode. It is guaranteed that zTerm is larger
                   121342: ** (according to memcmp) than the previous term.
                   121343: */
                   121344: static int fts3NodeAddTerm(
                   121345:   Fts3Table *p,                   /* Virtual table handle */
                   121346:   SegmentNode **ppTree,           /* IN/OUT: SegmentNode handle */ 
                   121347:   int isCopyTerm,                 /* True if zTerm/nTerm is transient */
                   121348:   const char *zTerm,              /* Pointer to buffer containing term */
                   121349:   int nTerm                       /* Size of term in bytes */
                   121350: ){
                   121351:   SegmentNode *pTree = *ppTree;
                   121352:   int rc;
                   121353:   SegmentNode *pNew;
                   121354: 
                   121355:   /* First try to append the term to the current node. Return early if 
                   121356:   ** this is possible.
                   121357:   */
                   121358:   if( pTree ){
                   121359:     int nData = pTree->nData;     /* Current size of node in bytes */
                   121360:     int nReq = nData;             /* Required space after adding zTerm */
                   121361:     int nPrefix;                  /* Number of bytes of prefix compression */
                   121362:     int nSuffix;                  /* Suffix length */
                   121363: 
                   121364:     nPrefix = fts3PrefixCompress(pTree->zTerm, pTree->nTerm, zTerm, nTerm);
                   121365:     nSuffix = nTerm-nPrefix;
                   121366: 
                   121367:     nReq += sqlite3Fts3VarintLen(nPrefix)+sqlite3Fts3VarintLen(nSuffix)+nSuffix;
                   121368:     if( nReq<=p->nNodeSize || !pTree->zTerm ){
                   121369: 
                   121370:       if( nReq>p->nNodeSize ){
                   121371:         /* An unusual case: this is the first term to be added to the node
                   121372:         ** and the static node buffer (p->nNodeSize bytes) is not large
                   121373:         ** enough. Use a separately malloced buffer instead This wastes
                   121374:         ** p->nNodeSize bytes, but since this scenario only comes about when
                   121375:         ** the database contain two terms that share a prefix of almost 2KB, 
                   121376:         ** this is not expected to be a serious problem. 
                   121377:         */
                   121378:         assert( pTree->aData==(char *)&pTree[1] );
                   121379:         pTree->aData = (char *)sqlite3_malloc(nReq);
                   121380:         if( !pTree->aData ){
                   121381:           return SQLITE_NOMEM;
                   121382:         }
                   121383:       }
                   121384: 
                   121385:       if( pTree->zTerm ){
                   121386:         /* There is no prefix-length field for first term in a node */
                   121387:         nData += sqlite3Fts3PutVarint(&pTree->aData[nData], nPrefix);
                   121388:       }
                   121389: 
                   121390:       nData += sqlite3Fts3PutVarint(&pTree->aData[nData], nSuffix);
                   121391:       memcpy(&pTree->aData[nData], &zTerm[nPrefix], nSuffix);
                   121392:       pTree->nData = nData + nSuffix;
                   121393:       pTree->nEntry++;
                   121394: 
                   121395:       if( isCopyTerm ){
                   121396:         if( pTree->nMalloc<nTerm ){
                   121397:           char *zNew = sqlite3_realloc(pTree->zMalloc, nTerm*2);
                   121398:           if( !zNew ){
                   121399:             return SQLITE_NOMEM;
                   121400:           }
                   121401:           pTree->nMalloc = nTerm*2;
                   121402:           pTree->zMalloc = zNew;
                   121403:         }
                   121404:         pTree->zTerm = pTree->zMalloc;
                   121405:         memcpy(pTree->zTerm, zTerm, nTerm);
                   121406:         pTree->nTerm = nTerm;
                   121407:       }else{
                   121408:         pTree->zTerm = (char *)zTerm;
                   121409:         pTree->nTerm = nTerm;
                   121410:       }
                   121411:       return SQLITE_OK;
                   121412:     }
                   121413:   }
                   121414: 
                   121415:   /* If control flows to here, it was not possible to append zTerm to the
                   121416:   ** current node. Create a new node (a right-sibling of the current node).
                   121417:   ** If this is the first node in the tree, the term is added to it.
                   121418:   **
                   121419:   ** Otherwise, the term is not added to the new node, it is left empty for
                   121420:   ** now. Instead, the term is inserted into the parent of pTree. If pTree 
                   121421:   ** has no parent, one is created here.
                   121422:   */
                   121423:   pNew = (SegmentNode *)sqlite3_malloc(sizeof(SegmentNode) + p->nNodeSize);
                   121424:   if( !pNew ){
                   121425:     return SQLITE_NOMEM;
                   121426:   }
                   121427:   memset(pNew, 0, sizeof(SegmentNode));
                   121428:   pNew->nData = 1 + FTS3_VARINT_MAX;
                   121429:   pNew->aData = (char *)&pNew[1];
                   121430: 
                   121431:   if( pTree ){
                   121432:     SegmentNode *pParent = pTree->pParent;
                   121433:     rc = fts3NodeAddTerm(p, &pParent, isCopyTerm, zTerm, nTerm);
                   121434:     if( pTree->pParent==0 ){
                   121435:       pTree->pParent = pParent;
                   121436:     }
                   121437:     pTree->pRight = pNew;
                   121438:     pNew->pLeftmost = pTree->pLeftmost;
                   121439:     pNew->pParent = pParent;
                   121440:     pNew->zMalloc = pTree->zMalloc;
                   121441:     pNew->nMalloc = pTree->nMalloc;
                   121442:     pTree->zMalloc = 0;
                   121443:   }else{
                   121444:     pNew->pLeftmost = pNew;
                   121445:     rc = fts3NodeAddTerm(p, &pNew, isCopyTerm, zTerm, nTerm); 
                   121446:   }
                   121447: 
                   121448:   *ppTree = pNew;
                   121449:   return rc;
                   121450: }
                   121451: 
                   121452: /*
                   121453: ** Helper function for fts3NodeWrite().
                   121454: */
                   121455: static int fts3TreeFinishNode(
                   121456:   SegmentNode *pTree, 
                   121457:   int iHeight, 
                   121458:   sqlite3_int64 iLeftChild
                   121459: ){
                   121460:   int nStart;
                   121461:   assert( iHeight>=1 && iHeight<128 );
                   121462:   nStart = FTS3_VARINT_MAX - sqlite3Fts3VarintLen(iLeftChild);
                   121463:   pTree->aData[nStart] = (char)iHeight;
                   121464:   sqlite3Fts3PutVarint(&pTree->aData[nStart+1], iLeftChild);
                   121465:   return nStart;
                   121466: }
                   121467: 
                   121468: /*
                   121469: ** Write the buffer for the segment node pTree and all of its peers to the
                   121470: ** database. Then call this function recursively to write the parent of 
                   121471: ** pTree and its peers to the database. 
                   121472: **
                   121473: ** Except, if pTree is a root node, do not write it to the database. Instead,
                   121474: ** set output variables *paRoot and *pnRoot to contain the root node.
                   121475: **
                   121476: ** If successful, SQLITE_OK is returned and output variable *piLast is
                   121477: ** set to the largest blockid written to the database (or zero if no
                   121478: ** blocks were written to the db). Otherwise, an SQLite error code is 
                   121479: ** returned.
                   121480: */
                   121481: static int fts3NodeWrite(
                   121482:   Fts3Table *p,                   /* Virtual table handle */
                   121483:   SegmentNode *pTree,             /* SegmentNode handle */
                   121484:   int iHeight,                    /* Height of this node in tree */
                   121485:   sqlite3_int64 iLeaf,            /* Block id of first leaf node */
                   121486:   sqlite3_int64 iFree,            /* Block id of next free slot in %_segments */
                   121487:   sqlite3_int64 *piLast,          /* OUT: Block id of last entry written */
                   121488:   char **paRoot,                  /* OUT: Data for root node */
                   121489:   int *pnRoot                     /* OUT: Size of root node in bytes */
                   121490: ){
                   121491:   int rc = SQLITE_OK;
                   121492: 
                   121493:   if( !pTree->pParent ){
                   121494:     /* Root node of the tree. */
                   121495:     int nStart = fts3TreeFinishNode(pTree, iHeight, iLeaf);
                   121496:     *piLast = iFree-1;
                   121497:     *pnRoot = pTree->nData - nStart;
                   121498:     *paRoot = &pTree->aData[nStart];
                   121499:   }else{
                   121500:     SegmentNode *pIter;
                   121501:     sqlite3_int64 iNextFree = iFree;
                   121502:     sqlite3_int64 iNextLeaf = iLeaf;
                   121503:     for(pIter=pTree->pLeftmost; pIter && rc==SQLITE_OK; pIter=pIter->pRight){
                   121504:       int nStart = fts3TreeFinishNode(pIter, iHeight, iNextLeaf);
                   121505:       int nWrite = pIter->nData - nStart;
                   121506:   
                   121507:       rc = fts3WriteSegment(p, iNextFree, &pIter->aData[nStart], nWrite);
                   121508:       iNextFree++;
                   121509:       iNextLeaf += (pIter->nEntry+1);
                   121510:     }
                   121511:     if( rc==SQLITE_OK ){
                   121512:       assert( iNextLeaf==iFree );
                   121513:       rc = fts3NodeWrite(
                   121514:           p, pTree->pParent, iHeight+1, iFree, iNextFree, piLast, paRoot, pnRoot
                   121515:       );
                   121516:     }
                   121517:   }
                   121518: 
                   121519:   return rc;
                   121520: }
                   121521: 
                   121522: /*
                   121523: ** Free all memory allocations associated with the tree pTree.
                   121524: */
                   121525: static void fts3NodeFree(SegmentNode *pTree){
                   121526:   if( pTree ){
                   121527:     SegmentNode *p = pTree->pLeftmost;
                   121528:     fts3NodeFree(p->pParent);
                   121529:     while( p ){
                   121530:       SegmentNode *pRight = p->pRight;
                   121531:       if( p->aData!=(char *)&p[1] ){
                   121532:         sqlite3_free(p->aData);
                   121533:       }
                   121534:       assert( pRight==0 || p->zMalloc==0 );
                   121535:       sqlite3_free(p->zMalloc);
                   121536:       sqlite3_free(p);
                   121537:       p = pRight;
                   121538:     }
                   121539:   }
                   121540: }
                   121541: 
                   121542: /*
                   121543: ** Add a term to the segment being constructed by the SegmentWriter object
                   121544: ** *ppWriter. When adding the first term to a segment, *ppWriter should
                   121545: ** be passed NULL. This function will allocate a new SegmentWriter object
                   121546: ** and return it via the input/output variable *ppWriter in this case.
                   121547: **
                   121548: ** If successful, SQLITE_OK is returned. Otherwise, an SQLite error code.
                   121549: */
                   121550: static int fts3SegWriterAdd(
                   121551:   Fts3Table *p,                   /* Virtual table handle */
                   121552:   SegmentWriter **ppWriter,       /* IN/OUT: SegmentWriter handle */ 
                   121553:   int isCopyTerm,                 /* True if buffer zTerm must be copied */
                   121554:   const char *zTerm,              /* Pointer to buffer containing term */
                   121555:   int nTerm,                      /* Size of term in bytes */
                   121556:   const char *aDoclist,           /* Pointer to buffer containing doclist */
                   121557:   int nDoclist                    /* Size of doclist in bytes */
                   121558: ){
                   121559:   int nPrefix;                    /* Size of term prefix in bytes */
                   121560:   int nSuffix;                    /* Size of term suffix in bytes */
                   121561:   int nReq;                       /* Number of bytes required on leaf page */
                   121562:   int nData;
                   121563:   SegmentWriter *pWriter = *ppWriter;
                   121564: 
                   121565:   if( !pWriter ){
                   121566:     int rc;
                   121567:     sqlite3_stmt *pStmt;
                   121568: 
                   121569:     /* Allocate the SegmentWriter structure */
                   121570:     pWriter = (SegmentWriter *)sqlite3_malloc(sizeof(SegmentWriter));
                   121571:     if( !pWriter ) return SQLITE_NOMEM;
                   121572:     memset(pWriter, 0, sizeof(SegmentWriter));
                   121573:     *ppWriter = pWriter;
                   121574: 
                   121575:     /* Allocate a buffer in which to accumulate data */
                   121576:     pWriter->aData = (char *)sqlite3_malloc(p->nNodeSize);
                   121577:     if( !pWriter->aData ) return SQLITE_NOMEM;
                   121578:     pWriter->nSize = p->nNodeSize;
                   121579: 
                   121580:     /* Find the next free blockid in the %_segments table */
                   121581:     rc = fts3SqlStmt(p, SQL_NEXT_SEGMENTS_ID, &pStmt, 0);
                   121582:     if( rc!=SQLITE_OK ) return rc;
                   121583:     if( SQLITE_ROW==sqlite3_step(pStmt) ){
                   121584:       pWriter->iFree = sqlite3_column_int64(pStmt, 0);
                   121585:       pWriter->iFirst = pWriter->iFree;
                   121586:     }
                   121587:     rc = sqlite3_reset(pStmt);
                   121588:     if( rc!=SQLITE_OK ) return rc;
                   121589:   }
                   121590:   nData = pWriter->nData;
                   121591: 
                   121592:   nPrefix = fts3PrefixCompress(pWriter->zTerm, pWriter->nTerm, zTerm, nTerm);
                   121593:   nSuffix = nTerm-nPrefix;
                   121594: 
                   121595:   /* Figure out how many bytes are required by this new entry */
                   121596:   nReq = sqlite3Fts3VarintLen(nPrefix) +    /* varint containing prefix size */
                   121597:     sqlite3Fts3VarintLen(nSuffix) +         /* varint containing suffix size */
                   121598:     nSuffix +                               /* Term suffix */
                   121599:     sqlite3Fts3VarintLen(nDoclist) +        /* Size of doclist */
                   121600:     nDoclist;                               /* Doclist data */
                   121601: 
                   121602:   if( nData>0 && nData+nReq>p->nNodeSize ){
                   121603:     int rc;
                   121604: 
                   121605:     /* The current leaf node is full. Write it out to the database. */
                   121606:     rc = fts3WriteSegment(p, pWriter->iFree++, pWriter->aData, nData);
                   121607:     if( rc!=SQLITE_OK ) return rc;
                   121608: 
                   121609:     /* Add the current term to the interior node tree. The term added to
                   121610:     ** the interior tree must:
                   121611:     **
                   121612:     **   a) be greater than the largest term on the leaf node just written
                   121613:     **      to the database (still available in pWriter->zTerm), and
                   121614:     **
                   121615:     **   b) be less than or equal to the term about to be added to the new
                   121616:     **      leaf node (zTerm/nTerm).
                   121617:     **
                   121618:     ** In other words, it must be the prefix of zTerm 1 byte longer than
                   121619:     ** the common prefix (if any) of zTerm and pWriter->zTerm.
                   121620:     */
                   121621:     assert( nPrefix<nTerm );
                   121622:     rc = fts3NodeAddTerm(p, &pWriter->pTree, isCopyTerm, zTerm, nPrefix+1);
                   121623:     if( rc!=SQLITE_OK ) return rc;
                   121624: 
                   121625:     nData = 0;
                   121626:     pWriter->nTerm = 0;
                   121627: 
                   121628:     nPrefix = 0;
                   121629:     nSuffix = nTerm;
                   121630:     nReq = 1 +                              /* varint containing prefix size */
                   121631:       sqlite3Fts3VarintLen(nTerm) +         /* varint containing suffix size */
                   121632:       nTerm +                               /* Term suffix */
                   121633:       sqlite3Fts3VarintLen(nDoclist) +      /* Size of doclist */
                   121634:       nDoclist;                             /* Doclist data */
                   121635:   }
                   121636: 
                   121637:   /* If the buffer currently allocated is too small for this entry, realloc
                   121638:   ** the buffer to make it large enough.
                   121639:   */
                   121640:   if( nReq>pWriter->nSize ){
                   121641:     char *aNew = sqlite3_realloc(pWriter->aData, nReq);
                   121642:     if( !aNew ) return SQLITE_NOMEM;
                   121643:     pWriter->aData = aNew;
                   121644:     pWriter->nSize = nReq;
                   121645:   }
                   121646:   assert( nData+nReq<=pWriter->nSize );
                   121647: 
                   121648:   /* Append the prefix-compressed term and doclist to the buffer. */
                   121649:   nData += sqlite3Fts3PutVarint(&pWriter->aData[nData], nPrefix);
                   121650:   nData += sqlite3Fts3PutVarint(&pWriter->aData[nData], nSuffix);
                   121651:   memcpy(&pWriter->aData[nData], &zTerm[nPrefix], nSuffix);
                   121652:   nData += nSuffix;
                   121653:   nData += sqlite3Fts3PutVarint(&pWriter->aData[nData], nDoclist);
                   121654:   memcpy(&pWriter->aData[nData], aDoclist, nDoclist);
                   121655:   pWriter->nData = nData + nDoclist;
                   121656: 
                   121657:   /* Save the current term so that it can be used to prefix-compress the next.
                   121658:   ** If the isCopyTerm parameter is true, then the buffer pointed to by
                   121659:   ** zTerm is transient, so take a copy of the term data. Otherwise, just
                   121660:   ** store a copy of the pointer.
                   121661:   */
                   121662:   if( isCopyTerm ){
                   121663:     if( nTerm>pWriter->nMalloc ){
                   121664:       char *zNew = sqlite3_realloc(pWriter->zMalloc, nTerm*2);
                   121665:       if( !zNew ){
                   121666:         return SQLITE_NOMEM;
                   121667:       }
                   121668:       pWriter->nMalloc = nTerm*2;
                   121669:       pWriter->zMalloc = zNew;
                   121670:       pWriter->zTerm = zNew;
                   121671:     }
                   121672:     assert( pWriter->zTerm==pWriter->zMalloc );
                   121673:     memcpy(pWriter->zTerm, zTerm, nTerm);
                   121674:   }else{
                   121675:     pWriter->zTerm = (char *)zTerm;
                   121676:   }
                   121677:   pWriter->nTerm = nTerm;
                   121678: 
                   121679:   return SQLITE_OK;
                   121680: }
                   121681: 
                   121682: /*
                   121683: ** Flush all data associated with the SegmentWriter object pWriter to the
                   121684: ** database. This function must be called after all terms have been added
                   121685: ** to the segment using fts3SegWriterAdd(). If successful, SQLITE_OK is
                   121686: ** returned. Otherwise, an SQLite error code.
                   121687: */
                   121688: static int fts3SegWriterFlush(
                   121689:   Fts3Table *p,                   /* Virtual table handle */
                   121690:   SegmentWriter *pWriter,         /* SegmentWriter to flush to the db */
                   121691:   int iLevel,                     /* Value for 'level' column of %_segdir */
                   121692:   int iIdx                        /* Value for 'idx' column of %_segdir */
                   121693: ){
                   121694:   int rc;                         /* Return code */
                   121695:   if( pWriter->pTree ){
                   121696:     sqlite3_int64 iLast = 0;      /* Largest block id written to database */
                   121697:     sqlite3_int64 iLastLeaf;      /* Largest leaf block id written to db */
                   121698:     char *zRoot = NULL;           /* Pointer to buffer containing root node */
                   121699:     int nRoot = 0;                /* Size of buffer zRoot */
                   121700: 
                   121701:     iLastLeaf = pWriter->iFree;
                   121702:     rc = fts3WriteSegment(p, pWriter->iFree++, pWriter->aData, pWriter->nData);
                   121703:     if( rc==SQLITE_OK ){
                   121704:       rc = fts3NodeWrite(p, pWriter->pTree, 1,
                   121705:           pWriter->iFirst, pWriter->iFree, &iLast, &zRoot, &nRoot);
                   121706:     }
                   121707:     if( rc==SQLITE_OK ){
                   121708:       rc = fts3WriteSegdir(
                   121709:           p, iLevel, iIdx, pWriter->iFirst, iLastLeaf, iLast, zRoot, nRoot);
                   121710:     }
                   121711:   }else{
                   121712:     /* The entire tree fits on the root node. Write it to the segdir table. */
                   121713:     rc = fts3WriteSegdir(
                   121714:         p, iLevel, iIdx, 0, 0, 0, pWriter->aData, pWriter->nData);
                   121715:   }
                   121716:   return rc;
                   121717: }
                   121718: 
                   121719: /*
                   121720: ** Release all memory held by the SegmentWriter object passed as the 
                   121721: ** first argument.
                   121722: */
                   121723: static void fts3SegWriterFree(SegmentWriter *pWriter){
                   121724:   if( pWriter ){
                   121725:     sqlite3_free(pWriter->aData);
                   121726:     sqlite3_free(pWriter->zMalloc);
                   121727:     fts3NodeFree(pWriter->pTree);
                   121728:     sqlite3_free(pWriter);
                   121729:   }
                   121730: }
                   121731: 
                   121732: /*
                   121733: ** The first value in the apVal[] array is assumed to contain an integer.
                   121734: ** This function tests if there exist any documents with docid values that
                   121735: ** are different from that integer. i.e. if deleting the document with docid
                   121736: ** pRowid would mean the FTS3 table were empty.
                   121737: **
                   121738: ** If successful, *pisEmpty is set to true if the table is empty except for
                   121739: ** document pRowid, or false otherwise, and SQLITE_OK is returned. If an
                   121740: ** error occurs, an SQLite error code is returned.
                   121741: */
                   121742: static int fts3IsEmpty(Fts3Table *p, sqlite3_value *pRowid, int *pisEmpty){
                   121743:   sqlite3_stmt *pStmt;
                   121744:   int rc;
                   121745:   rc = fts3SqlStmt(p, SQL_IS_EMPTY, &pStmt, &pRowid);
                   121746:   if( rc==SQLITE_OK ){
                   121747:     if( SQLITE_ROW==sqlite3_step(pStmt) ){
                   121748:       *pisEmpty = sqlite3_column_int(pStmt, 0);
                   121749:     }
                   121750:     rc = sqlite3_reset(pStmt);
                   121751:   }
                   121752:   return rc;
                   121753: }
                   121754: 
                   121755: /*
                   121756: ** Set *pnMax to the largest segment level in the database for the index
                   121757: ** iIndex.
                   121758: **
                   121759: ** Segment levels are stored in the 'level' column of the %_segdir table.
                   121760: **
                   121761: ** Return SQLITE_OK if successful, or an SQLite error code if not.
                   121762: */
                   121763: static int fts3SegmentMaxLevel(Fts3Table *p, int iIndex, int *pnMax){
                   121764:   sqlite3_stmt *pStmt;
                   121765:   int rc;
                   121766:   assert( iIndex>=0 && iIndex<p->nIndex );
                   121767: 
                   121768:   /* Set pStmt to the compiled version of:
                   121769:   **
                   121770:   **   SELECT max(level) FROM %Q.'%q_segdir' WHERE level BETWEEN ? AND ?
                   121771:   **
                   121772:   ** (1024 is actually the value of macro FTS3_SEGDIR_PREFIXLEVEL_STR).
                   121773:   */
                   121774:   rc = fts3SqlStmt(p, SQL_SELECT_SEGDIR_MAX_LEVEL, &pStmt, 0);
                   121775:   if( rc!=SQLITE_OK ) return rc;
                   121776:   sqlite3_bind_int(pStmt, 1, iIndex*FTS3_SEGDIR_MAXLEVEL);
                   121777:   sqlite3_bind_int(pStmt, 2, (iIndex+1)*FTS3_SEGDIR_MAXLEVEL - 1);
                   121778:   if( SQLITE_ROW==sqlite3_step(pStmt) ){
                   121779:     *pnMax = sqlite3_column_int(pStmt, 0);
                   121780:   }
                   121781:   return sqlite3_reset(pStmt);
                   121782: }
                   121783: 
                   121784: /*
                   121785: ** This function is used after merging multiple segments into a single large
                   121786: ** segment to delete the old, now redundant, segment b-trees. Specifically,
                   121787: ** it:
                   121788: ** 
                   121789: **   1) Deletes all %_segments entries for the segments associated with 
                   121790: **      each of the SegReader objects in the array passed as the third 
                   121791: **      argument, and
                   121792: **
                   121793: **   2) deletes all %_segdir entries with level iLevel, or all %_segdir
                   121794: **      entries regardless of level if (iLevel<0).
                   121795: **
                   121796: ** SQLITE_OK is returned if successful, otherwise an SQLite error code.
                   121797: */
                   121798: static int fts3DeleteSegdir(
                   121799:   Fts3Table *p,                   /* Virtual table handle */
                   121800:   int iIndex,                     /* Index for p->aIndex */
                   121801:   int iLevel,                     /* Level of %_segdir entries to delete */
                   121802:   Fts3SegReader **apSegment,      /* Array of SegReader objects */
                   121803:   int nReader                     /* Size of array apSegment */
                   121804: ){
                   121805:   int rc;                         /* Return Code */
                   121806:   int i;                          /* Iterator variable */
                   121807:   sqlite3_stmt *pDelete;          /* SQL statement to delete rows */
                   121808: 
                   121809:   rc = fts3SqlStmt(p, SQL_DELETE_SEGMENTS_RANGE, &pDelete, 0);
                   121810:   for(i=0; rc==SQLITE_OK && i<nReader; i++){
                   121811:     Fts3SegReader *pSegment = apSegment[i];
                   121812:     if( pSegment->iStartBlock ){
                   121813:       sqlite3_bind_int64(pDelete, 1, pSegment->iStartBlock);
                   121814:       sqlite3_bind_int64(pDelete, 2, pSegment->iEndBlock);
                   121815:       sqlite3_step(pDelete);
                   121816:       rc = sqlite3_reset(pDelete);
                   121817:     }
                   121818:   }
                   121819:   if( rc!=SQLITE_OK ){
                   121820:     return rc;
                   121821:   }
                   121822: 
                   121823:   assert( iLevel>=0 || iLevel==FTS3_SEGCURSOR_ALL );
                   121824:   if( iLevel==FTS3_SEGCURSOR_ALL ){
                   121825:     rc = fts3SqlStmt(p, SQL_DELETE_SEGDIR_RANGE, &pDelete, 0);
                   121826:     if( rc==SQLITE_OK ){
                   121827:       sqlite3_bind_int(pDelete, 1, iIndex*FTS3_SEGDIR_MAXLEVEL);
                   121828:       sqlite3_bind_int(pDelete, 2, (iIndex+1) * FTS3_SEGDIR_MAXLEVEL - 1);
                   121829:     }
                   121830:   }else{
                   121831:     rc = fts3SqlStmt(p, SQL_DELETE_SEGDIR_LEVEL, &pDelete, 0);
                   121832:     if( rc==SQLITE_OK ){
                   121833:       sqlite3_bind_int(pDelete, 1, iIndex*FTS3_SEGDIR_MAXLEVEL + iLevel);
                   121834:     }
                   121835:   }
                   121836: 
                   121837:   if( rc==SQLITE_OK ){
                   121838:     sqlite3_step(pDelete);
                   121839:     rc = sqlite3_reset(pDelete);
                   121840:   }
                   121841: 
                   121842:   return rc;
                   121843: }
                   121844: 
                   121845: /*
                   121846: ** When this function is called, buffer *ppList (size *pnList bytes) contains 
                   121847: ** a position list that may (or may not) feature multiple columns. This
                   121848: ** function adjusts the pointer *ppList and the length *pnList so that they
                   121849: ** identify the subset of the position list that corresponds to column iCol.
                   121850: **
                   121851: ** If there are no entries in the input position list for column iCol, then
                   121852: ** *pnList is set to zero before returning.
                   121853: */
                   121854: static void fts3ColumnFilter(
                   121855:   int iCol,                       /* Column to filter on */
                   121856:   char **ppList,                  /* IN/OUT: Pointer to position list */
                   121857:   int *pnList                     /* IN/OUT: Size of buffer *ppList in bytes */
                   121858: ){
                   121859:   char *pList = *ppList;
                   121860:   int nList = *pnList;
                   121861:   char *pEnd = &pList[nList];
                   121862:   int iCurrent = 0;
                   121863:   char *p = pList;
                   121864: 
                   121865:   assert( iCol>=0 );
                   121866:   while( 1 ){
                   121867:     char c = 0;
                   121868:     while( p<pEnd && (c | *p)&0xFE ) c = *p++ & 0x80;
                   121869:   
                   121870:     if( iCol==iCurrent ){
                   121871:       nList = (int)(p - pList);
                   121872:       break;
                   121873:     }
                   121874: 
                   121875:     nList -= (int)(p - pList);
                   121876:     pList = p;
                   121877:     if( nList==0 ){
                   121878:       break;
                   121879:     }
                   121880:     p = &pList[1];
                   121881:     p += sqlite3Fts3GetVarint32(p, &iCurrent);
                   121882:   }
                   121883: 
                   121884:   *ppList = pList;
                   121885:   *pnList = nList;
                   121886: }
                   121887: 
                   121888: /*
                   121889: ** Cache data in the Fts3MultiSegReader.aBuffer[] buffer (overwriting any
                   121890: ** existing data). Grow the buffer if required.
                   121891: **
                   121892: ** If successful, return SQLITE_OK. Otherwise, if an OOM error is encountered
                   121893: ** trying to resize the buffer, return SQLITE_NOMEM.
                   121894: */
                   121895: static int fts3MsrBufferData(
                   121896:   Fts3MultiSegReader *pMsr,       /* Multi-segment-reader handle */
                   121897:   char *pList,
                   121898:   int nList
                   121899: ){
                   121900:   if( nList>pMsr->nBuffer ){
                   121901:     char *pNew;
                   121902:     pMsr->nBuffer = nList*2;
                   121903:     pNew = (char *)sqlite3_realloc(pMsr->aBuffer, pMsr->nBuffer);
                   121904:     if( !pNew ) return SQLITE_NOMEM;
                   121905:     pMsr->aBuffer = pNew;
                   121906:   }
                   121907: 
                   121908:   memcpy(pMsr->aBuffer, pList, nList);
                   121909:   return SQLITE_OK;
                   121910: }
                   121911: 
                   121912: SQLITE_PRIVATE int sqlite3Fts3MsrIncrNext(
                   121913:   Fts3Table *p,                   /* Virtual table handle */
                   121914:   Fts3MultiSegReader *pMsr,       /* Multi-segment-reader handle */
                   121915:   sqlite3_int64 *piDocid,         /* OUT: Docid value */
                   121916:   char **paPoslist,               /* OUT: Pointer to position list */
                   121917:   int *pnPoslist                  /* OUT: Size of position list in bytes */
                   121918: ){
                   121919:   int nMerge = pMsr->nAdvance;
                   121920:   Fts3SegReader **apSegment = pMsr->apSegment;
                   121921:   int (*xCmp)(Fts3SegReader *, Fts3SegReader *) = (
                   121922:     p->bDescIdx ? fts3SegReaderDoclistCmpRev : fts3SegReaderDoclistCmp
                   121923:   );
                   121924: 
                   121925:   if( nMerge==0 ){
                   121926:     *paPoslist = 0;
                   121927:     return SQLITE_OK;
                   121928:   }
                   121929: 
                   121930:   while( 1 ){
                   121931:     Fts3SegReader *pSeg;
                   121932:     pSeg = pMsr->apSegment[0];
                   121933: 
                   121934:     if( pSeg->pOffsetList==0 ){
                   121935:       *paPoslist = 0;
                   121936:       break;
                   121937:     }else{
                   121938:       int rc;
                   121939:       char *pList;
                   121940:       int nList;
                   121941:       int j;
                   121942:       sqlite3_int64 iDocid = apSegment[0]->iDocid;
                   121943: 
                   121944:       rc = fts3SegReaderNextDocid(p, apSegment[0], &pList, &nList);
                   121945:       j = 1;
                   121946:       while( rc==SQLITE_OK 
                   121947:         && j<nMerge
                   121948:         && apSegment[j]->pOffsetList
                   121949:         && apSegment[j]->iDocid==iDocid
                   121950:       ){
                   121951:         rc = fts3SegReaderNextDocid(p, apSegment[j], 0, 0);
                   121952:         j++;
                   121953:       }
                   121954:       if( rc!=SQLITE_OK ) return rc;
                   121955:       fts3SegReaderSort(pMsr->apSegment, nMerge, j, xCmp);
                   121956: 
                   121957:       if( pMsr->iColFilter>=0 ){
                   121958:         fts3ColumnFilter(pMsr->iColFilter, &pList, &nList);
                   121959:       }
                   121960: 
                   121961:       if( nList>0 ){
                   121962:         if( fts3SegReaderIsPending(apSegment[0]) ){
                   121963:           rc = fts3MsrBufferData(pMsr, pList, nList+1);
                   121964:           if( rc!=SQLITE_OK ) return rc;
                   121965:           *paPoslist = pMsr->aBuffer;
                   121966:           assert( (pMsr->aBuffer[nList] & 0xFE)==0x00 );
                   121967:         }else{
                   121968:           *paPoslist = pList;
                   121969:         }
                   121970:         *piDocid = iDocid;
                   121971:         *pnPoslist = nList;
                   121972:         break;
                   121973:       }
                   121974:     }
                   121975:   }
                   121976: 
                   121977:   return SQLITE_OK;
                   121978: }
                   121979: 
                   121980: static int fts3SegReaderStart(
                   121981:   Fts3Table *p,                   /* Virtual table handle */
                   121982:   Fts3MultiSegReader *pCsr,       /* Cursor object */
                   121983:   const char *zTerm,              /* Term searched for (or NULL) */
                   121984:   int nTerm                       /* Length of zTerm in bytes */
                   121985: ){
                   121986:   int i;
                   121987:   int nSeg = pCsr->nSegment;
                   121988: 
                   121989:   /* If the Fts3SegFilter defines a specific term (or term prefix) to search 
                   121990:   ** for, then advance each segment iterator until it points to a term of
                   121991:   ** equal or greater value than the specified term. This prevents many
                   121992:   ** unnecessary merge/sort operations for the case where single segment
                   121993:   ** b-tree leaf nodes contain more than one term.
                   121994:   */
                   121995:   for(i=0; pCsr->bRestart==0 && i<pCsr->nSegment; i++){
                   121996:     Fts3SegReader *pSeg = pCsr->apSegment[i];
                   121997:     do {
                   121998:       int rc = fts3SegReaderNext(p, pSeg, 0);
                   121999:       if( rc!=SQLITE_OK ) return rc;
                   122000:     }while( zTerm && fts3SegReaderTermCmp(pSeg, zTerm, nTerm)<0 );
                   122001:   }
                   122002:   fts3SegReaderSort(pCsr->apSegment, nSeg, nSeg, fts3SegReaderCmp);
                   122003: 
                   122004:   return SQLITE_OK;
                   122005: }
                   122006: 
                   122007: SQLITE_PRIVATE int sqlite3Fts3SegReaderStart(
                   122008:   Fts3Table *p,                   /* Virtual table handle */
                   122009:   Fts3MultiSegReader *pCsr,       /* Cursor object */
                   122010:   Fts3SegFilter *pFilter          /* Restrictions on range of iteration */
                   122011: ){
                   122012:   pCsr->pFilter = pFilter;
                   122013:   return fts3SegReaderStart(p, pCsr, pFilter->zTerm, pFilter->nTerm);
                   122014: }
                   122015: 
                   122016: SQLITE_PRIVATE int sqlite3Fts3MsrIncrStart(
                   122017:   Fts3Table *p,                   /* Virtual table handle */
                   122018:   Fts3MultiSegReader *pCsr,       /* Cursor object */
                   122019:   int iCol,                       /* Column to match on. */
                   122020:   const char *zTerm,              /* Term to iterate through a doclist for */
                   122021:   int nTerm                       /* Number of bytes in zTerm */
                   122022: ){
                   122023:   int i;
                   122024:   int rc;
                   122025:   int nSegment = pCsr->nSegment;
                   122026:   int (*xCmp)(Fts3SegReader *, Fts3SegReader *) = (
                   122027:     p->bDescIdx ? fts3SegReaderDoclistCmpRev : fts3SegReaderDoclistCmp
                   122028:   );
                   122029: 
                   122030:   assert( pCsr->pFilter==0 );
                   122031:   assert( zTerm && nTerm>0 );
                   122032: 
                   122033:   /* Advance each segment iterator until it points to the term zTerm/nTerm. */
                   122034:   rc = fts3SegReaderStart(p, pCsr, zTerm, nTerm);
                   122035:   if( rc!=SQLITE_OK ) return rc;
                   122036: 
                   122037:   /* Determine how many of the segments actually point to zTerm/nTerm. */
                   122038:   for(i=0; i<nSegment; i++){
                   122039:     Fts3SegReader *pSeg = pCsr->apSegment[i];
                   122040:     if( !pSeg->aNode || fts3SegReaderTermCmp(pSeg, zTerm, nTerm) ){
                   122041:       break;
                   122042:     }
                   122043:   }
                   122044:   pCsr->nAdvance = i;
                   122045: 
                   122046:   /* Advance each of the segments to point to the first docid. */
                   122047:   for(i=0; i<pCsr->nAdvance; i++){
                   122048:     rc = fts3SegReaderFirstDocid(p, pCsr->apSegment[i]);
                   122049:     if( rc!=SQLITE_OK ) return rc;
                   122050:   }
                   122051:   fts3SegReaderSort(pCsr->apSegment, i, i, xCmp);
                   122052: 
                   122053:   assert( iCol<0 || iCol<p->nColumn );
                   122054:   pCsr->iColFilter = iCol;
                   122055: 
                   122056:   return SQLITE_OK;
                   122057: }
                   122058: 
                   122059: /*
                   122060: ** This function is called on a MultiSegReader that has been started using
                   122061: ** sqlite3Fts3MsrIncrStart(). One or more calls to MsrIncrNext() may also
                   122062: ** have been made. Calling this function puts the MultiSegReader in such
                   122063: ** a state that if the next two calls are:
                   122064: **
                   122065: **   sqlite3Fts3SegReaderStart()
                   122066: **   sqlite3Fts3SegReaderStep()
                   122067: **
                   122068: ** then the entire doclist for the term is available in 
                   122069: ** MultiSegReader.aDoclist/nDoclist.
                   122070: */
                   122071: SQLITE_PRIVATE int sqlite3Fts3MsrIncrRestart(Fts3MultiSegReader *pCsr){
                   122072:   int i;                          /* Used to iterate through segment-readers */
                   122073: 
                   122074:   assert( pCsr->zTerm==0 );
                   122075:   assert( pCsr->nTerm==0 );
                   122076:   assert( pCsr->aDoclist==0 );
                   122077:   assert( pCsr->nDoclist==0 );
                   122078: 
                   122079:   pCsr->nAdvance = 0;
                   122080:   pCsr->bRestart = 1;
                   122081:   for(i=0; i<pCsr->nSegment; i++){
                   122082:     pCsr->apSegment[i]->pOffsetList = 0;
                   122083:     pCsr->apSegment[i]->nOffsetList = 0;
                   122084:     pCsr->apSegment[i]->iDocid = 0;
                   122085:   }
                   122086: 
                   122087:   return SQLITE_OK;
                   122088: }
                   122089: 
                   122090: 
                   122091: SQLITE_PRIVATE int sqlite3Fts3SegReaderStep(
                   122092:   Fts3Table *p,                   /* Virtual table handle */
                   122093:   Fts3MultiSegReader *pCsr        /* Cursor object */
                   122094: ){
                   122095:   int rc = SQLITE_OK;
                   122096: 
                   122097:   int isIgnoreEmpty =  (pCsr->pFilter->flags & FTS3_SEGMENT_IGNORE_EMPTY);
                   122098:   int isRequirePos =   (pCsr->pFilter->flags & FTS3_SEGMENT_REQUIRE_POS);
                   122099:   int isColFilter =    (pCsr->pFilter->flags & FTS3_SEGMENT_COLUMN_FILTER);
                   122100:   int isPrefix =       (pCsr->pFilter->flags & FTS3_SEGMENT_PREFIX);
                   122101:   int isScan =         (pCsr->pFilter->flags & FTS3_SEGMENT_SCAN);
                   122102: 
                   122103:   Fts3SegReader **apSegment = pCsr->apSegment;
                   122104:   int nSegment = pCsr->nSegment;
                   122105:   Fts3SegFilter *pFilter = pCsr->pFilter;
                   122106:   int (*xCmp)(Fts3SegReader *, Fts3SegReader *) = (
                   122107:     p->bDescIdx ? fts3SegReaderDoclistCmpRev : fts3SegReaderDoclistCmp
                   122108:   );
                   122109: 
                   122110:   if( pCsr->nSegment==0 ) return SQLITE_OK;
                   122111: 
                   122112:   do {
                   122113:     int nMerge;
                   122114:     int i;
                   122115:   
                   122116:     /* Advance the first pCsr->nAdvance entries in the apSegment[] array
                   122117:     ** forward. Then sort the list in order of current term again.  
                   122118:     */
                   122119:     for(i=0; i<pCsr->nAdvance; i++){
                   122120:       rc = fts3SegReaderNext(p, apSegment[i], 0);
                   122121:       if( rc!=SQLITE_OK ) return rc;
                   122122:     }
                   122123:     fts3SegReaderSort(apSegment, nSegment, pCsr->nAdvance, fts3SegReaderCmp);
                   122124:     pCsr->nAdvance = 0;
                   122125: 
                   122126:     /* If all the seg-readers are at EOF, we're finished. return SQLITE_OK. */
                   122127:     assert( rc==SQLITE_OK );
                   122128:     if( apSegment[0]->aNode==0 ) break;
                   122129: 
                   122130:     pCsr->nTerm = apSegment[0]->nTerm;
                   122131:     pCsr->zTerm = apSegment[0]->zTerm;
                   122132: 
                   122133:     /* If this is a prefix-search, and if the term that apSegment[0] points
                   122134:     ** to does not share a suffix with pFilter->zTerm/nTerm, then all 
                   122135:     ** required callbacks have been made. In this case exit early.
                   122136:     **
                   122137:     ** Similarly, if this is a search for an exact match, and the first term
                   122138:     ** of segment apSegment[0] is not a match, exit early.
                   122139:     */
                   122140:     if( pFilter->zTerm && !isScan ){
                   122141:       if( pCsr->nTerm<pFilter->nTerm 
                   122142:        || (!isPrefix && pCsr->nTerm>pFilter->nTerm)
                   122143:        || memcmp(pCsr->zTerm, pFilter->zTerm, pFilter->nTerm) 
                   122144:       ){
                   122145:         break;
                   122146:       }
                   122147:     }
                   122148: 
                   122149:     nMerge = 1;
                   122150:     while( nMerge<nSegment 
                   122151:         && apSegment[nMerge]->aNode
                   122152:         && apSegment[nMerge]->nTerm==pCsr->nTerm 
                   122153:         && 0==memcmp(pCsr->zTerm, apSegment[nMerge]->zTerm, pCsr->nTerm)
                   122154:     ){
                   122155:       nMerge++;
                   122156:     }
                   122157: 
                   122158:     assert( isIgnoreEmpty || (isRequirePos && !isColFilter) );
                   122159:     if( nMerge==1 
                   122160:      && !isIgnoreEmpty 
                   122161:      && (p->bDescIdx==0 || fts3SegReaderIsPending(apSegment[0])==0)
                   122162:     ){
                   122163:       pCsr->nDoclist = apSegment[0]->nDoclist;
                   122164:       if( fts3SegReaderIsPending(apSegment[0]) ){
                   122165:         rc = fts3MsrBufferData(pCsr, apSegment[0]->aDoclist, pCsr->nDoclist);
                   122166:         pCsr->aDoclist = pCsr->aBuffer;
                   122167:       }else{
                   122168:         pCsr->aDoclist = apSegment[0]->aDoclist;
                   122169:       }
                   122170:       if( rc==SQLITE_OK ) rc = SQLITE_ROW;
                   122171:     }else{
                   122172:       int nDoclist = 0;           /* Size of doclist */
                   122173:       sqlite3_int64 iPrev = 0;    /* Previous docid stored in doclist */
                   122174: 
                   122175:       /* The current term of the first nMerge entries in the array
                   122176:       ** of Fts3SegReader objects is the same. The doclists must be merged
                   122177:       ** and a single term returned with the merged doclist.
                   122178:       */
                   122179:       for(i=0; i<nMerge; i++){
                   122180:         fts3SegReaderFirstDocid(p, apSegment[i]);
                   122181:       }
                   122182:       fts3SegReaderSort(apSegment, nMerge, nMerge, xCmp);
                   122183:       while( apSegment[0]->pOffsetList ){
                   122184:         int j;                    /* Number of segments that share a docid */
                   122185:         char *pList;
                   122186:         int nList;
                   122187:         int nByte;
                   122188:         sqlite3_int64 iDocid = apSegment[0]->iDocid;
                   122189:         fts3SegReaderNextDocid(p, apSegment[0], &pList, &nList);
                   122190:         j = 1;
                   122191:         while( j<nMerge
                   122192:             && apSegment[j]->pOffsetList
                   122193:             && apSegment[j]->iDocid==iDocid
                   122194:         ){
                   122195:           fts3SegReaderNextDocid(p, apSegment[j], 0, 0);
                   122196:           j++;
                   122197:         }
                   122198: 
                   122199:         if( isColFilter ){
                   122200:           fts3ColumnFilter(pFilter->iCol, &pList, &nList);
                   122201:         }
                   122202: 
                   122203:         if( !isIgnoreEmpty || nList>0 ){
                   122204: 
                   122205:           /* Calculate the 'docid' delta value to write into the merged 
                   122206:           ** doclist. */
                   122207:           sqlite3_int64 iDelta;
                   122208:           if( p->bDescIdx && nDoclist>0 ){
                   122209:             iDelta = iPrev - iDocid;
                   122210:           }else{
                   122211:             iDelta = iDocid - iPrev;
                   122212:           }
                   122213:           assert( iDelta>0 || (nDoclist==0 && iDelta==iDocid) );
                   122214:           assert( nDoclist>0 || iDelta==iDocid );
                   122215: 
                   122216:           nByte = sqlite3Fts3VarintLen(iDelta) + (isRequirePos?nList+1:0);
                   122217:           if( nDoclist+nByte>pCsr->nBuffer ){
                   122218:             char *aNew;
                   122219:             pCsr->nBuffer = (nDoclist+nByte)*2;
                   122220:             aNew = sqlite3_realloc(pCsr->aBuffer, pCsr->nBuffer);
                   122221:             if( !aNew ){
                   122222:               return SQLITE_NOMEM;
                   122223:             }
                   122224:             pCsr->aBuffer = aNew;
                   122225:           }
                   122226:           nDoclist += sqlite3Fts3PutVarint(&pCsr->aBuffer[nDoclist], iDelta);
                   122227:           iPrev = iDocid;
                   122228:           if( isRequirePos ){
                   122229:             memcpy(&pCsr->aBuffer[nDoclist], pList, nList);
                   122230:             nDoclist += nList;
                   122231:             pCsr->aBuffer[nDoclist++] = '\0';
                   122232:           }
                   122233:         }
                   122234: 
                   122235:         fts3SegReaderSort(apSegment, nMerge, j, xCmp);
                   122236:       }
                   122237:       if( nDoclist>0 ){
                   122238:         pCsr->aDoclist = pCsr->aBuffer;
                   122239:         pCsr->nDoclist = nDoclist;
                   122240:         rc = SQLITE_ROW;
                   122241:       }
                   122242:     }
                   122243:     pCsr->nAdvance = nMerge;
                   122244:   }while( rc==SQLITE_OK );
                   122245: 
                   122246:   return rc;
                   122247: }
                   122248: 
                   122249: 
                   122250: SQLITE_PRIVATE void sqlite3Fts3SegReaderFinish(
                   122251:   Fts3MultiSegReader *pCsr       /* Cursor object */
                   122252: ){
                   122253:   if( pCsr ){
                   122254:     int i;
                   122255:     for(i=0; i<pCsr->nSegment; i++){
                   122256:       sqlite3Fts3SegReaderFree(pCsr->apSegment[i]);
                   122257:     }
                   122258:     sqlite3_free(pCsr->apSegment);
                   122259:     sqlite3_free(pCsr->aBuffer);
                   122260: 
                   122261:     pCsr->nSegment = 0;
                   122262:     pCsr->apSegment = 0;
                   122263:     pCsr->aBuffer = 0;
                   122264:   }
                   122265: }
                   122266: 
                   122267: /*
                   122268: ** Merge all level iLevel segments in the database into a single 
                   122269: ** iLevel+1 segment. Or, if iLevel<0, merge all segments into a
                   122270: ** single segment with a level equal to the numerically largest level 
                   122271: ** currently present in the database.
                   122272: **
                   122273: ** If this function is called with iLevel<0, but there is only one
                   122274: ** segment in the database, SQLITE_DONE is returned immediately. 
                   122275: ** Otherwise, if successful, SQLITE_OK is returned. If an error occurs, 
                   122276: ** an SQLite error code is returned.
                   122277: */
                   122278: static int fts3SegmentMerge(Fts3Table *p, int iIndex, int iLevel){
                   122279:   int rc;                         /* Return code */
                   122280:   int iIdx = 0;                   /* Index of new segment */
                   122281:   int iNewLevel = 0;              /* Level/index to create new segment at */
                   122282:   SegmentWriter *pWriter = 0;     /* Used to write the new, merged, segment */
                   122283:   Fts3SegFilter filter;           /* Segment term filter condition */
                   122284:   Fts3MultiSegReader csr;        /* Cursor to iterate through level(s) */
                   122285:   int bIgnoreEmpty = 0;           /* True to ignore empty segments */
                   122286: 
                   122287:   assert( iLevel==FTS3_SEGCURSOR_ALL
                   122288:        || iLevel==FTS3_SEGCURSOR_PENDING
                   122289:        || iLevel>=0
                   122290:   );
                   122291:   assert( iLevel<FTS3_SEGDIR_MAXLEVEL );
                   122292:   assert( iIndex>=0 && iIndex<p->nIndex );
                   122293: 
                   122294:   rc = sqlite3Fts3SegReaderCursor(p, iIndex, iLevel, 0, 0, 1, 0, &csr);
                   122295:   if( rc!=SQLITE_OK || csr.nSegment==0 ) goto finished;
                   122296: 
                   122297:   if( iLevel==FTS3_SEGCURSOR_ALL ){
                   122298:     /* This call is to merge all segments in the database to a single
                   122299:     ** segment. The level of the new segment is equal to the the numerically 
                   122300:     ** greatest segment level currently present in the database for this
                   122301:     ** index. The idx of the new segment is always 0.  */
                   122302:     if( csr.nSegment==1 ){
                   122303:       rc = SQLITE_DONE;
                   122304:       goto finished;
                   122305:     }
                   122306:     rc = fts3SegmentMaxLevel(p, iIndex, &iNewLevel);
                   122307:     bIgnoreEmpty = 1;
                   122308: 
                   122309:   }else if( iLevel==FTS3_SEGCURSOR_PENDING ){
                   122310:     iNewLevel = iIndex * FTS3_SEGDIR_MAXLEVEL; 
                   122311:     rc = fts3AllocateSegdirIdx(p, iIndex, 0, &iIdx);
                   122312:   }else{
                   122313:     /* This call is to merge all segments at level iLevel. find the next
                   122314:     ** available segment index at level iLevel+1. The call to
                   122315:     ** fts3AllocateSegdirIdx() will merge the segments at level iLevel+1 to 
                   122316:     ** a single iLevel+2 segment if necessary.  */
                   122317:     rc = fts3AllocateSegdirIdx(p, iIndex, iLevel+1, &iIdx);
                   122318:     iNewLevel = iIndex * FTS3_SEGDIR_MAXLEVEL + iLevel+1;
                   122319:   }
                   122320:   if( rc!=SQLITE_OK ) goto finished;
                   122321:   assert( csr.nSegment>0 );
                   122322:   assert( iNewLevel>=(iIndex*FTS3_SEGDIR_MAXLEVEL) );
                   122323:   assert( iNewLevel<((iIndex+1)*FTS3_SEGDIR_MAXLEVEL) );
                   122324: 
                   122325:   memset(&filter, 0, sizeof(Fts3SegFilter));
                   122326:   filter.flags = FTS3_SEGMENT_REQUIRE_POS;
                   122327:   filter.flags |= (bIgnoreEmpty ? FTS3_SEGMENT_IGNORE_EMPTY : 0);
                   122328: 
                   122329:   rc = sqlite3Fts3SegReaderStart(p, &csr, &filter);
                   122330:   while( SQLITE_OK==rc ){
                   122331:     rc = sqlite3Fts3SegReaderStep(p, &csr);
                   122332:     if( rc!=SQLITE_ROW ) break;
                   122333:     rc = fts3SegWriterAdd(p, &pWriter, 1, 
                   122334:         csr.zTerm, csr.nTerm, csr.aDoclist, csr.nDoclist);
                   122335:   }
                   122336:   if( rc!=SQLITE_OK ) goto finished;
                   122337:   assert( pWriter );
                   122338: 
                   122339:   if( iLevel!=FTS3_SEGCURSOR_PENDING ){
                   122340:     rc = fts3DeleteSegdir(p, iIndex, iLevel, csr.apSegment, csr.nSegment);
                   122341:     if( rc!=SQLITE_OK ) goto finished;
                   122342:   }
                   122343:   rc = fts3SegWriterFlush(p, pWriter, iNewLevel, iIdx);
                   122344: 
                   122345:  finished:
                   122346:   fts3SegWriterFree(pWriter);
                   122347:   sqlite3Fts3SegReaderFinish(&csr);
                   122348:   return rc;
                   122349: }
                   122350: 
                   122351: 
                   122352: /* 
                   122353: ** Flush the contents of pendingTerms to level 0 segments.
                   122354: */
                   122355: SQLITE_PRIVATE int sqlite3Fts3PendingTermsFlush(Fts3Table *p){
                   122356:   int rc = SQLITE_OK;
                   122357:   int i;
                   122358:   for(i=0; rc==SQLITE_OK && i<p->nIndex; i++){
                   122359:     rc = fts3SegmentMerge(p, i, FTS3_SEGCURSOR_PENDING);
                   122360:     if( rc==SQLITE_DONE ) rc = SQLITE_OK;
                   122361:   }
                   122362:   sqlite3Fts3PendingTermsClear(p);
                   122363:   return rc;
                   122364: }
                   122365: 
                   122366: /*
                   122367: ** Encode N integers as varints into a blob.
                   122368: */
                   122369: static void fts3EncodeIntArray(
                   122370:   int N,             /* The number of integers to encode */
                   122371:   u32 *a,            /* The integer values */
                   122372:   char *zBuf,        /* Write the BLOB here */
                   122373:   int *pNBuf         /* Write number of bytes if zBuf[] used here */
                   122374: ){
                   122375:   int i, j;
                   122376:   for(i=j=0; i<N; i++){
                   122377:     j += sqlite3Fts3PutVarint(&zBuf[j], (sqlite3_int64)a[i]);
                   122378:   }
                   122379:   *pNBuf = j;
                   122380: }
                   122381: 
                   122382: /*
                   122383: ** Decode a blob of varints into N integers
                   122384: */
                   122385: static void fts3DecodeIntArray(
                   122386:   int N,             /* The number of integers to decode */
                   122387:   u32 *a,            /* Write the integer values */
                   122388:   const char *zBuf,  /* The BLOB containing the varints */
                   122389:   int nBuf           /* size of the BLOB */
                   122390: ){
                   122391:   int i, j;
                   122392:   UNUSED_PARAMETER(nBuf);
                   122393:   for(i=j=0; i<N; i++){
                   122394:     sqlite3_int64 x;
                   122395:     j += sqlite3Fts3GetVarint(&zBuf[j], &x);
                   122396:     assert(j<=nBuf);
                   122397:     a[i] = (u32)(x & 0xffffffff);
                   122398:   }
                   122399: }
                   122400: 
                   122401: /*
                   122402: ** Insert the sizes (in tokens) for each column of the document
                   122403: ** with docid equal to p->iPrevDocid.  The sizes are encoded as
                   122404: ** a blob of varints.
                   122405: */
                   122406: static void fts3InsertDocsize(
                   122407:   int *pRC,         /* Result code */
                   122408:   Fts3Table *p,     /* Table into which to insert */
                   122409:   u32 *aSz          /* Sizes of each column */
                   122410: ){
                   122411:   char *pBlob;             /* The BLOB encoding of the document size */
                   122412:   int nBlob;               /* Number of bytes in the BLOB */
                   122413:   sqlite3_stmt *pStmt;     /* Statement used to insert the encoding */
                   122414:   int rc;                  /* Result code from subfunctions */
                   122415: 
                   122416:   if( *pRC ) return;
                   122417:   pBlob = sqlite3_malloc( 10*p->nColumn );
                   122418:   if( pBlob==0 ){
                   122419:     *pRC = SQLITE_NOMEM;
                   122420:     return;
                   122421:   }
                   122422:   fts3EncodeIntArray(p->nColumn, aSz, pBlob, &nBlob);
                   122423:   rc = fts3SqlStmt(p, SQL_REPLACE_DOCSIZE, &pStmt, 0);
                   122424:   if( rc ){
                   122425:     sqlite3_free(pBlob);
                   122426:     *pRC = rc;
                   122427:     return;
                   122428:   }
                   122429:   sqlite3_bind_int64(pStmt, 1, p->iPrevDocid);
                   122430:   sqlite3_bind_blob(pStmt, 2, pBlob, nBlob, sqlite3_free);
                   122431:   sqlite3_step(pStmt);
                   122432:   *pRC = sqlite3_reset(pStmt);
                   122433: }
                   122434: 
                   122435: /*
                   122436: ** Record 0 of the %_stat table contains a blob consisting of N varints,
                   122437: ** where N is the number of user defined columns in the fts3 table plus
                   122438: ** two. If nCol is the number of user defined columns, then values of the 
                   122439: ** varints are set as follows:
                   122440: **
                   122441: **   Varint 0:       Total number of rows in the table.
                   122442: **
                   122443: **   Varint 1..nCol: For each column, the total number of tokens stored in
                   122444: **                   the column for all rows of the table.
                   122445: **
                   122446: **   Varint 1+nCol:  The total size, in bytes, of all text values in all
                   122447: **                   columns of all rows of the table.
                   122448: **
                   122449: */
                   122450: static void fts3UpdateDocTotals(
                   122451:   int *pRC,                       /* The result code */
                   122452:   Fts3Table *p,                   /* Table being updated */
                   122453:   u32 *aSzIns,                    /* Size increases */
                   122454:   u32 *aSzDel,                    /* Size decreases */
                   122455:   int nChng                       /* Change in the number of documents */
                   122456: ){
                   122457:   char *pBlob;             /* Storage for BLOB written into %_stat */
                   122458:   int nBlob;               /* Size of BLOB written into %_stat */
                   122459:   u32 *a;                  /* Array of integers that becomes the BLOB */
                   122460:   sqlite3_stmt *pStmt;     /* Statement for reading and writing */
                   122461:   int i;                   /* Loop counter */
                   122462:   int rc;                  /* Result code from subfunctions */
                   122463: 
                   122464:   const int nStat = p->nColumn+2;
                   122465: 
                   122466:   if( *pRC ) return;
                   122467:   a = sqlite3_malloc( (sizeof(u32)+10)*nStat );
                   122468:   if( a==0 ){
                   122469:     *pRC = SQLITE_NOMEM;
                   122470:     return;
                   122471:   }
                   122472:   pBlob = (char*)&a[nStat];
                   122473:   rc = fts3SqlStmt(p, SQL_SELECT_DOCTOTAL, &pStmt, 0);
                   122474:   if( rc ){
                   122475:     sqlite3_free(a);
                   122476:     *pRC = rc;
                   122477:     return;
                   122478:   }
                   122479:   if( sqlite3_step(pStmt)==SQLITE_ROW ){
                   122480:     fts3DecodeIntArray(nStat, a,
                   122481:          sqlite3_column_blob(pStmt, 0),
                   122482:          sqlite3_column_bytes(pStmt, 0));
                   122483:   }else{
                   122484:     memset(a, 0, sizeof(u32)*(nStat) );
                   122485:   }
                   122486:   sqlite3_reset(pStmt);
                   122487:   if( nChng<0 && a[0]<(u32)(-nChng) ){
                   122488:     a[0] = 0;
                   122489:   }else{
                   122490:     a[0] += nChng;
                   122491:   }
                   122492:   for(i=0; i<p->nColumn+1; i++){
                   122493:     u32 x = a[i+1];
                   122494:     if( x+aSzIns[i] < aSzDel[i] ){
                   122495:       x = 0;
                   122496:     }else{
                   122497:       x = x + aSzIns[i] - aSzDel[i];
                   122498:     }
                   122499:     a[i+1] = x;
                   122500:   }
                   122501:   fts3EncodeIntArray(nStat, a, pBlob, &nBlob);
                   122502:   rc = fts3SqlStmt(p, SQL_REPLACE_DOCTOTAL, &pStmt, 0);
                   122503:   if( rc ){
                   122504:     sqlite3_free(a);
                   122505:     *pRC = rc;
                   122506:     return;
                   122507:   }
                   122508:   sqlite3_bind_blob(pStmt, 1, pBlob, nBlob, SQLITE_STATIC);
                   122509:   sqlite3_step(pStmt);
                   122510:   *pRC = sqlite3_reset(pStmt);
                   122511:   sqlite3_free(a);
                   122512: }
                   122513: 
                   122514: static int fts3DoOptimize(Fts3Table *p, int bReturnDone){
                   122515:   int i;
                   122516:   int bSeenDone = 0;
                   122517:   int rc = SQLITE_OK;
                   122518:   for(i=0; rc==SQLITE_OK && i<p->nIndex; i++){
                   122519:     rc = fts3SegmentMerge(p, i, FTS3_SEGCURSOR_ALL);
                   122520:     if( rc==SQLITE_DONE ){
                   122521:       bSeenDone = 1;
                   122522:       rc = SQLITE_OK;
                   122523:     }
                   122524:   }
                   122525:   sqlite3Fts3SegmentsClose(p);
                   122526:   sqlite3Fts3PendingTermsClear(p);
                   122527: 
                   122528:   return (rc==SQLITE_OK && bReturnDone && bSeenDone) ? SQLITE_DONE : rc;
                   122529: }
                   122530: 
                   122531: /*
                   122532: ** Handle a 'special' INSERT of the form:
                   122533: **
                   122534: **   "INSERT INTO tbl(tbl) VALUES(<expr>)"
                   122535: **
                   122536: ** Argument pVal contains the result of <expr>. Currently the only 
                   122537: ** meaningful value to insert is the text 'optimize'.
                   122538: */
                   122539: static int fts3SpecialInsert(Fts3Table *p, sqlite3_value *pVal){
                   122540:   int rc;                         /* Return Code */
                   122541:   const char *zVal = (const char *)sqlite3_value_text(pVal);
                   122542:   int nVal = sqlite3_value_bytes(pVal);
                   122543: 
                   122544:   if( !zVal ){
                   122545:     return SQLITE_NOMEM;
                   122546:   }else if( nVal==8 && 0==sqlite3_strnicmp(zVal, "optimize", 8) ){
                   122547:     rc = fts3DoOptimize(p, 0);
                   122548: #ifdef SQLITE_TEST
                   122549:   }else if( nVal>9 && 0==sqlite3_strnicmp(zVal, "nodesize=", 9) ){
                   122550:     p->nNodeSize = atoi(&zVal[9]);
                   122551:     rc = SQLITE_OK;
                   122552:   }else if( nVal>11 && 0==sqlite3_strnicmp(zVal, "maxpending=", 9) ){
                   122553:     p->nMaxPendingData = atoi(&zVal[11]);
                   122554:     rc = SQLITE_OK;
                   122555: #endif
                   122556:   }else{
                   122557:     rc = SQLITE_ERROR;
                   122558:   }
                   122559: 
                   122560:   return rc;
                   122561: }
                   122562: 
                   122563: /*
                   122564: ** Delete all cached deferred doclists. Deferred doclists are cached
                   122565: ** (allocated) by the sqlite3Fts3CacheDeferredDoclists() function.
                   122566: */
                   122567: SQLITE_PRIVATE void sqlite3Fts3FreeDeferredDoclists(Fts3Cursor *pCsr){
                   122568:   Fts3DeferredToken *pDef;
                   122569:   for(pDef=pCsr->pDeferred; pDef; pDef=pDef->pNext){
                   122570:     fts3PendingListDelete(pDef->pList);
                   122571:     pDef->pList = 0;
                   122572:   }
                   122573: }
                   122574: 
                   122575: /*
                   122576: ** Free all entries in the pCsr->pDeffered list. Entries are added to 
                   122577: ** this list using sqlite3Fts3DeferToken().
                   122578: */
                   122579: SQLITE_PRIVATE void sqlite3Fts3FreeDeferredTokens(Fts3Cursor *pCsr){
                   122580:   Fts3DeferredToken *pDef;
                   122581:   Fts3DeferredToken *pNext;
                   122582:   for(pDef=pCsr->pDeferred; pDef; pDef=pNext){
                   122583:     pNext = pDef->pNext;
                   122584:     fts3PendingListDelete(pDef->pList);
                   122585:     sqlite3_free(pDef);
                   122586:   }
                   122587:   pCsr->pDeferred = 0;
                   122588: }
                   122589: 
                   122590: /*
                   122591: ** Generate deferred-doclists for all tokens in the pCsr->pDeferred list
                   122592: ** based on the row that pCsr currently points to.
                   122593: **
                   122594: ** A deferred-doclist is like any other doclist with position information
                   122595: ** included, except that it only contains entries for a single row of the
                   122596: ** table, not for all rows.
                   122597: */
                   122598: SQLITE_PRIVATE int sqlite3Fts3CacheDeferredDoclists(Fts3Cursor *pCsr){
                   122599:   int rc = SQLITE_OK;             /* Return code */
                   122600:   if( pCsr->pDeferred ){
                   122601:     int i;                        /* Used to iterate through table columns */
                   122602:     sqlite3_int64 iDocid;         /* Docid of the row pCsr points to */
                   122603:     Fts3DeferredToken *pDef;      /* Used to iterate through deferred tokens */
                   122604:   
                   122605:     Fts3Table *p = (Fts3Table *)pCsr->base.pVtab;
                   122606:     sqlite3_tokenizer *pT = p->pTokenizer;
                   122607:     sqlite3_tokenizer_module const *pModule = pT->pModule;
                   122608:    
                   122609:     assert( pCsr->isRequireSeek==0 );
                   122610:     iDocid = sqlite3_column_int64(pCsr->pStmt, 0);
                   122611:   
                   122612:     for(i=0; i<p->nColumn && rc==SQLITE_OK; i++){
                   122613:       const char *zText = (const char *)sqlite3_column_text(pCsr->pStmt, i+1);
                   122614:       sqlite3_tokenizer_cursor *pTC = 0;
                   122615:   
                   122616:       rc = pModule->xOpen(pT, zText, -1, &pTC);
                   122617:       while( rc==SQLITE_OK ){
                   122618:         char const *zToken;       /* Buffer containing token */
                   122619:         int nToken;               /* Number of bytes in token */
                   122620:         int iDum1, iDum2;         /* Dummy variables */
                   122621:         int iPos;                 /* Position of token in zText */
                   122622:   
                   122623:         pTC->pTokenizer = pT;
                   122624:         rc = pModule->xNext(pTC, &zToken, &nToken, &iDum1, &iDum2, &iPos);
                   122625:         for(pDef=pCsr->pDeferred; pDef && rc==SQLITE_OK; pDef=pDef->pNext){
                   122626:           Fts3PhraseToken *pPT = pDef->pToken;
                   122627:           if( (pDef->iCol>=p->nColumn || pDef->iCol==i)
                   122628:            && (pPT->n==nToken || (pPT->isPrefix && pPT->n<nToken))
                   122629:            && (0==memcmp(zToken, pPT->z, pPT->n))
                   122630:           ){
                   122631:             fts3PendingListAppend(&pDef->pList, iDocid, i, iPos, &rc);
                   122632:           }
                   122633:         }
                   122634:       }
                   122635:       if( pTC ) pModule->xClose(pTC);
                   122636:       if( rc==SQLITE_DONE ) rc = SQLITE_OK;
                   122637:     }
                   122638:   
                   122639:     for(pDef=pCsr->pDeferred; pDef && rc==SQLITE_OK; pDef=pDef->pNext){
                   122640:       if( pDef->pList ){
                   122641:         rc = fts3PendingListAppendVarint(&pDef->pList, 0);
                   122642:       }
                   122643:     }
                   122644:   }
                   122645: 
                   122646:   return rc;
                   122647: }
                   122648: 
                   122649: SQLITE_PRIVATE int sqlite3Fts3DeferredTokenList(
                   122650:   Fts3DeferredToken *p, 
                   122651:   char **ppData, 
                   122652:   int *pnData
                   122653: ){
                   122654:   char *pRet;
                   122655:   int nSkip;
                   122656:   sqlite3_int64 dummy;
                   122657: 
                   122658:   *ppData = 0;
                   122659:   *pnData = 0;
                   122660: 
                   122661:   if( p->pList==0 ){
                   122662:     return SQLITE_OK;
                   122663:   }
                   122664: 
                   122665:   pRet = (char *)sqlite3_malloc(p->pList->nData);
                   122666:   if( !pRet ) return SQLITE_NOMEM;
                   122667: 
                   122668:   nSkip = sqlite3Fts3GetVarint(p->pList->aData, &dummy);
                   122669:   *pnData = p->pList->nData - nSkip;
                   122670:   *ppData = pRet;
                   122671:   
                   122672:   memcpy(pRet, &p->pList->aData[nSkip], *pnData);
                   122673:   return SQLITE_OK;
                   122674: }
                   122675: 
                   122676: /*
                   122677: ** Add an entry for token pToken to the pCsr->pDeferred list.
                   122678: */
                   122679: SQLITE_PRIVATE int sqlite3Fts3DeferToken(
                   122680:   Fts3Cursor *pCsr,               /* Fts3 table cursor */
                   122681:   Fts3PhraseToken *pToken,        /* Token to defer */
                   122682:   int iCol                        /* Column that token must appear in (or -1) */
                   122683: ){
                   122684:   Fts3DeferredToken *pDeferred;
                   122685:   pDeferred = sqlite3_malloc(sizeof(*pDeferred));
                   122686:   if( !pDeferred ){
                   122687:     return SQLITE_NOMEM;
                   122688:   }
                   122689:   memset(pDeferred, 0, sizeof(*pDeferred));
                   122690:   pDeferred->pToken = pToken;
                   122691:   pDeferred->pNext = pCsr->pDeferred; 
                   122692:   pDeferred->iCol = iCol;
                   122693:   pCsr->pDeferred = pDeferred;
                   122694: 
                   122695:   assert( pToken->pDeferred==0 );
                   122696:   pToken->pDeferred = pDeferred;
                   122697: 
                   122698:   return SQLITE_OK;
                   122699: }
                   122700: 
                   122701: /*
                   122702: ** SQLite value pRowid contains the rowid of a row that may or may not be
                   122703: ** present in the FTS3 table. If it is, delete it and adjust the contents
                   122704: ** of subsiduary data structures accordingly.
                   122705: */
                   122706: static int fts3DeleteByRowid(
                   122707:   Fts3Table *p, 
                   122708:   sqlite3_value *pRowid, 
                   122709:   int *pnDoc,
                   122710:   u32 *aSzDel
                   122711: ){
                   122712:   int isEmpty = 0;
                   122713:   int rc = fts3IsEmpty(p, pRowid, &isEmpty);
                   122714:   if( rc==SQLITE_OK ){
                   122715:     if( isEmpty ){
                   122716:       /* Deleting this row means the whole table is empty. In this case
                   122717:       ** delete the contents of all three tables and throw away any
                   122718:       ** data in the pendingTerms hash table.  */
                   122719:       rc = fts3DeleteAll(p);
                   122720:       *pnDoc = *pnDoc - 1;
                   122721:     }else{
                   122722:       sqlite3_int64 iRemove = sqlite3_value_int64(pRowid);
                   122723:       rc = fts3PendingTermsDocid(p, iRemove);
                   122724:       fts3DeleteTerms(&rc, p, pRowid, aSzDel);
                   122725:       fts3SqlExec(&rc, p, SQL_DELETE_CONTENT, &pRowid);
                   122726:       if( sqlite3_changes(p->db) ) *pnDoc = *pnDoc - 1;
                   122727:       if( p->bHasDocsize ){
                   122728:         fts3SqlExec(&rc, p, SQL_DELETE_DOCSIZE, &pRowid);
                   122729:       }
                   122730:     }
                   122731:   }
                   122732: 
                   122733:   return rc;
                   122734: }
                   122735: 
                   122736: /*
                   122737: ** This function does the work for the xUpdate method of FTS3 virtual
                   122738: ** tables.
                   122739: */
                   122740: SQLITE_PRIVATE int sqlite3Fts3UpdateMethod(
                   122741:   sqlite3_vtab *pVtab,            /* FTS3 vtab object */
                   122742:   int nArg,                       /* Size of argument array */
                   122743:   sqlite3_value **apVal,          /* Array of arguments */
                   122744:   sqlite_int64 *pRowid            /* OUT: The affected (or effected) rowid */
                   122745: ){
                   122746:   Fts3Table *p = (Fts3Table *)pVtab;
                   122747:   int rc = SQLITE_OK;             /* Return Code */
                   122748:   int isRemove = 0;               /* True for an UPDATE or DELETE */
                   122749:   sqlite3_int64 iRemove = 0;      /* Rowid removed by UPDATE or DELETE */
                   122750:   u32 *aSzIns = 0;                /* Sizes of inserted documents */
                   122751:   u32 *aSzDel;                    /* Sizes of deleted documents */
                   122752:   int nChng = 0;                  /* Net change in number of documents */
                   122753:   int bInsertDone = 0;
                   122754: 
                   122755:   assert( p->pSegments==0 );
                   122756: 
                   122757:   /* Check for a "special" INSERT operation. One of the form:
                   122758:   **
                   122759:   **   INSERT INTO xyz(xyz) VALUES('command');
                   122760:   */
                   122761:   if( nArg>1 
                   122762:    && sqlite3_value_type(apVal[0])==SQLITE_NULL 
                   122763:    && sqlite3_value_type(apVal[p->nColumn+2])!=SQLITE_NULL 
                   122764:   ){
                   122765:     rc = fts3SpecialInsert(p, apVal[p->nColumn+2]);
                   122766:     goto update_out;
                   122767:   }
                   122768: 
                   122769:   /* Allocate space to hold the change in document sizes */
                   122770:   aSzIns = sqlite3_malloc( sizeof(aSzIns[0])*(p->nColumn+1)*2 );
                   122771:   if( aSzIns==0 ){
                   122772:     rc = SQLITE_NOMEM;
                   122773:     goto update_out;
                   122774:   }
                   122775:   aSzDel = &aSzIns[p->nColumn+1];
                   122776:   memset(aSzIns, 0, sizeof(aSzIns[0])*(p->nColumn+1)*2);
                   122777: 
                   122778:   /* If this is an INSERT operation, or an UPDATE that modifies the rowid
                   122779:   ** value, then this operation requires constraint handling.
                   122780:   **
                   122781:   ** If the on-conflict mode is REPLACE, this means that the existing row
                   122782:   ** should be deleted from the database before inserting the new row. Or,
                   122783:   ** if the on-conflict mode is other than REPLACE, then this method must
                   122784:   ** detect the conflict and return SQLITE_CONSTRAINT before beginning to
                   122785:   ** modify the database file.
                   122786:   */
                   122787:   if( nArg>1 ){
                   122788:     /* Find the value object that holds the new rowid value. */
                   122789:     sqlite3_value *pNewRowid = apVal[3+p->nColumn];
                   122790:     if( sqlite3_value_type(pNewRowid)==SQLITE_NULL ){
                   122791:       pNewRowid = apVal[1];
                   122792:     }
                   122793: 
                   122794:     if( sqlite3_value_type(pNewRowid)!=SQLITE_NULL && ( 
                   122795:         sqlite3_value_type(apVal[0])==SQLITE_NULL
                   122796:      || sqlite3_value_int64(apVal[0])!=sqlite3_value_int64(pNewRowid)
                   122797:     )){
                   122798:       /* The new rowid is not NULL (in this case the rowid will be
                   122799:       ** automatically assigned and there is no chance of a conflict), and 
                   122800:       ** the statement is either an INSERT or an UPDATE that modifies the
                   122801:       ** rowid column. So if the conflict mode is REPLACE, then delete any
                   122802:       ** existing row with rowid=pNewRowid. 
                   122803:       **
                   122804:       ** Or, if the conflict mode is not REPLACE, insert the new record into 
                   122805:       ** the %_content table. If we hit the duplicate rowid constraint (or any
                   122806:       ** other error) while doing so, return immediately.
                   122807:       **
                   122808:       ** This branch may also run if pNewRowid contains a value that cannot
                   122809:       ** be losslessly converted to an integer. In this case, the eventual 
                   122810:       ** call to fts3InsertData() (either just below or further on in this
                   122811:       ** function) will return SQLITE_MISMATCH. If fts3DeleteByRowid is 
                   122812:       ** invoked, it will delete zero rows (since no row will have
                   122813:       ** docid=$pNewRowid if $pNewRowid is not an integer value).
                   122814:       */
                   122815:       if( sqlite3_vtab_on_conflict(p->db)==SQLITE_REPLACE ){
                   122816:         rc = fts3DeleteByRowid(p, pNewRowid, &nChng, aSzDel);
                   122817:       }else{
                   122818:         rc = fts3InsertData(p, apVal, pRowid);
                   122819:         bInsertDone = 1;
                   122820:       }
                   122821:     }
                   122822:   }
                   122823:   if( rc!=SQLITE_OK ){
                   122824:     goto update_out;
                   122825:   }
                   122826: 
                   122827:   /* If this is a DELETE or UPDATE operation, remove the old record. */
                   122828:   if( sqlite3_value_type(apVal[0])!=SQLITE_NULL ){
                   122829:     assert( sqlite3_value_type(apVal[0])==SQLITE_INTEGER );
                   122830:     rc = fts3DeleteByRowid(p, apVal[0], &nChng, aSzDel);
                   122831:     isRemove = 1;
                   122832:     iRemove = sqlite3_value_int64(apVal[0]);
                   122833:   }
                   122834:   
                   122835:   /* If this is an INSERT or UPDATE operation, insert the new record. */
                   122836:   if( nArg>1 && rc==SQLITE_OK ){
                   122837:     if( bInsertDone==0 ){
                   122838:       rc = fts3InsertData(p, apVal, pRowid);
                   122839:       if( rc==SQLITE_CONSTRAINT ) rc = SQLITE_CORRUPT_VTAB;
                   122840:     }
                   122841:     if( rc==SQLITE_OK && (!isRemove || *pRowid!=iRemove) ){
                   122842:       rc = fts3PendingTermsDocid(p, *pRowid);
                   122843:     }
                   122844:     if( rc==SQLITE_OK ){
                   122845:       rc = fts3InsertTerms(p, apVal, aSzIns);
                   122846:     }
                   122847:     if( p->bHasDocsize ){
                   122848:       fts3InsertDocsize(&rc, p, aSzIns);
                   122849:     }
                   122850:     nChng++;
                   122851:   }
                   122852: 
                   122853:   if( p->bHasStat ){
                   122854:     fts3UpdateDocTotals(&rc, p, aSzIns, aSzDel, nChng);
                   122855:   }
                   122856: 
                   122857:  update_out:
                   122858:   sqlite3_free(aSzIns);
                   122859:   sqlite3Fts3SegmentsClose(p);
                   122860:   return rc;
                   122861: }
                   122862: 
                   122863: /* 
                   122864: ** Flush any data in the pending-terms hash table to disk. If successful,
                   122865: ** merge all segments in the database (including the new segment, if 
                   122866: ** there was any data to flush) into a single segment. 
                   122867: */
                   122868: SQLITE_PRIVATE int sqlite3Fts3Optimize(Fts3Table *p){
                   122869:   int rc;
                   122870:   rc = sqlite3_exec(p->db, "SAVEPOINT fts3", 0, 0, 0);
                   122871:   if( rc==SQLITE_OK ){
                   122872:     rc = fts3DoOptimize(p, 1);
                   122873:     if( rc==SQLITE_OK || rc==SQLITE_DONE ){
                   122874:       int rc2 = sqlite3_exec(p->db, "RELEASE fts3", 0, 0, 0);
                   122875:       if( rc2!=SQLITE_OK ) rc = rc2;
                   122876:     }else{
                   122877:       sqlite3_exec(p->db, "ROLLBACK TO fts3", 0, 0, 0);
                   122878:       sqlite3_exec(p->db, "RELEASE fts3", 0, 0, 0);
                   122879:     }
                   122880:   }
                   122881:   sqlite3Fts3SegmentsClose(p);
                   122882:   return rc;
                   122883: }
                   122884: 
                   122885: #endif
                   122886: 
                   122887: /************** End of fts3_write.c ******************************************/
                   122888: /************** Begin file fts3_snippet.c ************************************/
                   122889: /*
                   122890: ** 2009 Oct 23
                   122891: **
                   122892: ** The author disclaims copyright to this source code.  In place of
                   122893: ** a legal notice, here is a blessing:
                   122894: **
                   122895: **    May you do good and not evil.
                   122896: **    May you find forgiveness for yourself and forgive others.
                   122897: **    May you share freely, never taking more than you give.
                   122898: **
                   122899: ******************************************************************************
                   122900: */
                   122901: 
                   122902: #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3)
                   122903: 
                   122904: 
                   122905: /*
                   122906: ** Characters that may appear in the second argument to matchinfo().
                   122907: */
                   122908: #define FTS3_MATCHINFO_NPHRASE   'p'        /* 1 value */
                   122909: #define FTS3_MATCHINFO_NCOL      'c'        /* 1 value */
                   122910: #define FTS3_MATCHINFO_NDOC      'n'        /* 1 value */
                   122911: #define FTS3_MATCHINFO_AVGLENGTH 'a'        /* nCol values */
                   122912: #define FTS3_MATCHINFO_LENGTH    'l'        /* nCol values */
                   122913: #define FTS3_MATCHINFO_LCS       's'        /* nCol values */
                   122914: #define FTS3_MATCHINFO_HITS      'x'        /* 3*nCol*nPhrase values */
                   122915: 
                   122916: /*
                   122917: ** The default value for the second argument to matchinfo(). 
                   122918: */
                   122919: #define FTS3_MATCHINFO_DEFAULT   "pcx"
                   122920: 
                   122921: 
                   122922: /*
                   122923: ** Used as an fts3ExprIterate() context when loading phrase doclists to
                   122924: ** Fts3Expr.aDoclist[]/nDoclist.
                   122925: */
                   122926: typedef struct LoadDoclistCtx LoadDoclistCtx;
                   122927: struct LoadDoclistCtx {
                   122928:   Fts3Cursor *pCsr;               /* FTS3 Cursor */
                   122929:   int nPhrase;                    /* Number of phrases seen so far */
                   122930:   int nToken;                     /* Number of tokens seen so far */
                   122931: };
                   122932: 
                   122933: /*
                   122934: ** The following types are used as part of the implementation of the 
                   122935: ** fts3BestSnippet() routine.
                   122936: */
                   122937: typedef struct SnippetIter SnippetIter;
                   122938: typedef struct SnippetPhrase SnippetPhrase;
                   122939: typedef struct SnippetFragment SnippetFragment;
                   122940: 
                   122941: struct SnippetIter {
                   122942:   Fts3Cursor *pCsr;               /* Cursor snippet is being generated from */
                   122943:   int iCol;                       /* Extract snippet from this column */
                   122944:   int nSnippet;                   /* Requested snippet length (in tokens) */
                   122945:   int nPhrase;                    /* Number of phrases in query */
                   122946:   SnippetPhrase *aPhrase;         /* Array of size nPhrase */
                   122947:   int iCurrent;                   /* First token of current snippet */
                   122948: };
                   122949: 
                   122950: struct SnippetPhrase {
                   122951:   int nToken;                     /* Number of tokens in phrase */
                   122952:   char *pList;                    /* Pointer to start of phrase position list */
                   122953:   int iHead;                      /* Next value in position list */
                   122954:   char *pHead;                    /* Position list data following iHead */
                   122955:   int iTail;                      /* Next value in trailing position list */
                   122956:   char *pTail;                    /* Position list data following iTail */
                   122957: };
                   122958: 
                   122959: struct SnippetFragment {
                   122960:   int iCol;                       /* Column snippet is extracted from */
                   122961:   int iPos;                       /* Index of first token in snippet */
                   122962:   u64 covered;                    /* Mask of query phrases covered */
                   122963:   u64 hlmask;                     /* Mask of snippet terms to highlight */
                   122964: };
                   122965: 
                   122966: /*
                   122967: ** This type is used as an fts3ExprIterate() context object while 
                   122968: ** accumulating the data returned by the matchinfo() function.
                   122969: */
                   122970: typedef struct MatchInfo MatchInfo;
                   122971: struct MatchInfo {
                   122972:   Fts3Cursor *pCursor;            /* FTS3 Cursor */
                   122973:   int nCol;                       /* Number of columns in table */
                   122974:   int nPhrase;                    /* Number of matchable phrases in query */
                   122975:   sqlite3_int64 nDoc;             /* Number of docs in database */
                   122976:   u32 *aMatchinfo;                /* Pre-allocated buffer */
                   122977: };
                   122978: 
                   122979: 
                   122980: 
                   122981: /*
                   122982: ** The snippet() and offsets() functions both return text values. An instance
                   122983: ** of the following structure is used to accumulate those values while the
                   122984: ** functions are running. See fts3StringAppend() for details.
                   122985: */
                   122986: typedef struct StrBuffer StrBuffer;
                   122987: struct StrBuffer {
                   122988:   char *z;                        /* Pointer to buffer containing string */
                   122989:   int n;                          /* Length of z in bytes (excl. nul-term) */
                   122990:   int nAlloc;                     /* Allocated size of buffer z in bytes */
                   122991: };
                   122992: 
                   122993: 
                   122994: /*
                   122995: ** This function is used to help iterate through a position-list. A position
                   122996: ** list is a list of unique integers, sorted from smallest to largest. Each
                   122997: ** element of the list is represented by an FTS3 varint that takes the value
                   122998: ** of the difference between the current element and the previous one plus
                   122999: ** two. For example, to store the position-list:
                   123000: **
                   123001: **     4 9 113
                   123002: **
                   123003: ** the three varints:
                   123004: **
                   123005: **     6 7 106
                   123006: **
                   123007: ** are encoded.
                   123008: **
                   123009: ** When this function is called, *pp points to the start of an element of
                   123010: ** the list. *piPos contains the value of the previous entry in the list.
                   123011: ** After it returns, *piPos contains the value of the next element of the
                   123012: ** list and *pp is advanced to the following varint.
                   123013: */
                   123014: static void fts3GetDeltaPosition(char **pp, int *piPos){
                   123015:   int iVal;
                   123016:   *pp += sqlite3Fts3GetVarint32(*pp, &iVal);
                   123017:   *piPos += (iVal-2);
                   123018: }
                   123019: 
                   123020: /*
                   123021: ** Helper function for fts3ExprIterate() (see below).
                   123022: */
                   123023: static int fts3ExprIterate2(
                   123024:   Fts3Expr *pExpr,                /* Expression to iterate phrases of */
                   123025:   int *piPhrase,                  /* Pointer to phrase counter */
                   123026:   int (*x)(Fts3Expr*,int,void*),  /* Callback function to invoke for phrases */
                   123027:   void *pCtx                      /* Second argument to pass to callback */
                   123028: ){
                   123029:   int rc;                         /* Return code */
                   123030:   int eType = pExpr->eType;       /* Type of expression node pExpr */
                   123031: 
                   123032:   if( eType!=FTSQUERY_PHRASE ){
                   123033:     assert( pExpr->pLeft && pExpr->pRight );
                   123034:     rc = fts3ExprIterate2(pExpr->pLeft, piPhrase, x, pCtx);
                   123035:     if( rc==SQLITE_OK && eType!=FTSQUERY_NOT ){
                   123036:       rc = fts3ExprIterate2(pExpr->pRight, piPhrase, x, pCtx);
                   123037:     }
                   123038:   }else{
                   123039:     rc = x(pExpr, *piPhrase, pCtx);
                   123040:     (*piPhrase)++;
                   123041:   }
                   123042:   return rc;
                   123043: }
                   123044: 
                   123045: /*
                   123046: ** Iterate through all phrase nodes in an FTS3 query, except those that
                   123047: ** are part of a sub-tree that is the right-hand-side of a NOT operator.
                   123048: ** For each phrase node found, the supplied callback function is invoked.
                   123049: **
                   123050: ** If the callback function returns anything other than SQLITE_OK, 
                   123051: ** the iteration is abandoned and the error code returned immediately.
                   123052: ** Otherwise, SQLITE_OK is returned after a callback has been made for
                   123053: ** all eligible phrase nodes.
                   123054: */
                   123055: static int fts3ExprIterate(
                   123056:   Fts3Expr *pExpr,                /* Expression to iterate phrases of */
                   123057:   int (*x)(Fts3Expr*,int,void*),  /* Callback function to invoke for phrases */
                   123058:   void *pCtx                      /* Second argument to pass to callback */
                   123059: ){
                   123060:   int iPhrase = 0;                /* Variable used as the phrase counter */
                   123061:   return fts3ExprIterate2(pExpr, &iPhrase, x, pCtx);
                   123062: }
                   123063: 
                   123064: /*
                   123065: ** This is an fts3ExprIterate() callback used while loading the doclists
                   123066: ** for each phrase into Fts3Expr.aDoclist[]/nDoclist. See also
                   123067: ** fts3ExprLoadDoclists().
                   123068: */
                   123069: static int fts3ExprLoadDoclistsCb(Fts3Expr *pExpr, int iPhrase, void *ctx){
                   123070:   int rc = SQLITE_OK;
                   123071:   Fts3Phrase *pPhrase = pExpr->pPhrase;
                   123072:   LoadDoclistCtx *p = (LoadDoclistCtx *)ctx;
                   123073: 
                   123074:   UNUSED_PARAMETER(iPhrase);
                   123075: 
                   123076:   p->nPhrase++;
                   123077:   p->nToken += pPhrase->nToken;
                   123078: 
                   123079:   return rc;
                   123080: }
                   123081: 
                   123082: /*
                   123083: ** Load the doclists for each phrase in the query associated with FTS3 cursor
                   123084: ** pCsr. 
                   123085: **
                   123086: ** If pnPhrase is not NULL, then *pnPhrase is set to the number of matchable 
                   123087: ** phrases in the expression (all phrases except those directly or 
                   123088: ** indirectly descended from the right-hand-side of a NOT operator). If 
                   123089: ** pnToken is not NULL, then it is set to the number of tokens in all
                   123090: ** matchable phrases of the expression.
                   123091: */
                   123092: static int fts3ExprLoadDoclists(
                   123093:   Fts3Cursor *pCsr,               /* Fts3 cursor for current query */
                   123094:   int *pnPhrase,                  /* OUT: Number of phrases in query */
                   123095:   int *pnToken                    /* OUT: Number of tokens in query */
                   123096: ){
                   123097:   int rc;                         /* Return Code */
                   123098:   LoadDoclistCtx sCtx = {0,0,0};  /* Context for fts3ExprIterate() */
                   123099:   sCtx.pCsr = pCsr;
                   123100:   rc = fts3ExprIterate(pCsr->pExpr, fts3ExprLoadDoclistsCb, (void *)&sCtx);
                   123101:   if( pnPhrase ) *pnPhrase = sCtx.nPhrase;
                   123102:   if( pnToken ) *pnToken = sCtx.nToken;
                   123103:   return rc;
                   123104: }
                   123105: 
                   123106: static int fts3ExprPhraseCountCb(Fts3Expr *pExpr, int iPhrase, void *ctx){
                   123107:   (*(int *)ctx)++;
                   123108:   UNUSED_PARAMETER(pExpr);
                   123109:   UNUSED_PARAMETER(iPhrase);
                   123110:   return SQLITE_OK;
                   123111: }
                   123112: static int fts3ExprPhraseCount(Fts3Expr *pExpr){
                   123113:   int nPhrase = 0;
                   123114:   (void)fts3ExprIterate(pExpr, fts3ExprPhraseCountCb, (void *)&nPhrase);
                   123115:   return nPhrase;
                   123116: }
                   123117: 
                   123118: /*
                   123119: ** Advance the position list iterator specified by the first two 
                   123120: ** arguments so that it points to the first element with a value greater
                   123121: ** than or equal to parameter iNext.
                   123122: */
                   123123: static void fts3SnippetAdvance(char **ppIter, int *piIter, int iNext){
                   123124:   char *pIter = *ppIter;
                   123125:   if( pIter ){
                   123126:     int iIter = *piIter;
                   123127: 
                   123128:     while( iIter<iNext ){
                   123129:       if( 0==(*pIter & 0xFE) ){
                   123130:         iIter = -1;
                   123131:         pIter = 0;
                   123132:         break;
                   123133:       }
                   123134:       fts3GetDeltaPosition(&pIter, &iIter);
                   123135:     }
                   123136: 
                   123137:     *piIter = iIter;
                   123138:     *ppIter = pIter;
                   123139:   }
                   123140: }
                   123141: 
                   123142: /*
                   123143: ** Advance the snippet iterator to the next candidate snippet.
                   123144: */
                   123145: static int fts3SnippetNextCandidate(SnippetIter *pIter){
                   123146:   int i;                          /* Loop counter */
                   123147: 
                   123148:   if( pIter->iCurrent<0 ){
                   123149:     /* The SnippetIter object has just been initialized. The first snippet
                   123150:     ** candidate always starts at offset 0 (even if this candidate has a
                   123151:     ** score of 0.0).
                   123152:     */
                   123153:     pIter->iCurrent = 0;
                   123154: 
                   123155:     /* Advance the 'head' iterator of each phrase to the first offset that
                   123156:     ** is greater than or equal to (iNext+nSnippet).
                   123157:     */
                   123158:     for(i=0; i<pIter->nPhrase; i++){
                   123159:       SnippetPhrase *pPhrase = &pIter->aPhrase[i];
                   123160:       fts3SnippetAdvance(&pPhrase->pHead, &pPhrase->iHead, pIter->nSnippet);
                   123161:     }
                   123162:   }else{
                   123163:     int iStart;
                   123164:     int iEnd = 0x7FFFFFFF;
                   123165: 
                   123166:     for(i=0; i<pIter->nPhrase; i++){
                   123167:       SnippetPhrase *pPhrase = &pIter->aPhrase[i];
                   123168:       if( pPhrase->pHead && pPhrase->iHead<iEnd ){
                   123169:         iEnd = pPhrase->iHead;
                   123170:       }
                   123171:     }
                   123172:     if( iEnd==0x7FFFFFFF ){
                   123173:       return 1;
                   123174:     }
                   123175: 
                   123176:     pIter->iCurrent = iStart = iEnd - pIter->nSnippet + 1;
                   123177:     for(i=0; i<pIter->nPhrase; i++){
                   123178:       SnippetPhrase *pPhrase = &pIter->aPhrase[i];
                   123179:       fts3SnippetAdvance(&pPhrase->pHead, &pPhrase->iHead, iEnd+1);
                   123180:       fts3SnippetAdvance(&pPhrase->pTail, &pPhrase->iTail, iStart);
                   123181:     }
                   123182:   }
                   123183: 
                   123184:   return 0;
                   123185: }
                   123186: 
                   123187: /*
                   123188: ** Retrieve information about the current candidate snippet of snippet 
                   123189: ** iterator pIter.
                   123190: */
                   123191: static void fts3SnippetDetails(
                   123192:   SnippetIter *pIter,             /* Snippet iterator */
                   123193:   u64 mCovered,                   /* Bitmask of phrases already covered */
                   123194:   int *piToken,                   /* OUT: First token of proposed snippet */
                   123195:   int *piScore,                   /* OUT: "Score" for this snippet */
                   123196:   u64 *pmCover,                   /* OUT: Bitmask of phrases covered */
                   123197:   u64 *pmHighlight                /* OUT: Bitmask of terms to highlight */
                   123198: ){
                   123199:   int iStart = pIter->iCurrent;   /* First token of snippet */
                   123200:   int iScore = 0;                 /* Score of this snippet */
                   123201:   int i;                          /* Loop counter */
                   123202:   u64 mCover = 0;                 /* Mask of phrases covered by this snippet */
                   123203:   u64 mHighlight = 0;             /* Mask of tokens to highlight in snippet */
                   123204: 
                   123205:   for(i=0; i<pIter->nPhrase; i++){
                   123206:     SnippetPhrase *pPhrase = &pIter->aPhrase[i];
                   123207:     if( pPhrase->pTail ){
                   123208:       char *pCsr = pPhrase->pTail;
                   123209:       int iCsr = pPhrase->iTail;
                   123210: 
                   123211:       while( iCsr<(iStart+pIter->nSnippet) ){
                   123212:         int j;
                   123213:         u64 mPhrase = (u64)1 << i;
                   123214:         u64 mPos = (u64)1 << (iCsr - iStart);
                   123215:         assert( iCsr>=iStart );
                   123216:         if( (mCover|mCovered)&mPhrase ){
                   123217:           iScore++;
                   123218:         }else{
                   123219:           iScore += 1000;
                   123220:         }
                   123221:         mCover |= mPhrase;
                   123222: 
                   123223:         for(j=0; j<pPhrase->nToken; j++){
                   123224:           mHighlight |= (mPos>>j);
                   123225:         }
                   123226: 
                   123227:         if( 0==(*pCsr & 0x0FE) ) break;
                   123228:         fts3GetDeltaPosition(&pCsr, &iCsr);
                   123229:       }
                   123230:     }
                   123231:   }
                   123232: 
                   123233:   /* Set the output variables before returning. */
                   123234:   *piToken = iStart;
                   123235:   *piScore = iScore;
                   123236:   *pmCover = mCover;
                   123237:   *pmHighlight = mHighlight;
                   123238: }
                   123239: 
                   123240: /*
                   123241: ** This function is an fts3ExprIterate() callback used by fts3BestSnippet().
                   123242: ** Each invocation populates an element of the SnippetIter.aPhrase[] array.
                   123243: */
                   123244: static int fts3SnippetFindPositions(Fts3Expr *pExpr, int iPhrase, void *ctx){
                   123245:   SnippetIter *p = (SnippetIter *)ctx;
                   123246:   SnippetPhrase *pPhrase = &p->aPhrase[iPhrase];
                   123247:   char *pCsr;
                   123248: 
                   123249:   pPhrase->nToken = pExpr->pPhrase->nToken;
                   123250: 
                   123251:   pCsr = sqlite3Fts3EvalPhrasePoslist(p->pCsr, pExpr, p->iCol);
                   123252:   if( pCsr ){
                   123253:     int iFirst = 0;
                   123254:     pPhrase->pList = pCsr;
                   123255:     fts3GetDeltaPosition(&pCsr, &iFirst);
                   123256:     pPhrase->pHead = pCsr;
                   123257:     pPhrase->pTail = pCsr;
                   123258:     pPhrase->iHead = iFirst;
                   123259:     pPhrase->iTail = iFirst;
                   123260:   }else{
                   123261:     assert( pPhrase->pList==0 && pPhrase->pHead==0 && pPhrase->pTail==0 );
                   123262:   }
                   123263: 
                   123264:   return SQLITE_OK;
                   123265: }
                   123266: 
                   123267: /*
                   123268: ** Select the fragment of text consisting of nFragment contiguous tokens 
                   123269: ** from column iCol that represent the "best" snippet. The best snippet
                   123270: ** is the snippet with the highest score, where scores are calculated
                   123271: ** by adding:
                   123272: **
1.1.1.3 ! misho    123273: **   (a) +1 point for each occurrence of a matchable phrase in the snippet.
1.1       misho    123274: **
1.1.1.3 ! misho    123275: **   (b) +1000 points for the first occurrence of each matchable phrase in 
1.1       misho    123276: **       the snippet for which the corresponding mCovered bit is not set.
                   123277: **
                   123278: ** The selected snippet parameters are stored in structure *pFragment before
                   123279: ** returning. The score of the selected snippet is stored in *piScore
                   123280: ** before returning.
                   123281: */
                   123282: static int fts3BestSnippet(
                   123283:   int nSnippet,                   /* Desired snippet length */
                   123284:   Fts3Cursor *pCsr,               /* Cursor to create snippet for */
                   123285:   int iCol,                       /* Index of column to create snippet from */
                   123286:   u64 mCovered,                   /* Mask of phrases already covered */
                   123287:   u64 *pmSeen,                    /* IN/OUT: Mask of phrases seen */
                   123288:   SnippetFragment *pFragment,     /* OUT: Best snippet found */
                   123289:   int *piScore                    /* OUT: Score of snippet pFragment */
                   123290: ){
                   123291:   int rc;                         /* Return Code */
                   123292:   int nList;                      /* Number of phrases in expression */
                   123293:   SnippetIter sIter;              /* Iterates through snippet candidates */
                   123294:   int nByte;                      /* Number of bytes of space to allocate */
                   123295:   int iBestScore = -1;            /* Best snippet score found so far */
                   123296:   int i;                          /* Loop counter */
                   123297: 
                   123298:   memset(&sIter, 0, sizeof(sIter));
                   123299: 
                   123300:   /* Iterate through the phrases in the expression to count them. The same
                   123301:   ** callback makes sure the doclists are loaded for each phrase.
                   123302:   */
                   123303:   rc = fts3ExprLoadDoclists(pCsr, &nList, 0);
                   123304:   if( rc!=SQLITE_OK ){
                   123305:     return rc;
                   123306:   }
                   123307: 
                   123308:   /* Now that it is known how many phrases there are, allocate and zero
                   123309:   ** the required space using malloc().
                   123310:   */
                   123311:   nByte = sizeof(SnippetPhrase) * nList;
                   123312:   sIter.aPhrase = (SnippetPhrase *)sqlite3_malloc(nByte);
                   123313:   if( !sIter.aPhrase ){
                   123314:     return SQLITE_NOMEM;
                   123315:   }
                   123316:   memset(sIter.aPhrase, 0, nByte);
                   123317: 
                   123318:   /* Initialize the contents of the SnippetIter object. Then iterate through
                   123319:   ** the set of phrases in the expression to populate the aPhrase[] array.
                   123320:   */
                   123321:   sIter.pCsr = pCsr;
                   123322:   sIter.iCol = iCol;
                   123323:   sIter.nSnippet = nSnippet;
                   123324:   sIter.nPhrase = nList;
                   123325:   sIter.iCurrent = -1;
                   123326:   (void)fts3ExprIterate(pCsr->pExpr, fts3SnippetFindPositions, (void *)&sIter);
                   123327: 
                   123328:   /* Set the *pmSeen output variable. */
                   123329:   for(i=0; i<nList; i++){
                   123330:     if( sIter.aPhrase[i].pHead ){
                   123331:       *pmSeen |= (u64)1 << i;
                   123332:     }
                   123333:   }
                   123334: 
                   123335:   /* Loop through all candidate snippets. Store the best snippet in 
                   123336:   ** *pFragment. Store its associated 'score' in iBestScore.
                   123337:   */
                   123338:   pFragment->iCol = iCol;
                   123339:   while( !fts3SnippetNextCandidate(&sIter) ){
                   123340:     int iPos;
                   123341:     int iScore;
                   123342:     u64 mCover;
                   123343:     u64 mHighlight;
                   123344:     fts3SnippetDetails(&sIter, mCovered, &iPos, &iScore, &mCover, &mHighlight);
                   123345:     assert( iScore>=0 );
                   123346:     if( iScore>iBestScore ){
                   123347:       pFragment->iPos = iPos;
                   123348:       pFragment->hlmask = mHighlight;
                   123349:       pFragment->covered = mCover;
                   123350:       iBestScore = iScore;
                   123351:     }
                   123352:   }
                   123353: 
                   123354:   sqlite3_free(sIter.aPhrase);
                   123355:   *piScore = iBestScore;
                   123356:   return SQLITE_OK;
                   123357: }
                   123358: 
                   123359: 
                   123360: /*
                   123361: ** Append a string to the string-buffer passed as the first argument.
                   123362: **
                   123363: ** If nAppend is negative, then the length of the string zAppend is
                   123364: ** determined using strlen().
                   123365: */
                   123366: static int fts3StringAppend(
                   123367:   StrBuffer *pStr,                /* Buffer to append to */
                   123368:   const char *zAppend,            /* Pointer to data to append to buffer */
                   123369:   int nAppend                     /* Size of zAppend in bytes (or -1) */
                   123370: ){
                   123371:   if( nAppend<0 ){
                   123372:     nAppend = (int)strlen(zAppend);
                   123373:   }
                   123374: 
                   123375:   /* If there is insufficient space allocated at StrBuffer.z, use realloc()
1.1.1.3 ! misho    123376:   ** to grow the buffer until so that it is big enough to accommodate the
1.1       misho    123377:   ** appended data.
                   123378:   */
                   123379:   if( pStr->n+nAppend+1>=pStr->nAlloc ){
                   123380:     int nAlloc = pStr->nAlloc+nAppend+100;
                   123381:     char *zNew = sqlite3_realloc(pStr->z, nAlloc);
                   123382:     if( !zNew ){
                   123383:       return SQLITE_NOMEM;
                   123384:     }
                   123385:     pStr->z = zNew;
                   123386:     pStr->nAlloc = nAlloc;
                   123387:   }
                   123388: 
                   123389:   /* Append the data to the string buffer. */
                   123390:   memcpy(&pStr->z[pStr->n], zAppend, nAppend);
                   123391:   pStr->n += nAppend;
                   123392:   pStr->z[pStr->n] = '\0';
                   123393: 
                   123394:   return SQLITE_OK;
                   123395: }
                   123396: 
                   123397: /*
                   123398: ** The fts3BestSnippet() function often selects snippets that end with a
                   123399: ** query term. That is, the final term of the snippet is always a term
                   123400: ** that requires highlighting. For example, if 'X' is a highlighted term
                   123401: ** and '.' is a non-highlighted term, BestSnippet() may select:
                   123402: **
                   123403: **     ........X.....X
                   123404: **
                   123405: ** This function "shifts" the beginning of the snippet forward in the 
                   123406: ** document so that there are approximately the same number of 
                   123407: ** non-highlighted terms to the right of the final highlighted term as there
                   123408: ** are to the left of the first highlighted term. For example, to this:
                   123409: **
                   123410: **     ....X.....X....
                   123411: **
                   123412: ** This is done as part of extracting the snippet text, not when selecting
                   123413: ** the snippet. Snippet selection is done based on doclists only, so there
                   123414: ** is no way for fts3BestSnippet() to know whether or not the document 
                   123415: ** actually contains terms that follow the final highlighted term. 
                   123416: */
                   123417: static int fts3SnippetShift(
                   123418:   Fts3Table *pTab,                /* FTS3 table snippet comes from */
                   123419:   int nSnippet,                   /* Number of tokens desired for snippet */
                   123420:   const char *zDoc,               /* Document text to extract snippet from */
                   123421:   int nDoc,                       /* Size of buffer zDoc in bytes */
                   123422:   int *piPos,                     /* IN/OUT: First token of snippet */
                   123423:   u64 *pHlmask                    /* IN/OUT: Mask of tokens to highlight */
                   123424: ){
                   123425:   u64 hlmask = *pHlmask;          /* Local copy of initial highlight-mask */
                   123426: 
                   123427:   if( hlmask ){
                   123428:     int nLeft;                    /* Tokens to the left of first highlight */
                   123429:     int nRight;                   /* Tokens to the right of last highlight */
                   123430:     int nDesired;                 /* Ideal number of tokens to shift forward */
                   123431: 
                   123432:     for(nLeft=0; !(hlmask & ((u64)1 << nLeft)); nLeft++);
                   123433:     for(nRight=0; !(hlmask & ((u64)1 << (nSnippet-1-nRight))); nRight++);
                   123434:     nDesired = (nLeft-nRight)/2;
                   123435: 
                   123436:     /* Ideally, the start of the snippet should be pushed forward in the
                   123437:     ** document nDesired tokens. This block checks if there are actually
                   123438:     ** nDesired tokens to the right of the snippet. If so, *piPos and
                   123439:     ** *pHlMask are updated to shift the snippet nDesired tokens to the
                   123440:     ** right. Otherwise, the snippet is shifted by the number of tokens
                   123441:     ** available.
                   123442:     */
                   123443:     if( nDesired>0 ){
                   123444:       int nShift;                 /* Number of tokens to shift snippet by */
                   123445:       int iCurrent = 0;           /* Token counter */
                   123446:       int rc;                     /* Return Code */
                   123447:       sqlite3_tokenizer_module *pMod;
                   123448:       sqlite3_tokenizer_cursor *pC;
                   123449:       pMod = (sqlite3_tokenizer_module *)pTab->pTokenizer->pModule;
                   123450: 
                   123451:       /* Open a cursor on zDoc/nDoc. Check if there are (nSnippet+nDesired)
                   123452:       ** or more tokens in zDoc/nDoc.
                   123453:       */
                   123454:       rc = pMod->xOpen(pTab->pTokenizer, zDoc, nDoc, &pC);
                   123455:       if( rc!=SQLITE_OK ){
                   123456:         return rc;
                   123457:       }
                   123458:       pC->pTokenizer = pTab->pTokenizer;
                   123459:       while( rc==SQLITE_OK && iCurrent<(nSnippet+nDesired) ){
                   123460:         const char *ZDUMMY; int DUMMY1, DUMMY2, DUMMY3;
                   123461:         rc = pMod->xNext(pC, &ZDUMMY, &DUMMY1, &DUMMY2, &DUMMY3, &iCurrent);
                   123462:       }
                   123463:       pMod->xClose(pC);
                   123464:       if( rc!=SQLITE_OK && rc!=SQLITE_DONE ){ return rc; }
                   123465: 
                   123466:       nShift = (rc==SQLITE_DONE)+iCurrent-nSnippet;
                   123467:       assert( nShift<=nDesired );
                   123468:       if( nShift>0 ){
                   123469:         *piPos += nShift;
                   123470:         *pHlmask = hlmask >> nShift;
                   123471:       }
                   123472:     }
                   123473:   }
                   123474:   return SQLITE_OK;
                   123475: }
                   123476: 
                   123477: /*
                   123478: ** Extract the snippet text for fragment pFragment from cursor pCsr and
                   123479: ** append it to string buffer pOut.
                   123480: */
                   123481: static int fts3SnippetText(
                   123482:   Fts3Cursor *pCsr,               /* FTS3 Cursor */
                   123483:   SnippetFragment *pFragment,     /* Snippet to extract */
                   123484:   int iFragment,                  /* Fragment number */
                   123485:   int isLast,                     /* True for final fragment in snippet */
                   123486:   int nSnippet,                   /* Number of tokens in extracted snippet */
                   123487:   const char *zOpen,              /* String inserted before highlighted term */
                   123488:   const char *zClose,             /* String inserted after highlighted term */
                   123489:   const char *zEllipsis,          /* String inserted between snippets */
                   123490:   StrBuffer *pOut                 /* Write output here */
                   123491: ){
                   123492:   Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab;
                   123493:   int rc;                         /* Return code */
                   123494:   const char *zDoc;               /* Document text to extract snippet from */
                   123495:   int nDoc;                       /* Size of zDoc in bytes */
                   123496:   int iCurrent = 0;               /* Current token number of document */
                   123497:   int iEnd = 0;                   /* Byte offset of end of current token */
                   123498:   int isShiftDone = 0;            /* True after snippet is shifted */
                   123499:   int iPos = pFragment->iPos;     /* First token of snippet */
                   123500:   u64 hlmask = pFragment->hlmask; /* Highlight-mask for snippet */
                   123501:   int iCol = pFragment->iCol+1;   /* Query column to extract text from */
                   123502:   sqlite3_tokenizer_module *pMod; /* Tokenizer module methods object */
                   123503:   sqlite3_tokenizer_cursor *pC;   /* Tokenizer cursor open on zDoc/nDoc */
                   123504:   const char *ZDUMMY;             /* Dummy argument used with tokenizer */
                   123505:   int DUMMY1;                     /* Dummy argument used with tokenizer */
                   123506:   
                   123507:   zDoc = (const char *)sqlite3_column_text(pCsr->pStmt, iCol);
                   123508:   if( zDoc==0 ){
                   123509:     if( sqlite3_column_type(pCsr->pStmt, iCol)!=SQLITE_NULL ){
                   123510:       return SQLITE_NOMEM;
                   123511:     }
                   123512:     return SQLITE_OK;
                   123513:   }
                   123514:   nDoc = sqlite3_column_bytes(pCsr->pStmt, iCol);
                   123515: 
                   123516:   /* Open a token cursor on the document. */
                   123517:   pMod = (sqlite3_tokenizer_module *)pTab->pTokenizer->pModule;
                   123518:   rc = pMod->xOpen(pTab->pTokenizer, zDoc, nDoc, &pC);
                   123519:   if( rc!=SQLITE_OK ){
                   123520:     return rc;
                   123521:   }
                   123522:   pC->pTokenizer = pTab->pTokenizer;
                   123523: 
                   123524:   while( rc==SQLITE_OK ){
                   123525:     int iBegin;                   /* Offset in zDoc of start of token */
                   123526:     int iFin;                     /* Offset in zDoc of end of token */
                   123527:     int isHighlight;              /* True for highlighted terms */
                   123528: 
                   123529:     rc = pMod->xNext(pC, &ZDUMMY, &DUMMY1, &iBegin, &iFin, &iCurrent);
                   123530:     if( rc!=SQLITE_OK ){
                   123531:       if( rc==SQLITE_DONE ){
                   123532:         /* Special case - the last token of the snippet is also the last token
                   123533:         ** of the column. Append any punctuation that occurred between the end
                   123534:         ** of the previous token and the end of the document to the output. 
                   123535:         ** Then break out of the loop. */
                   123536:         rc = fts3StringAppend(pOut, &zDoc[iEnd], -1);
                   123537:       }
                   123538:       break;
                   123539:     }
                   123540:     if( iCurrent<iPos ){ continue; }
                   123541: 
                   123542:     if( !isShiftDone ){
                   123543:       int n = nDoc - iBegin;
                   123544:       rc = fts3SnippetShift(pTab, nSnippet, &zDoc[iBegin], n, &iPos, &hlmask);
                   123545:       isShiftDone = 1;
                   123546: 
                   123547:       /* Now that the shift has been done, check if the initial "..." are
                   123548:       ** required. They are required if (a) this is not the first fragment,
                   123549:       ** or (b) this fragment does not begin at position 0 of its column. 
                   123550:       */
                   123551:       if( rc==SQLITE_OK && (iPos>0 || iFragment>0) ){
                   123552:         rc = fts3StringAppend(pOut, zEllipsis, -1);
                   123553:       }
                   123554:       if( rc!=SQLITE_OK || iCurrent<iPos ) continue;
                   123555:     }
                   123556: 
                   123557:     if( iCurrent>=(iPos+nSnippet) ){
                   123558:       if( isLast ){
                   123559:         rc = fts3StringAppend(pOut, zEllipsis, -1);
                   123560:       }
                   123561:       break;
                   123562:     }
                   123563: 
                   123564:     /* Set isHighlight to true if this term should be highlighted. */
                   123565:     isHighlight = (hlmask & ((u64)1 << (iCurrent-iPos)))!=0;
                   123566: 
                   123567:     if( iCurrent>iPos ) rc = fts3StringAppend(pOut, &zDoc[iEnd], iBegin-iEnd);
                   123568:     if( rc==SQLITE_OK && isHighlight ) rc = fts3StringAppend(pOut, zOpen, -1);
                   123569:     if( rc==SQLITE_OK ) rc = fts3StringAppend(pOut, &zDoc[iBegin], iFin-iBegin);
                   123570:     if( rc==SQLITE_OK && isHighlight ) rc = fts3StringAppend(pOut, zClose, -1);
                   123571: 
                   123572:     iEnd = iFin;
                   123573:   }
                   123574: 
                   123575:   pMod->xClose(pC);
                   123576:   return rc;
                   123577: }
                   123578: 
                   123579: 
                   123580: /*
                   123581: ** This function is used to count the entries in a column-list (a 
                   123582: ** delta-encoded list of term offsets within a single column of a single 
                   123583: ** row). When this function is called, *ppCollist should point to the
                   123584: ** beginning of the first varint in the column-list (the varint that
                   123585: ** contains the position of the first matching term in the column data).
                   123586: ** Before returning, *ppCollist is set to point to the first byte after
                   123587: ** the last varint in the column-list (either the 0x00 signifying the end
                   123588: ** of the position-list, or the 0x01 that precedes the column number of
                   123589: ** the next column in the position-list).
                   123590: **
                   123591: ** The number of elements in the column-list is returned.
                   123592: */
                   123593: static int fts3ColumnlistCount(char **ppCollist){
                   123594:   char *pEnd = *ppCollist;
                   123595:   char c = 0;
                   123596:   int nEntry = 0;
                   123597: 
                   123598:   /* A column-list is terminated by either a 0x01 or 0x00. */
                   123599:   while( 0xFE & (*pEnd | c) ){
                   123600:     c = *pEnd++ & 0x80;
                   123601:     if( !c ) nEntry++;
                   123602:   }
                   123603: 
                   123604:   *ppCollist = pEnd;
                   123605:   return nEntry;
                   123606: }
                   123607: 
                   123608: /*
                   123609: ** fts3ExprIterate() callback used to collect the "global" matchinfo stats
                   123610: ** for a single query. 
                   123611: **
                   123612: ** fts3ExprIterate() callback to load the 'global' elements of a
                   123613: ** FTS3_MATCHINFO_HITS matchinfo array. The global stats are those elements 
                   123614: ** of the matchinfo array that are constant for all rows returned by the 
                   123615: ** current query.
                   123616: **
                   123617: ** Argument pCtx is actually a pointer to a struct of type MatchInfo. This
                   123618: ** function populates Matchinfo.aMatchinfo[] as follows:
                   123619: **
                   123620: **   for(iCol=0; iCol<nCol; iCol++){
                   123621: **     aMatchinfo[3*iPhrase*nCol + 3*iCol + 1] = X;
                   123622: **     aMatchinfo[3*iPhrase*nCol + 3*iCol + 2] = Y;
                   123623: **   }
                   123624: **
                   123625: ** where X is the number of matches for phrase iPhrase is column iCol of all
                   123626: ** rows of the table. Y is the number of rows for which column iCol contains
                   123627: ** at least one instance of phrase iPhrase.
                   123628: **
                   123629: ** If the phrase pExpr consists entirely of deferred tokens, then all X and
                   123630: ** Y values are set to nDoc, where nDoc is the number of documents in the 
                   123631: ** file system. This is done because the full-text index doclist is required
                   123632: ** to calculate these values properly, and the full-text index doclist is
                   123633: ** not available for deferred tokens.
                   123634: */
                   123635: static int fts3ExprGlobalHitsCb(
                   123636:   Fts3Expr *pExpr,                /* Phrase expression node */
                   123637:   int iPhrase,                    /* Phrase number (numbered from zero) */
                   123638:   void *pCtx                      /* Pointer to MatchInfo structure */
                   123639: ){
                   123640:   MatchInfo *p = (MatchInfo *)pCtx;
                   123641:   return sqlite3Fts3EvalPhraseStats(
                   123642:       p->pCursor, pExpr, &p->aMatchinfo[3*iPhrase*p->nCol]
                   123643:   );
                   123644: }
                   123645: 
                   123646: /*
                   123647: ** fts3ExprIterate() callback used to collect the "local" part of the
                   123648: ** FTS3_MATCHINFO_HITS array. The local stats are those elements of the 
                   123649: ** array that are different for each row returned by the query.
                   123650: */
                   123651: static int fts3ExprLocalHitsCb(
                   123652:   Fts3Expr *pExpr,                /* Phrase expression node */
                   123653:   int iPhrase,                    /* Phrase number */
                   123654:   void *pCtx                      /* Pointer to MatchInfo structure */
                   123655: ){
                   123656:   MatchInfo *p = (MatchInfo *)pCtx;
                   123657:   int iStart = iPhrase * p->nCol * 3;
                   123658:   int i;
                   123659: 
                   123660:   for(i=0; i<p->nCol; i++){
                   123661:     char *pCsr;
                   123662:     pCsr = sqlite3Fts3EvalPhrasePoslist(p->pCursor, pExpr, i);
                   123663:     if( pCsr ){
                   123664:       p->aMatchinfo[iStart+i*3] = fts3ColumnlistCount(&pCsr);
                   123665:     }else{
                   123666:       p->aMatchinfo[iStart+i*3] = 0;
                   123667:     }
                   123668:   }
                   123669: 
                   123670:   return SQLITE_OK;
                   123671: }
                   123672: 
                   123673: static int fts3MatchinfoCheck(
                   123674:   Fts3Table *pTab, 
                   123675:   char cArg,
                   123676:   char **pzErr
                   123677: ){
                   123678:   if( (cArg==FTS3_MATCHINFO_NPHRASE)
                   123679:    || (cArg==FTS3_MATCHINFO_NCOL)
                   123680:    || (cArg==FTS3_MATCHINFO_NDOC && pTab->bHasStat)
                   123681:    || (cArg==FTS3_MATCHINFO_AVGLENGTH && pTab->bHasStat)
                   123682:    || (cArg==FTS3_MATCHINFO_LENGTH && pTab->bHasDocsize)
                   123683:    || (cArg==FTS3_MATCHINFO_LCS)
                   123684:    || (cArg==FTS3_MATCHINFO_HITS)
                   123685:   ){
                   123686:     return SQLITE_OK;
                   123687:   }
                   123688:   *pzErr = sqlite3_mprintf("unrecognized matchinfo request: %c", cArg);
                   123689:   return SQLITE_ERROR;
                   123690: }
                   123691: 
                   123692: static int fts3MatchinfoSize(MatchInfo *pInfo, char cArg){
                   123693:   int nVal;                       /* Number of integers output by cArg */
                   123694: 
                   123695:   switch( cArg ){
                   123696:     case FTS3_MATCHINFO_NDOC:
                   123697:     case FTS3_MATCHINFO_NPHRASE: 
                   123698:     case FTS3_MATCHINFO_NCOL: 
                   123699:       nVal = 1;
                   123700:       break;
                   123701: 
                   123702:     case FTS3_MATCHINFO_AVGLENGTH:
                   123703:     case FTS3_MATCHINFO_LENGTH:
                   123704:     case FTS3_MATCHINFO_LCS:
                   123705:       nVal = pInfo->nCol;
                   123706:       break;
                   123707: 
                   123708:     default:
                   123709:       assert( cArg==FTS3_MATCHINFO_HITS );
                   123710:       nVal = pInfo->nCol * pInfo->nPhrase * 3;
                   123711:       break;
                   123712:   }
                   123713: 
                   123714:   return nVal;
                   123715: }
                   123716: 
                   123717: static int fts3MatchinfoSelectDoctotal(
                   123718:   Fts3Table *pTab,
                   123719:   sqlite3_stmt **ppStmt,
                   123720:   sqlite3_int64 *pnDoc,
                   123721:   const char **paLen
                   123722: ){
                   123723:   sqlite3_stmt *pStmt;
                   123724:   const char *a;
                   123725:   sqlite3_int64 nDoc;
                   123726: 
                   123727:   if( !*ppStmt ){
                   123728:     int rc = sqlite3Fts3SelectDoctotal(pTab, ppStmt);
                   123729:     if( rc!=SQLITE_OK ) return rc;
                   123730:   }
                   123731:   pStmt = *ppStmt;
                   123732:   assert( sqlite3_data_count(pStmt)==1 );
                   123733: 
                   123734:   a = sqlite3_column_blob(pStmt, 0);
                   123735:   a += sqlite3Fts3GetVarint(a, &nDoc);
                   123736:   if( nDoc==0 ) return SQLITE_CORRUPT_VTAB;
                   123737:   *pnDoc = (u32)nDoc;
                   123738: 
                   123739:   if( paLen ) *paLen = a;
                   123740:   return SQLITE_OK;
                   123741: }
                   123742: 
                   123743: /*
                   123744: ** An instance of the following structure is used to store state while 
                   123745: ** iterating through a multi-column position-list corresponding to the
                   123746: ** hits for a single phrase on a single row in order to calculate the
                   123747: ** values for a matchinfo() FTS3_MATCHINFO_LCS request.
                   123748: */
                   123749: typedef struct LcsIterator LcsIterator;
                   123750: struct LcsIterator {
                   123751:   Fts3Expr *pExpr;                /* Pointer to phrase expression */
                   123752:   int iPosOffset;                 /* Tokens count up to end of this phrase */
                   123753:   char *pRead;                    /* Cursor used to iterate through aDoclist */
                   123754:   int iPos;                       /* Current position */
                   123755: };
                   123756: 
                   123757: /* 
                   123758: ** If LcsIterator.iCol is set to the following value, the iterator has
                   123759: ** finished iterating through all offsets for all columns.
                   123760: */
                   123761: #define LCS_ITERATOR_FINISHED 0x7FFFFFFF;
                   123762: 
                   123763: static int fts3MatchinfoLcsCb(
                   123764:   Fts3Expr *pExpr,                /* Phrase expression node */
                   123765:   int iPhrase,                    /* Phrase number (numbered from zero) */
                   123766:   void *pCtx                      /* Pointer to MatchInfo structure */
                   123767: ){
                   123768:   LcsIterator *aIter = (LcsIterator *)pCtx;
                   123769:   aIter[iPhrase].pExpr = pExpr;
                   123770:   return SQLITE_OK;
                   123771: }
                   123772: 
                   123773: /*
                   123774: ** Advance the iterator passed as an argument to the next position. Return
                   123775: ** 1 if the iterator is at EOF or if it now points to the start of the
                   123776: ** position list for the next column.
                   123777: */
                   123778: static int fts3LcsIteratorAdvance(LcsIterator *pIter){
                   123779:   char *pRead = pIter->pRead;
                   123780:   sqlite3_int64 iRead;
                   123781:   int rc = 0;
                   123782: 
                   123783:   pRead += sqlite3Fts3GetVarint(pRead, &iRead);
                   123784:   if( iRead==0 || iRead==1 ){
                   123785:     pRead = 0;
                   123786:     rc = 1;
                   123787:   }else{
                   123788:     pIter->iPos += (int)(iRead-2);
                   123789:   }
                   123790: 
                   123791:   pIter->pRead = pRead;
                   123792:   return rc;
                   123793: }
                   123794:   
                   123795: /*
                   123796: ** This function implements the FTS3_MATCHINFO_LCS matchinfo() flag. 
                   123797: **
                   123798: ** If the call is successful, the longest-common-substring lengths for each
                   123799: ** column are written into the first nCol elements of the pInfo->aMatchinfo[] 
                   123800: ** array before returning. SQLITE_OK is returned in this case.
                   123801: **
                   123802: ** Otherwise, if an error occurs, an SQLite error code is returned and the
                   123803: ** data written to the first nCol elements of pInfo->aMatchinfo[] is 
                   123804: ** undefined.
                   123805: */
                   123806: static int fts3MatchinfoLcs(Fts3Cursor *pCsr, MatchInfo *pInfo){
                   123807:   LcsIterator *aIter;
                   123808:   int i;
                   123809:   int iCol;
                   123810:   int nToken = 0;
                   123811: 
                   123812:   /* Allocate and populate the array of LcsIterator objects. The array
                   123813:   ** contains one element for each matchable phrase in the query.
                   123814:   **/
                   123815:   aIter = sqlite3_malloc(sizeof(LcsIterator) * pCsr->nPhrase);
                   123816:   if( !aIter ) return SQLITE_NOMEM;
                   123817:   memset(aIter, 0, sizeof(LcsIterator) * pCsr->nPhrase);
                   123818:   (void)fts3ExprIterate(pCsr->pExpr, fts3MatchinfoLcsCb, (void*)aIter);
                   123819: 
                   123820:   for(i=0; i<pInfo->nPhrase; i++){
                   123821:     LcsIterator *pIter = &aIter[i];
                   123822:     nToken -= pIter->pExpr->pPhrase->nToken;
                   123823:     pIter->iPosOffset = nToken;
                   123824:   }
                   123825: 
                   123826:   for(iCol=0; iCol<pInfo->nCol; iCol++){
                   123827:     int nLcs = 0;                 /* LCS value for this column */
                   123828:     int nLive = 0;                /* Number of iterators in aIter not at EOF */
                   123829: 
                   123830:     for(i=0; i<pInfo->nPhrase; i++){
                   123831:       LcsIterator *pIt = &aIter[i];
                   123832:       pIt->pRead = sqlite3Fts3EvalPhrasePoslist(pCsr, pIt->pExpr, iCol);
                   123833:       if( pIt->pRead ){
                   123834:         pIt->iPos = pIt->iPosOffset;
                   123835:         fts3LcsIteratorAdvance(&aIter[i]);
                   123836:         nLive++;
                   123837:       }
                   123838:     }
                   123839: 
                   123840:     while( nLive>0 ){
                   123841:       LcsIterator *pAdv = 0;      /* The iterator to advance by one position */
                   123842:       int nThisLcs = 0;           /* LCS for the current iterator positions */
                   123843: 
                   123844:       for(i=0; i<pInfo->nPhrase; i++){
                   123845:         LcsIterator *pIter = &aIter[i];
                   123846:         if( pIter->pRead==0 ){
                   123847:           /* This iterator is already at EOF for this column. */
                   123848:           nThisLcs = 0;
                   123849:         }else{
                   123850:           if( pAdv==0 || pIter->iPos<pAdv->iPos ){
                   123851:             pAdv = pIter;
                   123852:           }
                   123853:           if( nThisLcs==0 || pIter->iPos==pIter[-1].iPos ){
                   123854:             nThisLcs++;
                   123855:           }else{
                   123856:             nThisLcs = 1;
                   123857:           }
                   123858:           if( nThisLcs>nLcs ) nLcs = nThisLcs;
                   123859:         }
                   123860:       }
                   123861:       if( fts3LcsIteratorAdvance(pAdv) ) nLive--;
                   123862:     }
                   123863: 
                   123864:     pInfo->aMatchinfo[iCol] = nLcs;
                   123865:   }
                   123866: 
                   123867:   sqlite3_free(aIter);
                   123868:   return SQLITE_OK;
                   123869: }
                   123870: 
                   123871: /*
                   123872: ** Populate the buffer pInfo->aMatchinfo[] with an array of integers to
                   123873: ** be returned by the matchinfo() function. Argument zArg contains the 
                   123874: ** format string passed as the second argument to matchinfo (or the
                   123875: ** default value "pcx" if no second argument was specified). The format
                   123876: ** string has already been validated and the pInfo->aMatchinfo[] array
                   123877: ** is guaranteed to be large enough for the output.
                   123878: **
                   123879: ** If bGlobal is true, then populate all fields of the matchinfo() output.
                   123880: ** If it is false, then assume that those fields that do not change between
                   123881: ** rows (i.e. FTS3_MATCHINFO_NPHRASE, NCOL, NDOC, AVGLENGTH and part of HITS)
                   123882: ** have already been populated.
                   123883: **
                   123884: ** Return SQLITE_OK if successful, or an SQLite error code if an error 
                   123885: ** occurs. If a value other than SQLITE_OK is returned, the state the
                   123886: ** pInfo->aMatchinfo[] buffer is left in is undefined.
                   123887: */
                   123888: static int fts3MatchinfoValues(
                   123889:   Fts3Cursor *pCsr,               /* FTS3 cursor object */
                   123890:   int bGlobal,                    /* True to grab the global stats */
                   123891:   MatchInfo *pInfo,               /* Matchinfo context object */
                   123892:   const char *zArg                /* Matchinfo format string */
                   123893: ){
                   123894:   int rc = SQLITE_OK;
                   123895:   int i;
                   123896:   Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab;
                   123897:   sqlite3_stmt *pSelect = 0;
                   123898: 
                   123899:   for(i=0; rc==SQLITE_OK && zArg[i]; i++){
                   123900: 
                   123901:     switch( zArg[i] ){
                   123902:       case FTS3_MATCHINFO_NPHRASE:
                   123903:         if( bGlobal ) pInfo->aMatchinfo[0] = pInfo->nPhrase;
                   123904:         break;
                   123905: 
                   123906:       case FTS3_MATCHINFO_NCOL:
                   123907:         if( bGlobal ) pInfo->aMatchinfo[0] = pInfo->nCol;
                   123908:         break;
                   123909:         
                   123910:       case FTS3_MATCHINFO_NDOC:
                   123911:         if( bGlobal ){
                   123912:           sqlite3_int64 nDoc = 0;
                   123913:           rc = fts3MatchinfoSelectDoctotal(pTab, &pSelect, &nDoc, 0);
                   123914:           pInfo->aMatchinfo[0] = (u32)nDoc;
                   123915:         }
                   123916:         break;
                   123917: 
                   123918:       case FTS3_MATCHINFO_AVGLENGTH: 
                   123919:         if( bGlobal ){
                   123920:           sqlite3_int64 nDoc;     /* Number of rows in table */
                   123921:           const char *a;          /* Aggregate column length array */
                   123922: 
                   123923:           rc = fts3MatchinfoSelectDoctotal(pTab, &pSelect, &nDoc, &a);
                   123924:           if( rc==SQLITE_OK ){
                   123925:             int iCol;
                   123926:             for(iCol=0; iCol<pInfo->nCol; iCol++){
                   123927:               u32 iVal;
                   123928:               sqlite3_int64 nToken;
                   123929:               a += sqlite3Fts3GetVarint(a, &nToken);
                   123930:               iVal = (u32)(((u32)(nToken&0xffffffff)+nDoc/2)/nDoc);
                   123931:               pInfo->aMatchinfo[iCol] = iVal;
                   123932:             }
                   123933:           }
                   123934:         }
                   123935:         break;
                   123936: 
                   123937:       case FTS3_MATCHINFO_LENGTH: {
                   123938:         sqlite3_stmt *pSelectDocsize = 0;
                   123939:         rc = sqlite3Fts3SelectDocsize(pTab, pCsr->iPrevId, &pSelectDocsize);
                   123940:         if( rc==SQLITE_OK ){
                   123941:           int iCol;
                   123942:           const char *a = sqlite3_column_blob(pSelectDocsize, 0);
                   123943:           for(iCol=0; iCol<pInfo->nCol; iCol++){
                   123944:             sqlite3_int64 nToken;
                   123945:             a += sqlite3Fts3GetVarint(a, &nToken);
                   123946:             pInfo->aMatchinfo[iCol] = (u32)nToken;
                   123947:           }
                   123948:         }
                   123949:         sqlite3_reset(pSelectDocsize);
                   123950:         break;
                   123951:       }
                   123952: 
                   123953:       case FTS3_MATCHINFO_LCS:
                   123954:         rc = fts3ExprLoadDoclists(pCsr, 0, 0);
                   123955:         if( rc==SQLITE_OK ){
                   123956:           rc = fts3MatchinfoLcs(pCsr, pInfo);
                   123957:         }
                   123958:         break;
                   123959: 
                   123960:       default: {
                   123961:         Fts3Expr *pExpr;
                   123962:         assert( zArg[i]==FTS3_MATCHINFO_HITS );
                   123963:         pExpr = pCsr->pExpr;
                   123964:         rc = fts3ExprLoadDoclists(pCsr, 0, 0);
                   123965:         if( rc!=SQLITE_OK ) break;
                   123966:         if( bGlobal ){
                   123967:           if( pCsr->pDeferred ){
                   123968:             rc = fts3MatchinfoSelectDoctotal(pTab, &pSelect, &pInfo->nDoc, 0);
                   123969:             if( rc!=SQLITE_OK ) break;
                   123970:           }
                   123971:           rc = fts3ExprIterate(pExpr, fts3ExprGlobalHitsCb,(void*)pInfo);
                   123972:           if( rc!=SQLITE_OK ) break;
                   123973:         }
                   123974:         (void)fts3ExprIterate(pExpr, fts3ExprLocalHitsCb,(void*)pInfo);
                   123975:         break;
                   123976:       }
                   123977:     }
                   123978: 
                   123979:     pInfo->aMatchinfo += fts3MatchinfoSize(pInfo, zArg[i]);
                   123980:   }
                   123981: 
                   123982:   sqlite3_reset(pSelect);
                   123983:   return rc;
                   123984: }
                   123985: 
                   123986: 
                   123987: /*
                   123988: ** Populate pCsr->aMatchinfo[] with data for the current row. The 
                   123989: ** 'matchinfo' data is an array of 32-bit unsigned integers (C type u32).
                   123990: */
                   123991: static int fts3GetMatchinfo(
                   123992:   Fts3Cursor *pCsr,               /* FTS3 Cursor object */
                   123993:   const char *zArg                /* Second argument to matchinfo() function */
                   123994: ){
                   123995:   MatchInfo sInfo;
                   123996:   Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab;
                   123997:   int rc = SQLITE_OK;
                   123998:   int bGlobal = 0;                /* Collect 'global' stats as well as local */
                   123999: 
                   124000:   memset(&sInfo, 0, sizeof(MatchInfo));
                   124001:   sInfo.pCursor = pCsr;
                   124002:   sInfo.nCol = pTab->nColumn;
                   124003: 
                   124004:   /* If there is cached matchinfo() data, but the format string for the 
                   124005:   ** cache does not match the format string for this request, discard 
                   124006:   ** the cached data. */
                   124007:   if( pCsr->zMatchinfo && strcmp(pCsr->zMatchinfo, zArg) ){
                   124008:     assert( pCsr->aMatchinfo );
                   124009:     sqlite3_free(pCsr->aMatchinfo);
                   124010:     pCsr->zMatchinfo = 0;
                   124011:     pCsr->aMatchinfo = 0;
                   124012:   }
                   124013: 
                   124014:   /* If Fts3Cursor.aMatchinfo[] is NULL, then this is the first time the
                   124015:   ** matchinfo function has been called for this query. In this case 
                   124016:   ** allocate the array used to accumulate the matchinfo data and
                   124017:   ** initialize those elements that are constant for every row.
                   124018:   */
                   124019:   if( pCsr->aMatchinfo==0 ){
                   124020:     int nMatchinfo = 0;           /* Number of u32 elements in match-info */
                   124021:     int nArg;                     /* Bytes in zArg */
                   124022:     int i;                        /* Used to iterate through zArg */
                   124023: 
                   124024:     /* Determine the number of phrases in the query */
                   124025:     pCsr->nPhrase = fts3ExprPhraseCount(pCsr->pExpr);
                   124026:     sInfo.nPhrase = pCsr->nPhrase;
                   124027: 
                   124028:     /* Determine the number of integers in the buffer returned by this call. */
                   124029:     for(i=0; zArg[i]; i++){
                   124030:       nMatchinfo += fts3MatchinfoSize(&sInfo, zArg[i]);
                   124031:     }
                   124032: 
                   124033:     /* Allocate space for Fts3Cursor.aMatchinfo[] and Fts3Cursor.zMatchinfo. */
                   124034:     nArg = (int)strlen(zArg);
                   124035:     pCsr->aMatchinfo = (u32 *)sqlite3_malloc(sizeof(u32)*nMatchinfo + nArg + 1);
                   124036:     if( !pCsr->aMatchinfo ) return SQLITE_NOMEM;
                   124037: 
                   124038:     pCsr->zMatchinfo = (char *)&pCsr->aMatchinfo[nMatchinfo];
                   124039:     pCsr->nMatchinfo = nMatchinfo;
                   124040:     memcpy(pCsr->zMatchinfo, zArg, nArg+1);
                   124041:     memset(pCsr->aMatchinfo, 0, sizeof(u32)*nMatchinfo);
                   124042:     pCsr->isMatchinfoNeeded = 1;
                   124043:     bGlobal = 1;
                   124044:   }
                   124045: 
                   124046:   sInfo.aMatchinfo = pCsr->aMatchinfo;
                   124047:   sInfo.nPhrase = pCsr->nPhrase;
                   124048:   if( pCsr->isMatchinfoNeeded ){
                   124049:     rc = fts3MatchinfoValues(pCsr, bGlobal, &sInfo, zArg);
                   124050:     pCsr->isMatchinfoNeeded = 0;
                   124051:   }
                   124052: 
                   124053:   return rc;
                   124054: }
                   124055: 
                   124056: /*
                   124057: ** Implementation of snippet() function.
                   124058: */
                   124059: SQLITE_PRIVATE void sqlite3Fts3Snippet(
                   124060:   sqlite3_context *pCtx,          /* SQLite function call context */
                   124061:   Fts3Cursor *pCsr,               /* Cursor object */
                   124062:   const char *zStart,             /* Snippet start text - "<b>" */
                   124063:   const char *zEnd,               /* Snippet end text - "</b>" */
                   124064:   const char *zEllipsis,          /* Snippet ellipsis text - "<b>...</b>" */
                   124065:   int iCol,                       /* Extract snippet from this column */
                   124066:   int nToken                      /* Approximate number of tokens in snippet */
                   124067: ){
                   124068:   Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab;
                   124069:   int rc = SQLITE_OK;
                   124070:   int i;
                   124071:   StrBuffer res = {0, 0, 0};
                   124072: 
                   124073:   /* The returned text includes up to four fragments of text extracted from
                   124074:   ** the data in the current row. The first iteration of the for(...) loop
                   124075:   ** below attempts to locate a single fragment of text nToken tokens in 
                   124076:   ** size that contains at least one instance of all phrases in the query
                   124077:   ** expression that appear in the current row. If such a fragment of text
                   124078:   ** cannot be found, the second iteration of the loop attempts to locate
                   124079:   ** a pair of fragments, and so on.
                   124080:   */
                   124081:   int nSnippet = 0;               /* Number of fragments in this snippet */
                   124082:   SnippetFragment aSnippet[4];    /* Maximum of 4 fragments per snippet */
                   124083:   int nFToken = -1;               /* Number of tokens in each fragment */
                   124084: 
                   124085:   if( !pCsr->pExpr ){
                   124086:     sqlite3_result_text(pCtx, "", 0, SQLITE_STATIC);
                   124087:     return;
                   124088:   }
                   124089: 
                   124090:   for(nSnippet=1; 1; nSnippet++){
                   124091: 
                   124092:     int iSnip;                    /* Loop counter 0..nSnippet-1 */
                   124093:     u64 mCovered = 0;             /* Bitmask of phrases covered by snippet */
                   124094:     u64 mSeen = 0;                /* Bitmask of phrases seen by BestSnippet() */
                   124095: 
                   124096:     if( nToken>=0 ){
                   124097:       nFToken = (nToken+nSnippet-1) / nSnippet;
                   124098:     }else{
                   124099:       nFToken = -1 * nToken;
                   124100:     }
                   124101: 
                   124102:     for(iSnip=0; iSnip<nSnippet; iSnip++){
                   124103:       int iBestScore = -1;        /* Best score of columns checked so far */
                   124104:       int iRead;                  /* Used to iterate through columns */
                   124105:       SnippetFragment *pFragment = &aSnippet[iSnip];
                   124106: 
                   124107:       memset(pFragment, 0, sizeof(*pFragment));
                   124108: 
                   124109:       /* Loop through all columns of the table being considered for snippets.
                   124110:       ** If the iCol argument to this function was negative, this means all
                   124111:       ** columns of the FTS3 table. Otherwise, only column iCol is considered.
                   124112:       */
                   124113:       for(iRead=0; iRead<pTab->nColumn; iRead++){
                   124114:         SnippetFragment sF = {0, 0, 0, 0};
                   124115:         int iS;
                   124116:         if( iCol>=0 && iRead!=iCol ) continue;
                   124117: 
                   124118:         /* Find the best snippet of nFToken tokens in column iRead. */
                   124119:         rc = fts3BestSnippet(nFToken, pCsr, iRead, mCovered, &mSeen, &sF, &iS);
                   124120:         if( rc!=SQLITE_OK ){
                   124121:           goto snippet_out;
                   124122:         }
                   124123:         if( iS>iBestScore ){
                   124124:           *pFragment = sF;
                   124125:           iBestScore = iS;
                   124126:         }
                   124127:       }
                   124128: 
                   124129:       mCovered |= pFragment->covered;
                   124130:     }
                   124131: 
                   124132:     /* If all query phrases seen by fts3BestSnippet() are present in at least
                   124133:     ** one of the nSnippet snippet fragments, break out of the loop.
                   124134:     */
                   124135:     assert( (mCovered&mSeen)==mCovered );
                   124136:     if( mSeen==mCovered || nSnippet==SizeofArray(aSnippet) ) break;
                   124137:   }
                   124138: 
                   124139:   assert( nFToken>0 );
                   124140: 
                   124141:   for(i=0; i<nSnippet && rc==SQLITE_OK; i++){
                   124142:     rc = fts3SnippetText(pCsr, &aSnippet[i], 
                   124143:         i, (i==nSnippet-1), nFToken, zStart, zEnd, zEllipsis, &res
                   124144:     );
                   124145:   }
                   124146: 
                   124147:  snippet_out:
                   124148:   sqlite3Fts3SegmentsClose(pTab);
                   124149:   if( rc!=SQLITE_OK ){
                   124150:     sqlite3_result_error_code(pCtx, rc);
                   124151:     sqlite3_free(res.z);
                   124152:   }else{
                   124153:     sqlite3_result_text(pCtx, res.z, -1, sqlite3_free);
                   124154:   }
                   124155: }
                   124156: 
                   124157: 
                   124158: typedef struct TermOffset TermOffset;
                   124159: typedef struct TermOffsetCtx TermOffsetCtx;
                   124160: 
                   124161: struct TermOffset {
                   124162:   char *pList;                    /* Position-list */
                   124163:   int iPos;                       /* Position just read from pList */
                   124164:   int iOff;                       /* Offset of this term from read positions */
                   124165: };
                   124166: 
                   124167: struct TermOffsetCtx {
                   124168:   Fts3Cursor *pCsr;
                   124169:   int iCol;                       /* Column of table to populate aTerm for */
                   124170:   int iTerm;
                   124171:   sqlite3_int64 iDocid;
                   124172:   TermOffset *aTerm;
                   124173: };
                   124174: 
                   124175: /*
                   124176: ** This function is an fts3ExprIterate() callback used by sqlite3Fts3Offsets().
                   124177: */
                   124178: static int fts3ExprTermOffsetInit(Fts3Expr *pExpr, int iPhrase, void *ctx){
                   124179:   TermOffsetCtx *p = (TermOffsetCtx *)ctx;
                   124180:   int nTerm;                      /* Number of tokens in phrase */
                   124181:   int iTerm;                      /* For looping through nTerm phrase terms */
                   124182:   char *pList;                    /* Pointer to position list for phrase */
                   124183:   int iPos = 0;                   /* First position in position-list */
                   124184: 
                   124185:   UNUSED_PARAMETER(iPhrase);
                   124186:   pList = sqlite3Fts3EvalPhrasePoslist(p->pCsr, pExpr, p->iCol);
                   124187:   nTerm = pExpr->pPhrase->nToken;
                   124188:   if( pList ){
                   124189:     fts3GetDeltaPosition(&pList, &iPos);
                   124190:     assert( iPos>=0 );
                   124191:   }
                   124192: 
                   124193:   for(iTerm=0; iTerm<nTerm; iTerm++){
                   124194:     TermOffset *pT = &p->aTerm[p->iTerm++];
                   124195:     pT->iOff = nTerm-iTerm-1;
                   124196:     pT->pList = pList;
                   124197:     pT->iPos = iPos;
                   124198:   }
                   124199: 
                   124200:   return SQLITE_OK;
                   124201: }
                   124202: 
                   124203: /*
                   124204: ** Implementation of offsets() function.
                   124205: */
                   124206: SQLITE_PRIVATE void sqlite3Fts3Offsets(
                   124207:   sqlite3_context *pCtx,          /* SQLite function call context */
                   124208:   Fts3Cursor *pCsr                /* Cursor object */
                   124209: ){
                   124210:   Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab;
                   124211:   sqlite3_tokenizer_module const *pMod = pTab->pTokenizer->pModule;
                   124212:   const char *ZDUMMY;             /* Dummy argument used with xNext() */
                   124213:   int NDUMMY;                     /* Dummy argument used with xNext() */
                   124214:   int rc;                         /* Return Code */
                   124215:   int nToken;                     /* Number of tokens in query */
                   124216:   int iCol;                       /* Column currently being processed */
                   124217:   StrBuffer res = {0, 0, 0};      /* Result string */
                   124218:   TermOffsetCtx sCtx;             /* Context for fts3ExprTermOffsetInit() */
                   124219: 
                   124220:   if( !pCsr->pExpr ){
                   124221:     sqlite3_result_text(pCtx, "", 0, SQLITE_STATIC);
                   124222:     return;
                   124223:   }
                   124224: 
                   124225:   memset(&sCtx, 0, sizeof(sCtx));
                   124226:   assert( pCsr->isRequireSeek==0 );
                   124227: 
                   124228:   /* Count the number of terms in the query */
                   124229:   rc = fts3ExprLoadDoclists(pCsr, 0, &nToken);
                   124230:   if( rc!=SQLITE_OK ) goto offsets_out;
                   124231: 
                   124232:   /* Allocate the array of TermOffset iterators. */
                   124233:   sCtx.aTerm = (TermOffset *)sqlite3_malloc(sizeof(TermOffset)*nToken);
                   124234:   if( 0==sCtx.aTerm ){
                   124235:     rc = SQLITE_NOMEM;
                   124236:     goto offsets_out;
                   124237:   }
                   124238:   sCtx.iDocid = pCsr->iPrevId;
                   124239:   sCtx.pCsr = pCsr;
                   124240: 
                   124241:   /* Loop through the table columns, appending offset information to 
                   124242:   ** string-buffer res for each column.
                   124243:   */
                   124244:   for(iCol=0; iCol<pTab->nColumn; iCol++){
                   124245:     sqlite3_tokenizer_cursor *pC; /* Tokenizer cursor */
                   124246:     int iStart;
                   124247:     int iEnd;
                   124248:     int iCurrent;
                   124249:     const char *zDoc;
                   124250:     int nDoc;
                   124251: 
                   124252:     /* Initialize the contents of sCtx.aTerm[] for column iCol. There is 
                   124253:     ** no way that this operation can fail, so the return code from
                   124254:     ** fts3ExprIterate() can be discarded.
                   124255:     */
                   124256:     sCtx.iCol = iCol;
                   124257:     sCtx.iTerm = 0;
                   124258:     (void)fts3ExprIterate(pCsr->pExpr, fts3ExprTermOffsetInit, (void *)&sCtx);
                   124259: 
                   124260:     /* Retreive the text stored in column iCol. If an SQL NULL is stored 
                   124261:     ** in column iCol, jump immediately to the next iteration of the loop.
                   124262:     ** If an OOM occurs while retrieving the data (this can happen if SQLite
                   124263:     ** needs to transform the data from utf-16 to utf-8), return SQLITE_NOMEM 
                   124264:     ** to the caller. 
                   124265:     */
                   124266:     zDoc = (const char *)sqlite3_column_text(pCsr->pStmt, iCol+1);
                   124267:     nDoc = sqlite3_column_bytes(pCsr->pStmt, iCol+1);
                   124268:     if( zDoc==0 ){
                   124269:       if( sqlite3_column_type(pCsr->pStmt, iCol+1)==SQLITE_NULL ){
                   124270:         continue;
                   124271:       }
                   124272:       rc = SQLITE_NOMEM;
                   124273:       goto offsets_out;
                   124274:     }
                   124275: 
                   124276:     /* Initialize a tokenizer iterator to iterate through column iCol. */
                   124277:     rc = pMod->xOpen(pTab->pTokenizer, zDoc, nDoc, &pC);
                   124278:     if( rc!=SQLITE_OK ) goto offsets_out;
                   124279:     pC->pTokenizer = pTab->pTokenizer;
                   124280: 
                   124281:     rc = pMod->xNext(pC, &ZDUMMY, &NDUMMY, &iStart, &iEnd, &iCurrent);
                   124282:     while( rc==SQLITE_OK ){
                   124283:       int i;                      /* Used to loop through terms */
                   124284:       int iMinPos = 0x7FFFFFFF;   /* Position of next token */
                   124285:       TermOffset *pTerm = 0;      /* TermOffset associated with next token */
                   124286: 
                   124287:       for(i=0; i<nToken; i++){
                   124288:         TermOffset *pT = &sCtx.aTerm[i];
                   124289:         if( pT->pList && (pT->iPos-pT->iOff)<iMinPos ){
                   124290:           iMinPos = pT->iPos-pT->iOff;
                   124291:           pTerm = pT;
                   124292:         }
                   124293:       }
                   124294: 
                   124295:       if( !pTerm ){
                   124296:         /* All offsets for this column have been gathered. */
                   124297:         break;
                   124298:       }else{
                   124299:         assert( iCurrent<=iMinPos );
                   124300:         if( 0==(0xFE&*pTerm->pList) ){
                   124301:           pTerm->pList = 0;
                   124302:         }else{
                   124303:           fts3GetDeltaPosition(&pTerm->pList, &pTerm->iPos);
                   124304:         }
                   124305:         while( rc==SQLITE_OK && iCurrent<iMinPos ){
                   124306:           rc = pMod->xNext(pC, &ZDUMMY, &NDUMMY, &iStart, &iEnd, &iCurrent);
                   124307:         }
                   124308:         if( rc==SQLITE_OK ){
                   124309:           char aBuffer[64];
                   124310:           sqlite3_snprintf(sizeof(aBuffer), aBuffer, 
                   124311:               "%d %d %d %d ", iCol, pTerm-sCtx.aTerm, iStart, iEnd-iStart
                   124312:           );
                   124313:           rc = fts3StringAppend(&res, aBuffer, -1);
                   124314:         }else if( rc==SQLITE_DONE ){
                   124315:           rc = SQLITE_CORRUPT_VTAB;
                   124316:         }
                   124317:       }
                   124318:     }
                   124319:     if( rc==SQLITE_DONE ){
                   124320:       rc = SQLITE_OK;
                   124321:     }
                   124322: 
                   124323:     pMod->xClose(pC);
                   124324:     if( rc!=SQLITE_OK ) goto offsets_out;
                   124325:   }
                   124326: 
                   124327:  offsets_out:
                   124328:   sqlite3_free(sCtx.aTerm);
                   124329:   assert( rc!=SQLITE_DONE );
                   124330:   sqlite3Fts3SegmentsClose(pTab);
                   124331:   if( rc!=SQLITE_OK ){
                   124332:     sqlite3_result_error_code(pCtx,  rc);
                   124333:     sqlite3_free(res.z);
                   124334:   }else{
                   124335:     sqlite3_result_text(pCtx, res.z, res.n-1, sqlite3_free);
                   124336:   }
                   124337:   return;
                   124338: }
                   124339: 
                   124340: /*
                   124341: ** Implementation of matchinfo() function.
                   124342: */
                   124343: SQLITE_PRIVATE void sqlite3Fts3Matchinfo(
                   124344:   sqlite3_context *pContext,      /* Function call context */
                   124345:   Fts3Cursor *pCsr,               /* FTS3 table cursor */
                   124346:   const char *zArg                /* Second arg to matchinfo() function */
                   124347: ){
                   124348:   Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab;
                   124349:   int rc;
                   124350:   int i;
                   124351:   const char *zFormat;
                   124352: 
                   124353:   if( zArg ){
                   124354:     for(i=0; zArg[i]; i++){
                   124355:       char *zErr = 0;
                   124356:       if( fts3MatchinfoCheck(pTab, zArg[i], &zErr) ){
                   124357:         sqlite3_result_error(pContext, zErr, -1);
                   124358:         sqlite3_free(zErr);
                   124359:         return;
                   124360:       }
                   124361:     }
                   124362:     zFormat = zArg;
                   124363:   }else{
                   124364:     zFormat = FTS3_MATCHINFO_DEFAULT;
                   124365:   }
                   124366: 
                   124367:   if( !pCsr->pExpr ){
                   124368:     sqlite3_result_blob(pContext, "", 0, SQLITE_STATIC);
                   124369:     return;
                   124370:   }
                   124371: 
                   124372:   /* Retrieve matchinfo() data. */
                   124373:   rc = fts3GetMatchinfo(pCsr, zFormat);
                   124374:   sqlite3Fts3SegmentsClose(pTab);
                   124375: 
                   124376:   if( rc!=SQLITE_OK ){
                   124377:     sqlite3_result_error_code(pContext, rc);
                   124378:   }else{
                   124379:     int n = pCsr->nMatchinfo * sizeof(u32);
                   124380:     sqlite3_result_blob(pContext, pCsr->aMatchinfo, n, SQLITE_TRANSIENT);
                   124381:   }
                   124382: }
                   124383: 
                   124384: #endif
                   124385: 
                   124386: /************** End of fts3_snippet.c ****************************************/
                   124387: /************** Begin file rtree.c *******************************************/
                   124388: /*
                   124389: ** 2001 September 15
                   124390: **
                   124391: ** The author disclaims copyright to this source code.  In place of
                   124392: ** a legal notice, here is a blessing:
                   124393: **
                   124394: **    May you do good and not evil.
                   124395: **    May you find forgiveness for yourself and forgive others.
                   124396: **    May you share freely, never taking more than you give.
                   124397: **
                   124398: *************************************************************************
                   124399: ** This file contains code for implementations of the r-tree and r*-tree
                   124400: ** algorithms packaged as an SQLite virtual table module.
                   124401: */
                   124402: 
                   124403: /*
                   124404: ** Database Format of R-Tree Tables
                   124405: ** --------------------------------
                   124406: **
                   124407: ** The data structure for a single virtual r-tree table is stored in three 
                   124408: ** native SQLite tables declared as follows. In each case, the '%' character
                   124409: ** in the table name is replaced with the user-supplied name of the r-tree
                   124410: ** table.
                   124411: **
                   124412: **   CREATE TABLE %_node(nodeno INTEGER PRIMARY KEY, data BLOB)
                   124413: **   CREATE TABLE %_parent(nodeno INTEGER PRIMARY KEY, parentnode INTEGER)
                   124414: **   CREATE TABLE %_rowid(rowid INTEGER PRIMARY KEY, nodeno INTEGER)
                   124415: **
                   124416: ** The data for each node of the r-tree structure is stored in the %_node
                   124417: ** table. For each node that is not the root node of the r-tree, there is
                   124418: ** an entry in the %_parent table associating the node with its parent.
                   124419: ** And for each row of data in the table, there is an entry in the %_rowid
                   124420: ** table that maps from the entries rowid to the id of the node that it
                   124421: ** is stored on.
                   124422: **
                   124423: ** The root node of an r-tree always exists, even if the r-tree table is
                   124424: ** empty. The nodeno of the root node is always 1. All other nodes in the
                   124425: ** table must be the same size as the root node. The content of each node
                   124426: ** is formatted as follows:
                   124427: **
                   124428: **   1. If the node is the root node (node 1), then the first 2 bytes
                   124429: **      of the node contain the tree depth as a big-endian integer.
                   124430: **      For non-root nodes, the first 2 bytes are left unused.
                   124431: **
                   124432: **   2. The next 2 bytes contain the number of entries currently 
                   124433: **      stored in the node.
                   124434: **
                   124435: **   3. The remainder of the node contains the node entries. Each entry
                   124436: **      consists of a single 8-byte integer followed by an even number
                   124437: **      of 4-byte coordinates. For leaf nodes the integer is the rowid
                   124438: **      of a record. For internal nodes it is the node number of a
                   124439: **      child page.
                   124440: */
                   124441: 
                   124442: #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_RTREE)
                   124443: 
                   124444: /*
                   124445: ** This file contains an implementation of a couple of different variants
                   124446: ** of the r-tree algorithm. See the README file for further details. The 
                   124447: ** same data-structure is used for all, but the algorithms for insert and
                   124448: ** delete operations vary. The variants used are selected at compile time 
                   124449: ** by defining the following symbols:
                   124450: */
                   124451: 
                   124452: /* Either, both or none of the following may be set to activate 
                   124453: ** r*tree variant algorithms.
                   124454: */
                   124455: #define VARIANT_RSTARTREE_CHOOSESUBTREE 0
                   124456: #define VARIANT_RSTARTREE_REINSERT      1
                   124457: 
                   124458: /* 
                   124459: ** Exactly one of the following must be set to 1.
                   124460: */
                   124461: #define VARIANT_GUTTMAN_QUADRATIC_SPLIT 0
                   124462: #define VARIANT_GUTTMAN_LINEAR_SPLIT    0
                   124463: #define VARIANT_RSTARTREE_SPLIT         1
                   124464: 
                   124465: #define VARIANT_GUTTMAN_SPLIT \
                   124466:         (VARIANT_GUTTMAN_LINEAR_SPLIT||VARIANT_GUTTMAN_QUADRATIC_SPLIT)
                   124467: 
                   124468: #if VARIANT_GUTTMAN_QUADRATIC_SPLIT
                   124469:   #define PickNext QuadraticPickNext
                   124470:   #define PickSeeds QuadraticPickSeeds
                   124471:   #define AssignCells splitNodeGuttman
                   124472: #endif
                   124473: #if VARIANT_GUTTMAN_LINEAR_SPLIT
                   124474:   #define PickNext LinearPickNext
                   124475:   #define PickSeeds LinearPickSeeds
                   124476:   #define AssignCells splitNodeGuttman
                   124477: #endif
                   124478: #if VARIANT_RSTARTREE_SPLIT
                   124479:   #define AssignCells splitNodeStartree
                   124480: #endif
                   124481: 
                   124482: #if !defined(NDEBUG) && !defined(SQLITE_DEBUG) 
                   124483: # define NDEBUG 1
                   124484: #endif
                   124485: 
                   124486: #ifndef SQLITE_CORE
                   124487:   SQLITE_EXTENSION_INIT1
                   124488: #else
                   124489: #endif
                   124490: 
                   124491: 
                   124492: #ifndef SQLITE_AMALGAMATION
                   124493: #include "sqlite3rtree.h"
                   124494: typedef sqlite3_int64 i64;
                   124495: typedef unsigned char u8;
                   124496: typedef unsigned int u32;
                   124497: #endif
                   124498: 
                   124499: /*  The following macro is used to suppress compiler warnings.
                   124500: */
                   124501: #ifndef UNUSED_PARAMETER
                   124502: # define UNUSED_PARAMETER(x) (void)(x)
                   124503: #endif
                   124504: 
                   124505: typedef struct Rtree Rtree;
                   124506: typedef struct RtreeCursor RtreeCursor;
                   124507: typedef struct RtreeNode RtreeNode;
                   124508: typedef struct RtreeCell RtreeCell;
                   124509: typedef struct RtreeConstraint RtreeConstraint;
                   124510: typedef struct RtreeMatchArg RtreeMatchArg;
                   124511: typedef struct RtreeGeomCallback RtreeGeomCallback;
                   124512: typedef union RtreeCoord RtreeCoord;
                   124513: 
                   124514: /* The rtree may have between 1 and RTREE_MAX_DIMENSIONS dimensions. */
                   124515: #define RTREE_MAX_DIMENSIONS 5
                   124516: 
                   124517: /* Size of hash table Rtree.aHash. This hash table is not expected to
                   124518: ** ever contain very many entries, so a fixed number of buckets is 
                   124519: ** used.
                   124520: */
                   124521: #define HASHSIZE 128
                   124522: 
                   124523: /* 
                   124524: ** An rtree virtual-table object.
                   124525: */
                   124526: struct Rtree {
                   124527:   sqlite3_vtab base;
                   124528:   sqlite3 *db;                /* Host database connection */
                   124529:   int iNodeSize;              /* Size in bytes of each node in the node table */
                   124530:   int nDim;                   /* Number of dimensions */
                   124531:   int nBytesPerCell;          /* Bytes consumed per cell */
                   124532:   int iDepth;                 /* Current depth of the r-tree structure */
                   124533:   char *zDb;                  /* Name of database containing r-tree table */
                   124534:   char *zName;                /* Name of r-tree table */ 
                   124535:   RtreeNode *aHash[HASHSIZE]; /* Hash table of in-memory nodes. */ 
                   124536:   int nBusy;                  /* Current number of users of this structure */
                   124537: 
                   124538:   /* List of nodes removed during a CondenseTree operation. List is
                   124539:   ** linked together via the pointer normally used for hash chains -
                   124540:   ** RtreeNode.pNext. RtreeNode.iNode stores the depth of the sub-tree 
                   124541:   ** headed by the node (leaf nodes have RtreeNode.iNode==0).
                   124542:   */
                   124543:   RtreeNode *pDeleted;
                   124544:   int iReinsertHeight;        /* Height of sub-trees Reinsert() has run on */
                   124545: 
                   124546:   /* Statements to read/write/delete a record from xxx_node */
                   124547:   sqlite3_stmt *pReadNode;
                   124548:   sqlite3_stmt *pWriteNode;
                   124549:   sqlite3_stmt *pDeleteNode;
                   124550: 
                   124551:   /* Statements to read/write/delete a record from xxx_rowid */
                   124552:   sqlite3_stmt *pReadRowid;
                   124553:   sqlite3_stmt *pWriteRowid;
                   124554:   sqlite3_stmt *pDeleteRowid;
                   124555: 
                   124556:   /* Statements to read/write/delete a record from xxx_parent */
                   124557:   sqlite3_stmt *pReadParent;
                   124558:   sqlite3_stmt *pWriteParent;
                   124559:   sqlite3_stmt *pDeleteParent;
                   124560: 
                   124561:   int eCoordType;
                   124562: };
                   124563: 
                   124564: /* Possible values for eCoordType: */
                   124565: #define RTREE_COORD_REAL32 0
                   124566: #define RTREE_COORD_INT32  1
                   124567: 
                   124568: /*
                   124569: ** The minimum number of cells allowed for a node is a third of the 
                   124570: ** maximum. In Gutman's notation:
                   124571: **
                   124572: **     m = M/3
                   124573: **
                   124574: ** If an R*-tree "Reinsert" operation is required, the same number of
                   124575: ** cells are removed from the overfull node and reinserted into the tree.
                   124576: */
                   124577: #define RTREE_MINCELLS(p) ((((p)->iNodeSize-4)/(p)->nBytesPerCell)/3)
                   124578: #define RTREE_REINSERT(p) RTREE_MINCELLS(p)
                   124579: #define RTREE_MAXCELLS 51
                   124580: 
                   124581: /*
                   124582: ** The smallest possible node-size is (512-64)==448 bytes. And the largest
                   124583: ** supported cell size is 48 bytes (8 byte rowid + ten 4 byte coordinates).
                   124584: ** Therefore all non-root nodes must contain at least 3 entries. Since 
                   124585: ** 2^40 is greater than 2^64, an r-tree structure always has a depth of
                   124586: ** 40 or less.
                   124587: */
                   124588: #define RTREE_MAX_DEPTH 40
                   124589: 
                   124590: /* 
                   124591: ** An rtree cursor object.
                   124592: */
                   124593: struct RtreeCursor {
                   124594:   sqlite3_vtab_cursor base;
                   124595:   RtreeNode *pNode;                 /* Node cursor is currently pointing at */
                   124596:   int iCell;                        /* Index of current cell in pNode */
                   124597:   int iStrategy;                    /* Copy of idxNum search parameter */
                   124598:   int nConstraint;                  /* Number of entries in aConstraint */
                   124599:   RtreeConstraint *aConstraint;     /* Search constraints. */
                   124600: };
                   124601: 
                   124602: union RtreeCoord {
                   124603:   float f;
                   124604:   int i;
                   124605: };
                   124606: 
                   124607: /*
                   124608: ** The argument is an RtreeCoord. Return the value stored within the RtreeCoord
                   124609: ** formatted as a double. This macro assumes that local variable pRtree points
                   124610: ** to the Rtree structure associated with the RtreeCoord.
                   124611: */
                   124612: #define DCOORD(coord) (                           \
                   124613:   (pRtree->eCoordType==RTREE_COORD_REAL32) ?      \
                   124614:     ((double)coord.f) :                           \
                   124615:     ((double)coord.i)                             \
                   124616: )
                   124617: 
                   124618: /*
                   124619: ** A search constraint.
                   124620: */
                   124621: struct RtreeConstraint {
                   124622:   int iCoord;                     /* Index of constrained coordinate */
                   124623:   int op;                         /* Constraining operation */
                   124624:   double rValue;                  /* Constraint value. */
                   124625:   int (*xGeom)(sqlite3_rtree_geometry *, int, double *, int *);
                   124626:   sqlite3_rtree_geometry *pGeom;  /* Constraint callback argument for a MATCH */
                   124627: };
                   124628: 
                   124629: /* Possible values for RtreeConstraint.op */
                   124630: #define RTREE_EQ    0x41
                   124631: #define RTREE_LE    0x42
                   124632: #define RTREE_LT    0x43
                   124633: #define RTREE_GE    0x44
                   124634: #define RTREE_GT    0x45
                   124635: #define RTREE_MATCH 0x46
                   124636: 
                   124637: /* 
                   124638: ** An rtree structure node.
                   124639: */
                   124640: struct RtreeNode {
                   124641:   RtreeNode *pParent;               /* Parent node */
                   124642:   i64 iNode;
                   124643:   int nRef;
                   124644:   int isDirty;
                   124645:   u8 *zData;
                   124646:   RtreeNode *pNext;                 /* Next node in this hash chain */
                   124647: };
                   124648: #define NCELL(pNode) readInt16(&(pNode)->zData[2])
                   124649: 
                   124650: /* 
                   124651: ** Structure to store a deserialized rtree record.
                   124652: */
                   124653: struct RtreeCell {
                   124654:   i64 iRowid;
                   124655:   RtreeCoord aCoord[RTREE_MAX_DIMENSIONS*2];
                   124656: };
                   124657: 
                   124658: 
                   124659: /*
                   124660: ** Value for the first field of every RtreeMatchArg object. The MATCH
                   124661: ** operator tests that the first field of a blob operand matches this
                   124662: ** value to avoid operating on invalid blobs (which could cause a segfault).
                   124663: */
                   124664: #define RTREE_GEOMETRY_MAGIC 0x891245AB
                   124665: 
                   124666: /*
                   124667: ** An instance of this structure must be supplied as a blob argument to
                   124668: ** the right-hand-side of an SQL MATCH operator used to constrain an
                   124669: ** r-tree query.
                   124670: */
                   124671: struct RtreeMatchArg {
                   124672:   u32 magic;                      /* Always RTREE_GEOMETRY_MAGIC */
                   124673:   int (*xGeom)(sqlite3_rtree_geometry *, int, double *, int *);
                   124674:   void *pContext;
                   124675:   int nParam;
                   124676:   double aParam[1];
                   124677: };
                   124678: 
                   124679: /*
                   124680: ** When a geometry callback is created (see sqlite3_rtree_geometry_callback),
                   124681: ** a single instance of the following structure is allocated. It is used
                   124682: ** as the context for the user-function created by by s_r_g_c(). The object
                   124683: ** is eventually deleted by the destructor mechanism provided by
                   124684: ** sqlite3_create_function_v2() (which is called by s_r_g_c() to create
                   124685: ** the geometry callback function).
                   124686: */
                   124687: struct RtreeGeomCallback {
                   124688:   int (*xGeom)(sqlite3_rtree_geometry *, int, double *, int *);
                   124689:   void *pContext;
                   124690: };
                   124691: 
                   124692: #ifndef MAX
                   124693: # define MAX(x,y) ((x) < (y) ? (y) : (x))
                   124694: #endif
                   124695: #ifndef MIN
                   124696: # define MIN(x,y) ((x) > (y) ? (y) : (x))
                   124697: #endif
                   124698: 
                   124699: /*
                   124700: ** Functions to deserialize a 16 bit integer, 32 bit real number and
                   124701: ** 64 bit integer. The deserialized value is returned.
                   124702: */
                   124703: static int readInt16(u8 *p){
                   124704:   return (p[0]<<8) + p[1];
                   124705: }
                   124706: static void readCoord(u8 *p, RtreeCoord *pCoord){
                   124707:   u32 i = (
                   124708:     (((u32)p[0]) << 24) + 
                   124709:     (((u32)p[1]) << 16) + 
                   124710:     (((u32)p[2]) <<  8) + 
                   124711:     (((u32)p[3]) <<  0)
                   124712:   );
                   124713:   *(u32 *)pCoord = i;
                   124714: }
                   124715: static i64 readInt64(u8 *p){
                   124716:   return (
                   124717:     (((i64)p[0]) << 56) + 
                   124718:     (((i64)p[1]) << 48) + 
                   124719:     (((i64)p[2]) << 40) + 
                   124720:     (((i64)p[3]) << 32) + 
                   124721:     (((i64)p[4]) << 24) + 
                   124722:     (((i64)p[5]) << 16) + 
                   124723:     (((i64)p[6]) <<  8) + 
                   124724:     (((i64)p[7]) <<  0)
                   124725:   );
                   124726: }
                   124727: 
                   124728: /*
                   124729: ** Functions to serialize a 16 bit integer, 32 bit real number and
                   124730: ** 64 bit integer. The value returned is the number of bytes written
                   124731: ** to the argument buffer (always 2, 4 and 8 respectively).
                   124732: */
                   124733: static int writeInt16(u8 *p, int i){
                   124734:   p[0] = (i>> 8)&0xFF;
                   124735:   p[1] = (i>> 0)&0xFF;
                   124736:   return 2;
                   124737: }
                   124738: static int writeCoord(u8 *p, RtreeCoord *pCoord){
                   124739:   u32 i;
                   124740:   assert( sizeof(RtreeCoord)==4 );
                   124741:   assert( sizeof(u32)==4 );
                   124742:   i = *(u32 *)pCoord;
                   124743:   p[0] = (i>>24)&0xFF;
                   124744:   p[1] = (i>>16)&0xFF;
                   124745:   p[2] = (i>> 8)&0xFF;
                   124746:   p[3] = (i>> 0)&0xFF;
                   124747:   return 4;
                   124748: }
                   124749: static int writeInt64(u8 *p, i64 i){
                   124750:   p[0] = (i>>56)&0xFF;
                   124751:   p[1] = (i>>48)&0xFF;
                   124752:   p[2] = (i>>40)&0xFF;
                   124753:   p[3] = (i>>32)&0xFF;
                   124754:   p[4] = (i>>24)&0xFF;
                   124755:   p[5] = (i>>16)&0xFF;
                   124756:   p[6] = (i>> 8)&0xFF;
                   124757:   p[7] = (i>> 0)&0xFF;
                   124758:   return 8;
                   124759: }
                   124760: 
                   124761: /*
                   124762: ** Increment the reference count of node p.
                   124763: */
                   124764: static void nodeReference(RtreeNode *p){
                   124765:   if( p ){
                   124766:     p->nRef++;
                   124767:   }
                   124768: }
                   124769: 
                   124770: /*
                   124771: ** Clear the content of node p (set all bytes to 0x00).
                   124772: */
                   124773: static void nodeZero(Rtree *pRtree, RtreeNode *p){
                   124774:   memset(&p->zData[2], 0, pRtree->iNodeSize-2);
                   124775:   p->isDirty = 1;
                   124776: }
                   124777: 
                   124778: /*
                   124779: ** Given a node number iNode, return the corresponding key to use
                   124780: ** in the Rtree.aHash table.
                   124781: */
                   124782: static int nodeHash(i64 iNode){
                   124783:   return (
                   124784:     (iNode>>56) ^ (iNode>>48) ^ (iNode>>40) ^ (iNode>>32) ^ 
                   124785:     (iNode>>24) ^ (iNode>>16) ^ (iNode>> 8) ^ (iNode>> 0)
                   124786:   ) % HASHSIZE;
                   124787: }
                   124788: 
                   124789: /*
                   124790: ** Search the node hash table for node iNode. If found, return a pointer
                   124791: ** to it. Otherwise, return 0.
                   124792: */
                   124793: static RtreeNode *nodeHashLookup(Rtree *pRtree, i64 iNode){
                   124794:   RtreeNode *p;
                   124795:   for(p=pRtree->aHash[nodeHash(iNode)]; p && p->iNode!=iNode; p=p->pNext);
                   124796:   return p;
                   124797: }
                   124798: 
                   124799: /*
                   124800: ** Add node pNode to the node hash table.
                   124801: */
                   124802: static void nodeHashInsert(Rtree *pRtree, RtreeNode *pNode){
                   124803:   int iHash;
                   124804:   assert( pNode->pNext==0 );
                   124805:   iHash = nodeHash(pNode->iNode);
                   124806:   pNode->pNext = pRtree->aHash[iHash];
                   124807:   pRtree->aHash[iHash] = pNode;
                   124808: }
                   124809: 
                   124810: /*
                   124811: ** Remove node pNode from the node hash table.
                   124812: */
                   124813: static void nodeHashDelete(Rtree *pRtree, RtreeNode *pNode){
                   124814:   RtreeNode **pp;
                   124815:   if( pNode->iNode!=0 ){
                   124816:     pp = &pRtree->aHash[nodeHash(pNode->iNode)];
                   124817:     for( ; (*pp)!=pNode; pp = &(*pp)->pNext){ assert(*pp); }
                   124818:     *pp = pNode->pNext;
                   124819:     pNode->pNext = 0;
                   124820:   }
                   124821: }
                   124822: 
                   124823: /*
                   124824: ** Allocate and return new r-tree node. Initially, (RtreeNode.iNode==0),
                   124825: ** indicating that node has not yet been assigned a node number. It is
                   124826: ** assigned a node number when nodeWrite() is called to write the
                   124827: ** node contents out to the database.
                   124828: */
                   124829: static RtreeNode *nodeNew(Rtree *pRtree, RtreeNode *pParent){
                   124830:   RtreeNode *pNode;
                   124831:   pNode = (RtreeNode *)sqlite3_malloc(sizeof(RtreeNode) + pRtree->iNodeSize);
                   124832:   if( pNode ){
                   124833:     memset(pNode, 0, sizeof(RtreeNode) + pRtree->iNodeSize);
                   124834:     pNode->zData = (u8 *)&pNode[1];
                   124835:     pNode->nRef = 1;
                   124836:     pNode->pParent = pParent;
                   124837:     pNode->isDirty = 1;
                   124838:     nodeReference(pParent);
                   124839:   }
                   124840:   return pNode;
                   124841: }
                   124842: 
                   124843: /*
                   124844: ** Obtain a reference to an r-tree node.
                   124845: */
                   124846: static int
                   124847: nodeAcquire(
                   124848:   Rtree *pRtree,             /* R-tree structure */
                   124849:   i64 iNode,                 /* Node number to load */
                   124850:   RtreeNode *pParent,        /* Either the parent node or NULL */
                   124851:   RtreeNode **ppNode         /* OUT: Acquired node */
                   124852: ){
                   124853:   int rc;
                   124854:   int rc2 = SQLITE_OK;
                   124855:   RtreeNode *pNode;
                   124856: 
                   124857:   /* Check if the requested node is already in the hash table. If so,
                   124858:   ** increase its reference count and return it.
                   124859:   */
                   124860:   if( (pNode = nodeHashLookup(pRtree, iNode)) ){
                   124861:     assert( !pParent || !pNode->pParent || pNode->pParent==pParent );
                   124862:     if( pParent && !pNode->pParent ){
                   124863:       nodeReference(pParent);
                   124864:       pNode->pParent = pParent;
                   124865:     }
                   124866:     pNode->nRef++;
                   124867:     *ppNode = pNode;
                   124868:     return SQLITE_OK;
                   124869:   }
                   124870: 
                   124871:   sqlite3_bind_int64(pRtree->pReadNode, 1, iNode);
                   124872:   rc = sqlite3_step(pRtree->pReadNode);
                   124873:   if( rc==SQLITE_ROW ){
                   124874:     const u8 *zBlob = sqlite3_column_blob(pRtree->pReadNode, 0);
                   124875:     if( pRtree->iNodeSize==sqlite3_column_bytes(pRtree->pReadNode, 0) ){
                   124876:       pNode = (RtreeNode *)sqlite3_malloc(sizeof(RtreeNode)+pRtree->iNodeSize);
                   124877:       if( !pNode ){
                   124878:         rc2 = SQLITE_NOMEM;
                   124879:       }else{
                   124880:         pNode->pParent = pParent;
                   124881:         pNode->zData = (u8 *)&pNode[1];
                   124882:         pNode->nRef = 1;
                   124883:         pNode->iNode = iNode;
                   124884:         pNode->isDirty = 0;
                   124885:         pNode->pNext = 0;
                   124886:         memcpy(pNode->zData, zBlob, pRtree->iNodeSize);
                   124887:         nodeReference(pParent);
                   124888:       }
                   124889:     }
                   124890:   }
                   124891:   rc = sqlite3_reset(pRtree->pReadNode);
                   124892:   if( rc==SQLITE_OK ) rc = rc2;
                   124893: 
                   124894:   /* If the root node was just loaded, set pRtree->iDepth to the height
                   124895:   ** of the r-tree structure. A height of zero means all data is stored on
                   124896:   ** the root node. A height of one means the children of the root node
                   124897:   ** are the leaves, and so on. If the depth as specified on the root node
                   124898:   ** is greater than RTREE_MAX_DEPTH, the r-tree structure must be corrupt.
                   124899:   */
                   124900:   if( pNode && iNode==1 ){
                   124901:     pRtree->iDepth = readInt16(pNode->zData);
                   124902:     if( pRtree->iDepth>RTREE_MAX_DEPTH ){
                   124903:       rc = SQLITE_CORRUPT_VTAB;
                   124904:     }
                   124905:   }
                   124906: 
                   124907:   /* If no error has occurred so far, check if the "number of entries"
                   124908:   ** field on the node is too large. If so, set the return code to 
                   124909:   ** SQLITE_CORRUPT_VTAB.
                   124910:   */
                   124911:   if( pNode && rc==SQLITE_OK ){
                   124912:     if( NCELL(pNode)>((pRtree->iNodeSize-4)/pRtree->nBytesPerCell) ){
                   124913:       rc = SQLITE_CORRUPT_VTAB;
                   124914:     }
                   124915:   }
                   124916: 
                   124917:   if( rc==SQLITE_OK ){
                   124918:     if( pNode!=0 ){
                   124919:       nodeHashInsert(pRtree, pNode);
                   124920:     }else{
                   124921:       rc = SQLITE_CORRUPT_VTAB;
                   124922:     }
                   124923:     *ppNode = pNode;
                   124924:   }else{
                   124925:     sqlite3_free(pNode);
                   124926:     *ppNode = 0;
                   124927:   }
                   124928: 
                   124929:   return rc;
                   124930: }
                   124931: 
                   124932: /*
                   124933: ** Overwrite cell iCell of node pNode with the contents of pCell.
                   124934: */
                   124935: static void nodeOverwriteCell(
                   124936:   Rtree *pRtree, 
                   124937:   RtreeNode *pNode,  
                   124938:   RtreeCell *pCell, 
                   124939:   int iCell
                   124940: ){
                   124941:   int ii;
                   124942:   u8 *p = &pNode->zData[4 + pRtree->nBytesPerCell*iCell];
                   124943:   p += writeInt64(p, pCell->iRowid);
                   124944:   for(ii=0; ii<(pRtree->nDim*2); ii++){
                   124945:     p += writeCoord(p, &pCell->aCoord[ii]);
                   124946:   }
                   124947:   pNode->isDirty = 1;
                   124948: }
                   124949: 
                   124950: /*
                   124951: ** Remove cell the cell with index iCell from node pNode.
                   124952: */
                   124953: static void nodeDeleteCell(Rtree *pRtree, RtreeNode *pNode, int iCell){
                   124954:   u8 *pDst = &pNode->zData[4 + pRtree->nBytesPerCell*iCell];
                   124955:   u8 *pSrc = &pDst[pRtree->nBytesPerCell];
                   124956:   int nByte = (NCELL(pNode) - iCell - 1) * pRtree->nBytesPerCell;
                   124957:   memmove(pDst, pSrc, nByte);
                   124958:   writeInt16(&pNode->zData[2], NCELL(pNode)-1);
                   124959:   pNode->isDirty = 1;
                   124960: }
                   124961: 
                   124962: /*
                   124963: ** Insert the contents of cell pCell into node pNode. If the insert
                   124964: ** is successful, return SQLITE_OK.
                   124965: **
                   124966: ** If there is not enough free space in pNode, return SQLITE_FULL.
                   124967: */
                   124968: static int
                   124969: nodeInsertCell(
                   124970:   Rtree *pRtree, 
                   124971:   RtreeNode *pNode, 
                   124972:   RtreeCell *pCell 
                   124973: ){
                   124974:   int nCell;                    /* Current number of cells in pNode */
                   124975:   int nMaxCell;                 /* Maximum number of cells for pNode */
                   124976: 
                   124977:   nMaxCell = (pRtree->iNodeSize-4)/pRtree->nBytesPerCell;
                   124978:   nCell = NCELL(pNode);
                   124979: 
                   124980:   assert( nCell<=nMaxCell );
                   124981:   if( nCell<nMaxCell ){
                   124982:     nodeOverwriteCell(pRtree, pNode, pCell, nCell);
                   124983:     writeInt16(&pNode->zData[2], nCell+1);
                   124984:     pNode->isDirty = 1;
                   124985:   }
                   124986: 
                   124987:   return (nCell==nMaxCell);
                   124988: }
                   124989: 
                   124990: /*
                   124991: ** If the node is dirty, write it out to the database.
                   124992: */
                   124993: static int
                   124994: nodeWrite(Rtree *pRtree, RtreeNode *pNode){
                   124995:   int rc = SQLITE_OK;
                   124996:   if( pNode->isDirty ){
                   124997:     sqlite3_stmt *p = pRtree->pWriteNode;
                   124998:     if( pNode->iNode ){
                   124999:       sqlite3_bind_int64(p, 1, pNode->iNode);
                   125000:     }else{
                   125001:       sqlite3_bind_null(p, 1);
                   125002:     }
                   125003:     sqlite3_bind_blob(p, 2, pNode->zData, pRtree->iNodeSize, SQLITE_STATIC);
                   125004:     sqlite3_step(p);
                   125005:     pNode->isDirty = 0;
                   125006:     rc = sqlite3_reset(p);
                   125007:     if( pNode->iNode==0 && rc==SQLITE_OK ){
                   125008:       pNode->iNode = sqlite3_last_insert_rowid(pRtree->db);
                   125009:       nodeHashInsert(pRtree, pNode);
                   125010:     }
                   125011:   }
                   125012:   return rc;
                   125013: }
                   125014: 
                   125015: /*
                   125016: ** Release a reference to a node. If the node is dirty and the reference
                   125017: ** count drops to zero, the node data is written to the database.
                   125018: */
                   125019: static int
                   125020: nodeRelease(Rtree *pRtree, RtreeNode *pNode){
                   125021:   int rc = SQLITE_OK;
                   125022:   if( pNode ){
                   125023:     assert( pNode->nRef>0 );
                   125024:     pNode->nRef--;
                   125025:     if( pNode->nRef==0 ){
                   125026:       if( pNode->iNode==1 ){
                   125027:         pRtree->iDepth = -1;
                   125028:       }
                   125029:       if( pNode->pParent ){
                   125030:         rc = nodeRelease(pRtree, pNode->pParent);
                   125031:       }
                   125032:       if( rc==SQLITE_OK ){
                   125033:         rc = nodeWrite(pRtree, pNode);
                   125034:       }
                   125035:       nodeHashDelete(pRtree, pNode);
                   125036:       sqlite3_free(pNode);
                   125037:     }
                   125038:   }
                   125039:   return rc;
                   125040: }
                   125041: 
                   125042: /*
                   125043: ** Return the 64-bit integer value associated with cell iCell of
                   125044: ** node pNode. If pNode is a leaf node, this is a rowid. If it is
                   125045: ** an internal node, then the 64-bit integer is a child page number.
                   125046: */
                   125047: static i64 nodeGetRowid(
                   125048:   Rtree *pRtree, 
                   125049:   RtreeNode *pNode, 
                   125050:   int iCell
                   125051: ){
                   125052:   assert( iCell<NCELL(pNode) );
                   125053:   return readInt64(&pNode->zData[4 + pRtree->nBytesPerCell*iCell]);
                   125054: }
                   125055: 
                   125056: /*
                   125057: ** Return coordinate iCoord from cell iCell in node pNode.
                   125058: */
                   125059: static void nodeGetCoord(
                   125060:   Rtree *pRtree, 
                   125061:   RtreeNode *pNode, 
                   125062:   int iCell,
                   125063:   int iCoord,
                   125064:   RtreeCoord *pCoord           /* Space to write result to */
                   125065: ){
                   125066:   readCoord(&pNode->zData[12 + pRtree->nBytesPerCell*iCell + 4*iCoord], pCoord);
                   125067: }
                   125068: 
                   125069: /*
                   125070: ** Deserialize cell iCell of node pNode. Populate the structure pointed
                   125071: ** to by pCell with the results.
                   125072: */
                   125073: static void nodeGetCell(
                   125074:   Rtree *pRtree, 
                   125075:   RtreeNode *pNode, 
                   125076:   int iCell,
                   125077:   RtreeCell *pCell
                   125078: ){
                   125079:   int ii;
                   125080:   pCell->iRowid = nodeGetRowid(pRtree, pNode, iCell);
                   125081:   for(ii=0; ii<pRtree->nDim*2; ii++){
                   125082:     nodeGetCoord(pRtree, pNode, iCell, ii, &pCell->aCoord[ii]);
                   125083:   }
                   125084: }
                   125085: 
                   125086: 
                   125087: /* Forward declaration for the function that does the work of
                   125088: ** the virtual table module xCreate() and xConnect() methods.
                   125089: */
                   125090: static int rtreeInit(
                   125091:   sqlite3 *, void *, int, const char *const*, sqlite3_vtab **, char **, int
                   125092: );
                   125093: 
                   125094: /* 
                   125095: ** Rtree virtual table module xCreate method.
                   125096: */
                   125097: static int rtreeCreate(
                   125098:   sqlite3 *db,
                   125099:   void *pAux,
                   125100:   int argc, const char *const*argv,
                   125101:   sqlite3_vtab **ppVtab,
                   125102:   char **pzErr
                   125103: ){
                   125104:   return rtreeInit(db, pAux, argc, argv, ppVtab, pzErr, 1);
                   125105: }
                   125106: 
                   125107: /* 
                   125108: ** Rtree virtual table module xConnect method.
                   125109: */
                   125110: static int rtreeConnect(
                   125111:   sqlite3 *db,
                   125112:   void *pAux,
                   125113:   int argc, const char *const*argv,
                   125114:   sqlite3_vtab **ppVtab,
                   125115:   char **pzErr
                   125116: ){
                   125117:   return rtreeInit(db, pAux, argc, argv, ppVtab, pzErr, 0);
                   125118: }
                   125119: 
                   125120: /*
                   125121: ** Increment the r-tree reference count.
                   125122: */
                   125123: static void rtreeReference(Rtree *pRtree){
                   125124:   pRtree->nBusy++;
                   125125: }
                   125126: 
                   125127: /*
                   125128: ** Decrement the r-tree reference count. When the reference count reaches
                   125129: ** zero the structure is deleted.
                   125130: */
                   125131: static void rtreeRelease(Rtree *pRtree){
                   125132:   pRtree->nBusy--;
                   125133:   if( pRtree->nBusy==0 ){
                   125134:     sqlite3_finalize(pRtree->pReadNode);
                   125135:     sqlite3_finalize(pRtree->pWriteNode);
                   125136:     sqlite3_finalize(pRtree->pDeleteNode);
                   125137:     sqlite3_finalize(pRtree->pReadRowid);
                   125138:     sqlite3_finalize(pRtree->pWriteRowid);
                   125139:     sqlite3_finalize(pRtree->pDeleteRowid);
                   125140:     sqlite3_finalize(pRtree->pReadParent);
                   125141:     sqlite3_finalize(pRtree->pWriteParent);
                   125142:     sqlite3_finalize(pRtree->pDeleteParent);
                   125143:     sqlite3_free(pRtree);
                   125144:   }
                   125145: }
                   125146: 
                   125147: /* 
                   125148: ** Rtree virtual table module xDisconnect method.
                   125149: */
                   125150: static int rtreeDisconnect(sqlite3_vtab *pVtab){
                   125151:   rtreeRelease((Rtree *)pVtab);
                   125152:   return SQLITE_OK;
                   125153: }
                   125154: 
                   125155: /* 
                   125156: ** Rtree virtual table module xDestroy method.
                   125157: */
                   125158: static int rtreeDestroy(sqlite3_vtab *pVtab){
                   125159:   Rtree *pRtree = (Rtree *)pVtab;
                   125160:   int rc;
                   125161:   char *zCreate = sqlite3_mprintf(
                   125162:     "DROP TABLE '%q'.'%q_node';"
                   125163:     "DROP TABLE '%q'.'%q_rowid';"
                   125164:     "DROP TABLE '%q'.'%q_parent';",
                   125165:     pRtree->zDb, pRtree->zName, 
                   125166:     pRtree->zDb, pRtree->zName,
                   125167:     pRtree->zDb, pRtree->zName
                   125168:   );
                   125169:   if( !zCreate ){
                   125170:     rc = SQLITE_NOMEM;
                   125171:   }else{
                   125172:     rc = sqlite3_exec(pRtree->db, zCreate, 0, 0, 0);
                   125173:     sqlite3_free(zCreate);
                   125174:   }
                   125175:   if( rc==SQLITE_OK ){
                   125176:     rtreeRelease(pRtree);
                   125177:   }
                   125178: 
                   125179:   return rc;
                   125180: }
                   125181: 
                   125182: /* 
                   125183: ** Rtree virtual table module xOpen method.
                   125184: */
                   125185: static int rtreeOpen(sqlite3_vtab *pVTab, sqlite3_vtab_cursor **ppCursor){
                   125186:   int rc = SQLITE_NOMEM;
                   125187:   RtreeCursor *pCsr;
                   125188: 
                   125189:   pCsr = (RtreeCursor *)sqlite3_malloc(sizeof(RtreeCursor));
                   125190:   if( pCsr ){
                   125191:     memset(pCsr, 0, sizeof(RtreeCursor));
                   125192:     pCsr->base.pVtab = pVTab;
                   125193:     rc = SQLITE_OK;
                   125194:   }
                   125195:   *ppCursor = (sqlite3_vtab_cursor *)pCsr;
                   125196: 
                   125197:   return rc;
                   125198: }
                   125199: 
                   125200: 
                   125201: /*
                   125202: ** Free the RtreeCursor.aConstraint[] array and its contents.
                   125203: */
                   125204: static void freeCursorConstraints(RtreeCursor *pCsr){
                   125205:   if( pCsr->aConstraint ){
                   125206:     int i;                        /* Used to iterate through constraint array */
                   125207:     for(i=0; i<pCsr->nConstraint; i++){
                   125208:       sqlite3_rtree_geometry *pGeom = pCsr->aConstraint[i].pGeom;
                   125209:       if( pGeom ){
                   125210:         if( pGeom->xDelUser ) pGeom->xDelUser(pGeom->pUser);
                   125211:         sqlite3_free(pGeom);
                   125212:       }
                   125213:     }
                   125214:     sqlite3_free(pCsr->aConstraint);
                   125215:     pCsr->aConstraint = 0;
                   125216:   }
                   125217: }
                   125218: 
                   125219: /* 
                   125220: ** Rtree virtual table module xClose method.
                   125221: */
                   125222: static int rtreeClose(sqlite3_vtab_cursor *cur){
                   125223:   Rtree *pRtree = (Rtree *)(cur->pVtab);
                   125224:   int rc;
                   125225:   RtreeCursor *pCsr = (RtreeCursor *)cur;
                   125226:   freeCursorConstraints(pCsr);
                   125227:   rc = nodeRelease(pRtree, pCsr->pNode);
                   125228:   sqlite3_free(pCsr);
                   125229:   return rc;
                   125230: }
                   125231: 
                   125232: /*
                   125233: ** Rtree virtual table module xEof method.
                   125234: **
                   125235: ** Return non-zero if the cursor does not currently point to a valid 
                   125236: ** record (i.e if the scan has finished), or zero otherwise.
                   125237: */
                   125238: static int rtreeEof(sqlite3_vtab_cursor *cur){
                   125239:   RtreeCursor *pCsr = (RtreeCursor *)cur;
                   125240:   return (pCsr->pNode==0);
                   125241: }
                   125242: 
                   125243: /*
                   125244: ** The r-tree constraint passed as the second argument to this function is
                   125245: ** guaranteed to be a MATCH constraint.
                   125246: */
                   125247: static int testRtreeGeom(
                   125248:   Rtree *pRtree,                  /* R-Tree object */
                   125249:   RtreeConstraint *pConstraint,   /* MATCH constraint to test */
                   125250:   RtreeCell *pCell,               /* Cell to test */
                   125251:   int *pbRes                      /* OUT: Test result */
                   125252: ){
                   125253:   int i;
                   125254:   double aCoord[RTREE_MAX_DIMENSIONS*2];
                   125255:   int nCoord = pRtree->nDim*2;
                   125256: 
                   125257:   assert( pConstraint->op==RTREE_MATCH );
                   125258:   assert( pConstraint->pGeom );
                   125259: 
                   125260:   for(i=0; i<nCoord; i++){
                   125261:     aCoord[i] = DCOORD(pCell->aCoord[i]);
                   125262:   }
                   125263:   return pConstraint->xGeom(pConstraint->pGeom, nCoord, aCoord, pbRes);
                   125264: }
                   125265: 
                   125266: /* 
                   125267: ** Cursor pCursor currently points to a cell in a non-leaf page.
                   125268: ** Set *pbEof to true if the sub-tree headed by the cell is filtered
                   125269: ** (excluded) by the constraints in the pCursor->aConstraint[] 
                   125270: ** array, or false otherwise.
                   125271: **
                   125272: ** Return SQLITE_OK if successful or an SQLite error code if an error
                   125273: ** occurs within a geometry callback.
                   125274: */
                   125275: static int testRtreeCell(Rtree *pRtree, RtreeCursor *pCursor, int *pbEof){
                   125276:   RtreeCell cell;
                   125277:   int ii;
                   125278:   int bRes = 0;
                   125279:   int rc = SQLITE_OK;
                   125280: 
                   125281:   nodeGetCell(pRtree, pCursor->pNode, pCursor->iCell, &cell);
                   125282:   for(ii=0; bRes==0 && ii<pCursor->nConstraint; ii++){
                   125283:     RtreeConstraint *p = &pCursor->aConstraint[ii];
                   125284:     double cell_min = DCOORD(cell.aCoord[(p->iCoord>>1)*2]);
                   125285:     double cell_max = DCOORD(cell.aCoord[(p->iCoord>>1)*2+1]);
                   125286: 
                   125287:     assert(p->op==RTREE_LE || p->op==RTREE_LT || p->op==RTREE_GE 
                   125288:         || p->op==RTREE_GT || p->op==RTREE_EQ || p->op==RTREE_MATCH
                   125289:     );
                   125290: 
                   125291:     switch( p->op ){
                   125292:       case RTREE_LE: case RTREE_LT: 
                   125293:         bRes = p->rValue<cell_min; 
                   125294:         break;
                   125295: 
                   125296:       case RTREE_GE: case RTREE_GT: 
                   125297:         bRes = p->rValue>cell_max; 
                   125298:         break;
                   125299: 
                   125300:       case RTREE_EQ:
                   125301:         bRes = (p->rValue>cell_max || p->rValue<cell_min);
                   125302:         break;
                   125303: 
                   125304:       default: {
                   125305:         assert( p->op==RTREE_MATCH );
                   125306:         rc = testRtreeGeom(pRtree, p, &cell, &bRes);
                   125307:         bRes = !bRes;
                   125308:         break;
                   125309:       }
                   125310:     }
                   125311:   }
                   125312: 
                   125313:   *pbEof = bRes;
                   125314:   return rc;
                   125315: }
                   125316: 
                   125317: /* 
                   125318: ** Test if the cell that cursor pCursor currently points to
                   125319: ** would be filtered (excluded) by the constraints in the 
                   125320: ** pCursor->aConstraint[] array. If so, set *pbEof to true before
                   125321: ** returning. If the cell is not filtered (excluded) by the constraints,
                   125322: ** set pbEof to zero.
                   125323: **
                   125324: ** Return SQLITE_OK if successful or an SQLite error code if an error
                   125325: ** occurs within a geometry callback.
                   125326: **
                   125327: ** This function assumes that the cell is part of a leaf node.
                   125328: */
                   125329: static int testRtreeEntry(Rtree *pRtree, RtreeCursor *pCursor, int *pbEof){
                   125330:   RtreeCell cell;
                   125331:   int ii;
                   125332:   *pbEof = 0;
                   125333: 
                   125334:   nodeGetCell(pRtree, pCursor->pNode, pCursor->iCell, &cell);
                   125335:   for(ii=0; ii<pCursor->nConstraint; ii++){
                   125336:     RtreeConstraint *p = &pCursor->aConstraint[ii];
                   125337:     double coord = DCOORD(cell.aCoord[p->iCoord]);
                   125338:     int res;
                   125339:     assert(p->op==RTREE_LE || p->op==RTREE_LT || p->op==RTREE_GE 
                   125340:         || p->op==RTREE_GT || p->op==RTREE_EQ || p->op==RTREE_MATCH
                   125341:     );
                   125342:     switch( p->op ){
                   125343:       case RTREE_LE: res = (coord<=p->rValue); break;
                   125344:       case RTREE_LT: res = (coord<p->rValue);  break;
                   125345:       case RTREE_GE: res = (coord>=p->rValue); break;
                   125346:       case RTREE_GT: res = (coord>p->rValue);  break;
                   125347:       case RTREE_EQ: res = (coord==p->rValue); break;
                   125348:       default: {
                   125349:         int rc;
                   125350:         assert( p->op==RTREE_MATCH );
                   125351:         rc = testRtreeGeom(pRtree, p, &cell, &res);
                   125352:         if( rc!=SQLITE_OK ){
                   125353:           return rc;
                   125354:         }
                   125355:         break;
                   125356:       }
                   125357:     }
                   125358: 
                   125359:     if( !res ){
                   125360:       *pbEof = 1;
                   125361:       return SQLITE_OK;
                   125362:     }
                   125363:   }
                   125364: 
                   125365:   return SQLITE_OK;
                   125366: }
                   125367: 
                   125368: /*
                   125369: ** Cursor pCursor currently points at a node that heads a sub-tree of
                   125370: ** height iHeight (if iHeight==0, then the node is a leaf). Descend
                   125371: ** to point to the left-most cell of the sub-tree that matches the 
                   125372: ** configured constraints.
                   125373: */
                   125374: static int descendToCell(
                   125375:   Rtree *pRtree, 
                   125376:   RtreeCursor *pCursor, 
                   125377:   int iHeight,
                   125378:   int *pEof                 /* OUT: Set to true if cannot descend */
                   125379: ){
                   125380:   int isEof;
                   125381:   int rc;
                   125382:   int ii;
                   125383:   RtreeNode *pChild;
                   125384:   sqlite3_int64 iRowid;
                   125385: 
                   125386:   RtreeNode *pSavedNode = pCursor->pNode;
                   125387:   int iSavedCell = pCursor->iCell;
                   125388: 
                   125389:   assert( iHeight>=0 );
                   125390: 
                   125391:   if( iHeight==0 ){
                   125392:     rc = testRtreeEntry(pRtree, pCursor, &isEof);
                   125393:   }else{
                   125394:     rc = testRtreeCell(pRtree, pCursor, &isEof);
                   125395:   }
                   125396:   if( rc!=SQLITE_OK || isEof || iHeight==0 ){
                   125397:     goto descend_to_cell_out;
                   125398:   }
                   125399: 
                   125400:   iRowid = nodeGetRowid(pRtree, pCursor->pNode, pCursor->iCell);
                   125401:   rc = nodeAcquire(pRtree, iRowid, pCursor->pNode, &pChild);
                   125402:   if( rc!=SQLITE_OK ){
                   125403:     goto descend_to_cell_out;
                   125404:   }
                   125405: 
                   125406:   nodeRelease(pRtree, pCursor->pNode);
                   125407:   pCursor->pNode = pChild;
                   125408:   isEof = 1;
                   125409:   for(ii=0; isEof && ii<NCELL(pChild); ii++){
                   125410:     pCursor->iCell = ii;
                   125411:     rc = descendToCell(pRtree, pCursor, iHeight-1, &isEof);
                   125412:     if( rc!=SQLITE_OK ){
                   125413:       goto descend_to_cell_out;
                   125414:     }
                   125415:   }
                   125416: 
                   125417:   if( isEof ){
                   125418:     assert( pCursor->pNode==pChild );
                   125419:     nodeReference(pSavedNode);
                   125420:     nodeRelease(pRtree, pChild);
                   125421:     pCursor->pNode = pSavedNode;
                   125422:     pCursor->iCell = iSavedCell;
                   125423:   }
                   125424: 
                   125425: descend_to_cell_out:
                   125426:   *pEof = isEof;
                   125427:   return rc;
                   125428: }
                   125429: 
                   125430: /*
                   125431: ** One of the cells in node pNode is guaranteed to have a 64-bit 
                   125432: ** integer value equal to iRowid. Return the index of this cell.
                   125433: */
                   125434: static int nodeRowidIndex(
                   125435:   Rtree *pRtree, 
                   125436:   RtreeNode *pNode, 
                   125437:   i64 iRowid,
                   125438:   int *piIndex
                   125439: ){
                   125440:   int ii;
                   125441:   int nCell = NCELL(pNode);
                   125442:   for(ii=0; ii<nCell; ii++){
                   125443:     if( nodeGetRowid(pRtree, pNode, ii)==iRowid ){
                   125444:       *piIndex = ii;
                   125445:       return SQLITE_OK;
                   125446:     }
                   125447:   }
                   125448:   return SQLITE_CORRUPT_VTAB;
                   125449: }
                   125450: 
                   125451: /*
                   125452: ** Return the index of the cell containing a pointer to node pNode
                   125453: ** in its parent. If pNode is the root node, return -1.
                   125454: */
                   125455: static int nodeParentIndex(Rtree *pRtree, RtreeNode *pNode, int *piIndex){
                   125456:   RtreeNode *pParent = pNode->pParent;
                   125457:   if( pParent ){
                   125458:     return nodeRowidIndex(pRtree, pParent, pNode->iNode, piIndex);
                   125459:   }
                   125460:   *piIndex = -1;
                   125461:   return SQLITE_OK;
                   125462: }
                   125463: 
                   125464: /* 
                   125465: ** Rtree virtual table module xNext method.
                   125466: */
                   125467: static int rtreeNext(sqlite3_vtab_cursor *pVtabCursor){
                   125468:   Rtree *pRtree = (Rtree *)(pVtabCursor->pVtab);
                   125469:   RtreeCursor *pCsr = (RtreeCursor *)pVtabCursor;
                   125470:   int rc = SQLITE_OK;
                   125471: 
                   125472:   /* RtreeCursor.pNode must not be NULL. If is is NULL, then this cursor is
                   125473:   ** already at EOF. It is against the rules to call the xNext() method of
                   125474:   ** a cursor that has already reached EOF.
                   125475:   */
                   125476:   assert( pCsr->pNode );
                   125477: 
                   125478:   if( pCsr->iStrategy==1 ){
                   125479:     /* This "scan" is a direct lookup by rowid. There is no next entry. */
                   125480:     nodeRelease(pRtree, pCsr->pNode);
                   125481:     pCsr->pNode = 0;
                   125482:   }else{
                   125483:     /* Move to the next entry that matches the configured constraints. */
                   125484:     int iHeight = 0;
                   125485:     while( pCsr->pNode ){
                   125486:       RtreeNode *pNode = pCsr->pNode;
                   125487:       int nCell = NCELL(pNode);
                   125488:       for(pCsr->iCell++; pCsr->iCell<nCell; pCsr->iCell++){
                   125489:         int isEof;
                   125490:         rc = descendToCell(pRtree, pCsr, iHeight, &isEof);
                   125491:         if( rc!=SQLITE_OK || !isEof ){
                   125492:           return rc;
                   125493:         }
                   125494:       }
                   125495:       pCsr->pNode = pNode->pParent;
                   125496:       rc = nodeParentIndex(pRtree, pNode, &pCsr->iCell);
                   125497:       if( rc!=SQLITE_OK ){
                   125498:         return rc;
                   125499:       }
                   125500:       nodeReference(pCsr->pNode);
                   125501:       nodeRelease(pRtree, pNode);
                   125502:       iHeight++;
                   125503:     }
                   125504:   }
                   125505: 
                   125506:   return rc;
                   125507: }
                   125508: 
                   125509: /* 
                   125510: ** Rtree virtual table module xRowid method.
                   125511: */
                   125512: static int rtreeRowid(sqlite3_vtab_cursor *pVtabCursor, sqlite_int64 *pRowid){
                   125513:   Rtree *pRtree = (Rtree *)pVtabCursor->pVtab;
                   125514:   RtreeCursor *pCsr = (RtreeCursor *)pVtabCursor;
                   125515: 
                   125516:   assert(pCsr->pNode);
                   125517:   *pRowid = nodeGetRowid(pRtree, pCsr->pNode, pCsr->iCell);
                   125518: 
                   125519:   return SQLITE_OK;
                   125520: }
                   125521: 
                   125522: /* 
                   125523: ** Rtree virtual table module xColumn method.
                   125524: */
                   125525: static int rtreeColumn(sqlite3_vtab_cursor *cur, sqlite3_context *ctx, int i){
                   125526:   Rtree *pRtree = (Rtree *)cur->pVtab;
                   125527:   RtreeCursor *pCsr = (RtreeCursor *)cur;
                   125528: 
                   125529:   if( i==0 ){
                   125530:     i64 iRowid = nodeGetRowid(pRtree, pCsr->pNode, pCsr->iCell);
                   125531:     sqlite3_result_int64(ctx, iRowid);
                   125532:   }else{
                   125533:     RtreeCoord c;
                   125534:     nodeGetCoord(pRtree, pCsr->pNode, pCsr->iCell, i-1, &c);
                   125535:     if( pRtree->eCoordType==RTREE_COORD_REAL32 ){
                   125536:       sqlite3_result_double(ctx, c.f);
                   125537:     }else{
                   125538:       assert( pRtree->eCoordType==RTREE_COORD_INT32 );
                   125539:       sqlite3_result_int(ctx, c.i);
                   125540:     }
                   125541:   }
                   125542: 
                   125543:   return SQLITE_OK;
                   125544: }
                   125545: 
                   125546: /* 
                   125547: ** Use nodeAcquire() to obtain the leaf node containing the record with 
                   125548: ** rowid iRowid. If successful, set *ppLeaf to point to the node and
                   125549: ** return SQLITE_OK. If there is no such record in the table, set
                   125550: ** *ppLeaf to 0 and return SQLITE_OK. If an error occurs, set *ppLeaf
                   125551: ** to zero and return an SQLite error code.
                   125552: */
                   125553: static int findLeafNode(Rtree *pRtree, i64 iRowid, RtreeNode **ppLeaf){
                   125554:   int rc;
                   125555:   *ppLeaf = 0;
                   125556:   sqlite3_bind_int64(pRtree->pReadRowid, 1, iRowid);
                   125557:   if( sqlite3_step(pRtree->pReadRowid)==SQLITE_ROW ){
                   125558:     i64 iNode = sqlite3_column_int64(pRtree->pReadRowid, 0);
                   125559:     rc = nodeAcquire(pRtree, iNode, 0, ppLeaf);
                   125560:     sqlite3_reset(pRtree->pReadRowid);
                   125561:   }else{
                   125562:     rc = sqlite3_reset(pRtree->pReadRowid);
                   125563:   }
                   125564:   return rc;
                   125565: }
                   125566: 
                   125567: /*
                   125568: ** This function is called to configure the RtreeConstraint object passed
                   125569: ** as the second argument for a MATCH constraint. The value passed as the
                   125570: ** first argument to this function is the right-hand operand to the MATCH
                   125571: ** operator.
                   125572: */
                   125573: static int deserializeGeometry(sqlite3_value *pValue, RtreeConstraint *pCons){
                   125574:   RtreeMatchArg *p;
                   125575:   sqlite3_rtree_geometry *pGeom;
                   125576:   int nBlob;
                   125577: 
                   125578:   /* Check that value is actually a blob. */
                   125579:   if( !sqlite3_value_type(pValue)==SQLITE_BLOB ) return SQLITE_ERROR;
                   125580: 
                   125581:   /* Check that the blob is roughly the right size. */
                   125582:   nBlob = sqlite3_value_bytes(pValue);
                   125583:   if( nBlob<(int)sizeof(RtreeMatchArg) 
                   125584:    || ((nBlob-sizeof(RtreeMatchArg))%sizeof(double))!=0
                   125585:   ){
                   125586:     return SQLITE_ERROR;
                   125587:   }
                   125588: 
                   125589:   pGeom = (sqlite3_rtree_geometry *)sqlite3_malloc(
                   125590:       sizeof(sqlite3_rtree_geometry) + nBlob
                   125591:   );
                   125592:   if( !pGeom ) return SQLITE_NOMEM;
                   125593:   memset(pGeom, 0, sizeof(sqlite3_rtree_geometry));
                   125594:   p = (RtreeMatchArg *)&pGeom[1];
                   125595: 
                   125596:   memcpy(p, sqlite3_value_blob(pValue), nBlob);
                   125597:   if( p->magic!=RTREE_GEOMETRY_MAGIC 
                   125598:    || nBlob!=(int)(sizeof(RtreeMatchArg) + (p->nParam-1)*sizeof(double))
                   125599:   ){
                   125600:     sqlite3_free(pGeom);
                   125601:     return SQLITE_ERROR;
                   125602:   }
                   125603: 
                   125604:   pGeom->pContext = p->pContext;
                   125605:   pGeom->nParam = p->nParam;
                   125606:   pGeom->aParam = p->aParam;
                   125607: 
                   125608:   pCons->xGeom = p->xGeom;
                   125609:   pCons->pGeom = pGeom;
                   125610:   return SQLITE_OK;
                   125611: }
                   125612: 
                   125613: /* 
                   125614: ** Rtree virtual table module xFilter method.
                   125615: */
                   125616: static int rtreeFilter(
                   125617:   sqlite3_vtab_cursor *pVtabCursor, 
                   125618:   int idxNum, const char *idxStr,
                   125619:   int argc, sqlite3_value **argv
                   125620: ){
                   125621:   Rtree *pRtree = (Rtree *)pVtabCursor->pVtab;
                   125622:   RtreeCursor *pCsr = (RtreeCursor *)pVtabCursor;
                   125623: 
                   125624:   RtreeNode *pRoot = 0;
                   125625:   int ii;
                   125626:   int rc = SQLITE_OK;
                   125627: 
                   125628:   rtreeReference(pRtree);
                   125629: 
                   125630:   freeCursorConstraints(pCsr);
                   125631:   pCsr->iStrategy = idxNum;
                   125632: 
                   125633:   if( idxNum==1 ){
                   125634:     /* Special case - lookup by rowid. */
                   125635:     RtreeNode *pLeaf;        /* Leaf on which the required cell resides */
                   125636:     i64 iRowid = sqlite3_value_int64(argv[0]);
                   125637:     rc = findLeafNode(pRtree, iRowid, &pLeaf);
                   125638:     pCsr->pNode = pLeaf; 
                   125639:     if( pLeaf ){
                   125640:       assert( rc==SQLITE_OK );
                   125641:       rc = nodeRowidIndex(pRtree, pLeaf, iRowid, &pCsr->iCell);
                   125642:     }
                   125643:   }else{
                   125644:     /* Normal case - r-tree scan. Set up the RtreeCursor.aConstraint array 
                   125645:     ** with the configured constraints. 
                   125646:     */
                   125647:     if( argc>0 ){
                   125648:       pCsr->aConstraint = sqlite3_malloc(sizeof(RtreeConstraint)*argc);
                   125649:       pCsr->nConstraint = argc;
                   125650:       if( !pCsr->aConstraint ){
                   125651:         rc = SQLITE_NOMEM;
                   125652:       }else{
                   125653:         memset(pCsr->aConstraint, 0, sizeof(RtreeConstraint)*argc);
                   125654:         assert( (idxStr==0 && argc==0) || (int)strlen(idxStr)==argc*2 );
                   125655:         for(ii=0; ii<argc; ii++){
                   125656:           RtreeConstraint *p = &pCsr->aConstraint[ii];
                   125657:           p->op = idxStr[ii*2];
                   125658:           p->iCoord = idxStr[ii*2+1]-'a';
                   125659:           if( p->op==RTREE_MATCH ){
                   125660:             /* A MATCH operator. The right-hand-side must be a blob that
                   125661:             ** can be cast into an RtreeMatchArg object. One created using
                   125662:             ** an sqlite3_rtree_geometry_callback() SQL user function.
                   125663:             */
                   125664:             rc = deserializeGeometry(argv[ii], p);
                   125665:             if( rc!=SQLITE_OK ){
                   125666:               break;
                   125667:             }
                   125668:           }else{
                   125669:             p->rValue = sqlite3_value_double(argv[ii]);
                   125670:           }
                   125671:         }
                   125672:       }
                   125673:     }
                   125674:   
                   125675:     if( rc==SQLITE_OK ){
                   125676:       pCsr->pNode = 0;
                   125677:       rc = nodeAcquire(pRtree, 1, 0, &pRoot);
                   125678:     }
                   125679:     if( rc==SQLITE_OK ){
                   125680:       int isEof = 1;
                   125681:       int nCell = NCELL(pRoot);
                   125682:       pCsr->pNode = pRoot;
                   125683:       for(pCsr->iCell=0; rc==SQLITE_OK && pCsr->iCell<nCell; pCsr->iCell++){
                   125684:         assert( pCsr->pNode==pRoot );
                   125685:         rc = descendToCell(pRtree, pCsr, pRtree->iDepth, &isEof);
                   125686:         if( !isEof ){
                   125687:           break;
                   125688:         }
                   125689:       }
                   125690:       if( rc==SQLITE_OK && isEof ){
                   125691:         assert( pCsr->pNode==pRoot );
                   125692:         nodeRelease(pRtree, pRoot);
                   125693:         pCsr->pNode = 0;
                   125694:       }
                   125695:       assert( rc!=SQLITE_OK || !pCsr->pNode || pCsr->iCell<NCELL(pCsr->pNode) );
                   125696:     }
                   125697:   }
                   125698: 
                   125699:   rtreeRelease(pRtree);
                   125700:   return rc;
                   125701: }
                   125702: 
                   125703: /*
                   125704: ** Rtree virtual table module xBestIndex method. There are three
                   125705: ** table scan strategies to choose from (in order from most to 
                   125706: ** least desirable):
                   125707: **
                   125708: **   idxNum     idxStr        Strategy
                   125709: **   ------------------------------------------------
                   125710: **     1        Unused        Direct lookup by rowid.
                   125711: **     2        See below     R-tree query or full-table scan.
                   125712: **   ------------------------------------------------
                   125713: **
                   125714: ** If strategy 1 is used, then idxStr is not meaningful. If strategy
                   125715: ** 2 is used, idxStr is formatted to contain 2 bytes for each 
                   125716: ** constraint used. The first two bytes of idxStr correspond to 
                   125717: ** the constraint in sqlite3_index_info.aConstraintUsage[] with
                   125718: ** (argvIndex==1) etc.
                   125719: **
                   125720: ** The first of each pair of bytes in idxStr identifies the constraint
                   125721: ** operator as follows:
                   125722: **
                   125723: **   Operator    Byte Value
                   125724: **   ----------------------
                   125725: **      =        0x41 ('A')
                   125726: **     <=        0x42 ('B')
                   125727: **      <        0x43 ('C')
                   125728: **     >=        0x44 ('D')
                   125729: **      >        0x45 ('E')
                   125730: **   MATCH       0x46 ('F')
                   125731: **   ----------------------
                   125732: **
                   125733: ** The second of each pair of bytes identifies the coordinate column
                   125734: ** to which the constraint applies. The leftmost coordinate column
                   125735: ** is 'a', the second from the left 'b' etc.
                   125736: */
                   125737: static int rtreeBestIndex(sqlite3_vtab *tab, sqlite3_index_info *pIdxInfo){
                   125738:   int rc = SQLITE_OK;
                   125739:   int ii;
                   125740: 
                   125741:   int iIdx = 0;
                   125742:   char zIdxStr[RTREE_MAX_DIMENSIONS*8+1];
                   125743:   memset(zIdxStr, 0, sizeof(zIdxStr));
                   125744:   UNUSED_PARAMETER(tab);
                   125745: 
                   125746:   assert( pIdxInfo->idxStr==0 );
                   125747:   for(ii=0; ii<pIdxInfo->nConstraint && iIdx<(int)(sizeof(zIdxStr)-1); ii++){
                   125748:     struct sqlite3_index_constraint *p = &pIdxInfo->aConstraint[ii];
                   125749: 
                   125750:     if( p->usable && p->iColumn==0 && p->op==SQLITE_INDEX_CONSTRAINT_EQ ){
                   125751:       /* We have an equality constraint on the rowid. Use strategy 1. */
                   125752:       int jj;
                   125753:       for(jj=0; jj<ii; jj++){
                   125754:         pIdxInfo->aConstraintUsage[jj].argvIndex = 0;
                   125755:         pIdxInfo->aConstraintUsage[jj].omit = 0;
                   125756:       }
                   125757:       pIdxInfo->idxNum = 1;
                   125758:       pIdxInfo->aConstraintUsage[ii].argvIndex = 1;
                   125759:       pIdxInfo->aConstraintUsage[jj].omit = 1;
                   125760: 
                   125761:       /* This strategy involves a two rowid lookups on an B-Tree structures
                   125762:       ** and then a linear search of an R-Tree node. This should be 
                   125763:       ** considered almost as quick as a direct rowid lookup (for which 
                   125764:       ** sqlite uses an internal cost of 0.0).
                   125765:       */ 
                   125766:       pIdxInfo->estimatedCost = 10.0;
                   125767:       return SQLITE_OK;
                   125768:     }
                   125769: 
                   125770:     if( p->usable && (p->iColumn>0 || p->op==SQLITE_INDEX_CONSTRAINT_MATCH) ){
                   125771:       u8 op;
                   125772:       switch( p->op ){
                   125773:         case SQLITE_INDEX_CONSTRAINT_EQ: op = RTREE_EQ; break;
                   125774:         case SQLITE_INDEX_CONSTRAINT_GT: op = RTREE_GT; break;
                   125775:         case SQLITE_INDEX_CONSTRAINT_LE: op = RTREE_LE; break;
                   125776:         case SQLITE_INDEX_CONSTRAINT_LT: op = RTREE_LT; break;
                   125777:         case SQLITE_INDEX_CONSTRAINT_GE: op = RTREE_GE; break;
                   125778:         default:
                   125779:           assert( p->op==SQLITE_INDEX_CONSTRAINT_MATCH );
                   125780:           op = RTREE_MATCH; 
                   125781:           break;
                   125782:       }
                   125783:       zIdxStr[iIdx++] = op;
                   125784:       zIdxStr[iIdx++] = p->iColumn - 1 + 'a';
                   125785:       pIdxInfo->aConstraintUsage[ii].argvIndex = (iIdx/2);
                   125786:       pIdxInfo->aConstraintUsage[ii].omit = 1;
                   125787:     }
                   125788:   }
                   125789: 
                   125790:   pIdxInfo->idxNum = 2;
                   125791:   pIdxInfo->needToFreeIdxStr = 1;
                   125792:   if( iIdx>0 && 0==(pIdxInfo->idxStr = sqlite3_mprintf("%s", zIdxStr)) ){
                   125793:     return SQLITE_NOMEM;
                   125794:   }
                   125795:   assert( iIdx>=0 );
                   125796:   pIdxInfo->estimatedCost = (2000000.0 / (double)(iIdx + 1));
                   125797:   return rc;
                   125798: }
                   125799: 
                   125800: /*
                   125801: ** Return the N-dimensional volumn of the cell stored in *p.
                   125802: */
                   125803: static float cellArea(Rtree *pRtree, RtreeCell *p){
                   125804:   float area = 1.0;
                   125805:   int ii;
                   125806:   for(ii=0; ii<(pRtree->nDim*2); ii+=2){
                   125807:     area = (float)(area * (DCOORD(p->aCoord[ii+1]) - DCOORD(p->aCoord[ii])));
                   125808:   }
                   125809:   return area;
                   125810: }
                   125811: 
                   125812: /*
                   125813: ** Return the margin length of cell p. The margin length is the sum
                   125814: ** of the objects size in each dimension.
                   125815: */
                   125816: static float cellMargin(Rtree *pRtree, RtreeCell *p){
                   125817:   float margin = 0.0;
                   125818:   int ii;
                   125819:   for(ii=0; ii<(pRtree->nDim*2); ii+=2){
                   125820:     margin += (float)(DCOORD(p->aCoord[ii+1]) - DCOORD(p->aCoord[ii]));
                   125821:   }
                   125822:   return margin;
                   125823: }
                   125824: 
                   125825: /*
                   125826: ** Store the union of cells p1 and p2 in p1.
                   125827: */
                   125828: static void cellUnion(Rtree *pRtree, RtreeCell *p1, RtreeCell *p2){
                   125829:   int ii;
                   125830:   if( pRtree->eCoordType==RTREE_COORD_REAL32 ){
                   125831:     for(ii=0; ii<(pRtree->nDim*2); ii+=2){
                   125832:       p1->aCoord[ii].f = MIN(p1->aCoord[ii].f, p2->aCoord[ii].f);
                   125833:       p1->aCoord[ii+1].f = MAX(p1->aCoord[ii+1].f, p2->aCoord[ii+1].f);
                   125834:     }
                   125835:   }else{
                   125836:     for(ii=0; ii<(pRtree->nDim*2); ii+=2){
                   125837:       p1->aCoord[ii].i = MIN(p1->aCoord[ii].i, p2->aCoord[ii].i);
                   125838:       p1->aCoord[ii+1].i = MAX(p1->aCoord[ii+1].i, p2->aCoord[ii+1].i);
                   125839:     }
                   125840:   }
                   125841: }
                   125842: 
                   125843: /*
                   125844: ** Return true if the area covered by p2 is a subset of the area covered
                   125845: ** by p1. False otherwise.
                   125846: */
                   125847: static int cellContains(Rtree *pRtree, RtreeCell *p1, RtreeCell *p2){
                   125848:   int ii;
                   125849:   int isInt = (pRtree->eCoordType==RTREE_COORD_INT32);
                   125850:   for(ii=0; ii<(pRtree->nDim*2); ii+=2){
                   125851:     RtreeCoord *a1 = &p1->aCoord[ii];
                   125852:     RtreeCoord *a2 = &p2->aCoord[ii];
                   125853:     if( (!isInt && (a2[0].f<a1[0].f || a2[1].f>a1[1].f)) 
                   125854:      || ( isInt && (a2[0].i<a1[0].i || a2[1].i>a1[1].i)) 
                   125855:     ){
                   125856:       return 0;
                   125857:     }
                   125858:   }
                   125859:   return 1;
                   125860: }
                   125861: 
                   125862: /*
                   125863: ** Return the amount cell p would grow by if it were unioned with pCell.
                   125864: */
                   125865: static float cellGrowth(Rtree *pRtree, RtreeCell *p, RtreeCell *pCell){
                   125866:   float area;
                   125867:   RtreeCell cell;
                   125868:   memcpy(&cell, p, sizeof(RtreeCell));
                   125869:   area = cellArea(pRtree, &cell);
                   125870:   cellUnion(pRtree, &cell, pCell);
                   125871:   return (cellArea(pRtree, &cell)-area);
                   125872: }
                   125873: 
                   125874: #if VARIANT_RSTARTREE_CHOOSESUBTREE || VARIANT_RSTARTREE_SPLIT
                   125875: static float cellOverlap(
                   125876:   Rtree *pRtree, 
                   125877:   RtreeCell *p, 
                   125878:   RtreeCell *aCell, 
                   125879:   int nCell, 
                   125880:   int iExclude
                   125881: ){
                   125882:   int ii;
                   125883:   float overlap = 0.0;
                   125884:   for(ii=0; ii<nCell; ii++){
                   125885: #if VARIANT_RSTARTREE_CHOOSESUBTREE
                   125886:     if( ii!=iExclude )
                   125887: #else
                   125888:     assert( iExclude==-1 );
                   125889:     UNUSED_PARAMETER(iExclude);
                   125890: #endif
                   125891:     {
                   125892:       int jj;
                   125893:       float o = 1.0;
                   125894:       for(jj=0; jj<(pRtree->nDim*2); jj+=2){
                   125895:         double x1;
                   125896:         double x2;
                   125897: 
                   125898:         x1 = MAX(DCOORD(p->aCoord[jj]), DCOORD(aCell[ii].aCoord[jj]));
                   125899:         x2 = MIN(DCOORD(p->aCoord[jj+1]), DCOORD(aCell[ii].aCoord[jj+1]));
                   125900: 
                   125901:         if( x2<x1 ){
                   125902:           o = 0.0;
                   125903:           break;
                   125904:         }else{
                   125905:           o = o * (float)(x2-x1);
                   125906:         }
                   125907:       }
                   125908:       overlap += o;
                   125909:     }
                   125910:   }
                   125911:   return overlap;
                   125912: }
                   125913: #endif
                   125914: 
                   125915: #if VARIANT_RSTARTREE_CHOOSESUBTREE
                   125916: static float cellOverlapEnlargement(
                   125917:   Rtree *pRtree, 
                   125918:   RtreeCell *p, 
                   125919:   RtreeCell *pInsert, 
                   125920:   RtreeCell *aCell, 
                   125921:   int nCell, 
                   125922:   int iExclude
                   125923: ){
                   125924:   double before;
                   125925:   double after;
                   125926:   before = cellOverlap(pRtree, p, aCell, nCell, iExclude);
                   125927:   cellUnion(pRtree, p, pInsert);
                   125928:   after = cellOverlap(pRtree, p, aCell, nCell, iExclude);
                   125929:   return (float)(after-before);
                   125930: }
                   125931: #endif
                   125932: 
                   125933: 
                   125934: /*
                   125935: ** This function implements the ChooseLeaf algorithm from Gutman[84].
                   125936: ** ChooseSubTree in r*tree terminology.
                   125937: */
                   125938: static int ChooseLeaf(
                   125939:   Rtree *pRtree,               /* Rtree table */
                   125940:   RtreeCell *pCell,            /* Cell to insert into rtree */
                   125941:   int iHeight,                 /* Height of sub-tree rooted at pCell */
                   125942:   RtreeNode **ppLeaf           /* OUT: Selected leaf page */
                   125943: ){
                   125944:   int rc;
                   125945:   int ii;
                   125946:   RtreeNode *pNode;
                   125947:   rc = nodeAcquire(pRtree, 1, 0, &pNode);
                   125948: 
                   125949:   for(ii=0; rc==SQLITE_OK && ii<(pRtree->iDepth-iHeight); ii++){
                   125950:     int iCell;
                   125951:     sqlite3_int64 iBest = 0;
                   125952: 
                   125953:     float fMinGrowth = 0.0;
                   125954:     float fMinArea = 0.0;
                   125955:     float fMinOverlap = 0.0;
                   125956: 
                   125957:     int nCell = NCELL(pNode);
                   125958:     RtreeCell cell;
                   125959:     RtreeNode *pChild;
                   125960: 
                   125961:     RtreeCell *aCell = 0;
                   125962: 
                   125963: #if VARIANT_RSTARTREE_CHOOSESUBTREE
                   125964:     if( ii==(pRtree->iDepth-1) ){
                   125965:       int jj;
                   125966:       aCell = sqlite3_malloc(sizeof(RtreeCell)*nCell);
                   125967:       if( !aCell ){
                   125968:         rc = SQLITE_NOMEM;
                   125969:         nodeRelease(pRtree, pNode);
                   125970:         pNode = 0;
                   125971:         continue;
                   125972:       }
                   125973:       for(jj=0; jj<nCell; jj++){
                   125974:         nodeGetCell(pRtree, pNode, jj, &aCell[jj]);
                   125975:       }
                   125976:     }
                   125977: #endif
                   125978: 
                   125979:     /* Select the child node which will be enlarged the least if pCell
                   125980:     ** is inserted into it. Resolve ties by choosing the entry with
                   125981:     ** the smallest area.
                   125982:     */
                   125983:     for(iCell=0; iCell<nCell; iCell++){
                   125984:       int bBest = 0;
                   125985:       float growth;
                   125986:       float area;
                   125987:       float overlap = 0.0;
                   125988:       nodeGetCell(pRtree, pNode, iCell, &cell);
                   125989:       growth = cellGrowth(pRtree, &cell, pCell);
                   125990:       area = cellArea(pRtree, &cell);
                   125991: 
                   125992: #if VARIANT_RSTARTREE_CHOOSESUBTREE
                   125993:       if( ii==(pRtree->iDepth-1) ){
                   125994:         overlap = cellOverlapEnlargement(pRtree,&cell,pCell,aCell,nCell,iCell);
                   125995:       }
                   125996:       if( (iCell==0) 
                   125997:        || (overlap<fMinOverlap) 
                   125998:        || (overlap==fMinOverlap && growth<fMinGrowth)
                   125999:        || (overlap==fMinOverlap && growth==fMinGrowth && area<fMinArea)
                   126000:       ){
                   126001:         bBest = 1;
                   126002:       }
                   126003: #else
                   126004:       if( iCell==0||growth<fMinGrowth||(growth==fMinGrowth && area<fMinArea) ){
                   126005:         bBest = 1;
                   126006:       }
                   126007: #endif
                   126008:       if( bBest ){
                   126009:         fMinOverlap = overlap;
                   126010:         fMinGrowth = growth;
                   126011:         fMinArea = area;
                   126012:         iBest = cell.iRowid;
                   126013:       }
                   126014:     }
                   126015: 
                   126016:     sqlite3_free(aCell);
                   126017:     rc = nodeAcquire(pRtree, iBest, pNode, &pChild);
                   126018:     nodeRelease(pRtree, pNode);
                   126019:     pNode = pChild;
                   126020:   }
                   126021: 
                   126022:   *ppLeaf = pNode;
                   126023:   return rc;
                   126024: }
                   126025: 
                   126026: /*
                   126027: ** A cell with the same content as pCell has just been inserted into
                   126028: ** the node pNode. This function updates the bounding box cells in
                   126029: ** all ancestor elements.
                   126030: */
                   126031: static int AdjustTree(
                   126032:   Rtree *pRtree,                    /* Rtree table */
                   126033:   RtreeNode *pNode,                 /* Adjust ancestry of this node. */
                   126034:   RtreeCell *pCell                  /* This cell was just inserted */
                   126035: ){
                   126036:   RtreeNode *p = pNode;
                   126037:   while( p->pParent ){
                   126038:     RtreeNode *pParent = p->pParent;
                   126039:     RtreeCell cell;
                   126040:     int iCell;
                   126041: 
                   126042:     if( nodeParentIndex(pRtree, p, &iCell) ){
                   126043:       return SQLITE_CORRUPT_VTAB;
                   126044:     }
                   126045: 
                   126046:     nodeGetCell(pRtree, pParent, iCell, &cell);
                   126047:     if( !cellContains(pRtree, &cell, pCell) ){
                   126048:       cellUnion(pRtree, &cell, pCell);
                   126049:       nodeOverwriteCell(pRtree, pParent, &cell, iCell);
                   126050:     }
                   126051:  
                   126052:     p = pParent;
                   126053:   }
                   126054:   return SQLITE_OK;
                   126055: }
                   126056: 
                   126057: /*
                   126058: ** Write mapping (iRowid->iNode) to the <rtree>_rowid table.
                   126059: */
                   126060: static int rowidWrite(Rtree *pRtree, sqlite3_int64 iRowid, sqlite3_int64 iNode){
                   126061:   sqlite3_bind_int64(pRtree->pWriteRowid, 1, iRowid);
                   126062:   sqlite3_bind_int64(pRtree->pWriteRowid, 2, iNode);
                   126063:   sqlite3_step(pRtree->pWriteRowid);
                   126064:   return sqlite3_reset(pRtree->pWriteRowid);
                   126065: }
                   126066: 
                   126067: /*
                   126068: ** Write mapping (iNode->iPar) to the <rtree>_parent table.
                   126069: */
                   126070: static int parentWrite(Rtree *pRtree, sqlite3_int64 iNode, sqlite3_int64 iPar){
                   126071:   sqlite3_bind_int64(pRtree->pWriteParent, 1, iNode);
                   126072:   sqlite3_bind_int64(pRtree->pWriteParent, 2, iPar);
                   126073:   sqlite3_step(pRtree->pWriteParent);
                   126074:   return sqlite3_reset(pRtree->pWriteParent);
                   126075: }
                   126076: 
                   126077: static int rtreeInsertCell(Rtree *, RtreeNode *, RtreeCell *, int);
                   126078: 
                   126079: #if VARIANT_GUTTMAN_LINEAR_SPLIT
                   126080: /*
                   126081: ** Implementation of the linear variant of the PickNext() function from
                   126082: ** Guttman[84].
                   126083: */
                   126084: static RtreeCell *LinearPickNext(
                   126085:   Rtree *pRtree,
                   126086:   RtreeCell *aCell, 
                   126087:   int nCell, 
                   126088:   RtreeCell *pLeftBox, 
                   126089:   RtreeCell *pRightBox,
                   126090:   int *aiUsed
                   126091: ){
                   126092:   int ii;
                   126093:   for(ii=0; aiUsed[ii]; ii++);
                   126094:   aiUsed[ii] = 1;
                   126095:   return &aCell[ii];
                   126096: }
                   126097: 
                   126098: /*
                   126099: ** Implementation of the linear variant of the PickSeeds() function from
                   126100: ** Guttman[84].
                   126101: */
                   126102: static void LinearPickSeeds(
                   126103:   Rtree *pRtree,
                   126104:   RtreeCell *aCell, 
                   126105:   int nCell, 
                   126106:   int *piLeftSeed, 
                   126107:   int *piRightSeed
                   126108: ){
                   126109:   int i;
                   126110:   int iLeftSeed = 0;
                   126111:   int iRightSeed = 1;
                   126112:   float maxNormalInnerWidth = 0.0;
                   126113: 
                   126114:   /* Pick two "seed" cells from the array of cells. The algorithm used
                   126115:   ** here is the LinearPickSeeds algorithm from Gutman[1984]. The 
                   126116:   ** indices of the two seed cells in the array are stored in local
                   126117:   ** variables iLeftSeek and iRightSeed.
                   126118:   */
                   126119:   for(i=0; i<pRtree->nDim; i++){
                   126120:     float x1 = DCOORD(aCell[0].aCoord[i*2]);
                   126121:     float x2 = DCOORD(aCell[0].aCoord[i*2+1]);
                   126122:     float x3 = x1;
                   126123:     float x4 = x2;
                   126124:     int jj;
                   126125: 
                   126126:     int iCellLeft = 0;
                   126127:     int iCellRight = 0;
                   126128: 
                   126129:     for(jj=1; jj<nCell; jj++){
                   126130:       float left = DCOORD(aCell[jj].aCoord[i*2]);
                   126131:       float right = DCOORD(aCell[jj].aCoord[i*2+1]);
                   126132: 
                   126133:       if( left<x1 ) x1 = left;
                   126134:       if( right>x4 ) x4 = right;
                   126135:       if( left>x3 ){
                   126136:         x3 = left;
                   126137:         iCellRight = jj;
                   126138:       }
                   126139:       if( right<x2 ){
                   126140:         x2 = right;
                   126141:         iCellLeft = jj;
                   126142:       }
                   126143:     }
                   126144: 
                   126145:     if( x4!=x1 ){
                   126146:       float normalwidth = (x3 - x2) / (x4 - x1);
                   126147:       if( normalwidth>maxNormalInnerWidth ){
                   126148:         iLeftSeed = iCellLeft;
                   126149:         iRightSeed = iCellRight;
                   126150:       }
                   126151:     }
                   126152:   }
                   126153: 
                   126154:   *piLeftSeed = iLeftSeed;
                   126155:   *piRightSeed = iRightSeed;
                   126156: }
                   126157: #endif /* VARIANT_GUTTMAN_LINEAR_SPLIT */
                   126158: 
                   126159: #if VARIANT_GUTTMAN_QUADRATIC_SPLIT
                   126160: /*
                   126161: ** Implementation of the quadratic variant of the PickNext() function from
                   126162: ** Guttman[84].
                   126163: */
                   126164: static RtreeCell *QuadraticPickNext(
                   126165:   Rtree *pRtree,
                   126166:   RtreeCell *aCell, 
                   126167:   int nCell, 
                   126168:   RtreeCell *pLeftBox, 
                   126169:   RtreeCell *pRightBox,
                   126170:   int *aiUsed
                   126171: ){
                   126172:   #define FABS(a) ((a)<0.0?-1.0*(a):(a))
                   126173: 
                   126174:   int iSelect = -1;
                   126175:   float fDiff;
                   126176:   int ii;
                   126177:   for(ii=0; ii<nCell; ii++){
                   126178:     if( aiUsed[ii]==0 ){
                   126179:       float left = cellGrowth(pRtree, pLeftBox, &aCell[ii]);
                   126180:       float right = cellGrowth(pRtree, pLeftBox, &aCell[ii]);
                   126181:       float diff = FABS(right-left);
                   126182:       if( iSelect<0 || diff>fDiff ){
                   126183:         fDiff = diff;
                   126184:         iSelect = ii;
                   126185:       }
                   126186:     }
                   126187:   }
                   126188:   aiUsed[iSelect] = 1;
                   126189:   return &aCell[iSelect];
                   126190: }
                   126191: 
                   126192: /*
                   126193: ** Implementation of the quadratic variant of the PickSeeds() function from
                   126194: ** Guttman[84].
                   126195: */
                   126196: static void QuadraticPickSeeds(
                   126197:   Rtree *pRtree,
                   126198:   RtreeCell *aCell, 
                   126199:   int nCell, 
                   126200:   int *piLeftSeed, 
                   126201:   int *piRightSeed
                   126202: ){
                   126203:   int ii;
                   126204:   int jj;
                   126205: 
                   126206:   int iLeftSeed = 0;
                   126207:   int iRightSeed = 1;
                   126208:   float fWaste = 0.0;
                   126209: 
                   126210:   for(ii=0; ii<nCell; ii++){
                   126211:     for(jj=ii+1; jj<nCell; jj++){
                   126212:       float right = cellArea(pRtree, &aCell[jj]);
                   126213:       float growth = cellGrowth(pRtree, &aCell[ii], &aCell[jj]);
                   126214:       float waste = growth - right;
                   126215: 
                   126216:       if( waste>fWaste ){
                   126217:         iLeftSeed = ii;
                   126218:         iRightSeed = jj;
                   126219:         fWaste = waste;
                   126220:       }
                   126221:     }
                   126222:   }
                   126223: 
                   126224:   *piLeftSeed = iLeftSeed;
                   126225:   *piRightSeed = iRightSeed;
                   126226: }
                   126227: #endif /* VARIANT_GUTTMAN_QUADRATIC_SPLIT */
                   126228: 
                   126229: /*
                   126230: ** Arguments aIdx, aDistance and aSpare all point to arrays of size
                   126231: ** nIdx. The aIdx array contains the set of integers from 0 to 
                   126232: ** (nIdx-1) in no particular order. This function sorts the values
                   126233: ** in aIdx according to the indexed values in aDistance. For
                   126234: ** example, assuming the inputs:
                   126235: **
                   126236: **   aIdx      = { 0,   1,   2,   3 }
                   126237: **   aDistance = { 5.0, 2.0, 7.0, 6.0 }
                   126238: **
                   126239: ** this function sets the aIdx array to contain:
                   126240: **
                   126241: **   aIdx      = { 0,   1,   2,   3 }
                   126242: **
                   126243: ** The aSpare array is used as temporary working space by the
                   126244: ** sorting algorithm.
                   126245: */
                   126246: static void SortByDistance(
                   126247:   int *aIdx, 
                   126248:   int nIdx, 
                   126249:   float *aDistance, 
                   126250:   int *aSpare
                   126251: ){
                   126252:   if( nIdx>1 ){
                   126253:     int iLeft = 0;
                   126254:     int iRight = 0;
                   126255: 
                   126256:     int nLeft = nIdx/2;
                   126257:     int nRight = nIdx-nLeft;
                   126258:     int *aLeft = aIdx;
                   126259:     int *aRight = &aIdx[nLeft];
                   126260: 
                   126261:     SortByDistance(aLeft, nLeft, aDistance, aSpare);
                   126262:     SortByDistance(aRight, nRight, aDistance, aSpare);
                   126263: 
                   126264:     memcpy(aSpare, aLeft, sizeof(int)*nLeft);
                   126265:     aLeft = aSpare;
                   126266: 
                   126267:     while( iLeft<nLeft || iRight<nRight ){
                   126268:       if( iLeft==nLeft ){
                   126269:         aIdx[iLeft+iRight] = aRight[iRight];
                   126270:         iRight++;
                   126271:       }else if( iRight==nRight ){
                   126272:         aIdx[iLeft+iRight] = aLeft[iLeft];
                   126273:         iLeft++;
                   126274:       }else{
                   126275:         float fLeft = aDistance[aLeft[iLeft]];
                   126276:         float fRight = aDistance[aRight[iRight]];
                   126277:         if( fLeft<fRight ){
                   126278:           aIdx[iLeft+iRight] = aLeft[iLeft];
                   126279:           iLeft++;
                   126280:         }else{
                   126281:           aIdx[iLeft+iRight] = aRight[iRight];
                   126282:           iRight++;
                   126283:         }
                   126284:       }
                   126285:     }
                   126286: 
                   126287: #if 0
                   126288:     /* Check that the sort worked */
                   126289:     {
                   126290:       int jj;
                   126291:       for(jj=1; jj<nIdx; jj++){
                   126292:         float left = aDistance[aIdx[jj-1]];
                   126293:         float right = aDistance[aIdx[jj]];
                   126294:         assert( left<=right );
                   126295:       }
                   126296:     }
                   126297: #endif
                   126298:   }
                   126299: }
                   126300: 
                   126301: /*
                   126302: ** Arguments aIdx, aCell and aSpare all point to arrays of size
                   126303: ** nIdx. The aIdx array contains the set of integers from 0 to 
                   126304: ** (nIdx-1) in no particular order. This function sorts the values
                   126305: ** in aIdx according to dimension iDim of the cells in aCell. The
                   126306: ** minimum value of dimension iDim is considered first, the
                   126307: ** maximum used to break ties.
                   126308: **
                   126309: ** The aSpare array is used as temporary working space by the
                   126310: ** sorting algorithm.
                   126311: */
                   126312: static void SortByDimension(
                   126313:   Rtree *pRtree,
                   126314:   int *aIdx, 
                   126315:   int nIdx, 
                   126316:   int iDim, 
                   126317:   RtreeCell *aCell, 
                   126318:   int *aSpare
                   126319: ){
                   126320:   if( nIdx>1 ){
                   126321: 
                   126322:     int iLeft = 0;
                   126323:     int iRight = 0;
                   126324: 
                   126325:     int nLeft = nIdx/2;
                   126326:     int nRight = nIdx-nLeft;
                   126327:     int *aLeft = aIdx;
                   126328:     int *aRight = &aIdx[nLeft];
                   126329: 
                   126330:     SortByDimension(pRtree, aLeft, nLeft, iDim, aCell, aSpare);
                   126331:     SortByDimension(pRtree, aRight, nRight, iDim, aCell, aSpare);
                   126332: 
                   126333:     memcpy(aSpare, aLeft, sizeof(int)*nLeft);
                   126334:     aLeft = aSpare;
                   126335:     while( iLeft<nLeft || iRight<nRight ){
                   126336:       double xleft1 = DCOORD(aCell[aLeft[iLeft]].aCoord[iDim*2]);
                   126337:       double xleft2 = DCOORD(aCell[aLeft[iLeft]].aCoord[iDim*2+1]);
                   126338:       double xright1 = DCOORD(aCell[aRight[iRight]].aCoord[iDim*2]);
                   126339:       double xright2 = DCOORD(aCell[aRight[iRight]].aCoord[iDim*2+1]);
                   126340:       if( (iLeft!=nLeft) && ((iRight==nRight)
                   126341:        || (xleft1<xright1)
                   126342:        || (xleft1==xright1 && xleft2<xright2)
                   126343:       )){
                   126344:         aIdx[iLeft+iRight] = aLeft[iLeft];
                   126345:         iLeft++;
                   126346:       }else{
                   126347:         aIdx[iLeft+iRight] = aRight[iRight];
                   126348:         iRight++;
                   126349:       }
                   126350:     }
                   126351: 
                   126352: #if 0
                   126353:     /* Check that the sort worked */
                   126354:     {
                   126355:       int jj;
                   126356:       for(jj=1; jj<nIdx; jj++){
                   126357:         float xleft1 = aCell[aIdx[jj-1]].aCoord[iDim*2];
                   126358:         float xleft2 = aCell[aIdx[jj-1]].aCoord[iDim*2+1];
                   126359:         float xright1 = aCell[aIdx[jj]].aCoord[iDim*2];
                   126360:         float xright2 = aCell[aIdx[jj]].aCoord[iDim*2+1];
                   126361:         assert( xleft1<=xright1 && (xleft1<xright1 || xleft2<=xright2) );
                   126362:       }
                   126363:     }
                   126364: #endif
                   126365:   }
                   126366: }
                   126367: 
                   126368: #if VARIANT_RSTARTREE_SPLIT
                   126369: /*
                   126370: ** Implementation of the R*-tree variant of SplitNode from Beckman[1990].
                   126371: */
                   126372: static int splitNodeStartree(
                   126373:   Rtree *pRtree,
                   126374:   RtreeCell *aCell,
                   126375:   int nCell,
                   126376:   RtreeNode *pLeft,
                   126377:   RtreeNode *pRight,
                   126378:   RtreeCell *pBboxLeft,
                   126379:   RtreeCell *pBboxRight
                   126380: ){
                   126381:   int **aaSorted;
                   126382:   int *aSpare;
                   126383:   int ii;
                   126384: 
                   126385:   int iBestDim = 0;
                   126386:   int iBestSplit = 0;
                   126387:   float fBestMargin = 0.0;
                   126388: 
                   126389:   int nByte = (pRtree->nDim+1)*(sizeof(int*)+nCell*sizeof(int));
                   126390: 
                   126391:   aaSorted = (int **)sqlite3_malloc(nByte);
                   126392:   if( !aaSorted ){
                   126393:     return SQLITE_NOMEM;
                   126394:   }
                   126395: 
                   126396:   aSpare = &((int *)&aaSorted[pRtree->nDim])[pRtree->nDim*nCell];
                   126397:   memset(aaSorted, 0, nByte);
                   126398:   for(ii=0; ii<pRtree->nDim; ii++){
                   126399:     int jj;
                   126400:     aaSorted[ii] = &((int *)&aaSorted[pRtree->nDim])[ii*nCell];
                   126401:     for(jj=0; jj<nCell; jj++){
                   126402:       aaSorted[ii][jj] = jj;
                   126403:     }
                   126404:     SortByDimension(pRtree, aaSorted[ii], nCell, ii, aCell, aSpare);
                   126405:   }
                   126406: 
                   126407:   for(ii=0; ii<pRtree->nDim; ii++){
                   126408:     float margin = 0.0;
                   126409:     float fBestOverlap = 0.0;
                   126410:     float fBestArea = 0.0;
                   126411:     int iBestLeft = 0;
                   126412:     int nLeft;
                   126413: 
                   126414:     for(
                   126415:       nLeft=RTREE_MINCELLS(pRtree); 
                   126416:       nLeft<=(nCell-RTREE_MINCELLS(pRtree)); 
                   126417:       nLeft++
                   126418:     ){
                   126419:       RtreeCell left;
                   126420:       RtreeCell right;
                   126421:       int kk;
                   126422:       float overlap;
                   126423:       float area;
                   126424: 
                   126425:       memcpy(&left, &aCell[aaSorted[ii][0]], sizeof(RtreeCell));
                   126426:       memcpy(&right, &aCell[aaSorted[ii][nCell-1]], sizeof(RtreeCell));
                   126427:       for(kk=1; kk<(nCell-1); kk++){
                   126428:         if( kk<nLeft ){
                   126429:           cellUnion(pRtree, &left, &aCell[aaSorted[ii][kk]]);
                   126430:         }else{
                   126431:           cellUnion(pRtree, &right, &aCell[aaSorted[ii][kk]]);
                   126432:         }
                   126433:       }
                   126434:       margin += cellMargin(pRtree, &left);
                   126435:       margin += cellMargin(pRtree, &right);
                   126436:       overlap = cellOverlap(pRtree, &left, &right, 1, -1);
                   126437:       area = cellArea(pRtree, &left) + cellArea(pRtree, &right);
                   126438:       if( (nLeft==RTREE_MINCELLS(pRtree))
                   126439:        || (overlap<fBestOverlap)
                   126440:        || (overlap==fBestOverlap && area<fBestArea)
                   126441:       ){
                   126442:         iBestLeft = nLeft;
                   126443:         fBestOverlap = overlap;
                   126444:         fBestArea = area;
                   126445:       }
                   126446:     }
                   126447: 
                   126448:     if( ii==0 || margin<fBestMargin ){
                   126449:       iBestDim = ii;
                   126450:       fBestMargin = margin;
                   126451:       iBestSplit = iBestLeft;
                   126452:     }
                   126453:   }
                   126454: 
                   126455:   memcpy(pBboxLeft, &aCell[aaSorted[iBestDim][0]], sizeof(RtreeCell));
                   126456:   memcpy(pBboxRight, &aCell[aaSorted[iBestDim][iBestSplit]], sizeof(RtreeCell));
                   126457:   for(ii=0; ii<nCell; ii++){
                   126458:     RtreeNode *pTarget = (ii<iBestSplit)?pLeft:pRight;
                   126459:     RtreeCell *pBbox = (ii<iBestSplit)?pBboxLeft:pBboxRight;
                   126460:     RtreeCell *pCell = &aCell[aaSorted[iBestDim][ii]];
                   126461:     nodeInsertCell(pRtree, pTarget, pCell);
                   126462:     cellUnion(pRtree, pBbox, pCell);
                   126463:   }
                   126464: 
                   126465:   sqlite3_free(aaSorted);
                   126466:   return SQLITE_OK;
                   126467: }
                   126468: #endif
                   126469: 
                   126470: #if VARIANT_GUTTMAN_SPLIT
                   126471: /*
                   126472: ** Implementation of the regular R-tree SplitNode from Guttman[1984].
                   126473: */
                   126474: static int splitNodeGuttman(
                   126475:   Rtree *pRtree,
                   126476:   RtreeCell *aCell,
                   126477:   int nCell,
                   126478:   RtreeNode *pLeft,
                   126479:   RtreeNode *pRight,
                   126480:   RtreeCell *pBboxLeft,
                   126481:   RtreeCell *pBboxRight
                   126482: ){
                   126483:   int iLeftSeed = 0;
                   126484:   int iRightSeed = 1;
                   126485:   int *aiUsed;
                   126486:   int i;
                   126487: 
                   126488:   aiUsed = sqlite3_malloc(sizeof(int)*nCell);
                   126489:   if( !aiUsed ){
                   126490:     return SQLITE_NOMEM;
                   126491:   }
                   126492:   memset(aiUsed, 0, sizeof(int)*nCell);
                   126493: 
                   126494:   PickSeeds(pRtree, aCell, nCell, &iLeftSeed, &iRightSeed);
                   126495: 
                   126496:   memcpy(pBboxLeft, &aCell[iLeftSeed], sizeof(RtreeCell));
                   126497:   memcpy(pBboxRight, &aCell[iRightSeed], sizeof(RtreeCell));
                   126498:   nodeInsertCell(pRtree, pLeft, &aCell[iLeftSeed]);
                   126499:   nodeInsertCell(pRtree, pRight, &aCell[iRightSeed]);
                   126500:   aiUsed[iLeftSeed] = 1;
                   126501:   aiUsed[iRightSeed] = 1;
                   126502: 
                   126503:   for(i=nCell-2; i>0; i--){
                   126504:     RtreeCell *pNext;
                   126505:     pNext = PickNext(pRtree, aCell, nCell, pBboxLeft, pBboxRight, aiUsed);
                   126506:     float diff =  
                   126507:       cellGrowth(pRtree, pBboxLeft, pNext) - 
                   126508:       cellGrowth(pRtree, pBboxRight, pNext)
                   126509:     ;
                   126510:     if( (RTREE_MINCELLS(pRtree)-NCELL(pRight)==i)
                   126511:      || (diff>0.0 && (RTREE_MINCELLS(pRtree)-NCELL(pLeft)!=i))
                   126512:     ){
                   126513:       nodeInsertCell(pRtree, pRight, pNext);
                   126514:       cellUnion(pRtree, pBboxRight, pNext);
                   126515:     }else{
                   126516:       nodeInsertCell(pRtree, pLeft, pNext);
                   126517:       cellUnion(pRtree, pBboxLeft, pNext);
                   126518:     }
                   126519:   }
                   126520: 
                   126521:   sqlite3_free(aiUsed);
                   126522:   return SQLITE_OK;
                   126523: }
                   126524: #endif
                   126525: 
                   126526: static int updateMapping(
                   126527:   Rtree *pRtree, 
                   126528:   i64 iRowid, 
                   126529:   RtreeNode *pNode, 
                   126530:   int iHeight
                   126531: ){
                   126532:   int (*xSetMapping)(Rtree *, sqlite3_int64, sqlite3_int64);
                   126533:   xSetMapping = ((iHeight==0)?rowidWrite:parentWrite);
                   126534:   if( iHeight>0 ){
                   126535:     RtreeNode *pChild = nodeHashLookup(pRtree, iRowid);
                   126536:     if( pChild ){
                   126537:       nodeRelease(pRtree, pChild->pParent);
                   126538:       nodeReference(pNode);
                   126539:       pChild->pParent = pNode;
                   126540:     }
                   126541:   }
                   126542:   return xSetMapping(pRtree, iRowid, pNode->iNode);
                   126543: }
                   126544: 
                   126545: static int SplitNode(
                   126546:   Rtree *pRtree,
                   126547:   RtreeNode *pNode,
                   126548:   RtreeCell *pCell,
                   126549:   int iHeight
                   126550: ){
                   126551:   int i;
                   126552:   int newCellIsRight = 0;
                   126553: 
                   126554:   int rc = SQLITE_OK;
                   126555:   int nCell = NCELL(pNode);
                   126556:   RtreeCell *aCell;
                   126557:   int *aiUsed;
                   126558: 
                   126559:   RtreeNode *pLeft = 0;
                   126560:   RtreeNode *pRight = 0;
                   126561: 
                   126562:   RtreeCell leftbbox;
                   126563:   RtreeCell rightbbox;
                   126564: 
                   126565:   /* Allocate an array and populate it with a copy of pCell and 
                   126566:   ** all cells from node pLeft. Then zero the original node.
                   126567:   */
                   126568:   aCell = sqlite3_malloc((sizeof(RtreeCell)+sizeof(int))*(nCell+1));
                   126569:   if( !aCell ){
                   126570:     rc = SQLITE_NOMEM;
                   126571:     goto splitnode_out;
                   126572:   }
                   126573:   aiUsed = (int *)&aCell[nCell+1];
                   126574:   memset(aiUsed, 0, sizeof(int)*(nCell+1));
                   126575:   for(i=0; i<nCell; i++){
                   126576:     nodeGetCell(pRtree, pNode, i, &aCell[i]);
                   126577:   }
                   126578:   nodeZero(pRtree, pNode);
                   126579:   memcpy(&aCell[nCell], pCell, sizeof(RtreeCell));
                   126580:   nCell++;
                   126581: 
                   126582:   if( pNode->iNode==1 ){
                   126583:     pRight = nodeNew(pRtree, pNode);
                   126584:     pLeft = nodeNew(pRtree, pNode);
                   126585:     pRtree->iDepth++;
                   126586:     pNode->isDirty = 1;
                   126587:     writeInt16(pNode->zData, pRtree->iDepth);
                   126588:   }else{
                   126589:     pLeft = pNode;
                   126590:     pRight = nodeNew(pRtree, pLeft->pParent);
                   126591:     nodeReference(pLeft);
                   126592:   }
                   126593: 
                   126594:   if( !pLeft || !pRight ){
                   126595:     rc = SQLITE_NOMEM;
                   126596:     goto splitnode_out;
                   126597:   }
                   126598: 
                   126599:   memset(pLeft->zData, 0, pRtree->iNodeSize);
                   126600:   memset(pRight->zData, 0, pRtree->iNodeSize);
                   126601: 
                   126602:   rc = AssignCells(pRtree, aCell, nCell, pLeft, pRight, &leftbbox, &rightbbox);
                   126603:   if( rc!=SQLITE_OK ){
                   126604:     goto splitnode_out;
                   126605:   }
                   126606: 
                   126607:   /* Ensure both child nodes have node numbers assigned to them by calling
                   126608:   ** nodeWrite(). Node pRight always needs a node number, as it was created
                   126609:   ** by nodeNew() above. But node pLeft sometimes already has a node number.
                   126610:   ** In this case avoid the all to nodeWrite().
                   126611:   */
                   126612:   if( SQLITE_OK!=(rc = nodeWrite(pRtree, pRight))
                   126613:    || (0==pLeft->iNode && SQLITE_OK!=(rc = nodeWrite(pRtree, pLeft)))
                   126614:   ){
                   126615:     goto splitnode_out;
                   126616:   }
                   126617: 
                   126618:   rightbbox.iRowid = pRight->iNode;
                   126619:   leftbbox.iRowid = pLeft->iNode;
                   126620: 
                   126621:   if( pNode->iNode==1 ){
                   126622:     rc = rtreeInsertCell(pRtree, pLeft->pParent, &leftbbox, iHeight+1);
                   126623:     if( rc!=SQLITE_OK ){
                   126624:       goto splitnode_out;
                   126625:     }
                   126626:   }else{
                   126627:     RtreeNode *pParent = pLeft->pParent;
                   126628:     int iCell;
                   126629:     rc = nodeParentIndex(pRtree, pLeft, &iCell);
                   126630:     if( rc==SQLITE_OK ){
                   126631:       nodeOverwriteCell(pRtree, pParent, &leftbbox, iCell);
                   126632:       rc = AdjustTree(pRtree, pParent, &leftbbox);
                   126633:     }
                   126634:     if( rc!=SQLITE_OK ){
                   126635:       goto splitnode_out;
                   126636:     }
                   126637:   }
                   126638:   if( (rc = rtreeInsertCell(pRtree, pRight->pParent, &rightbbox, iHeight+1)) ){
                   126639:     goto splitnode_out;
                   126640:   }
                   126641: 
                   126642:   for(i=0; i<NCELL(pRight); i++){
                   126643:     i64 iRowid = nodeGetRowid(pRtree, pRight, i);
                   126644:     rc = updateMapping(pRtree, iRowid, pRight, iHeight);
                   126645:     if( iRowid==pCell->iRowid ){
                   126646:       newCellIsRight = 1;
                   126647:     }
                   126648:     if( rc!=SQLITE_OK ){
                   126649:       goto splitnode_out;
                   126650:     }
                   126651:   }
                   126652:   if( pNode->iNode==1 ){
                   126653:     for(i=0; i<NCELL(pLeft); i++){
                   126654:       i64 iRowid = nodeGetRowid(pRtree, pLeft, i);
                   126655:       rc = updateMapping(pRtree, iRowid, pLeft, iHeight);
                   126656:       if( rc!=SQLITE_OK ){
                   126657:         goto splitnode_out;
                   126658:       }
                   126659:     }
                   126660:   }else if( newCellIsRight==0 ){
                   126661:     rc = updateMapping(pRtree, pCell->iRowid, pLeft, iHeight);
                   126662:   }
                   126663: 
                   126664:   if( rc==SQLITE_OK ){
                   126665:     rc = nodeRelease(pRtree, pRight);
                   126666:     pRight = 0;
                   126667:   }
                   126668:   if( rc==SQLITE_OK ){
                   126669:     rc = nodeRelease(pRtree, pLeft);
                   126670:     pLeft = 0;
                   126671:   }
                   126672: 
                   126673: splitnode_out:
                   126674:   nodeRelease(pRtree, pRight);
                   126675:   nodeRelease(pRtree, pLeft);
                   126676:   sqlite3_free(aCell);
                   126677:   return rc;
                   126678: }
                   126679: 
                   126680: /*
                   126681: ** If node pLeaf is not the root of the r-tree and its pParent pointer is 
                   126682: ** still NULL, load all ancestor nodes of pLeaf into memory and populate
                   126683: ** the pLeaf->pParent chain all the way up to the root node.
                   126684: **
                   126685: ** This operation is required when a row is deleted (or updated - an update
                   126686: ** is implemented as a delete followed by an insert). SQLite provides the
                   126687: ** rowid of the row to delete, which can be used to find the leaf on which
                   126688: ** the entry resides (argument pLeaf). Once the leaf is located, this 
                   126689: ** function is called to determine its ancestry.
                   126690: */
                   126691: static int fixLeafParent(Rtree *pRtree, RtreeNode *pLeaf){
                   126692:   int rc = SQLITE_OK;
                   126693:   RtreeNode *pChild = pLeaf;
                   126694:   while( rc==SQLITE_OK && pChild->iNode!=1 && pChild->pParent==0 ){
                   126695:     int rc2 = SQLITE_OK;          /* sqlite3_reset() return code */
                   126696:     sqlite3_bind_int64(pRtree->pReadParent, 1, pChild->iNode);
                   126697:     rc = sqlite3_step(pRtree->pReadParent);
                   126698:     if( rc==SQLITE_ROW ){
                   126699:       RtreeNode *pTest;           /* Used to test for reference loops */
                   126700:       i64 iNode;                  /* Node number of parent node */
                   126701: 
                   126702:       /* Before setting pChild->pParent, test that we are not creating a
                   126703:       ** loop of references (as we would if, say, pChild==pParent). We don't
                   126704:       ** want to do this as it leads to a memory leak when trying to delete
                   126705:       ** the referenced counted node structures.
                   126706:       */
                   126707:       iNode = sqlite3_column_int64(pRtree->pReadParent, 0);
                   126708:       for(pTest=pLeaf; pTest && pTest->iNode!=iNode; pTest=pTest->pParent);
                   126709:       if( !pTest ){
                   126710:         rc2 = nodeAcquire(pRtree, iNode, 0, &pChild->pParent);
                   126711:       }
                   126712:     }
                   126713:     rc = sqlite3_reset(pRtree->pReadParent);
                   126714:     if( rc==SQLITE_OK ) rc = rc2;
                   126715:     if( rc==SQLITE_OK && !pChild->pParent ) rc = SQLITE_CORRUPT_VTAB;
                   126716:     pChild = pChild->pParent;
                   126717:   }
                   126718:   return rc;
                   126719: }
                   126720: 
                   126721: static int deleteCell(Rtree *, RtreeNode *, int, int);
                   126722: 
                   126723: static int removeNode(Rtree *pRtree, RtreeNode *pNode, int iHeight){
                   126724:   int rc;
                   126725:   int rc2;
                   126726:   RtreeNode *pParent = 0;
                   126727:   int iCell;
                   126728: 
                   126729:   assert( pNode->nRef==1 );
                   126730: 
                   126731:   /* Remove the entry in the parent cell. */
                   126732:   rc = nodeParentIndex(pRtree, pNode, &iCell);
                   126733:   if( rc==SQLITE_OK ){
                   126734:     pParent = pNode->pParent;
                   126735:     pNode->pParent = 0;
                   126736:     rc = deleteCell(pRtree, pParent, iCell, iHeight+1);
                   126737:   }
                   126738:   rc2 = nodeRelease(pRtree, pParent);
                   126739:   if( rc==SQLITE_OK ){
                   126740:     rc = rc2;
                   126741:   }
                   126742:   if( rc!=SQLITE_OK ){
                   126743:     return rc;
                   126744:   }
                   126745: 
                   126746:   /* Remove the xxx_node entry. */
                   126747:   sqlite3_bind_int64(pRtree->pDeleteNode, 1, pNode->iNode);
                   126748:   sqlite3_step(pRtree->pDeleteNode);
                   126749:   if( SQLITE_OK!=(rc = sqlite3_reset(pRtree->pDeleteNode)) ){
                   126750:     return rc;
                   126751:   }
                   126752: 
                   126753:   /* Remove the xxx_parent entry. */
                   126754:   sqlite3_bind_int64(pRtree->pDeleteParent, 1, pNode->iNode);
                   126755:   sqlite3_step(pRtree->pDeleteParent);
                   126756:   if( SQLITE_OK!=(rc = sqlite3_reset(pRtree->pDeleteParent)) ){
                   126757:     return rc;
                   126758:   }
                   126759:   
                   126760:   /* Remove the node from the in-memory hash table and link it into
                   126761:   ** the Rtree.pDeleted list. Its contents will be re-inserted later on.
                   126762:   */
                   126763:   nodeHashDelete(pRtree, pNode);
                   126764:   pNode->iNode = iHeight;
                   126765:   pNode->pNext = pRtree->pDeleted;
                   126766:   pNode->nRef++;
                   126767:   pRtree->pDeleted = pNode;
                   126768: 
                   126769:   return SQLITE_OK;
                   126770: }
                   126771: 
                   126772: static int fixBoundingBox(Rtree *pRtree, RtreeNode *pNode){
                   126773:   RtreeNode *pParent = pNode->pParent;
                   126774:   int rc = SQLITE_OK; 
                   126775:   if( pParent ){
                   126776:     int ii; 
                   126777:     int nCell = NCELL(pNode);
                   126778:     RtreeCell box;                            /* Bounding box for pNode */
                   126779:     nodeGetCell(pRtree, pNode, 0, &box);
                   126780:     for(ii=1; ii<nCell; ii++){
                   126781:       RtreeCell cell;
                   126782:       nodeGetCell(pRtree, pNode, ii, &cell);
                   126783:       cellUnion(pRtree, &box, &cell);
                   126784:     }
                   126785:     box.iRowid = pNode->iNode;
                   126786:     rc = nodeParentIndex(pRtree, pNode, &ii);
                   126787:     if( rc==SQLITE_OK ){
                   126788:       nodeOverwriteCell(pRtree, pParent, &box, ii);
                   126789:       rc = fixBoundingBox(pRtree, pParent);
                   126790:     }
                   126791:   }
                   126792:   return rc;
                   126793: }
                   126794: 
                   126795: /*
                   126796: ** Delete the cell at index iCell of node pNode. After removing the
                   126797: ** cell, adjust the r-tree data structure if required.
                   126798: */
                   126799: static int deleteCell(Rtree *pRtree, RtreeNode *pNode, int iCell, int iHeight){
                   126800:   RtreeNode *pParent;
                   126801:   int rc;
                   126802: 
                   126803:   if( SQLITE_OK!=(rc = fixLeafParent(pRtree, pNode)) ){
                   126804:     return rc;
                   126805:   }
                   126806: 
                   126807:   /* Remove the cell from the node. This call just moves bytes around
                   126808:   ** the in-memory node image, so it cannot fail.
                   126809:   */
                   126810:   nodeDeleteCell(pRtree, pNode, iCell);
                   126811: 
                   126812:   /* If the node is not the tree root and now has less than the minimum
                   126813:   ** number of cells, remove it from the tree. Otherwise, update the
                   126814:   ** cell in the parent node so that it tightly contains the updated
                   126815:   ** node.
                   126816:   */
                   126817:   pParent = pNode->pParent;
                   126818:   assert( pParent || pNode->iNode==1 );
                   126819:   if( pParent ){
                   126820:     if( NCELL(pNode)<RTREE_MINCELLS(pRtree) ){
                   126821:       rc = removeNode(pRtree, pNode, iHeight);
                   126822:     }else{
                   126823:       rc = fixBoundingBox(pRtree, pNode);
                   126824:     }
                   126825:   }
                   126826: 
                   126827:   return rc;
                   126828: }
                   126829: 
                   126830: static int Reinsert(
                   126831:   Rtree *pRtree, 
                   126832:   RtreeNode *pNode, 
                   126833:   RtreeCell *pCell, 
                   126834:   int iHeight
                   126835: ){
                   126836:   int *aOrder;
                   126837:   int *aSpare;
                   126838:   RtreeCell *aCell;
                   126839:   float *aDistance;
                   126840:   int nCell;
                   126841:   float aCenterCoord[RTREE_MAX_DIMENSIONS];
                   126842:   int iDim;
                   126843:   int ii;
                   126844:   int rc = SQLITE_OK;
                   126845: 
                   126846:   memset(aCenterCoord, 0, sizeof(float)*RTREE_MAX_DIMENSIONS);
                   126847: 
                   126848:   nCell = NCELL(pNode)+1;
                   126849: 
                   126850:   /* Allocate the buffers used by this operation. The allocation is
                   126851:   ** relinquished before this function returns.
                   126852:   */
                   126853:   aCell = (RtreeCell *)sqlite3_malloc(nCell * (
                   126854:     sizeof(RtreeCell) +         /* aCell array */
                   126855:     sizeof(int)       +         /* aOrder array */
                   126856:     sizeof(int)       +         /* aSpare array */
                   126857:     sizeof(float)               /* aDistance array */
                   126858:   ));
                   126859:   if( !aCell ){
                   126860:     return SQLITE_NOMEM;
                   126861:   }
                   126862:   aOrder    = (int *)&aCell[nCell];
                   126863:   aSpare    = (int *)&aOrder[nCell];
                   126864:   aDistance = (float *)&aSpare[nCell];
                   126865: 
                   126866:   for(ii=0; ii<nCell; ii++){
                   126867:     if( ii==(nCell-1) ){
                   126868:       memcpy(&aCell[ii], pCell, sizeof(RtreeCell));
                   126869:     }else{
                   126870:       nodeGetCell(pRtree, pNode, ii, &aCell[ii]);
                   126871:     }
                   126872:     aOrder[ii] = ii;
                   126873:     for(iDim=0; iDim<pRtree->nDim; iDim++){
                   126874:       aCenterCoord[iDim] += (float)DCOORD(aCell[ii].aCoord[iDim*2]);
                   126875:       aCenterCoord[iDim] += (float)DCOORD(aCell[ii].aCoord[iDim*2+1]);
                   126876:     }
                   126877:   }
                   126878:   for(iDim=0; iDim<pRtree->nDim; iDim++){
                   126879:     aCenterCoord[iDim] = (float)(aCenterCoord[iDim]/((float)nCell*2.0));
                   126880:   }
                   126881: 
                   126882:   for(ii=0; ii<nCell; ii++){
                   126883:     aDistance[ii] = 0.0;
                   126884:     for(iDim=0; iDim<pRtree->nDim; iDim++){
                   126885:       float coord = (float)(DCOORD(aCell[ii].aCoord[iDim*2+1]) - 
                   126886:           DCOORD(aCell[ii].aCoord[iDim*2]));
                   126887:       aDistance[ii] += (coord-aCenterCoord[iDim])*(coord-aCenterCoord[iDim]);
                   126888:     }
                   126889:   }
                   126890: 
                   126891:   SortByDistance(aOrder, nCell, aDistance, aSpare);
                   126892:   nodeZero(pRtree, pNode);
                   126893: 
                   126894:   for(ii=0; rc==SQLITE_OK && ii<(nCell-(RTREE_MINCELLS(pRtree)+1)); ii++){
                   126895:     RtreeCell *p = &aCell[aOrder[ii]];
                   126896:     nodeInsertCell(pRtree, pNode, p);
                   126897:     if( p->iRowid==pCell->iRowid ){
                   126898:       if( iHeight==0 ){
                   126899:         rc = rowidWrite(pRtree, p->iRowid, pNode->iNode);
                   126900:       }else{
                   126901:         rc = parentWrite(pRtree, p->iRowid, pNode->iNode);
                   126902:       }
                   126903:     }
                   126904:   }
                   126905:   if( rc==SQLITE_OK ){
                   126906:     rc = fixBoundingBox(pRtree, pNode);
                   126907:   }
                   126908:   for(; rc==SQLITE_OK && ii<nCell; ii++){
                   126909:     /* Find a node to store this cell in. pNode->iNode currently contains
                   126910:     ** the height of the sub-tree headed by the cell.
                   126911:     */
                   126912:     RtreeNode *pInsert;
                   126913:     RtreeCell *p = &aCell[aOrder[ii]];
                   126914:     rc = ChooseLeaf(pRtree, p, iHeight, &pInsert);
                   126915:     if( rc==SQLITE_OK ){
                   126916:       int rc2;
                   126917:       rc = rtreeInsertCell(pRtree, pInsert, p, iHeight);
                   126918:       rc2 = nodeRelease(pRtree, pInsert);
                   126919:       if( rc==SQLITE_OK ){
                   126920:         rc = rc2;
                   126921:       }
                   126922:     }
                   126923:   }
                   126924: 
                   126925:   sqlite3_free(aCell);
                   126926:   return rc;
                   126927: }
                   126928: 
                   126929: /*
                   126930: ** Insert cell pCell into node pNode. Node pNode is the head of a 
                   126931: ** subtree iHeight high (leaf nodes have iHeight==0).
                   126932: */
                   126933: static int rtreeInsertCell(
                   126934:   Rtree *pRtree,
                   126935:   RtreeNode *pNode,
                   126936:   RtreeCell *pCell,
                   126937:   int iHeight
                   126938: ){
                   126939:   int rc = SQLITE_OK;
                   126940:   if( iHeight>0 ){
                   126941:     RtreeNode *pChild = nodeHashLookup(pRtree, pCell->iRowid);
                   126942:     if( pChild ){
                   126943:       nodeRelease(pRtree, pChild->pParent);
                   126944:       nodeReference(pNode);
                   126945:       pChild->pParent = pNode;
                   126946:     }
                   126947:   }
                   126948:   if( nodeInsertCell(pRtree, pNode, pCell) ){
                   126949: #if VARIANT_RSTARTREE_REINSERT
                   126950:     if( iHeight<=pRtree->iReinsertHeight || pNode->iNode==1){
                   126951:       rc = SplitNode(pRtree, pNode, pCell, iHeight);
                   126952:     }else{
                   126953:       pRtree->iReinsertHeight = iHeight;
                   126954:       rc = Reinsert(pRtree, pNode, pCell, iHeight);
                   126955:     }
                   126956: #else
                   126957:     rc = SplitNode(pRtree, pNode, pCell, iHeight);
                   126958: #endif
                   126959:   }else{
                   126960:     rc = AdjustTree(pRtree, pNode, pCell);
                   126961:     if( rc==SQLITE_OK ){
                   126962:       if( iHeight==0 ){
                   126963:         rc = rowidWrite(pRtree, pCell->iRowid, pNode->iNode);
                   126964:       }else{
                   126965:         rc = parentWrite(pRtree, pCell->iRowid, pNode->iNode);
                   126966:       }
                   126967:     }
                   126968:   }
                   126969:   return rc;
                   126970: }
                   126971: 
                   126972: static int reinsertNodeContent(Rtree *pRtree, RtreeNode *pNode){
                   126973:   int ii;
                   126974:   int rc = SQLITE_OK;
                   126975:   int nCell = NCELL(pNode);
                   126976: 
                   126977:   for(ii=0; rc==SQLITE_OK && ii<nCell; ii++){
                   126978:     RtreeNode *pInsert;
                   126979:     RtreeCell cell;
                   126980:     nodeGetCell(pRtree, pNode, ii, &cell);
                   126981: 
                   126982:     /* Find a node to store this cell in. pNode->iNode currently contains
                   126983:     ** the height of the sub-tree headed by the cell.
                   126984:     */
                   126985:     rc = ChooseLeaf(pRtree, &cell, (int)pNode->iNode, &pInsert);
                   126986:     if( rc==SQLITE_OK ){
                   126987:       int rc2;
                   126988:       rc = rtreeInsertCell(pRtree, pInsert, &cell, (int)pNode->iNode);
                   126989:       rc2 = nodeRelease(pRtree, pInsert);
                   126990:       if( rc==SQLITE_OK ){
                   126991:         rc = rc2;
                   126992:       }
                   126993:     }
                   126994:   }
                   126995:   return rc;
                   126996: }
                   126997: 
                   126998: /*
                   126999: ** Select a currently unused rowid for a new r-tree record.
                   127000: */
                   127001: static int newRowid(Rtree *pRtree, i64 *piRowid){
                   127002:   int rc;
                   127003:   sqlite3_bind_null(pRtree->pWriteRowid, 1);
                   127004:   sqlite3_bind_null(pRtree->pWriteRowid, 2);
                   127005:   sqlite3_step(pRtree->pWriteRowid);
                   127006:   rc = sqlite3_reset(pRtree->pWriteRowid);
                   127007:   *piRowid = sqlite3_last_insert_rowid(pRtree->db);
                   127008:   return rc;
                   127009: }
                   127010: 
                   127011: /*
                   127012: ** Remove the entry with rowid=iDelete from the r-tree structure.
                   127013: */
                   127014: static int rtreeDeleteRowid(Rtree *pRtree, sqlite3_int64 iDelete){
                   127015:   int rc;                         /* Return code */
                   127016:   RtreeNode *pLeaf;               /* Leaf node containing record iDelete */
                   127017:   int iCell;                      /* Index of iDelete cell in pLeaf */
                   127018:   RtreeNode *pRoot;               /* Root node of rtree structure */
                   127019: 
                   127020: 
                   127021:   /* Obtain a reference to the root node to initialise Rtree.iDepth */
                   127022:   rc = nodeAcquire(pRtree, 1, 0, &pRoot);
                   127023: 
                   127024:   /* Obtain a reference to the leaf node that contains the entry 
                   127025:   ** about to be deleted. 
                   127026:   */
                   127027:   if( rc==SQLITE_OK ){
                   127028:     rc = findLeafNode(pRtree, iDelete, &pLeaf);
                   127029:   }
                   127030: 
                   127031:   /* Delete the cell in question from the leaf node. */
                   127032:   if( rc==SQLITE_OK ){
                   127033:     int rc2;
                   127034:     rc = nodeRowidIndex(pRtree, pLeaf, iDelete, &iCell);
                   127035:     if( rc==SQLITE_OK ){
                   127036:       rc = deleteCell(pRtree, pLeaf, iCell, 0);
                   127037:     }
                   127038:     rc2 = nodeRelease(pRtree, pLeaf);
                   127039:     if( rc==SQLITE_OK ){
                   127040:       rc = rc2;
                   127041:     }
                   127042:   }
                   127043: 
                   127044:   /* Delete the corresponding entry in the <rtree>_rowid table. */
                   127045:   if( rc==SQLITE_OK ){
                   127046:     sqlite3_bind_int64(pRtree->pDeleteRowid, 1, iDelete);
                   127047:     sqlite3_step(pRtree->pDeleteRowid);
                   127048:     rc = sqlite3_reset(pRtree->pDeleteRowid);
                   127049:   }
                   127050: 
                   127051:   /* Check if the root node now has exactly one child. If so, remove
                   127052:   ** it, schedule the contents of the child for reinsertion and 
                   127053:   ** reduce the tree height by one.
                   127054:   **
                   127055:   ** This is equivalent to copying the contents of the child into
                   127056:   ** the root node (the operation that Gutman's paper says to perform 
                   127057:   ** in this scenario).
                   127058:   */
                   127059:   if( rc==SQLITE_OK && pRtree->iDepth>0 && NCELL(pRoot)==1 ){
                   127060:     int rc2;
                   127061:     RtreeNode *pChild;
                   127062:     i64 iChild = nodeGetRowid(pRtree, pRoot, 0);
                   127063:     rc = nodeAcquire(pRtree, iChild, pRoot, &pChild);
                   127064:     if( rc==SQLITE_OK ){
                   127065:       rc = removeNode(pRtree, pChild, pRtree->iDepth-1);
                   127066:     }
                   127067:     rc2 = nodeRelease(pRtree, pChild);
                   127068:     if( rc==SQLITE_OK ) rc = rc2;
                   127069:     if( rc==SQLITE_OK ){
                   127070:       pRtree->iDepth--;
                   127071:       writeInt16(pRoot->zData, pRtree->iDepth);
                   127072:       pRoot->isDirty = 1;
                   127073:     }
                   127074:   }
                   127075: 
                   127076:   /* Re-insert the contents of any underfull nodes removed from the tree. */
                   127077:   for(pLeaf=pRtree->pDeleted; pLeaf; pLeaf=pRtree->pDeleted){
                   127078:     if( rc==SQLITE_OK ){
                   127079:       rc = reinsertNodeContent(pRtree, pLeaf);
                   127080:     }
                   127081:     pRtree->pDeleted = pLeaf->pNext;
                   127082:     sqlite3_free(pLeaf);
                   127083:   }
                   127084: 
                   127085:   /* Release the reference to the root node. */
                   127086:   if( rc==SQLITE_OK ){
                   127087:     rc = nodeRelease(pRtree, pRoot);
                   127088:   }else{
                   127089:     nodeRelease(pRtree, pRoot);
                   127090:   }
                   127091: 
                   127092:   return rc;
                   127093: }
                   127094: 
                   127095: /*
                   127096: ** The xUpdate method for rtree module virtual tables.
                   127097: */
                   127098: static int rtreeUpdate(
                   127099:   sqlite3_vtab *pVtab, 
                   127100:   int nData, 
                   127101:   sqlite3_value **azData, 
                   127102:   sqlite_int64 *pRowid
                   127103: ){
                   127104:   Rtree *pRtree = (Rtree *)pVtab;
                   127105:   int rc = SQLITE_OK;
                   127106:   RtreeCell cell;                 /* New cell to insert if nData>1 */
                   127107:   int bHaveRowid = 0;             /* Set to 1 after new rowid is determined */
                   127108: 
                   127109:   rtreeReference(pRtree);
                   127110:   assert(nData>=1);
                   127111: 
                   127112:   /* Constraint handling. A write operation on an r-tree table may return
                   127113:   ** SQLITE_CONSTRAINT for two reasons:
                   127114:   **
                   127115:   **   1. A duplicate rowid value, or
                   127116:   **   2. The supplied data violates the "x2>=x1" constraint.
                   127117:   **
                   127118:   ** In the first case, if the conflict-handling mode is REPLACE, then
                   127119:   ** the conflicting row can be removed before proceeding. In the second
                   127120:   ** case, SQLITE_CONSTRAINT must be returned regardless of the
                   127121:   ** conflict-handling mode specified by the user.
                   127122:   */
                   127123:   if( nData>1 ){
                   127124:     int ii;
                   127125: 
                   127126:     /* Populate the cell.aCoord[] array. The first coordinate is azData[3]. */
                   127127:     assert( nData==(pRtree->nDim*2 + 3) );
                   127128:     if( pRtree->eCoordType==RTREE_COORD_REAL32 ){
                   127129:       for(ii=0; ii<(pRtree->nDim*2); ii+=2){
                   127130:         cell.aCoord[ii].f = (float)sqlite3_value_double(azData[ii+3]);
                   127131:         cell.aCoord[ii+1].f = (float)sqlite3_value_double(azData[ii+4]);
                   127132:         if( cell.aCoord[ii].f>cell.aCoord[ii+1].f ){
                   127133:           rc = SQLITE_CONSTRAINT;
                   127134:           goto constraint;
                   127135:         }
                   127136:       }
                   127137:     }else{
                   127138:       for(ii=0; ii<(pRtree->nDim*2); ii+=2){
                   127139:         cell.aCoord[ii].i = sqlite3_value_int(azData[ii+3]);
                   127140:         cell.aCoord[ii+1].i = sqlite3_value_int(azData[ii+4]);
                   127141:         if( cell.aCoord[ii].i>cell.aCoord[ii+1].i ){
                   127142:           rc = SQLITE_CONSTRAINT;
                   127143:           goto constraint;
                   127144:         }
                   127145:       }
                   127146:     }
                   127147: 
                   127148:     /* If a rowid value was supplied, check if it is already present in 
                   127149:     ** the table. If so, the constraint has failed. */
                   127150:     if( sqlite3_value_type(azData[2])!=SQLITE_NULL ){
                   127151:       cell.iRowid = sqlite3_value_int64(azData[2]);
                   127152:       if( sqlite3_value_type(azData[0])==SQLITE_NULL
                   127153:        || sqlite3_value_int64(azData[0])!=cell.iRowid
                   127154:       ){
                   127155:         int steprc;
                   127156:         sqlite3_bind_int64(pRtree->pReadRowid, 1, cell.iRowid);
                   127157:         steprc = sqlite3_step(pRtree->pReadRowid);
                   127158:         rc = sqlite3_reset(pRtree->pReadRowid);
                   127159:         if( SQLITE_ROW==steprc ){
                   127160:           if( sqlite3_vtab_on_conflict(pRtree->db)==SQLITE_REPLACE ){
                   127161:             rc = rtreeDeleteRowid(pRtree, cell.iRowid);
                   127162:           }else{
                   127163:             rc = SQLITE_CONSTRAINT;
                   127164:             goto constraint;
                   127165:           }
                   127166:         }
                   127167:       }
                   127168:       bHaveRowid = 1;
                   127169:     }
                   127170:   }
                   127171: 
                   127172:   /* If azData[0] is not an SQL NULL value, it is the rowid of a
                   127173:   ** record to delete from the r-tree table. The following block does
                   127174:   ** just that.
                   127175:   */
                   127176:   if( sqlite3_value_type(azData[0])!=SQLITE_NULL ){
                   127177:     rc = rtreeDeleteRowid(pRtree, sqlite3_value_int64(azData[0]));
                   127178:   }
                   127179: 
                   127180:   /* If the azData[] array contains more than one element, elements
                   127181:   ** (azData[2]..azData[argc-1]) contain a new record to insert into
                   127182:   ** the r-tree structure.
                   127183:   */
                   127184:   if( rc==SQLITE_OK && nData>1 ){
                   127185:     /* Insert the new record into the r-tree */
                   127186:     RtreeNode *pLeaf;
                   127187: 
                   127188:     /* Figure out the rowid of the new row. */
                   127189:     if( bHaveRowid==0 ){
                   127190:       rc = newRowid(pRtree, &cell.iRowid);
                   127191:     }
                   127192:     *pRowid = cell.iRowid;
                   127193: 
                   127194:     if( rc==SQLITE_OK ){
                   127195:       rc = ChooseLeaf(pRtree, &cell, 0, &pLeaf);
                   127196:     }
                   127197:     if( rc==SQLITE_OK ){
                   127198:       int rc2;
                   127199:       pRtree->iReinsertHeight = -1;
                   127200:       rc = rtreeInsertCell(pRtree, pLeaf, &cell, 0);
                   127201:       rc2 = nodeRelease(pRtree, pLeaf);
                   127202:       if( rc==SQLITE_OK ){
                   127203:         rc = rc2;
                   127204:       }
                   127205:     }
                   127206:   }
                   127207: 
                   127208: constraint:
                   127209:   rtreeRelease(pRtree);
                   127210:   return rc;
                   127211: }
                   127212: 
                   127213: /*
                   127214: ** The xRename method for rtree module virtual tables.
                   127215: */
                   127216: static int rtreeRename(sqlite3_vtab *pVtab, const char *zNewName){
                   127217:   Rtree *pRtree = (Rtree *)pVtab;
                   127218:   int rc = SQLITE_NOMEM;
                   127219:   char *zSql = sqlite3_mprintf(
                   127220:     "ALTER TABLE %Q.'%q_node'   RENAME TO \"%w_node\";"
                   127221:     "ALTER TABLE %Q.'%q_parent' RENAME TO \"%w_parent\";"
                   127222:     "ALTER TABLE %Q.'%q_rowid'  RENAME TO \"%w_rowid\";"
                   127223:     , pRtree->zDb, pRtree->zName, zNewName 
                   127224:     , pRtree->zDb, pRtree->zName, zNewName 
                   127225:     , pRtree->zDb, pRtree->zName, zNewName
                   127226:   );
                   127227:   if( zSql ){
                   127228:     rc = sqlite3_exec(pRtree->db, zSql, 0, 0, 0);
                   127229:     sqlite3_free(zSql);
                   127230:   }
                   127231:   return rc;
                   127232: }
                   127233: 
                   127234: static sqlite3_module rtreeModule = {
                   127235:   0,                          /* iVersion */
                   127236:   rtreeCreate,                /* xCreate - create a table */
                   127237:   rtreeConnect,               /* xConnect - connect to an existing table */
                   127238:   rtreeBestIndex,             /* xBestIndex - Determine search strategy */
                   127239:   rtreeDisconnect,            /* xDisconnect - Disconnect from a table */
                   127240:   rtreeDestroy,               /* xDestroy - Drop a table */
                   127241:   rtreeOpen,                  /* xOpen - open a cursor */
                   127242:   rtreeClose,                 /* xClose - close a cursor */
                   127243:   rtreeFilter,                /* xFilter - configure scan constraints */
                   127244:   rtreeNext,                  /* xNext - advance a cursor */
                   127245:   rtreeEof,                   /* xEof */
                   127246:   rtreeColumn,                /* xColumn - read data */
                   127247:   rtreeRowid,                 /* xRowid - read data */
                   127248:   rtreeUpdate,                /* xUpdate - write data */
                   127249:   0,                          /* xBegin - begin transaction */
                   127250:   0,                          /* xSync - sync transaction */
                   127251:   0,                          /* xCommit - commit transaction */
                   127252:   0,                          /* xRollback - rollback transaction */
                   127253:   0,                          /* xFindFunction - function overloading */
                   127254:   rtreeRename,                /* xRename - rename the table */
                   127255:   0,                          /* xSavepoint */
                   127256:   0,                          /* xRelease */
                   127257:   0                           /* xRollbackTo */
                   127258: };
                   127259: 
                   127260: static int rtreeSqlInit(
                   127261:   Rtree *pRtree, 
                   127262:   sqlite3 *db, 
                   127263:   const char *zDb, 
                   127264:   const char *zPrefix, 
                   127265:   int isCreate
                   127266: ){
                   127267:   int rc = SQLITE_OK;
                   127268: 
                   127269:   #define N_STATEMENT 9
                   127270:   static const char *azSql[N_STATEMENT] = {
                   127271:     /* Read and write the xxx_node table */
                   127272:     "SELECT data FROM '%q'.'%q_node' WHERE nodeno = :1",
                   127273:     "INSERT OR REPLACE INTO '%q'.'%q_node' VALUES(:1, :2)",
                   127274:     "DELETE FROM '%q'.'%q_node' WHERE nodeno = :1",
                   127275: 
                   127276:     /* Read and write the xxx_rowid table */
                   127277:     "SELECT nodeno FROM '%q'.'%q_rowid' WHERE rowid = :1",
                   127278:     "INSERT OR REPLACE INTO '%q'.'%q_rowid' VALUES(:1, :2)",
                   127279:     "DELETE FROM '%q'.'%q_rowid' WHERE rowid = :1",
                   127280: 
                   127281:     /* Read and write the xxx_parent table */
                   127282:     "SELECT parentnode FROM '%q'.'%q_parent' WHERE nodeno = :1",
                   127283:     "INSERT OR REPLACE INTO '%q'.'%q_parent' VALUES(:1, :2)",
                   127284:     "DELETE FROM '%q'.'%q_parent' WHERE nodeno = :1"
                   127285:   };
                   127286:   sqlite3_stmt **appStmt[N_STATEMENT];
                   127287:   int i;
                   127288: 
                   127289:   pRtree->db = db;
                   127290: 
                   127291:   if( isCreate ){
                   127292:     char *zCreate = sqlite3_mprintf(
                   127293: "CREATE TABLE \"%w\".\"%w_node\"(nodeno INTEGER PRIMARY KEY, data BLOB);"
                   127294: "CREATE TABLE \"%w\".\"%w_rowid\"(rowid INTEGER PRIMARY KEY, nodeno INTEGER);"
                   127295: "CREATE TABLE \"%w\".\"%w_parent\"(nodeno INTEGER PRIMARY KEY, parentnode INTEGER);"
                   127296: "INSERT INTO '%q'.'%q_node' VALUES(1, zeroblob(%d))",
                   127297:       zDb, zPrefix, zDb, zPrefix, zDb, zPrefix, zDb, zPrefix, pRtree->iNodeSize
                   127298:     );
                   127299:     if( !zCreate ){
                   127300:       return SQLITE_NOMEM;
                   127301:     }
                   127302:     rc = sqlite3_exec(db, zCreate, 0, 0, 0);
                   127303:     sqlite3_free(zCreate);
                   127304:     if( rc!=SQLITE_OK ){
                   127305:       return rc;
                   127306:     }
                   127307:   }
                   127308: 
                   127309:   appStmt[0] = &pRtree->pReadNode;
                   127310:   appStmt[1] = &pRtree->pWriteNode;
                   127311:   appStmt[2] = &pRtree->pDeleteNode;
                   127312:   appStmt[3] = &pRtree->pReadRowid;
                   127313:   appStmt[4] = &pRtree->pWriteRowid;
                   127314:   appStmt[5] = &pRtree->pDeleteRowid;
                   127315:   appStmt[6] = &pRtree->pReadParent;
                   127316:   appStmt[7] = &pRtree->pWriteParent;
                   127317:   appStmt[8] = &pRtree->pDeleteParent;
                   127318: 
                   127319:   for(i=0; i<N_STATEMENT && rc==SQLITE_OK; i++){
                   127320:     char *zSql = sqlite3_mprintf(azSql[i], zDb, zPrefix);
                   127321:     if( zSql ){
                   127322:       rc = sqlite3_prepare_v2(db, zSql, -1, appStmt[i], 0); 
                   127323:     }else{
                   127324:       rc = SQLITE_NOMEM;
                   127325:     }
                   127326:     sqlite3_free(zSql);
                   127327:   }
                   127328: 
                   127329:   return rc;
                   127330: }
                   127331: 
                   127332: /*
                   127333: ** The second argument to this function contains the text of an SQL statement
                   127334: ** that returns a single integer value. The statement is compiled and executed
                   127335: ** using database connection db. If successful, the integer value returned
                   127336: ** is written to *piVal and SQLITE_OK returned. Otherwise, an SQLite error
                   127337: ** code is returned and the value of *piVal after returning is not defined.
                   127338: */
                   127339: static int getIntFromStmt(sqlite3 *db, const char *zSql, int *piVal){
                   127340:   int rc = SQLITE_NOMEM;
                   127341:   if( zSql ){
                   127342:     sqlite3_stmt *pStmt = 0;
                   127343:     rc = sqlite3_prepare_v2(db, zSql, -1, &pStmt, 0);
                   127344:     if( rc==SQLITE_OK ){
                   127345:       if( SQLITE_ROW==sqlite3_step(pStmt) ){
                   127346:         *piVal = sqlite3_column_int(pStmt, 0);
                   127347:       }
                   127348:       rc = sqlite3_finalize(pStmt);
                   127349:     }
                   127350:   }
                   127351:   return rc;
                   127352: }
                   127353: 
                   127354: /*
                   127355: ** This function is called from within the xConnect() or xCreate() method to
                   127356: ** determine the node-size used by the rtree table being created or connected
                   127357: ** to. If successful, pRtree->iNodeSize is populated and SQLITE_OK returned.
                   127358: ** Otherwise, an SQLite error code is returned.
                   127359: **
                   127360: ** If this function is being called as part of an xConnect(), then the rtree
                   127361: ** table already exists. In this case the node-size is determined by inspecting
                   127362: ** the root node of the tree.
                   127363: **
                   127364: ** Otherwise, for an xCreate(), use 64 bytes less than the database page-size. 
                   127365: ** This ensures that each node is stored on a single database page. If the 
                   127366: ** database page-size is so large that more than RTREE_MAXCELLS entries 
                   127367: ** would fit in a single node, use a smaller node-size.
                   127368: */
                   127369: static int getNodeSize(
                   127370:   sqlite3 *db,                    /* Database handle */
                   127371:   Rtree *pRtree,                  /* Rtree handle */
                   127372:   int isCreate                    /* True for xCreate, false for xConnect */
                   127373: ){
                   127374:   int rc;
                   127375:   char *zSql;
                   127376:   if( isCreate ){
                   127377:     int iPageSize = 0;
                   127378:     zSql = sqlite3_mprintf("PRAGMA %Q.page_size", pRtree->zDb);
                   127379:     rc = getIntFromStmt(db, zSql, &iPageSize);
                   127380:     if( rc==SQLITE_OK ){
                   127381:       pRtree->iNodeSize = iPageSize-64;
                   127382:       if( (4+pRtree->nBytesPerCell*RTREE_MAXCELLS)<pRtree->iNodeSize ){
                   127383:         pRtree->iNodeSize = 4+pRtree->nBytesPerCell*RTREE_MAXCELLS;
                   127384:       }
                   127385:     }
                   127386:   }else{
                   127387:     zSql = sqlite3_mprintf(
                   127388:         "SELECT length(data) FROM '%q'.'%q_node' WHERE nodeno = 1",
                   127389:         pRtree->zDb, pRtree->zName
                   127390:     );
                   127391:     rc = getIntFromStmt(db, zSql, &pRtree->iNodeSize);
                   127392:   }
                   127393: 
                   127394:   sqlite3_free(zSql);
                   127395:   return rc;
                   127396: }
                   127397: 
                   127398: /* 
                   127399: ** This function is the implementation of both the xConnect and xCreate
                   127400: ** methods of the r-tree virtual table.
                   127401: **
                   127402: **   argv[0]   -> module name
                   127403: **   argv[1]   -> database name
                   127404: **   argv[2]   -> table name
                   127405: **   argv[...] -> column names...
                   127406: */
                   127407: static int rtreeInit(
                   127408:   sqlite3 *db,                        /* Database connection */
                   127409:   void *pAux,                         /* One of the RTREE_COORD_* constants */
                   127410:   int argc, const char *const*argv,   /* Parameters to CREATE TABLE statement */
                   127411:   sqlite3_vtab **ppVtab,              /* OUT: New virtual table */
                   127412:   char **pzErr,                       /* OUT: Error message, if any */
                   127413:   int isCreate                        /* True for xCreate, false for xConnect */
                   127414: ){
                   127415:   int rc = SQLITE_OK;
                   127416:   Rtree *pRtree;
                   127417:   int nDb;              /* Length of string argv[1] */
                   127418:   int nName;            /* Length of string argv[2] */
                   127419:   int eCoordType = (pAux ? RTREE_COORD_INT32 : RTREE_COORD_REAL32);
                   127420: 
                   127421:   const char *aErrMsg[] = {
                   127422:     0,                                                    /* 0 */
                   127423:     "Wrong number of columns for an rtree table",         /* 1 */
                   127424:     "Too few columns for an rtree table",                 /* 2 */
                   127425:     "Too many columns for an rtree table"                 /* 3 */
                   127426:   };
                   127427: 
                   127428:   int iErr = (argc<6) ? 2 : argc>(RTREE_MAX_DIMENSIONS*2+4) ? 3 : argc%2;
                   127429:   if( aErrMsg[iErr] ){
                   127430:     *pzErr = sqlite3_mprintf("%s", aErrMsg[iErr]);
                   127431:     return SQLITE_ERROR;
                   127432:   }
                   127433: 
                   127434:   sqlite3_vtab_config(db, SQLITE_VTAB_CONSTRAINT_SUPPORT, 1);
                   127435: 
                   127436:   /* Allocate the sqlite3_vtab structure */
                   127437:   nDb = strlen(argv[1]);
                   127438:   nName = strlen(argv[2]);
                   127439:   pRtree = (Rtree *)sqlite3_malloc(sizeof(Rtree)+nDb+nName+2);
                   127440:   if( !pRtree ){
                   127441:     return SQLITE_NOMEM;
                   127442:   }
                   127443:   memset(pRtree, 0, sizeof(Rtree)+nDb+nName+2);
                   127444:   pRtree->nBusy = 1;
                   127445:   pRtree->base.pModule = &rtreeModule;
                   127446:   pRtree->zDb = (char *)&pRtree[1];
                   127447:   pRtree->zName = &pRtree->zDb[nDb+1];
                   127448:   pRtree->nDim = (argc-4)/2;
                   127449:   pRtree->nBytesPerCell = 8 + pRtree->nDim*4*2;
                   127450:   pRtree->eCoordType = eCoordType;
                   127451:   memcpy(pRtree->zDb, argv[1], nDb);
                   127452:   memcpy(pRtree->zName, argv[2], nName);
                   127453: 
                   127454:   /* Figure out the node size to use. */
                   127455:   rc = getNodeSize(db, pRtree, isCreate);
                   127456: 
                   127457:   /* Create/Connect to the underlying relational database schema. If
                   127458:   ** that is successful, call sqlite3_declare_vtab() to configure
                   127459:   ** the r-tree table schema.
                   127460:   */
                   127461:   if( rc==SQLITE_OK ){
                   127462:     if( (rc = rtreeSqlInit(pRtree, db, argv[1], argv[2], isCreate)) ){
                   127463:       *pzErr = sqlite3_mprintf("%s", sqlite3_errmsg(db));
                   127464:     }else{
                   127465:       char *zSql = sqlite3_mprintf("CREATE TABLE x(%s", argv[3]);
                   127466:       char *zTmp;
                   127467:       int ii;
                   127468:       for(ii=4; zSql && ii<argc; ii++){
                   127469:         zTmp = zSql;
                   127470:         zSql = sqlite3_mprintf("%s, %s", zTmp, argv[ii]);
                   127471:         sqlite3_free(zTmp);
                   127472:       }
                   127473:       if( zSql ){
                   127474:         zTmp = zSql;
                   127475:         zSql = sqlite3_mprintf("%s);", zTmp);
                   127476:         sqlite3_free(zTmp);
                   127477:       }
                   127478:       if( !zSql ){
                   127479:         rc = SQLITE_NOMEM;
                   127480:       }else if( SQLITE_OK!=(rc = sqlite3_declare_vtab(db, zSql)) ){
                   127481:         *pzErr = sqlite3_mprintf("%s", sqlite3_errmsg(db));
                   127482:       }
                   127483:       sqlite3_free(zSql);
                   127484:     }
                   127485:   }
                   127486: 
                   127487:   if( rc==SQLITE_OK ){
                   127488:     *ppVtab = (sqlite3_vtab *)pRtree;
                   127489:   }else{
                   127490:     rtreeRelease(pRtree);
                   127491:   }
                   127492:   return rc;
                   127493: }
                   127494: 
                   127495: 
                   127496: /*
                   127497: ** Implementation of a scalar function that decodes r-tree nodes to
                   127498: ** human readable strings. This can be used for debugging and analysis.
                   127499: **
                   127500: ** The scalar function takes two arguments, a blob of data containing
                   127501: ** an r-tree node, and the number of dimensions the r-tree indexes.
                   127502: ** For a two-dimensional r-tree structure called "rt", to deserialize
                   127503: ** all nodes, a statement like:
                   127504: **
                   127505: **   SELECT rtreenode(2, data) FROM rt_node;
                   127506: **
                   127507: ** The human readable string takes the form of a Tcl list with one
                   127508: ** entry for each cell in the r-tree node. Each entry is itself a
                   127509: ** list, containing the 8-byte rowid/pageno followed by the 
                   127510: ** <num-dimension>*2 coordinates.
                   127511: */
                   127512: static void rtreenode(sqlite3_context *ctx, int nArg, sqlite3_value **apArg){
                   127513:   char *zText = 0;
                   127514:   RtreeNode node;
                   127515:   Rtree tree;
                   127516:   int ii;
                   127517: 
                   127518:   UNUSED_PARAMETER(nArg);
                   127519:   memset(&node, 0, sizeof(RtreeNode));
                   127520:   memset(&tree, 0, sizeof(Rtree));
                   127521:   tree.nDim = sqlite3_value_int(apArg[0]);
                   127522:   tree.nBytesPerCell = 8 + 8 * tree.nDim;
                   127523:   node.zData = (u8 *)sqlite3_value_blob(apArg[1]);
                   127524: 
                   127525:   for(ii=0; ii<NCELL(&node); ii++){
                   127526:     char zCell[512];
                   127527:     int nCell = 0;
                   127528:     RtreeCell cell;
                   127529:     int jj;
                   127530: 
                   127531:     nodeGetCell(&tree, &node, ii, &cell);
                   127532:     sqlite3_snprintf(512-nCell,&zCell[nCell],"%lld", cell.iRowid);
                   127533:     nCell = strlen(zCell);
                   127534:     for(jj=0; jj<tree.nDim*2; jj++){
                   127535:       sqlite3_snprintf(512-nCell,&zCell[nCell]," %f",(double)cell.aCoord[jj].f);
                   127536:       nCell = strlen(zCell);
                   127537:     }
                   127538: 
                   127539:     if( zText ){
                   127540:       char *zTextNew = sqlite3_mprintf("%s {%s}", zText, zCell);
                   127541:       sqlite3_free(zText);
                   127542:       zText = zTextNew;
                   127543:     }else{
                   127544:       zText = sqlite3_mprintf("{%s}", zCell);
                   127545:     }
                   127546:   }
                   127547:   
                   127548:   sqlite3_result_text(ctx, zText, -1, sqlite3_free);
                   127549: }
                   127550: 
                   127551: static void rtreedepth(sqlite3_context *ctx, int nArg, sqlite3_value **apArg){
                   127552:   UNUSED_PARAMETER(nArg);
                   127553:   if( sqlite3_value_type(apArg[0])!=SQLITE_BLOB 
                   127554:    || sqlite3_value_bytes(apArg[0])<2
                   127555:   ){
                   127556:     sqlite3_result_error(ctx, "Invalid argument to rtreedepth()", -1); 
                   127557:   }else{
                   127558:     u8 *zBlob = (u8 *)sqlite3_value_blob(apArg[0]);
                   127559:     sqlite3_result_int(ctx, readInt16(zBlob));
                   127560:   }
                   127561: }
                   127562: 
                   127563: /*
                   127564: ** Register the r-tree module with database handle db. This creates the
                   127565: ** virtual table module "rtree" and the debugging/analysis scalar 
                   127566: ** function "rtreenode".
                   127567: */
                   127568: SQLITE_PRIVATE int sqlite3RtreeInit(sqlite3 *db){
                   127569:   const int utf8 = SQLITE_UTF8;
                   127570:   int rc;
                   127571: 
                   127572:   rc = sqlite3_create_function(db, "rtreenode", 2, utf8, 0, rtreenode, 0, 0);
                   127573:   if( rc==SQLITE_OK ){
                   127574:     rc = sqlite3_create_function(db, "rtreedepth", 1, utf8, 0,rtreedepth, 0, 0);
                   127575:   }
                   127576:   if( rc==SQLITE_OK ){
                   127577:     void *c = (void *)RTREE_COORD_REAL32;
                   127578:     rc = sqlite3_create_module_v2(db, "rtree", &rtreeModule, c, 0);
                   127579:   }
                   127580:   if( rc==SQLITE_OK ){
                   127581:     void *c = (void *)RTREE_COORD_INT32;
                   127582:     rc = sqlite3_create_module_v2(db, "rtree_i32", &rtreeModule, c, 0);
                   127583:   }
                   127584: 
                   127585:   return rc;
                   127586: }
                   127587: 
                   127588: /*
                   127589: ** A version of sqlite3_free() that can be used as a callback. This is used
                   127590: ** in two places - as the destructor for the blob value returned by the
                   127591: ** invocation of a geometry function, and as the destructor for the geometry
                   127592: ** functions themselves.
                   127593: */
                   127594: static void doSqlite3Free(void *p){
                   127595:   sqlite3_free(p);
                   127596: }
                   127597: 
                   127598: /*
                   127599: ** Each call to sqlite3_rtree_geometry_callback() creates an ordinary SQLite
                   127600: ** scalar user function. This C function is the callback used for all such
                   127601: ** registered SQL functions.
                   127602: **
                   127603: ** The scalar user functions return a blob that is interpreted by r-tree
                   127604: ** table MATCH operators.
                   127605: */
                   127606: static void geomCallback(sqlite3_context *ctx, int nArg, sqlite3_value **aArg){
                   127607:   RtreeGeomCallback *pGeomCtx = (RtreeGeomCallback *)sqlite3_user_data(ctx);
                   127608:   RtreeMatchArg *pBlob;
                   127609:   int nBlob;
                   127610: 
                   127611:   nBlob = sizeof(RtreeMatchArg) + (nArg-1)*sizeof(double);
                   127612:   pBlob = (RtreeMatchArg *)sqlite3_malloc(nBlob);
                   127613:   if( !pBlob ){
                   127614:     sqlite3_result_error_nomem(ctx);
                   127615:   }else{
                   127616:     int i;
                   127617:     pBlob->magic = RTREE_GEOMETRY_MAGIC;
                   127618:     pBlob->xGeom = pGeomCtx->xGeom;
                   127619:     pBlob->pContext = pGeomCtx->pContext;
                   127620:     pBlob->nParam = nArg;
                   127621:     for(i=0; i<nArg; i++){
                   127622:       pBlob->aParam[i] = sqlite3_value_double(aArg[i]);
                   127623:     }
                   127624:     sqlite3_result_blob(ctx, pBlob, nBlob, doSqlite3Free);
                   127625:   }
                   127626: }
                   127627: 
                   127628: /*
                   127629: ** Register a new geometry function for use with the r-tree MATCH operator.
                   127630: */
                   127631: SQLITE_API int sqlite3_rtree_geometry_callback(
                   127632:   sqlite3 *db,
                   127633:   const char *zGeom,
                   127634:   int (*xGeom)(sqlite3_rtree_geometry *, int, double *, int *),
                   127635:   void *pContext
                   127636: ){
                   127637:   RtreeGeomCallback *pGeomCtx;      /* Context object for new user-function */
                   127638: 
                   127639:   /* Allocate and populate the context object. */
                   127640:   pGeomCtx = (RtreeGeomCallback *)sqlite3_malloc(sizeof(RtreeGeomCallback));
                   127641:   if( !pGeomCtx ) return SQLITE_NOMEM;
                   127642:   pGeomCtx->xGeom = xGeom;
                   127643:   pGeomCtx->pContext = pContext;
                   127644: 
                   127645:   /* Create the new user-function. Register a destructor function to delete
                   127646:   ** the context object when it is no longer required.  */
                   127647:   return sqlite3_create_function_v2(db, zGeom, -1, SQLITE_ANY, 
                   127648:       (void *)pGeomCtx, geomCallback, 0, 0, doSqlite3Free
                   127649:   );
                   127650: }
                   127651: 
                   127652: #if !SQLITE_CORE
                   127653: SQLITE_API int sqlite3_extension_init(
                   127654:   sqlite3 *db,
                   127655:   char **pzErrMsg,
                   127656:   const sqlite3_api_routines *pApi
                   127657: ){
                   127658:   SQLITE_EXTENSION_INIT2(pApi)
                   127659:   return sqlite3RtreeInit(db);
                   127660: }
                   127661: #endif
                   127662: 
                   127663: #endif
                   127664: 
                   127665: /************** End of rtree.c ***********************************************/
                   127666: /************** Begin file icu.c *********************************************/
                   127667: /*
                   127668: ** 2007 May 6
                   127669: **
                   127670: ** The author disclaims copyright to this source code.  In place of
                   127671: ** a legal notice, here is a blessing:
                   127672: **
                   127673: **    May you do good and not evil.
                   127674: **    May you find forgiveness for yourself and forgive others.
                   127675: **    May you share freely, never taking more than you give.
                   127676: **
                   127677: *************************************************************************
1.1.1.2   misho    127678: ** $Id$
1.1       misho    127679: **
                   127680: ** This file implements an integration between the ICU library 
                   127681: ** ("International Components for Unicode", an open-source library 
                   127682: ** for handling unicode data) and SQLite. The integration uses 
                   127683: ** ICU to provide the following to SQLite:
                   127684: **
                   127685: **   * An implementation of the SQL regexp() function (and hence REGEXP
                   127686: **     operator) using the ICU uregex_XX() APIs.
                   127687: **
                   127688: **   * Implementations of the SQL scalar upper() and lower() functions
                   127689: **     for case mapping.
                   127690: **
                   127691: **   * Integration of ICU and SQLite collation seqences.
                   127692: **
                   127693: **   * An implementation of the LIKE operator that uses ICU to 
                   127694: **     provide case-independent matching.
                   127695: */
                   127696: 
                   127697: #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_ICU)
                   127698: 
                   127699: /* Include ICU headers */
                   127700: #include <unicode/utypes.h>
                   127701: #include <unicode/uregex.h>
                   127702: #include <unicode/ustring.h>
                   127703: #include <unicode/ucol.h>
                   127704: 
                   127705: 
                   127706: #ifndef SQLITE_CORE
                   127707:   SQLITE_EXTENSION_INIT1
                   127708: #else
                   127709: #endif
                   127710: 
                   127711: /*
                   127712: ** Maximum length (in bytes) of the pattern in a LIKE or GLOB
                   127713: ** operator.
                   127714: */
                   127715: #ifndef SQLITE_MAX_LIKE_PATTERN_LENGTH
                   127716: # define SQLITE_MAX_LIKE_PATTERN_LENGTH 50000
                   127717: #endif
                   127718: 
                   127719: /*
                   127720: ** Version of sqlite3_free() that is always a function, never a macro.
                   127721: */
                   127722: static void xFree(void *p){
                   127723:   sqlite3_free(p);
                   127724: }
                   127725: 
                   127726: /*
                   127727: ** Compare two UTF-8 strings for equality where the first string is
                   127728: ** a "LIKE" expression. Return true (1) if they are the same and 
                   127729: ** false (0) if they are different.
                   127730: */
                   127731: static int icuLikeCompare(
                   127732:   const uint8_t *zPattern,   /* LIKE pattern */
                   127733:   const uint8_t *zString,    /* The UTF-8 string to compare against */
                   127734:   const UChar32 uEsc         /* The escape character */
                   127735: ){
                   127736:   static const int MATCH_ONE = (UChar32)'_';
                   127737:   static const int MATCH_ALL = (UChar32)'%';
                   127738: 
                   127739:   int iPattern = 0;       /* Current byte index in zPattern */
                   127740:   int iString = 0;        /* Current byte index in zString */
                   127741: 
                   127742:   int prevEscape = 0;     /* True if the previous character was uEsc */
                   127743: 
                   127744:   while( zPattern[iPattern]!=0 ){
                   127745: 
                   127746:     /* Read (and consume) the next character from the input pattern. */
                   127747:     UChar32 uPattern;
                   127748:     U8_NEXT_UNSAFE(zPattern, iPattern, uPattern);
                   127749:     assert(uPattern!=0);
                   127750: 
                   127751:     /* There are now 4 possibilities:
                   127752:     **
                   127753:     **     1. uPattern is an unescaped match-all character "%",
                   127754:     **     2. uPattern is an unescaped match-one character "_",
                   127755:     **     3. uPattern is an unescaped escape character, or
                   127756:     **     4. uPattern is to be handled as an ordinary character
                   127757:     */
                   127758:     if( !prevEscape && uPattern==MATCH_ALL ){
                   127759:       /* Case 1. */
                   127760:       uint8_t c;
                   127761: 
                   127762:       /* Skip any MATCH_ALL or MATCH_ONE characters that follow a
                   127763:       ** MATCH_ALL. For each MATCH_ONE, skip one character in the 
                   127764:       ** test string.
                   127765:       */
                   127766:       while( (c=zPattern[iPattern]) == MATCH_ALL || c == MATCH_ONE ){
                   127767:         if( c==MATCH_ONE ){
                   127768:           if( zString[iString]==0 ) return 0;
                   127769:           U8_FWD_1_UNSAFE(zString, iString);
                   127770:         }
                   127771:         iPattern++;
                   127772:       }
                   127773: 
                   127774:       if( zPattern[iPattern]==0 ) return 1;
                   127775: 
                   127776:       while( zString[iString] ){
                   127777:         if( icuLikeCompare(&zPattern[iPattern], &zString[iString], uEsc) ){
                   127778:           return 1;
                   127779:         }
                   127780:         U8_FWD_1_UNSAFE(zString, iString);
                   127781:       }
                   127782:       return 0;
                   127783: 
                   127784:     }else if( !prevEscape && uPattern==MATCH_ONE ){
                   127785:       /* Case 2. */
                   127786:       if( zString[iString]==0 ) return 0;
                   127787:       U8_FWD_1_UNSAFE(zString, iString);
                   127788: 
                   127789:     }else if( !prevEscape && uPattern==uEsc){
                   127790:       /* Case 3. */
                   127791:       prevEscape = 1;
                   127792: 
                   127793:     }else{
                   127794:       /* Case 4. */
                   127795:       UChar32 uString;
                   127796:       U8_NEXT_UNSAFE(zString, iString, uString);
                   127797:       uString = u_foldCase(uString, U_FOLD_CASE_DEFAULT);
                   127798:       uPattern = u_foldCase(uPattern, U_FOLD_CASE_DEFAULT);
                   127799:       if( uString!=uPattern ){
                   127800:         return 0;
                   127801:       }
                   127802:       prevEscape = 0;
                   127803:     }
                   127804:   }
                   127805: 
                   127806:   return zString[iString]==0;
                   127807: }
                   127808: 
                   127809: /*
                   127810: ** Implementation of the like() SQL function.  This function implements
                   127811: ** the build-in LIKE operator.  The first argument to the function is the
                   127812: ** pattern and the second argument is the string.  So, the SQL statements:
                   127813: **
                   127814: **       A LIKE B
                   127815: **
                   127816: ** is implemented as like(B, A). If there is an escape character E, 
                   127817: **
                   127818: **       A LIKE B ESCAPE E
                   127819: **
                   127820: ** is mapped to like(B, A, E).
                   127821: */
                   127822: static void icuLikeFunc(
                   127823:   sqlite3_context *context, 
                   127824:   int argc, 
                   127825:   sqlite3_value **argv
                   127826: ){
                   127827:   const unsigned char *zA = sqlite3_value_text(argv[0]);
                   127828:   const unsigned char *zB = sqlite3_value_text(argv[1]);
                   127829:   UChar32 uEsc = 0;
                   127830: 
                   127831:   /* Limit the length of the LIKE or GLOB pattern to avoid problems
                   127832:   ** of deep recursion and N*N behavior in patternCompare().
                   127833:   */
                   127834:   if( sqlite3_value_bytes(argv[0])>SQLITE_MAX_LIKE_PATTERN_LENGTH ){
                   127835:     sqlite3_result_error(context, "LIKE or GLOB pattern too complex", -1);
                   127836:     return;
                   127837:   }
                   127838: 
                   127839: 
                   127840:   if( argc==3 ){
                   127841:     /* The escape character string must consist of a single UTF-8 character.
                   127842:     ** Otherwise, return an error.
                   127843:     */
                   127844:     int nE= sqlite3_value_bytes(argv[2]);
                   127845:     const unsigned char *zE = sqlite3_value_text(argv[2]);
                   127846:     int i = 0;
                   127847:     if( zE==0 ) return;
                   127848:     U8_NEXT(zE, i, nE, uEsc);
                   127849:     if( i!=nE){
                   127850:       sqlite3_result_error(context, 
                   127851:           "ESCAPE expression must be a single character", -1);
                   127852:       return;
                   127853:     }
                   127854:   }
                   127855: 
                   127856:   if( zA && zB ){
                   127857:     sqlite3_result_int(context, icuLikeCompare(zA, zB, uEsc));
                   127858:   }
                   127859: }
                   127860: 
                   127861: /*
                   127862: ** This function is called when an ICU function called from within
                   127863: ** the implementation of an SQL scalar function returns an error.
                   127864: **
                   127865: ** The scalar function context passed as the first argument is 
                   127866: ** loaded with an error message based on the following two args.
                   127867: */
                   127868: static void icuFunctionError(
                   127869:   sqlite3_context *pCtx,       /* SQLite scalar function context */
                   127870:   const char *zName,           /* Name of ICU function that failed */
                   127871:   UErrorCode e                 /* Error code returned by ICU function */
                   127872: ){
                   127873:   char zBuf[128];
                   127874:   sqlite3_snprintf(128, zBuf, "ICU error: %s(): %s", zName, u_errorName(e));
                   127875:   zBuf[127] = '\0';
                   127876:   sqlite3_result_error(pCtx, zBuf, -1);
                   127877: }
                   127878: 
                   127879: /*
                   127880: ** Function to delete compiled regexp objects. Registered as
                   127881: ** a destructor function with sqlite3_set_auxdata().
                   127882: */
                   127883: static void icuRegexpDelete(void *p){
                   127884:   URegularExpression *pExpr = (URegularExpression *)p;
                   127885:   uregex_close(pExpr);
                   127886: }
                   127887: 
                   127888: /*
                   127889: ** Implementation of SQLite REGEXP operator. This scalar function takes
                   127890: ** two arguments. The first is a regular expression pattern to compile
                   127891: ** the second is a string to match against that pattern. If either 
                   127892: ** argument is an SQL NULL, then NULL Is returned. Otherwise, the result
                   127893: ** is 1 if the string matches the pattern, or 0 otherwise.
                   127894: **
                   127895: ** SQLite maps the regexp() function to the regexp() operator such
                   127896: ** that the following two are equivalent:
                   127897: **
                   127898: **     zString REGEXP zPattern
                   127899: **     regexp(zPattern, zString)
                   127900: **
                   127901: ** Uses the following ICU regexp APIs:
                   127902: **
                   127903: **     uregex_open()
                   127904: **     uregex_matches()
                   127905: **     uregex_close()
                   127906: */
                   127907: static void icuRegexpFunc(sqlite3_context *p, int nArg, sqlite3_value **apArg){
                   127908:   UErrorCode status = U_ZERO_ERROR;
                   127909:   URegularExpression *pExpr;
                   127910:   UBool res;
                   127911:   const UChar *zString = sqlite3_value_text16(apArg[1]);
                   127912: 
                   127913:   (void)nArg;  /* Unused parameter */
                   127914: 
                   127915:   /* If the left hand side of the regexp operator is NULL, 
                   127916:   ** then the result is also NULL. 
                   127917:   */
                   127918:   if( !zString ){
                   127919:     return;
                   127920:   }
                   127921: 
                   127922:   pExpr = sqlite3_get_auxdata(p, 0);
                   127923:   if( !pExpr ){
                   127924:     const UChar *zPattern = sqlite3_value_text16(apArg[0]);
                   127925:     if( !zPattern ){
                   127926:       return;
                   127927:     }
                   127928:     pExpr = uregex_open(zPattern, -1, 0, 0, &status);
                   127929: 
                   127930:     if( U_SUCCESS(status) ){
                   127931:       sqlite3_set_auxdata(p, 0, pExpr, icuRegexpDelete);
                   127932:     }else{
                   127933:       assert(!pExpr);
                   127934:       icuFunctionError(p, "uregex_open", status);
                   127935:       return;
                   127936:     }
                   127937:   }
                   127938: 
                   127939:   /* Configure the text that the regular expression operates on. */
                   127940:   uregex_setText(pExpr, zString, -1, &status);
                   127941:   if( !U_SUCCESS(status) ){
                   127942:     icuFunctionError(p, "uregex_setText", status);
                   127943:     return;
                   127944:   }
                   127945: 
                   127946:   /* Attempt the match */
                   127947:   res = uregex_matches(pExpr, 0, &status);
                   127948:   if( !U_SUCCESS(status) ){
                   127949:     icuFunctionError(p, "uregex_matches", status);
                   127950:     return;
                   127951:   }
                   127952: 
                   127953:   /* Set the text that the regular expression operates on to a NULL
                   127954:   ** pointer. This is not really necessary, but it is tidier than 
                   127955:   ** leaving the regular expression object configured with an invalid
                   127956:   ** pointer after this function returns.
                   127957:   */
                   127958:   uregex_setText(pExpr, 0, 0, &status);
                   127959: 
                   127960:   /* Return 1 or 0. */
                   127961:   sqlite3_result_int(p, res ? 1 : 0);
                   127962: }
                   127963: 
                   127964: /*
                   127965: ** Implementations of scalar functions for case mapping - upper() and 
                   127966: ** lower(). Function upper() converts its input to upper-case (ABC).
                   127967: ** Function lower() converts to lower-case (abc).
                   127968: **
                   127969: ** ICU provides two types of case mapping, "general" case mapping and
                   127970: ** "language specific". Refer to ICU documentation for the differences
                   127971: ** between the two.
                   127972: **
                   127973: ** To utilise "general" case mapping, the upper() or lower() scalar 
                   127974: ** functions are invoked with one argument:
                   127975: **
                   127976: **     upper('ABC') -> 'abc'
                   127977: **     lower('abc') -> 'ABC'
                   127978: **
                   127979: ** To access ICU "language specific" case mapping, upper() or lower()
                   127980: ** should be invoked with two arguments. The second argument is the name
                   127981: ** of the locale to use. Passing an empty string ("") or SQL NULL value
                   127982: ** as the second argument is the same as invoking the 1 argument version
                   127983: ** of upper() or lower().
                   127984: **
                   127985: **     lower('I', 'en_us') -> 'i'
                   127986: **     lower('I', 'tr_tr') -> 'ı' (small dotless i)
                   127987: **
                   127988: ** http://www.icu-project.org/userguide/posix.html#case_mappings
                   127989: */
                   127990: static void icuCaseFunc16(sqlite3_context *p, int nArg, sqlite3_value **apArg){
                   127991:   const UChar *zInput;
                   127992:   UChar *zOutput;
                   127993:   int nInput;
                   127994:   int nOutput;
                   127995: 
                   127996:   UErrorCode status = U_ZERO_ERROR;
                   127997:   const char *zLocale = 0;
                   127998: 
                   127999:   assert(nArg==1 || nArg==2);
                   128000:   if( nArg==2 ){
                   128001:     zLocale = (const char *)sqlite3_value_text(apArg[1]);
                   128002:   }
                   128003: 
                   128004:   zInput = sqlite3_value_text16(apArg[0]);
                   128005:   if( !zInput ){
                   128006:     return;
                   128007:   }
                   128008:   nInput = sqlite3_value_bytes16(apArg[0]);
                   128009: 
                   128010:   nOutput = nInput * 2 + 2;
                   128011:   zOutput = sqlite3_malloc(nOutput);
                   128012:   if( !zOutput ){
                   128013:     return;
                   128014:   }
                   128015: 
                   128016:   if( sqlite3_user_data(p) ){
                   128017:     u_strToUpper(zOutput, nOutput/2, zInput, nInput/2, zLocale, &status);
                   128018:   }else{
                   128019:     u_strToLower(zOutput, nOutput/2, zInput, nInput/2, zLocale, &status);
                   128020:   }
                   128021: 
                   128022:   if( !U_SUCCESS(status) ){
                   128023:     icuFunctionError(p, "u_strToLower()/u_strToUpper", status);
                   128024:     return;
                   128025:   }
                   128026: 
                   128027:   sqlite3_result_text16(p, zOutput, -1, xFree);
                   128028: }
                   128029: 
                   128030: /*
                   128031: ** Collation sequence destructor function. The pCtx argument points to
                   128032: ** a UCollator structure previously allocated using ucol_open().
                   128033: */
                   128034: static void icuCollationDel(void *pCtx){
                   128035:   UCollator *p = (UCollator *)pCtx;
                   128036:   ucol_close(p);
                   128037: }
                   128038: 
                   128039: /*
                   128040: ** Collation sequence comparison function. The pCtx argument points to
                   128041: ** a UCollator structure previously allocated using ucol_open().
                   128042: */
                   128043: static int icuCollationColl(
                   128044:   void *pCtx,
                   128045:   int nLeft,
                   128046:   const void *zLeft,
                   128047:   int nRight,
                   128048:   const void *zRight
                   128049: ){
                   128050:   UCollationResult res;
                   128051:   UCollator *p = (UCollator *)pCtx;
                   128052:   res = ucol_strcoll(p, (UChar *)zLeft, nLeft/2, (UChar *)zRight, nRight/2);
                   128053:   switch( res ){
                   128054:     case UCOL_LESS:    return -1;
                   128055:     case UCOL_GREATER: return +1;
                   128056:     case UCOL_EQUAL:   return 0;
                   128057:   }
                   128058:   assert(!"Unexpected return value from ucol_strcoll()");
                   128059:   return 0;
                   128060: }
                   128061: 
                   128062: /*
                   128063: ** Implementation of the scalar function icu_load_collation().
                   128064: **
                   128065: ** This scalar function is used to add ICU collation based collation 
                   128066: ** types to an SQLite database connection. It is intended to be called
                   128067: ** as follows:
                   128068: **
                   128069: **     SELECT icu_load_collation(<locale>, <collation-name>);
                   128070: **
                   128071: ** Where <locale> is a string containing an ICU locale identifier (i.e.
                   128072: ** "en_AU", "tr_TR" etc.) and <collation-name> is the name of the
                   128073: ** collation sequence to create.
                   128074: */
                   128075: static void icuLoadCollation(
                   128076:   sqlite3_context *p, 
                   128077:   int nArg, 
                   128078:   sqlite3_value **apArg
                   128079: ){
                   128080:   sqlite3 *db = (sqlite3 *)sqlite3_user_data(p);
                   128081:   UErrorCode status = U_ZERO_ERROR;
                   128082:   const char *zLocale;      /* Locale identifier - (eg. "jp_JP") */
                   128083:   const char *zName;        /* SQL Collation sequence name (eg. "japanese") */
                   128084:   UCollator *pUCollator;    /* ICU library collation object */
                   128085:   int rc;                   /* Return code from sqlite3_create_collation_x() */
                   128086: 
                   128087:   assert(nArg==2);
                   128088:   zLocale = (const char *)sqlite3_value_text(apArg[0]);
                   128089:   zName = (const char *)sqlite3_value_text(apArg[1]);
                   128090: 
                   128091:   if( !zLocale || !zName ){
                   128092:     return;
                   128093:   }
                   128094: 
                   128095:   pUCollator = ucol_open(zLocale, &status);
                   128096:   if( !U_SUCCESS(status) ){
                   128097:     icuFunctionError(p, "ucol_open", status);
                   128098:     return;
                   128099:   }
                   128100:   assert(p);
                   128101: 
                   128102:   rc = sqlite3_create_collation_v2(db, zName, SQLITE_UTF16, (void *)pUCollator, 
                   128103:       icuCollationColl, icuCollationDel
                   128104:   );
                   128105:   if( rc!=SQLITE_OK ){
                   128106:     ucol_close(pUCollator);
                   128107:     sqlite3_result_error(p, "Error registering collation function", -1);
                   128108:   }
                   128109: }
                   128110: 
                   128111: /*
                   128112: ** Register the ICU extension functions with database db.
                   128113: */
                   128114: SQLITE_PRIVATE int sqlite3IcuInit(sqlite3 *db){
                   128115:   struct IcuScalar {
                   128116:     const char *zName;                        /* Function name */
                   128117:     int nArg;                                 /* Number of arguments */
                   128118:     int enc;                                  /* Optimal text encoding */
                   128119:     void *pContext;                           /* sqlite3_user_data() context */
                   128120:     void (*xFunc)(sqlite3_context*,int,sqlite3_value**);
                   128121:   } scalars[] = {
                   128122:     {"regexp", 2, SQLITE_ANY,          0, icuRegexpFunc},
                   128123: 
                   128124:     {"lower",  1, SQLITE_UTF16,        0, icuCaseFunc16},
                   128125:     {"lower",  2, SQLITE_UTF16,        0, icuCaseFunc16},
                   128126:     {"upper",  1, SQLITE_UTF16, (void*)1, icuCaseFunc16},
                   128127:     {"upper",  2, SQLITE_UTF16, (void*)1, icuCaseFunc16},
                   128128: 
                   128129:     {"lower",  1, SQLITE_UTF8,         0, icuCaseFunc16},
                   128130:     {"lower",  2, SQLITE_UTF8,         0, icuCaseFunc16},
                   128131:     {"upper",  1, SQLITE_UTF8,  (void*)1, icuCaseFunc16},
                   128132:     {"upper",  2, SQLITE_UTF8,  (void*)1, icuCaseFunc16},
                   128133: 
                   128134:     {"like",   2, SQLITE_UTF8,         0, icuLikeFunc},
                   128135:     {"like",   3, SQLITE_UTF8,         0, icuLikeFunc},
                   128136: 
                   128137:     {"icu_load_collation",  2, SQLITE_UTF8, (void*)db, icuLoadCollation},
                   128138:   };
                   128139: 
                   128140:   int rc = SQLITE_OK;
                   128141:   int i;
                   128142: 
                   128143:   for(i=0; rc==SQLITE_OK && i<(int)(sizeof(scalars)/sizeof(scalars[0])); i++){
                   128144:     struct IcuScalar *p = &scalars[i];
                   128145:     rc = sqlite3_create_function(
                   128146:         db, p->zName, p->nArg, p->enc, p->pContext, p->xFunc, 0, 0
                   128147:     );
                   128148:   }
                   128149: 
                   128150:   return rc;
                   128151: }
                   128152: 
                   128153: #if !SQLITE_CORE
                   128154: SQLITE_API int sqlite3_extension_init(
                   128155:   sqlite3 *db, 
                   128156:   char **pzErrMsg,
                   128157:   const sqlite3_api_routines *pApi
                   128158: ){
                   128159:   SQLITE_EXTENSION_INIT2(pApi)
                   128160:   return sqlite3IcuInit(db);
                   128161: }
                   128162: #endif
                   128163: 
                   128164: #endif
                   128165: 
                   128166: /************** End of icu.c *************************************************/
                   128167: /************** Begin file fts3_icu.c ****************************************/
                   128168: /*
                   128169: ** 2007 June 22
                   128170: **
                   128171: ** The author disclaims copyright to this source code.  In place of
                   128172: ** a legal notice, here is a blessing:
                   128173: **
                   128174: **    May you do good and not evil.
                   128175: **    May you find forgiveness for yourself and forgive others.
                   128176: **    May you share freely, never taking more than you give.
                   128177: **
                   128178: *************************************************************************
                   128179: ** This file implements a tokenizer for fts3 based on the ICU library.
                   128180: */
                   128181: #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3)
                   128182: #ifdef SQLITE_ENABLE_ICU
                   128183: 
                   128184: 
                   128185: #include <unicode/ubrk.h>
                   128186: #include <unicode/utf16.h>
                   128187: 
                   128188: typedef struct IcuTokenizer IcuTokenizer;
                   128189: typedef struct IcuCursor IcuCursor;
                   128190: 
                   128191: struct IcuTokenizer {
                   128192:   sqlite3_tokenizer base;
                   128193:   char *zLocale;
                   128194: };
                   128195: 
                   128196: struct IcuCursor {
                   128197:   sqlite3_tokenizer_cursor base;
                   128198: 
                   128199:   UBreakIterator *pIter;      /* ICU break-iterator object */
                   128200:   int nChar;                  /* Number of UChar elements in pInput */
                   128201:   UChar *aChar;               /* Copy of input using utf-16 encoding */
                   128202:   int *aOffset;               /* Offsets of each character in utf-8 input */
                   128203: 
                   128204:   int nBuffer;
                   128205:   char *zBuffer;
                   128206: 
                   128207:   int iToken;
                   128208: };
                   128209: 
                   128210: /*
                   128211: ** Create a new tokenizer instance.
                   128212: */
                   128213: static int icuCreate(
                   128214:   int argc,                            /* Number of entries in argv[] */
                   128215:   const char * const *argv,            /* Tokenizer creation arguments */
                   128216:   sqlite3_tokenizer **ppTokenizer      /* OUT: Created tokenizer */
                   128217: ){
                   128218:   IcuTokenizer *p;
                   128219:   int n = 0;
                   128220: 
                   128221:   if( argc>0 ){
                   128222:     n = strlen(argv[0])+1;
                   128223:   }
                   128224:   p = (IcuTokenizer *)sqlite3_malloc(sizeof(IcuTokenizer)+n);
                   128225:   if( !p ){
                   128226:     return SQLITE_NOMEM;
                   128227:   }
                   128228:   memset(p, 0, sizeof(IcuTokenizer));
                   128229: 
                   128230:   if( n ){
                   128231:     p->zLocale = (char *)&p[1];
                   128232:     memcpy(p->zLocale, argv[0], n);
                   128233:   }
                   128234: 
                   128235:   *ppTokenizer = (sqlite3_tokenizer *)p;
                   128236: 
                   128237:   return SQLITE_OK;
                   128238: }
                   128239: 
                   128240: /*
                   128241: ** Destroy a tokenizer
                   128242: */
                   128243: static int icuDestroy(sqlite3_tokenizer *pTokenizer){
                   128244:   IcuTokenizer *p = (IcuTokenizer *)pTokenizer;
                   128245:   sqlite3_free(p);
                   128246:   return SQLITE_OK;
                   128247: }
                   128248: 
                   128249: /*
                   128250: ** Prepare to begin tokenizing a particular string.  The input
                   128251: ** string to be tokenized is pInput[0..nBytes-1].  A cursor
                   128252: ** used to incrementally tokenize this string is returned in 
                   128253: ** *ppCursor.
                   128254: */
                   128255: static int icuOpen(
                   128256:   sqlite3_tokenizer *pTokenizer,         /* The tokenizer */
                   128257:   const char *zInput,                    /* Input string */
                   128258:   int nInput,                            /* Length of zInput in bytes */
                   128259:   sqlite3_tokenizer_cursor **ppCursor    /* OUT: Tokenization cursor */
                   128260: ){
                   128261:   IcuTokenizer *p = (IcuTokenizer *)pTokenizer;
                   128262:   IcuCursor *pCsr;
                   128263: 
                   128264:   const int32_t opt = U_FOLD_CASE_DEFAULT;
                   128265:   UErrorCode status = U_ZERO_ERROR;
                   128266:   int nChar;
                   128267: 
                   128268:   UChar32 c;
                   128269:   int iInput = 0;
                   128270:   int iOut = 0;
                   128271: 
                   128272:   *ppCursor = 0;
                   128273: 
                   128274:   if( nInput<0 ){
                   128275:     nInput = strlen(zInput);
                   128276:   }
                   128277:   nChar = nInput+1;
                   128278:   pCsr = (IcuCursor *)sqlite3_malloc(
                   128279:       sizeof(IcuCursor) +                /* IcuCursor */
                   128280:       nChar * sizeof(UChar) +            /* IcuCursor.aChar[] */
                   128281:       (nChar+1) * sizeof(int)            /* IcuCursor.aOffset[] */
                   128282:   );
                   128283:   if( !pCsr ){
                   128284:     return SQLITE_NOMEM;
                   128285:   }
                   128286:   memset(pCsr, 0, sizeof(IcuCursor));
                   128287:   pCsr->aChar = (UChar *)&pCsr[1];
                   128288:   pCsr->aOffset = (int *)&pCsr->aChar[nChar];
                   128289: 
                   128290:   pCsr->aOffset[iOut] = iInput;
                   128291:   U8_NEXT(zInput, iInput, nInput, c); 
                   128292:   while( c>0 ){
                   128293:     int isError = 0;
                   128294:     c = u_foldCase(c, opt);
                   128295:     U16_APPEND(pCsr->aChar, iOut, nChar, c, isError);
                   128296:     if( isError ){
                   128297:       sqlite3_free(pCsr);
                   128298:       return SQLITE_ERROR;
                   128299:     }
                   128300:     pCsr->aOffset[iOut] = iInput;
                   128301: 
                   128302:     if( iInput<nInput ){
                   128303:       U8_NEXT(zInput, iInput, nInput, c);
                   128304:     }else{
                   128305:       c = 0;
                   128306:     }
                   128307:   }
                   128308: 
                   128309:   pCsr->pIter = ubrk_open(UBRK_WORD, p->zLocale, pCsr->aChar, iOut, &status);
                   128310:   if( !U_SUCCESS(status) ){
                   128311:     sqlite3_free(pCsr);
                   128312:     return SQLITE_ERROR;
                   128313:   }
                   128314:   pCsr->nChar = iOut;
                   128315: 
                   128316:   ubrk_first(pCsr->pIter);
                   128317:   *ppCursor = (sqlite3_tokenizer_cursor *)pCsr;
                   128318:   return SQLITE_OK;
                   128319: }
                   128320: 
                   128321: /*
                   128322: ** Close a tokenization cursor previously opened by a call to icuOpen().
                   128323: */
                   128324: static int icuClose(sqlite3_tokenizer_cursor *pCursor){
                   128325:   IcuCursor *pCsr = (IcuCursor *)pCursor;
                   128326:   ubrk_close(pCsr->pIter);
                   128327:   sqlite3_free(pCsr->zBuffer);
                   128328:   sqlite3_free(pCsr);
                   128329:   return SQLITE_OK;
                   128330: }
                   128331: 
                   128332: /*
                   128333: ** Extract the next token from a tokenization cursor.
                   128334: */
                   128335: static int icuNext(
                   128336:   sqlite3_tokenizer_cursor *pCursor,  /* Cursor returned by simpleOpen */
                   128337:   const char **ppToken,               /* OUT: *ppToken is the token text */
                   128338:   int *pnBytes,                       /* OUT: Number of bytes in token */
                   128339:   int *piStartOffset,                 /* OUT: Starting offset of token */
                   128340:   int *piEndOffset,                   /* OUT: Ending offset of token */
                   128341:   int *piPosition                     /* OUT: Position integer of token */
                   128342: ){
                   128343:   IcuCursor *pCsr = (IcuCursor *)pCursor;
                   128344: 
                   128345:   int iStart = 0;
                   128346:   int iEnd = 0;
                   128347:   int nByte = 0;
                   128348: 
                   128349:   while( iStart==iEnd ){
                   128350:     UChar32 c;
                   128351: 
                   128352:     iStart = ubrk_current(pCsr->pIter);
                   128353:     iEnd = ubrk_next(pCsr->pIter);
                   128354:     if( iEnd==UBRK_DONE ){
                   128355:       return SQLITE_DONE;
                   128356:     }
                   128357: 
                   128358:     while( iStart<iEnd ){
                   128359:       int iWhite = iStart;
                   128360:       U8_NEXT(pCsr->aChar, iWhite, pCsr->nChar, c);
                   128361:       if( u_isspace(c) ){
                   128362:         iStart = iWhite;
                   128363:       }else{
                   128364:         break;
                   128365:       }
                   128366:     }
                   128367:     assert(iStart<=iEnd);
                   128368:   }
                   128369: 
                   128370:   do {
                   128371:     UErrorCode status = U_ZERO_ERROR;
                   128372:     if( nByte ){
                   128373:       char *zNew = sqlite3_realloc(pCsr->zBuffer, nByte);
                   128374:       if( !zNew ){
                   128375:         return SQLITE_NOMEM;
                   128376:       }
                   128377:       pCsr->zBuffer = zNew;
                   128378:       pCsr->nBuffer = nByte;
                   128379:     }
                   128380: 
                   128381:     u_strToUTF8(
                   128382:         pCsr->zBuffer, pCsr->nBuffer, &nByte,    /* Output vars */
                   128383:         &pCsr->aChar[iStart], iEnd-iStart,       /* Input vars */
                   128384:         &status                                  /* Output success/failure */
                   128385:     );
                   128386:   } while( nByte>pCsr->nBuffer );
                   128387: 
                   128388:   *ppToken = pCsr->zBuffer;
                   128389:   *pnBytes = nByte;
                   128390:   *piStartOffset = pCsr->aOffset[iStart];
                   128391:   *piEndOffset = pCsr->aOffset[iEnd];
                   128392:   *piPosition = pCsr->iToken++;
                   128393: 
                   128394:   return SQLITE_OK;
                   128395: }
                   128396: 
                   128397: /*
                   128398: ** The set of routines that implement the simple tokenizer
                   128399: */
                   128400: static const sqlite3_tokenizer_module icuTokenizerModule = {
                   128401:   0,                           /* iVersion */
                   128402:   icuCreate,                   /* xCreate  */
                   128403:   icuDestroy,                  /* xCreate  */
                   128404:   icuOpen,                     /* xOpen    */
                   128405:   icuClose,                    /* xClose   */
                   128406:   icuNext,                     /* xNext    */
                   128407: };
                   128408: 
                   128409: /*
                   128410: ** Set *ppModule to point at the implementation of the ICU tokenizer.
                   128411: */
                   128412: SQLITE_PRIVATE void sqlite3Fts3IcuTokenizerModule(
                   128413:   sqlite3_tokenizer_module const**ppModule
                   128414: ){
                   128415:   *ppModule = &icuTokenizerModule;
                   128416: }
                   128417: 
                   128418: #endif /* defined(SQLITE_ENABLE_ICU) */
                   128419: #endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) */
                   128420: 
                   128421: /************** End of fts3_icu.c ********************************************/
                   128422: 
                   128423: #if defined(_MSC_VER) && _MSC_VER < 1300
                   128424: #pragma optimize("", on)
                   128425: #endif

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>